Modbus TCP
Modbus = 电脑和 PLC 约定好的 “对话规则”TCP = 用网线 / 网络传输
合起来意思:
电脑和 PLC 用网线,说统一语言,互相通信!
告诉我,现在设备状态是多少?(读)比如:温度多少?电机转不转?
我命令你,把这个改成 XX!(写)比如:打开阀门、停止电机、设定温度 50 度
PLC 只干 2 件事:
如实回答
乖乖执行命令
你可以把 PLC 当成一个 大仓库,里面分 4 个房间:
1)线圈(0 区)→ 开关
只有两个状态:开 / 关控制:灯、电机、阀门、继电器
2)输入(1 区)→ 传感器信号
只能看,不能改比如:有没有物料、到位了没有
3)输入寄存器(3 区)→ 数值数据(只读)
温度、压力、流量、转速
4)保持寄存器(4 区)→ 可读写的数值
你可以读,也可以改比如:设定温度、目标速度、参数
通讯流程(像打电话一样简单)
电脑(主叫) → PLC(接听)
电脑插上网线,连接 PLC
电脑说:“我要读 4 区地址 0 的数据”
PLC 立刻回复:“数据是 123”
电脑说:“我要把 4 区地址 0 改成 456”
PLC 执行,然后回复:“改好了”
C# 怎么跟 PLC 通讯?(超级简单)
不用你懂底层,只用一个库:NModbus
流程只有 4 步:
填 PLC 的 IP
连接
读 / 写
得到结果
——————————————————————————————————————————————————
// 连接 PLC
client.Connect("192.168.1.10", 502);
第一行:连接 PLC
电脑 → 插上网线 → 呼叫 PLC → 建立连接
每个值的意思:
client客户端,就是电脑这一端
Connect连接
"192.168.1.10"PLC 的 IP 地址相当于 PLC 的门牌号必须写对,不然找不到 PLC
502Modbus TCP 固定端口号全世界 PLC 默认都是 502不用改
——————————————————————————————————————————————————————————————————————————
// 读保持寄存器(读数据)
var data = master.ReadHoldingRegisters(从站1, 地址0, 读1个);
电脑问 PLC:把你地址 0 位置的那个数值发给我!
每个值的意思:
master
主站 = 电脑(Modbus 里电脑是老大,PLC 是小弟)
ReadHoldingRegisters
读保持寄存器= 读 PLC 里面的数值(温度、速度、参数、状态都在这里)
第一个值:1 → 从站号
PLC 的编号几乎所有 PLC 默认都是 1不用改
第二个值:0 → 起始地址
你要读 PLC 的哪一个位置?= PLC 内部的房间号你写 0,就是读第 0 号地址
第三个值:1 → 读几个数据
读 1 个数值= 读 1 个房间
var data
把读到的值存到 data 里
——————————————————————————————————————————————————————————————————————————
// 写保持寄存器(发命令)
master.WriteSingleRegister(从站1, 地址0, 写123);
电脑命令 PLC:把地址 0 的数值改成 123!
每个值的意思:
WriteSingleRegister
写单个保持寄存器= 给 PLC 发指令、改参数、控制设备
第一个值:1 → 从站号
还是 PLC 编号,默认 1
第二个值:0 → 地址
改 PLC 哪一个位置?= 改 0 号地址
第三个值:123 → 要写进去的数值
你想让 PLC 变成多少,就写多少

浙公网安备 33010602011771号