НПО Тепловизор. Теплосчетчики и расходомеры К вершинам эволюции теплосчетчика
Продукция Поддержка Форум Контакты
     
Пользователь    Пароль  
Регистрация | Пароль?  
Главное меню
НовостиПродукцияФайлы/ДокументыСтатьиФорумОпросыФотогалереяО компанииРекламодателям
Потребители о нас
"ГУП ДЕЗ района «Текстильщики» рекомендует привлечь ЗАО «Сервисная Компания «Тепловизор» для выполнения работ по сервисному обслуживанию узлов учета тепловой энергии на других объектах г. Москвы."

Н.Н. Елисеева, Главный инженер ГУП ДЕЗ «Текстильщики»
Наши партнёры
Свернуть/Развернуть ТЕПЛОСЧЕТЧИКИ • ВОДОСЧЕТЧИКИ • РАСХОДОМЕРЫ • ВИС.Т Свернуть/Развернуть
/  Архив форума
   /  Программное обеспечение
/  пример на Delphi (pascal) для HydraLink.dll

Форум : Программное обеспечение

Название : пример на Delphi (pascal) для HydraLink.dll

© NegaSoft co., 2005
http://www.teplovizor.ru

URL этой темы
http://www.teplovizor.ru/forum/viewtopic.php?topic_id=249&forum=2


 AlexMPEI :

4.10.12 17:13
 Здравствуйте! Есть ли у кого пример на Delphi (pascal) для работы с HydraLink.dll ?

 xBocT :

8.10.12 14:14
 Добрый день!

К сожалению с Delphi у нас никто не работает, так что не сможем Вам помочь.

 AlexMPEI :

8.10.12 14:33
 xBocT
Цитата:

К сожалению с Delphi у нас никто не работает, так что не сможем Вам помочь.

А нет ли у вас тогда какого-то тестового счетчика, подключенного, например к МОХА конвертеру через rs232, имеющему внешний IP чтобы я мог удаленно сделать себе виртуальный СОМ порт и попробовать свой переделанный под Delphi софт?

 Sashka :

19.11.12 11:24
 unit hydralink;

interface

const
// Типы подключений
HL_CONNTYPE_SER = $00000; // Серийный порт
HL_CONNTYPE_TCP = $00001; // TCP/IP
// Вид протокола, объединяется по | с типом подключения
HL_CONNTYPE_HLINK = $00000; // HLink
HL_CONNTYPE_MODBUS = $10000; // MODBUS
HL_CONNTYPE_TCPEXT = $20000; // Внешний TCP-адаптер

// Виды запрашиваемой информации
HL_INFOKIND_SPECS = $0001; // Общеприборные спецификации
HL_INFOKIND_CFG = $0002; // Общеприборные изменяемые настройки
HL_INFOKIND_VSPECS = $0004; // Спецификации выбранных теплосистем
HL_INFOKIND_VCFG = $0008; // Изменяемые настройки выбранных теплосистем
HL_INFOKIND_CURRENT = $0010; // Текущие значения измеряемых параметров выбранных теплосистем
HL_INFOKIND_GLOBALS = $0020; // Значения накопителей нарастающего итога выбранных теплосистем
HL_INFOKIND_TIME = $0040; // Полное время прибора (исп. команда введ. с v. 2.08 ПО прибора)
HL_INFOKIND_HEADER = $0080; // Заголовок архива
HL_INFOKIND_RECORD = $0100; // Записи с момента, указанного в параметре
// ------------------------------- Режимы синхронизации часов
HL_INFOKIND_CLSYN0 = $1000; // Синхронизировать часы (10 сек)
HL_INFOKIND_CLSYN1 = $2000; // Синхронизировать часы (60 сек - 1 мин)
HL_INFOKIND_CLSYN2 = $4000; // Синхронизировать часы (300сек - 5 мин)
HL_INFOKIND_CLSYN3 = $8000; // Синхронизировать часы (900сек - 15 мин)
HL_INFOKIND_CLSYN = $F000; // Общая маска синхронизации

