1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > modbus4j串口通讯

modbus4j串口通讯

时间:2020-11-16 13:40:28

相关推荐

modbus4j串口通讯

1 使用modbus4j开源项目,通过串口读取数据,过程中遇到点小问题。(转的demo按自己的需求修改的) 2 3 1.串口不对应,导致 gnu.io.NoSuchPortException。 4 5 2.PLC485串口转COMM口,发/送线连接不对,导致读不到数据 6 7 3.rxtxSerial.dll放置的路径,查了下有人说放到myeclipse/jre/bin下,可我是放到C:\Windows\System32下,不知道原因。 8 9 4.RXTXcomm.jar包和rxtxSerial.dll文件不对应,可去官网下载同一版本。 10 11 5.读保持型寄存器和读输入型寄存器方法不一样。这是由于modbus协议,保持型功能码为03,输入型为04。通过api可找到对应的方法,用法也差不多一样。 12 13 class="java">package com.test.modbus; 14 15 import java.util.Arrays; 16 17 import com.serotonin.io.serial.SerialParameters; 18 import com.serotonin.modbus4j.ModbusFactory; 19 import com.serotonin.modbus4j.ModbusMaster; 20 import com.serotonin.modbus4j.exception.ModbusInitException; 21 import com.serotonin.modbus4j.exception.ModbusTransportException; 22 import com.serotonin.modbus4j.msg.ReadDiscreteInputsRequest; 23 import com.serotonin.modbus4j.msg.ReadDiscreteInputsResponse; 24 import com.serotonin.modbus4j.msg.ReadHoldingRegistersRequest; 25 import com.serotonin.modbus4j.msg.ReadHoldingRegistersResponse; 26 import com.serotonin.modbus4j.msg.WriteRegistersRequest; 27 import com.serotonin.modbus4j.msg.WriteRegistersResponse; 28 29 /** 30 * 通过串口解析MODBUS协议 31 * @author cl2 32 * 33 */ 34 public class TestModbusDemo { 35//设定MODBUS网络上从站地址 36private final static int SLAVE_ADDRESS = 1; 37// 串行波特率 38private final static int BAUD_RATE = 9600; 39 40public static void main(String[] args) { 41 SerialParameters serialParameters = new SerialParameters(); 42 // 设定MODBUS通讯的串行口 43 serialParameters.setCommPortId("COM3"); 44 // 设定成无奇偶校验 45 serialParameters.setParity(0); 46 // 设定成数据位是8位 47 serialParameters.setDataBits(8); 48 // 设定为1个停止位 49 serialParameters.setStopBits(1); 50 // 设定端口名称 51 serialParameters.setPortOwnerName("Numb nuts"); 52 // 设定端口波特率 53 serialParameters.setBaudRate(BAUD_RATE); 54 55 // 创建ModbusFactory工厂实例 56 ModbusFactory modbusFactory = new ModbusFactory(); 57 // 创建ModbusMaster实例 58 ModbusMaster master = modbusFactory.createRtuMaster(serialParameters); 59 60 // 初始化 61 try { 62 master.init(); 63 readHoldingRegistersTest(master,SLAVE_ADDRESS,0,100); 64 65 } catch (ModbusInitException e) { 66 e.printStackTrace(); 67 } finally { 68 master.destroy(); 69 } 7071} 7273/** 74* 读开关量型的输入信号 75* @param master 主站 76* @param slaveId 从站地址 77* @param start 起始偏移量 78* @param len 待读的开关量的个数 79*/ 80private static void readDiscreteInputTest(ModbusMaster master, int slaveId, int start, int len) { 81try { 82 ReadDiscreteInputsRequest request = new ReadDiscreteInputsRequest(slaveId, start, len); 83 ReadDiscreteInputsResponse response = (ReadDiscreteInputsResponse) master.send(request); 84 if (response.isException()) 85 System.out.println("Exception response: message=" + response.getExceptionMessage()); 86 else 87 System.out.println(Arrays.toString(response.getBooleanData())); 88 } 89 catch (ModbusTransportException e) { 90 e.printStackTrace(); 91 } 92} 93 949596/** 97* 读保持寄存器上的内容 98* @param master 主站 99* @param slaveId 从站地址100* @param start 起始地址的偏移量101* @param len 待读寄存器的个数102*/103private static void readHoldingRegistersTest(ModbusMaster master,104 int slaveId, int start, int len) {105 try {106 ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(107 slaveId, start, len);108 ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master109 .send(request);110 if (response.isException()) {111 System.out.println("Exception response: message="112+ response.getExceptionMessage());113 } else {114 System.out.println(Arrays.toString(response.getShortData()));115 short[] list = response.getShortData();116 for(int i = 0; i < list.length; i++){117 System.out.print(list[i] + " ");118 }119 }120 } catch (ModbusTransportException e) {121 e.printStackTrace();122 }123}124125126127/**128* 批量写数据到保持寄存器129* @param master 主站130* @param slaveId 从站地址131* @param start 起始地址的偏移量132* @param values 待写数据133*/134public static void writeRegistersTest(ModbusMaster master, int slaveId, int start, short[] values) {135 try {136 WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values);137 WriteRegistersResponse response = (WriteRegistersResponse) master.send(request);138 if (response.isException()){139 System.out.println("Exception response: message=" + response.getExceptionMessage());140 }141 else {142 System.out.println("Success");143 }144 }145 catch (ModbusTransportException e) {146 e.printStackTrace();147 }148}149 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。