modbus协议

java编写的两个modbus CRC16实现

纵然是瞬间 提交于 2019-11-29 13:08:06
在使用java与下位机通信中,经常会涉及到modbus协议,而作为校验手段,CRC16必不可少。 网上搜到的绝大部分实现都不是为modbus编写的,经过与下位机的通信检验,我选择了其中两个比较简洁的实现并根据自己的需要加以改进,完成了以下两个工具类。 希望对需要此类编程的朋友有所帮助。 对附件说明如下: class CRC_16 ——采用运算实现的CRC class CRC16M——采用查表实现的CRC 对主要方法说明如下: alex_crc16——crc运算 getSendBuf——根据十六进制字符串获得带CRC校验字的字节数组 getBufHexStr——将字节数组打印为十六进制字符串 checkBuf——验证应答的字节数组 另外今天调程序还犯了一个低级错误, 因为java中的byte是无符号的,因此在多数情况下是不能直接拿来相加的,需要先转换为无符号值 。 例如:说明书算式为: (bh & 03H) * 256 + bl ,即高字节后两位乘256加上低字节,如果直接将低字节拿去相加可能造成低字节值为负数。 加之前必须进行类似这样的转换 (bh&0x03)*256+(int)(bl&0xff) 转载于:https://my.oschina.net/u/1440018/blog/543233 来源: https://blog.csdn.net/chunning1112

modbus通讯协议详解

荒凉一梦 提交于 2019-11-29 11:35:53
一、Modbus 协议简介     Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。Modbus通讯物理接口可以选用串口(包括RS232和RS485),也可以选择以太网口。其通信遵循以下的过程:   ● 主设备向从设备发送请求   ● 从设备分析并处理主设备的请求,然后向主设备发送结果   ● 如果出现任何差错,从设备将返回一个异常功能码   此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。   当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构

Modbus网关的 四种类型

谁都会走 提交于 2019-11-29 10:14:55
概述 Modbus网关是一种能够将Modubs TCP协议转化为Modbus RTU协议的设备。Modbus广泛应用于仪表和传感器领域,可以获得仪表和传感器的数据,但是传统的基于RS485的Modbus RTU(或ASCII)速度和扩展性较差,所以后来出现了Modbus TCP这种基于网络的协议。所以Modbus网关这种转换器就应运而生了。 四种Modbus网关从简单协议转换到多主机网关,再到存储型网关,再到ZLMB这种可配置网关。从简单到复杂也是反映了它的发展过程,了解他们的优缺点有助于工程师更好掌握它们的使用方法。 这里特别推荐的是ZLMB可配置网关,它可以预先配置需要读取的多个从站的多个寄存器列表,然后网口可以用一条指令一次性读取所有寄存器,读取效率非常高。且读取速度很快。具体参考《可配置Modbus网关ZLMB》。 四类Modbus网关 2.1. 简单协议转化 最初的Modubs网关,只不过是需要解决数据格式的转化。举一个例子,Modbus RTU(RS485端)中03功能码,读取00开始的1个寄存器的指令为:01 03 00 00 00 01 84 0a,其中84 0a是CRC校验。而一个Modbus TCP指令(网络端)为00 00 00 00 00 06 01 03 00 00 00 01。我们知道普通的串口服务器是“透传”的,也就是发送串口发送01 03 00 00

浅谈-对modbus的理解

