Hi,

Thank you for the information Cesar and Chris. I will take a look at those 
examples too, and continue doing further tests. I will keep you inform about 
the progress I do.

Iñigo

----------------------------------------- 
Iñigo Angulo 

ZYLK.net :: consultoría.openSource 
Ribera de Axpe, 11 
Edificio A, modulo 201-203 
48950 Erandio (Bizkaia) 
+34 944272119 
-----------------------------------------

----- Mensaje original -----
De: "Christofer Dutz" <christofer.d...@c-ware.de>
Para: "dev" <dev@plc4x.apache.org>
Enviados: Viernes, 3 de Julio 2020 17:41:56
Asunto: Re: S7 write test doubt

Hi all,

but there is one really big difference between 0.6.x and 0.7.x ... in the 0.6 
drivers when writing I explicitly split up write requests that for every filed 
a single value is sent.

But yes .. it would be interesting.

But the INTERNAL_ERROR for me implies that the problem is definitely on our 
side.

Chris


Am 03.07.20, 17:32 schrieb "Cesar Garcia" <cesar.gar...@ceos.com.ve>:

    Hi Iñigo,

    If you have the opportunity to test the previous version, it is currently
    under evaluation by the team (0.6.1 PR).

    You can check the versión here

    https://github.com/glcj/plc4x/tree/s7alarm

    In addition to the examples placed in the official repository, here you
    will find a number of examples with native S7 types.

    https://github.com/glcj/PLC4XS7Examples

    I will be attentive to any request since it is in my interest that this
    version is very well debugged.

    I hope it is useful for you


    El vie., 3 jul. 2020 a las 3:24, Iñigo Angulo (<iang...@zylk.net>) escribió:

    > Hi Chris,
    >
    > Yes, I was thinking about why those dataypes were returning a List, thanks
    > for the explanation
    >
    > I tried the SINT access. For reading values works perfectly. But when
    > writing, Im afraid I am getting the same INTERNAL_ERROR message as for INT
    > and DINT. I will make further tests, and let you know of the progress i
    > make.
    >
    > Thanks!
    >
    > Iñigo
    >
    > -----------------------------------------
    > Iñigo Angulo
    >
    > ZYLK.net :: consultoría.openSource
    > Ribera de Axpe, 11
    > Edificio A, modulo 201-203
    > 48950 Erandio (Bizkaia)
    > +34 944272119
    > -----------------------------------------
    >
    > ----- Mensaje original -----
    > De: "Christofer Dutz" <christofer.d...@c-ware.de>
    > Para: "dev" <dev@plc4x.apache.org>
    > Enviados: Jueves, 2 de Julio 2020 16:42:16
    > Asunto: Re: S7 write test doubt
    >
    > Hi Iñigo,
    >
    > happy you made quite some progress.
    >
    > If you were asking yourself why for BYTE, WORD and DWORD the driver is
    > returning a List ... these are considered Bit-Strings. If you want to
    > read/write a single byte as an integer value, please use SINT instead.
    >
    > So regarding one of your questions ... could you instead of doing:
    >         builderWriter.addItem("mivariable", "%DB20:DBB06:BYTE", 127);
    > Please try:
    >         builderWriter.addItem("mivariable", "%DB20:DBB06:SINT", 127);
    >
    > And if you're getting an INTERNAL_ERROR that's probably our fault. As I
    > mentioned, we haven't done too much writing as no one ever uses that ;-)
    >
    > Chris
    >
    >
    >
    >
    > Am 02.07.20, 15:56 schrieb "Iñigo Angulo" <iang...@zylk.net>:
    >
    >     Hi,
    >
    >     I have been doing further tests with the S7 driver. I would like to
    > ask you some doubts, which i am not sure if relate to the PLC4X driver or
    > the actual hardware (Siemens S7-300) i am using (pretty novice in PLC data
    > access im afraid...)
    >
    >
    >     The "Read value" tests I have done work correctly for different
    > datatypes, for example:
    >
    >         builderReader.addItem("mivariable", "%DB20:DBX5.0:BOOL"); //Single
    > boolean value
    >         builderReader.addItem("mivariable", "%DB20:DBB06:BYTE"); //returns
    > a PlcList (Array of 8 boolean values)
    >         builderReader.addItem("mivariable", "%DB20:DBW06:WORD"); //returns
    > a PlcList (Array of 16 boolean values)
    >         builderReader.addItem("mivariable", "%DB20:DBD06:DWORD");
    > //returns a PlcList (Array of 32 boolean values)
    >         builderReader.addItem("mivariable", "%DB20:DBW06:INT"); //returns
    > a PlcInteger (16 bit integer (signed))
    >         builderReader.addItem("mivariable", "%DB20:DBD06:DINT"); //returns
    > a PlcInteger (32 bit integer (signed))
    >         builderReader.addItem("mivariable", "%DB20:DBD06:REAL"); //returns
    > a PlcFloat (32 bit IEEE 754 full precision floating point value (signed))
    >
    >
    >     In the "Write value" tests, write request for all datatype seem to
    > work fine:
    >
    >         builderWriter.addItem("mivariable", "%DB20:DBX6.1:BOOL", true);
    > //write response code "OK"
    >         builderWriter.addItem("mivariable", "%DB20:DBB06:BYTE", 127);
    > //write response code "OK"
    >         builderWriter.addItem("mivariable", "%DB20:DBW06:WORD", 7);
    > //write response code "OK"
    >         builderWriter.addItem("mivariable", "%DB20:DBD06:DWORD", 1);
    > //write response code "OK"
    >
    >
    >     Except for the 'INT' and 'DINT' datatypes, which return an
    > INTERNAL_ERROR response code
    >
    >         builderWriter.addItem("mivariable", "%DB20:DBW06:INT", 1); //write
    > response code "INTERNAL_ERROR"
    >         builderWriter.addItem("mivariable", "%DB20:DBD06:DINT", 1);
    > //write response code "INTERNAL_ERROR"
    >
    >
    >     Is the INTERNAL_ERROR code a hardware issue? (Maybe a device
    > configuration problem?)
    >
    >     ---
    >
    >     Also, the other thing I found in the test:
    >
    >     When I write a value different than BOOL, and then read the same
    > memory address, I dont get the actual value but a 'false' filled array. TO
    > give some examples,
    >
    >     with BOOL values:
    >
    >         builderWriter.addItem("mivariable", "%DB20:DBX6.1:BOOL", true);
    >         builderReader.addItem("mivariable", "%DB20:DBX6.1:BOOL"); //return
    > true
    >
    >         builderWriter.addItem("mivariable", "%DB20:DBX6.1:BOOL", false);
    >         builderReader.addItem("mivariable", "%DB20:DBX6.1:BOOL"); //return
    > false
    >
    >     The written value is "correctly updated" and read fine.
    >
    >     with other datatypes:
    >
    >         builderWriter.addItem("mivariable", "%DB20:DBB06:BYTE", 1);
    >         builderReader.addItem("mivariable", "%DB20:DBB06:BYTE"); //returns
    > [false, false, false, false, false, false, false, false]
    >
    >         builderWriter.addItem("mivariable", "%DB20:DBB06:BYTE", 127);
    >         builderReader.addItem("mivariable", "%DB20:DBB06:BYTE"); //returns
    > [false, false, false, false, false, false, false, false]
    >
    >
    >     I have tried to combine write single bits and read other datatypes,
    > which seem to work fine:
    >
    >         builderWriter.addItem("mivariable", "%DB20:DBX6.1:BOOL", true);
    >             builderReader.addItem("mivariable", "%DB20:DBB06:BYTE");
    > //returns [false, false, false, false, false, false, true, false]
    >         builderReader.addItem("mivariable", "%DB20:DBW06:INT"); //return
    > 512
    >
    >     And the other way around, write a byte and read single bits
    >
    >         builderWriter.addItem("mivariable", "%DB20:DBB06:BYTE", 127);
    >         builderReader.addItem("mivariable-0", "%DB20:DBX6.0:BOOL");
    > //returns false
    >         builderReader.addItem("mivariable-1", "%DB20:DBX6.1:BOOL");
    > //returns false
    >         builderReader.addItem("mivariable-2", "%DB20:DBX6.2:BOOL");
    > //returns false
    >         builderReader.addItem("mivariable-3", "%DB20:DBX6.3:BOOL");
    > //returns false
    >         builderReader.addItem("mivariable-4", "%DB20:DBX6.4:BOOL");
    > //returns false
    >         builderReader.addItem("mivariable-5", "%DB20:DBX6.5:BOOL");
    > //returns false
    >         builderReader.addItem("mivariable-6", "%DB20:DBX6.6:BOOL");
    > //returns false
    >         builderReader.addItem("mivariable-7", "%DB20:DBX6.7:BOOL");
    > //returns false
    >
    >     Which leads me to think that could be a write issue, right?
    >
    >     Again I understand that these issues could be an actual hardware
    > configuration problem.. but any help or advice would be much appreciated
    >
    >     Thank you in advance!
    >
    >     iñigo
    >
    >     P.S. I attached the test classes if anyone wants to take a look.
    >
    >     -----------------------------------------
    >     Iñigo Angulo
    >
    >     ZYLK.net :: consultoría.openSource
    >     Ribera de Axpe, 11
    >     Edificio A, modulo 201-203
    >     48950 Erandio (Bizkaia)
    >     +34 944272119
    >     -----------------------------------------
    >
    >     ----- Mensaje original -----
    >     De: "Iñigo Angulo Otegui" <iang...@zylk.net>
    >     Para: "dev" <dev@plc4x.apache.org>
    >     Enviados: Jueves, 2 de Julio 2020 12:45:49
    >     Asunto: Re: S7 write test doubt
    >
    >     Hi Julian,
    >
    >     Yes, we saw the adopters page and were thinking to contribute there.
    > We will prepare a short text describing the work we are doing with the
    > project and send it to you soon.
    >
    >     Thanks
    >     iñigo
    >
    >     -----------------------------------------
    >     Iñigo Angulo
    >
    >     ZYLK.net :: consultoría.openSource
    >     Ribera de Axpe, 11
    >     Edificio A, modulo 201-203
    >     48950 Erandio (Bizkaia)
    >     +34 944272119
    >     -----------------------------------------
    >
    >     ----- Mensaje original -----
    >     De: "Julian Feinauer" <j.feina...@pragmaticminds.de>
    >     Para: "dev" <dev@plc4x.apache.org>
    >     Enviados: Jueves, 2 de Julio 2020 12:00:53
    >     Asunto: Re: S7 write test doubt
    >
    >     And, as i shortly checked your company profile which looks pretty
    > cool... if you like it, or use it, dont forget to enter your company on 
