SysFileOpen funktioniert nur in /tmp-Verzeichnis

User2

Level-2
Beiträge
30
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo zusammen,

ich arbeite mit einem WAGO PFC200 Controller mit FW 26.

Die SysFileOpen öffnet problemlos Dateien aus dem /tmp Verzeichnis.

Dateien aus /proc oder /home gehen nicht. Error ist dez=39 oder hex=27. Dieser Code ist in Cmp.Errors aber nicht aufgeführt...

1720792591145.png

Für alle Ordner (tmp, proc, home) ist Lesezugriff für alle Nutzergruppen erlaubt. Nur bei tmp auch Schreibrechte für alle. Ich vermute, dass es etwas damit zu tun hat, obwohl im Funktionsaufruf ja nur Lesezugriff gefordert wird.

hatte von euch schon jemand das Problem und weiß, was da hilft oder ob es gar nicht geht ?

Ich möchte Dateien aus /proc lesen.

Danke schonmal für alle Antworten und LG
 
Release Notes zu FW(26)
https://downloadcenter.wago.com/api/uploads/2024_06_20_Release_Notes_750_8x1x_82193145d3.pdf
"Runtime file access is limited to /home/codesys, /media/sd, /tmp"
Danke, das erklärt es natürlich...

Ach und noch ein Hinweis für die Zukunft.
Nach der Einstellung von e!Cockpit nutzt WAGO ein nativeres Codesys, dennoch solltest Du Fragen zu Themen bei der eine WAGO SPS zum Einsatz kommt unter WAGO posten, da die dort mitlesen.
Stimmt, danke für den Hinweis. War mir auch unsicher, ob das Problem an Codesys oder WAGO liegt...
 
Du könntest versuchen die CPU-Last als 'cat /proc/loadavg' mit WagoSysProcess.FuExecuteCommand() auszulesen. Habe ich aber seit der Beschränkung der Runtime-Rechte auch noch nicht getestet. Würde mich also über Feedback freuen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du könntest versuchen die CPU-Last als 'cat /proc/loadavg' mit WagoSysProcess.FuExecuteCommand() auszulesen. Habe ich aber seit der Beschränkung der Runtime-Rechte auch noch nicht getestet. Würde mich also über Feedback freuen.
Das hatte ich schon probiert - damit geht es. Worauf man aber achten sollte, ist dass der Buffer dieser Funktion auf 255 Bytes begrenzt ist. /proc/meminfo kann deshalb nicht ausgelesen werden. Deshalb habe ich dann SysProcess.FuExecuteCommand2 genutzt.


Gibt es hier eigentlich Sicherheitsbedenken, wenn man die Möglichkeit hat Systemcalls mit Root durchzuführen? Ich weiß, dass einige Commands nicht gehen ( steht in der Lib), aber würdet ihr das in eure Steuerung reinprogrammieren? Bin momentan noch an einer Alternativlösung, wo ich die Daten über einen Dockercontainer in ein json-File schreibe und dann nur SysFile.Open nutze…
 
Der Weg über den Container bedeutet viel Aufwand in der Entwicklung und Pflege. Vom zusätzlichen CPU-Verbrauch mal ganz zu schweigen. Ich würde eher die Linux-Befehle verfeinern, um gezielt die Info zu lesen, die Du suchst.
Code:
grep 'cpu ' /proc/stat | awk '{cpu_usage=($2+$4)*100/($2+$4+$5)} END {print cpu_usage "%"}'
oder
Code:
cat /proc/meminfo | grep MemAvailable

Sicherheitsbedenken habe ich persönlich nicht. Jemand mit Zugriff auf die Runtime sollte alles tun dürfen. Aber der Trend bei WAGO und anderen Herstellern geht ganz klar gegen meine Präferenz hin zu Dummy-Anwender, wie am Smartphone.
 
Stimmt. grep und awk zu nutzen hatte ich ganz zu Beginn verworfen, weil ich damit mal versucht hatte den top-Output entsprechend zu verfeinern und das hatte immer nicht geklappt sobald ich grep oder awk mit hinzugenommen habe.

Eben aber interessehalber nochmal deine Befehle probiert und die laufen - danke für den Anstoß.

Ein Gedanke war, dass das Programm möglichst unabhängig vom Hersteller eingesetzt werden kann und ich weiß nicht, ob man bei anderen Herstellern die Befehle absetzen kann, da das Linux ja oft geschlossen ist - deshalb Docker. Aber da müsste ich eigentlich nochmal eine Analyse machen, wie die Lage wirklich ist.
 
Zurück
Oben