![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Написал программку для управления железкой по ком порту!
Команда посылается в виде HEX кода ( F8 8F 02 00 00 00 00 00 02) Проблема в следующем: при посыле команды команда отправляет строку, но через Port Monitor получаю нечто вида: F8 8F 02 00 3e 4a итд, либо ошибки. При посыле данных до 4х значений т.е. F8 8F 02 00 все прекрасно. Вот код программки, Код:
unit PortUnit;
interface
uses windows,sysutils;
var
CommHandle : integer;
DCB : TDCB;
Ovr : TOverlapped;
KolByte: DWord;
procedure PortInit;
procedure WriteComm;
procedure KillComm;
implementation
uses
Unit1;
procedure KillComm;
begin
CloseHandle(CommHandle);
end;
procedure WriteComm;
var
s: Integer;
begin
s:= Strtoint('$020000000000028ff8');
KolByte:=9;
WriteFile(CommHandle,s,KolByte,KolByte,@Ovr);
end;
procedure PortInit;
begin
CommHandle := CreateFile('COM1',GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
SetCommMask(CommHandle,EV_RXFLAG);
GetCommState(CommHandle,DCB);
DCB.BaudRate:=CBR_9600;
DCB.Parity:=NOPARITY;
DCB.ByteSize:=8;
DCB.StopBits:=OneStopBit;
DCB.EvtChar:=chr(13);
SetCommState(CommHandle,DCB);
end;
end.Помогите плиз а то уже второй день выспаться не могу перерыл все дебри инета. Последний раз редактировалось Admin, 23.03.2011 в 20:40. |
|
#2
|
||||
|
||||
|
может быть из за того,что у тебя переменная s типа integer, который всего 4 байта
|
|
#3
|
|||
|
|||
|
подскажи как расширить уже мозг кипит! У нас просто никого не осталось кто бы мог с этим помочь!
|
|
#4
|
||||
|
||||
|
дк сделай переменную... например:
С:array[1..9] of char в неё забивай значения, и передавай.. ну это сугубой мой вариант, может как-нибудь по другому можно, но я думаю прокатит)) |
|
#5
|
|||
|
|||
|
но по сути дела потом это все во что-то надо объединить, т.е.
S=c1+c2+....+c9 какой тип переменных для S может иметь более 8 байт. и еще почему считывание строки просходит с права на лево? |
|
#6
|
||||
|
||||
|
1.зачем объединять так и отправляешь
WriteFile(CommHandle,с,KolByte,KolByte,@Ovr); 2. Extended-10 byte на счет третьего не знаю... |
|
#7
|
|||
|
|||
|
Спасибо огромное! я добился того чего хотел!!!
Решение было действительно в array! |