关于自由口通讯协议
此协议为亚控公司为实现组态王与德国西门子公司SIMATIC S7-200系列PLC之间的通讯而制定的串行通讯协议,采用主从的问答方式,上位机为主呼方,下位机为应答方。协议格式如
下,最后一字节为校验字节,校验字节为前面所有字节的按位异或值。
上位机从PLC中读数据:
上位机发送读指令:
BYTE1: PLC地址 (1~255)
BYTE2: 0x00 (读指令代码)
BYTE3: 寄存器类型(0-V, 1-Q, 2-I)
BYTE4-5: 起始偏移地址(0-9999)
BYTE6: 数据个数(1~32 n)
BYTE7: 数据类型(1,2,4 m)
BYTE8-11: 保留
BYTE12: 校验字节
PLC应答:
读成功时:
BYTE1: PLC地址 (1~255)
BYTE2: 0x00 (读指令代码)
BYTE3: 寄存器类型(0-V, 1-Q, 2-I)
BYTE4-5: 起始偏移地址(0-9999)
BYTE6: 数据个数(1~32 n)
BYTE7: 数据类型(1,2,4 m)
BYTE8-n*m+8: 数据
BYTEn*m+9: 校验字节
读失败时:
BYTE1: PLC地址 (1~255)
BYTE2: 0x80 (读指令失败代码)
BYTE3: 寄存器类型(0-V, 1-Q, 2-I)
BYTE4-5: 起始偏移地址(0-9999)
BYTE6: 数据个数(1~32 n)
BYTE7: 数据类型(1,2,4 m)
BYTE8: 0x01(校验错代码)
BYTE9-11: 保留
BYTE12: 校验字节
上位机向PLC中写入数据:
上位机发送写指令:
BYTE1: PLC地址 (1~255)
BYTE2: 0x01 (写指令代码)
BYTE3: 寄存器类型(0-V, 1-Q, 2-I)
BYTE4-5: 起始偏移地址(0-9999)
BYTE6: 数据个数(1 n)
BYTE7: 数据类型(1,2,4 m)
BYTE8-11: 写入数据
BYTE12: 校验字节
PLC应答:
写成功时:
BYTE1: PLC地址 (1~255)
BYTE2: 0x01 (写指令代码)
BYTE3: 寄存器类型(0-V, 1-Q, 2-I)
BYTE4-5: 起始偏移地址(0-9999)
BYTE6: 数据个数(1 n)
BYTE7: 数据类型(1,2,4 m)
BYTE8-11: 保留
BYTE12: 校验字节
写失败时:
BYTE1: PLC地址 (1~255)
BYTE2: 0x81 (写指令代码)
BYTE3: 寄存器类型(0-V, 1-Q, 2-I)
BYTE4-5: 起始偏移地址(0-9999)
BYTE6: 数据个数(1 n)
BYTE7: 数据类型(1,2,4 m)
BYTE8: 0x01(校验错代码)
BYTE9-11: 保留
BYTE12: 校验字节
由于采用自由口通信方式后,梯形图程序通过接收中断和发送中断以及发送指令(XMT)控制
通信口的操作。组态王提供了使用STEP 7 Micro/WIN及STEP 7-Micro/DOS编写的一段完整的
通信处理程序,供用户参考。下面将此程序所用到的寄存器资源及其所代表的含义解释如下:
VW8:存放PLC的地址
VW54:存放发送数据按字节异或校验的次数
VD40:存放接收缓冲区的首指针
VB100:接收缓冲区的首字节
VB200:发送缓冲区的首字节
VD60:发送缓冲区的首指针
VW44: 存放接收数据按字节异或校验的次数
VD46:指向接收缓冲区的指针
VD66: 指向发送缓冲区的指针
VD50:指向要读取或写入数据的指针
SMB2:特殊标志位,是自由口接收字符缓冲器。在自由口方式下收到的每个字符都放到这
里便于用户程序进行存取。
SMB30:特殊标志位,是自由口控制寄存器,存放自由口控制字节。
SMB34:时钟中断时间间隔寄存器。
注意:
用户在编制控制程序时请注意不要占用以上寄存器资源。建议用户程序使用V300以后的
寄存器。
用户需根据每台PLC的实际地址,更改VW8的值。
对于特殊标志位的使用,请参照相关编程参考手册。