上位机通信速度有多快?

大家好!我是付工。

通信速度是很多人比较关心的话题,今天跟大家分享一下关于上位机通信实时性的一些观点。

一、通信分类

很多人认为通信应该越快越好。

对于上位机来说,是不是也这样呢?

我们看下这张工业网络拓扑图,由下至上,对通信实时性的要求是越来越低的。

在自动化领域中,通信分两类:

1、现场控制层与现场设备层通信

控制层与设备层通信,一般指PLC、DSC对接伺服、变频器、远程IO等,实时性要求会比较高,所以我们可以看到近些年工业的发展,以太网逐步替代串口RS485,Profinet逐步替代Profibus,以EtherCAT为主的各种总线的广泛应用。

2、过程监控层与现场控制层通信

监控层与控制层通信,一般指上位机对接PLC、DCS等,对实时性要求相对较低,通常毫秒级至秒级的延迟即可满足需求‌。这种场景更注重稳定性和兼容性,而非高速传输。

二、通信速度

曾经做过一项这样的测试,上位机与不同品牌PLC使用ModbusTCP通信,最终通信周期会有所不同。

极速对决:揭秘10种主流PLC在ModbusTCP通信中的速度表现!

虽然结果有所差异,但是基本上在0.3-10ms之间,仍然属于一个量级。

所以,通信速度取决于技术方案和系统设计。

当技术方案确定了,那么通信速度基本上也随之确定。

比如,我们采用RS485走ModbusRTU通信,那么通信周期可能就是几十毫秒,这个是可以计算出来的。

通信周期(T)可表示为:

其中:帧传输时间‌ = 帧字节数 × 每字节传输时间

波特率 9600-N-8-1配置,读取10个寄存器为例:

帧字节数=8(请求)+25(响应)=33

每个字节总位数‌=起始位(1位)+数据位(8位)+校验位(0位)+停止位(1位)‌

每字节传输时间=10/9600≈1.04ms

帧传输时间=33*1.04≈34.32ms

若从站响应时间 30 ms,超时余量 30 ms,则总周期 ≈ ‌94.32 ms‌‌

即使通过各种方式优化,最快也差不多几十ms。

这个就像在普通马路上,即使顶级赛车,速度也提不上去。

三、通信优化

技术方案确定,通信速度随之确定,这个确定的通信速度指的是单次交互时间。

而整个通信周期的公式如下:

通信周期=单次交互时间*交互次数。

因此如果我们希望通信周期变短,我们就应该减少交互次数。

那么如何减少交互次数?

方案1:变量连续性:以PDU作为标准,尽量将交互的地址集中到连续的区域。

以三菱PLC为例,一次性可以读取960个字,2000个位,这个项目总共有400多个变量,集中在D区和M区,我跟PLC工程师沟通好,只需要读取300个D寄存器和200个M存储区,这样只需要2次交互,通信周期可以达到5-10ms。

方案2:协议支持:某些协议支持零散存储区读取,比如可以同时读取D区和M区,必要时可以使用该方式。

方案3:优先级处理:根据变量的重要程度,制定不同的优先级,比如有的需要实时读取,有的可能3秒读一次,有的可能5秒读一次。

方案4:根据界面处理:不同的界面对应的不同的通信组,打开某个界面只读取该界面需要交互的变量。

大多数情况下,我们采用方案1就可以解决,如果方案1解决不了,我们再考虑其他方案。

相关推荐
熊猫钓鱼>_>25 分钟前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
Ai-_Man38 分钟前
Coze扣子还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·1024程序员节
raindayinrain1 小时前
c++设计模式
开发语言·c++·设计模式
hiahiahia1231 小时前
Streaming Model Output
开发语言·前端
熊猫钓鱼>_>1 小时前
鸿蒙PC高分屏与键鼠交互适配:DPI缩放、右键菜单一次讲清
开发语言·笔记·华为·ai编程·harmonyos·鸿蒙·鸿蒙心迹
octopus_c2 小时前
C++ 运算符重载详解 && 日期类的实现
开发语言·c++
Eiceblue2 小时前
用 Python 给 Word 文档加水印:文字、图片与批量处理
开发语言·vscode·python·word
j7~2 小时前
【C++ 面试笔记】(篇二):类与数据抽象 & STL 容器与算法
开发语言·c++·面试·stl容器和算法·类和数据抽象
Fuyo_11192 小时前
深入解析 C++ unordered_set 与 unordered_map 的核心特性与性能实战
开发语言·c++
ShineWinsu3 小时前
对于Qt:QPushButton常见属性的解析
开发语言·c++·qt·api·gui·按钮·qpushbutton