步科PLC与T5UID3屏连接OS代码

[复制链接]
587|0
手机看帖
扫描二维码
随时随地手机跟帖
ZLDW|  楼主 | 2019-1-3 16:41 | 显示全部楼层 |阅读模式
ORG  1000H
    GOTO MAIN  
    ORG  1080H
MAIN:
    CALL INITE  ;初始化串口,用户定时器,初始化使用到得R寄存器
    CALL T300MS ;300ms定时器标志  
    LDBR R0,0X10,1
    LDBR R1,0X00,1        ;确定页码地址,页码寄存器
    MOVXR R10,1,1
    IJNE R11,0X01,READ_I
      CALL READ_Q00
      CALL WRITE_Q00
READ_I:
    IJNE R11,0X02,READ_M
      CALL READ_I00
READ_M:
    IJNE R11,0X03,MAIN_END
      CALL READ_M00
      CALL WRITE_M00
MAIN_END:
    GOTO MAIN   
;***************
;上电初始化   
INITE:   
            IJNE      R255,0,INIRET
            LDBR      R255,1,1
            COMSET    40H,136        ;设置串口4,波特率115200,上电执行一次
            CONFIG 1,2,1             ;用户定时器初始化              
INIRET:     
            RET
  
;******************  

;******************
;300MS定时,每300ms读一次
T300MS:   
    LDBR R30,0X01,1
    LDBR R31,0XF4,1
    MOVDR 37,R20,2
    JU  R20,R30,T300_END
    LDBR  R90,1,1
    LDWR  R20,0
    MOVRD R20,37,2
    LDBR  R250,0,3       
T300_END:
    RET
;******************

;******************
;读线圈Q0.0
READ_Q00:

    IJNE R90,1,READ_Q_END      ;发送一次读DM区指令后,等待响应
    LDBR  R90,0,1              ;清除300ms标志位
    LDBR R100,0X01,2           ;R100从站设备号01,R101功能码01
    LDBR R102,0X00,2           ;读取得线圈地址:Q0.0
    LDBR R104,0X00,1
    LDBR R105,0X01,1           ;读取得字节长度01
    LDBR R10,6,1               ;R100-R105
    CRCA R100,R106,R10         ;6字节做ANSI CRC计算,放入到R106,R107中
    LDBR R9,8,1                ;发送到串口4得字节长度
    COMTXD 4,R100,R9           ;数据发送到串口4
RECIVE_Q:  
    RDXLEN 4,R50               ;串口得数据长度放到R50中;
    IJNE R50,0,RECIVE_Q_handle ;串口接收数据长度不为0,则跳转到RECIVE_handle
    GOTO RECIVE_Q              ;接收数据长度为0,在此处死循环等待响应
   
RECIVE_Q_handle:   
    MOVDR 17,R20,1             ;若接收到数据,读取通讯超时标志位,通讯超时,说明结束数据完成
    IJNE R20,0,RECIVE_Q        ;等于0,则通讯超时,向下继续执行,不等于,循环(跳转到RECIVE_handle)读取通讯超时标志,直到等于0         
      RDXDAT 4,R200,R50        ;读取接收得数据到R200
      LDBR R50,0X00,1          ;清除数据长度缓冲区
      LDBR R0,0X11,1           
      LDBR R1,0X00,1           ;触摸屏对应地址0x1100
      LDBR R202,0X00,1         ;将R202清零
      MOVXR R202,0,1           ;将数据R202,R203写入到0x1100              
READ_Q_END:
    RET
;******************

;******************
;写线圈Q0.0
WRITE_Q00:
    LDBR R0,0X11,1           
    LDBR R1,0X01,1             ;触摸屏对应地址0x1100
    MOVXR R10,1,1
    IJNE R10,0X5A,WRITE_Q_END  
    IJNE R11,0X5A,WRITE_Q_END  ;判断是否有按键按下
    LDBR R10,0X00,2            ;清按键值
    MOVXR R10,0,1
    LDBR R100,0X01,1           ;从站地址01
    LDBR R101,0X05,1           ;功能码05
    LDBR R102,0X00,1           
    LDBR R103,0X00,1           ;写入地址
    IJNE R203,0X00,WRITE_0_Q   ;原值为0,则写1
      LDBR R104,0XFF,1  
      LDBR R105,0X00,1
      GOTO WRITE_Q_SEND
WRITE_0_Q:                     ;原值为1则写0
    LDBR R104,0X00,1  
    LDBR R105,0X00,1  
WRITE_Q_SEND:
    LDBR R10,6,1               ;R100-R105
    CRCA R100,R106,R10         ;6字节做ANSI CRC计算,放入到R106,R107中
    LDBR R9,8,1                ;发送到串口4得字节长度
    COMTXD 4,R100,R9           ;数据发送到串口4
WRITE_Q_RESP:  
    RDXLEN 4,R50               ;串口得数据长度放到R50中;
    IJNE R50,0,WRITE_Q_RESP_OK ;串口接收数据长度不为0,则跳转到RECIVE_handle
    GOTO WRITE_Q_RESP              ;接收数据长度为0,在此处死循环等待响应
   
WRITE_Q_RESP_OK:   
    MOVDR 17,R20,1             ;若接收到数据,读取通讯超时标志位,通讯超时,说明结束数据完成
    IJNE R20,0,WRITE_M_RESP
      RDXDAT 4,R150,R50        ;读取接收得数据到R200
      LDBR R50,0X00,1          ;清除数据长度缓冲区
WRITE_Q_END:
    RET
;******************   
   
