带您认识Modbus ASCII协议


之前我们学习了 带您认识Modbus TCP你还不知道Modbus RTU???,下面我们继续学习Modbus中另外一个重要的传输形式Modbus ASCII。

什么是Modbus ASCII

Modbus ASCII(ASCII码Modbus)是一种串行通信协议,用于在工业控制系统中传输数据。它是Modicon(现在是施耐德电气)于1979年开发的,用于PLC(可编程逻辑控制器)和其他自动化设备之间的通信。

Modbus ASCII特点

Modbus ASCII协议支持单播和广播消息,使用标准的ASCII字符编码,可通过串行线路如RS-232、RS-485和以太网等接口进行数据传输,采用异步传输以增强通信稳定性和可靠性,广泛用于工业控制领域便于设备间数据交换,但传输速度较慢,最高传输速率仅为19.2Kbps。

Modbus ASCII协议格式

Modbus ASCII包括起始字符(冒号),设备地址,功能码,数据,校验和和终止字符(回车换行)。通过这种格式,设备能够识别和解析通信中的信息,确保数据的正确性和可靠性。

一个完整的Modbus ASCII协议报文

:startDelimiter address functionCode data crcLow crcHigh endDelimiter
: 01 03 0010 1234 CR LF
  • startDelimiter: 通常为冒号 (:)
  • address: 设备地址(1个字节,ASCII编码)
  • functionCode: 功能码(1个字节,ASCII编码)
  • data: 数据区(长度根据功能码不同而变化,均为ASCII编码)
  • crcLow 和 crcHigh: CRC校验码(16位,低字节在前,ASCII编码)
  • endDelimiter: 通常为回车符 (\r) 后跟换行符 (\n)

与二进制 Modbus区别

  1. Modbus ASCII

    • 使用 ASCII 字符表示数据,便于人类阅读和理解。
    • 数据以字符形式传输,每个字符之间有间隔,相对较慢但更可靠。
    • 通信格式可视化,适合对数据可读性要求较高的场景。
  2. 二进制Modbus

    • 使用二进制格式表示数据,在计算机系统中更高效地传输。
    • 数据通过二进制位传输,速度更快但难以直接解读。
    • 适用于需要快速传输大量数据且对传输效率要求较高的场景。

Modbus ASCII适用场景

Modbus ASCII 适用于需要较高可读性和易于理解的工业自动化系统中的串行通信。例如,在需要读取和写入设备参数的系统中,Modbus ASCII 可以方便地进行通信和调试。

C#实现Modbus ASCII通信的Demo

using System;
using System.IO.Ports;

class ModbusASCIIDemo
{
    static void Main()
    {
        SerialPort serialPort = new SerialPort("COM1"9600, Parity.None, 8, StopBits.One);
        
        try
        {
            serialPort.Open();
            string command = ":010600000001E3";
            byte[] commandBytes = System.Text.Encoding.ASCII.GetBytes(command);
            
            serialPort.Write(commandBytes, 0, commandBytes.Length);
            
            System.Threading.Thread.Sleep(100);  // 等待一段时间以确保数据发送完成
            string response = serialPort.ReadExisting();
            
            Console.WriteLine("Response: " + response);
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred: " + ex.Message);
        }
        finally
        {
            serialPort.Close();
        }
    }
}

发送的ASCII消息(010600000001E3)解释

  • ::起始字符,表示这是一个Modbus ASCII命令的开始。
  • 01:设备地址,指定通信的目标设备地址。
  • 06:功能码,表示这是一个写单个寄存器的命令。
  • 0000:寄存器地址,要写入数据的寄存器地址。
  • 0001:写入的数据,此处为一个字(16位)数据,十六进制表示为01。
  • E3:校验和,用于检验命令的完整性和正确性。

这个字符串命令表示向设备地址为01的设备写入数据值为01到地址为0000的寄存器中,并使用校验和为E3来确保命令的准确性。

总之,Modbus ASCII作为一种广泛应用于工业控制领域的通信协议,提供了人类可读性、稳定性和灵活性,适用于不同设备类型和通信需求。其支持单播和广播消息、采用标准ASCII字符编码以及多种串行线路接口,为设备间的数据交换和通信提供了便利。尽管传输速度较慢,但在数据准确性和可靠性方面表现优秀,成为工业控制系统中不可或缺的一部分,帮助实现设备间的无缝连接和信息传递。

近期热文:

6500万台设备在用的PROFIBUS是个啥?
带您认识西门子S7协议
原来用OPC UA有这么多好处呀
串口通信中单工,半双工,全双工傻傻分不清?

相关推荐

  • 6.3K Star很强!一键同步,跨设备书签管理神器
  • 别惹程序员——印度IT工程师被解雇后删了前东家180台服务器、造成几百万损失
  • 全球开源技术峰会GOTC 2024开启报名通道
  • 投稿 SCI,审稿意见居然是抄的?作者一路闹到 Nature:惹到我你算是踢到钢板了
  • 软科中国大学人工智能专业排名出炉!清华第一!北大爆冷!仅排第13名。。。
  • 重磅!软件架构大师Chris Richardson、​MIT计算机与AI实验室Daniel Jackson将出席软件研发技术大会
  • Session的作用,分布式环境下Session怎么实现?
  • 李飞飞六月对话马克·安德森 | 万字全文 · HAI研究所5周年会议现场 (附视频)
  • 又火一个惊艳的开源项目,诞生了!
  • 泪目!博士论文致谢走红:感谢博一与我结婚的妻子
  • 217亿,字节打响拆分IPO的第一枪
  • Java ORM 双雄:Mybatis 和 Hibernate,你选哪个?
  • 又一个新项目完结,炸裂!
  • 奥特曼和老黄打起来了!Luma干的。。。
  • AlphaFold的伟大,只因做对了这5件事!DeepMind副总裁:团队注定会取得突破
  • 陶哲轩最新采访:AI将颠覆数学界!用Lean规模化,成百上千条定理一次秒杀
  • 英伟达开源3400亿巨兽,98%合成数据训出最强开源通用模型!性能对标GPT-4o
  • 北航等提出超大规模多语言代码评测基准,涵盖40种编程语言
  • ACL 2024 | 多模态大模型能揭示图像背后的深意吗?
  • 惊呆!大模型工程师月薪快10w了!