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个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

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

    关注

    32

    文章

    1577

    浏览量

    54850
  • modbus通讯
    +关注

    关注

    0

    文章

    13

    浏览量

    1673
收藏 人收藏

    评论

    相关推荐

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

    从机的串口配置为: 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

    LV与plc的串口通信,请问怎样了解plc串口通信的相关参数比如波特率、奇偶校验位

    电脑不能装cx软件,怎样了解plc串口通信的相关参数比如波特率、奇偶校验位
    发表于 08-10 10:12

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

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

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

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

    串口通信的奇偶校验位的两种类型介绍

      奇偶校验位是一个二进制数,指示给定位置号的二进制数中的1的数目是奇数还是偶数。奇偶校验位是最简单的错误检测代码。奇偶校验位有两种类型:偶校验位和奇
    发表于 09-04 17:54

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

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

    CH340的校验位如何设置?

    目前根据论坛的一些资料已经完成了驱动移植,可以正常通讯了。查找相关资料可以设置CH340的波特率,但是校验位不知如何设置,想知道如何修改。
    发表于 07-01 06:18

    UART中有奇偶校验位和无奇偶校验位的数据传输是怎样的?

    例如,我使用 8 位数据传输类型。奇偶校验位共有 3 种类型无奇偶校验校验校验----------------------偶校验我假设
    发表于 12-08 07:24

    如何使用modbus crc16校验位写出系统中断

    如题,需要用到这个校验位,不会写USART485的中断,初始化已经完成。
    发表于 03-30 09:56

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

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

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

    串口解析串口配置1.波特率2.停止位3.数据位4.奇偶校验位比特率:通讯的频率停止位:可以选择1/1.5/2三个选择数据位:可以选择5/6/7/8四个选择奇偶
    发表于 11-20 10:36 16次下载
    单片机<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移植freemodbus 后测试时,只能使用无校验 ,设置奇偶校验时无法与上位机通讯解决方法如果串口助手使用串口配置为:数据
    发表于 12-24 18:44 19次下载
    问题笔记:STM32<b class='flag-5'>串口</b>数据位与<b class='flag-5'>校验位</b>