Nmodbus4的详细应用

最近,自己写modbustcp,自己拼接字节串,那个麻烦啊,让人崩溃,干脆在软件上搜索,看看动态库Nmodbus4是否好用,那就来一段吧,写一个小的demo,闲话少说,直接上程序

 static void Main(string[] args)
    {
    
        string ipaddress = "192.168.1.10";
        int port = 502;
        IPEndPoint IPE = new IPEndPoint(IPAddress.Parse(ipaddress),port);
        TcpClient client = new TcpClient();
        client.Connect(IPE);
        //创建ip;
        
        try {
            //对plc进行有效连接
            ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
            master.Transport.ReadTimeout = 1500;
            Console.WriteLine("成功连接到plc");
            
            //1.读取装置的线圈状态 Q点
            //bool[] Coils = new bool[20];  
            //Thread t1 = new Thread((s)=> {
            //    while (true)
            //    {
            //        StringBuilder sb = new StringBuilder();
            //        Coils = master.ReadCoils(0, 10);
            //        for (int i = 0; i < 10; i++)
            //        {
            //            sb.Append(Coils[i]+"   ");
            //        }
            //        Console.WriteLine("output:" + sb.ToString()+"\r\n");
            //        Thread.Sleep(1000);
            //    }
            //});
            //t1.IsBackground = true;
            //t1.Start();

            2.读取装置输入点的状态 输入点1点;
            //bool[] inputCoils = new bool[20];
            //Thread t2 = new Thread((s) => {
            //    while (true)
            //    {
            //        StringBuilder sb = new StringBuilder();
            //        inputCoils = master.ReadInputs(0,10);
            //        for (int i = 0; i < 10; i++)
            //        {
            //            sb.Append(inputCoils[i] + "   ");
            //        }
            //        Console.WriteLine("input:"+sb.ToString() + "\r\n");
            //        Thread.Sleep(1000);
            //    }
            //});
            //t2.IsBackground = true;
            //t2.Start();

            3.读取模拟量AI的值
            //ushort[] inputRegisters = new ushort[10];
            //Thread t3 = new Thread((s) => {
            //    while (true)
            //    {
            //        StringBuilder sb = new StringBuilder();
            //        inputRegisters = master.ReadInputRegisters(0,10);
            //        for (int i = 0; i < 10; i++)
            //        {
            //            sb.Append(inputRegisters[i] + "   ");
            //        }
            //        Console.WriteLine("inputRegisters:" + sb.ToString() + "\r\n");
            //        Thread.Sleep(1000);
            //    }
            //});
            //t3.IsBackground = true;
            //t3.Start();

            //读取多个保持型寄存器
            //Thread t6 = new Thread((s) => {
            //    ushort[] registers = new ushort[50];
            //    while (true)
            //    {
            //        StringBuilder sb = new StringBuilder();
            //        registers = master.ReadHoldingRegisters(0,5);
            //        for (int i = 0; i < 5; i++)
            //        {
            //            sb.Append(registers[i]+"  ");
            //        }
            //        Console.WriteLine(sb.ToString()+"\r\n");
            //        Thread.Sleep(1000);
            //    }
            //});
            //t6.IsBackground = true;
            //t6.Start();


            4.对Q点进行写入    写单个寄存器
            //int p = 0;
            //bool flag = false;
            //Thread t4 = new Thread((s) => {
            //    while (true)
            //    {
            //        p++;
            //        if (p % 2 == 1)
            //        {
            //            flag = true;
            //        }
            //        else flag = false;
            //        master.WriteSingleCoil(5,flag);
            //        Console.WriteLine("写入的第5位为:" + flag + "\r\n");
            //        Thread.Sleep(1000);
            //    }
            //});
            //t4.IsBackground = true;
            //t4.Start();

            5.保持型寄存器   写单个寄存器
            //ushort q = 0;
            //Thread t5 = new Thread((s) => {
            //    while (true)
            //    {
            //        q++;
            //        master.WriteSingleRegister(2,q);
            //        Console.WriteLine("保持寄存器写入的第2个为:" +q + "\r\n");
            //        Thread.Sleep(1000);
            //    }
            //});
            //t5.IsBackground = true;
            //t5.Start();

            //7.保持寄存器多个写入
            Thread t7 = new Thread((s) => {
                ushort k1 = 0, k2 = 1;
                ushort[] registers = new ushort[2] {k1,k2 };
                while (true)
                {
                    registers[0]++;
                    registers[1]++;
                    master.WriteMultipleRegisters(0,registers);
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < 2; i++)
                    {
                        sb.Append(registers[i] + "  ");
                    }
                    Console.WriteLine("多寄存器写入数据位:"+sb.ToString() + "\r\n");
                    Thread.Sleep(1000);
                }
            });
            t7.IsBackground = true;
            t7.Start();
        }
        catch
        {
            Console.WriteLine("plc连接失败");
        }
        Console.ReadKey();
    }
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值