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 <43...@etu.he2b.be> 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 <cesar.gar...@ceos.com.ve> 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 (<
> > christofer.d...@c-ware.de>) 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" <43...@etu.he2b.be>:
> > >
> > >     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: support.aan.automat...@siemens.com
> > <support.aan.automat...@siemens.com>*
> > 
> 

Reply via email to