Главная страница
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.025 c
15-1179773449
Астроном
2007-05-21 22:50
2007.06.24
Фотография воды на Марсе...


11-1163537568
КВАНТ
2006-11-14 23:52
2007.06.24
Изменение шрифта и цвета в RichEdit


8-1160305271
AlterEgo of WondeRu
2006-10-08 15:01
2007.06.24
"DirectShow по-русски"


3-1175235625
Ulugbek
2007-03-30 10:20
2007.06.24
Как проверить таблицу на запись


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