Plc4x不能一次读取超过9个寄存器



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

@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。是否有可能改变这一点?

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

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

任何帮助非常感谢。您能否告诉我在哪里可以找到有关此框架的更多信息?

我正在使用 PLC4x 中的 modbus 驱动程序成功读写。我已经在您的另一个问题中附加了一些编写代码:Plc4x寻址系统

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

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,我需要深入研究源代码。它可以工作,但您需要阅读源代码以了解当前状态的详细信息。

最新更新