c语言编写modbus程序,C语言编写modbus协议

《C语言编写modbus协议》由会员分享,可在线阅读,更多相关《C语言编写modbus协议(23页珍藏版)》请在人人文库网上搜索。

1、include / 字地址 0 - 255 (只取低 8位) / 位地址 0 - 255 (只取低 8位)/* CRC 高位字节值表 */ const uint8 code auchCRCHi = 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC。

2、0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x4。

3、0, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC。

4、1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40。

5、, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1。

6、, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40/* CRC低位字节值表*/ const uint8 code auchCRCLo = 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F。

7、, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2。

8、, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22。

9、, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F,。

10、 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99,。

11、 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 uint8 testCoil; / 用于测试 位地址 1 uint16 testRegister; /用于测试 字址址 16uint8 localAddr = 1; /单片机控制板。

12、的地址 uint16 crc16(uint8 *puchMsg, uint16 usDataLen)uint8 sendCount;/ 发送字节个数uint8 receCount;/ 接收到的字节个数uint8 sendPosi;/ 发送位置uint8 uchCRCHi = OxFF ; /*高 CRC字节初始化 */uint8 uchCRCLo = 0xFF ; /*低 CRC 字节初始化 */uin t32 uln dex ; /* CRC 循环中的索引 */while (usDataLen-) /* 传输消息缓冲区 */ulndex = uchCRCHi 八 *puchMsg+ ; /*。

13、计算 CRC */uchCRCHi = uchCRCLo 八 auchCRCHiul ndex;uchCRCLo = auchCRCLoulndex ;return (uchCRCHi 1)sendCount-;ACC = sendBuf0;TB8 = P;SBUF = sendBuf0;/void beginSend(void) / 读线圈状态void readCoil(void)uint8 addr;uint8 tempAddr;uint8 byteCount;uint8 bitCount;uint16 crcData;uint8 position;uint8 i,k;uint8 resu。

14、lt;uint16 tempData;uint8 exit = 0;/addr = (receBuf2= addr+bitCount) if(tempAddr = addr+bitCount) / 读完exit = 1;break;if(exit = 1)break;sendBuf0 = localAddr;sendBuf1 = 0x01;sendBuf2 = byteCount;crcData = crc16(sendBuf,byteCount);sendBufbyteCount = crcData 8;byteCount+;sendBufbyteCount = crcData & 0xff。

