You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@plc4x.apache.org by "Julian Zhang (Jira)" <ji...@apache.org> on 2022/03/20 03:07:00 UTC

[jira] [Commented] (PLC4X-338) s7 could not write CHAR array

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

Julian Zhang commented on PLC4X-338:
------------------------------------

The StaticHelper#seriliazeS7Char method (extracted from plc4x/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/utils/StaticHelper.java) has not been implemented in the latest develop branch:
{code:java}
/*
 * A variable of data type CHAR (character) occupies one byte.
 */
public static void serializeS7Char(WriteBuffer io, PlcValue value, String encoding) {
    // TODO: Need to implement the serialization or we can't write strings
    if ("UTF-8".equalsIgnoreCase(encoding)) {
        //return io.readString(8, encoding);
    } else if ("UTF-16".equalsIgnoreCase(encoding)) {
        //return io.readString(16, encoding);
    } else {
        throw new PlcRuntimeException("Unsupported encoding");
    }
} {code}
And I made the following changes:
{code:java}
public static void serializeS7Char(WriteBuffer io, PlcValue value, String encoding) {
    // TODO: Need to implement the serialization or we can't write strings

    try {
        if ("UTF-8".equalsIgnoreCase(encoding)) {
            io.writeByte(value.getByte());
        } else if ("UTF-16".equalsIgnoreCase(encoding)) {
            throw new PlcRuntimeException("Unsupported encoding");
        }
    } catch (SerializationException e){
        throw new PlcRuntimeException("Error serialize S7Char", e);
    }
}{code}
What am I missing in serializing the CHAR type?

 

> s7 could not write CHAR array
> -----------------------------
>
>                 Key: PLC4X-338
>                 URL: https://issues.apache.org/jira/browse/PLC4X-338
>             Project: Apache PLC4X
>          Issue Type: Bug
>          Components: Driver-S7
>    Affects Versions: 0.9.0
>         Environment: Ubuntu 18.04
>            Reporter: Julian Zhang
>            Priority: Blocker
>
> h2. Use case
> Writing CHAR array to S7 PLc via plc4x sink kafka connector was throwing an error, as is shown in the code snippet:
> {code:java}
> "sinks.CommonPlcSetup.fields.steelGradeCurrent": "%DB851:136:CHAR[12]" {code}
> h2. The error messages
> {code:java}
> [2022-03-01 03:22:16,673] INFO Configuring Bootstrap with Configuration{local-rack=1, local-slot=1, remote-rack=0, remot-slot=5, pduSize=1024, maxAmqCaller=8, maxAmqCallee=8, controllerType='null'} (org.apache.plc4x.java.transport.tcp.TcpChannelFactory)
> [2022-03-01 03:22:16,680] INFO S7 Driver running in ACTIVE mode. (org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic)
> [2022-03-01 03:22:16,772] ERROR No DataTransportErrorCode for value 7 (org.apache.plc4x.java.s7.readwrite.DataTransportErrorCode)
> [2022-03-01 03:22:18,340] ERROR No DataTransportErrorCode for value 7 (org.apache.plc4x.java.s7.readwrite.DataTransportErrorCode)
> [2022-03-01 03:22:18,363] ERROR No DataTransportErrorCode for value 7 (org.apache.plc4x.java.s7.readwrite.DataTransportErrorCode)
> [2022-03-01 03:22:18,363] ERROR No DataTransportErrorCode for value 7 (org.apache.plc4x.java.s7.readwrite.DataTransportErrorCode) {code}
> h2. Context
> This was working with version 0.9.0-SNAPSHOT, but my customized version could no longer be compiled on 0.9.0-SNAPSHOT, so I had to compile the the code against 0.10.0-SNAPSHOT
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)