// Маски выбора теплосистем
HL_CONTOUR_NONE = $0000;
HL_CONTOUR_1 = $0001; // первый виртуальный прибор (Т/С)
HL_CONTOUR_2 = $0002; // второй виртуальный прибор (Т/С)
HL_CONTOUR_3 = $0004; // третий виртуальный прибор (Т/С)

HL_PARAM_C1VMAX =0;
HL_PARAM_C1VMIN =1;
HL_PARAM_C1PMAX =2;
HL_PARAM_C2VMAX =3;
HL_PARAM_C2VMIN =4;
HL_PARAM_C2PMAX =5;
HL_PARAM_C3VMAX =6;
HL_PARAM_C3VMIN =7;
HL_PARAM_C3PMAX =8;
HL_PARAM_TIME =9;

HL_VALUETYPE_NOTEXIST =0;
HL_VALUETYPE_DOUBLE =1;
HL_VALUETYPE_UINT32 =2;
HL_VALUETYPE_TIME =3;

type
HL_CONNECT = record
serial : array [0..31] of Char;
commdev : Integer;
netno : Integer;
port : Integer;
baud : Integer;
ip : Cardinal;
tcpport : Integer;
end;

PHL_Connect = ^HL_Connect;

HL_TIME = record
hour : Integer;
min : Integer;
sec : Integer;
day : INteger;
month : Integer;
year : Integer;
end;


HL_VALUE = record
ltype : Cardinal; // Тип параметра, см. HL_VALUETYPE_... */
val : double;
e : Cardinal; //* Ошибка. Значение не определено, если не ноль */
pnt : Cardinal; //* Рекомендуемое число знаков после запятой*/
end;
PHL_VALUE = HL_VALUE;

HL_REQUEST = record
cmask : Cardinal; // Объединённые по | дефайны HL_CONTOUR_?
infokind : Cardinal; // Объединённые по | дефайны HL_INFOKIND
password : PChar; // Указатель на пароль для операции синхронизации часов
pfunc : Pointer; // Указатель на функцию, которой передаются проценты
fpdata : Cardinal; // Пользовательский параметр, передаётся вторым параметром функции fp
end;
PHL_REQUEST = ^HL_REQUEST;


HL_CURRENT_VALUES = record
case Byte of
0 : (lval : array [0..14] of HL_VALUE);
1 : (v : array [0..2] of HL_VALUE;
g : array [0..2] of HL_VALUE;
t : array [0..3] of HL_VALUE;
p : array [0..2] of HL_VALUE;
q : HL_VALUE;
e : HL_VALUE;
);
end;
PHL_CURRENT_VALUES = ^HL_CURRENT_VALUES;

HL_GLOBALS_VALUES = record
case Byte of
0 : ( lval : array [0..7] of HL_VALUE);
1 : ( tnar : HL_VALUE ;
v : array [0..2] of HL_VALUE;
g : array [0..3] of HL_VALUE;
q : HL_VALUE);
end;
PHL_GLOBALS_VALUES = ^HL_GLOBALS_VALUES;


HL_RECORD_VALUES = record
case Byte of
0 : ( lval : array [0..28] of HL_VALUE);
1 : (
tm : HL_VALUE; // Время записи 1
//--------------------------
v : array [0..2] of HL_VALUE; // 2,3,4
g : array [0..2] of HL_VALUE; // Нарастающий 5,6,7
tnar : HL_VALUE; // Итог 8
q : HL_VALUE; // 9
//--------------------------
tnarh : HL_VALUE; // 10
vh : array [0..2] of HL_VALUE ; // За час 11,12,13
gh : array [0..2] of HL_VALUE; // 14,15,16
th : array [0..3] of HL_VALUE; // 17,18,19,20
ph : array [0..2] of HL_VALUE; // 21,22,23
qh : HL_VALUE; // 24
eh : HL_VALUE; // 25
tminh : HL_VALUE; // 26
tmaxh : HL_VALUE; // 27
tdth : HL_VALUE; // 28
tpowh : HL_VALUE; // 29
)
end;
PHL_RECORD_VALUES = ^HL_RECORD_VALUES;



