关于MODBUS RTU CRCcrc16校验 modbus

modbus rtu
crc校验程序如何编写
cp340ascii通讯modbusrtucrc校验程序
最佳答案参考:/view/dcd596.htmvar_inputdb_no:dbb_start:dbb_counts:end_varvar_outputcrc_h:crc_l:end_varvar_tempcrc_reg:db_no_temp:byteschecked:bitschecked:end_varbeginnetworktitle=lw#16#t#crc_//预置crc寄存器l#db_t#db_no_opndb[#db_no_temp];l#dbb_//读入校验起始字节sld3;lar1;l#dbb_//读入校验字节数量_a:t#//字节处理循环ldbb[ar1,p#0.0];llb1;tlb1;l8;_b:t#//位处理循环l#crc_srw1;t#crc_jz_c;//检验移出位是否为1l#crc_lw#16#a001;t#crc__c:l#//校验下个位loop_b;+ar1p#1.0;//校验下个字节l#loop_a;llb1;//输出校验码t#crc_h;llb0;t#crc_l;end_function
线下培训课程
免费视频教程数据校验助手[工控通讯版] CRC 16 LRC Modbus ASCII RTU 支持不可见字符 -- 映山红工作室 -- 工控网博客
/measureeasy.ashx
免费绿色免安装!!!!Vista系统下绿色免安装!!
需要安装.net framework 2.0才可以在98,2000,xp及2003系统下使用。检查本机是否已经安装.net framework的方法,打开控制面板,打开添加或删除程序,看看程序列表中是否已经存在.net framework 2.0及以上版本。(如果你双击程序提示错误,也说明您的计算机没有安装.net framework).net framework 的安装文件是免费的,各大下载网站均有下载。用百度或google搜索即可。推荐华军。(.net framework 2.0 的安装文件名一般为“dotnetfx20.exe”,大小为22.4MB)
&& 这是一款绿色免安装的字符串数据校验软件,(需要.net2.0环境)采用vb.net编写。参照日本神港仪表通讯手册编写。包含modbus协议的两种通讯模式下的校验。(ASCII模式下的LRC校验,RTU模式下的CRC16校验)这款校验软件的最大特色就是支持不可见字符的校验。我还没有发现其它任何支持不可见字符校验的同类软件。需要注意的是:这是工控通讯版,针对工控通讯中用到的循环冗余校验CRC16和纵向冗余校验LRC,所以仅支持字符串校验,不对文件进行校验。网络上的校验软件没有能符合神港通讯说明书校验结果的,只有这个软件的校验结果能完全吻合。
使用方法: & & && 在对应进制后输入字符的ASCII码即可。ASCII码表到处都有,自己找。我会考虑在后续版本中直接内置ASCII码表(三值对应十进制、十六进制、八进制)。 & & && 字符需要逐个输入,不能批量输入。要每次敲一个ASCII码值,并点击对应“附加”按钮即可。 & & && 开始新的字符串校验前要先点击“清空”按钮清空上次输入的字符串。已输入的字符串长度和内容都有实时的显示。 & & && 输入完毕后,点击“CRC16校验”和“LRC校验”即可得到相应校验码。 & & && 点击“关于”按钮您或许能够得到其它的一些提示。
{回复:数据校验助手[工控通讯版]&CRC&16&nbs}
{回复:数据校验助手[工控通讯版]&CRC&16&nbs}
{回复:数据校验助手[工控通讯版]&CRC&16&nbs}
需要学习一下
{回复:数据校验助手[工控通讯版]&CRC&16&nbs}Modbus RTU Master
Modbus RTU 主站指令库
西门子在 Micro/WIN V4.0 SP5 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。
图 1. 西门子标准指令库(Micro/WIN V4.0 SP5)
1. Modbus RTU 主站指令库的功能是通过在用户程序中调用预先编好的程序功能块实现的,该库对 Port 0
和 Port 1 有效。该指令库将设置通信口工作在自由口模式下。
2. Modbus RTU 主站指令库使用了一些用户中断功能,编其他程序时不能在用户程序中禁止中断。
3. Modbus RTU 主站库对CPU的版本有要求。CPU 的版本必须为 2.00
或者 2.01(即订货号为 6ES721*-***23-0BA*),1.22版本之前(包括1.22版本)的 S7-200 CPU 不支持。
使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器。
要使用 Modbus RTU 主站指令库,须遵循下列步骤:
安装西门子标准指令库
按照要求编写用户程序调用 Modubs RTU 主站指令库
Modbus RTU 主站功能编程
1. 调用 Modbus RTU 主站初始化和控制子程序
使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:
图 2. 用 SM0.0 调用 Modbus RTU 主站初始化与控制子程序
各参数意义如下:
必须保证每一扫描周期都被使能(使用 SM0.0)
为 1 时,使能 Modbus 协议功能;为 0 时恢复为系统 PPI 协议
支持的通讯波特率为,,1,5。
校验方式选择
2=偶较验&&&
主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒(1 秒),允许设置的范围为 1 - 32767。
注意: 这个值必须设置足够大以保证从站有时间响应。
初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG 读写操作(见例程)
初始化错误代码(只有在 Done 位为1时有效):
0= 无错误
1= 校验选择非法
波特率选择非法
3= 模式选择非法
2. 调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;
图 3. 调用Modbus RTU 主站读写子程序
各参数意义如下:
同一时刻只能有一个读写功能(即 MBUS_MSG)使能
注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。
读写请求位:
每一个新的读写请求必须使用脉冲触发
从站地址:
可选择的范围&& 1 - 247
从站地址:
0 = 读, 1 = 写
1. 开关量输出和保持寄存器支持读和写功能
2. 开关量输入和模拟量输入只支持读功能
读写从站的
选择读写的数据类型
数据地址:
00001 至 0xxxx - 开关量输出
10001 至 1xxxx - 开关量输入
30001 至 3xxxx - 模拟量输入
40001 至 4xxxx - 保持寄存器
通讯的数据个数(位或字的个数)
注意: Modbus主站可读/写的最大数据量为120个字(是指每一个 MBUS_MSG 指令)
数据指针:
1. 如果是读指令,读回的数据放到这个数据区中
2. 如果是写指令,要写出的数据放到这个数据区中
读写功能完成位
错误代码:
只有在 Done 位为1时,错误代码才有效
0 = 无错误
1 = 响应校验错误
3 = 接收超时(从站无响应)
4 = 请求参数错误(slave address, Modbus address, count, RW)
5 = Modbus/自由口未使能
6 = Modbus正在忙于其它请求
7 = 响应错误(响应不是请求的操作)
8 = 响应CRC校验和错误
101 = 从站不支持请求的功能
102 = 从站不支持数据地址
103 = 从站不支持此种数据类型
104 = 从站设备故障
105 = 从站接受了信息,但是响应被延迟
106 = 从站忙,拒绝了该信息
107 = 从站拒绝了信息
108 = 从站存储器奇偶错误
常见的错误:
如果多个 MBUS_MSG 指令同时使能会造成 6 号错误
从站 delay 参数设的时间过长会造成主站 3 号错误
从站掉电或不运行,网络故障都会造成主站 3 号错误
在 CPU 的 V 数据区中为库指令分配存储区(Library Memory)
Modbus Master 指令库需要一个284个字节的全局 V 存储区。
关于 Modbus RTU 主站协议库的补充说明
此为西门子正式推出的标准库指令说明资料。
在 Modbus RTU Master 协议和 PPI 协议之间切换:
Modbus RTU Master 协议指令库使通信口工作在自由口模式下,此时不能与 Micro/WIN 软件通信。要在切换回 PPI 协议,可以:
将 MBUS_CTRL 指令的 Mode 输入端设置为逻辑“0”
将 CPU 的允许模式选择开关置为 STOP 位置
Modbus RTU Master 协议库的执行时间:
Modbus RTU Master 协议库的 MBUS_CTRL 指令不需要很长的执行时间。MBUS_需要 1.11 ms 用于初始化,在后续的每个扫描周期中只占用 0.41 ms。
调用 MBUS_MSG 子程序会加长处理时间。大部分时间都用于 CRC 校验的计算。每读、写一个字的数据就需要 1.85 ms 扫描时间。数据最多的情况下(读、写 120 字的数据),扫描时间大概会扩增加 222 ms。读操作的时间主要消耗在接收数据上;写操作的时间主要消耗在发送数据上。
Modbus 地址
通常 Modbus 地址由 5 位数字组成,包括起始的数据类型代号,以及后面的偏移地址。Modbus Master 协议库把标准的 Modbus 地址映射为所谓 Modbus 功能号,读写从站的数据。Modbus Master 协议库支持如下地址:
00001 - 09999:数字量输出( 线圈)
10001 - 19999:数字量输入(触点)
30001 - 39999:输入数据寄存器(通常为模拟量输入)
40001 - 49999:数据保持寄存器
Modbus Master 协议库支持的功能
为了支持上述 Modbus 地址的读写,Modbus Master 协议库需要从站支持下列功能:
表 1. 需要从站支持的功能
Modbus 地址
Modbus 从站须支持的功能
00001 - 09999
数字量输出
功能 5:写单输出点
功能 15:写多输出点
10001 - 19999
数字量输入
30001 - 39999
输入寄存器
40001 - 49999
保持寄存器
功能 6:写单寄存器单元
功能 16:写多寄存器单元
Modbus 地址和 S7-200 存储区地址的映射
S7-200 通过 Modbus Master 和 Slave 协议库通信时,Modbus 地址和 S7-200 内存储区地址的 映射关系都类似。
Modbus 保持寄存器地址映射举例:
Modbus 保持寄存器地址
S7-200 存储区字寻址
S7-200 存储区字节寻址
Modbus 数字量地址映射举例:
位地址(0xxxx 和 1xxxx)数据总是以字节为单位打包读写。第一个字节中的最低有效位对应
Modbus 地址的起始地址。如下图所示:
图 4. 数字量地址映射举例
Modbus RTU 主站例程
为了更好地理解 Modbus 主站的编程,可参考下面的例程。
1. 该例程使用 Micro/WIN V4.0 SP5 保存。
2. 该例程仅访问一个从站,若访问不同的从站,可通过改变从站地址来实现。
注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为 此联系西门子技术支持与服务部门。
Modbus RTU 主站库对 CPU 的版本是否有要求,为什么编译例子程序时,会遇到 4 个错误?
Modbus RTU 主站库对 CPU 的版本确实有要求,CPU 的版本必须为 2.00
或者 2.01(即订货号为6ES721*-***23-0BA*),1.22 版本之前(包括 1.22 版本)的 S7-200 CPU 不支持。
Modbus 指令库启动后,如何通过同一个通信端口进行 CPU 监控?
Modbus 指令库使用的是 CPU 的自由口通信功能,工作在自由口模式下的通讯口不能使用 Micro/WIN 的 PPI 编程通信监控。如果通信口都已经被占用,可以考虑:
加一个通信模块(如 EM 277、CP 243-1、EM 241 等)扩展出一个编程通信口
中止自由口模式,可以将 CPU 上的模式开关从 RUN 拨到 STOP;或者保持处于 RUN 状态,用程序停止指令库的 Modbus 模式(参见指令库应用)
如何理解 Modbus 地址与功能码的区别?
Modbus 地址与 Modbus 的功能码是两个层次的概念。
根据 Modbus 通信协议,Modbus 数据的地址使用 0xxxx、1xxxx、3xxxx 和 4xxxx 的形式,分别表示数字量输出、数字量输入、模拟量输入等数据地址。在使用 S7-200 的指令库时,Modbus 数据地址与 S7-200 的 I/O 和数据存储区地址间有特定的对应关系。
有些设备表明它支持 Modbus RTU 通信协议,但也详细提供了读写数据的详细通信帧格式,其中包括如何指定 Modbus 站的地址,需要读写数据类型、长度等等。数据帧有特定字节指出此指令读写的数据类型和地址,此字节的数据内容即所谓“功能码”,如功能 1 指定读取单个/多个数字量输出点的值。
支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种“功能”读写而来。功能码是 Modbus 地址的底层。如果 Modbus 通信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此功能号与 Modbus 地址间的对应关系。
如何访问大于 9999 的保持寄存器地址?
通常 Modbus 协议的保持寄存器地址范围在 40001 - 49999 之间。对于多数应用来说已经够了。但有些 Modbus 从站把地址映射到保持寄存器区的地址超过 9999 的部分。
Modbus Master 协议库支持超过 9999 的保持寄存器地址。地址范围为 400001 - 465536。只需在调用 MBUS_MSG 子程序时给 Addr 参数赋相应的值即可,如 416768。
Modubs Master 扩展地址模式仅支持保持寄存器区,不支持其他地址类型。>> 用VB实现对MODBUS RTU设备的通讯及CRC校验模块
用VB实现对MODBUS RTU设备的通讯及CRC校验模块
源码下载: &
分享有礼! 》
请点击右侧的分享按钮,把本代码分享到各社交媒体。
通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 CF币的奖励。
通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个CF币,您都将获得0.2 CF币的分成奖励。
用VB实现对MODBUS RTU设备的通讯及CRC校验模块-Using VB to realize MODBUS RTU equipment, communication and CRC checksum module
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
名称大小日期
&vb读取modbusRTU例程.doc42.00 kB28-12-09 21:09
(提交有效评论获得0.1CF币)
评论内容不能少于15个字,不要超出160个字。
23 篇源代码 21 篇源代码 18 篇源代码 13 篇源代码 9 篇源代码
285 篇源代码 173 篇源代码 48 篇源代码 42 篇源代码 36 篇源代码
发送留言给
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
CF仔没有找到您要的代码,请去留下您的问题吧,可能会有大神帮助你哦!
该用户暂时未开通博客
请按 Ctrl+D 键添加到收藏夹。基于MODBUS总线伺服电机运动控制方案 - 伺服驱动器,MODBUS总线,CRC校验 - 中电网
设计技术&&
|||||||||||||||
|||||||||||
基于MODBUS总线伺服电机运动控制方案
关键词:,,
时间: 10:00:13&&&&&&来源:elecfans
  现代工业自动控制系统朝智能化、网络化和开放式结构的方向发展。利用现场总线技 术,将符合同一标准的各种智能设备统一起来,彻底实现整个监测系统的分散控制,将提高系统集成度和数据传输效率、延长有效控制距离,并有利于提高系统抗干 扰性能和扩展系统功能。在运动控制中,伺服电机以其响应速度快,控制精准等优点以被更多的客户所选用。如果把总线通信与伺服控制技术统一起来,将推动运动控制技术以及设备远程监控技术的发展。MODBUS作为一种通用的现场总线,已经得到很广泛的应用,很多厂商PLC、智能I/O与A/D模块具备MODBUS通讯接口。本文在阐述MODBUS通信协议的基础上,构建了基于MODBUS的伺服电机运动控制。
  1 MODBUS总线控系统的技术特征
  MODBUS通讯协议是一种工业现场总线通讯协议,它定义的是一种设备控制器可以识别和使用的信息帧结构,独立于物理层介质,可以承载于多种网络类型 中。MODBUS协议把通信参与者规定为“主站”(Master)和“从站”(Slave),数据和信息的通信遵从主/从模式,当它应用于标准 MODBUS网络时,信息被直接传送。MODBUS总线网络中的各个智能设备通过异步串行总线连接起来,只允许一个控制器作为主站,其余智能设备作为从 站。采用命令/应答的通信方式,主站发出请求,从站应答请求并送回数据或状态信息,从站不能够自己发送信息。MODBUS协议定义的各种信息帧格式,描述 了主站控制器访问从站设备的过程,规定从站怎样做出应答响应,以及检查和报告传输错误等。网络中的每个从设备都必须分配给一个唯一的地址,只有符合地址要 求的从设备才会响应主设备发出的命令。
  由于MODBUS总线系统开发成本低,简单易用,并且现在已有很多工控器、PLC、显示屏等都具有MODBUS通信接口,所以它已经成为一种公认的通信标准。通过MODBUS总线,可以很方便地将不同厂商生产的控制设备连成工业网络,进行集中监控。
  MODBUS最初为PLC通信而设计,它通过24种总线命令实现PLC与外界的信息交换。这些总线命令对应的通信功能主要包括AI/AO、DI/DO的数据传送。但不是很多MODBUS设备的控制只使用其中的几条命令,对其余命令不做反应。
  1.1 MODBUS通信格式
  MODBUS协议定义了两种传输模式,即RTU(Remote Terminal Unit)和ASCII。在RTU模式中,1字节的信息作为一个8位字符被发送,而在ASCII模式中则作为两个ASCII字符被发送,如发送字符 “20”时,采用RTU模式时为“”,然而采用ASCII模式则成为“”+“”(ASCII字符的 “2”和“0”)。可见,发送同样的数据时,RTU模式的效率大约为ASCII模式的两倍。一般来说,数据量少而且主要是文本时采用ASCII;通信数据 量大而且是二进制数值时,多采用RTU模式。
  主站一次可向一个或所有从站发送通信请求(或指令),主设备通过消息帧的地址域来选通从设备。主站发送的消息帧的内容和顺序为:从站地址、功能码、 数据域(数据起始地址、数据量、数据内容)、CRC校验码;从站应答的信息内容和顺序与主站信息帧基本相同。MODBUS除了定义通信功能码之外,同时还 定义了出错码,标志出错信息。主站接收到错误码后,根据错误的原因采取相应的措施。从站应答的数据内容依据功能码进行响应,例如功能代码03要求读取从站 设备中保持寄存器的内容。
  MODBUS部分功能码
  1.2 CRC校验的实现
  MODBUS通信的RTU模式中,规定信息帧的最后两个字节用于传递CRC(Cyclic Redundancy Check,循环冗余校验)码。发送方将信息帧中地址域、功能码、数据域的所有字节按规定的方式进行位移并进行XOR(异或)计算,即可得到2字节的 CRC码,并把包含CRC校验码的信息帧作为一连续的流进行传输。接收方在收到该信息帧时按同样的方式进行计算,并将结果同收到的CRC码的双字节比较, 如果一致就认为通信正确,否则认为通信有误,从站将发送CRC错误应答。
  RTU模式一般采用CRC-16冗余校验方法,CRC-16的 校验码为16位(2字节),其中低字节在前,高字节在后。实现CRC校验有两种方法:根据CRC校验的定义公式进行计算,或者在程序中建立CRC校验值 表。在程序中使用前者更容易实现,这里需要使用CRC生成多项式X16+X15+X2+1。该多项式对应的码组系数为18005H(16进制),去除最高 位,对应的16位余数为8005H,即为CRC-16常数。CRC-16校验过程如下:将CRC寄存器的每一位预置为1;把该寄存器值与8bit的信息帧 数据进行异或,结果存于该寄存器;对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如 果为1,则把寄存器与CRC-16常数进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8bit数据处理完毕,用此 时寄存器的值与下一个8bit数据异或并进行如前一样的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。CRC添加到消息中时,先 加入低字节,然后高字节。
  1.3 链路特征
  MODBUS标准的物理层可以采用RS-232串行通信方式,但在长距离 通信中常采用RS-422或RS-485代替。在多点通信情况下只采用RS-485方式,所以RTU模式下的MODBUS系统采用屏蔽双绞线,通信距离可 达1000m。一条总线上最多可配置31个从站设备。传输线上的信息交换是半双工的,即同时只能有一台设备允许发送信息,主站在发送下一条指令之前等待从 站回应,从而避免了线路的冲突。
  RTU模式的传输格式是1个数据位,2个停止位,没有奇偶校验位。通信数据安全由控制参数CRC-16 码保证。RTU接收设备依靠接收字符间经过的时间判断一帧的开始,如果经过3个半的字符时间后仍然没有新的字符或者没有完成帧,接收设备就会放弃该帧,并 设下一个字符为新一帧的开始。
  2 松下PLC MODBUS控制的实现
  松下PLC支持modbus协议,只需要在选项、PLC系统寄存器设置、COM1口设置中站号设成1,通讯模式设为MODBUS RTU,通讯速率和通讯格式与05驱动器的设置保持一致。设置完成后可通过F145 SEND指令实现与05的通讯。
  3 施耐德05A伺服驱动器的配置
  首先过驱动器的HMI面板把控制方式设为modbus模式,把波特率、通讯格式设置成与PLC一致。

我要回帖

更多关于 modbus rtu crc计算器 的文章

 

随机推荐