PROGRAM PLC_PRG
VAR
xOneTime : BOOL := TRUE;
sInput, sOutput : STRING;
refInput, refOutput : REFERENCE TO STRING;
result : POINTER TO SysProcess.SysTypes.RTS_IEC_RESULT;
sMyIP: STRING;
END_VAR
IF xOneTime THEN
sInput:= 'ip -f inet addr show eth0 | sed -En -e "s/.*inet ([0-9.]+).*/\1/p"';
refInput REF= sInput;
refOutput REF= sOutput;
SysProcessExecuteCommand2(pszCommand:=refInput, pszStdOut:=refOutput, udiStdOutLen:=SIZEOF(sOutput), pResult:=ADR(result));
// IP приходит с завершающим символом, который нужно убрать.
sMyIP := LEFT(sOutput, LEN(sOutput)-1);
xOneTime:= FALSE;
END_IF
myIP.png
Нужно бы еще конечно добавить проверку IP от беспроводной сети. Ведь Raspberry может быть подключена и по WiFi. Тогда команда в Linux будет:
'ip -f inet addr show wlan0 | sed -En -e "s/.*inet ([0-9.]+).*/\1/p"'
Т.е. если по eth0 возвращается строка с длинной 0, то повторять процедуру для wlan0.
Скрытый текст:
Зачем мне нужно знать свой IP?
На этой плате Raspberry запущен сервер на другом порту, который отдает видео от видеокамеры. Камера наблюдает за испытуемым изделием.
А на основной странице CodeSys вставлен графический элемент Web-сервер. Так вот в поле URL и вставлен наш IP в виде
"http://my_IP:my_Port". Если перенести это устройство в другую сеть, то адрес видео-сервера автоматически определится. А основная программа загружается сама в браузере в режиме киоска. Профит! Видео.png
Последний раз редактировалось ВладОвен; 30.08.2022 в 11:15.