RS232的modbus程序和RS485的modbus程序有什么区别?

RS232的modbus程序和RS485的modbus程序有什么区别?,第1张

协议分为硬件协议和软件协议。而通讯协议属于软件协议,它包含报头包围的格式,MODBUS是应用层的通讯协议,主要用于传送和接收文件包的格式。而RS232,RS485是物理层的串行接口,它可以支持几十种通讯协议,MODBUS只是其中的一种。MODBUS可分为 MODBUS RTU/ACSI, MODBUS +(也叫modbus PLUS)和modbus tcp/ip等。前两种是在串行链路上使用的通讯协议(串口通讯),后一种是在以太网口基于TCP/IP协议的MODBUS通讯协议。\x0d\x0a\x0d\x0a上面有朋友举车的例子,还拿这个例子来说吧,一个人从香港去澳门,人就是文件,香港是主机,澳门是从机。从香港去澳门可以走水路或航空,水路可以是RS232,RS485(二者之间RS485速度更快些没有太大的区别),航空可以是以太网。交通工具船和飞机可以分别看成应用层的MODBUSRTU/MODBUS PLUS和MODBUSTCP/IP.而在这里当然船也可以是轮船或汽艇,可以是RS485支持的其他通讯协议\x0d\x0a \x0d\x0ars232和rs485只负责吧路修好,连同后modbus就像车和船等交通工具,路修好了如果有码头就可以走船,如果有车站就可以走汽车,(一个是路一个是更高一层的交通工具)

ModBus协议内容介绍

设备必须要有RTU协议!这是Modbus协议上规定的,且默认模式必须是RTU,ASCII作为选项。所以设备都有RTU协议,ASCII协议很少,Modbus协议,只需要了解RTU协议,ASCII作为学习的了解就足够了。

ModBus协议最基本的通信单位是帧,整个ModBus帧又被称之为应用数据单元(ADU),ADU中又包含了协议数据单元(PDU)用于传真正需要传输的数据。Modbus协议帧从上图可以看出:

帧结构 = 地址域 + 功能码 + 数据 + 差错校验

地址域:

占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常地需要两个设备的地址一样才能进行查询和回复)。每个终端设备的地址是唯一的,如果查询某个终端设备,必须包含该设备的地址。终端回应也会包含该地址,通过该地址,主机知道哪个终端在与自己进行通信。

功能码:

常用的功能码有01、05、03、06、16。一般占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改数据,所以不同功能码对应不同功能。常用的功能码是03和06。

数据:

通信的主要内容,可能是数值、参考地址或者极限值。可能是终端执行特定功能所需要的数据或者终端响应查询时采集到的数据,根据功能码不同,有不同结构。

差错校验:

为了保证数据不错误,增加这个,然后把前面的数据进行计算看数据是否一致,如果一致,就说明这个数据是正确的,我再回复如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了。有时,由于电噪声和其它干扰,一组数据在从一个设备传输到另一个设备时在线路上可能会发生一些改变,出错校验能够保证主机或者终端不去响应那些传输过程中发生了改变的数据,这就提高了系统的安全性和效率,出错校验使用了16位循环冗余的方法。

西门子plc与modbus设备进485通信详解(modbus多机轮询)

huasum >《西门子》

阅499转82022.06.26 江西关注

接触西门子s7-200一段时间后,接手一个通信项目,需要在触摸屏上显示三台pid温度表的温度。

一开始打算触摸屏多余的串口转485直接连接温度表,后来由于一直通信不上,怀疑触摸屏的问题,于是打算用plc来读取pid表,走的是modbus协议,即port1接三台pid表,port0用来连触摸屏以及下载程序。好了,直接上代码。

1、定义port1口的modbus属性,注意,定义完后,如果要再用port1口下载程序的话,必须先把plc设成stop(专家请无视)。

这里的奇偶校验是个坑,要找到合适的,否则error的值会一直是为3,没有返回值

2、这里是关键了,轮询三台485连接的pid温度表,这里利用done来实现三台pid表的msg发送工作,这样也能保证返回数据互不干扰。

打开APP查看高清大图

打开APP查看高清大图

3、同一时间只能有一个msg在工作,所以一定要让这几个m10.x分别释放

打开APP查看高清大图

4、解析返回的数据,这部分就比较简单了,到处都有范例

打开APP查看高清大图

经过一周的研究,总算把三台仪表的数据稳定的传出来,但是还有个疑问,modbus返回的数据里,为什么找不到地址码信息,只有返回41001的值,如果有地址码,就更好了。

下周要继续研究分别写入三个pid表参数的功能,成功了再来分享。

最后,感谢网络上那些开源的资料,虽然弯也没有少绕,

,同时鄙视一下那些要注册才能看资料的“专业”网站,以及要各种xx币才能**的资料。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12096800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存