Problems running C/C++ Examples on a AXC F 3152

Hello,

I am testing the PLCnext Controller AXC F 3152.

We want to create our own software and run it on the controller. To this end, I am testing the C/C++ examples shown in the “getting-started” section of GitHub - PLCnext/SampleRuntime: Integration example for other runtime systems using the PLCnext ANSI C interface · GitHub.

After several days of troubleshooting, I have identified a reproducible issue:

As soon as I install a program that uses the PLCnext API, it is no longer possible to restart the plcnext service.

After the initial installation or a power cycle, the “Runtime” program starts and writes the board temperature to the log.

After running

sudo systemctl stop plcnext

the service does not shut down cleanly.

Here is a log excerpt:

Jul 06 11:35:37 axcf3152 Arp.System.Application[1913]: 2026-07-06T11:35:37.576544 FATAL - Terminate application after unexpected exception:
Jul 06 11:35:37 axcf3152 Arp.System.Application[1913]: Exception of type ‘Arp::Base::Core::Exception’ was thrown:
Jul 06 11:35:37 axcf3152 Arp.System.Application[1913]: Singleton instance of type ‘Arp::System::Ve::Internal::ServiceFactory’ was not created yet!
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: 2026-07-06T11:35:38.580393 FATAL - Signal SIGABRT occured in thread ‘Arp.System.Appl’.
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: Stacktrace:
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libc.so.6(+0x3b0e0) [0x7f53abf640e0]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libc.so.6(+0x881dc) [0x7f53abfb11dc]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libc.so.6(gsignal+0x16) [0x7f53abf64036]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libc.so.6(abort+0xc9) [0x7f53abf4d8a7]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libArp.System.Acf.so(+0x6b30d) [0x7f53ad34030d]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libstdc++.so.6(+0xb416a) [0x7f53ac1bb16a]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libstdc++.so.6(+0xb31e9) [0x7f53ac1ba1e9]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libstdc++.so.6(__gxx_personality_v0+0x86) [0x7f53ac1ba8f6]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libgcc_s.so.1(+0x1a929) [0x7f53ac639929]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libgcc_s.so.1(_Unwind_RaiseException+0x311) [0x7f53ac63a061]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libstdc++.so.6(__cxa_throw+0x3a) [0x7f53ac1bb41a]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libArp.System.Ve.so(+0x275b6) [0x7f53abdb95b6]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at Arp::System::Ve::Internal::ServiceObjectBase::~ServiceObjectBase()
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at Arp::System::Ve::Internal::Linux::SharedLibraryService::~SharedLibraryService()
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libArp.System.Acf.so(+0x9e14f) [0x7f53ad37314f]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libArp.System.Acf.so(+0x9e0c0) [0x7f53ad3730c0]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libArp.System.Acf.so(+0x9e0c0) [0x7f53ad3730c0]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at Arp::System::Acf::Internal::Pm::ProcessManager::UnloadSharedLibraries()
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libArp.System.Acf.so(+0x88bd9) [0x7f53ad35dbd9]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libc.so.6(+0x3d2f6) [0x7f53abf662f6]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libc.so.6(+0x3d42e) [0x7f53abf6642e]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libc.so.6(+0x25f42) [0x7f53abf4ef42]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/lib/libc.so.6(__libc_start_main+0x89) [0x7f53abf4eff9]
Jul 06 11:35:38 axcf3152 Arp.System.Application[1913]: at /usr/bin/Arp.System.Application(+0x4c7e5) [0x55b2a7e507e5]
Jul 06 11:35:39 axcf3152 systemd[1]: plcnext.service: Main process exited, code=exited, status=134/n/a
Jul 06 11:35:40 axcf3152 systemd[1]: plcnext.service: Failed with result ‘exit-code’.
Jul 06 11:35:40 axcf3152 systemd[1]: plcnext.service: Unit process 1938 (Arp.System.Appl) remains running after unit stopped.
Jul 06 11:35:40 axcf3152 systemd[1]: Stopped PLCnext Application.

Running sudo systemctl start plcnext naturally doesn’t work. A reboot or power cycle is necessary.

My setup:

  • PLCNext Engineer 2026.3
  • Controller in the project is set to 00/2026.0.0
  • Controller AXC F 3152 HW 03, no modules installed
  • Firmware Controller 2026_0_4_LTS
  • Toolchain PLCnext_Toolchain_Linux_2026.0-LTS
  • sdk axcf3152_linux_sdk-2026.0.1_LTS-26.0.1.68
  • target in the project is set to AXCF3152,26.0.1.68

A reliable restart of the plcnext service is essential for the productive use of the AXC F 3152 controller.

Can anyone help?
Has anyone successfully got C/C++ programs running on the 3152 controller?

Many thanks.

Peter Müller

Problem evidently found.

I strictly followed the examples at SampleRuntime/getting-started at master · PLCnext/SampleRuntime · GitHub and am simply reading the board temperature using deviceStatusService->GetItem("Status.Board.Temperature.Centigrade");, subject to the condition that initialization has taken place following PlcOperation_StartWarm. In the examples, this corresponds to the global variable intialised.

However, it is necessary to take the PLC state into account and only access the system while the state is set to processing. In the examples, this corresponds to the global variable processing.

That whole tutorial needs to be reviewed and updated for the latest firmware and best practices.

The current tutorial (which is based on the complete Sample Runtime application in part 7) uses events from the PLC component to determine when the startup of the PLCnext Runtime has reached a point where RSC clients can successfully connect to RSC services. This isn’t ideal, not least because some Runtime applications may want to use RSC services without having the PLC component enabled. I think there is a better alternative, and I am currently discussing with the developers if the SampleRuntime application in part 7 can be updated to show that.

However - all of this doesn’t solve the problem of the SIGABRT message that you saw when the PLCnext Runtime shuts down. The current tutorial does not include a clean way of shutting down the Runtime application, and I hope this can also be added in the near future. One option I’ve tried (with some success, I think) is to register a callback for the SIGABRT signal:

   signal(SIGABRT, handleSigabrt);

… and then shut down/exit the Runtime application when that signal is received.

Hello,

I had actually already installed a signal handler and observed SIGABRT, but then I found the solution using the PLC state.
I will analyze the matter further and report back.

In any case, I can continue working.

Many thanks.

Peter

1 Like