the
    > adopters page : )
    >
    >     https://plc4x.apache.org/users/adopters.html
    >
    >     Julian
    >
    >     Am 02.07.20, 10:31 schrieb "Iñigo Angulo" <iang...@zylk.net>:
    >
    >         Hi Chris,
    >
    >         Yes, using the 0.8.0-SNAPSHOT with the update you did the problem
    > is solved now.
    >
    >         Thank you for the help and the fast solution!
    >
    >         Iñigo
    >
    >         -----------------------------------------
    >         Iñigo Angulo
    >
    >         ZYLK.net :: consultoría.openSource
    >         Ribera de Axpe, 11
    >         Edificio A, modulo 201-203
    >         48950 Erandio (Bizkaia)
    >         +34 944272119
    >         -----------------------------------------
    >
    >         ----- Mensaje original -----
    >         De: "Christofer Dutz" <christofer.d...@c-ware.de>
    >         Para: "dev" <dev@plc4x.apache.org>
    >         Enviados: Miércoles, 1 de Julio 2020 13:18:34
    >         Asunto: Re: S7 write test doubt
    >
    >         Hi all,
    >
    >         build passed locall, pushed the changes, build on ci passed ....
    > so you should be ready to give things a new try.
    >
    >         However keep in mind, if you built with 0.8.0-SNAPSHOT once today,
    > please be sure to do a "mvn -U install" build or you won't get the update
    > today.
    >
    >         Would be cool if you could reply if this helped.
    >
    >         Chris
    >
    >
    >
    >         Am 01.07.20, 12:30 schrieb "Julian Feinauer" <
    > j.feina...@pragmaticminds.de>:
    >
    >             Thanks both of you!
    >             As I just wrote in Slack we can only grow and improve if we
    > get feedback, Bug reports and usage scenarios.
    >             And of course thanks Chris for that fast reply and fix <3
    >
    >             Julian
    >
    >             Am 01.07.20, 12:24 schrieb "Iñigo Angulo" <iang...@zylk.net>:
    >
    >                 Hi Chris,
    >
    >                 No problem. I will keep track of the issue in Jira, and
    > use the 0.8.0-SNAPSHOT version.
    >
    >                 Thank you for your help
    >
    >                 iñigo
    >
    >                 -----------------------------------------
    >                 Iñigo Angulo
    >
    >                 ZYLK.net :: consultoría.openSource
    >                 Ribera de Axpe, 11
    >                 Edificio A, modulo 201-203
    >                 48950 Erandio (Bizkaia)
    >                 +34 944272119
    >                 -----------------------------------------
    >
    >                 ----- Mensaje original -----
    >                 De: "Christofer Dutz" <christofer.d...@c-ware.de>
    >                 Para: "dev" <dev@plc4x.apache.org>
    >                 Enviados: Miércoles, 1 de Julio 2020 12:06:28
    >                 Asunto: Re: S7 write test doubt
    >
    >                 Hi Iñigo,
    >
    >                 I will have to ask you to wait for a little while as you
    > stumbled over a problem which goes a little deeper and is related to a
    > major refactoring we did just before Christmas. I am pretty puzzled that 
