当前位置: 首页 > news >正文

第四阶段C#通讯开发-9:网络协议Modbus下的TCP与UDP

1_串行端口

指的是运行在串行通信物理层上的 Modbus 协议,主要有两种:

  • Modbus RTU(远程终端单元): 最常用、最经典的串行 Modbus 版本。数据以二进制形式传输,紧凑高效。

  • Modbus ASCII: 一种较老、较少使用的变体。数据以可读的ASCII字符(十六进制)传输,效率较低,但易于调试。

  • 工作原理: 基于 RS-485(多节点、长距离)或 RS-232(点对点、短距离)电气标准。是一种点对点总线型的物理连接。

  • 特点

    • 优点: 简单、可靠、硬件成本低、抗干扰能力强(RS-485)。

    • 缺点: 通信速度较慢、传输距离有限(通常<1200米)、布线复杂(尤其是多设备时)。

  • 典型应用: 传统的工业控制系统,车间内连接PLC、仪表、电机驱动器等设备。

2_Modbus TCP/IP

这是将 Modbus 协议嵌入到现代以太网 TCP/IP 协议栈中的版本。

  • 工作原理: 它把 Modbus 协议(应用层数据)作为有效载荷封装在 TCP(传输控制协议) 数据包中。TCP 是一种面向连接的协议,能确保数据包的顺序和可靠传输。

  • 特点

    • 优点: 速度快(以太网速度)、传输距离远(可跨局域网甚至互联网)、布线简单(使用标准网线和水晶头)、支持大量设备连接(理论上可达IP地址上限)。

    • 缺点: 需要设备具有以太网端口,协议开销比串行版稍大。

  • 典型应用: 现代工厂的信息化层,用于连接车间的控制器与上位的监控系统(SCADA)、制造执行系统(MES)或云平台。是当前最主流的工业以太网协议之一。

3_Modbus UDP/IP

与 Modbus TCP/IP 类似,但使用了不同的传输层协议。

  • 工作原理: 它将 Modbus 协议封装在 UDP(用户数据报协议) 数据包中。UDP 是一种无连接的协议,不保证数据包的顺序或送达。

  • 特点

    • 优点: 通信速度极快、协议开销更小(没有建立连接和确认机制)。

    • 缺点不可靠,数据包可能丢失或乱序。

  • 典型应用: 适用于对实时性要求极高,但可以容忍偶尔数据丢失的场景,例如广播式查询(一个主站同时向多个从站发送指令)或高速数据采集。

4_Modbus RTU Over TCP/IP 与 5. Modbus RTU Over UDP/IP

这两种是“隧道”或“封装”技术,可以理解为“在以太网上跑串行数据”。

  • 工作原理: 它不修改原始的 Modbus RTU 数据帧。而是将整个 RTU 数据帧(包括地址、功能码、数据和CRC校验)原封不动地作为有效载荷,装入一个 TCP 或 UDP 数据包中进行传输。

  • 与 Modbus TCP/IP 的关键区别

    • Modbus TCP 有自己新的帧结构(增加了MBAP头,去掉了CRC校验,改用TCP本身的校验)。

    • RTU Over TCP/IP 只是把串行线上的比特流通过网线来传输。

  • 特点

    • 优点: 方便实现串行设备联网。通过一个“网关”或“转换器”,可以将传统的串口 Modbus 设备轻松接入以太网,而无需修改设备本身的固件。

    • 缺点: 效率低于原生 Modbus TCP,因为保留了冗余的校验和帧结构。

  • 典型应用

    • 使用串口服务器(Serial-to-Ethernet Converter)将串口设备(如一台Modbus RTU的PLC)连接到网络。

    • 一些软件或网关为了兼容性,会选择这种方式来透明传输数据。

6_核心区别对比表

协议通信类型 / 可靠性速度典型应用场景简单比喻
串行端口 (Modbus RTU)串行线,可靠传统设备,车间底层控制写信:一对一或一对多广播,速度慢但可靠。
Modbus TCP/IP基于TCP,面向连接,可靠现代工业网络,设备与上位机通信打电话:先拨号建立连接,保证对话有序不丢失。
Modbus UDP/IP基于UDP,无连接,不可靠极快高速广播、实时性要求高的场景大声喊话:快速向一群人喊话,但可能有人没听清。
Modbus RTU Over TCP/UDP隧道模式,可靠性取决于底层(TCP/UDP)中等串口设备通过网络扩展把信装在快递盒里通过网络寄送:内容还是信(RTU帧),但用了更快的运输方式(网络)。

