国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Modbus-RTU協(xié)議C#實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了Modbus-RTU協(xié)議C#實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、安裝依賴(lài)包
System.IO.Ports
2、讀協(xié)議

/// <summary>
        /// Modbus-RTU協(xié)議讀實(shí)例
        /// </summary>
        private static void Read()
        {
            //組裝一個(gè)請(qǐng)求報(bào)文
            // 01 03 00 00 00 0A C5 CD
            byte slave = 0x01;
            //byte function = 0x03;   //讀單個(gè)寄存器
            byte function = 0x01;   //讀單個(gè)線(xiàn)圈狀態(tài)
            int startAddress = 0;
            int length = 10;

            List<byte> bytes = new List<byte>();
            bytes.Add(slave);
            bytes.Add(function);
            bytes.Add(BitConverter.GetBytes(startAddress)[1]);
            bytes.Add(BitConverter.GetBytes(startAddress)[0]);
            bytes.Add(BitConverter.GetBytes(length)[1]);
            bytes.Add(BitConverter.GetBytes(length)[0]);
            //CRC校驗(yàn)
            bytes = CRC16(bytes);
            //組裝好了進(jìn)行串口通信
            SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            serialPort.Open();
            //向從站發(fā)送請(qǐng)求
            serialPort.Write(bytes.ToArray(), 0, bytes.Count);
            Task.Run(async () =>
            {
                await Task.Delay(100);
                byte[] buffer = new byte[serialPort.BytesToRead];
                serialPort.DiscardInBuffer();

                List<byte> bufferList = new List<byte>(buffer);
                bufferList.RemoveAt(0);
                bufferList.RemoveAt(0);
                bufferList.RemoveAt(0);
                bufferList.RemoveAt(bufferList.Count - 1);
                bufferList.RemoveAt(bufferList.Count - 1);
                //讀寄存器
                //for(int i = 0; i < bufferList.Count; i++)
                //{
                //    List<byte> valueList = new List<byte>();
                //    valueList.Add(bufferList[i]);
                //    valueList.Add(bufferList[++i]);
                //    valueList.Reverse();
                //    ushort value=BitConverter.ToUInt16(valueList.ToArray(), 0);
                //    Console.WriteLine(value);
                //}
                //讀線(xiàn)圈 09 00
                bufferList.Reverse();
                var values = string.Join("", bufferList.Select(x => Convert.ToString(x, 2).PadLeft(8, '0')).ToList()).ToList();
                values.Reverse();
                for (int i = 0; i < values.Count; i++)
                {
                    Console.WriteLine(Convert.ToBoolean(int.Parse(values[i].ToString())));
                }
            });
        }

3、寫(xiě)協(xié)議

/// <summary>
        /// Modbus-RTU協(xié)議寫(xiě)實(shí)例
        /// </summary>
        private static void Write()
        {
            //組裝報(bào)文
            byte slave = 0x01;
            //byte function = 0x05;   //寫(xiě)單個(gè)線(xiàn)圈狀態(tài)
            byte function = 0x06;   //寫(xiě)單個(gè)寄存器
            int startAddress = 0;
            bool value = false;
            int iv = 123;

            List<byte> bytes = new List<byte>();
            bytes.Add(slave);
            bytes.Add(function);
            bytes.Add(BitConverter.GetBytes(startAddress)[1]);
            bytes.Add(BitConverter.GetBytes(startAddress)[0]);
            //單線(xiàn)圈的寫(xiě)入
            //bytes.Add(value ? (byte)0xFF : (byte)0x00);
            //bytes.Add(0x00);
            //單寄存器寫(xiě)入
            bytes.Add(BitConverter.GetBytes(iv)[1]);
            bytes.Add(BitConverter.GetBytes(iv)[0]);
            //CRC校驗(yàn)
            bytes = CRC16(bytes);
            SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            serialPort.Open();
            //向從站發(fā)送請(qǐng)求
            serialPort.Write(bytes.ToArray(), 0, bytes.Count);
            //接收后如果報(bào)文一致,說(shuō)明發(fā)送請(qǐng)求成功
        }

