我现在用自由口协议,通过计算机控制PLC的寄存器,在计算机向PLC写命令的时候出现了奇怪的现象:只能写进去一次,第二次再往同样的PLC寄存器中写数据的时候,PLC的该寄存器就不变化了,所以我现在没有办法通过计算机对PLC的一个寄存器进行控制。
以下是我的通信程序片段,请各位师兄指教,谢谢。主程序:
NETWORK 1
LD SM0.1 //第一次扫描调用初始化子程序
CALL initialize
NETWORK 3
LDB= VB134, VB199 //指令中的站地址与本机站地址相符
AB= VB102, 6 //指令类型为写指令
A M0.0 //调用写子程序
CALL Write
NETWORK 5
LD SM4.5 //当端口空闲时启动RCV
RCV VB100, 0
初始化程序:
NETWORK 1
LD SM0.0
MOVB 5, SMB30 //0口"19200,N,8,1"
NETWORK 2
LD SM0.0 //RCV指令初始化
MOVB 16#EC, SMB87
MOVB 103, SMB88
MOVB 71, SMB89
MOVW +1000, SMW92
MOVB 35, SMB94
R SM87.2, 1
NETWORK 3
LD SM0.0
ATCH RCVcomplete, 23 //连接口0接收完成的中断
NETWORK 4
LD SM0.0
ATCH XMTcomplete, 9 //连接口0发送完成的中断
NETWORK 5
LD SM0.0
ENI //中断允许
NETWORK 6
LD SM0.0
MOVB 2, VB199 //将本机站地址装入寄存器
接收完成中断:
NETWORK 1
LD SM0.0
ATH VB103, VB134, 2 //指令译码(ASCII码到十六进制)
ATH VB105, VB135, 8
ATH VB113, VB139, 2
S M0.0, 1
发送完成中断:
NETWORK 1
LD SM0.0
S SM87.7, 1 //允许口0进行接收
MOVB 0, VB131 //接收缓冲区中存放指令结束字符的字节清零
R M0.0, 1
PC向PLC写数据:
NETWORK 1
LD SM0.0 //停止端口0的接收
R SM87.7, 1
R M0.0, 1
RCV VB100, 0
NETWORK 2
LD SM0.0 //装入要写如数据源的地址指针
MOVD &VB115, VD145
NETWORK 3
LD SM0.0 //写入数据
ATH *VD145, *VD135, VB139