电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 梯形图实例 >> 正文

西门子PLC S7-200 smart如何使用Modbus 485通讯传输接收数据_200smart modbus

作者:佚名    文章来源:网络整理    点击数:    更新时间:2025/7/19

前言

西门子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器,从而实现PLC通过modbus方式控制其他器件。


提示:以下是本篇文章正文内容,下面案例可供参考

一、准备工作

电脑

S7-200smart st30

485通讯线

说明:这里将以S7-200smart作为主站,电脑串口调试助手作为从站。做操作演示。

此处省略接线。

二、写梯形图

1.MBus_CTRL

1. 调用 Modbus RTU 主站初始化和控制子程序

使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:

 调用 Modbus RTU 主站初始化和控制子程序 


图 2. 用 SM0.0 调用 Modbus RTU 主站初始化与控制子程序

各参数意义如下:

a.

EN

使能:

必须保证每一扫描周期都被使能(使用 SM0.0)

b.

Mode

模式:

为 1 时,使能 Modbus 协议功能;为 0 时恢复为系统 PPI 协议

c.

Baud

波特率:

支持的通讯波特率为1200,2400,4800,9600,19200,38400,57600,115200。

d.

Parity

校验:

校验方式选择

0=无校验(通常默认选择0)

1=奇较验

2=偶较验

e.

Port

端口号:

0 = CPU 集成的 RS 485 通讯口 ; 1 = 可选 CM 01 信号板 。

f.

Timeout

超时:

主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒(1 秒),允许设置的范围为 1 - 32767。

注意: 这个值必须设置足够大以保证从站有时间响应。

g.

Done

完成位:

初始化完成,此位会自动置1。

h.

Error

有错误

1.MBus_MSG

调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;

 

各参数意义如下:

a.

EN

使能:

同一时刻只能有一个读写功能(即 MBUS_MSG)使能

注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。

b.

First

读写请求位:

每一个新的读写请求必须使用脉冲触发

c.

Slave

从站地址:

可选择的范围 1 - 247

d.

RW

读写请求:

0 = 读, 1 = 写

e.

Addr

读写从站的

选择读写的数据类型

数据地址:

00001 至 0xxxx - 数字量输出

10001 至 1xxxx - 数字量输入

30001 至 3xxxx - 模拟量输入

40001 至 4xxxx - 保持寄存器

f.

Count

数据个数

通讯的数据个数(位或字的个数)

注意: Modbus主站可读/写的最大数据量为120个字(是指每一个 MBUS_MSG 指令)

g.

DataPtr

数据指针:

1. 如果是读指令,读回的数据放到这个数据区中 2. 如果是写指令,要写出的数据放到这个数据区中

h.

Done

完成位

读写功能完成位

i.

Error

错误代码:

只有在 Done 位为1时,错误代码才有效

0 = 无错误

1 = 响应校验错误

2 = 未用

3 = 接收超时(从站无响应)

4 = 请求参数错误(slave address, Modbus address, count, RW)

5 = Modbus/自由口未使能

6 = Modbus正在忙于其它请求

7 = 响应错误(响应不是请求的操作)

8 = 响应CRC校验和错误

101 = 从站不支持请求的功能

102 = 从站不支持数据地址

103 = 从站不支持此种数据类型

104 = 从站设备故障

105 = 从站接受了信息,但是响应被延迟

106 = 从站忙,拒绝了该信息

107 = 从站拒绝了信息

108 = 从站存储器奇偶错误

三、使用难点与解答

通常支持485通讯的器件给的使用说明书,给的指令是16进制的字符串代码。很难与当前PLC库指令对应起来,尤其是命令地址。我们以IAI马达给的使用说明书为例子。如图所示:

 

 

该示例是PLC通过modbus去读取马达的位置。读取控制器地址9000这个寄存器里面的数据

RW填0,表示去读取数据。

Plc库里面需要填的Addr(e)是十进制,需要将16进制的9000转成十进制。

通过计算器得知:16#9000=36864

注意事项:这里博主也比较奇怪,实际使用读取寄存器地址的时候需要+1,36865

不知道有没有人可以解释一下的。

 

由于这里是读取寄存器,所以Addr=436865.

 

count是寄存器数量:按照示例,这里有2个寄存器。所以count填2

通过串口调试助手来测试一下:接通M15.0发送信号,串口调试助手收到了PLC发送的信号。且可以看到收到的数据与IAI操作手册示例一致。测试成功

 

以上是通过modbus读取的示例。

注意事项:

1、只有在操作就被控方寄存器的时候(无论读取还是写入),转换的成十进制的地址后第一位需要加个4

2、注意发送命令和读取命令的字符长度,需要正确填写

3、需要注意波特率要填写正确,与被控方保持一致。否则发出去的信号与收到的信号不相符

4、发出去的内容填写到DataPtr中。

 

此处我们再来解读plc的这个命令就比较清晰了:

通过MB_MSG,向1号从站读取从36865(Addr)这个地址开始2位(Count)的数据,并把读取到的数据写入VB2000

如果是写入:通过MB_MSG,将PLC的VB2000开始的2位寄存器内的数据,写入到1号从站的36865寄存器中

Tags:MODBUS通讯,MODBUS,200SMART  
责任编辑:admin
  • 上一篇文章:
  • 下一篇文章: 没有了
  • 请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
    1分 2分 3分 4分 5分

    还可以输入 200 个字
    [ 查看全部 ] 网友评论
    推荐文章
    最新推荐
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
    返回顶部
    刷新页面
    下到页底
    晶体管查询