-
Прошу прщения, но я только учусь.
Так вот вопрос:
необходимо передать черех ком-порт 4 байта "000h, 055h, 017h, 05Fh".
Это кусок из кода:"
Buff:=s;
nBytes:=4;//Length(Buff);
ok:=WriteFile( //uses Windows
hCom,
Buff[1],
nBytes,
wr_cnt,
nil
);
if not ok then RaiseLastOSError;
if wr_cnt<>nBytes then Raise Exception.Create('Число записанных байтов в COM-порт меньше, чем было затребовано.');
end;"
подскажите, плз, как в "s" забить эти байты?
-
Никаких Buff тут не нужно.
Передавай прямо из s:
s: = #$00#$55#$17#$5F;
ok:=WriteFile(
hCom,
s[1],
nBytes, // 4
wr_cnt,
nil
);
-
увы не сработало...
я пошел другим путем:
var Buff: array[0..$FF] of Byte;
var wr_cnt: DWORD;
var ok:Boolean;
var nBytes: DWORD;
begin
if bPortIsOpen=False then begin
Raise Exception.Create('Сначала откройте COM-порт.');
end;
Buff[0]:=$00;
Buff[1]:=$55;
Buff[2]:=$17;
Buff[3]:=$5F;
nBytes:=4;//Length(Buff);
ok:=WriteFile( //uses Windows
hCom,
Buff,
nBytes,
wr_cnt,
nil
);
if not ok then RaiseLastOSError;
if wr_cnt<>nBytes then Raise Exception.Create('Число записанных байтов в COM-порт меньше, чем было затребовано.');
end;
вроде в мониторе он передает, но в ответ от устройства ничего не получаю...
по паспорту написано:
"Передача данных инициируется посылкой запроса ведомому устройству от ведущего устройства (компьютер). Передаче запроса должен предшествовать интервал молчания длительностью минимум 4 мс.
Запрос состоит из 4-х байт:
1. сетевой адрес ведомого устройства;
2. байт 055h — код функции запроса текущего веса;
3. два байта контрольной суммы CRC16.
Ведомое устройство принимает запрос, контролирует бит паритета для каждого байта данных, сравнивает присвоенный устройству сетевой адрес и адрес в запросе и вычисляет контрольную сумму CRC16."
вот я и думаю, может где с тайм-аутом не то?
-
P.S.
"Если хотя бы одно условие нарушено, то ответ не генерируется. При выполнении всех условий ведущий посылает ответ, состоящий из 8 байт:
1. сетевой адрес ведомого устройства;
2. три байта значения веса (первый байт – младший), целое число со знаком, отрицательные значения представлены в дополнительном коде, т.е. –1 = 0FFFFFFh.
3. байт служебной информации b1;
4. байт служебной информации b2;
5. два байта контрольной суммы CRC16."
-
> не сработало
Что значит "не сработало" ?
Вот так прямо и говорит - "не срабатываю" ?)
-
нет, говорит, фигвам... :0)
не передает в ответ ничего...
-
> 161a © (30.09.10 16:11) [5]
И чего ?
У тебя и если ты "пошел другим путем" тоже "в ответ от устройства ничего не получаю")
А если нет разницы, зачем "платить дважды" ?)
-
таки и я о том: посыл вроде прошел, но ответ не сгенерировался! вот что обидно! хотя у их "родной" программы все проходит на ура... а от нее есть толькл ехе-шник... как посмотреть где я ошибаюсь... :(
-
> посыл вроде прошел
Что значит "вроде" ?
Либо он заведомо прошел либо не прошел)
Ты сравни монитором-то что уходит от твоей программулины с тем что уходит от родного ехе-шника для этой железяки
-
уходит одно и то же, но может там по времени какая-то закавыка...
-
т.е. монитор показывает что от дивайса вообще ничего не поступает в ответ на твой посыл ?
-
ага
-
А что за монитор-то ?
p.s.
А чего это ты запостил вопрос в "Corba и COM" ?
Твоя задача кроме фигурирующей аббревиатуры "СОМ" не имеет ни малейшего отношения к теме раздела)
-
ну я ж грю тока учусь, монитор "comport toolkit"
-
Покажи дампы монитора для случая твоего и не твоего посылов ..
-
мой
000019|15:31:48.375 |COM1 |<<|00 55 17 5F |.U._
не мой
000019|15:32:53.906 |COM1 |<<|00 55 17 5F |.U._
000020|15:32:54.046 |COM1 |>>|00 74 00 00 02 04 BC 76 |.t....јv
-
сорри! не мой
000019|15:31:48.375 |COM1 |<<|00 55 17 5F |.U._
000020|15:31:48.531 |COM1 |>>|00 00 00 00 02 14 3A C7 |......:З
это нулевое значение ответчика
-
> мой
> 000019|15:31:48.375
> сорри! не мой
> 000019|15:31:48.375
Что-то ты темнишь) ..
Как это "мой" и "не мой" посылы у тебя были отправлены в одно и тоже время с точностью до миллисекунды ?
-
блин, не оттуда скопировал
Мой
000001|18:02:51.562 |COM1 |<<|00 55 17 5F |.U._
не мой
000001|18:01:53.514 |COM1 |<<|00 55 17 5F |.U._
000002|18:01:53.655 |COM1 |>>|00 00 00 00 02 14 3A C7 |......:З
-
ну хорошо
покажи свой код инициализации/открытия порта и чтения из него..