Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.24;
Скачать: CL | DM;

Вниз

Надо прочитать данные из COM-port.   Найти похожие ветки 

 
MonZon   (2007-01-10 17:58) [0]

Пробовал разные компоненты- возвращают муть всякую.  Источник сигнала микроконтроллер atmega. отсылает данные в формате [n][x0][x1][x2]. n - номер канала. х0, х1, х2 - сигнал с ацп(почему три байта? потому что не влезает по ширине в один.). Все это дело качается по стандартной аппаратной реализации USART(или UART). Комп принимает данные на ура, но только через ГиперТерминал. Из дельфы мусор. Может есть где исходник? ЗЫ. Еще я могу поменять формат отправления данных, если это упростит задачу. например можно посылать данные строкой. И на конце строки "\n". и пусть программка ловит данные построчно и складывает в МЕМО.

Всем Спасиб. Есть еще добрые люди =)


 
tesseract ©   (2007-01-10 18:00) [1]

CreateFile("com1"

ReadFile/writefile

А мусор приходит скорее всего из-за неверных буферов приёма.


 
MonZon   (2007-01-10 18:04) [2]

а можно более развернутый кусок кода? в дельфях слабоват =(


 
MonZon   (2007-01-10 18:18) [3]

для примера есть такой кусок
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
 Str: String;
begin
 ComPort.ReadStr(Str, Count);
 Memo.Text := Memo.Text + Str;
end;

но приходит абракадабра.

еще там есть событие procedure TForm1.ComPortRxBuf(Sender: TObject; const Buffer;  Count: Integer);

и как мне достать свои данные оттуда?


 
tesseract ©   (2007-01-10 18:21) [4]

Почему стринг-то?

Нужно Array[0..3] of byte получать. Конечно муть придёт!


 
MonZon   (2007-01-10 18:31) [5]

а разве ComPort.ReadStr(Str, Count); кроме стринга что-нить еще поддерживает?


 
MonZon   (2007-01-10 18:33) [6]

Да и как я потом байты в интегеры переведу? А очень надо именно интегер.


 
tesseract ©   (2007-01-10 18:40) [7]


> Да и как я потом байты в интегеры переведу? А очень надо
> именно интегер.


У тебя подаёться четыре байта, что равно одному целому, т .е  ты можешь просто принять integer. НО неизвестно в каком пордя дке они следуют,  могут навыверт - младшим вперёд и придёться колдовать над прерващением его в нормальный вид.  

Может просто shr/shl слить  array of byte в один интегер ?  да и номер канала не придёться отделять.  А в то что в компоненте нет ReadBuffer в жизни не поверю.


 
MonZon   (2007-01-10 18:49) [8]

Мда че то я не допираю. значит мне бы получить номер канала в один интегер, а остальные три байта в другой. как это сделать подскажи плиз?

Есть вот такое дело:
comport.Read(var buffer; count:integer;)


 
MonZon   (2007-01-10 18:50) [9]

а байты в порядке слева направо: младший,средний, старший
(вроде не напутал)


 
MonZon   (2007-01-10 21:09) [10]

Допер наконец-то
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
 Str: String;
begin
 ComPort.ReadStr(Str, Count);
memo.Lines.add(AnsiMidStr(str,0,1));
memo.Lines.add(AnsiMidStr(str,2,count));
end;

Если кому-то надо - то вот оно.
Всем спасибо.


 
tesseract ©   (2007-01-10 22:04) [11]


> MonZon   (10.01.07 21:09) [10]


И чем тебя array of byte не устраивал?



Страницы: 1 вся ветка

Текущий архив: 2007.06.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
4-1168441102
MonZon
2007-01-10 17:58
2007.06.24
Надо прочитать данные из COM-port.


1-1177498600
Грициан
2007-04-25 14:56
2007.06.24
Что неверно в этом коде?


4-1168961302
TProgrammer
2007-01-16 18:28
2007.06.24
Приоритет процессов


15-1180004673
Gorlum
2007-05-24 15:04
2007.06.24
Excel сплющивает картинки... Понять не могу почему...


2-1180442520
Alexdeil
2007-05-29 16:42
2007.06.24
SQL запрос по дате и времени