分享

C# 台达PLC数据读写——ModbusTcp通信

 吴敬锐 2023-09-14
using NModbus; using System; using System.Net.Sockets; namespace ModbusTCP { class Program { private static ModbusFactory modbusFactory; private static IModbusMaster master; static void Main(string[] args) { ModbusTcp(); Console.ReadLine(); } public async static void ModbusTcp() { //初始化modbusmaster modbusFactory = new ModbusFactory(); //实例化 , ModbusTcp通信协议端口号为 502 master = modbusFactory.CreateMaster(new TcpClient('192.168.1.5', 502)); //设置读取超时时间 master.Transport.ReadTimeout = 2000; master.Transport.Retries = 2000; try { //01 读取单个线圈(站号,起始地址,长度) 读寄存器地址M10 bool[] coilsBuffer = master.ReadCoils(1, 10, 1); for (int i = 0; i < coilsBuffer.Length; i++) { Console.Write(coilsBuffer[i] + ' '); } Console.WriteLine(' '); //02 读取输入线圈/离散量线圈 coilsBuffer = master.ReadInputs(1, 2, 1); for (int i = 0; i < coilsBuffer.Length; i++) { Console.Write(coilsBuffer[i] + ' '); } Console.WriteLine(' '); //03 读取保持寄存器 读寄存器地址D20 ushort[] registerBuffer = master.ReadHoldingRegisters(1, 20, 1); for (int i = 0; i < registerBuffer.Length; i++) { Console.Write(registerBuffer[i] + ' '); } //05 写单个线圈(站号,起始地址,值) bool[] coilsBufferW = new bool[] { true }; await master.WriteSingleCoilAsync(1, 0, coilsBufferW[0]); Console.WriteLine('写单个线圈操作完成!'); //06 写单个输入线圈/离散量线圈 ushort[] registerBufferW = new ushort[2]; await master.WriteSingleRegisterAsync(1, 0, registerBufferW[0]); Console.WriteLine('写单个输入线圈/离散量线圈操作完成!'); //15 写一组线圈 bool[] coilsBufferList = new bool[] { true, false }; await master.WriteMultipleCoilsAsync(1, 0, coilsBufferList); Console.WriteLine('写一组线圈操作完成!'); //16 写一组保持寄存器 await master.WriteMultipleRegistersAsync(1, 0, registerBuffer); Console.WriteLine('写一组保持寄存器操作完成!'); master.Dispose(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多