西门子S7-200PLC在与英威腾变频器Modbus通讯时,选用自己编制主站通讯程序,参照西门子USS程序格局做成库程序,在多个项目上使用,作用仍是不错。
西门子S7-200自在口通讯的确很自在,能够编制任何通讯。
西门子自带的Modbus主站程序,用在变频器操控上,不方便。要求是能向USS库程序相同有多个操控的位信号输入,在速度设定值改动是发送速度值,平常要读变频器的运转状况(包含毛病状况),还想读变频器运转时的电流。所以,自己依据英威腾变频器的通讯协议,编制了Modbus主站通讯程序。
Modbus通讯协议要求:
读写都是8个字节,仅仅功用码的不同和读是读得长度,写是写的数据值
发送 |
VB1600 |
VB1601 |
VB1602 |
VB1603 |
VB1604 |
VB1605 |
VB1606 |
VB1607 |
VB1608 |
8个字节 |
发送长度8 |
从站地址 |
功用码 |
数据地址高字节 |
数据地址低字节 |
数据字长高字节 |
数据字长低字节 |
CRC校验低字节 |
CRC校验高字节 |
从上面的通讯结构能够看出:数据地址、字长和CRC都是一个字,其间地址和长度或数据凹凸字节与西门子界说共同,即低地址高字节。CRC不相同,是低地址低字节,与核算机上的界说共同。这点必需留意。
变频器写回来:
承受 |
VB1609 |
VB1610 |
VB1611 |
VB1612 |
VB1613 |
VB1614 |
VB1615 |
VB1616 |
VB1617 |
8个字节 |
承受长度8 |
从站地址 |
功用码 |
数据地址高字节 |
数据地址低字节 |
数据值 高字节 |
数据值 低字节 |
CRC校验低字节 |
CRC校验高字节 |
回来与发送时相同,表明通讯数据承受成功,并已履行。
我只需读5个字的参数或1个字的状况,变频器读回来:
承受 |
VB1609 |
VB1610 |
VB1611 |
VB1612 |
VW1613 |
…… |
VW1621 |
VB1623 |
VB1624 |
N个字节 |
承受长度n |
从站地址 |
功用码 |
数据字节字节数 |
数据1 数值 |
。。。。。 |
数据5 数值 |
CRC校验低字节 |
CRC校验高字节 |
读状况回来7个字节,读5个字回来15个字节。
程序要求:界说通讯优先等级是先写,后读。写指令(运转,中止,复位等)发送等级最高,其次是写频率设定。写通讯发送后,判别回来值,确认是否写成功,若写成功则不再写,只需操控状况或频率改动时,再次写。读为一次读变频器状况,一次读当时运转参数,轮番读取。
依据上述要求,确认了以下几个子程序和中止程序:
1. 初始化子程序:对自在口通讯装备波特率、偶校验等
2. 变频器操控子程序:输入运转、中止、复位、地址、频率设定等进口。输出变频器状况、通讯毛病码、当时运转频率、电流等。程序中要依据前次通讯成果判别当时应写仍是读。并宣布XMT通讯指令,注册发送完结中止。
3. CRC校验子程序:运算发送的CRC码。
4. 发送完结中止程序:依据发送的内容,确认承受的长度,封闭承受中止,注册承受完结中止。
5. 承受完结中止程序:判别承受信号是否正常,若不正常送出相应的毛病码。将接收到的正确信号,送入对应暂存区内,供操控子程序输出,封闭承受中止。