function HLINK_Read (connect : PHL_CONNECT; request : PHL_REQUEST;
var Res : Pointer; param : Integer) : Integer; stdcall; external 'Hydralink.dll';

function HLINK_UnpackCurrent(cvs : PHL_CURRENT_VALUES;
contour : integer; readRes : Pointer) : Integer; stdcall ; external 'Hydralink.dll';

function HLINK_UnpackGlobals(gvs : PHL_GLOBALS_VALUES; contour : Cardinal; readRes : Pointer) : Integer; stdcall; external 'Hydralink.dll';

function HLINK_UnpackRecord(rvs : PHL_RECORD_VALUES; contour : Cardinal; readRes : Pointer; param : Integer) : Integer; stdcall; external 'Hydralink.dll';

function HLINK_Clear(readRes : Pointer) : Integer; stdcall; external 'Hydralink.dll';

function HLINK_GetValue ( var dest : HL_VALUE; paramKind : Integer;
contour : Integer; readRes : Pointer) : Integer; stdcall ; external 'Hydralink.dll';

function ValToType (hlvalue : HL_VALUE; IsItTime : Boolean = false) : Double;

implementation
Uses JclDateTime;

function ValToType (hlvalue : HL_VALUE; IsItTime : Boolean = false) : Double;
var
c : Cardinal;
i : Integer;
begin
Result := 0;
if (hlvalue.e > 0) then Exit;
if (IsItTime) then hlvalue.ltype := 4;
case hlvalue.ltype of
1 : Result := hlvalue.val;
2 : begin
c := pinteger(@hlvalue.val)^;
Result := c;
end;
4 : begin
Result := JclDateTime.UnixTimeToDateTime(pinteger(@hlvalue.val)^);
end;
end;
end;


end.

--------------------------------------------------------------------------------------------------------------------------
Пример опроса
....
var
connect : HL_CONNECT;
req : HL_REQUEST;
readRes : Pointer;
err : PChar;
bErr : Integer;
cvs : HL_CURRENT_VALUES;
gvs : HL_GLOBALS_VALUES;
rvs : HL_RECORD_VALUES;
i,j, k : Integer;
temp : String;
v : HL_VALUE;
begin
connect.commdev := HL_CONNTYPE_TCP; // TCP/IP
connect.netno := 255; // Сетевой номер прибора (задан в его настройках)
connect.baud := 9600; // Скорость (как в приборе 9600 или 19200)
connect.ip := $C0A8FE46; // IP-адрес прибора (в примере 192.168.0.1)
connect.tcpport := 5000; // TCP-порт прибора (по умолчанию порт 1590)
req.cmask := HL_CONTOUR_1 or HL_CONTOUR_2 or HL_CONTOUR_3;
req.infokind := HL_INFOKIND_RECORD; // HL_INFOKIND_CURRENT or HL_INFOKIND_TIME or HL_INFOKIND_GLOBALS;
req.pfunc := nil;
bErr := HLINK_Read(@connect, @req,ReadRes,-35);
if (bErr <> 0) then
begin
Err := PChar(readREs);
ShowMessage(Err);
HLINK_Clear(readRes);
Exit;
end;

for k := 0 to 2 do
begin

bErr := HLINK_UnpackCurrent(@Cvs,k,readRes);
if (bErr <> 0) then
begin
HLINK_Clear(readRes);
Exit;
end;

for i := 0 to 14 do
begin
if (cvs.lval[i].ltype > 0) and (cvs.lval[i].e = 0)
then
begin
temp := IntToStr(i) + '. type:' + IntToStr(cvs.lval[i].ltype) + ' ' + FloatToStr(ValToType(cvs.lval[i]));
mmo1.Lines.ADd (temp);
end;
end;
mmo1.Lines.Add('>>')
end;

bErr := HLINK_GetValue( V, HL_PARAM_TIME,0,readRes);
if (bErr = 0) and (v.e = 0) then
begin
mmo1.Lines.Add (DateTimeToStr(ValToType(V,True)));
end;

HLINK_Clear(readRes);


end;

 AlexMPEI :

19.11.12 12:07
 Цитата:

Sashka пишет:
...


Болшущее спасибо, Sashka!!!