S7-300 CP341作主S7-200作从的Modbus通信

2025-04-20 23:36:06

1、CP341作Modbus主站的硬件组态

S7-300 CP341作主S7-200作从的Modbus通信

2、设置Modbus总线传输速率和帧字符结构双击CP341->Parameters->Protocol中选择Modbus Master;双击信封Protocol,选择Modbus Master设置总线传输速率和帧字符结构。本例传输速率为9.6Kbit/s,帧字符选用8位数据位,1位停止位,无校验。此设置可根据实际情况调整,原则是通信双方选择一致。

S7-300 CP341作主S7-200作从的Modbus通信

3、设置电气接口选择半双工RS 485,默认设置是 R(A)为- ,R(B)为+。此设置主要是与RS485 A、B两线正负定义有关,在CP341接线与通信对象A、B两线正负定义相反时,可无需修改硬件接线,可直接修改此处颠倒接线正负

S7-300 CP341作主S7-200作从的Modbus通信

4、当配置好Modbus通信的参数后,在向CPU下载硬件组态前,要向CP341的Dongle中下载Modbus Master的驱动,一旦下载完成后此后无需再次下载。对于通信参数的调整只需要进行HW对CPU的硬件下载即可

S7-300 CP341作主S7-200作从的Modbus通信

5、实现CP341作Modbus主站的通信程序是“P_SND_RK”FB8负责发送控制字。编程如下:SF‘S’为发送,此处必须为大写的‘S’LADDR硬件组态中的起始逻辑地址,本例中为272REQ发送数据触发位,上升沿触发,本例中为M0.5,以1s为周期的脉冲信号DB_NO发送数据块号,本例中为1DBB_NO发送数据的起始地址,本例中为0LEN发送数据的长度,本例中暂时为6R_TYP‘X’为扩展的数据块,此处必须为大写的‘X’R取消通信,本例始终为初始值FALSEDONE发送完成位,无故障发送完成后为true,M100.0ERROR错误位,为true说明有错误,M100.1STATUS状态字,标识错误代码,查看Modbus Master和CP341手册其它参数

S7-300 CP341作主S7-200作从的Modbus通信

6、其中创建发送数据块DB1结构如下1图所示:创建的发送数据块DB1,至少要有6个字节的长度,后面根据功能码的不同,所需长度不同,建议发送数据块创建的长度长一些。以上图为例6个字节Address为所通讯对象的Modbus地址为1,code为功能码FC03,所读对象寄存器的起始地址为0,所读寄存器的数量为4,其中一个寄存器为两个字节。

S7-300 CP341作主S7-200作从的Modbus通信

7、此处有几个注意事项:1) R_TYP必须为大写的‘X’,为小写"垓矗梅吒x"时,CP341 作为Modbus master时,调用FB8的状态字显示为 "0E4F" 错误。注意R_TYP必须为大写。且对于R_TYP可以写的值如下:’D’ DB 区’X’ DX 区,extended data block ’E’ I 区’A’ Q 区 ’M’ M 区 ’T’ T 区 ’C’ C 区2) LEN的长度要根据通信所需功能码来针对填写,如下表所示

S7-300 CP341作主S7-200作从的Modbus通信

8、“P_RCV_RK”FB7用于接收通信数据。编程如图

S7-300 CP341作主S7-200作从的Modbus通信

9、S7-200作Modbus从站的设置S7-200作Modbus通信要用到自由口通信下的Modbus Slave库,对于此库的应用要注意的是􀁺 Modbus Slave库仅支持Modbus RTU通信模式,不支持ASCII 通信模式。􀁺目前的Modbus Slave库仅支持通信口Port0。􀁺 使用Modbus Slave库时一定要注意对库分配内存区空间。否则编译后出现很多错误。如图

S7-300 CP341作主S7-200作从的Modbus通信

