Labwindows CVI写上位机与STM32下位机通信(二)

本文介绍了Labwindows CVI上位机通过Modbus RTU协议与STM32下位机通信的过程,重点讨论了Modbus协议的RTU模式、消息帧结构以及流量计数据的读取。在实现中,遇到了数据帧长度不同导致的解码问题,并提出了两种解决方案:全局变量计数和轮询方式,以及最终采用的回调函数调整。
摘要由CSDN通过智能技术生成

接着上篇,这篇主要谈谈流量计数据读取。我们使用的MEMS流量计采用Modbus协议Modbus 使用RS-485 作为硬件载体。

一. Modbus协议

  该协议定义了 Modbus 总线Master(主设备)与Slave(从设备)之间的通讯报文格式,对于主设备来说,Modbus 协议是联系上位机(如PC、PLC、HMI 等)的接口,而且所有的通讯都是“透明的”。控制器通信使用主-从技术,即仅有一个设备(主设备)能初始化传输(查询),其它设备(从设备)根据主设备查询提供的数据作出相应反应。

  主设备可单独和从设备通信,也能以广播方式和所有从设备通信(仅限于点对点通讯)。如果单独通信,从设备返回一帧消息作为回应;如果是以广播方式查询的,则不作任何回
应。Modbus 协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据和错误检测域。

  从设备回应消息帧也由Modbus 协议构成,包括确认要产生动作的域、任何要返回的数据和错误检测域。如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将
建立一错误消息帧并把它作为回应发送出去。

  控制器能设置为两种传输模式(ASCII 或RTU)中的任何一种在标准的Modbus 网络进行通信,用户选择想要的模式,包括串口通信参数(波特率、奇偶校验方式等),在配置每
个控制器的时候,在一个Modbus 网络上的所有设备都必须选择相同的传输模式和串口参数。所选的ASCII 或RTU 方式仅适用于标准的Modbus 网络,它定义了在这些网络上连续
传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。

1.1 modbus RTU模式

   

图1 RTU模式

使用RTU 模式,消息发送至少要以3.5 个字符时间的停顿间隔开始。在网络波特率下多样的字符时间,这是最容易实现的(如下图的T1-T2-T3-T4 所
示,相当于四个字节的传输延迟)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0~9,A~F。网络设备不断侦测网络总线,包括停顿间隔时间在内。当接收到第一个域(地址域)以后,每个设备都进行解码以判断是否是发往自己的。在最后一个传输字符之后,一个至少3.5 个字符时间的停顿确定了消息的结束。一个新的消息可在此停顿后开始。


图2 RTU典型消息帧

1.2 modbus编码

按照modbus RTU消息帧我们知道要读取modbus从设备数据,必须要按照协议走;首先发送设备地址,接着发送功能码,然后是数据位,最后是这帧指令CRC校验码。参照产品用户手册,以读取总流量为例:


图3 总流量寄存器

假设当前从设备地址为01,则发送:01 03 00 04 00 03 CRC_H CRC_L给流量计就可读回流量计数据&

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值