Nmodubs4怎么實現(xiàn)單寄存器和多寄存器AO的讀寫,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
成都網(wǎng)站建設、成都做網(wǎng)站介紹好的網(wǎng)站是理念、設計和技術(shù)的結(jié)合。成都創(chuàng)新互聯(lián)擁有的網(wǎng)站設計理念、多方位的設計風格、經(jīng)驗豐富的設計團隊。提供PC端+手機端網(wǎng)站建設,用營銷思維進行網(wǎng)站設計、采用先進技術(shù)開源代碼、注重用戶體驗與SEO基礎,將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
項目效果圖

一、創(chuàng)建plc連接
  //用委托對象引用plc_connect方法。
                    Delegate_Connect connect1 = new Delegate_Connect(plc_connect);
                    a_status = 1;
                    connect1();
                    if (a_status == 0)
                    {
                        MessageBox.Show("網(wǎng)關連接失敗!");
                        return;
                    }
二、plc連接IP和端口,創(chuàng)建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秒刷新在線測試數(shù)據(jù)
            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]); //讀取多個寄存器,需用用函數(shù) ModbusUtility 轉(zhuǎn)換 
                                    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常用方法:
| 方法名 | 作用 | 所需參數(shù) | 返回值 | 對應功能碼 | 
| ReadCoils | 讀取DO的狀態(tài) | 從站地址(8位) byte slaveAddress 起始地址(16位) 
 ushort startAddress 讀取數(shù)量(16位) ushort numberOfPoints | bool[] | 01 | 
| ReadInputs | 讀取DI的狀態(tài) | 從站地址(8位) byte slaveAddress 起始地址(16位) 
 ushort startAddress 讀取數(shù)量(16位) ushort numberOfPoints | bool[] | 02 | 
| ReadHoldingRegisters | 讀取AO的值 | 從站地址(8位) byte slaveAddress 起始地址(16位) ushort startAddress 讀取數(shù)量(16位) ushort numberOfPoints | ushort[] | 03 | 
| ReadInputRegisters | 讀取AI的值 | 從站地址(8 位) byte slaveAddress 起始地址(16位) 
 ushort startAddress 讀取數(shù)量(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 寫入值(布爾型數(shù)組) bool[] data | 無返回值 | 15 | 
| WriteMultipleRegisters | 寫多個保持寄存器 | 從站地址(8位) byte slaveAddress 
 起始地址(16位) ushort startAddress, 寄存器值(16位整型數(shù)組) ushort[] data | 無返回值 | 16 | 
| ReadWriteMultipleRegisters | 讀寫多個保持寄存器 | 從站地址(8位) byte slaveAddress 讀起始地址(16位) ushort startReadAddress 
 讀取數(shù)量(16位) ushort numberOfPointsToRead, 寫入起始地址(16位) ushort startWriteAddress, 寫入值(16位整型數(shù)組) ushort[] writeData | ushort[] | 23 | 
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。
                文章題目:Nmodubs4怎么實現(xiàn)單寄存器和多寄存器AO的讀寫
                
                網(wǎng)址分享:http://chinadenli.net/article22/goijjc.html
            
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供自適應網(wǎng)站、網(wǎng)站設計、網(wǎng)站排名、企業(yè)網(wǎng)站制作、服務器托管、網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
