Тонкости работы с COM портом

Общие вопросы программирования, алгоритмы и т.п.

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

Re: Тонкости работы с COM портом

Сообщение dionic » 10.07.2009 14:36:13

Нет счетчик СЭТ-4ТМ.

А что эта команда даст ls /dev/ttyUSB*? Я вроде написал "ls /dev/ttyUSB0". А должна эта строчка устройства белой подсвечиваться в mc? Вот например как там @cdrom подсвечивается...?

Почему то в /dev есть только один USB0, хотя к USB порта подключена мышь и оптопорт?
dionic
новенький
 
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Re: Тонкости работы с COM портом

Сообщение Attid » 10.07.2009 14:57:25

воткни устройство и посмотри что выведет тебе dmesg какой там название будет тако и пробуй использовать.

сунасер по умолчанию работает только с ttyS но это правится, правкой одной строки.

Добавлено спустя 2 минуты 20 секунд:
dionic писал(а):мышь

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

Re: Тонкости работы с COM портом

Сообщение dionic » 10.07.2009 15:05:06

У меня вот такую строку выводит dmesg FTDI USB Serial Device converter now attached to ttyUSB0. Это как я понимаю у меня произошло подсоединение к ttyUSB0 моего датчика.

А строчку вот эту нужно исправить:
FDevice := '/dev/ttyS' + IntToStr(FComNr) на FDevice := '/dev/ttyUSB' + IntToStr(FComNr)?
Вроде бы в модуле synaser исправил все строчки где встречается '/dev/ttyS', даже номер устройства теперь определяет правильно, а открывать этот порт все равно не хочет...

А как работать (с помощью каких функций) работать с портом если не через synaser, подскажите плиз народ.
dionic
новенький
 
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Re: Тонкости работы с COM портом

Сообщение Attid » 11.07.2009 10:15:17

dionic писал(а):FDevice := '/dev/ttyS' + IntToStr(FComNr) на FDevice := '/dev/ttyUSB' + IntToStr(FComNr)?

ну я бы менял уневерсально
Код: Выделить всё
FDevice := comport;

пишу по памяти как точно зовется переменная не помню.

а весь код с FComNr выкинул бы.

dionic писал(а):а открывать этот порт все равно не хочет...

так и говорит "не хочу" ?

может линь не те драйвера ему сует попробуй поработать с портом из консоли

читать их порта
cat /dev/ttyUSB0

писать
echo AT+ > /dev/ttyUSB0

если так не будет работать то никак не будет работать =)

dionic писал(а):А как работать (с помощью каких функций) работать с портом если не через synaser, подскажите плиз народ.

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

Re: Тонкости работы с COM портом

Сообщение serg_iv » 11.07.2009 16:29:53

Вроде бы в модуле synaser исправил все строчки где встречается '/dev/ttyS', даже номер устройства теперь определяет правильно, а открывать этот порт все равно не хочет...

в общем то эт лишнее, synaser понимает и явное указание - /dev/ttyUSB0
а пример простой пожалста:
Код: Выделить всё
//инициализация последовательного порта
  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;//освобождаем устройство

Так как порт используется USB, с настройками скорости паритетов и пр. можешь не париться, используй любые
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Re: Тонкости работы с COM портом

Сообщение Attid » 11.07.2009 19:08:44

serg_iv писал(а):в общем то эт лишнее, synaser понимает и явное указание - /dev/ttyUSB0

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

Re: Тонкости работы с COM портом

Сообщение sergeypankov » 12.07.2009 00:57:26

Здравствуйте! Я новичок в Lazarus, программировал под Delphi. Нашел тут инфо о компоненте cportlaz для Lazarus. Скачал. А каким образом его установить? Открываю в Lazarusе файл CPortLib10.lpk в появившемся окне нажимаю compile, компилятор пишет Can not find unit libc used by CPort. Что это за ошибка и где можно достать этот Unit. Компонент Cport мне нравится, под Delphi работал с ним успешно. Lazarus установлен в ОС Ubuntu.
sergeypankov
незнакомец
 
Сообщения: 8
Зарегистрирован: 11.07.2009 23:20:52

Re: Тонкости работы с COM портом

Сообщение serg_iv » 12.07.2009 13:30:30

зачем лудей вводишь в заблуждение посмотри реализацию Connect в линуксе. зачем там так сделано не знаю, но сделано =)

Но у меня именно так работает, только железка висит на /dev/ttyACM0
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Re: Тонкости работы с COM портом

Сообщение Attid » 12.07.2009 14:25:37

serg_iv писал(а):Но у меня именно так работает, только железка висит на /dev/ttyACM0


Код: Выделить всё
procedure TBlockSerial.Connect(comport: string);
begin
  FDevice := comport;
  GetComNr(comport);
{******}
  if FComNr <> PortIsClosed then
    FDevice := '/dev/ttyS' + IntToStr(FComNr);
  FHandle := THandle(Libc.open(pchar(FDevice), O_RDWR or O_SYNC));
{******}
end;



Код: Выделить всё
procedure TBlockSerial.GetComNr(Value: string);
begin
  FComNr := PortIsClosed;
  if pos('COM', uppercase(Value)) = 1 then
    FComNr := StrToIntdef(copy(Value, 4, Length(Value) - 3), PortIsClosed + 1) - 1;
  if pos('/DEV/TTYS', uppercase(Value)) = 1 then
    FComNr := StrToIntdef(copy(Value, 10, Length(Value) - 9), PortIsClosed - 1);
end;


