You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@plc4x.apache.org by "Christofer Dutz (Jira)" <ji...@apache.org> on 2019/12/05 12:36:00 UTC

[jira] [Comment Edited] (PLC4X-156) The unitId (device id/slave id) is hardcoded to 0 which is the broadcast id in modbus

    [ https://issues.apache.org/jira/browse/PLC4X-156?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16988750#comment-16988750 ] 

Christofer Dutz edited comment on PLC4X-156 at 12/5/19 12:35 PM:
-----------------------------------------------------------------

So I would update the Driver to accept the mentioned "slaveId" as a parameter ... does it also make sense to change the default from 0 to 1?


was (Author: cdutz):
So I would update the Driver to accept the mentioned "sleaveId" as a parameter ... does it also make sense to change the default from 0 to 1?

> The unitId (device id/slave id) is hardcoded to 0 which is the broadcast id in modbus
> -------------------------------------------------------------------------------------
>
>                 Key: PLC4X-156
>                 URL: https://issues.apache.org/jira/browse/PLC4X-156
>             Project: Apache PLC4X
>          Issue Type: Bug
>          Components: Driver-Modbus
>            Reporter: Alvaro del Castillo
>            Assignee: Christofer Dutz
>            Priority: Critical
>              Labels: config
>         Attachments: Plc4XModbusProtocol.java
>
>
> Trying to use the modbus driver, it is always trying to read and write from the slave 0 in the modbus slave/server. This identifier is the one used for broadcasting reads and writes to all the slaves in the modbus network. In modbus TCP this identifier is not needed, but it is needed to support legacy devices.
> And testing with with some modbus serves like:
> [https://pypi.org/project/pyModSlave|https://pypi.org/project/pyModSlave/]
> and in the second case, if you try to read a register:
> {noformat}
> 2019-11-27 08:29:29,837 ERROR modbus.handle_request Thread-1 invalid request: Function 3 can not be broadcasted{noformat}
> This unitId should be a param but if it must be hardcoded, changing it to *1* is a fix. But in some cases, you could need a 
> specific id to connect to a device. For example, for the XY-MD02 sensor connected via serial to a Modbus TCP client, in order to read the values from the sensor you need to provide the right device id (in this case is also 1, but it could change).
> The unitId is defined in:
> [https://github.com/apache/plc4x/blob/develop/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java#L92]
> I have tested in 0.4.0 release that changing the unitId to *1* fixes the problem with modbus servers. I have attached the file with this minor modification.
> I can send a PR if you find the fix useful.
> Thanks!
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)