因为项目需要,自己参考网上的代码加上自己写的modbus客户端C++源码,实现了0x03和0x06的读写功能。可以拿来直接用!!!!
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 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.gitobjects 3
文件 457 2018-07-27 10:08 ModbusClient.gitobjects 3c8628ac32f6c2debacf6ab9582d84eb675e621
目录 0 2018-07-27 10:08 ModbusClient.gitobjects d
文件 89 2018-07-27 10:08 ModbusClient.gitobjects d76fe4328089e5b63a9c4190badacfc35ef2624
目录 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个文件信息
#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.gitdesc
文件 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.xm
目录 0 2018-07-27 10:08 ModbusClient.gitob
目录 0 2018-07-27 10:08 ModbusClient.gitob
文件 457 2018-07-27 10:08 ModbusClient.gitob
目录 0 2018-07-27 10:08 ModbusClient.gitob
文件 89 2018-07-27 10:08 ModbusClient.gitob
目录 0 2018-07-27 10:08 ModbusClient.gitob
文件 189 2018-07-27 10:08 ModbusClient.gitob
目录 0 2018-07-27 10:08 ModbusClient.gitob
文件 1863 2018-07-27 10:08 ModbusClient.gitob
目录 0 2018-07-27 10:08 ModbusClient.gitob
文件 751 2018-07-27 10:08 ModbusClient.gitob
目录 0 2018-07-27 10:08 ModbusClient.gitob
文件 160 2018-07-27 10:08 ModbusClient.gitob
............此处省略48个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)