Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从modbus模拟器读取实时保持寄存器_Java_Tcp_Modbus - Fatal编程技术网

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

Java 从modbus模拟器读取实时保持寄存器,java,tcp,modbus,Java,Tcp,Modbus,我正在使用jamod库连接modbus,我已连接到modbus模拟器并成功读取值,但我希望实时读取值。 我的问题是,如果在模拟器中更改了值,我想更改textfield中的值。下面是我的代码 VBox vb = new VBox(); vb.setAlignment(Pos.CENTER); TextField tf1 = new TextField(); TextField tf2 = new TextField(); TextF

我正在使用jamod库连接modbus,我已连接到modbus模拟器并成功读取值,但我希望实时读取值。

我的问题是,如果在模拟器中更改了值,我想更改textfield中的值。下面是我的代码

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

这段代码既没有编译也没有运行,但它为您提供了如何连续轮询数据的提示

你想投票还是添加一个听众?我是新手,所以我不知道哪一个更好。你能给我两个例子吗?你能开始投票吗@Anandshresthathathanks Martin它工作得很好,但控制台显示了一个异常,即java.util.ConcurrentModificationException,我很高兴能提供帮助。您可以问一个问题,告诉我们您的并发性,我很期待!!你好@Martin Frank你在吗?我是,我是。。。怎么了