no
    > one ever noticed this, but I'll immediately start working on fixing this.
    >
    >                 I'm tracking progress here:
    >                 https://issues.apache.org/jira/browse/PLC4X-206
    >
    >
    >                 If that's done I would like to ask you to use the
    > 0.8.0-SNAPSHOT till we've released the next version of PLC4X.
    >
    >                 Chris
    >
    >
    >                 Am 01.07.20, 12:00 schrieb "Iñigo Angulo" <
    > iang...@zylk.net>:
    >
    >                     Hi Chris,
    >
    >                     Thanks for the fast answer!
    >
    >                     I will keep your advice about not adding the cast to
    > the values, and letting the driver do its work.
    >
    >                     If you want me to try to reproduce any other test just
    > let me know.
    >
    >                     Iñigo
    >
    >
    >                     -----------------------------------------
    >                     Iñigo Angulo
    >
    >                     ZYLK.net :: consultoría.openSource
    >                     Ribera de Axpe, 11
    >                     Edificio A, modulo 201-203
    >                     48950 Erandio (Bizkaia)
    >                     +34 944272119
    >                     -----------------------------------------
    >
    >                     ----- Mensaje original -----
    >                     De: "Christofer Dutz" <christofer.d...@c-ware.de>
    >                     Para: "dev" <dev@plc4x.apache.org>
    >                     Enviados: Miércoles, 1 de Julio 2020 11:48:48
    >                     Asunto: Re: S7 write test doubt
    >
    >                     And let me give you a little more context ... with the
    > INT type in S7 you happen to know that there an INT is a 16 Bit signed
    > integer.
    >
    >                     We wanted to abstract from that. Cause another PLC
    > could define INT as 32 bit integer ... So you can generally just work with
    > any numeric type and pass that in. The driver will inspect the value 
ranges
    > for that particular protocol and give some sensible error messages (At
    > least it should ;-) ).
    >
    >                     But ... I just noticed that indeed I am seeing the
    > same problems you are seeing and that my suggestion just causes a 
different
    > error ... I'll get working on fixing this right away.
    >
    >                     I'm really a bit confused about this ... but it does
    > prove that most people just care about reading ;-)
    >
    >                     Will keep you and the others posted on any progress.
    >
    >                     Chris
    >
    >
    >
    >                     Am 01.07.20, 11:33 schrieb "Christofer Dutz" <
    > christofer.d...@c-ware.de>:
    >
    >                         Hi Iñigo,
    >
    >                         welcome to the party ... I really hope we'll be
    > able to get you started asap ...
    >
    >                         I just had a look at the code and PlcInteger does
    > have the constructor ...
    >
    >                             public PlcInteger(Short value) {
    >                                 super(value.intValue(), true);
    >                             }
    >
    >                         So I'll try to reproduce the problem ... but for
    > now ... could you just remove the cast from your items?
    >
    >                             builderWriter.addItem("mivariable-1",
    > "%DB20:DBX6.7:BOOL", true);
    >                             builderWriter.addItem("mivariable-4",
    > "%DB20:DBW06.0:INT", 2);
    >                             builderWriter.addItem("mivariable-2",
    > "%DB20:DBB06:BYTE", 0);
    >
    >                         Cause PLC4X internally already ensures everything
    > fits into the bounds and internally PLC4X handles the "(short) 2" as an
    > "(int) 2" anyway ;-)
    >
    >
    >                         Chris
    >
    >
    >
    >
    >                         Am 01.07.20, 11:19 schrieb "Iñigo Angulo" <
    > iang...@zylk.net>:
    >
    >                             Hi,
    >
    >                             I started doing some basic tests with the S7
    > protocol using a Siemens S7-300, and the latest 0.7.0 release. The tests
    > consist of reading and writing several DB variables. I was able to read
    > different datatypes, for instance:
    >
    >                             builder.addItem("mivariable-1",
    > "%DB20:DBX05.0:BOOL");
    >                             builder.addItem("mivariable-4",
    > "%DB20:DBW06:INT");
    >
    >                             However, when I try to write the same memory
    > addresses I only manage to write BOOL values, for example
    >
    >                             builderWriter.addItem("mivariable-1",
    > "%DB20:DBX6.7:BOOL", true); //WORKS OK
    >                             builderWriter.addItem("mivariable-4",
    > "%DB20:DBW06.0:INT", (short)2); // FAILS
    >                             builderWriter.addItem("mivariable-2",
    > "%DB20:DBB06:BYTE", (byte)0); // FAILS
    >
    >                             I am unable to write any datatype different
    > than BOOL.
    >
    >                             I am facing the following Error message:
    >
    >                             Exception in thread "main"
    > org.apache.plc4x.java.api.exceptions.PlcRuntimeException: Error
    > initializing field class PlcInteger
    >                             at
    > 
