Error using GET_EXCEPTION_INFOS function block

Hello, i’m trying to investigate the cause of a watchdog: [quote]Arp.Plc.Esm.Internal.WatchdogHandler ERROR - Watchdog of task ‚T_200‘ triggered. (watchdog time 200000us / time after task start 399820us)[/quote] After a watchdog, looking in debug mode at the system variable ESM_DATA.EXCEPTIONS_INFO I can’t find any kind of information (structure seem to be blank) I found a library at C:\\Program Files\\PHOENIX CONTACT\\PLCnext Engineer 2021.3\\Libraries the library Exception Infos.pcwlx, that contains the function block GET_EXCEPTION_INFOS. So, as suggested in the Help of PLCnext Engineer, I implemented an Exception Event Task and called inside this GET_EXCEPTION_INFOS. (I’ve already used this kind Event Task, without any problem) Unfortunately after the startup I have a FAIL and this is what I find in the Output.log file: [quote] 31.05.21 14:01:53.151 Arp.Plc.Gds.Internal.GdsMetaManager WARN - Compare type definitions: Incompatible offset, data type or alignment. StartPoint: ‚Arp.Plc.Esm/ESM_DATA.EXCEPTION_INFOS.TYPE_ID‘ (DataType: ‚Enum:UInt32‘, Offset: ‚0‘, Alignment: ‚4‘) → EndPoint: ‚Arp.Plc.Eclr/ESM_DATA.EXCEPTION_INFOS.TYPE_ID‘ (DataType: ‚Enum:UInt32‘, Offset: ‚0‘, Alignment: ‚0‘) 31.05.21 14:01:53.187 Arp.Plc.Domain.Internal.PlcManager ERROR - Exception occurs while setting up plc component ‚Arp.Plc.Gds‘: Exception of type ‚Arp::System::Commons::InvalidOperationException‘ was thrown Could not create struct connector with single element connectors yet. Struct layouts should be binary equal. Please check the struct type defintions of the following connector ports - StartPort: ‚Arp.Plc.Esm/ESM_DATA‘ → EndPort: ‚Arp.Plc.Eclr/ESM_DATA‘ at /usr/lib/libArp.Plc.Gds.so(+0x3c8d34) [0xaa45cd34] at Arp::Plc::Gds::Internal::Connections::StructConnector::Create(Arp::BasicString > const&, Arp::BasicString > const&, Arp::Plc::Commons::Meta::DataInfo const&, Arp::Plc::Commons::Meta::DataInfo const&, Arp::Plc::Gds::Internal::GdsMetaManager&) at Arp::Plc::Gds::Internal::Connections::StructConnector::Setup() at Arp::Plc::Gds::Internal::Connections::ConnectorFactory::TryCreateStructConnector(Arp::Plc::Gds::Internal::Connections::StructConnectorSettings const&, std::shared_ptr&) const at Arp::Plc::Gds::Internal::Connections::ConnectorFactory::CreateStructConnector(Arp::Plc::Gds::Internal::Connections::StructConnectorSettings const&) const at Arp::Plc::Gds::Internal::Connections::GdsConnectionsBuilder::CreateStructConnectorPtr(Arp::Plc::Gds::Internal::Connections::StructConnectorSettings const&, Arp::Plc::Gds::Internal::Connections::ConnectorFactory const&, std::shared_ptr&) at Arp::Plc::Gds::Internal::Connections::GdsConnectionsBuilder::CreateConnector(Arp::Plc::Gds::Internal::Connections::ConnectorInfo&, std::shared_ptr, std::shared_ptr, Arp::Plc::Gds::Internal::GdsContext&, std::shared_ptr&) at Arp::Plc::Gds::Internal::Connections::GdsConnectionsBuilder::CreateDataConnection(std::shared_ptr, std::shared_ptr, Arp::Plc::Gds::Internal::Connections::ConnectionInfo&, Arp::Plc::Gds::Internal::GdsContext&, Arp::Plc::Gds::Internal::Connections::GdsConnections&) at Arp::Plc::Gds::Internal::Connections::GdsConnectionsBuilder::CreateDataConnections(Arp::Plc::Gds::Internal::GdsContext&, Arp::Plc::Gds::Internal::Connections::GdsConnections&) at Arp::Plc::Gds::Internal::GdsDomain::Setup() at Arp::Plc::Gds::GdsComponent::SetupPlc(bool, Arp::Plc::Commons::Domain::PlcStartKind) at Arp::Plc::Domain::Internal::PlcComponentInfo::SetupPlc(bool, Arp::Plc::Commons::Domain::PlcStartKind) at Arp::Plc::Domain::Internal::PlcManager::LoadAndSetupPlcComponents(bool) at Arp::Plc::Domain::Internal::PlcManager::LoadAndSetupPlcInternal() at Arp::System::Commons::Threading::TaskQueue::ProcessTasksInternal(unsigned int) at Arp::System::Commons::Threading::TaskQueue::ProcessTasks() at Arp::System::Commons::Threading::TaskThread::RunInternal(void*) at Arp::System::Commons::Threading::thread::RunThread(Arp::System::Commons::Threading::ThreadBinaryCompatibilityExtensions*) at Arp::System::Commons::Threading::thread::RunInternal(void*) at Arp::System::Ve::Internal::Linux::ThreadService::RunInternal(void*) 31.05.21 14:01:53.190 Arp.Plc.Domain.Internal.PlcManager ERROR - Plc component ‚Arp.Plc.Gds‘ returns false while SetupPlc(isChanging=false, startKind=Warm) was called. 31.05.21 14:01:53.329 Arp.Io.EthernetIP.EthernetIPComponent INFO - ResetPlc, isChanging=false 31.05.21 14:01:53.330 Arp.Io.EthernetIP.EthernetIPComponent INFO - 2930754240 OnPlcUnloaded PlcLoaded=true 31.05.21 14:01:53.331 Arp.Io.EthernetIP.EthernetIPComponent INFO - 2930754240 ESDK 0xffff, RemoveAllAssemblies 31.05.21 14:01:53.333 Arp.Io.EthernetIP.EthernetIPComponent INFO - UnloadPlc, isChanging=false 31.05.21 14:01:53.333 Arp.Io.EthernetIP.EthernetIPComponent INFO - 2930754240 OnPlcUnloaded PlcLoaded=false 31.05.21 14:01:54.360 PLCnextBaseServices.PLCnextBase INFO - Reset configuration 31.05.21 14:01:54.361 PLCnextBaseServices.PLCnextBase INFO - Terminating 31.05.21 14:01:54.365 PLCnextBase.Internal.PLCnext.ShellInterfaceServer INFO - Terminate server 31.05.21 14:01:54.376 PLCnextBase.Internal.PLCnext.ShellInterfaceServer INFO - Terminated 31.05.21 14:01:54.715 CommonRemoting INFO - Remote client disconnects explicitly, connectionId = AFBE318B 31.05.21 14:01:54.718 CommonRemoting INFO - Remote client disconnects explicitly, connectionId = 8E977EAB 31.05.21 14:01:54.868 Arp.Plc.Domain.Internal.PlcManager ERROR - Reverted all yet loaded components. 31.05.21 14:01:54.870 Arp.Services.Ehmi.EhmiComponent INFO - 2646614720 EhmiComponent: OnPlcUnloaded, onError=true [/quote] This is my configuration: - PLCnextEngineer 2021.3 - Target on PLCnextEngineer AXC F 2152 FW 2021.0 - Device AXC F 2152 running FW 2021.0.5 P.S.: Can you confirm that it’s not possible to use a TON inside an Exception Event Task? It seems to be executed only once. Thanks for your help! Marcello

Hi Marcello, I’ve just tried the Get_Exceptio_Info FB with Engineer 2021.3 and FW 2021.0.5 without any issues, I’ll forward the example to you by mail. I can also confirm that the Exception Task will only executed once, so you can use a loop, but no TONs. Take care, Frank