Страница 4 из 9
Re: Тонкости работы с COM портом
Добавлено: 10.07.2009 14:36:13
dionic
Нет счетчик СЭТ-4ТМ.
А что эта команда даст ls /dev/ttyUSB*? Я вроде написал "ls /dev/ttyUSB0". А должна эта строчка устройства белой подсвечиваться в mc? Вот например как там @cdrom подсвечивается...?
Почему то в /dev есть только один USB0, хотя к USB порта подключена мышь и оптопорт?
Re: Тонкости работы с COM портом
Добавлено: 10.07.2009 14:59:45
Attid
воткни устройство и посмотри что выведет тебе dmesg какой там название будет тако и пробуй использовать.
сунасер по умолчанию работает только с ttyS но это правится, правкой одной строки.
Добавлено спустя 2 минуты 20 секунд:dionic писал(а):мышь
мышь имеет другое имя /dev/input/xxxx
Re: Тонкости работы с COM портом
Добавлено: 10.07.2009 15:05:06
dionic
У меня вот такую строку выводит 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, подскажите плиз народ.
Re: Тонкости работы с COM портом
Добавлено: 11.07.2009 10:15:17
Attid
dionic писал(а):FDevice := '/dev/ttyS' + IntToStr(FComNr) на FDevice := '/dev/ttyUSB' + IntToStr(FComNr)?
ну я бы менял уневерсально
пишу по памяти как точно зовется переменная не помню.
а весь код с FComNr выкинул бы.
dionic писал(а):а открывать этот порт все равно не хочет...
так и говорит "не хочу" ?
может линь не те драйвера ему сует попробуй поработать с портом из консоли
читать их порта
cat /dev/ttyUSB0
писать
echo AT+ > /dev/ttyUSB0
если так не будет работать то никак не будет работать =)
dionic писал(а):А как работать (с помощью каких функций) работать с портом если не через synaser, подскажите плиз народ.
открываешь код синасера и смотришь, тебе надо всего 4 функции открыть\читать\писать\закрыть там все это есть.
Re: Тонкости работы с COM портом
Добавлено: 11.07.2009 16:29:53
serg_iv
Вроде бы в модуле 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, с настройками скорости паритетов и пр. можешь не париться, используй любые
Re: Тонкости работы с COM портом
Добавлено: 11.07.2009 19:08:44
Attid
serg_iv писал(а):в общем то эт лишнее, synaser понимает и явное указание - /dev/ttyUSB0
зачем лудей вводишь в заблуждение посмотри реализацию Connect в линуксе. зачем там так сделано не знаю, но сделано =)
Re: Тонкости работы с COM портом
Добавлено: 12.07.2009 00:57:26
sergeypankov
Здравствуйте! Я новичок в Lazarus, программировал под Delphi. Нашел тут инфо о компоненте cportlaz для Lazarus. Скачал. А каким образом его установить? Открываю в Lazarusе файл CPortLib10.lpk в появившемся окне нажимаю compile, компилятор пишет Can not find unit libc used by CPort. Что это за ошибка и где можно достать этот Unit. Компонент Cport мне нравится, под Delphi работал с ним успешно. Lazarus установлен в ОС Ubuntu.
Re: Тонкости работы с COM портом
Добавлено: 12.07.2009 13:30:30
serg_iv
зачем лудей вводишь в заблуждение посмотри реализацию Connect в линуксе. зачем там так сделано не знаю, но сделано =)
Но у меня именно так работает, только железка висит на /dev/ttyACM0
Re: Тонкости работы с COM портом
Добавлено: 12.07.2009 14:25:37
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;
хм. а вообще да будет работать

строку с if я не приметил, так что можно ничего не править и даже указывать в линуксе COM1 и будет подключение к ttyS0. забавно.
serg_iv писал(а):/dev/ttyACM0
сотовый телефон ?
Re: Тонкости работы с COM портом
Добавлено: 12.07.2009 17:31:01
serg_iv
сотовый телефон ?
Нее, разрабатывать начал устройство ввода - вывода, а с писанием драйверов заморачиваться очень не хочется
Re: Тонкости работы с COM портом
Добавлено: 13.07.2009 03:02:32
sergeypankov
Может вопрос не сюда, но кто нибудь пробовал устанавливать визуальный компонент Cportlaz в Lazarus под Linux? В Lazarus под винду встал без проблем, а под Linux ни в какую не хочет.Сначала писал что не найдены модули libc, установил пакет fp-units-i386, теперь вот не может найти модули Windows а где ж их взять в Linuxe, не из винды же тащить.
Вопрос глуп, не внимательно посмотрел на страничке загрузки, что компонент переделан только под Lazarus для Linux.
Re: Тонкости работы с COM портом
Добавлено: 13.07.2009 09:18:09
dionic
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;
хм. а вообще да будет работать

строку с 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). "
Re: Тонкости работы с COM портом
Добавлено: 13.07.2009 10:17:17
Mr.Smart
sergeypankov писал(а):Может вопрос не сюда, но кто нибудь пробовал устанавливать визуальный компонент Cportlaz в Lazarus под Linux? В Lazarus под винду встал без проблем, а под Linux ни в какую не хочет.Сначала писал что не найдены модули libc, установил пакет fp-units-i386, теперь вот не может найти модули Windows а где ж их взять в Linuxe, не из винды же тащить.
Если в Linux компонент просит модуль Windows - это должно насторожить! Действительно ли данный компонент написан и под эту систему

Re: Тонкости работы с COM портом
Добавлено: 13.07.2009 11:12:08
Attid
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)
только верхний регистр. думаю он проверяет это по первому слешу, проверять лень.
Re: Тонкости работы с COM портом
Добавлено: 14.07.2009 10:09:40
dionic
Простите неуча

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