10、编程时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用MBUS_SLAVE,并指定相应参数。关于参数的详细说明,可在子程序的局部变量表中找到。下图为S7-200实现Modbus从站的程序。

S7-300 CP341作主S7-200作从的Modbus通信

11、上图中参数意义如下:a. 模式选择:启动/停止Modbus,1=启动;0=停止b. 从站地址:Modbus从站地址,取值1~247c. 波特率:可选1200,2400,4800,9600,1刻八圄俏9200,38400,57600,115200d. 奇偶校验:0=无校验;1=奇校验;2=偶校验e. 延时:附加字符间延时,缺省值为0f. 最大I/Q位:参与通信的最大I/O点数,S7-200的I/O映像区为128/128,缺省值为128g. 最大AI字数:参与通信的最大AI通道数,可为16或32h. 最大保持寄存器区:参与通信的V存储区字(VW)i. 保持寄存器区起始地址:以&VBx指定(间接寻址方式)j. 初始化完成标志:成功初始化后置1k. 初始化错误代码l. Modbus执行:通信中时置1,无 Modbus 通信活动时为 0m. 错误代码:0=无错误从程序截图中可见,S7-200作为Modbus从站,从站地址为10,接收存储区为VB0开始。

12、至此,CP341和S7-200双方的程序及物理连线已经做好。在调试S7-300时可通过CP343-1以太网模块,以便可以用以太网通信调试速度快且方便。S7-200站选用224XP,其中Port0作为Modbus通信口,Port1用于与笔记本的CP5512通信。在进行通信测试前还要明确Modbus通信的功能码。下表为Micro 'n Power中S7-200作为Modbus RTU从站通信功能码。

S7-300 CP341作主S7-200作从的Modbus通信

13、FC01主站读取从站多个DO点状态FC01功能下,“P_SND_RK”FB8的LEN为6,DB1的头两个字节分别是所要读取从站的地址10号站(16#A),和功能码01,如表5所示。图14为S7-200的QB0的4个位被传送到DB2的接收区。其中Reg_num位数为1-2040。

S7-300 CP341作主S7-200作从的Modbus通信

14、FC02主站读取从站多个DI点状态FC02功能下,“P_SND_RK”FB8的LEN为6,DB1的头两个字节分别是所要读取从站的地址10号站(16#A),和功能码02,如表6所示。图15为S7-200的I0.0-I0.3的四个位被传送到DB2的接收区。其中Reg_num位数为1-2040。

S7-300 CP341作主S7-200作从的Modbus通信

15、FC03主站读取从站多个内部寄存器状态FC03功能下,“P_SND_RK”FB8的LEN为6,DB1的头两个字节分别是所要读取从站的地址10号站(16#A),和功能码03,如表7所示。图16为S7-200的V区3个寄存器传送到DB2的接收区。注意在一次请求中可以读取最多 127 个寄存器(每个寄存器2个字节)的数据。

S7-300 CP341作主S7-200作从的Modbus通信

16、FC06主站写单字到从站内部寄存器FC06功能下,“P_SND_RK”FB8的LEN为6,DB1的头两个字节分别是所要读取从站的地址10号站(16#A),和功能码06,如表8所示。图17为DB1.DBW4传送到从站VW0的接收区。

S7-300 CP341作主S7-200作从的Modbus通信

17、FC16主站写多字到从站内部寄存器FC16功能下,“P_SND_RK”FB8的LEN不为6,而是发送命令及数据的总长度本颖蓟段扛例中设为20。DB1的头两个字节分别是所要读取从站的地址10号站(16#A),和功能码16(16#10)。功能码FC16时,所要发送的数据从DB1.DBW6开始(从第7个字节开始)如表9所示。图18为DB1.DBW6开始的多字发送到VW0开始的接收区。Reg_num为写寄存器的总数目。注意在一次请求中可以写最多 127 个寄存器(每个寄存器2个字节)的数据。

S7-300 CP341作主S7-200作从的Modbus通信
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