PLc S7-200 smart如何使用Modbus 485通讯传输接收数据

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

                西门子在 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 完成主站的初始化,并启动其功能控制:


图 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寄存器中

  • 14
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XJB-Lanxi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值