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

C#实现与西门子S7-1200_1500 PLC通信

C#实现与西门子S7-1200/1500 PLC通信,三种主流通信方式(S7协议、Modbus TCP、OPC UA)


一、S7协议通信(推荐)

1. 使用Sharp7库
// NuGet安装:Install-Package Sharp7
using Sharp7;public class S7CommSharp7 {private S7Client _client = new S7Client();// 连接PLCpublic bool Connect(string ip, int rack=0, int slot=1) {int result = _client.ConnectTo(ip, rack, slot);return result == 0; // 返回连接状态}// 读取DB块数据(如DB1中前10字节)public byte[] ReadDB(int dbNumber, int start, int size) {byte[] buffer = new byte[size];int result = _client.DBRead(dbNumber, start, size, buffer);if (result != 0) throw new Exception($"读取失败,错误码:{result}");return buffer;}// 写入Int类型数据到DB块public void WriteInt(int dbNumber, int offset, int value) {byte[] buffer = new byte[2];S7.SetIntAt(buffer, 0, value);_client.DBWrite(dbNumber, offset, 2, buffer);}
}

关键配置

  • PLC需开启S7通信权限(TIA Portal中启用“允许远程通信”)。
  • 默认端口102,机架号0,槽号1(S7-1200/1500)。

二、Modbus TCP通信

1. PLC配置
  • 在TIA Portal中启用Modbus TCP服务器功能。
  • 设置端口号(默认502)和存储区映射(如DB块地址→Modbus寄存器)。
2. C#客户端实现
// NuGet安装:Install-Package NModbus4
using NModbus;public class ModbusComm {private IModbusMaster _master;public void Connect(string ip, int port=502) {TcpClient tcpClient = new TcpClient(ip, port);_master = Modbus.Transport.CreateIp(tcpClient);}// 读取保持寄存器(如地址40001对应DB1.DBW0)public ushort[] ReadRegisters(byte slaveId, ushort startAddr, ushort count) {return _master.ReadHoldingRegisters(slaveId, startAddr, count);}// 写入浮点数(需转换为两个ushort)public void WriteFloat(byte slaveId, ushort startAddr, float value) {ushort[] data = BitConverter.GetBytes(value).ToUshortArray();_master.WriteMultipleRegisters(slaveId, startAddr, data);}
}

地址转换规则

  • DB1.DBW0 → Modbus地址40001(需PLC配置映射)。

三、OPC UA通信(跨平台推荐)

1. PLC端配置
  1. TIA Portal中启用OPC UA服务器:
    • PLC属性 → OPC UA → 激活服务器功能。
    • 配置安全策略(如用户名/密码)。
    • 发布变量(选择DB块中的Tag)。
  2. 记录PLC的OPC UA端点地址:opc.tcp://192.168.0.1:4840
2. C#客户端代码
// NuGet安装:Install-Package Opc.Ua.Client
using Opc.Ua.Client;public class OpcUaComm {private Session _session;public void Connect(string endpointUrl) {ApplicationConfiguration config = new ApplicationConfiguration();var endpoint = new ConfiguredEndpoint(null, new EndpointDescription(endpointUrl));_session = Session.Create(config, endpoint).GetAwaiter().GetResult();}// 读取浮点数变量public float ReadFloat(string nodeId) {DataValue value = _session.ReadValue(nodeId);return (float)value.Value;}// 写入布尔值public void WriteBool(string nodeId, bool state) {_session.WriteValue(nodeId, state);}
}

节点ID示例

  • ns=3;s=\"DB1\".\"Temperature\"(TIA Portal自动生成)。

四、性能优化与错误处理

1. 异步读写(避免阻塞UI)
// Sharp7异步读取示例
public async Task<byte[]> ReadDBAsync(int dbNumber, int start, int size) {return await Task.Run(() => ReadDB(dbNumber, start, size));
}
2. 异常处理模板
try {plc.WriteInt(1, 0, 100);
} catch (Exception ex) {// 网络中断重连if (ex.Message.Contains("Connection refused")) {plc.Reconnect();plc.WriteInt(1, 0, 100); // 重试}// 记录日志Logger.Log($"写入失败:{ex.Message}");
}
3. 心跳监测
// 定时检查连接状态
Timer _heartbeatTimer = new Timer(_ => {if (!plc.IsConnected) plc.Connect();
}, null, 0, 5000); // 每5秒检测一次

参考代码 PC与西门子S7-1200 1500 C#通讯例程 www.youwenfan.com/contentcsf/111882.html

总结

  • 基础通信:首选Sharp7或S7.NetPlus,适合高速本地控制。
  • 跨系统集成:OPC UA为工业4.0标准方案,支持云端数据中台。
  • 遗留系统兼容:Modbus TCP适用于第三方设备集成。
http://www.xdnf.cn/news/1431505.html

相关文章:

  • 【一张图看懂Kafka消息队列架构】
  • AI 在教育领域的落地困境:个性化教学与数据隐私的平衡之道
  • 278-基于Django的协同过滤旅游推荐系统
  • 多个大体积PDF文件怎么按数量批量拆分成多个单独文件
  • sed相关知识
  • 国行 iPhone17 会支持 eSIM 吗?最新爆料与区别解读
  • 华晨宇火星演唱会苏州站连唱三晚 万人狂欢共度浪漫七夕
  • 便携式显示器怎么选?:6大关键指标全解析
  • Windows 命令行:父目录与子目录
  • 科研绘图(二):R 语言实现小鼠脑图谱 3D 渲染,附完整代码与数据获取指南
  • 【Datawhale之Happy-LLM】3种常见的decoder-only模型——Github最火大模型原理与实践教程task07
  • C++的演化历史
  • C语言精选100道编程题(附有图解和源码)
  • B2B营销面临的一些主要问题
  • PyTorch实战——GoogLeNet与Inception详解
  • 【AI - nlp】Transformer输入部分要点
  • 无人机小尺寸RFSOC ZU47DR板卡
  • 无人机GPS悬停模块技术解析
  • Swift 解法详解:LeetCode 369《给单链表加一》
  • HTML应用指南:利用POST请求获取全国便利蜂门店位置信息
  • PyTorch 面试题及详细答案120题(106-115)-- 理论与拓展
  • Docker零基础入门指南
  • 两台电脑通过网线直连共享数据,设置正确,却互相ping不通的解决方法
  • 【设计模式】通俗讲解设计模式的七大原则
  • Linux——简单线程池封装案例
  • Sping Web MVC入门
  • 【机器学习深度学习】向量检索到重排序:RAG 系统中的优化实践
  • 关于ANDROUD APPIUM安装细则
  • 分页功能设计
  • MYSQL配置复制拓扑知识点