
一、规则
(1)下行和上行报文分别用“发:”和“收:”区别开来。在颜色上也不同,发为绿色,收为蓝色。报文不论对错,只要是从串口和得到的数据都会显示出来。所以有时可以直接根据报文显示的情况发现一些问题。具体见第二大条。
(2)报头和报尾:所有完整报文帧的报头一定以字符“@”开始,最后以“*”和一个回车符(界面上是不可见的,但如果用鼠标左键选中报文尾部,是可以看到此字符确实存在且能够被选择,只是无法显示出来)结束。如果没有这两个明显的字符,此帧是无效帧,不会参与处理。
(3)PLC回应信息符(也就是指编程手册中的结束码):一共用两个字符来表示,这是对当前通讯状态的一个比较重要的指示,表示了本次问答的PLC与后台间数据的交换是否正常。具体各数值的意义见第二大条。本PLC回应信息符位于回答帧的第六和第七两个字符。如正常回答时,前面一部分报文会是:@01RD00 0000……。PLC回复的回应信息符就是这里的字符D后面紧跟的那两个字符。这里00是表示正常回应,如果FCS校验也正确的话,那么一切都OK,可以对本帧数据进行处理了。注意,如果是某些遥控或者强制等WR命令时,PLC回复的回应信息符就是字符R后面紧跟的那两个字符了。非00表示出错了。
(4)协议是遵守MODBUS协议的。所以如果对MODBUS协议有一定了解的话,本报文是很容易看懂的。无论上行还是下行报文,帧格式都为:
报头(即@)+ 机号 + 命令 + 起始地址 + 长度 + FCS校验 + 报尾(即 *+回车符 )
参考报文:
发:@01RD0020001155*
收:@01RD00 0001 300E 0000 0000 0000 0000 0000 0000 0000 0000 0000 55*
报头和报尾不再赘述。
机号:一号机为01,二号机为02,为PLC设置里面下传时设定,需对应起来。
命令:常用到的是读命令RD和写命令WR、WD。以前的另一种PLC型号出现过扩展区E区,所以对应还有RE,WE等命令。
起始地址:表示本帧的读或者写操作的对象区域开始处。与PLC程序里面的内存区完全对应。如协议中规定在PLC里面放置当前水机事故个数到D0020里面。那么上面例子中的RD0020….就会对从D0020这个寄存器开始读起。返回报文的第一个字就是D0020,也就是当前的事故条数了。
长度:要进行读或者写操作区域的长度。
FCS校验:PLC硬件自动响应上传报文及自动计算和校验FCS校验码,不用PLC程序进行额外的编写。
报文中各字符在程序中体现的数据含义的在参考说明书中的设置后,再结合看第三条的详细解释。
二、出错提示
(1)报文是乱码,可能原因是RS422的接线出错,请仔细检查。也可能是PLC的第四个通讯拨码没有拨(一般发货前会在一楼联调时拨好)。
(2)运行过程中,数据不来,或者事故不上传,遥测遥信数据不对等其它不正常情况。首先是要根据回应信息符来判断,如果回应信息帧正确(为00),那么就要查是不是PLC程序中出了问题了。不为00时,要根据下面的列表来解决问题了。
| 字符 | 内容 | 可能原因 | 改正措施 |
| 00 | 正常完成 | ||
| 01 | 运行方式下不执行 | PLC在运行方式下,不能执行发送的命令 | 检查命令和PLC模式之间的关系 |
| 02 | 监控方式下不执行 | PLC在监控方式下,不能执行发送的命令 | |
| 03 | UM写保护 | PLC的UM处于写保护 | PLC上DIP开关的脚1置OFF |
| 04 | 地址超出区域 | 设置在SV读命令或SV修改命令中地址超出65,535最大值 | 改正程序的地址设置,再传送命令 |
| 13 | FCS错误 | FCS计算错误或者噪声干扰 | 检查FCS、确定是否是噪声干扰 |
| 14 | 格式错误 | 命令格式错误或者不可分割的命令被分割 | 检查格式,再送命令 |
| 15 | 入口码数据错误 | 数据超出规定范围或太长 | 修改数据再传送传送命令 |
| 16 | 命令不不支持 | 程序中不存在SV读命令或SV修改命令中指定操作数 | 改正命令和程序 |
| 18 | 帧长度错误 | 超过最大的帧长度132个字节(如帧超过280个字节,接收溢出标志变ON,不再返回应答) | 检查命令,必要是分成若干帧 |
| 19 | 不执行 | 读的项没有用组合命令(QQ)登记过 | 在批形式读之前,执行QQ命令登记读的项 |
| 23 | 用户存储器写保护 | C200HX/HG/HG上DIP开关脚1为ON | 置为OFF |
| A3 | 传送数据时因FCS错误引起中止 | 在第二帧或后面的帧中出现FCS错误 | 检查FCS计算方法、噪声干扰,再送 |
| A4 | 传送数据时因格式错误引起中止 | 命令格式与第二或后面的帧中字节数不匹配 | 检查格式再传 |
| A5 | 传送数据时因入口码数据错误引起中止 | 在第二或后面的帧中有入口码数据错误 | 修改数据再传送命令 |
| A8 | 传送数据时因帧长度错误引起中止 | 第二或后面帧的长度超过最大值132个字节 | 保持帧不超过132字节 |
选择的是黄洋口的报文,是一台PLC带两台机组,数据量比较密集点,所以回复报文的数据位置和常规使用的PLC中数据的摆放位置是略有提前了,但不影响此处对报文进行解释。
发:@01RD0020001155*
收:@01RD00 0000 300E 0410 A040 2508 1800 0200 0000 0000 0000 0000 55*
发:@01RD0031003056*
收:@01RD00 6101 5C01 01 0100 3A01 3F01 3501 8A13 2439 9D0C D003 CE00 C900 CA00 F300 0F01 02F0 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 22*
显然PLC的应答报文中的结束字符,也就是回应信息帧是正常的“00”,所以是正常报文。
报文按00200011,00310030,00610030,0091030的规则发下去,遥信和事故个数帧是十一个字一查询(根据协议第一个字是事故个数,后面十个连续字为遥信状态开关量),而每条遥测下发报文的“长度”字符是三十个字一加。
就上面的报文内容来讲:
遥信和事故个数帧内容包括:(1)无事故产生。(2)开关量有产生的,具体内容从0021~0030这十个字的二进制码来进行对位。分别对应第一个遥信到第一在六十个遥信量。
遥测帧说明了数据上正常上传,显示的是十六进制码。程序进行计算后转送到RDCSERVER中去让别的程序调用。
注意本处是特殊的协议所以没有讲电压、电流、功率等具体数据的位置,一般也用不到的。得到报文,再根据PLC.INI文件中的正确设置,程序会将各数据对应放好。
