0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Modbus通讯和串口通信校验位说明

姚小熊27 来源:网络整理 2018-04-18 11:55 次阅读

串口通讯modbus协议

串口通讯

常用的有RS232RS485

RS232:

全双工,电缆最长15.2m发送TXD;接收RXD

逻辑1(MARK)=-3V~-15V逻辑0(SPACE)=+3~+15V

RS485:

半双工,电缆最长1200m线制:两线,A、B

多台设备连接:所有A并联,所有B并联

RS485转USB。安装完驱动后会多一个串口(COM口),可在属性=》高级中修改串口号COMN。

串口(及modbus)配置

Modbus通讯和串口通信校验位说明

停止位有校验时1Bit,无校验时2Bit其他

TTL(晶体管-晶体管逻辑电平)电平信号。+5V等价于逻辑“1”,0V等价于逻辑“0”

modbus-RTU协议:

RS485是硬件,modbus-RTU是协议。一般RS485上跑的也就是modbus-RTU,所以被混为一谈。

MODBUS协议在一根通讯线上使用主从应答式连接(半双工)主机查询,从机回应

modbus-RTU帧结构

Modbus通讯和串口通信校验位说明

一般主机查询

Modbus通讯和串口通信校验位说明

常用功能码

Modbus通讯和串口通信校验位说明

数据 设备不同,数据位数不同 起始地址:0001

默认情况下先发地位,后发高位

错误校验(CRC) 用串口调试软件计算

有的通讯CRC高字节在前,有的通讯CRC高字节在后

Modbus通讯和串口通信校验位

Modbus通讯和串口通信校验位说明

利用Modbus协议可以实现设备间的数据交换。Modbus通讯理论上支持4种ModiconPLC地址,即0*、1*、3*和4*四种,分别表示开出(中间线圈)、开入、模入、模出(中间寄存器)等数据地址。与西门子或其它设备中的开入、开出、模入、模出地址完全不对应。可以理解为0*和1*对应位地址的读写操作,3*和4*字地址的读写操作。

此处0*、1*、3*和4*表示长度有的为5位数字、有的为6位,其实和Modbus通讯无关,只是和软件的表示方式有关。

按照Modbus通讯时最常用的是RTU读请求格式:

从站地址(1个字节)、功能代码(1个字节)、从站数据起始地址(2个字节)、读数据长度(2个字节)、CRC校验(2个字节)

可见,只需设置起始从站数据区起始地址和通讯长度即可。

特别注意,Modbus地址遵从IEC1的地址标准(最小地址为*1),西门子遵从IEC0的标准(最小地址为0,如M0.0)。因此,不同标准的地址做通讯时需要做地址变换,即加1的操作。

在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 串口通信
    +关注

    关注

    34

    文章

    1620

    浏览量

    55451
  • modbus通讯
    +关注

    关注

    0

    文章

    13

    浏览量

    1697
收藏 人收藏

    评论

    相关推荐

    如何得到串口接收到字节的校验位

    从机的串口配置为: 9600, 8 , 奇校验,1个停止 当主机用UART3接收到从机发来的一个字节时,我怎么读到这个字节对应的校验位的值呢? 在MDB协议中,有一个模式
    发表于 01-17 07:39

    基于MODBUS串口通讯软件(LV实现)

    )思路如下:1)LV与串口通讯步骤:1初始化串口;2读写端口;3延时;4关闭串口;2)基于MODBUS
    发表于 10-26 16:58

    树莓派,用python编程串口发送,偶校验校验位发送不出去

    最近进入一个新的项目,需要采用串口发送,协议是偶校验,但是怎样发送都没有应答,后来用示波器抓了一下波形,发现python发送数据的时候根本没有发送校验位,我已经把串口参数设置了9600
    发表于 03-27 10:06

    求助大侠stc更改校验位的问题

    小白求助大侠,我用的是stc15f2k60s2,刚刚接触单片机不久,东拼西凑了一个简单的代码程序,现在用的是stc-isp串口助手,现在串口通讯校验位是1
    发表于 09-14 09:16

    串口接收一组数据如何利用校验位

    串口接收一组数据(每组是25个连续字符,最后有两个字符是校验码),实现每次中断都用这些数据更新一个数组的全局变量,如何实现啊。如果是从中间开始接受的,如何避免混乱。还有是否要利用,如何利用校验位......谢啦~
    发表于 04-07 14:12

    STM32F103单片机串口通信带奇偶校验位的代码分享

    STM32F103单片机串口通信带奇偶校验位的代码分享
    发表于 12-03 06:43

    如何得到串口接收到字节的校验位

    从机的串口配置为: 9600, 8 , 奇校验,1个停止 当主机用UART3接收到从机发来的一个字节时,我怎么读到这个字节对应的校验位的值呢? 在MDB协议中,有一个模式
    发表于 08-29 08:08

    校验位的小工具

    电子发烧友网站提供《算校验位的小工具.exe》资料免费下载
    发表于 07-25 16:06 2次下载

    DES使用一个56的密钥以及附加的8奇偶校验位详细资料说明

    本文档的主要内容详细介绍的是DES使用一个56的密钥以及附加的8奇偶校验位详细资料说明
    发表于 03-29 14:26 4次下载

    单片机串口分析起始停止奇偶校验位

    串口解析串口配置1.波特率2.停止3.数据4.奇偶校验位比特率:通讯的频率停止
    发表于 11-20 10:36 16次下载
    单片机<b class='flag-5'>串口</b>分析起始<b class='flag-5'>位</b>停止<b class='flag-5'>位</b>奇偶<b class='flag-5'>校验位</b>

    STM32模拟串口驱动(带校验位

    是:4800bps /8/N/EVEN。对,是采用偶校验的方式。之前一直习惯无校验方式,一下子说要采用偶校验,所以不得不再深度查阅和了解串口的相关信息。以下即是所了解的
    发表于 12-14 19:07 2次下载
    STM32模拟<b class='flag-5'>串口</b>驱动(带<b class='flag-5'>校验位</b>)

    STM32 串口及奇偶校验问题

    背景说明:STM32上对接一款串口传感器,该串口采用串口如下波特率:115200停止:1校验位
    发表于 12-24 18:43 9次下载
    STM32 <b class='flag-5'>串口</b>及奇偶<b class='flag-5'>校验</b>问题

    问题笔记:STM32串口数据校验位

    问题:STM32移植freemodbus 后测试时,只能使用无校验 ,设置奇偶校验时无法与上位机通讯解决方法如果串口助手使用串口配置为:数据
    发表于 12-24 18:44 19次下载
    问题笔记:STM32<b class='flag-5'>串口</b>数据<b class='flag-5'>位</b>与<b class='flag-5'>校验位</b>

    串行通信中的波特率、数据校验位设置

    当进行串行通信时,波特率、数据校验位是必须要设置的参数,以确保发送端和接收端之间的数据传输能够正确进行。
    的头像 发表于 06-29 18:14 6767次阅读

    串口通信奇偶检验什么意思 为什么要使用奇偶检验 怎么使用奇偶检验

    串口通信奇偶检验什么意思 为什么要使用奇偶检验 怎么使用奇偶检验? 串口通信奇偶检验是指通过对串口传输数据的
    的头像 发表于 10-17 16:16 6280次阅读