Показано с 1 по 10 из 22

Тема: Запрос по маске в MasterOPC Server

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию Запрос по маске в MasterOPC Server

    Добрый день! Попытался реализовать протокол для устройства в MasterOPC Server согласно инструкции для функции Modbus Function Code 23 (0x17) Read/Write Multiple Registers https://insat.ru/products/Universal_...ver_API_UG.pdf, но что то пошло не так.
    Запрос по маске сделал на основе скрипта первого примера для датчика температуры и влажности МАВ-ТС100 фирмы «Микрофор». Решил начать с самого простого старт/остановка устройства, старт запись в 0x000C значения 0x0001, стоп запись 0x0000 соответственно. Скрипт из примера для теста обрезал по максимуму для своих тестов.

    Код скрипта:
    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

    Формируемая маска запроса в MasterOPC Server 21-07-2021 17:36:51.224 SMS HRZ::ChillerCOM5) Tx: [0014] 01 17 00 00 00 00 00 0C 00 01 02 D9 0D 0A , причем я сделал логическое переключение для старта и остановки устройства, но при задании true либо false маска запроса никак не изменяется. Я ожидал получить такую маску : 01 17 00 00 00 00 00 0C 00 01 02 00 01 LRC 0D 0A
    Вложения Вложения

Похожие темы

  1. MULTI-PROTOCOL MASTEROPC SERVER
    от oleg1821 в разделе Master SCADA 3
    Ответов: 19
    Последнее сообщение: 13.11.2018, 07:38
  2. MasterOPC Server теряет связь
    от Михаил85 в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 05.10.2018, 08:26
  3. Universal MasterOPC Server и TeamViewer
    от a_gricaj в разделе OPC Серверы
    Ответов: 0
    Последнее сообщение: 06.05.2018, 15:43
  4. Modbus Universal MasterOPC Server и ВКТ-7
    от Alex Tulaev в разделе Master SCADA 3
    Ответов: 5
    Последнее сообщение: 03.03.2017, 09:55

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •