首 页 行业热点 新车 试驾评测 养车用车 车型库

modbus rtu串口通信

发布网友

我来回答

3个回答

懂视网

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

 

基于MODBUS-RTU协议的串口编程

标签:返回   port   register   为什么   ram   col   校验   图片   files   

热心网友

你应该看标准的modbus协议。
01 03 00 01 00 01 D5 CA
第一位是目标地址,第二位是功能码,第3-4位是寄存器的高低位置。
第5-6位是需要读取的数据个数,第7,8位是crc验证码。标准的是CRC高低位,但也有些协议的CRC是低高位排列。

发送成功以后会设备会响应你。
返回的数据格式差不多。
设备地址 功能码 数据个数 数据1.。。。数据n CRC检验码(2byte)

具体你应该先下载标准modebus协议看看,有PDF文档的。

热心网友

大致的看了下~~你的写的指令:
01 03 00 01 00 01 D5 CA
01 01 00 50 00 20 3D C3
01 03 00 60 00 10 44 18
是三条指令~~所以你不要一下都发出去~~发完一条等待一段时间~~等待接收,500ms肯定够了。
有问题的话再发贴……

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com