PDA

Просмотр полной версии : СИ30 и delphi



eslizh
24.12.2015, 09:53
Добрый день !

Ставится задача опрашивать СИ-30 библиотекой owen_io.dll.
Какую функцию библиотеки использовать для опроса значения счётчика на СИ-30 ?
Посмотрел примеры, набросал программу но что то функция ReadSI8BCD ни чего не возвращает, может кто делал что то подобное, подскажите.

function OpenPort(n, speed, part, bits, stop, vid: Integer): Integer; stdcall; external 'owen_io.dll';
function ClosePort: Integer; stdcall; external 'owen_io.dll';
function ReadSI8BCD(adr, adr_type: Integer; command: PChar; var value: Integer): Integer; stdcall; external 'owen_io.dll';

....

var
VD: Integer;
begin
vd:=0;
OpenPort(7, spd_9600, prty_NONE, databits_8, stopbit_1, RS485CONV_AUTO);
ReadSI8BCD(0,0,' DCNT ',vd);
label1.Caption:=inttostr(vd);
end;


Спасибо заранее.

G.Mark
24.12.2015, 11:03
Я с Dilphi на "Вы", но попробую помочь. Вы производите опрос СИ30 функцией предназначенной для опроса СИ8. Параметр DCNT в СИ30 отсутствует, поэтому и нет возвращаемого значения. Для СИ30 имя параметра текущее значение счета - Ctr. Размер данных - 4 байта, тип - long (по другому - sint). Подходящая функция для этого параметра - ReadSInt, попробуйте использовать ее.

eslizh
24.12.2015, 11:12
Спасибо, сейчас попробую эту функцию, по результатам отпишусь.

eslizh
24.12.2015, 13:05
Огромное спасибо за подсказку.
Вот с таким кодом все работает и выдает именно текущее значение с о знаком + или -

var
res: integer;
begin
res := OpenPort(6, spd_9600, prty_NONE, databits_8, stopbit_1, RS485CONV_AUTO);
if(res < 0) then
begin
showMessage('Port disabled');
exit;
end
else
readsint(16,0,'CEU', res, -1);
ClosePort();
label1.Caption:=inttostr(res);
end;