经过整理的Modbus通讯协议详解(2)

经过整理的Modbus通讯协议详解(二)

modbus两种传输方式(ASCII或RTU)
      

控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。

 

所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。

 

在其它网络上(象MAP和Modbus Plus)Modbus消息被转成与串行传输无关的帧。

 

下面简单的介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。所以在这里我仅介绍一下Modbus的ASCII和RTU协议。

 

下表是ASCII协议和RTU协议进行的比较:

协议
 开始标记
 结束标记
 校验
 传输效率
 程序处理
 
ASCII
 :(冒号)
 CR,LF
 LRC
 低
 直观,简单,易调试
 
RTU
 无
 无
 CRC
 高
 不直观,稍复杂
 

 

通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是因为它传输的都是可见的ASCII字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。

 

 

ASCII模式

当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。

 

代码系统:
 · 十六进制,ASCII字符0...9,A...F
· 消息中的每个ASCII字符都是一个十六进制字符组成

 

每个字节的位:
· 1个起始位
· 7个数据位,最小的有效位先发送
· 1个奇偶校验位,无校验则无

 

LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。

 

LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。

 

下面是它的VC代码:

BYTE GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码

{

BYTE byLrc = 0;

char pBuf[4];

int nData = 0;

for(i=1; i<end; i+=2)   //i初始为1,避开“开始标记”冒号

    {

//每两个需要发送的ASCII码转化为一个十六进制数

    pBuf [0] = pSendBuf [i];

    pBuf [1] = pSendBuf [i+1];

    pBuf [2] = '/0';

    sscanf(pBuf,"%x",& nData);

    byLrc += nData;

    }

    byLrc = ~ byLrc;

    byLrc ++;

return byLrc;

}

 

CRC校验
CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。

 

CRC添加到消息中时,低字节先加入,然后高字节。

 

编程方法如下:

①装如一个16位寄存器,所有数位均为1。
②该16位寄存器的高位字节与开始8位字节进行“异或”运算。运算结果放入这个16位寄存器。
③把这个16寄存器向右移一位。
④若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进行“异或”运算;若向右移出的数位是0,则返回③。
⑤重复③和④,直至移出8位。
⑥另外8位与该十六位寄存器进行“异或”运算。
⑦重复③~⑥,直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。
⑧这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。

 

 

CRC添加到消息中时,低字节先加入,然后高字节。下面是它的VC代码:

WORD GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码

{

WORD wCrc = WORD(0xFFFF);

    for(int i=0; i<nEnd; i++)

    {

    wCrc ^= WORD(BYTE(pSendBuf[i]));

    for(int j=0; j<8; j++)

        {

            if(wCrc & 1)

            {

        wCrc >>= 1;

        wCrc ^= 0xA001;

            }

            else

{

        wCrc >>= 1;

            }

        }

    }

    return wCrc;

}

 

对于一条RTU协议的命令可以简单的通过以下的步骤转化为ASCII协议的命令:

1、  把命令的CRC校验去掉,并且计算出LRC校验取代。

2、  把生成的命令串的每一个字节转化成对应的两个字节的ASCII码,比如0x03转化成0x30,0x33(0的ASCII码和3的ASCII码)。

3、  在命令的开头加上起始标记“:”,它的ASCII码为0x3A。

4、  在命令的尾部加上结束标记CR,LF(0xD,0xA),此处的CR,LF表示回车和换行的

