You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@plc4x.apache.org by Cesar Garcia <ce...@ceos.com.ve> on 2020/06/13 20:50:03 UTC

Inquiry about the mspec

Hi,

I am trying to perform the migration to add the functionalities for the S7
driver, associated with the subscription handling of alarm and system
events, but I am generating a failure in compiling the driver from the
mspec.

In [1] I extend the step of the parameter 'cpuSubFunction' since I require
it to indicate the subscription model. The change is in bold.

In [2] I select the type based on the 'cpuSubFunction'.

I try to generate the driver and the compiler sends me the message
indicated in [3]. It points to 'S7PayloadWriteVarRequest', but I haven't
touched it.

I appreciate your comments,



[1]

[discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter
'parameter']
    [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
        ['0x04','0x03' S7PayloadReadVarResponse
            [array S7VarPayloadDataItem 'items' count 'CAST(parameter,
S7ParameterReadVarResponse).numItems' ['lastItem']]
        ]
        ['0x05','0x01' S7PayloadWriteVarRequest
            [array S7VarPayloadDataItem 'items' count
'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)' ['lastItem']]
        ]
        ['0x05','0x03' S7PayloadWriteVarResponse
            [array S7VarPayloadStatusItem 'items' count 'CAST(parameter,
S7ParameterWriteVarResponse).numItems']
        ]
        ['0x00','0x07' S7PayloadUserData
            [array S7PayloadUserDataItem 'items' count
'COUNT(CAST(parameter, S7ParameterUserData).items)' ['CAST(CAST(parameter,
S7ParameterUserData).items[0],
S7ParameterUserDataItemCPUFunctions).cpuFunctionType',*
'CAST(CAST(parameter, S7ParameterUserData).items[0],
S7ParameterUserDataItemCPUFunctions).getCpuSubfunction']*]
        ]
    ]
]

[2]

[discriminatedType 'S7PayloadUserDataItem' [uint 4 'cpuFunctionType', uint
8 'cpuSubfunction']
    [enum     DataTransportErrorCode 'returnCode']
    [enum     DataTransportSize      'transportSize']
    [implicit uint 16                'dataLength' 'lengthInBytes - 4']
















*  [typeSwitch 'cpuSubfunction'        ['0x01'            [simple   SzlId
               'szlId']            [simple   uint 16
 'szlIndex']            [typeSwitch 'cpuFunctionType'
['0x04' S7PayloadUserDataItemCpuFunctionReadSzlRequest                ]
            ['0x08' S7PayloadUserDataItemCpuFunctionReadSzlResponse
            [const    uint 16 'szlItemLength' '28']
[implicit uint 16 'szlItemCount'  'COUNT(items)']                    [array
SzlDataTreeItem 'items' count 'szlItemCount']                ]
]        ]        ['0x02'        ]    ]*
]

[3]
Failed to execute goal
org.apache.plc4x.plugins:plc4x-maven-plugin:1.2.0:generate-driver
(generate-driver) on project plc4j-driver-s7: Error generating sources:
Error generating output for type 'S7PayloadWriteVarRequest': Java method
"org.apache.plc4x.language.java.JavaLanguageTemplateHelper.getArgumentType(org.apache.plc4x.plugins.codegenerator.types.references.TypeReference,
int)" threw an exception when invoked on
org.apache.plc4x.language.java.JavaLanguageTemplateHelper object
"org.apache.plc4x.language.java.JavaLanguageTemplateHelper@8ac512e"; see
cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
- Failed at: ${helper.getArgumentType(field.type, ...  [in template
"templates/java/io-template.ftlh" at line 136, column 248]
----: Could not find definition of complex type S7VarPayloadDataItem
-> [Help 1]


-- 
*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.automation@siemens.com
<su...@siemens.com>*

Re: Inquiry about the mspec

Posted by Christofer Dutz <ch...@c-ware.de>.
Hi Cesar,

a typeSwitch inside a typeSwitch never worked ... you need to introduce an intermediate type for that.

So instead of:

[discriminiatedType Hurz
..
  [typeSwitch 'something'
    [case '1' HurzOne
      ...
      [typeSwitch 'else'
        [case '2' HurzOneTwo
          ..
        ]
     ]
  ]
]

You would have to do:

[discriminiatedType Hurz
..
  [typeSwitch 'something'
    [case '1' HurzOne
      [simple HurzOneDetail 'details']
    ]
  ]
]

[discriminiatedType HurzOneDetail
      ...
      [typeSwitch 'else'
        [case '2' HurzOneTwo
          ..
        ]
]

Hope that was your question.


Chris



Am 17.07.20, 17:58 schrieb "Cesar Garcia" <ce...@ceos.com.ve>:

    Hello Chris.

    It's me again, :-)

    You have an example that shows that the "typeSwitch" tab allows an internal
    "typeSwitch" tab as presented.

    I have tried many combinations and it does not work for me.

    Thanking you for your help,

    El lun., 15 jun. 2020 a las 3:21, Christofer Dutz (<
    christofer.dutz@c-ware.de>) escribió:

    > Hi Cesar,
    >
    > I just noticed your discriminated types in [2] don't have names ... as for
    > every case in the typeSwitch a new type is generated, you need to give them
    > names.
    > Please try that and check if the error goes away.
    >
    > Chris
    >
    >
    > Am 14.06.20, 17:59 schrieb "Cesar Garcia" <ce...@ceos.com.ve>:
    >
    >     Very grateful for your prompt response,
    >
    >     Corrected at point [1]
    >
    >     Unfortunately, the build process still fails when I add the
    > 'typeSwitch' in
    >     the structure as shown in [2],
    >
    >     I attach the message of error in [3].
    >
    >     Thank you very much for any help you can provide,
    >
    >     Best regards,
    >
    >
    >     [1]
    >     [discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter
    >     'parameter']
    >         [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
    >             ['0x04','0x03' S7PayloadReadVarResponse
    >                 [array S7VarPayloadDataItem 'items' count 'CAST(parameter,
    >     S7ParameterReadVarResponse).numItems' ['lastItem']]
    >             ]
    >             ['0x05','0x01' S7PayloadWriteVarRequest
    >                 [array S7VarPayloadDataItem 'items' count
    >     'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)'
    > ['lastItem']]
    >             ]
    >             ['0x05','0x03' S7PayloadWriteVarResponse
    >                 [array S7VarPayloadStatusItem 'items' count
    > 'CAST(parameter,
    >     S7ParameterWriteVarResponse).numItems']
    >             ]
    >             ['0x00','0x07' S7PayloadUserData
    >     *            [array S7PayloadUserDataItem 'items' count
    >     'COUNT(CAST(parameter, S7ParameterUserData).items)'
    > ['CAST(CAST(parameter,
    >     S7ParameterUserData).items[0],
    >
    > S7ParameterUserDataItemCPUFunctions).cpuFunctionType','CAST(CAST(parameter,
    >     S7ParameterUserData).items[0],
    >     S7ParameterUserDataItemCPUFunctions).cpuSubfunction'*]]
    >             ]
    >         ]
    >     ]
    >
    >     [2]
    >     [discriminatedType 'S7PayloadUserDataItem' [uint 4 'cpuFunctionType',
    > uint
    >     8 'cpuSubfunction']
    >         [enum     DataTransportErrorCode 'returnCode']
    >         [enum     DataTransportSize      'transportSize']
    >         [implicit uint 16                'dataLength' 'lengthInBytes - 4']
    >         [typeSwitch 'cpuSubfunction'
    >             ['0x01'
    >                 [simple   SzlId                  'szlId']
    >                 [simple   uint 16                'szlIndex']
    >                 [typeSwitch 'cpuFunctionType'
    >                     ['0x04' S7PayloadUserDataItemCpuFunctionReadSzlRequest
    >                     ]
    >                     ['0x08' S7PayloadUserDataItemCpuFunctionReadSzlResponse
    >                         [const    uint 16 'szlItemLength' '28']
    >                         [implicit uint 16 'szlItemCount'  'COUNT(items)']
    >                         [array SzlDataTreeItem 'items' count
    > 'szlItemCount']
    >                     ]
    >                 ]
    >             ]
    >             ['0x02'
    >     *            [simple   uint 16                'Mode']*
    >             ]
    >         ]
    >     ]
    >
    >
    >     [3]
    >
    >     --- plc4x-maven-plugin:1.2.0:generate-driver (generate-driver) @
    >     plc4j-driver-s7 ---
    >     Generating type DataItem
    >     Generating type COTPParameterDisconnectAdditionalInformation
    >     Generating type S7PayloadWriteVarRequest
    >
    > ------------------------------------------------------------------------
    >     BUILD FAILURE
    >
    > ------------------------------------------------------------------------
    >     Total time:  2.220 s
    >     Finished at: 2020-06-14T11:27:37-04:00
    >
    > ------------------------------------------------------------------------
    >     Failed to execute goal
    >     org.apache.plc4x.plugins:plc4x-maven-plugin:1.2.0:generate-driver
    >     (generate-driver) on project plc4j-driver-s7: Error generating sources:
    >     Error generating output for type 'S7PayloadWriteVarRequest': Java
    > method
    >
    > "org.apache.plc4x.language.java.JavaLanguageTemplateHelper.getArgumentType(org.apache.plc4x.plugins.codegenerator.types.references.TypeReference,
    >     int)" threw an exception when invoked on
    >     org.apache.plc4x.language.java.JavaLanguageTemplateHelper object
    >     "org.apache.plc4x.language.java.JavaLanguageTemplateHelper@5fa0141f";
    > see
    >     cause exception in the Java stack trace.
    >
    >     ----
    >     FTL stack trace ("~" means nesting-related):
    >     - Failed at: ${helper.getArgumentType(field.type, ...  [in template
    >     "templates/java/io-template.ftlh" at line 136, column 248]
    >     ----: Could not find definition of complex type S7VarPayloadDataItem
    >     -> [Help 1]
    >
    >     To see the full stack trace of the errors, re-run Maven with the -e
    > switch.
    >     Re-run Maven using the -X switch to enable full debug logging.
    >
    >     For more information about the errors and possible solutions, please
    > read
    >     the following articles:
    >     [Help 1]
    >
    > http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
    >
    >
    >
    >
    >     El dom., 14 jun. 2020 a las 5:05, Christofer Dutz (<
    >     christofer.dutz@c-ware.de>) escribió:
    >
    >     > Hi Cesar,
    >     >
    >     > I just had a look at your mspec changes. I think it shouldn't be
    >     > "getCpuSubfunction" but " cpuSubfunction" ... the code generator
    > takes care
    >     > of generating the right access code. For my C templates this code is
    >     > sometimes greatly different from what you would expect in Java.
    >     >
    >     > Actually that should be about all that has to be changed.
    >     >
    >     > Chris
    >     >
    >     >
    >     > Am 13.06.20, 22:50 schrieb "Cesar Garcia" <cesar.garcia@ceos.com.ve
    > >:
    >     >
    >     >     Hi,
    >     >
    >     >     I am trying to perform the migration to add the functionalities
    > for
    >     > the S7
    >     >     driver, associated with the subscription handling of alarm and
    > system
    >     >     events, but I am generating a failure in compiling the driver
    > from the
    >     >     mspec.
    >     >
    >     >     In [1] I extend the step of the parameter 'cpuSubFunction' since
    > I
    >     > require
    >     >     it to indicate the subscription model. The change is in bold.
    >     >
    >     >     In [2] I select the type based on the 'cpuSubFunction'.
    >     >
    >     >     I try to generate the driver and the compiler sends me the
    > message
    >     >     indicated in [3]. It points to 'S7PayloadWriteVarRequest', but I
    >     > haven't
    >     >     touched it.
    >     >
    >     >     I appreciate your comments,
    >     >
    >     >
    >     >
    >     >     [1]
    >     >
    >     >     [discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter
    >     >     'parameter']
    >     >         [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
    >     >             ['0x04','0x03' S7PayloadReadVarResponse
    >     >                 [array S7VarPayloadDataItem 'items' count
    > 'CAST(parameter,
    >     >     S7ParameterReadVarResponse).numItems' ['lastItem']]
    >     >             ]
    >     >             ['0x05','0x01' S7PayloadWriteVarRequest
    >     >                 [array S7VarPayloadDataItem 'items' count
    >     >     'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)'
    >     > ['lastItem']]
    >     >             ]
    >     >             ['0x05','0x03' S7PayloadWriteVarResponse
    >     >                 [array S7VarPayloadStatusItem 'items' count
    >     > 'CAST(parameter,
    >     >     S7ParameterWriteVarResponse).numItems']
    >     >             ]
    >     >             ['0x00','0x07' S7PayloadUserData
    >     >                 [array S7PayloadUserDataItem 'items' count
    >     >     'COUNT(CAST(parameter, S7ParameterUserData).items)'
    >     > ['CAST(CAST(parameter,
    >     >     S7ParameterUserData).items[0],
    >     >     S7ParameterUserDataItemCPUFunctions).cpuFunctionType',*
    >     >     'CAST(CAST(parameter, S7ParameterUserData).items[0],
    >     >     S7ParameterUserDataItemCPUFunctions).getCpuSubfunction']*]
    >     >             ]
    >     >         ]
    >     >     ]
    >     >
    >     >     [2]
    >     >
    >     >     [discriminatedType 'S7PayloadUserDataItem' [uint 4
    > 'cpuFunctionType',
    >     > uint
    >     >     8 'cpuSubfunction']
    >     >         [enum     DataTransportErrorCode 'returnCode']
    >     >         [enum     DataTransportSize      'transportSize']
    >     >         [implicit uint 16                'dataLength' 'lengthInBytes
    > - 4']
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >
    >     >     *  [typeSwitch 'cpuSubfunction'        ['0x01'            [simple
    >     >  SzlId
    >     >                    'szlId']            [simple   uint 16
    >     >      'szlIndex']            [typeSwitch 'cpuFunctionType'
    >     >     ['0x04' S7PayloadUserDataItemCpuFunctionReadSzlRequest
    >       ]
    >     >                 ['0x08'
    > S7PayloadUserDataItemCpuFunctionReadSzlResponse
    >     >                 [const    uint 16 'szlItemLength' '28']
    >     >     [implicit uint 16 'szlItemCount'  'COUNT(items)']
    >     > [array
    >     >     SzlDataTreeItem 'items' count 'szlItemCount']                ]
    >     >     ]        ]        ['0x02'        ]    ]*
    >     >     ]
    >     >
    >     >     [3]
    >     >     Failed to execute goal
    >     >     org.apache.plc4x.plugins:plc4x-maven-plugin:1.2.0:generate-driver
    >     >     (generate-driver) on project plc4j-driver-s7: Error generating
    > sources:
    >     >     Error generating output for type 'S7PayloadWriteVarRequest': Java
    >     > method
    >     >
    >     >
    > "org.apache.plc4x.language.java.JavaLanguageTemplateHelper.getArgumentType(org.apache.plc4x.plugins.codegenerator.types.references.TypeReference,
    >     >     int)" threw an exception when invoked on
    >     >     org.apache.plc4x.language.java.JavaLanguageTemplateHelper object
    >     >
    >  "org.apache.plc4x.language.java.JavaLanguageTemplateHelper@8ac512e";
    >     > see
    >     >     cause exception in the Java stack trace.
    >     >
    >     >     ----
    >     >     FTL stack trace ("~" means nesting-related):
    >     >     - Failed at: ${helper.getArgumentType(field.type, ...  [in
    > template
    >     >     "templates/java/io-template.ftlh" at line 136, column 248]
    >     >     ----: Could not find definition of complex type
    > S7VarPayloadDataItem
    >     >     -> [Help 1]
    >     >
    >     >
    >     >     --
    >     >     *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.automation@siemens.com
    >     >     <su...@siemens.com>*
    >     >
    >     >
    >
    >     --
    >     *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.automation@siemens.com
    >     <su...@siemens.com>*
    >
    >

    -- 
    *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.automation@siemens.com
    <su...@siemens.com>*


Re: Inquiry about the mspec

Posted by Cesar Garcia <ce...@ceos.com.ve>.
Hello Chris.

It's me again, :-)

You have an example that shows that the "typeSwitch" tab allows an internal
"typeSwitch" tab as presented.

I have tried many combinations and it does not work for me.

Thanking you for your help,

El lun., 15 jun. 2020 a las 3:21, Christofer Dutz (<
christofer.dutz@c-ware.de>) escribió:

> Hi Cesar,
>
> I just noticed your discriminated types in [2] don't have names ... as for
> every case in the typeSwitch a new type is generated, you need to give them
> names.
> Please try that and check if the error goes away.
>
> Chris
>
>
> Am 14.06.20, 17:59 schrieb "Cesar Garcia" <ce...@ceos.com.ve>:
>
>     Very grateful for your prompt response,
>
>     Corrected at point [1]
>
>     Unfortunately, the build process still fails when I add the
> 'typeSwitch' in
>     the structure as shown in [2],
>
>     I attach the message of error in [3].
>
>     Thank you very much for any help you can provide,
>
>     Best regards,
>
>
>     [1]
>     [discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter
>     'parameter']
>         [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
>             ['0x04','0x03' S7PayloadReadVarResponse
>                 [array S7VarPayloadDataItem 'items' count 'CAST(parameter,
>     S7ParameterReadVarResponse).numItems' ['lastItem']]
>             ]
>             ['0x05','0x01' S7PayloadWriteVarRequest
>                 [array S7VarPayloadDataItem 'items' count
>     'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)'
> ['lastItem']]
>             ]
>             ['0x05','0x03' S7PayloadWriteVarResponse
>                 [array S7VarPayloadStatusItem 'items' count
> 'CAST(parameter,
>     S7ParameterWriteVarResponse).numItems']
>             ]
>             ['0x00','0x07' S7PayloadUserData
>     *            [array S7PayloadUserDataItem 'items' count
>     'COUNT(CAST(parameter, S7ParameterUserData).items)'
> ['CAST(CAST(parameter,
>     S7ParameterUserData).items[0],
>
> S7ParameterUserDataItemCPUFunctions).cpuFunctionType','CAST(CAST(parameter,
>     S7ParameterUserData).items[0],
>     S7ParameterUserDataItemCPUFunctions).cpuSubfunction'*]]
>             ]
>         ]
>     ]
>
>     [2]
>     [discriminatedType 'S7PayloadUserDataItem' [uint 4 'cpuFunctionType',
> uint
>     8 'cpuSubfunction']
>         [enum     DataTransportErrorCode 'returnCode']
>         [enum     DataTransportSize      'transportSize']
>         [implicit uint 16                'dataLength' 'lengthInBytes - 4']
>         [typeSwitch 'cpuSubfunction'
>             ['0x01'
>                 [simple   SzlId                  'szlId']
>                 [simple   uint 16                'szlIndex']
>                 [typeSwitch 'cpuFunctionType'
>                     ['0x04' S7PayloadUserDataItemCpuFunctionReadSzlRequest
>                     ]
>                     ['0x08' S7PayloadUserDataItemCpuFunctionReadSzlResponse
>                         [const    uint 16 'szlItemLength' '28']
>                         [implicit uint 16 'szlItemCount'  'COUNT(items)']
>                         [array SzlDataTreeItem 'items' count
> 'szlItemCount']
>                     ]
>                 ]
>             ]
>             ['0x02'
>     *            [simple   uint 16                'Mode']*
>             ]
>         ]
>     ]
>
>
>     [3]
>
>     --- plc4x-maven-plugin:1.2.0:generate-driver (generate-driver) @
>     plc4j-driver-s7 ---
>     Generating type DataItem
>     Generating type COTPParameterDisconnectAdditionalInformation
>     Generating type S7PayloadWriteVarRequest
>
> ------------------------------------------------------------------------
>     BUILD FAILURE
>
> ------------------------------------------------------------------------
>     Total time:  2.220 s
>     Finished at: 2020-06-14T11:27:37-04:00
>
> ------------------------------------------------------------------------
>     Failed to execute goal
>     org.apache.plc4x.plugins:plc4x-maven-plugin:1.2.0:generate-driver
>     (generate-driver) on project plc4j-driver-s7: Error generating sources:
>     Error generating output for type 'S7PayloadWriteVarRequest': Java
> method
>
> "org.apache.plc4x.language.java.JavaLanguageTemplateHelper.getArgumentType(org.apache.plc4x.plugins.codegenerator.types.references.TypeReference,
>     int)" threw an exception when invoked on
>     org.apache.plc4x.language.java.JavaLanguageTemplateHelper object
>     "org.apache.plc4x.language.java.JavaLanguageTemplateHelper@5fa0141f";
> see
>     cause exception in the Java stack trace.
>
>     ----
>     FTL stack trace ("~" means nesting-related):
>     - Failed at: ${helper.getArgumentType(field.type, ...  [in template
>     "templates/java/io-template.ftlh" at line 136, column 248]
>     ----: Could not find definition of complex type S7VarPayloadDataItem
>     -> [Help 1]
>
>     To see the full stack trace of the errors, re-run Maven with the -e
> switch.
>     Re-run Maven using the -X switch to enable full debug logging.
>
>     For more information about the errors and possible solutions, please
> read
>     the following articles:
>     [Help 1]
>
> http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
>
>
>
>
>     El dom., 14 jun. 2020 a las 5:05, Christofer Dutz (<
>     christofer.dutz@c-ware.de>) escribió:
>
>     > Hi Cesar,
>     >
>     > I just had a look at your mspec changes. I think it shouldn't be
>     > "getCpuSubfunction" but " cpuSubfunction" ... the code generator
> takes care
>     > of generating the right access code. For my C templates this code is
>     > sometimes greatly different from what you would expect in Java.
>     >
>     > Actually that should be about all that has to be changed.
>     >
>     > Chris
>     >
>     >
>     > Am 13.06.20, 22:50 schrieb "Cesar Garcia" <cesar.garcia@ceos.com.ve
> >:
>     >
>     >     Hi,
>     >
>     >     I am trying to perform the migration to add the functionalities
> for
>     > the S7
>     >     driver, associated with the subscription handling of alarm and
> system
>     >     events, but I am generating a failure in compiling the driver
> from the
>     >     mspec.
>     >
>     >     In [1] I extend the step of the parameter 'cpuSubFunction' since
> I
>     > require
>     >     it to indicate the subscription model. The change is in bold.
>     >
>     >     In [2] I select the type based on the 'cpuSubFunction'.
>     >
>     >     I try to generate the driver and the compiler sends me the
> message
>     >     indicated in [3]. It points to 'S7PayloadWriteVarRequest', but I
>     > haven't
>     >     touched it.
>     >
>     >     I appreciate your comments,
>     >
>     >
>     >
>     >     [1]
>     >
>     >     [discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter
>     >     'parameter']
>     >         [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
>     >             ['0x04','0x03' S7PayloadReadVarResponse
>     >                 [array S7VarPayloadDataItem 'items' count
> 'CAST(parameter,
>     >     S7ParameterReadVarResponse).numItems' ['lastItem']]
>     >             ]
>     >             ['0x05','0x01' S7PayloadWriteVarRequest
>     >                 [array S7VarPayloadDataItem 'items' count
>     >     'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)'
>     > ['lastItem']]
>     >             ]
>     >             ['0x05','0x03' S7PayloadWriteVarResponse
>     >                 [array S7VarPayloadStatusItem 'items' count
>     > 'CAST(parameter,
>     >     S7ParameterWriteVarResponse).numItems']
>     >             ]
>     >             ['0x00','0x07' S7PayloadUserData
>     >                 [array S7PayloadUserDataItem 'items' count
>     >     'COUNT(CAST(parameter, S7ParameterUserData).items)'
>     > ['CAST(CAST(parameter,
>     >     S7ParameterUserData).items[0],
>     >     S7ParameterUserDataItemCPUFunctions).cpuFunctionType',*
>     >     'CAST(CAST(parameter, S7ParameterUserData).items[0],
>     >     S7ParameterUserDataItemCPUFunctions).getCpuSubfunction']*]
>     >             ]
>     >         ]
>     >     ]
>     >
>     >     [2]
>     >
>     >     [discriminatedType 'S7PayloadUserDataItem' [uint 4
> 'cpuFunctionType',
>     > uint
>     >     8 'cpuSubfunction']
>     >         [enum     DataTransportErrorCode 'returnCode']
>     >         [enum     DataTransportSize      'transportSize']
>     >         [implicit uint 16                'dataLength' 'lengthInBytes
> - 4']
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >     *  [typeSwitch 'cpuSubfunction'        ['0x01'            [simple
>     >  SzlId
>     >                    'szlId']            [simple   uint 16
>     >      'szlIndex']            [typeSwitch 'cpuFunctionType'
>     >     ['0x04' S7PayloadUserDataItemCpuFunctionReadSzlRequest
>       ]
>     >                 ['0x08'
> S7PayloadUserDataItemCpuFunctionReadSzlResponse
>     >                 [const    uint 16 'szlItemLength' '28']
>     >     [implicit uint 16 'szlItemCount'  'COUNT(items)']
>     > [array
>     >     SzlDataTreeItem 'items' count 'szlItemCount']                ]
>     >     ]        ]        ['0x02'        ]    ]*
>     >     ]
>     >
>     >     [3]
>     >     Failed to execute goal
>     >     org.apache.plc4x.plugins:plc4x-maven-plugin:1.2.0:generate-driver
>     >     (generate-driver) on project plc4j-driver-s7: Error generating
> sources:
>     >     Error generating output for type 'S7PayloadWriteVarRequest': Java
>     > method
>     >
>     >
> "org.apache.plc4x.language.java.JavaLanguageTemplateHelper.getArgumentType(org.apache.plc4x.plugins.codegenerator.types.references.TypeReference,
>     >     int)" threw an exception when invoked on
>     >     org.apache.plc4x.language.java.JavaLanguageTemplateHelper object
>     >
>  "org.apache.plc4x.language.java.JavaLanguageTemplateHelper@8ac512e";
>     > see
>     >     cause exception in the Java stack trace.
>     >
>     >     ----
>     >     FTL stack trace ("~" means nesting-related):
>     >     - Failed at: ${helper.getArgumentType(field.type, ...  [in
> template
>     >     "templates/java/io-template.ftlh" at line 136, column 248]
>     >     ----: Could not find definition of complex type
> S7VarPayloadDataItem
>     >     -> [Help 1]
>     >
>     >
>     >     --
>     >     *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.automation@siemens.com
>     >     <su...@siemens.com>*
>     >
>     >
>
>     --
>     *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.automation@siemens.com
>     <su...@siemens.com>*
>
>

-- 
*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.automation@siemens.com
<su...@siemens.com>*

Re: Inquiry about the mspec

Posted by Christofer Dutz <ch...@c-ware.de>.
Hi Cesar,

I just noticed your discriminated types in [2] don't have names ... as for every case in the typeSwitch a new type is generated, you need to give them names.
Please try that and check if the error goes away.

Chris


Am 14.06.20, 17:59 schrieb "Cesar Garcia" <ce...@ceos.com.ve>:

    Very grateful for your prompt response,

    Corrected at point [1]

    Unfortunately, the build process still fails when I add the 'typeSwitch' in
    the structure as shown in [2],

    I attach the message of error in [3].

    Thank you very much for any help you can provide,

    Best regards,


    [1]
    [discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter
    'parameter']
        [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
            ['0x04','0x03' S7PayloadReadVarResponse
                [array S7VarPayloadDataItem 'items' count 'CAST(parameter,
    S7ParameterReadVarResponse).numItems' ['lastItem']]
            ]
            ['0x05','0x01' S7PayloadWriteVarRequest
                [array S7VarPayloadDataItem 'items' count
    'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)' ['lastItem']]
            ]
            ['0x05','0x03' S7PayloadWriteVarResponse
                [array S7VarPayloadStatusItem 'items' count 'CAST(parameter,
    S7ParameterWriteVarResponse).numItems']
            ]
            ['0x00','0x07' S7PayloadUserData
    *            [array S7PayloadUserDataItem 'items' count
    'COUNT(CAST(parameter, S7ParameterUserData).items)' ['CAST(CAST(parameter,
    S7ParameterUserData).items[0],
    S7ParameterUserDataItemCPUFunctions).cpuFunctionType','CAST(CAST(parameter,
    S7ParameterUserData).items[0],
    S7ParameterUserDataItemCPUFunctions).cpuSubfunction'*]]
            ]
        ]
    ]

    [2]
    [discriminatedType 'S7PayloadUserDataItem' [uint 4 'cpuFunctionType', uint
    8 'cpuSubfunction']
        [enum     DataTransportErrorCode 'returnCode']
        [enum     DataTransportSize      'transportSize']
        [implicit uint 16                'dataLength' 'lengthInBytes - 4']
        [typeSwitch 'cpuSubfunction'
            ['0x01'
                [simple   SzlId                  'szlId']
                [simple   uint 16                'szlIndex']
                [typeSwitch 'cpuFunctionType'
                    ['0x04' S7PayloadUserDataItemCpuFunctionReadSzlRequest
                    ]
                    ['0x08' S7PayloadUserDataItemCpuFunctionReadSzlResponse
                        [const    uint 16 'szlItemLength' '28']
                        [implicit uint 16 'szlItemCount'  'COUNT(items)']
                        [array SzlDataTreeItem 'items' count 'szlItemCount']
                    ]
                ]
            ]
            ['0x02'
    *            [simple   uint 16                'Mode']*
            ]
        ]
    ]


    [3]

    --- plc4x-maven-plugin:1.2.0:generate-driver (generate-driver) @
    plc4j-driver-s7 ---
    Generating type DataItem
    Generating type COTPParameterDisconnectAdditionalInformation
    Generating type S7PayloadWriteVarRequest
    ------------------------------------------------------------------------
    BUILD FAILURE
    ------------------------------------------------------------------------
    Total time:  2.220 s
    Finished at: 2020-06-14T11:27:37-04:00
    ------------------------------------------------------------------------
    Failed to execute goal
    org.apache.plc4x.plugins:plc4x-maven-plugin:1.2.0:generate-driver
    (generate-driver) on project plc4j-driver-s7: Error generating sources:
    Error generating output for type 'S7PayloadWriteVarRequest': Java method
    "org.apache.plc4x.language.java.JavaLanguageTemplateHelper.getArgumentType(org.apache.plc4x.plugins.codegenerator.types.references.TypeReference,
    int)" threw an exception when invoked on
    org.apache.plc4x.language.java.JavaLanguageTemplateHelper object
    "org.apache.plc4x.language.java.JavaLanguageTemplateHelper@5fa0141f"; see
    cause exception in the Java stack trace.

    ----
    FTL stack trace ("~" means nesting-related):
    - Failed at: ${helper.getArgumentType(field.type, ...  [in template
    "templates/java/io-template.ftlh" at line 136, column 248]
    ----: Could not find definition of complex type S7VarPayloadDataItem
    -> [Help 1]

    To see the full stack trace of the errors, re-run Maven with the -e switch.
    Re-run Maven using the -X switch to enable full debug logging.

    For more information about the errors and possible solutions, please read
    the following articles:
    [Help 1]
    http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException




    El dom., 14 jun. 2020 a las 5:05, Christofer Dutz (<
    christofer.dutz@c-ware.de>) escribió:

    > Hi Cesar,
    >
    > I just had a look at your mspec changes. I think it shouldn't be
    > "getCpuSubfunction" but " cpuSubfunction" ... the code generator takes care
    > of generating the right access code. For my C templates this code is
    > sometimes greatly different from what you would expect in Java.
    >
    > Actually that should be about all that has to be changed.
    >
    > Chris
    >
    >
    > Am 13.06.20, 22:50 schrieb "Cesar Garcia" <ce...@ceos.com.ve>:
    >
    >     Hi,
    >
    >     I am trying to perform the migration to add the functionalities for
    > the S7
    >     driver, associated with the subscription handling of alarm and system
    >     events, but I am generating a failure in compiling the driver from the
    >     mspec.
    >
    >     In [1] I extend the step of the parameter 'cpuSubFunction' since I
    > require
    >     it to indicate the subscription model. The change is in bold.
    >
    >     In [2] I select the type based on the 'cpuSubFunction'.
    >
    >     I try to generate the driver and the compiler sends me the message
    >     indicated in [3]. It points to 'S7PayloadWriteVarRequest', but I
    > haven't
    >     touched it.
    >
    >     I appreciate your comments,
    >
    >
    >
    >     [1]
    >
    >     [discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter
    >     'parameter']
    >         [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
    >             ['0x04','0x03' S7PayloadReadVarResponse
    >                 [array S7VarPayloadDataItem 'items' count 'CAST(parameter,
    >     S7ParameterReadVarResponse).numItems' ['lastItem']]
    >             ]
    >             ['0x05','0x01' S7PayloadWriteVarRequest
    >                 [array S7VarPayloadDataItem 'items' count
    >     'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)'
    > ['lastItem']]
    >             ]
    >             ['0x05','0x03' S7PayloadWriteVarResponse
    >                 [array S7VarPayloadStatusItem 'items' count
    > 'CAST(parameter,
    >     S7ParameterWriteVarResponse).numItems']
    >             ]
    >             ['0x00','0x07' S7PayloadUserData
    >                 [array S7PayloadUserDataItem 'items' count
    >     'COUNT(CAST(parameter, S7ParameterUserData).items)'
    > ['CAST(CAST(parameter,
    >     S7ParameterUserData).items[0],
    >     S7ParameterUserDataItemCPUFunctions).cpuFunctionType',*
    >     'CAST(CAST(parameter, S7ParameterUserData).items[0],
    >     S7ParameterUserDataItemCPUFunctions).getCpuSubfunction']*]
    >             ]
    >         ]
    >     ]
    >
    >     [2]
    >
    >     [discriminatedType 'S7PayloadUserDataItem' [uint 4 'cpuFunctionType',
    > uint
    >     8 'cpuSubfunction']
    >         [enum     DataTransportErrorCode 'returnCode']
    >         [enum     DataTransportSize      'transportSize']
    >         [implicit uint 16                'dataLength' 'lengthInBytes - 4']
    >
    >
    >
    >
    >
    >
    >
    >
    >
    >
    >
    >
    >
    >
    >
    >
    >     *  [typeSwitch 'cpuSubfunction'        ['0x01'            [simple
    >  SzlId
    >                    'szlId']            [simple   uint 16
    >      'szlIndex']            [typeSwitch 'cpuFunctionType'
    >     ['0x04' S7PayloadUserDataItemCpuFunctionReadSzlRequest                ]
    >                 ['0x08' S7PayloadUserDataItemCpuFunctionReadSzlResponse
    >                 [const    uint 16 'szlItemLength' '28']
    >     [implicit uint 16 'szlItemCount'  'COUNT(items)']
    > [array
    >     SzlDataTreeItem 'items' count 'szlItemCount']                ]
    >     ]        ]        ['0x02'        ]    ]*
    >     ]
    >
    >     [3]
    >     Failed to execute goal
    >     org.apache.plc4x.plugins:plc4x-maven-plugin:1.2.0:generate-driver
    >     (generate-driver) on project plc4j-driver-s7: Error generating sources:
    >     Error generating output for type 'S7PayloadWriteVarRequest': Java
    > method
    >
    > "org.apache.plc4x.language.java.JavaLanguageTemplateHelper.getArgumentType(org.apache.plc4x.plugins.codegenerator.types.references.TypeReference,
    >     int)" threw an exception when invoked on
    >     org.apache.plc4x.language.java.JavaLanguageTemplateHelper object
    >     "org.apache.plc4x.language.java.JavaLanguageTemplateHelper@8ac512e";
    > see
    >     cause exception in the Java stack trace.
    >
    >     ----
    >     FTL stack trace ("~" means nesting-related):
    >     - Failed at: ${helper.getArgumentType(field.type, ...  [in template
    >     "templates/java/io-template.ftlh" at line 136, column 248]
    >     ----: Could not find definition of complex type S7VarPayloadDataItem
    >     -> [Help 1]
    >
    >
    >     --
    >     *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.automation@siemens.com
    >     <su...@siemens.com>*
    >
    >

    -- 
    *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.automation@siemens.com
    <su...@siemens.com>*


Re: Inquiry about the mspec

Posted by Cesar Garcia <ce...@ceos.com.ve>.
Very grateful for your prompt response,

Corrected at point [1]

Unfortunately, the build process still fails when I add the 'typeSwitch' in
the structure as shown in [2],

I attach the message of error in [3].

Thank you very much for any help you can provide,

Best regards,


[1]
[discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter
'parameter']
    [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
        ['0x04','0x03' S7PayloadReadVarResponse
            [array S7VarPayloadDataItem 'items' count 'CAST(parameter,
S7ParameterReadVarResponse).numItems' ['lastItem']]
        ]
        ['0x05','0x01' S7PayloadWriteVarRequest
            [array S7VarPayloadDataItem 'items' count
'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)' ['lastItem']]
        ]
        ['0x05','0x03' S7PayloadWriteVarResponse
            [array S7VarPayloadStatusItem 'items' count 'CAST(parameter,
S7ParameterWriteVarResponse).numItems']
        ]
        ['0x00','0x07' S7PayloadUserData
*            [array S7PayloadUserDataItem 'items' count
'COUNT(CAST(parameter, S7ParameterUserData).items)' ['CAST(CAST(parameter,
S7ParameterUserData).items[0],
S7ParameterUserDataItemCPUFunctions).cpuFunctionType','CAST(CAST(parameter,
S7ParameterUserData).items[0],
S7ParameterUserDataItemCPUFunctions).cpuSubfunction'*]]
        ]
    ]
]

[2]
[discriminatedType 'S7PayloadUserDataItem' [uint 4 'cpuFunctionType', uint
8 'cpuSubfunction']
    [enum     DataTransportErrorCode 'returnCode']
    [enum     DataTransportSize      'transportSize']
    [implicit uint 16                'dataLength' 'lengthInBytes - 4']
    [typeSwitch 'cpuSubfunction'
        ['0x01'
            [simple   SzlId                  'szlId']
            [simple   uint 16                'szlIndex']
            [typeSwitch 'cpuFunctionType'
                ['0x04' S7PayloadUserDataItemCpuFunctionReadSzlRequest
                ]
                ['0x08' S7PayloadUserDataItemCpuFunctionReadSzlResponse
                    [const    uint 16 'szlItemLength' '28']
                    [implicit uint 16 'szlItemCount'  'COUNT(items)']
                    [array SzlDataTreeItem 'items' count 'szlItemCount']
                ]
            ]
        ]
        ['0x02'
*            [simple   uint 16                'Mode']*
        ]
    ]
]


[3]

--- plc4x-maven-plugin:1.2.0:generate-driver (generate-driver) @
plc4j-driver-s7 ---
Generating type DataItem
Generating type COTPParameterDisconnectAdditionalInformation
Generating type S7PayloadWriteVarRequest
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time:  2.220 s
Finished at: 2020-06-14T11:27:37-04:00
------------------------------------------------------------------------
Failed to execute goal
org.apache.plc4x.plugins:plc4x-maven-plugin:1.2.0:generate-driver
(generate-driver) on project plc4j-driver-s7: Error generating sources:
Error generating output for type 'S7PayloadWriteVarRequest': Java method
"org.apache.plc4x.language.java.JavaLanguageTemplateHelper.getArgumentType(org.apache.plc4x.plugins.codegenerator.types.references.TypeReference,
int)" threw an exception when invoked on
org.apache.plc4x.language.java.JavaLanguageTemplateHelper object
"org.apache.plc4x.language.java.JavaLanguageTemplateHelper@5fa0141f"; see
cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
- Failed at: ${helper.getArgumentType(field.type, ...  [in template
"templates/java/io-template.ftlh" at line 136, column 248]
----: Could not find definition of complex type S7VarPayloadDataItem
-> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

For more information about the errors and possible solutions, please read
the following articles:
[Help 1]
http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException




El dom., 14 jun. 2020 a las 5:05, Christofer Dutz (<
christofer.dutz@c-ware.de>) escribió:

> Hi Cesar,
>
> I just had a look at your mspec changes. I think it shouldn't be
> "getCpuSubfunction" but " cpuSubfunction" ... the code generator takes care
> of generating the right access code. For my C templates this code is
> sometimes greatly different from what you would expect in Java.
>
> Actually that should be about all that has to be changed.
>
> Chris
>
>
> Am 13.06.20, 22:50 schrieb "Cesar Garcia" <ce...@ceos.com.ve>:
>
>     Hi,
>
>     I am trying to perform the migration to add the functionalities for
> the S7
>     driver, associated with the subscription handling of alarm and system
>     events, but I am generating a failure in compiling the driver from the
>     mspec.
>
>     In [1] I extend the step of the parameter 'cpuSubFunction' since I
> require
>     it to indicate the subscription model. The change is in bold.
>
>     In [2] I select the type based on the 'cpuSubFunction'.
>
>     I try to generate the driver and the compiler sends me the message
>     indicated in [3]. It points to 'S7PayloadWriteVarRequest', but I
> haven't
>     touched it.
>
>     I appreciate your comments,
>
>
>
>     [1]
>
>     [discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter
>     'parameter']
>         [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
>             ['0x04','0x03' S7PayloadReadVarResponse
>                 [array S7VarPayloadDataItem 'items' count 'CAST(parameter,
>     S7ParameterReadVarResponse).numItems' ['lastItem']]
>             ]
>             ['0x05','0x01' S7PayloadWriteVarRequest
>                 [array S7VarPayloadDataItem 'items' count
>     'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)'
> ['lastItem']]
>             ]
>             ['0x05','0x03' S7PayloadWriteVarResponse
>                 [array S7VarPayloadStatusItem 'items' count
> 'CAST(parameter,
>     S7ParameterWriteVarResponse).numItems']
>             ]
>             ['0x00','0x07' S7PayloadUserData
>                 [array S7PayloadUserDataItem 'items' count
>     'COUNT(CAST(parameter, S7ParameterUserData).items)'
> ['CAST(CAST(parameter,
>     S7ParameterUserData).items[0],
>     S7ParameterUserDataItemCPUFunctions).cpuFunctionType',*
>     'CAST(CAST(parameter, S7ParameterUserData).items[0],
>     S7ParameterUserDataItemCPUFunctions).getCpuSubfunction']*]
>             ]
>         ]
>     ]
>
>     [2]
>
>     [discriminatedType 'S7PayloadUserDataItem' [uint 4 'cpuFunctionType',
> uint
>     8 'cpuSubfunction']
>         [enum     DataTransportErrorCode 'returnCode']
>         [enum     DataTransportSize      'transportSize']
>         [implicit uint 16                'dataLength' 'lengthInBytes - 4']
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>     *  [typeSwitch 'cpuSubfunction'        ['0x01'            [simple
>  SzlId
>                    'szlId']            [simple   uint 16
>      'szlIndex']            [typeSwitch 'cpuFunctionType'
>     ['0x04' S7PayloadUserDataItemCpuFunctionReadSzlRequest                ]
>                 ['0x08' S7PayloadUserDataItemCpuFunctionReadSzlResponse
>                 [const    uint 16 'szlItemLength' '28']
>     [implicit uint 16 'szlItemCount'  'COUNT(items)']
> [array
>     SzlDataTreeItem 'items' count 'szlItemCount']                ]
>     ]        ]        ['0x02'        ]    ]*
>     ]
>
>     [3]
>     Failed to execute goal
>     org.apache.plc4x.plugins:plc4x-maven-plugin:1.2.0:generate-driver
>     (generate-driver) on project plc4j-driver-s7: Error generating sources:
>     Error generating output for type 'S7PayloadWriteVarRequest': Java
> method
>
> "org.apache.plc4x.language.java.JavaLanguageTemplateHelper.getArgumentType(org.apache.plc4x.plugins.codegenerator.types.references.TypeReference,
>     int)" threw an exception when invoked on
>     org.apache.plc4x.language.java.JavaLanguageTemplateHelper object
>     "org.apache.plc4x.language.java.JavaLanguageTemplateHelper@8ac512e";
> see
>     cause exception in the Java stack trace.
>
>     ----
>     FTL stack trace ("~" means nesting-related):
>     - Failed at: ${helper.getArgumentType(field.type, ...  [in template
>     "templates/java/io-template.ftlh" at line 136, column 248]
>     ----: Could not find definition of complex type S7VarPayloadDataItem
>     -> [Help 1]
>
>
>     --
>     *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.automation@siemens.com
>     <su...@siemens.com>*
>
>

-- 
*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.automation@siemens.com
<su...@siemens.com>*

Re: Inquiry about the mspec

Posted by Christofer Dutz <ch...@c-ware.de>.
Hi Cesar,

I just had a look at your mspec changes. I think it shouldn't be "getCpuSubfunction" but " cpuSubfunction" ... the code generator takes care of generating the right access code. For my C templates this code is sometimes greatly different from what you would expect in Java.

Actually that should be about all that has to be changed.

Chris


Am 13.06.20, 22:50 schrieb "Cesar Garcia" <ce...@ceos.com.ve>:

    Hi,

    I am trying to perform the migration to add the functionalities for the S7
    driver, associated with the subscription handling of alarm and system
    events, but I am generating a failure in compiling the driver from the
    mspec.

    In [1] I extend the step of the parameter 'cpuSubFunction' since I require
    it to indicate the subscription model. The change is in bold.

    In [2] I select the type based on the 'cpuSubFunction'.

    I try to generate the driver and the compiler sends me the message
    indicated in [3]. It points to 'S7PayloadWriteVarRequest', but I haven't
    touched it.

    I appreciate your comments,



    [1]

    [discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter
    'parameter']
        [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
            ['0x04','0x03' S7PayloadReadVarResponse
                [array S7VarPayloadDataItem 'items' count 'CAST(parameter,
    S7ParameterReadVarResponse).numItems' ['lastItem']]
            ]
            ['0x05','0x01' S7PayloadWriteVarRequest
                [array S7VarPayloadDataItem 'items' count
    'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)' ['lastItem']]
            ]
            ['0x05','0x03' S7PayloadWriteVarResponse
                [array S7VarPayloadStatusItem 'items' count 'CAST(parameter,
    S7ParameterWriteVarResponse).numItems']
            ]
            ['0x00','0x07' S7PayloadUserData
                [array S7PayloadUserDataItem 'items' count
    'COUNT(CAST(parameter, S7ParameterUserData).items)' ['CAST(CAST(parameter,
    S7ParameterUserData).items[0],
    S7ParameterUserDataItemCPUFunctions).cpuFunctionType',*
    'CAST(CAST(parameter, S7ParameterUserData).items[0],
    S7ParameterUserDataItemCPUFunctions).getCpuSubfunction']*]
            ]
        ]
    ]

    [2]

    [discriminatedType 'S7PayloadUserDataItem' [uint 4 'cpuFunctionType', uint
    8 'cpuSubfunction']
        [enum     DataTransportErrorCode 'returnCode']
        [enum     DataTransportSize      'transportSize']
        [implicit uint 16                'dataLength' 'lengthInBytes - 4']
















    *  [typeSwitch 'cpuSubfunction'        ['0x01'            [simple   SzlId
                   'szlId']            [simple   uint 16
     'szlIndex']            [typeSwitch 'cpuFunctionType'
    ['0x04' S7PayloadUserDataItemCpuFunctionReadSzlRequest                ]
                ['0x08' S7PayloadUserDataItemCpuFunctionReadSzlResponse
                [const    uint 16 'szlItemLength' '28']
    [implicit uint 16 'szlItemCount'  'COUNT(items)']                    [array
    SzlDataTreeItem 'items' count 'szlItemCount']                ]
    ]        ]        ['0x02'        ]    ]*
    ]

    [3]
    Failed to execute goal
    org.apache.plc4x.plugins:plc4x-maven-plugin:1.2.0:generate-driver
    (generate-driver) on project plc4j-driver-s7: Error generating sources:
    Error generating output for type 'S7PayloadWriteVarRequest': Java method
    "org.apache.plc4x.language.java.JavaLanguageTemplateHelper.getArgumentType(org.apache.plc4x.plugins.codegenerator.types.references.TypeReference,
    int)" threw an exception when invoked on
    org.apache.plc4x.language.java.JavaLanguageTemplateHelper object
    "org.apache.plc4x.language.java.JavaLanguageTemplateHelper@8ac512e"; see
    cause exception in the Java stack trace.

    ----
    FTL stack trace ("~" means nesting-related):
    - Failed at: ${helper.getArgumentType(field.type, ...  [in template
    "templates/java/io-template.ftlh" at line 136, column 248]
    ----: Could not find definition of complex type S7VarPayloadDataItem
    -> [Help 1]


    -- 
    *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.automation@siemens.com
    <su...@siemens.com>*