范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Modbus协议的CRC校验说明

  Modbus通讯协议两种传输方式
  1、ASCII模式
  当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
  代码系统
  • 十六进制,ASCII字符0...9,A...F
  • 消息中的每个ASCII字符都是一个十六进制字符组成
  每个字节地位
  • 1个起始位
  • 7个数据位,最小的有效位先发送
  • 1个奇偶校验位,无校验则无
  modbus应用协议
  CRC域是两个字节,包含一16位的二进制值。由传输设备计算后加入消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有无。
  CRC是先调入一值是全"1"的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
  CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。
  CRC添加到消息中时,低字节先加入,然后高字节。
  CRC简单函数如下:
  unsigned short CRC16(puchMsg, usDataLen)
  unsigned char *puchMsg ; /* 要进行CRC校验的消息 */
  unsigned short usDataLen ; /* 消息中字节数 */
  {
  unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */
  unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */
  unsigned uIndex ; /* CRC循环中的索引 */
  while (usDataLen--) /* 传输消息缓冲区 */
  {
  uIndex = uchCRCHi ^ *puchMsgg++ ; /* 计算CRC */
  uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex} ;
  uchCRCLo = auchCRCLo[uIndex] ;
  }
  return (uchCRCHi << 8 | uchCRCLo) ;
  }
  /* CRC 高位字节值表 */
  static unsigned char 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, 0xC0, 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, 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,
  0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
  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,
  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, 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, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
  0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
  0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
  } ;
  /* CRC低位字节值表*/
  static char auchCRCLo[] = {
  0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
  0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
  0x0F, 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, 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, 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, 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, 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
  } ;
  ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。可应用于各种数据采集和过程监控。下表1是ModBus的功能码定义。
  表1 ModBus功能码
  01 READ COIL STATUS
  02 READ INPUT STATUS
  03 READ HOLDING REGISTER
  04 READ INPUT REGISTER
  05 WRITE SINGLE COIL
  06 WRITE SINGLE REGISTER
  15 WRITE MULTIPLE COIL
  16 WRITE MULTIPLE REGISTER
  ModBus网络只是一个主机,所有通信都由他发出。网络可支持247个之多的远程从数控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。
  ModBus的传输方式
  在ModBus系统中有2种传输模式可选择。这2种传输模式与从机PC通信的能力是同等的。选择时应视所用ModBus主机而定,每个ModBus系统只能使用一种模式,不允许2种模式混用。一种模式是ASCII(美国信息交换码),另一种模式是RTU(远程终端设备)这两种模式的定义见表3
  ASCII和RTU传输模式的特性
  ASCII和RTU传输模式的特性
  控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
  所选的ASCII或RTU方式仅适用于标准的Modbus网络,定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。在其网络上(MAP和Modbus Plus)Modbus消息被转成与串行传输无关的帧。