ASCII码。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Modbus通讯协议是一种应用层协议,被广泛应用于工业自动化领域,用于在不同设备之间进行数据通信。 Modbus通讯协议分为两种模式:串行模式和以太网模式。在串行模式下,Modbus使用RS-232或RS-485接口进行通信,而在以太网模式下,则使用以太网协议进行通信。 Modbus通讯协议主要包括以下四种常见的消息类型:读取线圈状态、读取输入状态、读取保持寄存器和读取输入寄存器。通过这些消息类型,可以实现对不同类型数据的读取和写入。 Modbus通讯协议使用简单的数据结构来表示不同类型的数据。例如,线圈状态和输入状态使用位来表示,保持寄存器和输入寄存器使用16位字来表示。这种数据结构的使用使得通讯协议更为简洁。 Modbus通讯协议使用主/从架构,其中一个设备充当主节点,负责发送请求消息和接收响应消息,而其他设备充当从节点,负责接收请求消息和发送响应消息。 在Modbus通讯协议中,主节点通过从节点的地址进行通信,并使用功能码指定要执行的操作。每个从节点都有一个唯一的地址,所以主节点可以通过地址来区分和访问不同的从节点。 Modbus通讯协议还支持数据批量传输和广播通信。数据批量传输允许一次性读取或写入多个寄存器的数据,从而提高通讯效率。广播通信允许主节点向所有从节点发送命令,从而实现一次性向多台设备发送相同的指令。这些功能使得Modbus通讯协议更加灵活和高效。 综上所述,Modbus通讯协议是一种可靠、简单和高效的工业通讯协议,适用于各种自动化设备之间的数据通信,为工业自动化系统提供了可靠的数据交换手段。 ### 回答2: Modbus通讯协议是一种用于工业领域常见的通讯协议,用于在不同设备间实现数据传输和通讯的标准。下面我将详细解释Modbus通讯协议的相关内容。 Modbus协议采用了主从结构,其中主机负责发出请求,从机负责响应请求。协议定义了一系列的功能码,用于不同的数据交换操作。常见的功能码包括读写寄存器、读写输入寄存器、读写线圈等。 在Modbus通讯中,数据的传输是基于二进制形式进行的。通讯过程包括三个步骤:建立连接、数据交互和释放连接。建立连接阶段是主机向从机发送一个请求,从机响应确认连接。确认连接后,主机可以发送请求指令给从机,从机则根据指令进行相应的操作,并返回相应结果给主机。最后,当通讯结束时,可以释放连接。 Modbus协议支持不同的物理层,包括串口、以太网等。在串口通讯中,常用的物理层为RS485,而在以太网通讯中,常用的物理层为TCP/IP协议。 Modbus协议的应用非常广泛,在工业自动化领域、能源管理系统、楼宇自控系统等各种领域都有应用。它具有简单、开放、易于实现和跨平台等特点,因而深受工程师的喜爱。 总之,Modbus通讯协议是一种常见的工业领域通讯协议,通过主从结构和功能码,实现了不同设备之间的数据传输和通讯。它的简单与开放使得它在各个领域都有广泛的应用。 ### 回答3: Modbus通信协议是一种用于实现工业控制系统中设备之间数据交换的协议。它由Modicon公司于1979年首次引入,如今已成为工业领域中最为广泛应用的通信协议之一。 Modbus采用了一种主从结构的通信模式,主节点负责发起通信请求,从节点负责响应请求并提供数据。主节点可以是监控控制系统(如PLC)或上位机,而从节点则可以是传感器、执行器或其他可编程设备。 Modbus通信协议基于传统串行通信,通过串口实现数据传输。它定义了一种简单易懂的帧格式,包括起始符、地址、功能码、数据、校验和等字段。通过这些字段的组合,主从节点能够进行数据的读取和写入操作。 Modbus协议支持不同的功能码,其中最常用的包括读取保持寄存器、读取输入寄存器、写单个寄存器、写多个寄存器等。每个寄存器可以存储16位或32位的数据,如开关状态、温度值、电压等。 Modbus通信协议具有以下特点:首先,它是一种简单轻便的通信协议,不需要复杂的硬件和软件开发。其次,它具有良好的兼容性,可以与各种设备和系统进行无缝集成。第三,它支持多种通信介质,包括串口、以太网和无线电等。最后,Modbus协议具有广泛的应用领域,包括自动化控制、楼宇管理、能源监测等。 总的来说,Modbus通信协议是一种简单易用、高效可靠的工业通信协议,能够满足各种设备之间的数据交换需求。它的广泛应用和不断改进的发展将为工业控制系统的运行提供强有力的支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值