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]>*
> >
>