51真惠玩让你幸福感爆棚的四款旅游神器文宋金戈责编吕东兴总编唐迪五一小长假即将到来,虽然部分省市目前仍处于疫情防控,但是大多数人还是拥有着一年难有的珍贵的去旅行放松的机会,地方不用太远,时间不用太长,只需要约上你的爱人别人的酒店!为什么会出现在你的朋友圈。。腾讯新闻。等。原创李盛你有没有遇到这样的情况之前浏览过的酒店突然出现在你的朋友圈比如我刚刚看了附近酒店的线上促销活动过了一会刷腾讯新闻的时候竟然看到这家酒店比如我近期正在做出游攻略看今日头条的时走进异域星球探秘秦岭墨石公园北阳山只要看过满天的繁星便会幻想着星空的样子并且为之念念不忘黑暗为底星星如钻石般洒落在夜空中闪闪发光,美到极致,浪漫到极致露营的人大半是奔着星空去的那种大片的星空已经成了电影和摄影作品里Windows11可能会减慢NVMeSSD速度自Windows11发布以来,有很多用户反映NVMeSSD的速度出现了问题。根据不同用户对NVMe降速的报告,因型号的不同,问题似乎是因NVMe固态盘品牌而异,但统计数据中有一个共强推!10大顶尖金融纪录片,看一遍搞钱路上更顺利10大顶尖金融纪录片全新升级季第三弹强势来袭近期会多开几个系列,干货满满,希望可以给薯宝们带来更多更全面的干货!老规矩,点赞收藏慢慢看1别恐慌人口与经济对未来保持乐观态度,该片讲述电脑反应慢怎么办?3个简单步骤,让电脑速度瞬间变快电脑用过一段时间后,反应速度越来越慢,真急人!那么电脑反应慢怎么办?有时候,我们真想换个新电脑算了。然而,且慢,今天孙师傅小窍门小妙招就给大家分享3个让电脑重新变快的方法,兴许您就主教练宣!曼联告别博格巴,博格巴的曼联生涯提前结束在曼联作客酋长球场挑战阿森纳之前,曼联主教练朗尼克透露,球队的中场博格巴本赛季将不会再出场,随着新帅滕哈格的到来,6月30日就合同到期的博格巴也没有选择和曼联续约,这意味着法国中场盘点中国太空第一人杨利伟的三次濒临死亡时刻2003年10月15日,对于全中国而言都是一个伟大的日子,长征2号火箭成功将神舟5号飞船发射到了太空,神州五号是我国的第一架载人航天飞船,里面坐着的是我国第1名进入太空的航天员杨利赵心童因何大比分落后马奎尔?关键原因有两个,不改变翻盘无望北京时间4月22日晚上,中国选手赵心童在世锦赛18决赛第二阶段的八局比赛中,26完败给马奎尔。加上第一阶段35落后,大比分已经变成511,距离出局仅剩两局之遥。作为新科英锦赛和德国手上有黑斑?什么原因导致?该如何摆脱修复?随着年龄的增长,您会注意到皮肤的变化。无论是眼睛周围的细纹还是额头上的皱纹,你的皮肤看起来都与年轻时不同。许多人立即注意到的一个变化是他们手上的黑斑。您可能想知道是什么导致了这些黑破案了!辽宁队为何能赢下广厦队!郭艾伦说出原因哈喽,大家好,欢迎收看酷彬聊球,文章开始之前,麻烦大家给酷彬文章点点赞点点关注,让更多球迷看到,谢谢大家。今天我们来聊一下篮球,来聊一下cba。我们知道cba的季后赛已经进入到最后
哈登59次单场3510助攻历史第一,看看詹姆斯威少库里几次北京时间1月23日讯,在昨天篮网战胜马刺的比赛中,篮网球员哈登表现出色,展现出了火箭登的能力,全场比赛拿到37分10篮板11助攻的三双数据。根据数据统计,这是哈登职业生涯常规赛第5王心凌被爱毁掉!39岁依旧因缺爱而迷失,脸部状态艰难重回当初如果说起童年时候最甜美的嗓音,相信大家一定是会想起王心凌这个名字。确实,甜心教主的称号真不是白来的。一开嗓就直接甜到你的心窝窝里去,甜而不腻确实让人难忘。可就是这样一个甜美女孩,偏曾落后海外的大国重器,国产燃气机攻克难题,技术实现100自研文BU审核子扬校正知秋曾落后海外的大国重器,国产燃气机攻克难题,技术实现100自研2020年11月27日,中国首台具有完全自主知识产权的F级50MW重型燃气轮机G50圆满完成满负荷顶级投资家28条交易法则当你觉得安全时,在马群的外边是最好的光年FX金融分析师财经媒体人业余研究交易技术分析。掌握一手最新前沿科技资讯,向您分享最深度的行业洞见。以下内容来自Just2Trade捷仕。查尔斯亨利道8条交易法则1。他给华尔街给vivoY32正式发布骁龙6805000mAh电池,1399元IT之家12月18日消息,vivoY32现已登陆vivo官网,搭载骁龙680处理器,内置5000mAh电池,8GB128GB售价1399元,目前尚未正式开售。设计方面,vivoY3止步LOL德杯首轮,BLG收官战惜败WE,小狗出面力挺队友时间来到12月18日,LOL德玛西亚杯A组小组赛准时开启,LPL豪门TESBLGJDGWELOL主播队HYA披挂上阵,争夺A组唯一一张通往八强舞台的入场券,其中BLGTESJDG等未来五年,上海楼市的基调大家好,我是观观。在金融圈混了16年,我却独爱买房,还首创了一套科学买房体系,已经帮助众多朋友买到好房子。以下是今天的正文。未来五年,上海楼市会是什么样子?这是我最近在思考的一个问马刺悍将重回CBA,曾被辽宁放弃,今加盟山西盼证明自己对于很多的外援来说,CBA绝对是一个非常好的选择,首先这里的对抗比较差,以他们的身体素质,到了之后基本是碾压,另外联赛的薪水比较高,就比如之前效力辽宁的巴斯,最近根据媒体透露,当初我国首个大型页岩气田新增页岩气探明储量超千亿立方米来源新华网新华社重庆12月14日电(记者周凯)记者从中国石油化工集团有限公司新闻办获悉,我国首个大型页岩气田中国石化江汉油田涪陵页岩气田白马区块页岩气探明储量新增报告,于12月9日2块多的充电桩概念汽车经销商概念,不到10倍市盈,你动心了吗最近股市震荡,找不到更好的标的,于是我就发现了这一只股。它市盈率9倍多,属于超低价,它还有充电桩概念,2020年5月和另外一家公司成立了子公司,开展充电桩的建设和服务。行业方面汽车吐槽湃新势力造车真是个风口,是个猪都想站上去看能不能飞起来吐槽菌综合整理又降温喽,小伙伴们记得穿秋裤啊。今天依然为大家带来了一周车市神吐槽集锦哟,周末愉快么么哒!一马斯克当选时代年度人物。沙发神吐槽捧得越高,摔得越狠?板凳神吐槽马斯克当心