function Start_Chill(num_reg)
local send={}; --массив отправляемых чисел
local Addr=server.GetCurrentDeviceAddress( );--получения адреса устройства
table.insert(send,Addr); --добавляем в таблицу первый элемент - адрес
table.insert(send,0x17); --добавляем в таблицу второй элемент - идентификатор команды
table.insert(send,0x0000); --добавляем в таблицу третий Read Address Hi Lo
table.insert(send,0x0000); --добавляем в таблицу четвертый Quantity to Read Hi Lo
table.insert(send,0x000C); --добавляем в таблицу пятый Write Address Hi Lo
table.insert(send,0x01); --добавляем в таблицу шестой Quantity to Write
table.insert(send,0x02); --добавляем в таблицу седьмой Byte Count
table.insert(send,num_reg); --добавляем в таблицу восьмой Значение на запись
local sendmask={"byte","byte","int16:10","int16:10","int 16:10","int16:10","byte","int16:10"}; --маска отправляемого запроса
local dest={}; --массив полученных чисел
local destmask={"byte","byte","byte","int16:10"}; --маска принимаемого запроса
local err,len;
local n=0;
repeat
--посылка и получение запроса в устройство
err,dest,len=server.SendAndReceiveDataByMask(3,8,s endmask,send,destmask,20);
n=n+1;
--условие выхода - корректный ответ или превышение запросов
until err>=0 or n>=server.GetCurrentDeviceRetry()
--обрабатываем полученные данные
if err>=0 then
--запрос выполнен корректно
if dest[2]==0x17 then
return true,dest[3]; --возвращаем флаг что запрос корректен и значение
else
server.Message("Неизвестная функция"); --пишем сообщение в лог
return false,0; --запрос некорректен
end;
else
return false,0; --запрос некорректен, возвращаем соответсвующий флаг
end;
end;
-- Initialization
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnWrite()
if server.ReadCurrentTag()==true
then noerr,RegH=Start_Chill(0x0001)
else noerr,RegH=Start_Chill(0x0000)
end;
end