『7x24小时有问必答』
这几天连续发了好几篇上位机开发的文章,比如《PLC程序员上位机开发的5
上位机与 PLC 要实现数据交互,本质就三件事:

物理链路通 → 协议对得上 → 数据格式统一 → 双向通信打通
步骤
要解决什么问题
举例
① 物理链路
线怎么连?用什么接口?
网线(以太网)、串口线(RS485/RS232)、USB
② 通讯协议
两边说"同一种语言"吗?
Modbus TCP、Modbus RTU、OPC UA、S7协议、MC协议
③ 数据规则
同一个地址,双方读出来一样吗?
寄存器地址编号、数据类型(INT/FLOAT)、字节序(大端/小端)

  一句话理解:物理链路是修路,协议是选左行还是右行,数据规则是统一标志牌写法。三步都到位,上位机发指令、PLC回数据,双向通信才真正跑得通。
三步里任何一步出问题,通讯就断——线没接好是物理层故障,协议不匹配是两边"鸡同鸭讲",数据格式不统一是"看同一块牌子理解反了"。排查通讯问题,就按这个顺序从上往下查。

具体实现步骤和关键细节如下:

  第一步:搭建物理通讯链路

物理连接是数据交互的基础,需根据工业场景的距离、干扰强度、设备数量选择合适的连接方式,主流分为两类:

物理连接是通讯的"地基"——地基没打好,协议再对、数据再规范也白搭。
选什么连接方式,取决于三个条件:距离多远、干扰多大、设备多少
方案一:工业以太网(主流首选)
适用场景:中大型产线、多设备组网、智能工厂
层级
硬件配置
PLC 侧
以太网通讯模块(如西门子 CP343-1、三菱 FX5-ENET/IP);高端 PLC 自带网口,直接接交换机
上位机侧
工控机(IPC)或 HMI 配工业级网卡,网线/光纤接入同一交换机
传输介质
短距:屏蔽双绞线(抗电磁干扰);长距(跨车间/跨厂区):光纤
拓扑结构
小型系统:星型拓扑(所有设备接核心交换机);大型系统:分布式架构(车间级交换机 + 厂区级主干网)

  选型口诀:设备多、距离远、速率要求高 → 以太网,没得商量。
方案二:串口连接(老设备/低成本方案)
适用场景:小型设备、单点通信、老旧系统改造
层级
硬件配置
PLC 侧
自带串口(RS232/RS485/RS422)或扩展串口模块
上位机侧
原生串口 或 串口转USB模块

串口选型要点:
接口类型
通信方式
最大距离
适用场景
RS232
点对点(1对1)
≤15m
单机调试、短距临时通讯
RS485
多主多从(1对多)
≤1200m
多台设备组网、长距通讯
RS422
点对多点(单向传输)
≤1200m
需要单向隔离的场景

  选型口诀:RS232 点对点应急用,RS485 多设备长距离扛,RS422 单向隔离特殊场合。
两种方案对比:
对比维度
工业以太网
串口
通讯速率
100Mbps~1Gbps
9600~115200 bps
传输距离
100m(网线)/ 几十km(光纤)
RS232≤15m / RS485≤1200m
挂载设备数
几乎无限制
RS485最多32/128/256节点
抗干扰能力
强(屏蔽线+光纤)
一般(RS485差分信号尚可)
成本
较高
新项目推荐
首选
仅老设备改造或极低预算

第二步:选择匹配的工业通讯协议

物理链路通了,接下来要解决的是:两边说同一种"语言"吗?
这就是协议的作用——定义数据的格式、传输规则和校验方式。上位机和 PLC 协议不一致,就像两个人一个说中文一个说阿拉伯语,线接得再好也听不懂对方在说什么。
主流协议分两大类:
  一句话记住:标准协议是"普通话",谁都能说、谁都能懂;私有协议是"方言",只有自家设备之间能聊。选型时优先选标准协议,除非你被某家厂商绑定。

   第三步:定义数据交互规则(核心配置环节)

