最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 使用modbus 讀取PLC 寄存器地址的方法

 更新時(shí)間:2021年10月21日 15:19:19   作者:peiban1994  
今天通過(guò)本文給大家介紹C# 使用modbus 讀取PLC 寄存器地址的方法,使用的組件Nmodbus,文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧

使用的組件Nmodbus

定義參數(shù),全局變量:

//創(chuàng)建modbus實(shí)體對(duì)象        private static ModbusFactory modbusFactory;
        private static IModbusMaster master;
        //寫線圈或?qū)懠拇嫫鲾?shù)組
        bool[] coilsBuffer;
        ushort[] registerBuffer;
        //功能碼
        string functionCode;
        //參數(shù)(分別為站號(hào),起始地址,長(zhǎng)度)
        byte slaveAddress;
        ushort startAddress;
        ushort numberOfPoints;

        //ip 地址與端口號(hào)
        string IPAddress = string.Empty;
        int VisitPort = 502;

初始化參數(shù),創(chuàng)建連接:

private void Connection(object sender, EventArgs e)
         {
          try
           {
                //PLC連接配置信息,PLC ip地址
                IPAddress =127.0.0.1;                //端口,modbus 默認(rèn)502,根據(jù)實(shí)際情況填寫
                VisitPort =502;

                //初始化modbusmaster
                modbusFactory = new ModbusFactory();
                //在本地測(cè)試 所以使用回環(huán)地址,modbus協(xié)議規(guī)定端口號(hào) 502
                master = modbusFactory.CreateMaster(new TcpClient(IPAddress, VisitPort));
                //設(shè)置讀取超時(shí)時(shí)間
                master.Transport.ReadTimeout = 10000;
                master.Transport.Retries = 2000;  
            }
            catch (Exception ex)
            {
              MessageBox.Show(ex.Message);
            }
        }

初始化讀寫參數(shù)

/// <summary>
        /// 初始化讀參數(shù)
        /// </summary>
        private void SetReadParameters(int slaveAddress=1,int startAddress=200,int numberOfPoints=1)
        {           //DeviceID
           slaveAddress = byte.Parse(slaveAddress);           //起始地址,
           startAddress = ushort.Parse(startAddress);           //數(shù)據(jù)長(zhǎng)度
           numberOfPoints = ushort.Parse(numberOfPoints);            
        }

運(yùn)行讀取方法

