Добрый день. Подскажите как можно организовать передачу данных по com порту если протокол обмена с утройством имеет вид:
05h
02h 05h 13h 1Eh 00h 00h 00h 08h
06h
Я пытаюсь сделать так:
var
ser:TBlockSerial;
begin
ser:=TBlockSerial.Create;
ser.LinuxLock := false;
ser.Connect('/dev/ttyS0');
ser.config(115200,8,'N',SB1,false,false);
ser.SendString(#5+#2+#5+#19+#30+#0+#0+#0+#8+#6);
ser.free;
end;
но ничего не выходит. Подскажите куда дальше копать.
PS: Порт доступен и принимает данные,иногда данная команда проходит но ничего не возвращается.
Спасибо.
synacer+hex ?
Модератор: Модераторы
попробуй так:
ser.SendString(#$5+#$2+#$5+#$19+#$30+#$0+#$0+#$0+#$8+#$6);
а то у тебя не hex байты передавались
ser.SendString(#$5+#$2+#$5+#$19+#$30+#$0+#$0+#$0+#$8+#$6);
а то у тебя не hex байты передавались
А где получение данных до ser.Free?
Передавались нужные данные, только в десятичном виде.
Добавлено спустя 9 минут 44 секунды:
Кстати, а почему у Вас исходная последовательность байт написана в несколько строк. Может быть действительно нужно разделители строк передавать - #13 или #10 или оба.
Или получать ответ после каждой операции:
FedeX писал(а):а то у тебя не hex байты передавались
Передавались нужные данные, только в десятичном виде.
Добавлено спустя 9 минут 44 секунды:
Кстати, а почему у Вас исходная последовательность байт написана в несколько строк. Может быть действительно нужно разделители строк передавать - #13 или #10 или оба.
Или получать ответ после каждой операции:
Код: Выделить всё
ser.SendString(#5);
res := ser.RecvString(1000);
ser.SendString(#2+#5+#19+#30+#0+#0+#0+#8);
res := ser.RecvString(1000);
ser.SendString(#6);
res := ser.RecvString(1000);Спасибо за ответы.
В варианте:
ser.SendString(#2+#5+#19+#30+#0+#0+#0+#8+#13);
label3.caption:=ser.RecvString(1000);
команда на устройство проходит один раз нормально, затем при повторе устройство на данную команду ни как не реагирует и в label3 пусто.
Кстати и при первой посылке команды в label3 ничего не возвращается, при этом команда ser.RecvString(1000); очень долго думает.
Если есть у кого еще варианты, прошу навести на мысль куда дальше копать. Может есть еще какие либо компоненты или примеры работы с
последовательным портом, а то в Интернете все уже перерыл.
OS: Mandriva 2010.1 x64
Спасибо.
В варианте:
ser.SendString(#2+#5+#19+#30+#0+#0+#0+#8+#13);
label3.caption:=ser.RecvString(1000);
команда на устройство проходит один раз нормально, затем при повторе устройство на данную команду ни как не реагирует и в label3 пусто.
Кстати и при первой посылке команды в label3 ничего не возвращается, при этом команда ser.RecvString(1000); очень долго думает.
Если есть у кого еще варианты, прошу навести на мысль куда дальше копать. Может есть еще какие либо компоненты или примеры работы с
последовательным портом, а то в Интернете все уже перерыл.
OS: Mandriva 2010.1 x64
Спасибо.
- Maxx_ir
- новенький
- Сообщения: 12
- Зарегистрирован: 24.02.2008 19:52:00
- Откуда: Тольятти
- Контактная информация:
Посмотрите мой примерчик в последнем посте ветки форума Synaser + UPS
Помнится под Мандривой2005 работала утилитка нормально.
Да и совет, для начала добейтесь стабильного эха своих посылок - т.е. соедините на разъеме DB9 выводы TX-RX (PIN 2-3). А потом уже переходите к передаче - приему Вашего протокола.
Помнится под Мандривой2005 работала утилитка нормально.
Да и совет, для начала добейтесь стабильного эха своих посылок - т.е. соедините на разъеме DB9 выводы TX-RX (PIN 2-3). А потом уже переходите к передаче - приему Вашего протокола.
