<< Click to Display Table of Contents >> Navigation: Modbus Universal MasterOPC Server > Исполнительная система для Linux > Работа с OPC сервером > Проброс TCP и COM портов |
Мы рекомендуем отладить работу конфигурации ОРС сервера на Windows, а затем перенести ее на Linux систему - при таком подходе конфигурирование будет выполняться быстрее.
Однако как быть, если с Windows компьютера нет доступа к нужному оборудованию? Например прибор подключен к удаленной Linux машине к COM порту, и подключить его к компьютеру разработчика не возможно. В этом случае можно пробросить порты и проводить отладку, как если бы приборы были подключены напрямую.
Для решения данной задачи можно использовать специальную Linux утилиту socat:
http://www.dest-unreach.org/socat/doc/socat.html
Для того, чтобы установить socat из репозитория необходимо выполнить команду в терминале:
sudo apt-get install socat -y
Socat обладает обширным количеством параметров запуска, которые описаны на сайте программы. Ниже мы разберем наиболее типовые варианты использования. Мы не будем давать полного описания каждой команды - детальное описание к каждой из них вы также можете посмотреть на сайте программы.
Прежде чем пробрасывать СОМ порт необходимо определить параметры этого порта - его имя, а также установить скорость. Для того чтобы определить имя порта воспользуйтесь командой:
dmesg | grep tty
Команда выведет список портов.
В данном случае доступен стандартный порт tty0 (COM1) и USB0 - конвертер USB-COM с чипом FTDI, его мы и будем пробрасывать - его полное имя будет /dev/ttyUSB0. Именно этот порт мы будет использовать в дальнейшем рассмотрении, вам же нужно будет в командах указывать свое имя порта.
Чтобы посмотреть установки скорости воспользуемся командой:
sudo stty -F /dev/ttyUSB0 -a
Как мы видим скорость установлена в 9600. Если требуется другая скорость, то установите ее командой (в данном случае устанавливаться скорость 9600):
sudo stty -F /dev/ttyUSB0 9600
Можно после этого попробовать выполнить отправку чего либо в порт. Для этого используется команда:
echo -en "ABCD" > /dev/ttyUSB0
Если у вас используется USB конвертер, то при отправке на нем должен моргнуть индикатор передачи. Если же выдалась ошибка доступа, то попробуйте установить права доступа на файл (COM порты в Linux представлены как файлы), с помощью команды:
sudo chmod -R 777 /dev/ttyUSB0
Если все успешно, то можно выполнять проброс. Для того чтобы перенаправить поток из TCP порта в COM порт нужно выполнить команду socat:
socat /dev/ttyUSB0,raw TCP-LISTEN:8282&
В данном случае в socat передается имя нашего СОМ порта, с параметром raw - сырые данные (т.е. данные никак не обрабатываются, а просто пересылаются). TCP:LISTEN:8282 - это включение прослушивания TCP порта 8282 (режим TCP сервера), все приходящие на данный порт данные будут пересылаться на СОМ порт. Символ & (амперсанд) в конце означает что команда будет запущена в отдельном потоке. Можно опустить данный символ, но в таком случае socat будет работать в потоке терминала, пока вы не нажмете CTRL+C, при этом ввод других команд будет не доступен. Поэтому лучше запускать в отдельном потоке.
Чтобы остановить выполнение socat запущенного в потоке можно убить процесс который обращается к нужному порту, для этого используется команда:
fuser -k 8282/tcp
После того как был выполнен проброс, можно из OPC сервера обращаться на TCP порт 8282. При этом, если вы работаете по Modbus RTU, то в настройках узла в ОРС нужно включить настройку "Modbus поверх TCP", иначе ОРС будет посылать запросы формата Modbus TCP, которые будут проигнорированы прибором, если вы используете собственный протокол (например написанный на скриптах), то это делать не обязательно.
Если вам требуется выполнить обратную операцию - из COM порта на Linux, подключиться как клиент на TCP порт, и транслировать на него данные поступающие на COM порт, то для этого используется команда:
sudo socat pty,link=/dev/ttyUSB0,raw tcp:192.168.198.1:8282&
В данном случае данные с порта USB0 будут направлены на TCP сервер находящийся по IP адресу 192.168.198.1 на порт 8282.
Если на стороне компьютера вам также нужно выполнить преобразование из COM в TCP то вам потребуется:
1.COM0COM - входит в поставку ОРС сервера и находится в папке c:\Program Files\MPSSoft\MasterOPC Universal Modbus Server\com0com\. Инструкция по установке и настройки данной утилиты входит в справочную систему ОРС сервера.
2.Serial-to-IP - утилита с простым графическим интерфейсом которая преобразует данные из TCP порта в COM, при этом утилита может работать как в режиме TCP клиента, так и в режиме TCP сервера. Скачать утилиту можно по ссылке.
Если требуется пробросить один TCP порт на другой, то используйте команду:
sudo socat TCP-LISTEN:502,fork,reuseaddr TCP:192.168.198.131:502&
В данном случае будет прослушиваться порт 502 Linux компьютера, и данные поступающие с него будут отправляться также на 502 порт компьютера с IP адресом 192.168.198.131.
Например, вы проводили отладку с прибором с протоколом Modbus RTU, используя проброс COM порта, при этом в ОРС сервере использовали TCP подключение с режимом "Modbus поверх TCP". Пока проброс socat активен, вы можете перебросить эту конфигурацию на Linux компьютер и запустить ее - OPC обратится к заданному вами порту (для него это будет локальный порт) и обмен будет работать. Но когда объект нужно ставить в эксплуатацию эти лишние звенья следует исключить. Чтобы быстро исправить тип узла в конфигурации с TCP на COM, воспользуйтесь групповыми операциями над узлами - для этого вызовите контекстное меню корневого узла сервера.
В появившемся окне измените тип узла на нужный вам:
Нажмите Готово, и в настройках узла задайте порт.
Примечание. Параметры портов также можно установить через групповые операции
Подробнее групповые операции с узлами описаны в соответствующем разделе справочной системы.