4、CRC16校驗(yàn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-615777.html

/// <summary>
        /// CRC-16校驗(yàn)
        /// </summary>
        /// <param name="value"></param>
        /// <param name="poly"></param>
        /// <param name="crcInit"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentException"></exception>
        private static List<byte> CRC16(List<byte> value,ushort poly=0xA001,ushort crcInit=0xFFFF)
        {
            if (value == null || !value.Any())
                throw new ArgumentException("");
            //運(yùn)算
            ushort crc = crcInit;
            for(int i=0; i<value.Count; i++)
            {
                crc = (ushort)(crc ^ value[i]);
                for(int j=0; j<8; j++)
                {
                    crc=(crc&1)!=0?(ushort)((crc>>1)^poly):(ushort)(crc>>1);
                }
            }
            byte hi = (byte)((crc & 0xFF00) >> 8);
            byte lo=(byte)(crc & 0xFF);
            List<byte> buffer = new List<byte>();
            buffer.AddRange(value);
            buffer.Add(lo);
            buffer.Add(hi);
            return buffer;
        }

到了這里,關(guān)于Modbus-RTU協(xié)議C#實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32開(kāi)發(fā)之Modbus協(xié)議(主站RTU)

    在單片機(jī)方面,針對(duì)于通訊常用的協(xié)議之一modbus,這里將modbus協(xié)議和硬件之間的關(guān)系完全獨(dú)立出來(lái),硬件和協(xié)議之間的聯(lián)系采用的是回調(diào)的方式進(jìn)行一個(gè)關(guān)聯(lián)。 1、此協(xié)議可直接移植,并不需要關(guān)心硬件相關(guān)的。 2、modbus相關(guān)協(xié)議概念自行查找,本文只做代碼的實(shí)現(xiàn)。 宏定義(

    2024年02月12日
    瀏覽(29)
  • STM32開(kāi)發(fā)之Modbus協(xié)議(RTU從站)

    說(shuō)明 1、本文不做協(xié)議格式的講解,只做實(shí)現(xiàn),如需了解協(xié)議格式,自行搜索 2、本文不依賴(lài)于硬件相關(guān)的資源,建立在硬件通訊之上,通過(guò)回調(diào)的形式和對(duì)應(yīng)的硬件進(jìn)行關(guān)聯(lián) 3、相關(guān)協(xié)議內(nèi)容參照,上一篇RTU主站 宏定義(modbus_core_define) crc校驗(yàn)(modbus_core_crc) 頭文件 源文件

    2024年02月11日
    瀏覽(20)
  • Profibus-DP轉(zhuǎn)modbus RTU網(wǎng)關(guān)modbus rtu協(xié)議

    Profibus-DP轉(zhuǎn)modbus RTU網(wǎng)關(guān)modbus rtu協(xié)議

    捷米JM-DPM-RTU網(wǎng)關(guān)在Profibus總線(xiàn)側(cè)實(shí)現(xiàn)主站功能,在Modbus串口側(cè)實(shí)現(xiàn)從站功能??蓪rofibusDP協(xié)議的設(shè)備(如:E+H流量計(jì)、倍福編碼器等)接入到Modbus網(wǎng)絡(luò)中;通過(guò)增加DP/PA耦合器,也可將Profibus PA從站接入Modbus網(wǎng)絡(luò)。在Modbus串口側(cè)提供RS485和RS232兩種電平接口。 捷米JM-DPM-RTU網(wǎng)關(guān)

    2024年02月10日
    瀏覽(20)
  • STM32硬件庫(kù)(非HAL庫(kù))實(shí)現(xiàn)MODBUS RTU協(xié)議的03,06功能碼(讀以及與單個(gè)發(fā)送)

    STM32硬件庫(kù)(非HAL庫(kù))實(shí)現(xiàn)MODBUS RTU協(xié)議的03,06功能碼(讀以及與單個(gè)發(fā)送)

    本人軟件工程專(zhuān)業(yè),關(guān)于硬件只有408的基礎(chǔ),后續(xù)學(xué)習(xí)發(fā)現(xiàn)一些博主所講以及b站上所給的教程并不是很清晰,故編寫(xiě)此文檔供大家查看。 如果我說(shuō)的地方哪里有問(wèn)題,希望大家可以給出意見(jiàn)!(●ˇ?ˇ●) 參考文檔: Modbus通訊協(xié)議常用功能碼解釋_modbus功能碼_Lee139499的博客

    2024年02月03日
    瀏覽(18)
  • modbus-tcp-rtu協(xié)議圖表

    MODBUS TCP 讀寄存器 請(qǐng)求 序號(hào) 意義 所占字節(jié) 字節(jié)存放格式 1 事務(wù)處理標(biāo)識(shí) 2個(gè)字節(jié) 高字節(jié)在前 2 協(xié)議標(biāo)識(shí) 2個(gè)字節(jié) 高字節(jié)在前 3 長(zhǎng)度 2個(gè)字節(jié) 高字節(jié)在前 4 單元標(biāo)識(shí) 1個(gè)字節(jié) 0x00-0xff 5 功能碼 1個(gè)字節(jié) 0x03 6 起始寄存器地址 2個(gè)字節(jié) 高字節(jié)在前 7 寄存器個(gè)數(shù) 2個(gè)字節(jié) 高字節(jié)在前

    2024年01月23日
    瀏覽(19)
  • MODBUS RTU協(xié)議原理及功能碼解析

    MODBUS RTU協(xié)議原理及功能碼解析

    目錄 ????????????????????????第一部分?MODBUS?RTU協(xié)議原理 1.1?簡(jiǎn)介 1.2 RTU傳輸模式 1.3?MODBUS報(bào)文幀 1.4 CRC校驗(yàn) ????????????????第二部分?MODBUS?RTU模式下功能碼解析 2.1 Modbus-RTU協(xié)議簡(jiǎn)介 2.2 部分功能碼名詞解釋 2.3?部分功能碼解析 01功能碼 –讀線(xiàn)圈狀態(tài) 0

    2024年02月02日
    瀏覽(17)
  • MODBUS RTU 通信協(xié)議 CRC16校驗(yàn)算法

    MODBUS RTU 通信協(xié)議 CRC16校驗(yàn)算法

    CRC校驗(yàn)碼是一個(gè)2個(gè)字節(jié)(16位二進(jìn)制)的數(shù)。 發(fā)送端:發(fā)送的數(shù)據(jù)計(jì)算CRC校驗(yàn)碼----發(fā)送:數(shù)據(jù)+CRC校驗(yàn)碼 接收端:收到數(shù)據(jù)后重新計(jì)算CRC校驗(yàn)碼,然后和接收到數(shù)據(jù)中的CRC校驗(yàn)碼進(jìn)行比較,判斷是否相等。 如果不相等:數(shù)據(jù)傳輸過(guò)程中出錯(cuò),給出錯(cuò)誤應(yīng)答。 CRC16 校驗(yàn)源碼

    2024年02月16日
    瀏覽(22)
  • 樹(shù)莓派4B與智能插排通過(guò)RS485(modbus RTU協(xié)議)通信

    樹(shù)莓派4B與智能插排通過(guò)RS485(modbus RTU協(xié)議)通信

    目標(biāo):使用樹(shù)莓派4B與CANHAT擴(kuò)展板讀取智能插排測(cè)量的各項(xiàng)數(shù)據(jù)(RS485+modbus RTU),獲取的數(shù)據(jù)上傳到Hyperledger Fabric框架。 之前學(xué)習(xí)過(guò)了modbus RTU協(xié)議,在智能渦輪流量計(jì)的實(shí)驗(yàn)中應(yīng)用過(guò)一次,這次用這個(gè)帶485模塊的智能插座再?gòu)?fù)習(xí)一次~ 實(shí)驗(yàn)材料: 樹(shù)莓派4B/8G: ?CANHAT擴(kuò)展板:

    2024年02月01日
    瀏覽(42)
  • EthernetIP 轉(zhuǎn)MODBUS RTU協(xié)議網(wǎng)關(guān)連接FANUC機(jī)器人作為EthernetIP通信從站

    EthernetIP 轉(zhuǎn)MODBUS RTU協(xié)議網(wǎng)關(guān)連接FANUC機(jī)器人作為EthernetIP通信從站

    遠(yuǎn)創(chuàng)智控YC-EIPM-RTU網(wǎng)關(guān)產(chǎn)品是一款高效的數(shù)據(jù)采集工具,它可以通過(guò)各種數(shù)據(jù)接口與工業(yè)領(lǐng)域的儀表、PLC、計(jì)量設(shè)備等產(chǎn)品連接,實(shí)時(shí)采集這些設(shè)備中的運(yùn)行數(shù)據(jù)、狀態(tài)數(shù)據(jù)等信息。采集到的數(shù)據(jù)經(jīng)過(guò)整合和運(yùn)算等操作后,可以被傳輸?shù)狡渌O(shè)備或者云平臺(tái)。網(wǎng)關(guān)可采集設(shè)備

    2024年02月08日
    瀏覽(85)
  • Modbus RTU(Remote Terminal Unit)與RS-485協(xié)議(rs485)介紹(主站設(shè)備(Master)、從站設(shè)備(Slave))Modbus TCP、Modbus ASCII

    Modbus RTU(Remote Terminal Unit)與RS-485協(xié)議(rs485)介紹(主站設(shè)備(Master)、從站設(shè)備(Slave))Modbus TCP、Modbus ASCII

    參考文章:ModBus協(xié)議 參考文章:一篇文章了解 RS485 和 MODBUS 的區(qū)別,它們有什么不同? Modbus RTU和RS-485是工業(yè)通信中常用的兩種協(xié)議。Modbus RTU 是一種數(shù)據(jù)表示協(xié)議,而 RS-485 則是物理傳輸標(biāo)準(zhǔn)。盡管這兩者有時(shí)被并列討論,但它們?cè)谕ㄐ畔到y(tǒng)中的角色卻大不相同。以下內(nèi)容將

    2024年02月05日
    瀏覽(101)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包