COM Port в Debian

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Timofey
новенький
Сообщения: 10
Зарегистрирован: 19.08.2016 16:02:31

COM Port в Debian

Сообщение Timofey »

Добрый день

Есть комп с 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 – прямая вставка.

и глобально в настройках компилятора.
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

А почему не использовать Ararat Synapse? Прекрасно работает с COM портом.
mig-31
постоялец
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Сообщение mig-31 »

Ведь ясно пишет хто хочет Windows Unit, который только для Windows!!! Используйте SynaSer unit из Synapse.

wiki example http://wiki.freepascal.org/Hardware_Access
Timofey
новенький
Сообщения: 10
Зарегистрирован: 19.08.2016 16:02:31

Сообщение Timofey »

Спасибо за ответы.
Нашел и поставил 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
v-t-l
энтузиаст
Сообщения: 744
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

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, например.
mig-31
постоялец
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Сообщение mig-31 »

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/
Timofey
новенький
Сообщения: 10
Зарегистрирован: 19.08.2016 16:02:31

Сообщение Timofey »

Спасибо, посмотрю. Мне и нужен ModbusTCP клиент. Сервер запущен на железке.
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

Сообщение DYUMON »

попробуй это посмотреть https://sourceforge.net/projects/mbutils/files/
Timofey
новенький
Сообщения: 10
Зарегистрирован: 19.08.2016 16:02:31

Сообщение Timofey »

Остался еще один вопрос:
Порт подключился, данные отправляю и получаю. Но программа при этом жутко подтормаживает и загрузка процессора 100%.
При создании потока идет открытие порта и конфигурирование.
Дальше бесконечный цикл, пока не придет команда на завершения потока. В цикле всего одна функция Sleep(500).
По сути никакого чтения и записи (закоментировал). При этом поток кушает весь процессор.
Может быть это связано с тем, что постоянно идут данные на порт? Как этого избежать?
Если я не вызываю функцию соединения, то все ОК
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Timofey, создать отдельный поток/процесс слушающий порт. Как не знаю... но на форуме должно быть. Ну или слушать в таймере.
Timofey
новенький
Сообщения: 10
Зарегистрирован: 19.08.2016 16:02:31

Сообщение Timofey »

Лекс Айрин поток и так отдельный. Просто из-за этого весь комп подтормаживает
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Timofey, тогда попробуй в таймер кинуть и убрать Sleep (ну и поток, заодно)
Timofey
новенький
Сообщения: 10
Зарегистрирован: 19.08.2016 16:02:31

Сообщение Timofey »

Лекс Айрин Тоже пробовал. Тогда конкретно подвисает окно :)
Я даже просто при создании формы открывал соединение и таймер не запускал. Чтобы просто порт был открыт и всё. И программа сразу начинала зависать. Дополнительный поток в этот момент был отключен.
mig-31
постоялец
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Сообщение mig-31 »

MODBUS TCP из PascalScada и так уже в потоке получает и отправляет данные. Доп. поток не надо создавать. Обрабатывайте Ivents класса.
Ответить