;******************
;读输入I0.0
READ_I00:

    IJNE R90,1,READ_I_END      ;发送一次读DM区指令后,等待响应
    LDBR  R90,0,1              ;清除300ms标志位
    LDBR R100,0X01,1           ;R100从站设备号01
    LDBR R101,0X02,1           ;R101功能码02
    LDBR R102,0X00,2           ;读取得地址:I0.0
    LDBR R104,0X00,1
    LDBR R105,0X01,1           ;读取得字节长度01
    LDBR R10,6,1               ;R100-R105
    CRCA R100,R106,R10         ;6字节做ANSI CRC计算,放入到R106,R107中
    LDBR R9,8,1                ;发送到串口4得字节长度
    COMTXD 4,R100,R9           ;数据发送到串口4
RECIVE_I:  
    RDXLEN 4,R50               ;串口得数据长度放到R50中;
    IJNE R50,0,RECIVE_I_handle ;串口接收数据长度不为0,则跳转到RECIVE_handle
    GOTO RECIVE_I              ;接收数据长度为0,在此处死循环等待响应
   
RECIVE_I_handle:   
    MOVDR 17,R20,1             ;若接收到数据,读取通讯超时标志位,通讯超时,说明结束数据完成
    IJNE R20,0,RECIVE_I        ;等于0,则通讯超时,向下继续执行,不等于,循环(跳转到RECIVE_handle)读取通讯超时标志,直到等于0         
      RDXDAT 4,R200,R50        ;读取接收得数据到R200
      LDBR R50,0X00,1          ;清除数据长度缓冲区
      LDBR R0,0X12,1           
      LDBR R1,0X00,1           ;触摸屏对应地址0x1100
      LDBR R202,0X00,1         ;将R202清零
      MOVXR R202,0,1           ;将数据R202,R203写入到0x1100              
READ_I_END:
    RET
;******************

;******************
;读输入M0.0
READ_M00:
    IJNE R90,1,READ_M_END      ;发送一次读DM区指令后,等待响应
    LDBR  R90,0,1              ;清除300ms标志位
    LDBR R100,0X01,1           ;R100从站设备号01
    LDBR R101,0X03,1           ;R101功能码02
    LDBR R102,0X00,1           
    LDBR R103,0X65,1           ;读取得地址:M0.0
    LDBR R104,0X00,1         
    LDBR R105,0X01,1           ;读取得字节长度01
    LDBR R10,6,1               ;R100-R105
    CRCA R100,R106,R10         ;6字节做ANSI CRC计算,放入到R106,R107中
    LDBR R9,8,1                ;发送到串口4得字节长度
    COMTXD 4,R100,R9           ;数据发送到串口4
RECIVE_M:  
    RDXLEN 4,R50               ;串口得数据长度放到R50中;
    IJNE R50,0,RECIVE_M_handle ;串口接收数据长度不为0,则跳转到RECIVE_handle
    GOTO RECIVE_M              ;接收数据长度为0,在此处死循环等待响应
   
RECIVE_M_handle:   
    MOVDR 17,R20,1             ;若接收到数据,读取通讯超时标志位,通讯超时,说明结束数据完成
    IJNE R20,0,RECIVE_M        ;等于0,则通讯超时,向下继续执行,不等于,循环(跳转到RECIVE_handle)读取通讯超时标志,直到等于0         
      RDXDAT 4,R200,R50        ;读取接收得数据到R200
      LDBR R50,0X00,1          ;清除数据长度缓冲区
      
      LDBR R0,0X13,1           
      LDBR R1,0X01,1           ;触摸屏对应地址0x1300
      LDBR R202,0X00,1         ;将R202清零
      MOVXR R202,0,1           ;将数据R202,R203写入到0x1300
      
      LDBR R0,0X13,1           
      LDBR R1,0X00,1           ;触摸屏对应地址0x1300
      LDBR R203,0X00,1         ;将R202清零
      MOVXR R203,0,1           ;将数据R203,R204写入到0x1300              
READ_M_END:
    RET
;******************

;******************
;写线圈Q0.0
WRITE_M00:
    LDBR R0,0X13,1           
    LDBR R1,0X02,1           ;触摸屏对应地址
    MOVXR R10,1,1
    IJNE R10,0X5A,WRITE_M_END
    IJNE R11,0X5A,WRITE_M_END
    LDBR R10,0X00,2            ;清按键值
    MOVXR R10,0,1
    LDBR R100,0X01,1           ;从站地址01
    LDBR R101,0X06,1           ;功能码05
    LDBR R102,0X00,1           
    LDBR R103,0X65,1           ;写入地址
    LDBR R0,0X13,1           
    LDBR R1,0X01,1           ;触摸屏对应地址
    MOVXR R104,1,1
    LDBR R10,6,1               ;R100-R105
    CRCA R100,R106,R10         ;6字节做ANSI CRC计算,放入到R106,R107中
    LDBR R9,8,1                ;发送到串口4得字节长度
    COMTXD 4,R100,R9           ;数据发送到串口4
WRITE_M_RESP:  
    RDXLEN 4,R50               ;串口得数据长度放到R50中;
    IJNE R50,0,WRITE_M_RESP_OK ;串口接收数据长度不为0,则跳转到RECIVE_handle
    GOTO WRITE_M_RESP              ;接收数据长度为0,在此处死循环等待响应
   
WRITE_M_RESP_OK:   
    MOVDR 17,R20,1             ;若接收到数据,读取通讯超时标志位,通讯超时,说明结束数据完成
    IJNE R20,0,WRITE_M_RESP
      RDXDAT 4,R150,R50        ;读取接收得数据到R200
      LDBR R50,0X00,1          ;清除数据长度缓冲区
WRITE_M_END:
    RET
;******************   




相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

34

帖子

1

粉丝