温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Nmodubs4怎么实现单寄存器和多寄存器AO的读写

发布时间:2021-10-20 09:51:58 来源:亿速云 阅读:549 作者:柒染 栏目:大数据

Nmodubs4怎么实现单寄存器和多寄存器AO的读写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

项目效果图

Nmodubs4怎么实现单寄存器和多寄存器AO的读写

一、创建plc连接

  //用委托对象引用plc_connect方法。
                    Delegate_Connect connect1 = new Delegate_Connect(plc_connect);
                    a_status = 1;
                    connect1();

                    if (a_status == 0)
                    {
                        MessageBox.Show("网关连接失败!");
                        return;
                    }

二、plc连接IP和端口,创建tcp客户端

 private void plc_connect()
        {
            wg_ip = INI.InitClass.ReadString("application", "WG_IP", "");
            wg_port = INI.InitClass.ReadString("application", "WG_PORT", "");

            try
            {
                tcp_wg = new TcpClient(wg_ip, Convert.ToInt32(wg_port));
                my_wg = ModbusIpMaster.CreateIp(tcp_wg);
                a_status = 1;
            }
            catch (Exception exception)
            {
                a_status = 0;
            }
        }

三、多线程处理timer

 //启动timer多线程,每隔1秒刷新在线测试数据
            timer_plc_qry.Interval = 2000;
            //timer_plc_qry.Enabled = true;
            timer_plc_qry.Stop();
            timer_plc_qry.Elapsed += TimersTimerHandler;
            timer_plc_qry.Start();

   //多线程timer事件 在线测试
        private void TimersTimerHandler(object sender, EventArgs args)
        {
            if (a_status == 0) return;
            if (Interlocked.Exchange(ref inTimer_plc_qry, 1) == 0 && Start)
            {
                //连接设备
                read_plc();
                read_plc_switch();
            }
            Interlocked.Exchange(ref inTimer_plc_qry, 0);
        }

四、单寄存器和多寄存器

 if (list_core[i].data_type == "word")
                        {
                            try
                            {
                                read_result = my_wg.ReadHoldingRegisters(1, Convert.ToUInt16(list_core[i].address), 1);

                                if (read_result != null)
                                {
                                    read = read_result[0];  //读取单个寄存器 ushort类型
                                    this.arcScaleComponent1.Value = read;//进度条复制 
                                    Set_main_UAB(read.ToString());//label标签复制 
                                }

                            }
                            catch (Exception e)
                            {
                              
                            }

                        }
                        else if (list_core[i].data_type == "float")
                        {
                            read_result = my_wg.ReadHoldingRegisters(1, Convert.ToUInt16(list_core[i].address), 2);

                            if (read_result != null)
                            {
                                if (Islow)
                                {  
                                    read_float = ModbusUtility.GetSingle(read_result[1], read_result[0]); //读取多个寄存器,需用用函数 ModbusUtility 转换 
                                    this.arcScaleComponent1.Value = read_float;
                                    Set_main_UAB(read_float.ToString()); //设置主窗体控件
                                }else
                                {
                                    read_float = ModbusUtility.GetSingle(read_result[0], read_result[1]);
                                    this.arcScaleComponent1.Value = read_float;
                                    Set_main_UAB(read_float.ToString());
                                }
                            }
                        }

五、Nmodbus4常用方法:

方法名

作用

所需参数

返回值

对应功能码

ReadCoils

读取DO的状态

从站地址(8位)

byte slaveAddress

起始地址(16位)

 

ushort startAddress

读取数量(16位)

ushort numberOfPoints

bool[]

01

ReadInputs

读取DI的状态

从站地址(8位)

byte slaveAddress

起始地址(16位)

 

ushort startAddress

读取数量(16位)

ushort numberOfPoints

bool[]

02

ReadHoldingRegisters

读取AO的值

从站地址(8位)

byte slaveAddress

起始地址(16位) 

ushort startAddress

读取数量(16位)

ushort numberOfPoints

ushort[]

03

ReadInputRegisters

读取AI的值

从站地址(8 位)

byte slaveAddress

起始地址(16位)

 

ushort startAddress

读取数量(16位)

ushort numberOfPoints

ushort[]

04

WriteSingleCoil

写入值到DO

从站地址(8位)

byte slaveAddress

线圈地址(16位)

ushort coilAddress

写入值(布尔型)

bool value

无返回值

05

WriteSingleRegister

写入值到AO

从站地址(8位)

byte slaveAddress

寄存器地址(16位)

ushort registerAddress

写入值(16位)

ushort value

无返回值

06

WriteMultipleCoils

写多线圈寄存器

从站地址(8位)

byte slaveAddress

起始地址(16位)

ushort startAddress

写入值(布尔型数组)

bool[] data

无返回值

15

WriteMultipleRegisters

写多个保持寄存器

从站地址(8位)

byte slaveAddress

 

起始地址(16位)

ushort startAddress,

寄存器值(16位整型数组)

ushort[] data

无返回值

16

ReadWriteMultipleRegisters

读写多个保持寄存器

从站地址(8位)

byte slaveAddress

读起始地址(16位)

ushort startReadAddress

 

读取数量(16位)

ushort numberOfPointsToRead,

写入起始地址(16位)

ushort startWriteAddress,

写入值(16位整型数组)

ushort[] writeData

ushort[]

23

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ao
AI