You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@plc4x.apache.org by "Purushotham YB (Jira)" <ji...@apache.org> on 2021/06/03 13:59:00 UTC
[jira] [Created] (PLC4X-300) Plc4x support for RTU/Serial
communication for modbus protocol.
Purushotham YB created PLC4X-300:
------------------------------------
Summary: Plc4x support for RTU/Serial communication for modbus protocol.
Key: PLC4X-300
URL: https://issues.apache.org/jira/browse/PLC4X-300
Project: Apache PLC4X
Issue Type: Bug
Components: Driver-Modbus, examples
Affects Versions: 0.8.0
Reporter: Purushotham YB
Hi,
I am using plc4x for one of our projects to develop a module which uses plc4x to establish communication with a sensor device using modbus RTU/Serial communication.
I am able to communicate with the device with TCP transport but not able to do with RTU/Serial communication.
I tried to look for some example/documentation on how to use RTU/Serial communication in plc4x but could not find any information in the website or the web.
Also looking at the documentation at [https://plc4x.apache.org/users/protocols/modbus.html] it is not clear whether modbus supports serial transport as it only lists tcp and udp.
|Compatible Transports:| * {{tcp}} (Default Port: 502)
* {{udp}} (Default Port: 502)|
Kindly request to clarify if serial is supported in modbus? if so could you please point me to an example/documentation which shall be used to understand how to use it for serial communication.
Anyways I tried to use the library/driver plc4j-transport-serial [https://plc4x.apache.org/users/transports/serial.html]
to communicate with device in which the connection is established but it fails to read the data with following WANING.
{{2021-06-03-18:13:51.814 [nioEventLoopGroup-2-1] WARN io.netty.channel.nio.NioEventLoop - Selector.select() returned prematurely 512 times in a row; rebuilding Selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@28ecdc0d.}}
{{2021-06-03-18:13:59.630 [nioEventLoopGroup-2-1] WARN io.netty.channel.nio.NioEventLoop - Selector.select() returned prematurely 512 times in a row; rebuilding Selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@11c9a1fa.}}
{{My Sample code is as follows.}}
{{ private void plcRtuReader() {}}
{{ // unit-identifier=1&}}
{{ String connectionString =}}
{{ "modbus:serial://COM5?unit-identifier=1&baudRate=19200&stopBits=" + SerialPort.ONE_STOP_BIT}}
{{ + "&parityBits="}}
{{ + SerialPort.NO_PARITY + "&dataBits=8";}}
{{ System.out.println("URL:" + connectionString);}}
{{ try (PlcConnection plcConnection = new PlcDriverManager().getConnection(connectionString)) {}}
{{ if (!plcConnection.getMetadata().canRead()) {}}
{{ System.out.println("This connection doesn't support reading.");}}
{{ return;}}
{{ }}}
{{ PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();}}
{{ builder.addItem("value-2", "input-register:1[2]");}}
{{PlcReadRequest readRequest = builder.build();}}
{{// CompletableFuture<? extends PlcReadResponse> asyncResponse = readRequest.execute();}}
{{ PlcReadResponse response = readRequest.execute().get();}}
{{ for (String fieldName : response.getFieldNames()) {}}
{{ if (response.getResponseCode(fieldName) == PlcResponseCode.OK) {}}
{{ int numValues = response.getNumberOfValues(fieldName);}}
{{ // If it's just one element, output just one single line.}}
{{ if (numValues == 1) {}}
{{ System.out.println("Value[" + fieldName + "]: " + response.getObject(fieldName));}}
{{ }}}
{{ // If it's more than one element, output each in a single row.}}
{{ else {}}
{{ System.out.println("Value[" + fieldName + "]:");}}
{{ for (int i = 0; i < numValues; i++) {}}
{{ System.out.println(" - " + response.getObject(fieldName, i));}}
{{ }}}
{{ }}}
{{ }}}
{{ // Something went wrong, to output an error message instead.}}
{{ else {}}
{{ System.out.println(}}
{{ "Error[" + fieldName + "]: " + response.getResponseCode(fieldName).name());}}
{{ }}}
{{ }}}
{{ System.exit(0);}}
{{ } catch (PlcConnectionException e) {}}
{{ e.printStackTrace();}}
{{ } catch (Exception e) {}}
{{ e.printStackTrace();}}
{{ }}}
{{ }}}
Thanks a lot for your help.
Regards,
Purushotham
--
This message was sent by Atlassian Jira
(v8.3.4#803005)