MODBUS協議解析中常用的轉換幫助類(C )

2022-03-29 02:13:41 字數 2394 閱讀 3791

modbus協議解析中常用的轉換幫助類(c#)

由於經常進行資料對接,解析modbus協議,把常用的幾個幫助類做一記錄,方便隨時查閱,類中包含crc16校驗,進製之間的轉換等。

/*

********************************************

* 命名空間:modbusserver.common

* 功 能: 資料轉換幫助類

* 類 名: converttools

* 作 者: 東騰

* 時 間: 2018-09-26 10:20:00

**********************************************

*/using

system;

using

system.globalization;

using

system.linq;

using

system.text;

namespace

modbusserver.common

//////

hex字串轉換為字串

/// ///

hex字串

///編碼型別

///public

static

string hexstringtostring(string

hs, encoding encode)

, stringsplitoptions.removeemptyentries);

var b = new

byte

[chars.length];

//逐個字元變為16進製制位元組資料

for (var i = 0; i < chars.length; i++) b[i] = convert.tobyte(chars[i], 16

);

//按照指定編碼將位元組陣列變為字串

return

encode.getstring(b);

}//////

字串轉16進製制位元組陣列

/// ///

hex字串

///public

static

byte stringtohexbyte(string

hexstring)

//////

位元組陣列轉16進製制字串

/// ///

bytes

///public

static

string bytestohexstring(byte

bytes)

//////

將byte轉換成int

/// ///

需要轉換成整數的byte陣列

public

static

int bytestoint32(byte

data)

//////

bytes資料轉換為float型別

/// ///

byte資料

///public

static

float valueconverttofloat(byte

data)

//////

bytes資料轉換為long型別

/// ///

byte資料

///public

static

long valueconverttolong(byte

data)

public

static

byte crc16(byte

data)

else

}var buf1 = (byte) ((crc & 0xff00) >> 8); //

高位置var buf2 = (byte) (crc & 0x00ff); //

低位置 crc = (ushort) (buf1 << 8

); crc +=buf2;

var stra = crc.tostring("x4"

);

var result =stringtohexbyte(stra);

var b = new

byte[2

]; b[

0] = result[1

]; b[

1] = result[0

];

return

b; }

}}

Modbus協議名詞解析

在大家通讀modbus協議時,總是會碰到一些容易混淆的名詞,從而導致對於協議的解讀出現問題,在本文中,我們對於modbus協議中可能會給大家造成困惑的名詞作相關的解釋。1.功能碼 功能碼在modbus協議用於表示資訊幀的功能,常用的功能碼有03,04,06,16等,其中03功能碼的作用是讀保持暫存器...

Modbus協議的理解

當上位機和下位機進行通訊或多個微控制器進行通訊時需要進行通訊,很常用的一種就是通過串列埠收發命令,在簡單的系統中可以自己定義一些簡單的協議,收發雙方按照協議來就可以了,如果要保證傳輸的穩定和同其他系統的相容,最好採用通用的通訊協議。我採用了自己編的協議,但參考了modbus協議。modbus協議包括...

Modbus常用功能碼協議詳解

01h 讀線圈狀態 1 描述 讀從機線圈暫存器,位操作,可讀單個或者多個 2 傳送指令 假設從機位址位0x01,暫存器開始位址0x0023,暫存器結束抵制0x0038,總共讀取21個線圈。協議圖如下 3 響應 返回資料的每一位對應線圈狀態,1 on,0 off,如下圖 上表中data1表示0x002...