首先给大家描述一下当前样例串口编程的场景,使用一个水位传感器来测试水库水位的高度,水位传感器连接数据采集器,数据采集器通过485串口和USB口转换器和电脑连接,电脑程序通过USB口读取水位传感器上传到采集器的数据,网络连接如下图所示:

样例代码如下,代码中“int hight = (list[3] - 4000) /160;”这个公式就可以获取到水位的高度,这个是比较难理解的,为什么这样就可以得到高度呢,其实这个公式是不完整的,完整公式是这样的:(传感器返回的电流值 - 传感器可输出电流的最小值)/传感器可输出电流的最大最小差值 * 传感器量程,当然这个计算方式的条件是压力传感器的输出信号与被测压力是线性的,如果是倒S型非线性或者S型非线性关系计算公式需要另行推算。

另一个关键点就是读取的长度设置,这个如何选在在代码注释中已经说明啦。

public static void main(String[] args) {SerialParameters serialParameters = new SerialParameters();// 设定MODBUS通讯的串行口serialParameters.setCommPortId("com6");// 设定成无奇偶校验serialParameters.setParity(0);// 设定成数据位是8位serialParameters.setDataBits(8);// 设定为1个停止位serialParameters.setStopBits(1);// 设定端口名称serialParameters.setPortOwnerName("Numb nuts");// 设定端口波特率
        serialParameters.setBaudRate(BAUD_RATE);// 创建ModbusFactory工厂实例ModbusFactory modbusFactory = new ModbusFactory();// 创建ModbusMaster实例ModbusMaster master = modbusFactory.createRtuMaster(serialParameters);// 初始化try {master.init();/*** 读的位置从零开始,长度4* 长度大小是采集器寄存器的数量,寄存器的数量是采集器可接入的电流输入的路数*/readHoldingRegistersTest(master,SLAVE_ADDRESS,0,4);} catch (ModbusInitException e) {e.printStackTrace();} finally {master.destroy();}}private static void readHoldingRegistersTest(ModbusMaster master,int slaveId, int start, int len) {try {ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(slaveId, start, len);ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master.send(request);if (response.isException()) {System.out.println("Exception response: message="+ response.getExceptionMessage());} else {System.out.println(Arrays.toString(response.getShortData()));short[] list = response.getShortData();for(int i = 0; i < list.length; i++){System.out.print(list[i] + " ");}System.out.println();int hight = (list[3] - 4000) /160;if(hight <= 0){System.out.println("水位高度为:0CM");}else{System.out.println("水位高度为:" + (hight + 13.5) + "CM");}}} catch (ModbusTransportException e) {e.printStackTrace();}}

最后给大家附上官方jar包,这个资源一般是比较难找到的,特别是对一些刚开始研究的同仁更是如此啦,资源包如下:https://files.cnblogs.com/files/cymiao/modbus.zip

转载于:https://www.cnblogs.com/cymiao/p/9964130.html

基于MODBUS-RTU协议的串口编程相关推荐

  1. 基于Modbus RTU协议的开关量控制采集简介

    一.什么是开关量控制采集 所谓的开关量控制采集就是通过458/232接口发送控制命令,实现读取开关量输入或者控制开关量输出的通断. 二.开关量输入采集和开关量输出控制 1.  开关量输入采集就是将一个 ...

  2. 安卓开发板之串口通信,通过modbus Rtu协议控制下位机

    安卓开发板之串口通信,通过modbus Rtu协议控制下位机 1.环境准备 2.编写串口操作核心类 3.编写测试类 前言:因为公司最近有个人脸识别门禁的项目,这个项目主要业务是实现远程人脸注册,管理员 ...

  3. 8数据提供什么掩膜产品_工业轨式1-8路RS485数据(MODBUS RTU协议)厂家产品说明...

    产品描述 工业级数点对点光猫提供1-8路RS485(MODBUS RTU协议): 在光纤中传输,该产品突破了传统串行接口通讯距离与通讯速率的矛盾,同时,也解决了电磁干扰.地环干扰和雷电破坏的难题,大大 ...

  4. AIRIOT物联网低代码平台如何配置Modbus RTU协议?

    MBRTU即MODBUS RTU的简称,MODBUS是OSI模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信.平台的MBRTU协议是建立在TCP协议之上的 ...

  5. ubuntu16.04下使用Modbus RTU协议控制Robotiq

    ubuntu16.04下使用Modbus RTU协议控制Robotiq 一.设备配置 二.创建工作空间 三.安装驱动 四.配置串口 五. ROS节点控制夹爪 六.RVIZ显示模型 一.设备配置 操作系 ...

  6. 树莓派4B、Python与三相四线多功能电力仪表通过RS485(modbus RTU协议)收发数据

    树莓派4B+Python与三相四线多功能电力仪表通过RS485(modbus RTU协议)接口发送和接收数据 请耐心把下面的警告⚠️看完 开始之前需要注意以下点:一.那就是安全,生命为本,安全第一.因 ...

  7. modbus RTU协议设备使用无线代替有线注意事项

    1.设备有线连接 Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议.ModBus网络是一个工业通信系统,由带智能终端的可编程序控 ...

  8. FDX-B标签RFID读写器CK-LR12-AB之Modbus Rtu协议运用规则

    1.1 Modbus Rtu 协议 1.1.1 寄存器定义表 寄存器地址 定义内容 寄存器地址 定义内容 0 从站地址 1 485速率 2 通信校验 3 读卡模式 4 系统状态 5 RSSI 6 Re ...

  9. RS232(Modbus RTU)+RS485(Modbus RTU)协议RFID识别磁导航AGV小车传感器|定位仪CK-GL16-AB的安装与磁处理方法

    RS232(Modbus RTU)+RS485(Modbus RTU)协议RFID识别磁导航AGV小车传感器|定位仪CK-GL16-AB是一款面向AGV行业新推出的一款"跨界"传感 ...

  10. 三菱FX3U与台达变频器通讯 采用485方式,modbus RTU协议,对台达变频器频率设定

    三菱FX3U与台达变频器通讯器件:三菱FX3U PLC+FX3U 485BD板,台达VFD变频器,昆仑通态触摸屏 功能:采用485方式,modbus RTU协议,对台达变频器频率设定,正反转,点动控制 ...

最新文章

  1. LeetCode 376. 摆动序列 中等难度
  2. Python面向对象:isinstance和issubclass
  3. hdu 3395(费用流,二分图的最大权匹配)
  4. 自定义流操作符 重载wcout
  5. http --- 共享加密(对称加密)的几个概念
  6. Spring Boot(十三)RabbitMQ安装与集成
  7. Python脚本做接口测试,抛弃接口测试工具是否可行?(一)
  8. 记一次mysql进程无法启动的解决方案
  9. Excel 时间戳和时间格式的互相转换的方法
  10. BZOJ 2724: [Violet 6]蒲公英
  11. python棋子判定_python微信跳一跳系列之棋子定位颜色识别
  12. html 表格_HTML -- 表格结构
  13. 业界总结 | BERT的花式玩法
  14. Exchange 2013反垃圾邮件功能
  15. 移动wifi宝显示无服务器,优游宝4G随身WiFi解决方案 云SIM技术无需插卡
  16. 动画过渡transition
  17. 《后浪》:B站该为自己敲响的警钟
  18. jenkin swindows启动_Windows下Nginx的启动、停止等命令
  19. 学好编程必需先学好的基础
  20. 读书笔记-精准努力-勇敢地直面问题

热门文章

  1. bootice.exe linux 启动盘,怎么用bootice自己手动制作U盘启动-支持BIOS+UEFI
  2. python装饰器模式带参数_Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)...
  3. c#定时备份mysql数据库_C# 定时备份数据库工具源码下载
  4. minio 文件预览_Minio使用说明
  5. manual 离线手册 韩顺平php_PHP - Manual: 手册的格式 (官方文档)
  6. phpcount数组报错_joomla中的PHP错误警告:count():参数必须是实现Countable的数组或对象-问答-阿里云开发者社区-阿里云...
  7. maven安装junit_JUnit安装Maven – JUnit 4和JUnit 5
  8. Python Matplotlib
  9. 二叉树遍历结果推二叉树_二叉树遍历(PreOrder,InOrder,PostOrder)
  10. 位置权限 android_Android 10 –位置权限