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)