資源簡介
因為項目需要,自己參考網上的代碼加上自己寫的modbus客戶端C++源碼,實現了0x03和0x06的讀寫功能。可以拿來直接用!!!!
代碼片段和文件信息
#include
#include
#include
#include
#include?“MODBUS_SHARE.h“
#include?“MODBUS_SERVER.h“
#include?“PORT.h“
unsigned?char?buff[256];
////////////////////////////////////////////////////////////////////////////////////////////////////
/*1.對單個PLC操作*/
/*讀一個或多個模擬量??參數:站號,開始地址,?讀的數量,?返回數據變量指針??返回:-1表示CRC校驗失敗,-2表示無應答,?大于零表示接收數據成功*/
/*40000*/
int?MODBUS_S_ReadMultiRegD(unsigned?char?rtu?unsigned?short?int?RegAdd?unsigned?short?int?RegCount?short?int?*list)
{
unsigned?short?int?crc16;
unsigned?short?int?crctmp;
short?int?vartmp;
//1?word?=?2?byte?一個寄存器存一個word,即?16?bit?若一次讀了32bits,則表示一次連續讀了兩個寄存器
memset(buff?0x00?255);
buff[0]?=?rtu;??//從設備地址
buff[1]?=?0x03;//功能碼
buff[2]?=?(unsigned?char)((RegAdd?-?40001)?>>?8);//起始地址高位
buff[3]?=?(unsigned?char)(RegAdd?-?40001);//起始地址低位
buff[4]?=?(unsigned?char)(RegCount?>>?8);//寄存器數高位(表示一次連續度多少個寄存器)
buff[5]?=?(unsigned?char)RegCount;//寄存器數低位
crc16?=?CRC16(buff?6);
buff[6]?=?(unsigned?char)(crc16?>>?8);//差錯校驗
buff[7]?=?(unsigned?char)crc16;
//發送數據
unsigned?long?strlen;
if?(IsOpen())
{
//發送X03查詢報文
strlen?=?WriteChar(8?(char?*)buff);
if?(strlen?==?8)
{
//讀響應報文3+reg_count*2+2
memset(buff?0x00?255);
Sleep(50);
strlen?=?ReadChar(255?(char?*)buff?1000);
if?(strlen?==?0)
{
//無返回
return(-2);
}
else
{
//返回長度有效解析接收緩沖區
if?(strlen?==?(3?+?(RegCount?*?2)?+?2)?&&?buff[0]?==?rtu?&&?buff[1]?==?0x03)
{
crc16?=?CRC16(buff?3?+?(RegCount?*?2));
crctmp?=?buff[strlen?-?2];
crctmp?=?crctmp?<8?|?buff[strlen?-?1];
if?(crc16?==?crctmp)
{
for?(int?i?=?0;?i {
vartmp?=?buff[3?+?(2?*?i)];
vartmp?=?vartmp?<8;
vartmp?=?vartmp?|?buff[3?+?((2?*?i)?+?1)];
list[i]?=?vartmp;
}
}
else
{
return(-1);
}
}
else
{
return(-1);
}
}
}
else
{
return(-2);
}
}
else
{
return(-2);
}
return(1);
}
/*讀一個或多個開關量??參數:站號,開始地址,?讀的數量,?返回數據變量指針??返回:-1表示CRC校驗失敗,-2表示無應答,?大于零表示接收數據成功*/
/*00000*/
char?MODBUS_S_ReadMultiRegM(unsigned?char?rtu?unsigned?short?int?RegAdd?unsigned?short?int?RegCount?bool?*list)
{
unsigned?short?int?crc16;
unsigned?short?int?crctmp;
memset(buff?0x00?255);
buff[0]?=?rtu;
buff[1]?=?0x01;
buff[2]?=?(unsigned?char)(RegAdd?>>?8);
buff[3]?=?(unsigned?char)RegAdd;
buff[4]?=?(unsigned?char)(RegCount?>>?8);
buff[5]?=?(unsigned?char)RegCount;
crc16?=?CRC16(buff?6);
buff[6]?=?(unsigned?char)(crc16?>>?8);
buff[7]?=?(unsigned?char)crc16;
//發送數據
unsigned?long?strlen;
if?(IsOpen())
{
//發送數據
strlen?=?WriteChar(8?(char?*)buff);
if?(strlen?==?8)
{
//讀數據
memset(buff?0x00?255);
Sleep(50);
strlen?=?ReadChar(255?(char?*)buff?1000);
if?(strlen?==?0)
{
//無返回
return(-2);
}
else
{
//返回長度有效解析接收緩沖區
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-07-27?15:12??ModbusClient\
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\
?????文件????????2581??2018-07-27?10:08??ModbusClient\.gitattributes
?????文件????????3997??2018-07-27?10:08??ModbusClient\.gitignore
?????文件?????????691??2018-07-27?10:08??ModbusClient\.git\config
?????文件??????????73??2018-07-27?10:08??ModbusClient\.git\desc
?????文件??????????23??2018-07-27?10:08??ModbusClient\.git\HEAD
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\hooks\
?????文件?????????177??2018-07-27?10:08??ModbusClient\.git\hooks\README.sample
?????文件?????????472??2018-07-27?10:08??ModbusClient\.git\index
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\info\
?????文件?????????113??2018-07-27?10:08??ModbusClient\.git\info\exclude
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\logs\
?????文件?????????330??2018-07-27?10:08??ModbusClient\.git\logs\HEAD
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\logs\refs\
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\logs\refs\heads\
?????文件?????????330??2018-07-27?10:08??ModbusClient\.git\logs\refs\heads\master
?????文件?????????150??2018-07-27?10:08??ModbusClient\.git\ms-persist.xm
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\ob
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\ob
?????文件?????????457??2018-07-27?10:08??ModbusClient\.git\ob
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\ob
?????文件??????????89??2018-07-27?10:08??ModbusClient\.git\ob
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\ob
?????文件?????????189??2018-07-27?10:08??ModbusClient\.git\ob
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\ob
?????文件????????1863??2018-07-27?10:08??ModbusClient\.git\ob
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\ob
?????文件?????????751??2018-07-27?10:08??ModbusClient\.git\ob
?????目錄???????????0??2018-07-27?10:08??ModbusClient\.git\ob
?????文件?????????160??2018-07-27?10:08??ModbusClient\.git\ob
............此處省略48個文件信息
評論
共有 條評論