「java访问rtu」Java访问百度语音合成

博主:adminadmin 2023-01-10 14:48:08 841

本篇文章给大家谈谈java访问rtu,以及Java访问百度语音合成对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

用java(modbus4j)如何给继电器发送RTU消息?

使用modbus4j开源项目,通过串口读取数据,过程中遇到点小问题。(转的demo按自己的需求修改的)

1.串口不对应,导致 gnu.io.NoSuchPortException。

2.PLC485串口转COMM口,发/送线连接不对,导致读不到数据

3.rxtxSerial.dll放置的路径,查了下有人说放到myeclipse/jre/bin下,可我是放到C:\Windows\System32下,不知道原因。

4.RXTXcomm.jar包和rxtxSerial.dll文件不对应,可去官网下载同一版本。

5.读保持型寄存器和读输入型寄存器方法不一样。这是由于modbus协议,保持型功能码为03,输入型为04。通过api可找到对应的方法,用法也差不多一样。

pre name="code" class="java"package com.test.modbus;

import java.util.Arrays;

import com.serotonin.io.serial.SerialParameters;

import com.serotonin.modbus4j.ModbusFactory;

import com.serotonin.modbus4j.ModbusMaster;

import com.serotonin.modbus4j.exception.ModbusInitException;

import com.serotonin.modbus4j.exception.ModbusTransportException;

import com.serotonin.modbus4j.msg.ReadDiscreteInputsRequest;

import com.serotonin.modbus4j.msg.ReadDiscreteInputsResponse;

import com.serotonin.modbus4j.msg.ReadHoldingRegistersRequest;

import com.serotonin.modbus4j.msg.ReadHoldingRegistersResponse;

import com.serotonin.modbus4j.msg.WriteRegistersRequest;

import com.serotonin.modbus4j.msg.WriteRegistersResponse;

/**

* 通过串口解析MODBUS协议

* @author cl2

*

*/

public class TestModbusDemo {

//设定MODBUS网络上从站地址

private final static int SLAVE_ADDRESS = 1;

// 串行波特率

private final static int BAUD_RATE = 9600;

public static void main(String[] args) {

SerialParameters serialParameters = new SerialParameters();

// 设定MODBUS通讯的串行口

serialParameters.setCommPortId("COM3");

// 设定成无奇偶校验

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();

readHoldingRegistersTest(master,SLAVE_ADDRESS,0,100);

} catch (ModbusInitException e) {

e.printStackTrace();

} finally {

master.destroy();

}

}

/**

* 读开关量型的输入信号

* @param master 主站

* @param slaveId 从站地址

* @param start 起始偏移量

* @param len 待读的开关量的个数

*/

private static void readDiscreteInputTest(ModbusMaster master, int slaveId, int start, int len) {

try {

ReadDiscreteInputsRequest request = new ReadDiscreteInputsRequest(slaveId, start, len);

ReadDiscreteInputsResponse response = (ReadDiscreteInputsResponse) master.send(request);

if (response.isException())

System.out.println("Exception response: message=" + response.getExceptionMessage());

else

System.out.println(Arrays.toString(response.getBooleanData()));

}

catch (ModbusTransportException e) {

e.printStackTrace();

}

}

/**

* 读保持寄存器上的内容

* @param master 主站

* @param slaveId 从站地址

* @param start 起始地址的偏移量

* @param len 待读寄存器的个数

*/

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] + " ");

}

}

} catch (ModbusTransportException e) {

e.printStackTrace();

}

}

/**

* 批量写数据到保持寄存器

* @param master 主站

* @param slaveId 从站地址

* @param start 起始地址的偏移量

* @param values 待写数据

*/

public static void writeRegistersTest(ModbusMaster master, int slaveId, int start, short[] values) {

try {

WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values);

WriteRegistersResponse response = (WriteRegistersResponse) master.send(request);

if (response.isException()){

System.out.println("Exception response: message=" + response.getExceptionMessage());

}

else {

System.out.println("Success");

}

}

catch (ModbusTransportException e) {

e.printStackTrace();

}

}

}

请问你如何用java实现的ModbusRTU485串口发送报文的,能提供一下代码吗,万分感谢

发送就是像流中写入16进制数据,java中用byte[]数组表示,至于数组怎么存放数据要看接受端的要求了,这就要协议来控制,比如数据开头是什么,数据长度,校验位什么的。发数据要看接受端,两端需要统一,不能随便发送。读写数据很简单,关键是处理分析数据,调试最难了,有时候还会遇到数据大小端不一致,数据解析乱码。

java 串口通信modbus异常,那个问题,请问您怎么解决的?

从提示信息来看 主要两点 第一点 串口通讯包 dll 和jar文件版本不匹配 第二点 没有new一个modbus对象

基于java的Modbus/TCP协议

从机的可以用freemodbus,我用过RTU的,很好用。

TCP的没用过,但freemodbus的代码格式很清晰,移植起来很简单。

另外可以去MODBUS的网站上找找,看有没有合适的库可以用。

关于java访问rtu和Java访问百度语音合成的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。