发表于:2004-11-23 15:11:00
2楼
五,PLC程序
这里只以PLC向显示屏写数据为例:
;;初始化串口
TEXT INI_COM "UART:9600,8,E,1;MODE:MC4;"
"DIAG:",FDIAG.T,",",RDIAG.T,";"
;;定义串口和显示屏一样:9600波特率,8个数据位,偶校验,1个停止位,RS485方式
$INIT
SASI 1
INI_COMM
$ENDINIT
;;主程序----
cob 0
0
db wr_r_buf [45] 01H, 57H, 5AH,14H ;;定义向显示屏发送的命令行数据串
cpb 3 ;;调用写数据子程序
ecob
;;主程序完成
;;通信子程序 pb3-------------
PB 3 ;将寄存器R80---R99的数据写到显示器MW90---MW109
SEI 0
LD COUNT
4
LOOP0: GETX R 80
REG_TMP1
COPY REG_TMP1
REG_TMP2
ACC L
SHIR REG_TMP1
8
TFR REG_TMP1
WR_R_BUF
COUNT
INC COUNT
LD REG_TMP1
0FFH
AND REG_TMP2
REG_TMP1
REG_TMP2
TFR REG_TMP2
WR_R_BUF
COUNT
INC COUNT
INI K 19
JR H LOOP0 ;;从 LOOP开始的程序把R 80---R 109的数据放在发送命令区域WR_R_BUF
LD COUNT
0
LD REG_TMP2
0
LOOP1: TFR WR_R_BUF ;
COUNT
REG_TMP1
INC COUNT
ADD REG_TMP1
REG_TMP2
REG_TMP2
CMP COUNT
44
JR N LOOP1
DIV REG_TMP2
100H
REG_TMP1
SD_R ;;计算校验
TFR SD_R
WR_R_BUF ;
COUNT ;;从LOOP1开始的程序把校验结果放在命令行最后一位
LD COUNT
K 0
LOOP2: TFR WR_R_BUF ;
COUNT
SD_R
STH F TFUL
JR H -1
STXD 1
SD_R
INC COUNT
CMP COUNT
25
JR N LOOP2 ;;从LOOP3开始的程序发送写数据命令
LD COUNT
K 0
LOOP3: ACC H
LD CNT
100
STL F RBSY
JR H LP
SRXD 1
SD_R
TFR SD_R
RESPOND
COUNT ;;读返回数据
INC COUNT
CMP COUNT
3
JR N LOOP3
END: NOP
EPB ;;结束程序