Forum: PC-Programmierung [OpenPLC] Kompilieren schlägt fehl


von Matthias S. (da_user)


Lesenswert?

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?

von Frank D. (Firma: LAPD) (frank_s634)


Lesenswert?

Scheinen wohl die includes für die SIG* zu fehlen.

von Jim M. (turboj)


Lesenswert?

Windows Compiler kennt keine Linux spezifischen Symbole.

Die Pfade mit Laufwerksbuchstaben gibt es nur unter Windows.

von Rolf M. (rmagnus)


Lesenswert?

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
von Matthias S. (da_user)


Lesenswert?

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
von Matthias S. (da_user)


Lesenswert?

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
Noch kein Account? Hier anmelden.