嵌入式
返回首页

两台西门子S7-200 SMART PLC通过Modbus RTU协议通讯的流程简析

2025-03-03 来源:elecfans

通讯材料:

1)、PLC2台,分别是200SMART 的CR60和SR20;

2)、2个DP插头(6ES7972-0BX12-0XA0)

3)、连接导线若干(plc电源及通讯)

验证内容:

令:CR60 PLC为主站,发送PLC系统时钟(8个字节的信息)给SR20从站;SR20从站发送一个双字的循环移位数据给主站,并由通讯数据VD100接收输出到QD0。

主站程序:

wKgZomWgnt6Af53OAABre1VPCzU011.jpg

在验证过程中曾经出现一个错误,使MSG指令始终显示为6,表示从站无响应。我验证时,由于连接2台plc之间的3+、8-没有确认,造成接线错误,使MSG的error错误信息为6,检查后找到原因,重新接线后仍然报警6。最后检查为控制程序不完整,主要原因是没有给MB0一个初始化操作,造成错误值没有得到有效的刷新。于是,在程序段1中加入初始化操作得到解决。

wKgaomWgnt6ANRpQAABJCI3nEHc923.jpg

wKgZomWgnt6AW9o3AABTf73_YoM697.jpg

主站MSG指令主要理解Addr地址的应用,下面有描述。

wKgaomWgnt6AUHXxAACV-e7WMqw598.jpg

从站程序:从站通讯地址设置为1#

wKgZomWgnt6ALodLAABvU0fjRko344.jpg

wKgaomWgnt6AfJEvAADDJQclAOk568.jpg

从站自VB31开始为读取主站VB11开始的8个字节主站系统时钟数据,指定VB31的起始地址是由Addr地址40011定义的,从站循环指令VD11运行结果,将由Mbus_init的Holdstart定义的起始地址发送和接收。

编写小结:

自简而深进行编写Modbus RTU通讯程序,相对从站通讯程序比较简单,仅仅只是指定通讯种类由
Mbus_init
管脚指定maxIQ/maxAI/maxHOLD/Holdstart定义,其它管脚根据主站定义匹配进行,相对主站需要根据从站地址偏移量来确定。

通讯数据:

wKgZomWgnt6AJEyiAACSOXRZW3o128.jpg

Modbus通讯程序相对的难点是通讯映射的地址关系。

主站读取从站的数据,起始地址是根据从站Holdstart管脚定义的起始地址开始算,而不是指从站的V区物理地址。在验证程序中,从站的Mbus_init起始地址为VB11,那么,主站MSG指令的Addr 40001,应该是指从站的VB11地址。

同理,从站读取主站系统时钟,主站的MSG指令的Addr 40011,对应到从站的地址相当于偏移了10个字(偏移量10word + 11byte = 31byte) ,即为VB31开始的8个字节中存放,Modbus通讯地址计算是40001开始的。

进入嵌入式查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • FollowMe 第二季:3 - EK_RA6M5 开发板入门

  • FollowMe 第二季: 1 Adafruit Circuit Playground Express及任务讲解

  • Azure RTOS step by step workshop

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • 从0到1:树莓派与物联网教程(英文)

精选电路图
  • 1瓦线性调频增强器

  • 12V 转 28V DC-DC 变换器(基于 LM2585)

  • 红外遥控音量控制

  • LM317过压保护

  • 12V转110V/220V 500W逆变器

  • DS1669数字电位器

    相关电子头条文章