15、;sendCount = byteCount + 1;beginSend();/void readCoil(void)/读寄存器 void readRegisters(void)uint8 addr;uint8 tempAddr;uint16 result;uint16 crcData;uint8 readCount;uint8 byteCount;uint8 finsh; /1 完成 0 出错uint16 i;uint16 tempData = 0;/addr = (receBuf2 8;sendBufi+4 = tempData & 0xff;sendBuf0 = localAddr;se。

16、ndBuf1 = 3;sendBuf2 = byteCount;byteCount += 3;crcData = crc16(sendBuf,byteCount);sendBufbyteCount = crcData 8;byteCount+;sendBufbyteCount = crcData & 0xff;beginSend();sendCount = byteCount + 1;/void readRegisters(void)/ 强制单个线圈void forceSingleCoil(void)uint8 addr;uint8 tempAddr;uint16 tempData;uint8。

17、 onOff;uint8 i;/addr = (receBuf2 8;sendBuf3 = addr & 0xff;sendBuf4 = setCount 8;crcData = crc16(sendBuf,6);sendBuf5 = setCount & 0xff;sendBuf6 = crcData 8;sendBuf7 = crcData & 0xff;sendCount = 8;beginSend();/void presetMultipleRegisters(void)/ 检查 uart0 数据void checkComm0Modbus(void)uint16 crcData;uin。

18、t16 tempData;if(receCount 4)switch(receBuf1)case 1:/读取线圈状态 (读取点 16 位以内 )case 3:/读取保持寄存器 (一个或多个 )case 5:/强制单个线圈case 6:/设置单个寄存器if(receCount = 8)/接收完成一组数据/ 应该关闭接收中断if(receBuf0=localAddr & checkoutError=0)crcData = crc16(receBuf,6);if(crcData = receBuf7+(receBuf6= tempData)if(receBuf0=localAddr & checko。

19、utError=0)crcData = crc16(receBuf,tempDat-a2);if(crcData = (receBuftempData-2= tempData)if(receBuf0=localAddr & checkoutError=0)crcData = crc16(receBuf,tempDat-a2);if(crcData = (receBuftempData-28)+ receBuftempData-1)presetMultipleRegisters();receCount = 0;checkoutError = 0;break;default:break;/void。

20、 checkComm0(void)/ 取线圈状态 返回 0 表示成功uint16 getCoilVal(uint16 addr,uint16 *tempData)uint16 result = 0;uint16 tempAddr;tempAddr = addr & 0xfff;/ 只取低 8 位地址switch(tempAddr & 0xff)case 0:break;case 1:*tempData = testCoil;break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;case 7:break;ca。

21、se 8:break;case 9:break;case 10:break;case 11:break;case 12:break;case 13:break;case 14:break;case 15:break;case 16:break;default:break;return result;/uint16 getCoilVal(uint16 addr,uint16 *data)/ 设定线圈状态 返回 0 表示成功uint16 setCoilVal(uint16 addr,uint16 tempData)uint16 result = 0;uint16 tempAddr;tempAddr。

22、 = addr & 0xfff;switch(tempAddr & 0xff)case 0:break;case 1:testCoil = tempData;break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;case 7:break;case 8:break;case 9:break;case 10:break;case 11:break;case 12:break;case 13:break;case 14:break;case 15:break;case 16:break;default:break。

23、;return result;/uint16 setCoilVal(uint16 addr,uint16 data)/ 取寄存器值 返回 0 表示成功uint16 getRegisterVal(uint16 addr,uint16 *tempData)uint16 result = 0;uint16 tempAddr;tempAddr = addr & 0xfff;switch(tempAddr & 0xff)case 0:break;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;ca。

24、se 7:break;case 8:break;case 9:break;case 10:break;case 11:break;case 12:break;case 13:break;case 14:break;case 15:break;case 16:*tempData = testRegister;break;default:break;return result;/设置寄存器值 返回 0表示成功/uint16 getRegisterVal(uint16 addr,uint16 &data)uint16 setRegisterVal(uint16 addr,uint16 tempDat。

25、a)uint16 result = 0;uint16 tempAddr;tempAddr = addr & 0xfff;switch(tempAddr & 0xff)case 0:break;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;case 7:break;case 8:break;case 9:break;case 10:break;case 11:break;case 12:break;case 13:break;case 14:break;case 15:break;case 16:testRegister = tempData;break;default:break;return result;/uint8 setRegisterVal(uint16 addr,uint16 data。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言bfs程序讲解,面试算法--二叉树DFS/BFS实现(C语言)

深度优先搜索算法(Depth First Search)DFS是搜索算法的一种。它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还…

c语言 子进程,子Shell和子进程

Shell 中有很多方法产生子进程,比如以新进程的方式运行 Shell 脚本,使用组命令、管道、命令替换等,但是这些子进程是有区别的。子进程的概念是由父进程的概念引申而来的。在 Linux 系统中,系统运行的应用程序几乎都是从 init(pid为…

学C语言办公本和游戏本,为什么不建议买游戏本?入手前须知,别只看中游戏...

原标题:为什么不建议买游戏本?入手前须知,别只看中游戏作为一名游戏本用户,我自己在用的游戏本已经用了四五年的时间了,从最初的大学生到毕业工作2年时间,这一游戏本给我带来了不少麻烦。最大的麻烦就是“笨…

LL1文法的判别c语言,编译原理实验七:LL1文法的判断

《编译原理实验七:LL1文法的判断》由会员分享,可在线阅读,更多相关《编译原理实验七:LL1文法的判断(11页珍藏版)》请在人人文库网上搜索。1、实验七:LL(1)文法的判断 一:要求输入:任意的上下文无…

如何用c语言倒序输出字母,菜鸟求助-如何用指针法将一串字符按单词的倒序输出?如:i love yo...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include void fun (char *ch1, char *ch2){int i, n(0), k;int length;bool judge(true);for (length 0; *(ch1 length) ! \0; length );// 计算ch1长度for (i length - 1; i > 0; i --){if (*(ch1 (length - 1))…

AVR单片机计算器C语言源程序,AVR单片机简单计算器的Proteus仿真实现+源码

#include "mega16.h"#include "1602.h"#include "key.h"float k1,k2; //记录最终输入运算的两个数uint one,two,three,four; //记录每次输入的数字uint flag; //计数标志位uint flag1,flag2; //第一个数 第二…

android上传图片文件至c 服务器,Android 史上最优雅的实现文件上传、下载及进度的监听...

本文已授权「刘望舒」微信公众号独家原创发布前言本文将直接使用RxHttp库实现文件上传、下载、断点下载、进度的监听,不对RxHttp做过多讲解,如果对RxHttp不了解,请移步本文目的在于让更多的读者知道RxHttp库,如果您已阅读上面4篇文…

Android中http断点下载,Android HttpURLConnection断点下载(单线程)

HttpCilent 跟 HttpURLConnection 是安卓原生的用来实现http请求的类:Android 6.0之后取消了HttpClient,不支持跟新 ,今天小编使用的是HttpURLConnection :直接上代码:URL url null;BufferedInputStream bin null;Ht…

Android ui 单元测试 覆盖率,Android单元测试—UI测试(Espresso)

前言我们先回顾一下,在上一篇博客中,主要分享了Android单元测试的逻辑测试部分。接下来,我们重点讲解Android单元测试的UI测试部分!何为UI测试呢?就是对用户界面的交互元素进行测试,如TextView、ImageView&…

android shape 圆角百分比,Android shape显示圆角问题

当需要定义一个圆角效果,当在ADT中预览,没有有效果时,只要运行就可以了!xmlns:Android"http://schemas.android.com/apk/res/android">android:state_pressed"true">android:startColor"#ff8c00"android:endColor"#FFFFFF…

Android png模拟svg,Android 中使用svg图片

1. svg认识SVG:android5.0出现,w3c推出使用xml 描述二维图形语言,矢量图,放大缩小无影响为什么用svg,现在手机的短板是内存,不是cpu,svg通过cpu计算,png占用内存Android上对svg进行阉割,使用Vector Drawable对svg支持,…

android 删除垃圾文件夹,别再用手机管家清理垃圾了!删除这些文件夹,内存瞬间释放几个G...

随着手机使用时间的增加,手机中缓存的东西越来越多,这时候手机内存空间就会告急,从而影响手机的流畅性。那么在这种时候不要乱清理,我们只需要删除这几个文件夹,就可以帮手机轻松释放好几个G的内存。下面我们就一起来看…

android软件perthbus,Transit

v5.9.10版更新说明(2021-03-19)Whether you’re riding transit for business, pleasure, or to get shredded from a socially-spaced-out bus ballet, you’ll notice “Favourite destination” icons have been newly primped to prom perfection.What else? Hello Free2M…

HTML中scr是图片的什么,HTML中关于url、scr、href的区别

HTML中关于url、scr、href的区别URL是什么URL:Uniform Resource Locators(统一资源定位器)的简写,Web浏览器通过URL从Web服务器请求页面。url不是属性,src和href是属性,src用于替换当前元素,href用于在当前文档和引用资…

html5页面结构案例,前端学习笔记(五)HTML+CSS静态页面实战案例:幸福西饼首页和百度首页...

按照知乎上面汪小黑推荐的前端学习路径,在自学了HTML和CSS之后,开始尝试实战制作静态页面小项目。幸福西饼首页制作首先我在网上下载到了千锋教育提供的的幸福西饼官网静态页面的教学视频和图片素材、源码等。我是先看一集视频,然后关掉视频自…

计算机的应用技术课程的看法,统计教学与计算机应用的几点看法论文

统计教学与计算机应用的几点看法论文一、传统教学方法的局限性和弊端统计学是一门关于搜集、整理、汇总、描述和分析数据资料,并在此基础上进行推断和决策的方法论科学,具有很强的应用性、实践性。统计学课程是中等职业学校、财经类专业的基础核心课程。…

计算机应用基础试卷结果分析,计算机应用基础 试题

计算机应用基础 试题计算机应用基础的试题有哪些?打击知道吗?下面小编为大家带来计算机应用基础试题,仅供参考,希望能够帮到大家。计算机应用基础试题选择题:1、现代信息社会的主要标志是 ___ 。(A) 汽车的大量使用 (B) 人口的日益增长 (C) 自然环境的…

中国石油大学计算机专业调剂信息,2014年中国石油大学(北京)计算机专业考研调剂信息(新)...

写在前面:随着2014年34所自主划线院校考研分数线及国家线的公布,2014年考研复试、调剂工作也陆续拉开序幕。为了帮助更多考生顺利通过复试,考研论坛特开启复试调剂答疑活动,解答2014年考生有关考研复试和调剂的问题,为…

jupyter可以打开HTML文件吗,Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)...

前面用了很久Notebook来交互式编程了,此次说说几个其余的选项:htmlNotebook Markdown此次选Markdown模式(关于Markdown基础能够看以前写的Markdown Base)python和代码同样,Shift回车就能够预览了,怎么样是否是很酷的感受&#xff…

计算机专业毕业论文指导记录详细,毕业论文指导记录怎么写 了解一下

1、指导记录总共6次,请各位同学按照法学院网站上公布的毕业论文写作进度确定每次指导记录的时间。同时根据自己的论文选题和实际情况,可稍作调整。2、第一次:根据学院的统一部署,布置学生毕业论文写作的总体要求与进度&#xff0c…