хм. а вообще да будет работать :oops: строку с if я не приметил, так что можно ничего не править и даже указывать в линуксе COM1 и будет подключение к ttyS0. забавно.

serg_iv писал(а):/dev/ttyACM0

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

Re: Тонкости работы с COM портом

Сообщение serg_iv » 12.07.2009 17:31:01

сотовый телефон ?

Нее, разрабатывать начал устройство ввода - вывода, а с писанием драйверов заморачиваться очень не хочется
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Re: Тонкости работы с COM портом

Сообщение sergeypankov » 13.07.2009 03:02:32

Может вопрос не сюда, но кто нибудь пробовал устанавливать визуальный компонент Cportlaz в Lazarus под Linux? В Lazarus под винду встал без проблем, а под Linux ни в какую не хочет.Сначала писал что не найдены модули libc, установил пакет fp-units-i386, теперь вот не может найти модули Windows а где ж их взять в Linuxe, не из винды же тащить.

Вопрос глуп, не внимательно посмотрел на страничке загрузки, что компонент переделан только под Lazarus для Linux.
sergeypankov
незнакомец
 
Сообщения: 8
Зарегистрирован: 11.07.2009 23:20:52

Re: Тонкости работы с COM портом

Сообщение dionic » 13.07.2009 09:18:09

Attid писал(а):
serg_iv писал(а):Но у меня именно так работает, только железка висит на /dev/ttyACM0


Код: Выделить всё
procedure TBlockSerial.Connect(comport: string);
begin
  FDevice := comport;
  GetComNr(comport);
{******}
  if FComNr <> PortIsClosed then
    FDevice := '/dev/ttyS' + IntToStr(FComNr);
  FHandle := THandle(Libc.open(pchar(FDevice), O_RDWR or O_SYNC));
{******}
end;



Код: Выделить всё
procedure TBlockSerial.GetComNr(Value: string);
begin
  FComNr := PortIsClosed;
  if pos('COM', uppercase(Value)) = 1 then
    FComNr := StrToIntdef(copy(Value, 4, Length(Value) - 3), PortIsClosed + 1) - 1;
  if pos('/DEV/TTYS', uppercase(Value)) = 1 then
    FComNr := StrToIntdef(copy(Value, 10, Length(Value) - 9), PortIsClosed - 1);
end;


хм. а вообще да будет работать :oops: строку с if я не приметил, так что можно ничего не править и даже указывать в линуксе COM1 и будет подключение к ttyS0. забавно.

serg_iv писал(а):/dev/ttyACM0

сотовый телефон ?


Просто интересно, а как у вас произойдет подсоединение к порту USB, если код синасера не переделывать , а просто написать /dev/ttyUSB0 ну или /dev/ttyACMO, ведь номер то устройства функция GetComNr не определит, потому что не найдет там в вашем переменной value выражение '/dev/TTYS' , а следовательно и не присвоит номер переменной FComNr и она останется равной -1 (присвоена в конструкторе create)...
И к тому же в линуксе ,даже в синасере описано надо указывать только /dev/ttyS*, для того чтобы правильно подключится к com порту, и нельзя указать com1.

"Connects to the port indicated by comport. Comport can be used in Windows style (COM2), or in Linux style (/dev/ttyS1). "
dionic
новенький
 
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Re: Тонкости работы с COM портом

Сообщение Mr.Smart » 13.07.2009 10:17:17

sergeypankov писал(а):Может вопрос не сюда, но кто нибудь пробовал устанавливать визуальный компонент Cportlaz в Lazarus под Linux? В Lazarus под винду встал без проблем, а под Linux ни в какую не хочет.Сначала писал что не найдены модули libc, установил пакет fp-units-i386, теперь вот не может найти модули Windows а где ж их взять в Linuxe, не из винды же тащить.

Если в Linux компонент просит модуль Windows - это должно насторожить! Действительно ли данный компонент написан и под эту систему :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Тонкости работы с COM портом

Сообщение Attid » 13.07.2009 11:12:08

sergeypankov
скорее всего он только под венду.

dionic
смотрим внимательно FComNr останется -1

тогда первая стока выполнется, а третья нет (PortIsClosed = -1 это константа)

Код: Выделить всё
  FDevice := comport;
  if FComNr <> PortIsClosed then
    FDevice := '/dev/ttyS' + IntToStr(FComNr);


dionic писал(а):и нельзя указать com1.

опять же внимательнее я сказал
Attid писал(а):даже указывать в линуксе COM1

размер имеет значение, хотя компонет сам сказал
dionic писал(а):Comport can be used in Windows style (COM2)

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

Re: Тонкости работы с COM портом

Сообщение dionic » 14.07.2009 10:09:40

Простите неуча :( жестоко ошибался... Attid был прав. Как в первом случае, если указать /dev/ttyUSB0, так и во втором, если указать COM1 под Linux.

Через RS-232 все работает ОК,а вот, когда я начинаю работать через USB, и подключаю туда свой счетчик, Linux его определят на ttyUSB0. Посылаю туда данные, synaser создает файл /var/lock/LK..USB0 и записывает их туды. А когда начинаю опрашиват, то данных там нет, прога виснет , видимо на таймауте. Возможно у меня какие-то настройки не выставлены для работы с USB, ну там биты четности и т.д. Хотя под Windows с теми же настройками работает и с COM портом и с USB (с виртуальным COM портом). Ладно всем спасибо за помощь... Будем разбираться дальше :)
dionic
новенький
 
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Пред.След.

Вернуться в Общее

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru