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