• 大小: 232KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-17
  • 语言: C/C++
  • 标签: MODBUS协议  

资源简介

(原创)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个文件信息

评论

共有 条评论