首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Plc4x一次不能读取9个以上的寄存器

Plc4x一次不能读取9个以上的寄存器
EN

Stack Overflow用户
提问于 2019-12-03 17:30:57
回答 1查看 338关注 0票数 1

我正在尝试理解plac4x java实现中的地址系统。下面是plcs的读取代码示例:

代码语言:javascript
复制
    @Test
    void testReadingFromPlc() {
        // Establish a connection to the plc using the url provided as first argument
        try( PlcConnection plcConnection = new PlcDriverManager().getConnection( "modbus:tcp://1.1.2.1" ) ){
            // Create a new read request:
            // - Give the single item requested the alias name "value"
            var builder = plcConnection.readRequestBuilder();
            builder.addItem( "value-" + 1, "register:1[9]" );
            builder.addItem( "value-" + 2, "coil:1000[8]" );
            var readRequest = builder.build();

            LOGGER.info( "Synchronous request ..." );
            var syncResponse = readRequest.execute().get();
            // Simply iterating over the field names returned in the response.
            var bytes = syncResponse.getAllByteArrays( "value-1" );
            bytes.forEach( item -> System.out.println( TopicsMapping.byteArray2IntegerArray( item )[0] ) );
            var booleans = syncResponse.getAllBooleans( "value-2" );
            booleans.forEach( System.out::println );
        }catch(Exception e){
            e.printStackTrace();
        }
    }

我们的PLC管理16个寄存器,但是地址的正则表达式不允许数量大于9。有可能改变这一点吗?

此外,如果我尝试添加具有相同目的的其他字段,则不会发生读取:

代码语言:javascript
复制
    var builder = plcConnection.readRequestBuilder();
    builder.addItem( "value-" + 0, "register:26[8]" );
    builder.addItem( "value-" + 1, "register:34[8]" );
    builder.addItem( "value-" + 2, "coil:1000[8]" );
    var readRequest = builder.build();

任何帮助都非常感谢。你能告诉我在哪里可以找到关于这个框架的更多信息吗?

EN

回答 1

Stack Overflow用户

发布于 2019-12-16 15:05:28

我正在使用PLC4x中的modbus驱动程序成功地进行读写。我已经在你的另一个问题上附加了一些编写代码:Plc4x addressing system

关于阅读,这里有一些代码:

代码语言:javascript
复制
  public static PlcReadResponse readModbusTestData(ProtocolClient client,
                                                   String registerName,
                                                   int offset,
                                                   int size,
                                                   String registerType)
    throws ExecutionException, InterruptedException, TimeoutException {

    PlcReadRequest readRequest = client.getConnection().readRequestBuilder()
      .addItem(registerName, registerType + ":" + offset + "[" + size + "]").build();
    return readRequest.execute().get(2, TimeUnit.SECONDS);
  }

向PlcReadRequest添加更多项的多次读取功能还没有经过我的测试,但它应该可以工作。写几个项目是可行的。

在任何情况下,为了理解PLC4x是如何在modbus或opc-ua上工作的,我需要深入研究源代码。它可以工作,但您需要阅读源代码以了解其当前状态的详细信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59153944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档