今天在网上终于找到了有关PLC与变频器通信,我要发送一个数据到变频器的参数P001,这些址和数据地址要放在哪里了,但对里面的CRC校验数据有点不明白,我要发送1到P001的话,1就是放在数据地址里,P001就是放在被写地址里,那CRC又不是我想要的,这是通信时要校验发送数据是不是正确的一个程序,这个校验码哪里来啊,还有这个被写地址的高位是P还是P0被写地址的低位是001还是01?对
PLC内存使用说明
西门子S7-200系列PLC的自由通讯端口编程必定会用到两个指令,即XMT(发送)指令和RCV(接收)指令。编写程序时需要为这两个指令指定数据缓冲区,一般以最低位数为0的地址作为数据缓冲区的起始地址。
1.发送指令XMT缓冲区(写/读)
VB100 //xmt指令要发送的字节个数
VB101 //变频器通讯地址(01)
VB102 //modbus功能码(06/03)
VB103 //变频器被写地址高位/变频器被读起始地址高位
VB104 //变频器被写地址低位/变频器被读起始地址低位
VB105 //被写数据高位/被读数据字个数高位
VB106 //被写数据低位/被读数据字个数低位
VB107 //被发送数据CRC低位
VB108 //被发送数据CRC高位
2.接收指令RCV缓冲区
VB200 //rcv指令要接收的字节个数
VB201 //变频器地址(01)
VB202 //modbus功能码(06/03)
VB203 //变频器被写地址高位/被读数据字节个数高位
VB204 //变频器被写地址低位/被读数据字节个数低位
VB205 //被写数据高位/被读数据高位
VB206 //被写数据低位/被读数据低位
VB207 //被接收数据CRC低位
VB208 //被接收数据CRC高位
VB217 //被接收数据CRC验算低位
VB218 //被接收数据CRC验算高位
最佳答案
既然是modbus协议,我建议你在plc编程前,先使用modscan软件测试与变频器的通讯,并可以从modscan软件中读出报文内容和格式。然后在200软件的数据块中添加已获得的规则化的报文,发送即可。注:调试modbus协议必须配有modscan软件和串口调试软件,这两软件可以使协议报文更加明郎,提高工程师工作效率。另,可加1093079077进一步详谈lcr、crc校验方式。
modbus协议的RTU模式的校验使用CRC校验。
生成CRC-16校验字节的步骤如下:
①如一个16位寄存器,所有数字均为1。
②该16位寄存器的低位字节与开始8位字节(报文的第一个字节)进行“异或”运算。运算结果放入这个16位寄存器。
③把这个16寄存器向右移一位。
④若向右(标记位)移出的数字是1,则生成多项式1010000000000001和这个寄存器进行“异或”运算;若向右移出的数位是
0,则返回③。
⑤重复③和④,直至移出8位。
⑥另外8位(报文接下来的下一个字节)与该十六位寄存器进行“异或”运算。
⑦重复③~⑥,直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。
⑧这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。
CRC添加到消息中时,低字节先加入,然后高字节。
再次强调:调试modbus协议最好配有modscan软件和串口调试软件,这两软件可以使协议报文更加明郎,提高工程师工作效率。
提问者对于答案的评价:
谢谢你了,
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345740.html