synacer+hex ?

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

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

synacer+hex ?

Сообщение swforeman » 07.12.2010 09:51:08

Добрый день. Подскажите как можно организовать передачу данных по 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: Порт доступен и принимает данные,иногда данная команда проходит но ничего не возвращается.
Спасибо.
swforeman
незнакомец
 
Сообщения: 2
Зарегистрирован: 07.12.2010 09:33:14

Re: synacer+hex ?

Сообщение FedeX » 07.12.2010 11:41:55

попробуй так:
ser.SendString(#$5+#$2+#$5+#$19+#$30+#$0+#$0+#$0+#$8+#$6);

а то у тебя не hex байты передавались
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: synacer+hex ?

Сообщение v-t-l » 07.12.2010 11:48:39

А где получение данных до ser.Free?

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);
v-t-l
энтузиаст
 
Сообщения: 735
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: synacer+hex ?

Сообщение swforeman » 07.12.2010 13:05:43

Спасибо за ответы.

В варианте:
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

Спасибо.
swforeman
незнакомец
 
Сообщения: 2
Зарегистрирован: 07.12.2010 09:33:14

Re: synacer+hex ?

Сообщение Maxx_ir » 07.12.2010 15:14:54

Посмотрите мой примерчик в последнем посте ветки форума Synaser + UPS
Помнится под Мандривой2005 работала утилитка нормально.
Да и совет, для начала добейтесь стабильного эха своих посылок - т.е. соедините на разъеме DB9 выводы TX-RX (PIN 2-3). А потом уже переходите к передаче - приему Вашего протокола.
Аватара пользователя
Maxx_ir
новенький
 
Сообщения: 12
Зарегистрирован: 24.02.2008 20:52:00
Откуда: Тольятти


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru