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...