资源简介
(原创)MODBUS协议的 C语言实现 学习MODBUS 可以参考下
实现功能 1 2 3 4 5 6 15 16
代码片段和文件信息
#include
#include
//循环位移 a 数据 N 数据长度 n要移动的长度
#define ROTATE_LEFT(aNn) (a>>(N-n))|(a< #define ROTATE_RIGHT(aNn) (a<<(N-n))|(a>>n)
/**********************************************************************************************************************************/
//组成请求包 buffer
int modbus_pack_q_coil(unsigned char funcunsigned short addrunsigned short lengthunsigned char* bufferunsigned short bufferlen)
// func 请求代码
// addr 请求地址
// databuffer 需要写入buffer的缓存值
// length 数据数量 (线圈数量)
// buffer 生成的数据存放的缓存
// bufferlen buffer长度
// 格式: 功能码 起始地址 线圈数量
{
int i;
unsigned short utemp;
i = 0;
memset(buffer0bufferlen);
//功能码
buffer[i] = func;
i = i + 1;
//地址
utemp = addr;
utemp = ROTATE_RIGHT(utemp168);
memcpy(&(buffer[i])&utempsizeof(utemp));
i = i + 2;
//请求长度
utemp = length;
utemp = ROTATE_RIGHT(utemp168);
memcpy(&(buffer[i])&utempsizeof(utemp));
i = i + 2;
return i;
}
/*********************************************************************************************************************************/
//组成回复包 databuffer -> buffer
int modbus_pack_r_coil(unsigned char errcodeunsigned char funcunsigned short addrunsigned char* databufferunsigned short lengthunsigned char* bufferunsigned short bufferlen)
// func 请求代码
// databuffer 需要写入buffer的缓存值
// length 数据数量
// buffer 生成的数据存放的缓存
// bufferlen buffer长度
// 格式: 功能码 字节数 线圈状态
{
int i = 0;
unsigned char jr; // j 输出字节数 r 输出地址整数
unsigned char nm; // n 输出长度余数 m 地址余数
unsigned char k;
unsigned char temp=0temp1=0temp2=0;
//unsigned char temp3temp4temp5;
memset(buffer0bufferlen);
// 基础请求头部
buffer[i] = func;
// 如果有错误码
if(errcode != 0)
{
i ++;
buffer[i] = errcode + 0x80;
return i;
}
i ++;
j = length >> 3; // 输出字节数
n = length % 8; // 输出数量余数
if(n != 0)
j ++;
buffer[i] = j;
i ++;
r = addr >> 3; // 输出地址
m = addr % 8; // 输出地址余数
for(k = i; k < i + j ; k++)
{
temp1 = databuffer[r] >> m;
temp2 = databuffer[r + 1] << (8 - m);
temp = temp1 | temp2;
buffer[k] = temp;
r ++;
}
if(n != 0) //非整输出字节数
{
temp = 0xff;
temp = temp >> (8 - n); // 高位为0 低位为1
buffer[k-1] = buffer[k-1] & temp; // 高位补零
}
return k;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2604 2013-05-30 16:40 lee modbus\01.cpp
文件 1109 2013-05-30 16:40 lee modbus\01.h
文件 2593 2013-06-08 11:08 lee modbus\02.cpp
文件 1111 2013-06-08 11:04 lee modbus\02.h
文件 2165 2013-05-30 16:40 lee modbus\03.cpp
文件 1118 2013-05-30 16:40 lee modbus\03.h
文件 2175 2013-06-08 11:11 lee modbus\04.cpp
文件 1128 2013-06-08 11:11 lee modbus\04.h
文件 2902 2013-06-08 10:31 lee modbus\05.cpp
文件 1181 2013-06-03 14:18 lee modbus\05.h
文件 2388 2013-05-30 16:40 lee modbus\06.cpp
文件 1125 2013-05-30 16:40 lee modbus\06.h
文件 3351 2013-06-08 16:44 lee modbus\15.cpp
文件 1167 2013-06-08 11:19 lee modbus\15.h
文件 2570 2013-06-08 14:49 lee modbus\16.cpp
文件 1176 2013-06-08 14:35 lee modbus\16.h
文件 4570 2013-06-08 17:23 lee modbus\Debug\01.obj
文件 4574 2013-06-08 17:23 lee modbus\Debug\02.obj
文件 4292 2013-06-08 17:23 lee modbus\Debug\03.obj
文件 4312 2013-06-08 17:23 lee modbus\Debug\04.obj
文件 4827 2013-06-08 17:23 lee modbus\Debug\05.obj
文件 4542 2013-06-08 17:23 lee modbus\Debug\06.obj
文件 5397 2013-06-08 17:23 lee modbus\Debug\15.obj
文件 4835 2013-06-08 17:23 lee modbus\Debug\16.obj
文件 2548 2013-06-09 09:51 lee modbus\Debug\BuildLog.htm
文件 135168 2013-06-09 09:51 lee modbus\Debug\len modbus.exe
文件 443212 2013-06-09 09:51 lee modbus\Debug\len modbus.ilk
文件 445440 2013-06-09 09:51 lee modbus\Debug\len modbus.pdb
文件 24405 2013-06-09 09:51 lee modbus\Debug\main.obj
文件 68608 2013-06-09 09:51 lee modbus\Debug\vc70.idb
............此处省略11个文件信息
- 上一篇:基于单片机花样流水灯原理图及源码
- 下一篇:C++项目实践
相关资源
- 表达式求值C语言实现《数据结构》课
- C语言实现FFT(快速傅里叶变换)
- c语言实现的电子词典
- 火车订票系统用c语言实现
- C语言实现校园导航系统
- butterworth滤波器的c语言实现
- 六种排序算法C语言实现源代码
- 哈夫曼树的建立(Huffman Tree C语言实现
- 唯一可译码的辨别 C语言实现
- 使用c语言实现基于图的图像分割代码
- C语言实现cordic sinx的算法
- C语言实现的校园导航系统
- s盒的C语言实现,S盒.cpp文件
- C语言实现的文字加密与解密小程序(
- 纯C语言实现https的post和get不依赖任何
- C语言实现宾果消消乐
- linux系统下C语言实现带有图形界面的
- tcp/ip源代码c语言实现
- xmodem C语言实现
- JPEG源码(C语言实现)
- C语言实现迷宫问题
- C语言实现的DES加密算法
- Hilbert的C语言实现
- C语言实现日历阳历+农历输出
- DES算法_C语言实现啊
- 实序列FFT算法的C语言实现
- C语言实现简单的数据库管理系统
- C语言实现简单的web服务器
- 小波变换C语言实现代码
- 信息安全原理大数四则运算及DH算法
评论
共有 条评论