资源简介
因为项目需要,自己参考网上的代码加上自己写的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\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个文件信息
相关资源
- Lotus C++ API Toolkit for Notes/Domino 8.0 for
- C++ Prime Plus第6版
- 编译原理词法分析器C++版源代码
- C++实现五子棋项目.zip
- loadConfig.zip
- VC++视频采集资料
- Effective C++中文版第三版带书签
- 基于SVM与人工神经网络的车牌识别O
- 数据结构、算法与应用——C++语言描
- C++17 标准 ISOIEC 14882 2017 官方pdf文档
- 人脸识别C++源码
- Visual C++ MFC 源代码大全
- C++程序设计第二版钱能.rar
- Visual C++ Redistributable for Visual Studio 2
- 车牌识别系统C++实现
- 数据结构与算法分析C++描述第三版及
- 顾卫刚手把手教你学DSP基于2812
- WAV转换成MP3音频文件 C++ vc MFC
- Learning C++ by Creating Games with UE4 无水印
- 《C++游戏开发》笔记十二 战争迷雾的
- 《MFC游戏开发》笔记九 碰撞检测 怪物
- C++ GUI Qt 4编程第二版 经典教材适合
- 图书管理系统c++与SQL数据库+课程设计
- Scientific and Engineering C++
- VC++游戏编程基础有书签
- 钱能C++程序设计教程第二版pdf高清带
- C++并发编程实战 美威廉姆斯著 高清扫
- 源代码——MFC的WebBrowser控件 C++与ja
- C++编程风格(PDF 英汉对照 The Element
- 精通Visual C++数字图像处理典型算法及
评论
共有 条评论