烈酒焚心 提交于 2019-11-29 08:16:22
浅谈-对modbus的理解 一、简介   Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。   Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。   标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。 二、报文   先来简单分析一条MODBUS报文,例如:01 06 00 01 00 17 98 04    01 06 00 01 00 17 98 04   从机地址 功能码 数据地址 数据 CRC校验   这一串数据的意思是:把数据 0x0017(十进制23) 写入 1号从机地址 0x0001数据地址。   一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。 三、从机地址   Modbus串行链路协议是一个主-从协议。在同一时刻,只有一个主节点连接于总线,一个或多个子节点连接于同一个串行总线。Modbus通信总是由主节点发起。子节点在没有收到来自主节点的请求时,从不会发送数据。 四、功能码   一下是modbus所有功能码作用说明:   功能码 作用   01     读取线圈状态取得一组逻辑线圈的当前状态(ON

Modbus 地址

北城余情 提交于 2019-11-29 06:05:22
通常 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 功能 1 功能 5:写单输出点 功能 15:写多输出点 数字量输写 出 10001 - 读 19999 写 功能 2 - 数字量输 入 30001 - 读 39999 功能 4 输入寄存 写 器 - 读 功能 3 40001 - 功能 6:写单寄存器 49999 单元 保持寄存 写 器 功能 16:写多寄存器 单元 如何理解 Modbus地址与功能码的区别? Modbus地址与 Modbus的功能码是两个层次的概念。 根据 Modbus通信协议, Modbus数据的地址使用

C# ModBus 读取数据

喜你入骨 提交于 2019-11-28 05:39:04
简单介绍:   项目上需要与多家公司做接口对接。我们提供接口的有,其他公司提供的接口也有。所有的接口全部对接完了,遇到一个非常棘手的问题,需要获取甲方船厂设备上的状态,就给了一个文档,文档上写了IP、端口、协议、一些地址,没有API文档,拿到手上一面懵逼,这怎么玩儿。。。。 文档如下: 百度百科:   Modbus是一种串行 通信协议 ,是Modicon公司(现在的 施耐德电气 Schneider Electric)于1979年为使用 可编程逻辑控制器 (PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。   看上去好像跟Socket差不多,本身又不是工业领域出身的,大概知道是一种工业领域通用的一套通信标准,下面直接上DEMO示例 第一步:下载类库 使用的类库已上传百度云盘: 链接:https://pan.baidu.com/s/1JtaGC0r17jjnQPMhkMKRJg 提取码:wagl 第二步:引入类库 第三步:引入命名空间 1 using HslCommunication.ModBus; 2 using HslCommunication; 第四步:初始化对象 1 初始化方式一、 2 private ModBusTcpClient busTcpClient = new

stm32——modbus例程网址收藏

◇◆丶佛笑我妖孽 提交于 2019-11-27 00:32:45
http://www.stmcu.org.cn/module/forum/thread-599873-1-1.html 注: 本程序适合新手入门,第一个程序写了如何实现串口的收发多个字节程序 第二个程序写了如何利用主程序循环来监控数据接收 第三个程序写了如何利用定时器来监控数据是否发送和接收完毕 第四个程序写了RS485如何通信通信 第五个程序写了modbus协议。。。。。。。。。。 通过上位机发送一串字节后并在显示屏上显示所发送的数据,大概就是这个功能 芯片是STM32F103VET的,编译器是IAR6.1的。需要的就带走吧! modbus <ignore_js_op> 1.usart.zip 799.08 KB, 下载次数: 1500, 下载积分: ST金币 -1 <ignore_js_op> 2.usart主程序循环监控.zip 826.95 KB, 下载次数: 1220, 下载积分: ST金币 -1 <ignore_js_op> 3.usart定时器监控.zip 812.14 KB, 下载次数: 1135, 下载积分: ST金币 -1 <ignore_js_op> 4.RS485.zip 816.13 KB, 下载次数: 1567, 下载积分: ST金币 -1 对需要的朋友很有用 modbus在工业现场的底层通信 应用非常广泛. 传个资料 ,版权归网络所有 <ignore

Modbus教程| Modbus协议,ASCII和RTU帧,Modbus工作

我与影子孤独终老i 提交于 2019-11-26 20:53:13
转载自:https://www.rfwireless-world.com/Tutorials/Modbus-Protocol-tutorial.html 这个 Modbus教程 涵盖了modbus协议基础,ASCII和RTU帧结构,Modbus协议工作。 Modbus协议教程还描述了应用示例。 什么是Modbus? 简介 : “Modbus”术语是Modicon Inc.的商标,维护该标准。 它是一种应用层协议,它基于连接在不同类型总线或网络上的设备之间的客户端/服务器架构。 该Modbus协议用于SCADA风格的设备之间的网络通信。 Modbus协议 运行在RS232,RS422和RS485之上。 对于Modbus帧,为基于IP的链路层定义了Modbus / TCP规范。 有许多工业自动化和计量协议。 Modbus协议基于查询/响应模型。 “查询消息”和“响应消息”及其字段(即内容)的放大视图如下图所示。 •如图所示,查询和响应消息都包含start(0x3A)和end(0x0D0A)分隔符。 •查询消息由包括设备地址,功能代码,查询数据和错误检查的字段组成。 •响应消息由包括设备地址,功能代码,响应数据和错误检查的字段组成。 Modbus协议工作 •Modbus协议通常遵循基于主从架构。 主设备向从设备发送请求消息并等待响应消息。 该架构为主站提供了完整的信息流控制。

modbus_tk与Modubs Slave结合使用

百般思念 提交于 2019-11-26 03:38:28
下载两个软件: Modbus Slave/Poll Modbus Slave(用来模拟客户端(从))和Modbus Poll(用来模拟服务端(主)) Modbus Poll是非常流行的Modbus Master模拟器,用于测试和调试从设备。支持Modbus RTU/ASCII和Modbus TCP/IP。 一、模拟器的使用 1.1 配置Modbus Poll 配置Modbus Poll的连接 配置Modbus Poll的参数 参数说明 Tx:向主站发送数据帧的次数 Err:通讯错误次数 ID:模拟Modbus子设备的设备地址 F:使用的Modbus功能码 SR:扫描周期 Slave ID:Modbus从站地址 Function:寄存器的功能码 Address:寄存器起始地址,默认从0开始 Quantity:寄存器连续个数,默认为10个 Scan Rate:读取数据的周期,单位毫秒,默认1000ms 寄存器功能码 代码 中文名称 寄存器PLC地址 位操作/字操作 操作数量 01 读线圈状态 00001-09999 位操作 单个或多个 02 读离散输入状态 10001-19999 位操作 单个或多个 03 读保持寄存器 40001-49999 字操作 单个或多个 04 读输入寄存器 30001-39999 字操作 单个或多个 05 写单个线圈 00001-09999 位操作 单个 06