modbus 客户端主站C++源代码


因为项目需要,自己参考网上的代码加上自己写的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.gitconfig
     文件          73  2018-07-27 10:08  ModbusClient.gitdescription
     文件          23  2018-07-27 10:08  ModbusClient.gitHEAD
     目录           0  2018-07-27 10:08  ModbusClient.githooks
     文件         177  2018-07-27 10:08  ModbusClient.githooksREADME.sample
     文件         472  2018-07-27 10:08  ModbusClient.gitindex
     目录           0  2018-07-27 10:08  ModbusClient.gitinfo
     文件         113  2018-07-27 10:08  ModbusClient.gitinfoexclude
     目录           0  2018-07-27 10:08  ModbusClient.gitlogs
     文件         330  2018-07-27 10:08  ModbusClient.gitlogsHEAD
     目录           0  2018-07-27 10:08  ModbusClient.gitlogs
efs
     目录           0  2018-07-27 10:08  ModbusClient.gitlogs
efsheads
     文件         330  2018-07-27 10:08  ModbusClient.gitlogs
efsheadsmaster
     文件         150  2018-07-27 10:08  ModbusClient.gitms-persist.xml
     目录           0  2018-07-27 10:08  ModbusClient.gitobjects
     目录           0  2018-07-27 10:08  ModbusClient.gitobjects3
     文件         457  2018-07-27 10:08  ModbusClient.gitobjects3c8628ac32f6c2debacf6ab9582d84eb675e621
     目录           0  2018-07-27 10:08  ModbusClient.gitobjectsd
     文件          89  2018-07-27 10:08  ModbusClient.gitobjectsd76fe4328089e5b63a9c4190badacfc35ef2624
     目录           0  2018-07-27 10:08  ModbusClient.gitobjects13
     文件         189  2018-07-27 10:08  ModbusClient.gitobjects138d76029c15dfdaf4f4f96a44ed85676f26876c
     目录           0  2018-07-27 10:08  ModbusClient.gitobjects1c
     文件        1863  2018-07-27 10:08  ModbusClient.gitobjects1c9a181a44b4f9a105f0dc71a40ad0284ab6a7c4
     目录           0  2018-07-27 10:08  ModbusClient.gitobjects1f
     文件         751  2018-07-27 10:08  ModbusClient.gitobjects1ff0c423042b46cb1d617b81efb715defbe8054d
     目录           0  2018-07-27 10:08  ModbusClient.gitobjects6a
     文件         160  2018-07-27 10:08  ModbusClient.gitobjects6a733dd9460f213b7407a6757e58840b80b32000
............此处省略48个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)