При связи по TCP/IP из под wine проблема в том, что CODESYS пытается перед подключением пинговать ПЛК. Для выполнения этой операции (посылка ICMP-пакета) программа должна быть запущена с повышенными привелегиями. Чтобы не наделять ее полными привелегиями рута, можно ей явно разрешить raw доступ к сети. Это делается с помощью механизма capabilities, а именно нужна cap_net_raw.
Для себя я написал небольшую программку для запуска CODESYS c cap_net_raw, а утилитам wine & wine-preloader разрешил наследовать cap_net_raw от родительского процесса и передавать ее дочернему процессу.
В Debian Jessie делается это следующими командами:
sudo setcap cap_net_raw+eip ./run_codesys
sudo setcap cap_net_raw+ei /usr/lib/i386-linux-gnu/wine/bin/wine
sudo setcap cap_net_raw+ei /usr/lib/i386-linux-gnu/wine/bin/wine-preloader
Исходник программки прилагаю. Вдруг кому-нибудь будет полезно.
У вас какая системная локаль? Попробуйте запустить LC_ALL=ru_RU.utf-8 wine <path-to-codesys>/Codesys.exe
Не знаю, что за фигня. Делал и так, делал и сразу на вайн:
а не работает.Код:sudo setcap cap_net_raw+eip /usr/bin/wine sudo setcap cap_net_raw+eip /usr/bin/wine-preloader
Всего-то ничего нужно, дать команду
Из виртуальной хрюши запускается, из линукс-минт под вайном - не хочет ни в какую.Код:plc_io /TCP192.168.0.199 /get file.bin
Самое обидное - когда-то вроде пошло, я решил, что дело в шляпке, написал скриптик на пайтоне, куда включил (через модуль subprocess32) запуск wine с указанной строкой аргументов. Вдруг не стало работать. Разбирался с subprocess32, терял время зря, потом вернулся к терминалу, смотрю - агашеньки, а просто команда
уже и не работает.Код:wine plc_io /TCP192.168.0.199 /get file.bin
Стал все эти танцы с capabilities выплясывать - не помогает.
Выпрашивать у коллеги Yegor-а, чтобы он добил свой кряк кодесисного протокола до читалки файлов? Насиловать вайн суперюзером? Напиться и забить? О, это идея...
На slackware (porteus) не работали команды:
sudo setcap cap_net_raw+eip /usr/bin/wine
sudo setcap cap_net_raw+eip /usr/bin/wine-preloader.
Пришлось включить опцию ядра
CONFIG_AUFS_XATTR=y
После сборки ядра, все ок. Codesys нормально заливает в контроллер через эзернет под обычным пользователем.