Hallo,
ich habe auf einem Linux-System mithilfe von Docker die OpenPLC-Runtime zum laufen gebracht. Nun wollte ich ein erstes Programm basteln. Da der Rechner keine echten I/Os hat, habe ich mir das MQTT-Beispiel angesehen und dieses in angepasster Form in FUP nachgebaut. Die Simulation wurde kompiliert, und ich konnte dann eine *.st-Datei erstellen und hochladen. Damit hatte dann aber die Runtime Probleme: <code> Generating C files... ./st_files/451874.st:3-21..3-32: error: invalid specification in variable declaration. [...] ./st_files/451874.st:11-3..11-23: error: invalid variable before ':=' in ST assignment statement. ./st_files/451874.st:11-41..11-42: error: ';' missing at the end of statement in ST statement. [...] ./st_files/451874.st:14-52..14-52: error: invalid statement in ST statement.
20 error(s) found. Bailing out! Error generating C files Compilation finished with errors!</code>
Ich habe dann festgestellt, dass im Projekt unter "Konfiguration" der Zieltyp auf "Win32" steht und habe diesen auf Linux umgestellt. Damit klappt dann aber das erstellen nicht mehr: <code>Zeige build in D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build Generiere SoftPLC IEC-61131 ST/AWL/AS Code... Collecting data types Collecting POUs Generate POU shc Generate Config(s) Kompilliere IEC Programm zu c-Code... Extrahiere gefundene Variablen... C Code erfolgreich generiert. SPS : [CC] plc_main.c -> plc_main.o D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c: In function 'PLC_SetTimer': D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c:180:30: error: 'SIGUSR1' undeclared (first use in this function) 180 | pthread_kill(PLC_thread, SIGUSR1); | ^~~~~~~ D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c:180:30: note: each undeclared identifier is reported only once for each function it appears in D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c: In function 'PLCThreadSignalHandler': D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c:193:16: error: 'SIGUSR2' undeclared (first use in this function) 193 | if (sig == SIGUSR2) | ^~~~~~~ D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c: In function 'startPLC': D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c:359:16: error: 'SIGUSR1' undeclared (first use in this function) 359 | signal(SIGUSR1, PLCThreadSignalHandler); | ^~~~~~~ D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c:361:16: error: 'SIGUSR2' undeclared (first use in this function) 361 | signal(SIGUSR2, PLCThreadSignalHandler); | ^~~~~~~ D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c: In function 'stopPLC': D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c:398:30: error: 'SIGUSR2' undeclared (first use in this function) 398 | pthread_kill(PLC_thread, SIGUSR2); | ^~~~~~~ "gcc" -c "D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.c" -o "D:\Eigene Dateien\Nextcloud\Documents\OpenPLC\SHC\build\plc_main.o" -O2 -fPIC -Wno-implicit-function-declaration -Wno-int-conversion "-IC:\Users\user\OpenPLC_Editor\matiec\lib\C" -w Beendet mit Status 1 (pid 17948) C Kompilierung von plc_main.c fehlgeschlagen. C Build fehlgeschlagen.</code>
Kann mir jemand verraten, was hier schief läuft?