2026/4/18 8:54:05
网站建设
项目流程
文明网i中国精神文明建设门户网站,做家政服务类网站的要求,wordpress主题制作难吗,网站建设工作描述C# 西门子S7协议SDK送源代码#xff0c;应用简单。
****不包含界面#xff0c;不包含界面#xff0c;不包含界面*****直接怼个C#的S7协议库有多爽#xff1f;先扔个GitHub地址自己体会#xff1a;https://github.com/S7NetPlus/s7netplus。这个库支持.NET Standard 2.0应用简单。 ****不包含界面不包含界面不包含界面*****直接怼个C#的S7协议库有多爽先扔个GitHub地址自己体会https://github.com/S7NetPlus/s7netplus。这个库支持.NET Standard 2.0连西门子PLC就跟玩似的先别急着搞界面咱们先把PLC当计算器用起来。先来个硬核操作——三行代码连PLCvar plc new Plc(CpuType.S71200, 192.168.0.1, 0, 1); plc.Open(); Console.WriteLine(plc.IsConnected ? 连上了 : 凉了);注意CpuType要选对型号S7-1200和S7-1500的魔数不一样。要是连不上先检查IP能不能ping通再确认下PLC是不是在STOP模式别笑真有人在这翻车。读个DB块数据比泡面还简单var result plc.Read(DB1.DBD4); // 读DB1的4号地址开始的4字节 if (result is byte[] bytes) { int value BitConverter.ToInt32(bytes, 0); Console.WriteLine($当前温度{value}℃); }这里有个暗坑——西门子的字节序是反的用BitConverter前得确认要不要自己反转数组。读字符串更刺激西门子喜欢在第一个字节存长度var strBytes plc.Read(DB1.DBB10); string result Encoding.ASCII.GetString(((byte[])strBytes).Skip(2).ToArray()); // 跳过长度字节写数据也别虚直接往死里怼bool[] output { true, false, true }; plc.Write(QB0, output); // 写输出寄存器Q0.0到Q0.2这时候要盯着PLC的Q点LED看有没有闪比什么调试工具都管用。突发奇想想批量读写上这个骚操作var items new ListDataItem { new DataItem { DataType DataType.DataBlock, DB 1, StartByteAdr 0, VarType VarType.Byte, Count 4 }, new DataItem { DataType DataType.Output, StartByteAdr 0, VarType VarType.Bit, BitAdr 5 } }; var results plc.ReadMultipleVars(items);记得处理好异常捕获PLC超时比女朋友生气还难哄。最后别忘了plc.Close()虽然理论上using语句更优雅但实战中见过直接断电把PLC搞崩的案例。这个库最狠的是能反编译源码直接改比如调整超时时间public class MyPlc : Plc { public MyPlc() : base(CpuType.S71500, 10.0.0.1, 0, 1) { base.ReadTimeout 3000; // 默认1秒不够就改 } }碰到协议解析问题直接下断点跟源码比看文档快十倍。别问为什么知道——都是被西门子官方文档坑出来的经验。