Чтение данных из com порта Linux

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

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

Чтение данных из com порта Linux

Сообщение sergeypankov » 11.07.2009 23:42:19

Здравствуйте!
Есть программа, которую я написал на Delphi используя компонент BComPort (упрощенный вариант CPort Library). Есть устройство, которое посылает данные в виде ASCII кода (различные буквы и цифры) на com порт компьютера. Программа принимает эти данные и отображает в реальном времени в компоненте Memo на форме (потом данные берутся из Memo и дальше программа выводит их красиво на форму в компоненты Label-ы). Скорость работы с com портом 19200. Буфер очищается через каждые 10 секунд (стоит таймер в программе), иначе программа начинает медленно откликаться на изменение данных с устройства. Хотелось бы поподробнее узнать, как организовать что то подобное для Линукс использую Lazarus и Unit Synaser для работы с com портом. Например, чтобы на форме была кнопка, по нажатию на которую происходило чтение из com порта и отображение прочитанного в Memo. Может у кого есть работающий пример чтения из порта? Могу выложить исходный код программы на Delphi.
В Lazarus я пока еще не писал ни одной серьезной программы, поэтому если можно объясните пожалуйста поподробнее.
Заранее спасибо!
sergeypankov
незнакомец
 
Сообщения: 8
Зарегистрирован: 11.07.2009 23:20:52

Re: Чтение данных из com порта Linux

Сообщение Attid » 12.07.2009 09:49:12

viewtopic.php?p=33789#p33789

readinteger заменяешь на readstring и все.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Чтение данных из com порта Linux

Сообщение sergeypankov » 12.07.2009 12:11:57

Т. е. в программе я должен добавить в раздел Uses я должен добавить Synaser, а потом создать для кнопки обработчик события OnClick

//инициализация последовательного порта
ser:=TBlockserial.Create; //создаем устройство
ser.RaiseExcept:=false; //не обрабатываем исключения ошибок связи
ser.Connect('/dev/ttyUSB0'); //соединяемся с портом
ser.Config(115200,8,'N',0,false,false);//настраиваем скорость, стоп биты, паритет
//пересылаем данные
ser.SendInteger(data);
//принимаем данные от устройства
a:=ser.RecvInteger(4);
ser.Free;//освобождаем устройство

Но тут нет строчки Readinteger, есть только Recvinteger - Это нужно её менять на RecvString?
sergeypankov
незнакомец
 
Сообщения: 8
Зарегистрирован: 11.07.2009 23:20:52

Re: Чтение данных из com порта Linux

Сообщение Attid » 12.07.2009 14:27:07

да
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Чтение данных из com порта Linux

Сообщение sergeypankov » 12.07.2009 16:09:26

Сделал для события OnClick нажатия кнопки. Работает немного кривовато (пока не разобрался до конца). Читает только в момент нажатия кнопки и выводит в Memo, а как сделать чтоб читалось непрерывно и выводилось все что прочиталось в Memo? В компоненте для Delphi было такое событие как OnRxChar - что то типа прерывания насколько я понял.
А с помощью synaser как организовать непрерывный поток чтения байтов с com порта?
sergeypankov
незнакомец
 
Сообщения: 8
Зарегистрирован: 11.07.2009 23:20:52

Re: Чтение данных из com порта Linux

Сообщение serg_iv » 12.07.2009 17:34:32

А с помощью synaser как организовать непрерывный поток чтения байтов с com порта?

цикл в потоке?
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Re: Чтение данных из com порта Linux

Сообщение sergeypankov » 12.07.2009 17:57:36

А можно хоть какой нибудь примерчик попросить. Цикл ведь должен как то прерываться? В Lazarus я пока не очень.
sergeypankov
незнакомец
 
Сообщения: 8
Зарегистрирован: 11.07.2009 23:20:52

Re: Чтение данных из com порта Linux

Сообщение serg_iv » 12.07.2009 18:16:43

А можно хоть какой нибудь примерчик попросить. Цикл ведь должен как то прерываться? В Lazarus я пока не очень.

папку examples открой, посмотри пример организации потока TThread.
Цикл посмотри ЛЮБУЮ литературу по Паскалю, стороной нигде не обходят.
Удачи.
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Re: Чтение данных из com порта Linux

Сообщение Attid » 12.07.2009 23:37:04

sergeypankov писал(а):В Lazarus я пока не очень.

не надо этим прикрываться, все так же как в дельфи, местами даже удобнее.
ну или уже честно признайтесь что как програмист Вы 0 и вас пощлют читать книжки.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Чтение данных из com порта Linux

Сообщение sergeypankov » 13.07.2009 00:09:07

Ну не знаю какой я программист- это не основное мое занятие. Просто мы изготавливаем лабораторные установки, делаем связь с компьютером через com порт. В Delphi пользовались визуальными компонентами, а в Lazarus непривычно пока что-то.
А папки Examples в архиве synaser.zip нету, есть только Demo. Но все равно спасибо за помощь.
sergeypankov
незнакомец
 
Сообщения: 8
Зарегистрирован: 11.07.2009 23:20:52

Re: Чтение данных из com порта Linux

Сообщение Attid » 13.07.2009 11:39:05

когда-то видел визульную прослойку synaser для лазаруса. но где и когде не помню.

может пропробуешь MSE ? там компортовый компонент встроен в ИДЕ по умолчанию.

Добавлено спустя 4 минуты 55 секунд:
sergeypankov писал(а):как сделать чтоб читалось непрерывно и выводилось все что прочиталось в Memo?

если пугает поток то можно по таймеру.

по клику на кнопку создаешь сунесер и конектишь к порту. включаешь таймер.
таймер раз в секунду проверяет количество байт в буфере компорта и если они там есть считывает и кладет их в мемо.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Чтение данных из com порта Linux

Сообщение sergeypankov » 13.07.2009 17:27:59

Спасибо, попробую таким способом.
sergeypankov
незнакомец
 
Сообщения: 8
Зарегистрирован: 11.07.2009 23:20:52


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 45

Рейтинг@Mail.ru