COM Port в Debian
Модератор: Модераторы
COM Port в Debian
Добрый день
Есть комп с ARM процессором, на нем стоит Debian
К COM порту подключено устройство, которое каждые 300 мсек посылает статус, а так же может принимать команду.
Если посылать команды через консоль, то все проходит хорошо.
На комп поставлен Lazarus 1.6 (с репозитория), FPC 3.0.0
Запускается и компилируется пустая форма хорошо.
Создал в программе отдельный поток, чтобы постоянно слушал статус с устройства. Пустой поток запускается нормально.
Работать с ком портом хочу как с файлом.
Добавляю туда библиотеки jwawinbase и jwawiint
Иначе не известная функция CreateFile.
Пишу функцию на создание файла. Компилирую и выходят две ошибки
1. jedi.inc(404,4) Error: Illegal assembler style specified "INTEL"
2. jwawinbase.pas (64,3) Fatal: Cannot find Windows used by wawinbase
Как от них избавится?
По второй ошибке: файл windows.pas я вобще в среде разработки не нашел, хотя он просит именно его
Есть комп с ARM процессором, на нем стоит Debian
К COM порту подключено устройство, которое каждые 300 мсек посылает статус, а так же может принимать команду.
Если посылать команды через консоль, то все проходит хорошо.
На комп поставлен Lazarus 1.6 (с репозитория), FPC 3.0.0
Запускается и компилируется пустая форма хорошо.
Создал в программе отдельный поток, чтобы постоянно слушал статус с устройства. Пустой поток запускается нормально.
Работать с ком портом хочу как с файлом.
Добавляю туда библиотеки jwawinbase и jwawiint
Иначе не известная функция CreateFile.
Пишу функцию на создание файла. Компилирую и выходят две ошибки
1. jedi.inc(404,4) Error: Illegal assembler style specified "INTEL"
2. jwawinbase.pas (64,3) Fatal: Cannot find Windows used by wawinbase
Как от них избавится?
По второй ошибке: файл windows.pas я вобще в среде разработки не нашел, хотя он просит именно его
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Timofey, возможно, что библиотеки заточены под винду, поэтому требуют windows.pas
А стиль ассемблера легко меняется директивой
Локально
и глобально в настройках компилятора.
А стиль ассемблера легко меняется директивой
Локально
Код: Выделить всё
$ASMMODE XXX Выбор типа ассемблера. XXX=
att – синтаксис AT&T,
intel – синтаксис Intel,
direct – прямая вставка.и глобально в настройках компилятора.
Ведь ясно пишет хто хочет Windows Unit, который только для Windows!!! Используйте SynaSer unit из Synapse.
wiki example http://wiki.freepascal.org/Hardware_Access
wiki example http://wiki.freepascal.org/Hardware_Access
Спасибо за ответы.
Нашел и поставил SynaSer unit из Synapse. Установил полностью весь пакет.
Модуль подключил, никаких переменных пока не объявлял.
При компиляции и сборке выдает ошибку
synafpc.pas(141,1) Error: Can't call the assembler, error -1 switching to external assembling
Причем если щелкнуть на ошибку, то выделяет процедуру Sleep в этой файле. В этой процедуре идет простой вызов sysutils.sleep с передачей параметров. Больше ничего
Что может быть?
И еще вопрос, в этом наборе synapse есть и модули для работы с TCP/IP? Можно ли их использовать? Удобные ли? Мне необходимо сделать ModbusTCP
Нашел и поставил SynaSer unit из Synapse. Установил полностью весь пакет.
Модуль подключил, никаких переменных пока не объявлял.
При компиляции и сборке выдает ошибку
synafpc.pas(141,1) Error: Can't call the assembler, error -1 switching to external assembling
Причем если щелкнуть на ошибку, то выделяет процедуру Sleep в этой файле. В этой процедуре идет простой вызов sysutils.sleep с передачей параметров. Больше ничего
Что может быть?
И еще вопрос, в этом наборе synapse есть и модули для работы с TCP/IP? Можно ли их использовать? Удобные ли? Мне необходимо сделать ModbusTCP
Synaser весной брал отсюда https://sourceforge.net/p/synalist/code/HEAD/tree/trunk/ (Кнопка "Download Snapshot")
Компилил на Raspberry Pi 2B. Lazarus 1.6/fpc2.6.4
До сих пор все нормально работает (в том числе и на Raspberry Pi 3).
Добавлено спустя 2 минуты 52 секунды:
Synapse TCP/IP and serial library
А Modbus реализован в PascalSCADA, например.
Компилил на Raspberry Pi 2B. Lazarus 1.6/fpc2.6.4
До сих пор все нормально работает (в том числе и на Raspberry Pi 3).
Добавлено спустя 2 минуты 52 секунды:
Synapse TCP/IP and serial library
А Modbus реализован в PascalSCADA, например.
ModbusTCP в PascalScada только клиент. ModbusTCP работает через Ethernet.
Modbus RTU (PascalScada) через /dev/ttySx (x - номер порта), для USB /dev/ttyUSBx или /dev/ttyACMx (x - номер порта).
dmeg |grep serial - получите посл. порты в системе.
Использую PascalScada ModbusTCP/Modbus RTU без проблем Windows/Linux x86. Под не ARM пробывал.
http://www.pascalscada.com/
Modbus RTU (PascalScada) через /dev/ttySx (x - номер порта), для USB /dev/ttyUSBx или /dev/ttyACMx (x - номер порта).
dmeg |grep serial - получите посл. порты в системе.
Использую PascalScada ModbusTCP/Modbus RTU без проблем Windows/Linux x86. Под не ARM пробывал.
http://www.pascalscada.com/
Спасибо, посмотрю. Мне и нужен ModbusTCP клиент. Сервер запущен на железке.
попробуй это посмотреть https://sourceforge.net/projects/mbutils/files/
Остался еще один вопрос:
Порт подключился, данные отправляю и получаю. Но программа при этом жутко подтормаживает и загрузка процессора 100%.
При создании потока идет открытие порта и конфигурирование.
Дальше бесконечный цикл, пока не придет команда на завершения потока. В цикле всего одна функция Sleep(500).
По сути никакого чтения и записи (закоментировал). При этом поток кушает весь процессор.
Может быть это связано с тем, что постоянно идут данные на порт? Как этого избежать?
Если я не вызываю функцию соединения, то все ОК
Порт подключился, данные отправляю и получаю. Но программа при этом жутко подтормаживает и загрузка процессора 100%.
При создании потока идет открытие порта и конфигурирование.
Дальше бесконечный цикл, пока не придет команда на завершения потока. В цикле всего одна функция Sleep(500).
По сути никакого чтения и записи (закоментировал). При этом поток кушает весь процессор.
Может быть это связано с тем, что постоянно идут данные на порт? Как этого избежать?
Если я не вызываю функцию соединения, то все ОК
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Timofey, создать отдельный поток/процесс слушающий порт. Как не знаю... но на форуме должно быть. Ну или слушать в таймере.
Лекс Айрин поток и так отдельный. Просто из-за этого весь комп подтормаживает
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Timofey, тогда попробуй в таймер кинуть и убрать Sleep (ну и поток, заодно)
Лекс Айрин Тоже пробовал. Тогда конкретно подвисает окно
Я даже просто при создании формы открывал соединение и таймер не запускал. Чтобы просто порт был открыт и всё. И программа сразу начинала зависать. Дополнительный поток в этот момент был отключен.
Я даже просто при создании формы открывал соединение и таймер не запускал. Чтобы просто порт был открыт и всё. И программа сразу начинала зависать. Дополнительный поток в этот момент был отключен.
MODBUS TCP из PascalScada и так уже в потоке получает и отправляет данные. Доп. поток не надо создавать. Обрабатывайте Ivents класса.