7_Modbus TCP和设备通讯

在使用Modbus TCP和设备通讯时,角色划分: 设备(模拟器)充当了服务器。 开发的软件充当了客户端。 客户端去服务器上请求数据。即:开发的软件从设备上采集数据。

8_示例代码

(1)编写客户端之前,需要设置从机的连接方式为Modbus(TCP或UDP)

(2)与之前Socket(TCP/UDP),SerialPort之间的区别

之前的串口使用Modbus创建主机实例的时候,需要传入SerialPort示例作为参数,现在需要使用TCP或者UDP创建,并使用ModbusIpMaster.CreateIP创建主机,与从机进行通讯

Modbus (RTU OverUDP)需要UDP实例,Modbus(RTUOverTCP)需要TCP实例

示例主要代码

//连接
private void btnConn_Click(object sender, EventArgs e)
{if (raTCP.Checked){//TCP//创建了一个tcp客户端tcpClient = new TcpClient();//连接tcpClient.ConnectAsync(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));// ModbusSerialMaster.CreateRtu("串口对象");master = ModbusIpMaster.CreateIp(tcpClient);
​}else if (raUDP.Checked){// UDPudpClient=  new UdpClient();udpClient.Connect(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));master = ModbusIpMaster.CreateIp(udpClient);}else if (raRUTOT.Checked){// RTU  Over  TCPtcpClient = new TcpClient();tcpClient.ConnectAsync(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));
​master = ModbusSerialMaster.CreateRtu(tcpClient);}else{ // RTU  Over  UDPudpClient = new UdpClient();udpClient.Connect(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));master = ModbusSerialMaster.CreateRtu(udpClient);}
}
​
//实时读取
Task.Run(async () =>{while (!cts.IsCancellationRequested){//读取数据//ReadXXXX() 发的就是请求报文(采集数据,相当于功能码 )0X03)//WriteXXXX() 发的也是请求报文(更改数据,相当于功能码) 0X06 0X10ushort [] data =  master.ReadHoldingRegisters(1,0,4);}},cts.Token);

http://www.dtcms.com/a/582030.html

相关文章:

  • 《计算机操作系统》_并发 bug 和应对 (死锁/数据竞争/原子性违反;防御性编程和动态分析)20251106
  • 【算法】递归的艺术:从本质思想到递归树,深入剖析算法的性能权衡
  • 网上怎么做网站赚钱seo初级入门教程
  • MySQL GROUP BY 和 GROUP_CONCAT 使用方法总结,group by后将其他的字段整合到一个字段中 并通过逗号链接或指定其他链接符号
  • 数字人|数字人企业技术派选择
  • 简单实现文字两端对齐
  • Flink Rebalance触发乱序的问题
  • 联合建设官方网站公司邮箱怎么在手机上登录
  • 代理龙华网站建设深圳英迈思做网站好么
  • UE网络复制中的可靠函数是什么意思 什么时候要勾选什么时候不勾?
  • 沈阳做网站建设微信公众号小程序开发教程
  • slice在Python和Go中的异同
  • 科技公司网站设计公司天津定制开发网站
  • 3 个近期 yyds 的 AI 开源项目, 有点绝。
  • 智启未来 共筑开放新生态——2025进博会人工智能亮点纷呈
  • python函数及面向过程高级特性
  • python+django/flask的莱元元电商数据分析系统_电商销量预测
  • Git分支创建与推送全攻略
  • python+django/flask基于Echarts+Python的图书零售监测系统设计与实现(带大屏)
  • 获取网站访问qq承德网站建设制作
  • 运用阿里云怎么做网站网站建设内容介绍
  • Redis_7_hash
  • 建站行业有前途个人主页网页设计案例
  • 数据分析报表如何选?详解 DataEase 四大表格:明细表、汇总表、透视表与热力图的适用场景与选择策略
  • 建立电商网站克拉玛依燃气公司主页
  • 关于从嘉立创导入元器件的原理图和封装到 Cadence 保姆级教程
  • 成都网站建设及推广谷歌浏览器引擎入口
  • 详解:长连接/短连接/Cookie/Session/WebSocket
  • 如何选择两种缓存更新策略(写缓存+异步写库;写数据库+异步更新缓存)
  • pcl::ProjectInliers功能介绍,分别对平面、直线、圆、圆柱提供详细范例及可视化展示