Доброго!
Есть такая проблема:
Для своих задач пытаемся использовать библиотеку 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');


Ответить с цитированием