国网去年4月份出了一个《智慧变电站技术规范第 4 部分:数字化远传表计(试行版)》,对SF6数字化密度表、避雷器数字化泄漏电流表、变压器数字化油温计等设备数据通信做了要求。数字化感知单元与监测模块之间宜采用有线通信方式,必要时也可采用无线方式通信。
RS485 接口传输协议应采用 Modbus 协议,波特率 9600bps,帧格式 1 个起始位、 8 个数据位、 1 个奇偶校验位、 1 个停止位,具体通信规范应符合附录 C 所规定的要求,帧校验规则见附录 D, TLV 数据类型表定义见附录 E;
最近刚好做了通信协议方面的检测,对测试过程发现的问题做个记录。
通信协议部分依照如下的表格进行测试:
肯定检测部分都是没有问题的,这部分在编程时可以根据报文例子自行进行验证。通信否定检测没有特别明确的规定,需要注意一下。
按照读取单个对应否定测试的要求,返回指定的异常代码:
读取单个对象否定测试:
1 错误的地址、 --不回应
2 错误的功能码、 --回应--差错码+异常码01
3 错误的数据体长度、 --回应--差错码+异常码03
4 错误的SFUN、 --回应--差错码+异常码01
5 错误的对象、 --回应--差错码+异常码02
6 错误的 CRC 校验 --不回应
等异常读取单个对象请求命令,装置应能识别。
写入单个对象的否定检测:
1 测试工具分别发送错误的地址、 --不回应
2 错误的功能码、 --回应--差错码+异常码01
3 错误的数据体长度、 --回应--差错码+异常码03
4 错误的SFUN、 --回应--差错码+异常码01
5 错误的对象、 --回应--差错码+异常码02
6 错误的 TLV 数据、 --回应--差错码+异常码03
7 错误的数据范围、 --回应--差错码+异常码03
8 错误的 CRC 校验 --不回应
等异常写入单个对象请求命令,装置应能识别。
读取多个对象和写多个对象的否定测试类似。
此外有些设备的波特率是固定的,如果修改为其他波特率的话,可以返回03错误码。如果修改波特率为指定波特率的话,需要返回正确数据。 比如你设备的波特率固定为9600,如果用户修改成9600,设备返回修改成功,如果用户修改为4800,返回03错误码。
此外数字化表计宜能够存储至少 10000 条的监测数据及运行状态信息并可导出,数据记录组织格式见附录 H;
读记录的读取没有明文规定所需的通信协议。检测机构推荐使用GBT 19582.1-2008 基于Modbus协议的工业自动化网络规范 第1部分:Modbus应用协议 中(0x14)读文件记录的功能码进行读取。
测试时的一些注意事项:
1. 文件号用户可以自己进行定义,记录号必须是0~9999。每个文件下最大只能保存10000条记录。 超过10000条数据,需要指定其他文件号。
2. 另外标准规定记录号的取值范围是十进制的 0 到 9999 。记录号为0的记录可以定义为最新的记录(即最新记录中的时间戳的值最大),那么记录号为9999的记录就是最早的记录;记录号为0的记录也可以定义为最早的记录(即最早记录中的时间戳的值最小),那么记录号为9999的记录就是最新的记录。这个记录号为0对应最新记录还是最早记录的情况你们自定义就行。通常应该是记录号为0对应最新的记录(即最新记录中的时间戳的值最大)
3. 没规定数据类型,就按照modbus来,高字节在前。如果规定了数据类型则是低字节在前。比如:
长度字段需要按照modbus的格式,高字节在前。雷击计数就需要按照表计的格式,低字节在前。