Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Передача тегов в процедуру  (Прочитано 274 раз)

Миханик

  • Постоялец
  • ***
  • Сообщений: 198
    • Просмотр профиля
    • www.vpa-dv.ru
Передача тегов в процедуру
« : 22 Мая 2026, 05:48:34 »
Добрый день.

Как правильно передать тег в процедуру?

Объявляем вот такую процедуру, и мне в нее нужно передать теги
Код: (delphi)
Procedure Gom_ControlPump_Run(var mqtt_pump_Run, vrPump_Run : boolean; State_Pump : integer; bit : byte);
begin
  // Управление включением насоса
  if mqtt_pump_Run then
    if not GetBit(State_Pump, bit) then // если насос выключен
      vrPump_Run := mqtt_pump_Run
    else // если насос включен, то сбрасываем бит включения
      begin
        vrPump_Run := false;
        mqtt_pump_Run := false;
      end;
end;
Но при вызове процедуры возникает ошибка
Код: (delphi)
Gom_ControlPump_Run(mqtt_Gom_Run_pump5.Value, drskGom_SN5_Run.Value, drskGom_State_Pump57.AsInt, 2);
видимо потому что mqtt_Gom_Run_pump5.Value и drskGom_SN5_Run.Value это свойства переменной, а не сама переменная.
Но как тогда правильно сделать?
« Изменён: 22 Мая 2026, 07:07:04 от Simple Scada »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 288
    • Просмотр профиля
    • Simple-Scada
Re: Передача тегов в процедуру
« Ответ #1 : 22 Мая 2026, 12:42:33 »
Здравствуйте.

Если в процедуру необходимо передавать переменные в качестве параметра, то для этого переменные необходимо объявлять как класс "TM_Variable":
Код: (delphi)
procedure GomControlPumpRun(AMqttPumpRun, APumpRun, AStatePump: TM_Variable; bit: Byte);
begin
  if AMqttPumpRun.AsBool then
    if not GetBit(AStatePump.AsInt, bit) then
      APumpRun.Value := AMqttPumpRun.AsBool
    else
    begin
      APumpRun.Value := False;
      AMqttPumpRun.Value := False;
    end;
end;
Вызов процедуры:
Код: (delphi)
GomControlPumpRun(mqtt_Gom_Run_pump5, drskGom_SN5_Run, drskGom_State_Pump57, 2);