private async void ExecuteFunction()
        {
            try
            {             //Moddbus共有這些功能碼               //01 Read Coils               //02 Read DisCrete Inputs               //03 Read Holding Registers               //04 Read Input Registers               //05 Write Single Coil               //06 Write Single Registers               //0F Write Multiple Coils               //10 Write Multiple Registers                 functionCode="01 Read Coils";//根據(jù)實(shí)際點(diǎn)號(hào)類型選擇讀寫功能碼
                //重新實(shí)例化是為了 modbus slave更換連接時(shí)不報(bào)錯(cuò) 
                //master = modbusFactory.CreateMaster(new TcpClient(IPAddress, VisitPort));
                if (functionCode != null)
                {
                    switch (functionCode)
                    {
                        case "01 Read Coils"://讀取單個(gè)線圈
                            SetReadParameters();
                            coilsBuffer = master.ReadCoils(slaveAddress, startAddress, numberOfPoints);

                            for (int i = 0; i < coilsBuffer.Length; i++)
                            {
                                SetMsg(coilsBuffer[i] + " ");
                            }
                            SetMsg("\r\n");
                            break;
                        case "02 Read DisCrete Inputs"://讀取輸入線圈/離散量線圈
                            SetReadParameters();

                            coilsBuffer = master.ReadInputs(slaveAddress, startAddress, numberOfPoints);
                            for (int i = 0; i < coilsBuffer.Length; i++)
                            {
                                SetMsg(coilsBuffer[i] + " ");
                            }
                            SetMsg("\r\n");
                            break;
                        case "03 Read Holding Registers"://讀取保持寄存器
                            SetReadParameters();
                            registerBuffer = master.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints);
                            for (int i = 0; i < registerBuffer.Length; i++)
                            {
                                SetMsg(registerBuffer[i] + " ");
                            }
                            SetMsg("\r\n");
                            break;
                        case "04 Read Input Registers"://讀取輸入寄存器
                            SetReadParameters();
                            registerBuffer = master.ReadInputRegisters(slaveAddress, startAddress, numberOfPoints);
                            for (int i = 0; i < registerBuffer.Length; i++)
                            {
                                SetMsg(registerBuffer[i] + " ");
                            }
                            SetMsg("\r\n");
                            break;
                        case "05 Write Single Coil"://寫單個(gè)線圈
                            SetWriteParametes();
                            await master.WriteSingleCoilAsync(slaveAddress, startAddress, coilsBuffer[0]);
                            break;
                        case "06 Write Single Registers"://寫單個(gè)輸入線圈/離散量線圈
                            SetWriteParametes();
                            await master.WriteSingleRegisterAsync(slaveAddress, startAddress, registerBuffer[0]);
                            break;
                        case "0F Write Multiple Coils"://寫一組線圈
                            SetWriteParametes();
                            await master.WriteMultipleCoilsAsync(slaveAddress, startAddress, coilsBuffer);
                            break;
                        case "10 Write Multiple Registers"://寫一組保持寄存器
                            SetWriteParametes();
                            await master.WriteMultipleRegistersAsync(slaveAddress, startAddress, registerBuffer);
                            break;
                        default:
                            break;
                    }

                }
                else
                {
                    MessageBox.Show("請(qǐng)選擇功能碼!");
                }
                master.Dispose();
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

//展示消息

/// <summary>
        /// SetMessage
        /// </summary>
        /// <param name="msg"></param>
        public void SetMsg(string msg)
        {     
            MessageBox.Show(msg);
        }

到此這篇關(guān)于C# 使用modbus 讀取PLC 寄存器地址的文章就介紹到這了,更多相關(guān)C# 讀取PLC 寄存器地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中對(duì)稱加密算法的踩坑日常記錄

    C#中對(duì)稱加密算法的踩坑日常記錄

    這篇文章主要給大家介紹了關(guān)于C#中對(duì)稱加密算法的踩坑日常記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • c#中oracle的to_date函數(shù)使用方法

    c#中oracle的to_date函數(shù)使用方法

    C#使用參數(shù)傳值方式操作oracle的date字段,主要介紹了oracle的to_date使用方法,大家參考使用吧
    2014-01-01
  • C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析

    C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析

    這篇文章主要介紹了C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析,包括隊(duì)雙向鏈表的模擬方法,例子中隊(duì)鏈表的操作也有很好的說(shuō)明,需要的朋友可以參考下
    2016-04-04
  • C#連接SQL數(shù)據(jù)庫(kù)和查詢數(shù)據(jù)功能的操作技巧

    C#連接SQL數(shù)據(jù)庫(kù)和查詢數(shù)據(jù)功能的操作技巧

    本文給大家分享C#連接SQL數(shù)據(jù)庫(kù)和查詢數(shù)據(jù)功能的操作技巧,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-05-05
  • WPF自定義路由事件的實(shí)例教程

    WPF自定義路由事件的實(shí)例教程

    &#65279;WPF中有兩種事件模型,一種是在WinForm時(shí)代就存在的CLR事件,另一種是WPF時(shí)代的路由事件,這篇文章主要給大家介紹了關(guān)于WPF自定義路由事件的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 基于C#實(shí)現(xiàn)任意格式JSON文本的HTTP交互抽象類

    基于C#實(shí)現(xiàn)任意格式JSON文本的HTTP交互抽象類

    為了實(shí)現(xiàn)一個(gè)支持任意格式JSON交互的抽象類,并且在整個(gè)過(guò)程中不需要對(duì)JSON格式數(shù)據(jù)進(jìn)行序列化和反序列化操作,可以使用C#中的HttpClient類來(lái)進(jìn)行HTTP請(qǐng)求和響應(yīng),本文給大家介紹了基于C#實(shí)現(xiàn)任意格式JSON文本的HTTP交互抽象類,需要的朋友可以參考下
    2025-03-03
  • C#簡(jiǎn)單生成隨機(jī)密碼的方法示例

    C#簡(jiǎn)單生成隨機(jī)密碼的方法示例

    這篇文章主要介紹了C#簡(jiǎn)單生成隨機(jī)密碼的方法,結(jié)合具體實(shí)例形式分析了C#生成隨機(jī)密碼操作的前臺(tái)界面與后臺(tái)處理技巧,需要的朋友可以參考下
    2017-06-06
  • C#在RichTextBox中顯示不同顏色文字的方法

    C#在RichTextBox中顯示不同顏色文字的方法

    這篇文章主要介紹了C#在RichTextBox中顯示不同顏色文字的方法,實(shí)例分析了C#中RichTextBox控件控制文字顯示效果的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C#中當(dāng)前時(shí)間轉(zhuǎn)為時(shí)間戳的3個(gè)方法

    C#中當(dāng)前時(shí)間轉(zhuǎn)為時(shí)間戳的3個(gè)方法

    在計(jì)算機(jī)應(yīng)用世界里,無(wú)論是為了記錄事件的發(fā)生時(shí)間、保障數(shù)據(jù)一致性還是提升安全性,時(shí)間戳都是不可或缺的重要工具,下面我們就來(lái)看看C#中轉(zhuǎn)換當(dāng)前時(shí)間為時(shí)間戳有哪些方法吧
    2024-12-12
  • C#使用MSTest進(jìn)行單元測(cè)試

    C#使用MSTest進(jìn)行單元測(cè)試

    這篇文章介紹了C#使用MSTest進(jìn)行單元測(cè)試的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

蒲江县| 勐海县| 凯里市| 道真| 定日县| 大宁县| 比如县| 巴马| 容城县| 东港市| 元朗区| 汝阳县| 利辛县| 长子县| 雷波县| 彩票| 原阳县| 台山市| 瑞丽市| 宜昌市| 交口县| 沙河市| 朝阳市| 鹰潭市| 汉寿县| 隆安县| 宁南县| 卢氏县| 信阳市| 西安市| 商南县| 新源县| 策勒县| 靖边县| 麻江县| 沂南县| 治县。| 扎兰屯市| 威海市| 石家庄市| 卢龙县|