Форум: "WinAPI";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
ВнизНадо прочитать данные из 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c