Update to 2025.0.3 firmware

We have recently update our project with c++ code base from firmware 2024.0.8 to 2025.0.3
We followed all the steps online and updated our C++ code. We can compile and upload our project to the controller (AXCF2152) succesfully. However, when the controller starts we get a InvalidOperationException error on some ports in the GDS. I have attached the error log for one of the ports below. The errors are thrown both on Ports that are connected to an IO and ports that are connected between programs

StartPort=‚ThermalManagementComponent1/ThermalManagementProgram1.closeHeatpumpContactor‘ => EndPort=‚Arp.Io.AxlC/5.OUT03‘, Reason: Exception of type ‚Arp::Base::Commons::Exceptions::InvalidOperationException‘ was thrown:
Could not get I/O related output task buffer. Task: ‚thermal_management‘
at Arp::Plc::Gds::Internal::Task::GdsTaskData::GetTaskToIoOutputBuffer(unsigned int) const
at Arp::Plc::Gds::Internal::Connections::GdsConnectionInfosBuilder::CreateTaskToIoDataConnectionInfo(unsigned int, Arp::Plc::Gds::Internal::Config::ConnectorConfig const&, Arp::Plc::Gds::Internal::Config::ConnectorListConfig&, std::shared_ptrArp::Plc::Commons::Io::IIoProvider const&, Arp::Plc::Gds::Internal::GdsMetaManager const&, Arp::Plc::Commons::Internal::Gds::GdsContext const&, Arp::Plc::Gds::Internal::Connections::ConnectionInfos&)
at Arp::Plc::Gds::Internal::Connections::GdsConnectionInfosBuilder::CreateDataConnectionInfo(unsigned int, Arp::Plc::Gds::Internal::Config::ConnectorConfig const&, Arp::Plc::Gds::Internal::Config::ConnectorListConfig&, Arp::Plc::Gds::Internal::GdsMetaManager const&, Arp::Plc::Fbm::FieldbusManager const&, Arp::Plc::Commons::Internal::Gds::GdsContext&, Arp::Plc::Gds::Internal::Connections::ConnectionInfos&)
at Arp::Plc::Gds::Internal::Connections::GdsConnectionInfosBuilder::CreateConnectionInfos(Arp::Plc::Gds::Internal::Config::GdsConfiguration&, Arp::Plc::Commons::Internal::Gds::GdsContext&, Arp::Plc::Gds::Internal::Connections::ConnectionInfos&)
at Arp::Plc::Gds::Internal::GdsDomain::Setup()
at Arp::Plc::Gds::GdsComponent::SetupPlc(bool, Arp::Plc::Domain::Commons::PlcStartKind)
at Arp::Plc::Domain::Internal::PlcOperation::PlcComponentInfo::SetupPlc(bool, Arp::Plc::Domain::Commons::PlcStartKind)
at /usr/lib//libArp.Plc.Domain.so(+0x7ca96) [0xa7f5ea96]
at Arp::Plc::Domain::Internal::PlcOperation::OperationHandler::TryInvokeLoadAndSetupPlc(Arp::Plc::Domain::Internal::PlcOperation::PlcComponentInfo&, bool, std::vector<Arp::Base::Core::String, std::allocatorArp::Base::Core::String > const&)
at Arp::Plc::Domain::Internal::PlcOperation::PlcComponentsController::LoadAndSetupPlcComponents(bool)
at Arp::Plc::Domain::Internal::State::ReadyState::LoadAndSetupPlc()
at Arp::Plc::Domain::Internal::State::StateManager::LoadAndSetupPlc()
at /usr/lib//libArp.Plc.Domain.so(+0x74cb6) [0xa7f56cb6]
at Arp::Plc::Domain::Internal::TaskQueue::SyncTaskQueue::ProcessTask(std::shared_ptrArp::Plc::Domain::Internal::TaskQueue::SyncTask) const
at Arp::Plc::Domain::Internal::TaskQueue::SyncTaskQueue::ProcessTasksInternal(unsigned int)
at Arp::Plc::Domain::Internal::TaskQueue::SyncTaskQueue::ProcessTasks()
at Arp::System::Commons::Threading::TaskThread::RunInternal(void*)
at /usr/lib/libArp.System.Commons.so(+0x197942) [0xb6ba2942]
at Arp::System::Commons::Threading::thread::Impl::RunInternal(void*)
at Arp::System::Ve::Internal::Linux::ThreadService::RunInternal(void*)

It seems that since the update i cannot connect a port directly from my C++ program in a task to another program in another ESM Task. I have to use the Arp.Plc.Eclr prog type for this.

It seems that since the update i cannot connect a port directly from my C++ program in a task to another program in another ESM Task. I have to use the Arp.Plc.Eclr prog type for this.</p>

In every task i have a program that is made in C++ and imported into the PLCNext engineer project and a program which is made in PLCNext. The PLCNext program is able to reach programs of other tasks but the imported C++ program for some reason is not able to use gds to connect ports to another program in another task

I’m not able to reproduce this problem. Here is what I did:

  • Using Toolchain version 2025.0, create a C++ program, using the default template, for the target AXC F 2152 FW 2025.6.0.

  • Add the following two GDS ports to the Program.hpp file:

    //#port
    //#attributes(Input)
    boolean inPort;
    //#port
    //#attributes(Output)
    boolean outPort;

image.png

image.png

image.png

image.png

  • Build the project, which creates a PLCnext Engineer library.
  • In PLCnext Engineer version 2025.9, create a new project using the template for AXC F 2152 FW 2025.6.
  • In the „Main“ program, add two GDS ports:
  • Add the library (created earlier) to the project.
  • Create a new ESM task called „Cyclic200“ on ESM 2.
  • Create an instance of the C++ program in the new ESM task.
  • Here is what the Tasks look like:
  • Connect the two ports from the C++ program instance to the two ports on the Main program instance:
  • Perform a Type 1 reset on the AXC F 2152 FW 2025.6.
  • Set the IP address on the AXC F 2152.
  • Send the PLCnext Engineer project to the AXC F 2152

=> The project starts, and data is exchanged between the GDS ports:
Does this procedure work for you?
If there are still problems with your project, please get in touch with the Phoenix Contact office in your country. They will be able to help with technical support questions like this.