Hi,
were are implementing a profinet device based on a AnyBus CompactCom 40 module. We would like to map our alarm condition (Uint8) to the cyclic data and offer additional meta data, like the alarm borders and the current value as Float32 as acyclic read-only data. For this we use structured data like the following:
Structured data:
{ "ALARMSTATE", ABP_UINT8, 1, APPL_WRITE_MAP_READ_ACCESS_DESC, 0, { { &mAlarmState, NULL } } }
{ "VALUE", ABP_FLOAT, 1, APPL_NOT_MAP_READ_ACCESS_DESC, 0, { { &mValue, NULL } } }
{ "LOWER_MAIN_ALARM", ABP_FLOAT, 1, APPL_NOT_MAP_READ_ACCESS_DESC, 0, { { &mLowerMainAlarm, NULL } } }
{ "LOWER_PRE_ALARM", ABP_FLOAT, 1, APPL_NOT_MAP_READ_ACCESS_DESC, 0, { { &mLowerPreAlarm, NULL } } }
{ "UPPER_PRE_ALARM", ABP_FLOAT, 1, APPL_NOT_MAP_READ_ACCESS_DESC, 0, { { &mUpperPreAlarm, NULL } } }
{ "UPPER_MAIN_ALARM", ABP_FLOAT, 1, APPL_NOT_MAP_READ_ACCESS_DESC, 0, { { &mUpperMainAlarm, NULL } } }
Adi entry:
{ Instance, Name, DONT_CARE, static_cast(mAdiStructs.size()), APPL_WRITE_MAP_READ_ACCESS_DESC, { { NULL, NULL } } mAdiStructs.data() }`
Object map:
{ Instance, PD_WRITE, 1, 0 }
The corresponding gsd for the submodule look like this:
<SubmoduleList>
<SubmoduleItem ID="ID_SUBMOD_KPI_GROUP" SubmoduleIdentNumber="0x00000100" MayIssueProcessAlarm="false">
<IOData>
<Input Consistency="All items consistency">
<DataItem DataType="Unsigned8" TextId="T_ID_KPI_ALARM_STATE" />
</Input>
</IOData>
<RecordDataList>
<ParameterRecordDataItem Index="1" Length="21" TransferSequence="0" >
<Name TextId="T_ID_KPI_PARAMETER" />
<Ref ValueItemTarget="VI_ID_ALARM_STATE_VALUES" DataType="Unsigned8" ByteOffset="0" DefaultValue="0" AllowedValues="0..4"
TextId="T_ID_KPI_ALARM_STATE"/>
<Ref DataType="Float32" ByteOffset="1" DefaultValue="0" TextId="T_ID_KPI_VALUE"/>
<Ref DataType="Float32" ByteOffset="5" DefaultValue="0" TextId="T_ID_KPI_LOWER_MAIN_ALARM"/>
<Ref DataType="Float32" ByteOffset="9" DefaultValue="0" TextId="T_ID_KPI_LOWER_PRE_ALARM"/>
<Ref DataType="Float32" ByteOffset="13" DefaultValue="0" TextId="T_ID_KPI_UPPER_PRE_ALARM"/>
<Ref DataType="Float32" ByteOffset="17" DefaultValue="0" TextId="T_ID_KPI_UPPER_MAIN_ALARM"/>
</ParameterRecordDataItem>
</RecordDataList>
<ModuleInfo>
<Name TextId="T_ID_MODULE_NAME_INPUT_KPI_GROUP" />
<InfoText TextId="T_ID_SUBMOD_INFO_ELEMENT_GROUP" />
</ModuleInfo>
</SubmoduleItem>
</SubmoduleList>
When connecting to the device the master simulator shows this error message:
It seems like the master simulator is trying to write to the parameter records during the start of the connections establishment. Adding a Changeable=“false” attribute to the ParameterRecords Refs does not help. Without the RecordDataList in the gsd, the connection can be established and cyclic and acyclic data can be exchanged.
How can I prevent the master simulator from trying to write to the acyclic read-only data of my ADI?
Thanks for your help and best regards
Andreas