Hi all,
sorry for double-posting, but I found the fix. For me the code does not look 
that 'sexy' now but it works. I do not know if I can make it better but for now 
I will stick to this :) I pushed it to the 'eip' branch of my fork.
Have a nice weekend,

Etienne
On 2020/03/13 14:48:35, Etienne Robinet <[email protected]> wrote: 
> Hi,
> Thanks for the advice. I am trying to pass the length down the subclasses, 
> but I'm stuck. This does not work as it seems:
> https://i.imgur.com/77bbdBN.png CipRRData does not know what 'len' is nor its 
> value as it seems.
> 
> I wanted to inspire mysefl from the CotpPayload, but unfortunately, the first 
> byte of the whole packet is a discriminator (command).
> 
> Etienne
> On 2020/03/13 13:52:16, Christofer Dutz <[email protected]> wrote: 
> > Hi Etienne,
> > 
> > I think you can solve your problem in two ways. 
> > In all you need to pass down the length of the packet in total from the 
> > root type (which knows the length).
> > 1) You keep on just reading bytes and parse in the protocol logic class 
> > (Like in the S7 driver or KNX)
> > 2) You directly parse PlcValues (using "dataIo" types) 
> > 
> > I would prefer option 2 but 1 is simpler. The reason I'm doing 1) in S7 and 
> > KNX is that I need to know the type from the request to decode in the S7 
> > case and in the KNX case I need to know the type from an external source in 
> > order to decode it.
> > 
> > 
> > Chris
> > 
> > Am 13.03.20, 14:45 schrieb "Etienne Robinet" <[email protected]>:
> > 
> >     Yes this is exactly what I need. If I get the remaining bytes, I can 
> > know the element numbers as I have their type!
> >     
> >     Etienne
> >     
> >     On 2020/03/13 13:40:09, Julian Feinauer <[email protected]> 
> > wrote: 
> >     > Hey,
> >     > 
> >     > there ist he possibility to get the remaining size oft he bytes of 
> > the message. Does that help?
> >     > Otherwise I misread your question.
> >     > 
> >     > Julian
> >     > 
> >     > Am 13.03.20, 14:37 schrieb "Etienne Robinet" <[email protected]>:
> >     > 
> >     >     Hi Julian,
> >     >     so how should I declare this field in the mspec if I can not get 
> > its size?
> >     >     Thank you,
> >     >     
> >     >     Etienne
> >     >     
> >     >     On 2020/03/13 13:35:52, Julian Feinauer 
> > <[email protected]> wrote: 
> >     >     > Hi Etienne,
> >     >     > 
> >     >     > first, Congratulations on your Progress!
> >     >     > To you question:
> >     >     > This is a common issue with many protocols.
> >     >     > We solve that in the protocol layer by keeping the request 
> > until we get the response (see for Example how we did it for S7).
> >     >     > So you cannot solve that in mpsec at compile time but have to 
> > decode the byte[] you get with the Information from the Request.
> >     >     > 
> >     >     > Hope that helps!
> >     >     > Julian
> >     >     > 
> >     >     > Am 13.03.20, 14:02 schrieb "Etienne Robinet" 
> > <[email protected]>:
> >     >     > 
> >     >     >     Hi Chris,
> >     >     >     I have yet another question. When sending a request for 
> > multiple elements (let's say 10 elements of an array), you get a response 
> > from the PLC with all the data at the end of the packet. The problem is, in 
> > the request there is the number of elements we want, but not in the 
> > response. So so the protocol knows how many elements there are in the 
> > response packet, but not the packet itself. This is quite a problem as for 
> > the parse, we need to know the length of the 'data' array containing the 
> > response data (for now it was only depending on the type, but I would need 
> > type*elements).
> >     >     >     
> >     >     >     I tested a bit by modifying the generated IO, and 1 way to 
> > do it is to get the remaining bytes and divide this by the datatype size. I 
> > just wanted to ask if someone would know how to declare this in the mspec, 
> > as I don't want to touch at the template. I also thought about having an 
> > attribute on the response, but I don't know how to put an attribute that 
> > won't get parsed/serialized. Hope I am clear enough, but this is  a code 
> > sample that worked (modifying generated sources):
> >     >     >     https://i.imgur.com/Xm6DxEZ.png (notice the error but this 
> > code works if I write it myself)
> >     >     >     And here is how I put it in the mspec: 
> > https://i.imgur.com/Ye1Kl9q.png (you can see the number of element is not 
> > present)
> >     >     >     
> >     >     >     Any help is welcome of course! :)
> >     >     >     Etienne
> >     >     >     
> >     >     >     
> >     >     >     
> >     >     >     
> >     >     >     
> >     >     >     On 2020/03/12 21:34:12, Christofer Dutz 
> > <[email protected]> wrote: 
> >     >     >     > Hi Etienne,
> >     >     >     > 
> >     >     >     > that's amazing news :-) ... congratulations :-)
> >     >     >     > 
> >     >     >     > Also had a look at your mspec and I think you have done a 
> > great job with that. I wasn't quite sure about the relation between 
> > CipRRData and CipExchange, but your solution looks rock-solid.
> >     >     >     > 
> >     >     >     > And now reading that you even managed to get something 
> > working, that makes me very happy.
> >     >     >     > 
> >     >     >     > Tomorrow I'll be a little consumed with signing the 
> > contract with the KNX foundation but I'll try to have a look at your fork.
> >     >     >     > 
> >     >     >     > Thanks for your great work :)
> >     >     >     > 
> >     >     >     > Chris
> >     >     >     > 
> >     >     >     > 
> >     >     >     > 
> >     >     >     > Am 12.03.20, 17:50 schrieb "Etienne Robinet" 
> > <[email protected]>:
> >     >     >     > 
> >     >     >     >     Hi all,
> >     >     >     >     again a productive day, I pushed to my branch and the 
> > driver support reading, multiple reading and the camel component works (in 
> > karaf) and takes a List of strings. Tested it on a different PLC and it 
> > also worked! Next I'm going to implement the array readings and then maybe 
> > writing (tests needs to be done too).
> >     >     >     >     
> >     >     >     >     Etienne
> >     >     >     >     
> >     >     >     >     On 2020/03/12 07:18:32, Etienne Robinet 
> > <[email protected]> wrote: 
> >     >     >     >     > Hi Chris,
> >     >     >     >     > yes that's what I thought so I managed to work 
> > around like this: 
> >     >     >     >     > 
> >     >     >     >     > 
> > https://github.com/etiennerobinet/plc4x/blob/eip/protocols/eip/src/main/resources/protocols/eip/eip.mspec
> >     >     >     >     > 
> >     >     >     >     > And this works for reading! I managed to make a 
> > quick test and read via the tag name. Now my question is: can I create 
> > sub-types that are also discriminated with sub-subtypes? That would allow 
> > to create the ReadRequest only, as the fields before are mainly 
> > constant/implicit.
> >     >     >     >     > Etienne
> >     >     >     >     > 
> >     >     >     >     > On 2020/03/11 20:24:14, Christofer Dutz 
> > <[email protected]> wrote: 
> >     >     >     >     > > Hi Etienne,
> >     >     >     >     > > 
> >     >     >     >     > > you are defining the type CipRRData twice ... 
> > once as one of the sub-types of EipPacket and once as a dedicated 
> > discriminated type.
> >     >     >     >     > > 
> >     >     >     >     > > Chris
> >     >     >     >     > > 
> >     >     >     >     > > 
> >     >     >     >     > > PS: I have no idea why I didn't finish writing 
> > this email and I just noticed when closing everything down ... sorry for 
> > the late reply.
> >     >     >     >     > > 
> >     >     >     >     > > 
> >     >     >     >     > > 
> >     >     >     >     > > Am 11.03.20, 09:30 schrieb "Etienne Robinet" 
> > <[email protected]>:
> >     >     >     >     > > 
> >     >     >     >     > >     Hi all,
> >     >     >     >     > >     
> >     >     >     >     > >     I have a quick question. I've been working on 
> > the CIP encapsulation but hitting a problem with the mspec design. Here is 
> > the error I am facing: https://i.imgur.com/iCfh59n.png
> >     >     >     >     > >     
> >     >     >     >     > >     The problem here is that this CipRRData 
> > should also be of type EipPacket. When the command of an EipPacket is 
> > '0x66' this means SendRRData (for Read/Write and Request/Response so I have 
> > to discriminate it on the sub level). The problem is that after generation, 
> > CipRRData implements Message but does not extend EipPacket. How should I do 
> > it? Here is the mspec:
> >     >     >     >     > >     
> >     >     >     >     > >     [discriminatedType 'EipPacket'
> >     >     >     >     > >         [discriminator uint 16 'command']
> >     >     >     >     > >         [implicit      uint 16 'len' 
> > 'lengthInBytes - 24']
> >     >     >     >     > >         [simple        uint 32 'sessionHandle']
> >     >     >     >     > >         [simple        uint 32 'status']
> >     >     >     >     > >         [array         uint 8  'senderContext' 
> > count '8']
> >     >     >     >     > >         [simple        uint 32 'options']
> >     >     >     >     > >         [typeSwitch 'command'
> >     >     >     >     > >                 ['0x0065' EipConnectionRequest
> >     >     >     >     > >                     [const  uint    16   
> > 'protocolVersion'   '0x01']
> >     >     >     >     > >                     [const  uint    16   'flags'  
> >            '0x00']
> >     >     >     >     > >                 ]
> >     >     >     >     > >                 ['0x0066' EipDisconnectRequest
> >     >     >     >     > >                 ]
> >     >     >     >     > >                 ['0x006F' CipRRData
> >     >     >     >     > >                     [const  uint    32  
> > 'EipInterface' '0x00000000']
> >     >     >     >     > >                     [const  uint    8   'timeout' 
> >   '0x0000']
> >     >     >     >     > >                 ]
> >     >     >     >     > >             ]
> >     >     >     >     > >     ]
> >     >     >     >     > >     [discriminatedType 'CipRRData'
> >     >     >     >     > >         [simple         uint        8       
> > 'itemNb']
> >     >     >     >     > >         [array          CipItem     'items'    
> > length  'itemNb']
> >     >     >     >     > >         [discriminator  uint        8       
> > 'CipService']
> >     >     >     >     > >         [typeSwitch 'CipService'
> >     >     >     >     > >             ['0x52' CipUnconnectedRequest
> >     >     >     >     > >                 [simple CommandData    'data']
> >     >     >     >     > >             ]
> >     >     >     >     > >             ['0xCC' CipReadResponse
> >     >     >     >     > >                 [reserved   uint            8   
> > '0x0000']
> >     >     >     >     > >                 [simple     uint            8   
> > 'status']
> >     >     >     >     > >                 [simple     uint            8   
> > 'extStatus']
> >     >     >     >     > >                 [simple     uint            8    
> > 'dataType']
> >     >     >     >     > >                 [array      uint            8   
> > 'data'  length  'dataType']
> >     >     >     >     > >     
> >     >     >     >     > >             ]
> >     >     >     >     > >         ]
> >     >     >     >     > >     ]
> >     >     >     >     > >     
> >     >     >     >     > >     [type 'CipItem'
> >     >     >     >     > >         [simple uint    16  'typeID']
> >     >     >     >     > >         [simple uint    16  'size']
> >     >     >     >     > >     ]
> >     >     >     >     > >     
> >     >     >     >     > >     [discriminatedType 'CommandData'
> >     >     >     >     > >         [reserved         uint    8   '0x02']
> >     >     >     >     > >         [reserved         uint    8   '0x20']   
> > // setRequestPathLogicalClassSegment
> >     >     >     >     > >         [reserved         uint    8   '0x06']   
> > // set request class path
> >     >     >     >     > >         [reserved         uint    8   '0x24']   
> > // setRequestPathLogicalInstanceSegment
> >     >     >     >     > >         [reserved         uint    8   '0x01']   
> > // setRequestPathInstance
> >     >     >     >     > >         [discriminator  uint    8   'CipService']
> >     >     >     >     > >         [typeSwitch 'CipService'
> >     >     >     >     > >             ['0x4C' CipReadRequest
> >     >     >     >     > >                 [simple     uint    8   
> > 'RequestPathSize']
> >     >     >     >     > >                 [reserved   uint    8   '0x91']
> >     >     >     >     > >                 [array      uint    8   'tag'   
> > length  '(RequestPathSize*2) - 1']
> >     >     >     >     > >                 [reserved   uint    16  '0x0001'] 
> >  //itemCount set to 1 for now
> >     >     >     >     > >             ]
> >     >     >     >     > >         ]
> >     >     >     >     > >     
> >     >     >     >     > >     ]
> >     >     >     >     > >     
> >     >     >     >     > >     
> >     >     >     >     > >     [enum int   16   'CIPDataTypeCode' [uint 8  
> > 'size']
> >     >     >     >     > >         ['0X00C1'   BOOL            ['1']]
> >     >     >     >     > >         ['0X00CA'   REAL            ['4']]
> >     >     >     >     > >         ['0X00C4'   DINT            ['4']]
> >     >     >     >     > >         ['0X00C3'   INT             ['2']]
> >     >     >     >     > >         ['0X00C2'   SINT            ['1']]
> >     >     >     >     > >         ['0X02A0'   STRUCTURED      ['88']]
> >     >     >     >     > >         ['0X02A0'   STRING          ['88']]
> >     >     >     >     > >         ['0X02A0'   STRING36        ['40']]
> >     >     >     >     > >         ['-1'       UNKNOWN         ['-1']]
> >     >     >     >     > >     ]
> >     >     >     >     > >     
> >     >     >     >     > >     
> >     >     >     >     > >     Thanks for any help!
> >     >     >     >     > >     
> >     >     >     >     > >     Etienne 
> >     >     >     >     > >     On 2020/03/10 15:18:47, Etienne Robinet 
> > <[email protected]> wrote: 
> >     >     >     >     > >     > Hi all,
> >     >     >     >     > >     > I've managed to implement the EIP Session 
> > Register/Unregister (used for connected message which is best for high 
> > frequency fetching). I will push it to my branch and create a document 
> > explaining my steps.
> >     >     >     >     > >     > Next I want to do was to to the CIP 
> > encapsulation part for accessing tag by their name. The thing is, CIP is 
> > (from what I heard) proper to Allen Bradley. Should I leave it in the EIP 
> > driver or modify and adapt the current AB driver later on? For now I will 
> > continue on eip.
> >     >     >     >     > >     > 
> >     >     >     >     > >     > Etienne
> >     >     >     >     > >     > 
> >     >     >     >     > >     > On 2020/03/10 14:41:42, Cesar Garcia 
> > <[email protected]> wrote: 
> >     >     >     >     > >     > > Hi,
> >     >     >     >     > >     > > 
> >     >     >     >     > >     > > You can document the process step by 
> > step, you will surely find observation
> >     >     >     >     > >     > > points.
> >     >     >     >     > >     > > 
> >     >     >     >     > >     > > I am working with the handwritten S7 
> > driver, but in the future I would
> >     >     >     >     > >     > > support the team in migrate to mspec, so 
> > the experience you will gain with
> >     >     >     >     > >     > > the Etheret / IP is very important.
> >     >     >     >     > >     > > 
> >     >     >     >     > >     > > Best regards,
> >     >     >     >     > >     > > 
> >     >     >     >     > >     > > El mar., 10 mar. 2020 a las 9:17, 
> > Christofer Dutz (<
> >     >     >     >     > >     > > [email protected]>) escribió:
> >     >     >     >     > >     > > 
> >     >     >     >     > >     > > > Hi Etienne,
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > > I would strongly suggest you install 
> > the Antlr plugn for the IDE you use.
> >     >     >     >     > >     > > > The problem is that ANTLR seems to 
> > gobble up a lot of errors and tries to
> >     >     >     >     > >     > > > be smart in a lot of cases.
> >     >     >     >     > >     > > > Whenever I have problems like this I 
> > use the ANTLR visual parser to parse
> >     >     >     >     > >     > > > a block of mspec (one type at a time) 
> > and try to narrow down the cause.
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > > Chris
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > > Am 10.03.20, 13:31 schrieb "Etienne 
> > Robinet" <[email protected]>:
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > >     Hi all,
> >     >     >     >     > >     > > >     I've been struggling with 
> > implementing the EIP driver. I started
> >     >     >     >     > >     > > > writing the mspec after creating both a 
> > module for the protocol and the one
> >     >     >     >     > >     > > > from the driver. I copied and adapted 
> > the pom(s) from the AB-ETH but only
> >     >     >     >     > >     > > > the enum is generated.
> >     >     >     >     > >     > > >     Here is a link to the forked branch:
> >     >     >     >     > >     > > > 
> > https://github.com/etiennerobinet/plc4x/tree/eip
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > >     I've been studying the EIP/CIP 
> > protocol and now I am confident what
> >     >     >     >     > >     > > > the packages should contain but I can 
> > not figure out how to generate this
> >     >     >     >     > >     > > > with the templates. Am I missing 
> > something?
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > >     Etienne
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > >
> >     >     >     >     > >     > > 
> >     >     >     >     > >     > > -- 
> >     >     >     >     > >     > > *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: 0416-681.03.99*
> >     >     >     >     > >     > > 
> >     >     >     >     > >     > > *Cel: 0414-760.98.95*
> >     >     >     >     > >     > > 
> >     >     >     >     > >     > > *Hotline Técnica SIEMENS: 0800 1005080*
> >     >     >     >     > >     > > 
> >     >     >     >     > >     > > *Email: [email protected]
> >     >     >     >     > >     > > <[email protected]>*
> >     >     >     >     > >     > > 
> >     >     >     >     > >     > 
> >     >     >     >     > >     
> >     >     >     >     > > 
> >     >     >     >     > > 
> >     >     >     >     > 
> >     >     >     >     
> >     >     >     > 
> >     >     >     > 
> >     >     >     
> >     >     > 
> >     >     > 
> >     >     
> >     > 
> >     > 
> >     
> > 
> > 
> 

Reply via email to