物理链路和协议都通了,接下来要解决最后一步:两边的数据地址对得上吗?
核心就一件事——地址映射。PLC 里某个寄存器存的是电机转速,上位机仪表盘上的数字也得指向同一个地址,数据才能跑得通。
第一步:PLC 侧配置
① 定义数据存储区——把数据"放"到约定好的位置
数据类型
西门子 PLC
三菱 PLC
说明
数字量输入
I 区(输入寄存器)
X(输入继电器)
传感器信号、按钮状态等
数字量输出
Q 区(输出寄存器)
Y(输出继电器)
控制电磁阀、继电器等
数值/参数
DB 块(数据寄存器)
D(数据寄存器)
温度、压力、速度等模拟量

② 配置通讯参数——和上位机"对暗号"
以太网连接
:IP 地址、子网掩码、端口号
串口连接
:站号、波特率、数据位、校验位、停止位
️  踩坑提醒:通讯参数必须两端完全一致,差一位校验位都连不上。配置完先做个 ping 测试或以太口诊断,确认链路通了再继续。

第二步:上位机侧配置
① 新建通讯驱动——告诉组态软件"跟谁聊、用什么语言"
在 WinCC / 组态王 / 力控 / 自研上位机中:

新建通讯驱动
选择协议(如 Modbus TCP、S7 协议、MC 协议)
填入 PLC 的 IP 地址 / 站号
测试连接,确认通讯状态变为"已连接"

② 数据地址映射——把界面变量和 PLC 寄存器绑死
上位机变量
功能
西门子地址
三菱地址
电机速度
只读(从PLC读数值)
DB3.DBD10
D300
启停按钮
读写(下发控制指令)
Q0.3
Y1
温度显示
只读
DB5.DBD0
D500

  一句话理解:地址映射就是"给每个监控画面上的元素贴一个标签,标签上写着PLC里对应的地址编号"。贴错了,数据显示就是错的。

第三步:选择数据交互方式
交互方式
工作原理
实时性
适用场景
轮询方式
(常用)
上位机按固定周期主动问 PLC 要数据
取决于轮询周期(通常100ms~1s)
绝大多数常规监控场景
中断方式
PLC 数据变化时主动向上位机推送
极高(毫秒级)
故障报警、急停信号等对实时性要求极高的场景

  选型建议:90% 的场景用轮询就够了,周期根据需求设。只有报警、急停这类"慢一秒就出事"的信号才需要用中断推送。两者可以组合使用——常规数据轮询,关键报警信号走中断。

第四步、 典型数据交互流程(以电机运行为例)

用一个完整案例串一遍全流程。
场景:  上位机监控电机转速 + 下发停机指令
上行链路(PLC → 上位机):读数据
下行链路(上位机 → PLC):写指令
完整流程拆解:
步骤
方向
动作
地址/协议
结果
传感器→PLC
采集电机转速
D40(数据寄存器)
PLC 拿到实时转速值
上位机→PLC
每200ms发读取请求
Modbus RTU 读D40
PLC 收到"请给我D40的值"
PLC→上位机
打包返回D40数据
Modbus RTU 应答帧
上位机拿到转速原始值
上位机
解析数据,刷新界面
仪表盘绑定D40
操作员看到实时转速
上位机→PLC
操作员点"停机"
Modbus RTU 写Y2=OFF
PLC 收到停机指令
PLC
执行停机逻辑
Y2断开→电机停转
电机停止
PLC→上位机
上传电机状态
X2="停止"
上位机界面显示"已停机"

  关键观察:这个案例完整展示了双向通信的闭环——上行读数据(轮询200ms)、下行写指令(操作员触发)、状态反馈(X2回传确认)。每一步对应哪个地址、走什么协议、产生什么结果,全部可追溯。

往期推荐

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码