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?
Windows Compiler kennt keine Linux spezifischen Symbole. Die Pfade mit Laufwerksbuchstaben gibt es nur unter Windows.
Matthias S. schrieb: > Ich habe dann festgestellt, dass im Projekt unter "Konfiguration" der > Zieltyp auf "Win32" steht und habe diesen auf Linux umgestellt. Warum? Den Fehlermeldungen nach zu urteilen, ist das System Win32.
:
Bearbeitet durch User
Mist, ich habe nicht drangedacht dass dieses Forum ja ein anderes Tagsystem hat, Verzeihung dafür. Frank D. schrieb: > Scheinen wohl die includes für die SIG* zu fehlen. Naja, gut, aber es ist halt ein grafischer Editor der die Files ausspuckt, wichtig wäre: wie bekomme ich den dazu, die reinzubringen? Jim M. schrieb: > Die Pfade mit Laufwerksbuchstaben gibt es nur unter Windows. Der Editor läuft unter Windows. Die Runtime unter Linux. In der Runtime ist als Hardware "Blank Linux" eingestellt. Rolf M. schrieb: > Warum? Den Fehlermeldungen nach zu urteilen, ist das System Win32. War ein Versuch, da das Zielsystem ja ein Linux ist. Ich habe es jetzt auch tatsächlich mit dem Beispielprojekt "MQTT Send" ausprobiert, erstmal ohne was zu ändern und dann auch wieder in den Projekteigenschaften auf Linux umgestellt. Vom Grundprinzip die gleichen Fehlermeldungen. Ich muss ja dazusagen: ich versuche mich da jetzt auch irgendwie durchzuwurschteln, weil ich da bis dato irgendwie noch nix Vernünftiges was mir hilft in der Doku oder Tutorials gefunden habe.
:
Bearbeitet durch User
Dank dem OpenPLC-Forum weiß ich was schief läuft: Die OpenPLC-Runtime kann kein MQTT, das ist (bestimmten?) Arduino-Geräten vorbehalten. Wahrscheinlich hat so ein PC einfach zu viel Power für MQTT. Und warum es da keine mehrsagende Fehlermeldung gibt, erschließt sich mir auch nicht. Fällt halt beides unter "ist so, wenns dir nicht gefällt such dir was anderes". Schulterzuck Das Blinkbeispiel ist sofort ohne irgendwas geändert zu haben gelaufen. Damit gehe ich jetzt davon aus, dass man in der Projektkonfiguration tatsächlich nicht das Zielsystem auswählt, sondern den Compiler der verwendet wird. Und der Linux-Compiler kann natürlich nicht mit Windows-Dateipfaden umgehen. Danke für die Hilfeversuche.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.