java - 从 modbus 模拟器读取实时保持寄存器

标签 java tcp modbus

我正在使用 jamod 库连接到 modbus,我已经连接到 modbus 模拟器并成功读取值,但我想实时读取值。 this image shows modbus simulator and application i made

我的问题是,如果在模拟器中更改了值,我想更改文本字段中的值。这是我下面的代码

VBox vb = new VBox();
        vb.setAlignment(Pos.CENTER);
        TextField tf1 = new TextField();
        TextField tf2 = new TextField();
        TextField tf3 = new TextField();
        vb.getChildren().addAll(tf1,tf2,tf3);
        StackPane root = new StackPane();
        root.getChildren().add(vb);
        InetAddress inet = InetAddress.getLocalHost();
        TCPMasterConnection con = new TCPMasterConnection(inet);
        con.setPort(502);
        con.connect();
        ReadMultipleRegistersRequest req=new 
        ReadMultipleRegistersRequest(0,5);

        ModbusTCPTransaction trans = new ModbusTCPTransaction(con);
        trans.setRequest(req);


            trans.execute();
            ReadMultipleRegistersResponse res = 
(ReadMultipleRegistersResponse) trans.getResponse();
            tf1.setText(String.valueOf(res.getRegisterValue(0)));
            tf2.setText(String.valueOf(res.getRegisterValue(1)));
            tf3.setText(String.valueOf(res.getRegisterValue(2)));

最佳答案

投票值

定义一个将轮询数据的 Runnable

Runnable r = new Runnable(){

    @Override
    public void run(){
        //TODO: define abort criteria for boolean:isRunning
        while(isRunning){
            //TODO define int:pollDelay
            Thread.sleep(pollDelay);

            //here you poll for new results
            trans.setRequest(req);
            ReadMultipleRegistersResponse res = 
                (ReadMultipleRegistersResponse) trans.getResponse();
            tf1.setText(String.valueOf(res.getRegisterValue(0)));
            ...
        }
    }
}

然后启动runnable而不是只获取一次数据

VBox vb = new VBox();
vb.setAlignment(Pos.CENTER);
TextField tf1 = new TextField();
...

ModbusTCPTransaction trans = new ModbusTCPTransaction(con);

Runnable r = new ... //see code above
new Thread(r).start(); //starts the polling

此代码既不编译也不运行,但它会提示您如何连续轮询数据...

关于java - 从 modbus 模拟器读取实时保持寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45503580/

相关文章:

java - 两个 16 位整数到一个 32 位浮点值

linux - Beaglebone 中的 libmodbus 交叉编译和安装

java - 无法创建自定义 BOM。项目构建失败,无法解析导入 POM : Could not find artifact

java - Spring MVC - HTTP 状态 404

.net - 如何对 TCP 服务器进行单元测试?值得吗?

java - 目前在 Java 中可以实现的最低 TCP 延迟是多少?

java - Android 中我们如何处理光标?

Java-如何正确停止 ScheduledExecutorService

c - c中的linux TCP多客户端回显服务器

java - modbus4j的依赖