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

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

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

Аватара пользователя
swa1
новенький
Сообщения: 80
Зарегистрирован: 25.09.2007 11:04:08
Откуда: Ялта

Сообщение swa1 »

Yurakl писал(а):Что происходит?? Записывается(выводится) один байт за 1000 мсек? а если за это время пришло 50 байт, к примеру?

Это таймаут ожидания
function RecvBufferEx(buffer: pointer; length: integer; timeout: integer): integer; virtual;
Method waits until data is received. If no data is received within the Timeout (in milliseconds) period, LastError is set to ErrTimeout. This method is used to read any amount of data (e. g. 1MB), and may be freely combined with all receviving methods what have Timeout parameter, like the Recvstring, RecvByte or RecvTerminated methods.


По synaser читать тут
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Сообщение Yurakl »

При подключении 2х устройств к 2 com портам их лучше разбивать на 2 разных потока?Посоветуйте как это сделать лучше и практичнее???
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Сообщение Yurakl »

Вот возник какой вопрос. На тонком клиенте стоит Linux и 2 com порта, т.е. возможно подключение как 1 или 2 устройств, так и не одного.
в случае когда подключено одно устройство он всегда определяется как ttyS0 или это все-таки в зависимости от порта? и если подключено 2 устройства то соответственно одно будет ttyS0, а другое ttyS1?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Не факт. Т.ч. лучше указывать какие порты существуют и какой из них 1, а какой 2.
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Сообщение Yurakl »

линукс же определяет по файлам ttyS* устройства на ком портах.как тогда указать порт-то??
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Я имею ввиду где нибудь в настройках программы указывать имена COM портов.
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Сообщение Yurakl »

я и так указываю у них разные имена.
comdsc1:=fpopen('/dev/ttyS0', O_RdWr or O_NOCTTY or O_NDELAY);
comdsc2:=fpopen('/dev/ttyS1', O_RdWr or O_NOCTTY or O_NDELAY);
с соответсвующими настройками.
но определяется и данные читаются тока с первого ком порта, ко второму как-будто ничего не подключено.
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

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

А второй разъем точно ttyS1? а вдруг 2 или 3?
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Сообщение Yurakl »

а как это можно определить точно??но опытным путем он точно ttyS1
мне еще с USB предстоит работать, там то так же надо определить номер разъема....
Аватара пользователя
FeodoR
новенький
Сообщения: 59
Зарегистрирован: 16.04.2010 12:11:34
Откуда: MSK, ЮАО
Контактная информация:

Сообщение FeodoR »

Попробуй команду dmesg | grep -i tty
В выводе по-идее должно быть про то где что и как. Ещё есть sysfs (/sys) и /proc. Там тоже есть сведения о системных устройствах.
sadavod
новенький
Сообщения: 18
Зарегистрирован: 27.12.2009 13:30:29

Сообщение sadavod »

Здравствуйте, подскажите с обменом информации
на Debian данные на устройство отсылаю так
echo "AA BB CC DD" > /dev/ttyUSB0
а как получить ответ?
serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение serg_iv »

попробуй cat /dev/ttyUSB0
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

Здравствуйте ребята! :D
помогите разобраться с ком портом
использую synaser, вот банальный код

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
var
ser:TBlockserial;
a:ansistring;
begin
    ser:=TBlockserial.Create;
    ser.RaiseExcept:=false;
    ser.Connect('com1');
    if ser.InstanceActive then
      begin
        ser.Config(9600,8,'N',SB1,false,false);
        ser.SendString('1234');
        a:=ser.RecvString(100);
        Memo1.Lines.Add(a);
        ser.Free;
      end
  else ser.Free;
end;

в мемо ничего не приходит
порт проверял прогой Serial Port Monitor отправляет и принимает, порт исправен
что не так то? ткните носом... :(
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

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

xcod писал(а):

Код: Выделить всё

a:=ser.RecvString(100);

Возможно ответ не заканчивается CR/LF.
Может

Код: Выделить всё

a:=ser.RecvPacket(100);
получится?
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

v-t-l писал(а):получится?

пусто
Ответить