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

簡(jiǎn)單C#代碼實(shí)現(xiàn)modbus-rtu通訊發(fā)送數(shù)據(jù)方式

 更新時(shí)間:2024年01月11日 09:09:44   作者:yukuaidere  
這篇文章主要介紹了簡(jiǎn)單C#代碼實(shí)現(xiàn)modbus-rtu通訊發(fā)送數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C#代碼實(shí)現(xiàn)modbus-rtu通訊發(fā)送數(shù)據(jù)

實(shí)現(xiàn)效果

代碼

閑言少敘,直接上代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace Simple_Rtu
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        SerialPort Sp1 = new SerialPort();

        private void button1_Click(object sender, EventArgs e)
        {
            if (Sp1.IsOpen)
            {
                Sp1.Close();
            }

            Sp1.BaudRate = 9600;
            Sp1.PortName = "com6";
            Sp1.DataBits = 8;
            Sp1.Parity = System.IO.Ports.Parity.None;
            Sp1.StopBits = System.IO.Ports.StopBits.One;
            Sp1.ReadTimeout = 2000;

            Sp1.Open();

            if (Sp1.IsOpen)
            {
                MessageBox.Show("success");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            byte[] SendCommand = new byte[8];
            SendCommand[0] = 0x01;
            SendCommand[1] = 0x03;
            SendCommand[2] = (byte)(10 / 256);
            SendCommand[3] = (byte)(10 % 256);
            SendCommand[4] = (byte)(10 / 256);
            SendCommand[5] = (byte)(10 % 256);
            byte[] crc16 = Crc16(SendCommand, 6);
            SendCommand[6] = crc16[0];
            SendCommand[7] = crc16[1];

            Sp1.Write(SendCommand, 0, SendCommand.Length);

            textBox1.Text = BitConverter.ToString(SendCommand);
                             
        }



        private static readonly byte[] aucCRCHi = //crc高位表
      {
            0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
            0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
            0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
            0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
            0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
            0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
            0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
            0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
            0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
            0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
            0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
            0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
            0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
            0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
            0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
            0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
            0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
            0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
            0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
            0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
            0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
            0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
            0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
            0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
            0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
            0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
        };

        private static readonly byte[] aucCRCLo = //crc低位表
        {
            0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
            0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
            0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
            0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
            0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
            0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
            0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
            0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
            0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
            0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
            0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
            0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
            0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
            0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
            0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
            0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
            0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
            0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
            0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
            0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
            0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
            0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
            0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
            0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
            0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
            0x43, 0x83, 0x41, 0x81, 0x80, 0x40
        };

        private byte[] Crc16(byte[] pucFrame, int usLen)
        {
            byte[] result = new byte[2] { 0xFF, 0xFF };
            int i = 0;
            UInt16 iIndex = 0x0000;

            while (usLen-- > 0)
            {
                iIndex = (UInt16)(result[0] ^ pucFrame[i++]);
                result[0] = (byte)(result[1] ^ aucCRCHi[iIndex]);
                result[1] = aucCRCLo[iIndex];
            }
            return result;
        }
    }
}

總結(jié)

以上就是用C#最基本的代碼實(shí)現(xiàn)串口之間的modbus-rtu數(shù)據(jù)發(fā)送。

這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • C#操作Excel相關(guān)方法總結(jié)

    C#操作Excel相關(guān)方法總結(jié)

    這篇文章主要介紹了C#操作Excel相關(guān)方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C#中實(shí)現(xiàn)線程同步lock關(guān)鍵字的用法詳解

    C#中實(shí)現(xiàn)線程同步lock關(guān)鍵字的用法詳解

    實(shí)現(xiàn)線程同步的第一種方式是我們經(jīng)常使用的lock關(guān)鍵字,它將包圍的語(yǔ)句塊標(biāo)記為臨界區(qū),這樣一次只有一個(gè)線程進(jìn)入臨界區(qū)并執(zhí)行代碼,接下來(lái)通過(guò)本文給大家介紹C#中實(shí)現(xiàn)線程同步lock關(guān)鍵字的用法詳解,一起看看吧
    2016-07-07
  • C#8.0中的模式匹配

    C#8.0中的模式匹配

    這篇文章介紹了C#8.0中的模式匹配,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#預(yù)處理器指令詳解與示例

    C#預(yù)處理器指令詳解與示例

    在軟件開(kāi)發(fā)中,我們常常需要編寫(xiě)可移植和可配置的代碼,C#?預(yù)處理器指令為我們提供了這樣的能力,在本篇文章中,我們將詳細(xì)介紹C#預(yù)處理器指令的定義、語(yǔ)法格式、功能以及在實(shí)際編程中的應(yīng)用,需要的朋友可以參考下
    2024-04-04
  • c# 如何用lock解決緩存擊穿

    c# 如何用lock解決緩存擊穿

    這篇文章主要介紹了c# 如何用lock解決緩存擊穿,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#中使用DevExpress中的ChartControl實(shí)現(xiàn)極坐標(biāo)圖的案例詳解

    C#中使用DevExpress中的ChartControl實(shí)現(xiàn)極坐標(biāo)圖的案例詳解

    這篇文章主要介紹了在C#中使用DevExpress中的ChartControl實(shí)現(xiàn)極坐標(biāo)圖,本案例是使用的是DevExpress 18.1.3版本,之前在14版本上也試過(guò),但是有一個(gè)弊端就是實(shí)現(xiàn)極坐標(biāo)圖的時(shí)候,第一個(gè)點(diǎn)和最后一個(gè)點(diǎn)總是自動(dòng)多一條閉合線,會(huì)形成一個(gè)閉合的多邊形,因此升級(jí)了一下版
    2022-02-02
  • 基于C#實(shí)現(xiàn)文本讀取的常用方式詳解

    基于C#實(shí)現(xiàn)文本讀取的常用方式詳解

    本文詳細(xì)介紹了在C#開(kāi)發(fā)中使用七種不同的方式來(lái)讀取文件,包括FileStream配合Read方法,逐字節(jié)讀取,File類的ReadAllText,StreamReader逐行讀取和一次性讀取等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-04-04
  • C#利用遞歸算法解決漢諾塔問(wèn)題

    C#利用遞歸算法解決漢諾塔問(wèn)題

    這篇文章主要為大家介紹了C#如何利用遞歸算法解決經(jīng)典的漢諾塔問(wèn)題,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定幫助,需要的可以參考一下
    2022-04-04
  • 在Unity中實(shí)現(xiàn)動(dòng)畫(huà)的正反播放代碼

    在Unity中實(shí)現(xiàn)動(dòng)畫(huà)的正反播放代碼

    這篇文章主要介紹了在Unity中實(shí)現(xiàn)動(dòng)畫(huà)的正反播放代碼,非常的實(shí)用,這里推薦給大家,希望大家能夠喜歡。
    2015-03-03
  • C#部署數(shù)據(jù)庫(kù)及IIS站點(diǎn)

    C#部署數(shù)據(jù)庫(kù)及IIS站點(diǎn)

    這篇文章主要為大家詳細(xì)介紹了C#部署數(shù)據(jù)庫(kù)及IIS站點(diǎn)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評(píng)論

宜春市| 平阴县| 宁津县| 崇明县| 汶上县| 都江堰市| 青川县| 清徐县| 平泉县| 黎城县| 海淀区| 海淀区| 东源县| 垦利县| 梁河县| 民勤县| 桐柏县| 临安市| 永清县| 罗城| 宝鸡市| 余江县| 临汾市| 工布江达县| 玉环县| 南城县| 米泉市| 沙坪坝区| 灌云县| 梓潼县| 岑溪市| 缙云县| 会昌县| 客服| 勃利县| 无为县| 洪洞县| 神木县| 邵东县| 高唐县| 扶风县|