• 大小: 13.1MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-16
  • 语言: C/C++
  • 标签: C++  modbus  

资源简介

因为项目需要,自己参考网上的代码加上自己写的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< RegCount; 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\description
     文件          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.xml
     目录           0  2018-07-27 10:08  ModbusClient\.git\objects\
     目录           0  2018-07-27 10:08  ModbusClient\.git\objects\03\
     文件         457  2018-07-27 10:08  ModbusClient\.git\objects\03\c8628ac32f6c2debacf6ab9582d84eb675e621
     目录           0  2018-07-27 10:08  ModbusClient\.git\objects\0d\
     文件          89  2018-07-27 10:08  ModbusClient\.git\objects\0d\76fe4328089e5b63a9c4190badacfc35ef2624
     目录           0  2018-07-27 10:08  ModbusClient\.git\objects\13\
     文件         189  2018-07-27 10:08  ModbusClient\.git\objects\13\8d76029c15dfdaf4f4f96a44ed85676f26876c
     目录           0  2018-07-27 10:08  ModbusClient\.git\objects\1c\
     文件        1863  2018-07-27 10:08  ModbusClient\.git\objects\1c\9a181a44b4f9a105f0dc71a40ad0284ab6a7c4
     目录           0  2018-07-27 10:08  ModbusClient\.git\objects\1f\
     文件         751  2018-07-27 10:08  ModbusClient\.git\objects\1f\f0c423042b46cb1d617b81efb715defbe8054d
     目录           0  2018-07-27 10:08  ModbusClient\.git\objects\6a\
     文件         160  2018-07-27 10:08  ModbusClient\.git\objects\6a\733dd9460f213b7407a6757e58840b80b32000
............此处省略48个文件信息

评论

共有 条评论