org.apache.plc4x.java.s7.readwrite.field.S7PlcFieldHandler.internalEncodeInteger(S7PlcFieldHandler.java:394)
    >
    >                             at
    > 
org.apache.plc4x.java.s7.readwrite.field.S7PlcFieldHandler.encodeShort(S7PlcFieldHandler.java:86)
    >
    >                             at
    > 
org.apache.plc4x.java.spi.messages.DefaultPlcWriteRequest$Builder.lambda$build$0(DefaultPlcWriteRequest.java:270)
    >
    >                             at
    > java.base/java.util.TreeMap.forEach(TreeMap.java:1002)
    >                             at
    > 
org.apache.plc4x.java.spi.messages.DefaultPlcWriteRequest$Builder.build(DefaultPlcWriteRequest.java:265)
    >
    >                             at
    > net.zylk.plc4x.test.protocols.WriteS7.main(WriteS7.java:102)
    >                             Caused by: java.lang.NoSuchMethodException:
    > org.apache.plc4x.java.api.value.PlcInteger.<init>([Ljava.lang.Short;)
    >                             at
    > java.base/java.lang.Class.getConstructor0(Class.java:3349)
    >                             at
    > java.base/java.lang.Class.getDeclaredConstructor(Class.java:2553)
    >                             at
    > 
org.apache.plc4x.java.s7.readwrite.field.S7PlcFieldHandler.internalEncodeInteger(S7PlcFieldHandler.java:392)
    >
    >                             ... 5 more
    >
    >                             Maybe I am misunderstanding the sintax and how
    > the values should be written?
    >
    >                             ---
    >                             To try to offer some more information about
    > this error:
    >                             Digging into that class (S7PlcFieldHandler) I
    > saw that there are some fields that are initialized based on the value of
    > the datatype
    >
    >                             case INT:
    >                             minValue =
    > BigInteger.valueOf(Short.MIN_VALUE);
    >                             maxValue =
    > BigInteger.valueOf(Short.MAX_VALUE);
    >                             fieldType = PlcInteger.class;
    >                             valueType = Short[].class;
    >                             castedValues = new Short[values.length];
    >                             break;
    >
    >                             Then, the line that throws the Exception seems
    > to be trying to inferr a PlcInteger class constructor based on the 
datatype
    >
    >                             // Create the field item.
    >                             try {
    >                             return
    > fieldType.getDeclaredConstructor(valueType).newInstance(castedValues);
    >                             } catch (InstantiationException |
    > IllegalAccessException | InvocationTargetException | NoSuchMethodException
    > e) {
    >                             throw new PlcRuntimeException("Error
    > initializing field class " + fieldType.getSimpleName(), e);
    >                             }
    >
    >                             However there appears to be a "mismatch"
    > between the valueType (Short[]) and the constructor (Short) in the
    > PlcInteger class, which leads me to think i am missing something on the
    > write value sintax?
    >
    >                             Thank you in advance, any help will be
    > welcome.
    >
    >                             Iñigo
    >
    >
    >
    >                             -----
    >                             the test class code:
    >
    >                             public class WriteS7 {
    >                             private static final Logger _log =
    > LoggerFactory.getLogger(WriteS7.class);
    >
    >                             public static void main(String[] args) throws
    > PlcConnectionException {
    >
    >                             String connectionString = "s7://
    > 10.105.143.1:102?remote-rack=0&remote-slot=0&controller-type=S7_300";
    >
    >                             _log.info(String.format("Establishing
    > connection to %s", connectionString));;
    >
    >                             try (PlcConnection plcConnection = new
    > PlcDriverManager().getConnection(connectionString)) {
    >                             _log.info("Conecting... " +
    > connectionString);
    >                             if (!plcConnection.getMetadata().canWrite()) {
    >                             _log.error(String.format("Connection %s
    > doesn't support writing.", connectionString));
    >                             return;
    >                             }
    >
    >                             PlcWriteRequest.Builder builderWriter = null;
    >                             builderWriter =
    > plcConnection.writeRequestBuilder();
    >
    >                             // builderWriter.addItem("mivariable-26",
    > "%DB20:DBX6.7:BOOL", false); //OK
    >                             builderWriter.addItem("mivariable-2",
    > "%DB20:DBB06:BYTE", (byte)0); //FAILS
    >                             // builderWriter.addItem("mivariable-4",
    > "%DB20:DBW06.0:INT", (short)2); //FAILS
    >
    >
    >                             PlcWriteRequest writeRequest =
    > builderWriter.build();
    >                             PlcWriteResponse writeResponse =
    > writeRequest.execute().get();
    >
    >
    > GeneralFunctions.printPlc4XWriteReponse(writeResponse); //print response
    >                             }
    >
    >                             }
    >                             }
    >
    >
    >                             -----------------------------------------
    >                             Iñigo Angulo
    >
    >                             ZYLK.net :: consultoría.openSource
    >                             Ribera de Axpe, 11
    >                             Edificio A, modulo 201-203
    >                             48950 Erandio (Bizkaia)
    >                             +34 944272119
    >                             -----------------------------------------
    >


    -- 
    *CEOS Automatización, C.A.*
    *GALPON SERVICIO INDUSTRIALES Y NAVALES FA, C.A.,*
    *PISO 1, OFICINA 2, AV. RAUL LEONI, SECTOR GUAMACHITO,*

    *FRENTE A LA ASOCIACION DE GANADEROS,BARCELONA,EDO. ANZOATEGUI*
    *Ing. César García*

    *Cel: +58 414-760.98.95*

    *Hotline Técnica SIEMENS: 0800 1005080*

    *Email: support.aan.automat...@siemens.com
    <support.aan.automat...@siemens.com>*

Reply via email to