PDA

Просмотр полной версии : owen_io.dll ф-я ReadSI8BCD возвращает -102



oooema
04.12.2013, 04:06
Доброго!
Есть такая проблема:
Для своих задач пытаемся использовать библиотеку owen_io.dll. IDE Delphi 2009. Опрашиваем счетчик СИ8. Функции ReadSI8BCD(1,0,'DCNT',dcnt); всегда возвращает -102, при этом функция ReadDTMR(1,0,hr,m,s,ms); работает прекрасно. Обе функции вызываются в одной программе последовательно. Промониторив порт, увидели, что функция ReadSI8BCD шлет в порт такой пакет #GHHGITVQUPKL. хотя по протоколу команда должна быть SHNJ. Прибор подключен к компьютеру через АС4. Используя сторонний терминал и посылая пакет собранный вручную получаем нормальный ответ в 10 из 10 случаев. Функция кривая или описание параметров в импорте?

Просим помощи в данном вопросе! Спасибо!
Код элементарный:
импорт


function OpenPort(n,speed,part,bits,stop,vid:DWORD): Integer; Stdcall; External 'owen_io.dll';
function ReadDTMR(adr,adr_type:DWORD;var hrs:Integer;var mins:Integer;var sec:Integer;var msec:Integer):Integer; Stdcall; External 'owen_io.dll';
function ReadSI8BCD(adr,adr_type:DWORD;command:PChar; var val:Integer):Integer; Stdcall; External 'owen_io.dll';

код


writeln('Get data from CI8?(1-Yes/0-No)');
readln(res);
if res<>1 then exit;
if(OpenPort(0,0,0,1,0,0)<0) then begin
writeln('Error open COM-port');
readln;
exit;
end;

writeln('Reading counter data...');
res:=ReadSI8BCD(1,0,'DCNT',dcnt);
if(res>=0) then
writeln('DCNT=',dcnt);
else
writeln('Error reading DCNT '+IntToStr(res));


writeln('Press Enter to continue');
readln;
writeln('Reading CI8 timer...\n');
res:=ReadDTMR(1,0,hr,m,s,ms);
if(res>=0) then
writeln(hr:3,':',m:2,':',s:2,':',ms:3)
else
writeln('Error reading timer data');