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

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

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - razorqhex

Страницы: [1] 2 3
1
Ваши вопросы / Программное реле времени
« : 11 Ноября 2020, 14:37:46 »
Здравствуйте. Есть некоторые проблемы в реализации в автоматизации управления станциями.
Реле времени это функция, которая должна включать и выключать скважины по времени, который задает оператор
За поля времени ВКЛЮЧИТЬ и ВЫКЛЮЧИТЬ станцию отвечает виджет "Календарь", но в документации не нашёл функций, которые с этих виджетов брали значение и через введённое время включали или же выключали станцию.

Логика такова: в поле "Когда включать" задается время когда включать станцию, то-есть в это время производится запись в тег значение 1148, в поле "Когда выключать" задается время выключения станции и в тег записывается 1048. Кнопка "Задать время" включается реле времени.

Получается в 11:50 станция включилась, а в 23:00 выключилась и так постоянно в обоих полях будет 00:00.

Сложного нет ничего, но мне нужно или логику мышления сменить или я действительно не смог найти нужных мне функций для реализации данного вопроса.

2
Здравствуйте. Несколько раз за один час появляется ошибка в редакторе после нажатия на кнопку "Переменные" (см. скрин)
После ошибки редактор намертво вис и не на что не реагировал. Сервер скады в журнале ничего не пишет. Что это может быть за ошибка?

После редактирование скриптов я часто перехожу в раздел переменных и вылетает такая вот ошибка.

3
Здравствуйте.

Проблема состоит в том, что SCADA сервер бесконечно подключается к OPC серверу (см. скриншот) хотя при запуске проекта OPC сервер запускается и данные в нём есть, в проекте их же нету. На каждом элементе в скаде присутствует жёлтый знак восклицания.

DCOM настраивал как по инструкции.

В чём ещё может быть проблема?

4
Здравствуйте. В скриптах нужно сменить текст кнопки, но свойства такого нету. Скажите, есть-ли возможность изменить текст кнопки через скрипт?

5
Ваши вопросы / Проблемы с Web доступом
« : 21 Сентября 2020, 16:00:32 »
Здравствуйте. Сделал Web доступ на проекте, но не прорисовываются значения в полях и по вкладкам проекта не переключается, также невозможно посмотреть тренды. В чём может быть проблема?

6
Здравствуйте

Подскажите как я могу реализовать на графике шкалу с минусовыми значениями. Нужна шкала от 40 до -40 и если значение тега будет -5.36, то чтобы корректно это отобразилось на графике

7
Здравствуйте всем.

Есть такой скрипт по изменению переменных:
Код: (delphi)
    
if (StatusWord_PNS3.Value = TRUE) and (GetBit(Ext_Status_Word_2_PNS3.AsInt, 21) = FALSE) then
    begin
      Shape1.FlashColor := clNone;
      Shape1.Color := clGreen;
      Text12.Text := "ВВІМКНУТО";
      Text12.FontColor := clWhite;
      AddMessage(Now, mkMessage, '[ПНС 7 Гайдара] ввімкнута', true, false);
    end else if (StatusWord_PNS3.Value = FALSE) and (GetBit(Ext_Status_Word_2_PNS3.AsInt, 21) = TRUE) then
    begin
      Shape1.FlashColor := clNone;
      Shape1.Color := clYellow;
      Text12.Text := "СОН";
      Text12.FontColor := clBlack;
      AddMessage(Now, mkWarning, '[ПНС 7 Гайдара] сон', true, false);
    end else if (StatusWord_PNS3.Value = FALSE) and (GetBit(Ext_Status_Word_2_PNS3.AsInt, 21) = FALSE) then
    begin
      Shape1.FlashColor := clNone;
      Shape1.Color := clRed;
      Text12.Text := "ВИМКНЕНО";
      Text12.FontColor := clWhite;
      AddMessage(Now, mkWarning, '[ПНС 7 Гайдара] вимкнута', true, false);
end;

всё работает правильно, но есть проблема с переменной Ext_Status_Word_2_PNS3, а именно: она несколько раз меняет своё значение и бит этих значений одинаковый и по этому в сообщения в скаде дублируются по 4-8 раз.

Ext_Status_Word_2_PNS3 менят постоянно свои значение на:
  • 2148270464 что означает бит 0
  • 2282488192 что означает бит 0
  • 2883968      что означает бит 1
  • 6528            что означает бит 0

Информацию показывает как скада так и переменная верно, но из-за того что числа меняются постоянно и в большинстве там одинаковый бит - сообщения дублируются.

У кого какие идеи, как можно такое пофиксить?

8
Всем здравствуйте.

С ОРС сервера скада подтягивает тег DiscreteInputCount0_8. Это обыкновенный счётчик, он постоянно накапливает значение. Так же есть поле ввода числа для калибровки Field_Calibrate_VNS8, поле где нужно выводить с калиброванное число Field66 и переменная, которая в себе хранит собственно это с калиброванное число DiscreteInputCount0_8_GeneralQ.

Реализовать такую штуку у меня получилось крайне неправильно и костыльно. Для калибровки значения оператор должен был ещё производить некие вычисления у себя на бумажке и нужное число вписать в поле Field_Calibrate_VNS8, но калибровка на то и калибровка, что оператор должен ввести число 54749273 и это число должно вывестись в поле Field66 + учитывать НОВЫЕ значения счётчика, то-есть счётчик имеет число (тег DiscreteInputCount0) 54749273, но скада была выключена и счётчик намотал 54749856, оператор вводит число в поле калибровки 54749856 и заодно скада должна учитывать новые данные со счётчика уже, то-есть 54749857, 54749858, 54749859 и т.д. то-есть от введённого числа калибровки продолжить считать. Также ежемесячно оператор должен писать 0 в поле для калибровки, и скада должна обнулить счётчик в 0, но обнулить свой тег DiscreteInputCount0_8_GeneralQ (потому что тег с ОРС сервера обнулить невозможно) и с нуля учитывать новые вхождения значений от счётчика, то-есть 0, 1, 2...и до какого-то 8763452394 числа пока снова оператор не обнулит счётчик

9
Ваши вопросы / Вывод бита переменной
« : 06 Июля 2020, 15:00:40 »
Здравствуйте. Подскажите что я делаю не так. Мне нужно вывести в каком состоянии находится бит переменной. Пишу вот такой скрипт:
Код: (delphi)
varBit := GetBit(DiscreteInput_Output_VNS16.AsInt, 4);
Field158.Value := varBit.ToInt32;
Но объект Field158 не выводит никакое число

10
Ваши вопросы / Запись в файл
« : 18 Июня 2020, 13:59:09 »
Здравствуйте.

Появился вопрос как постоянно записывать информацию в txt файл без его сброса чтобы скада постоянно не перезаписывала его.  Каждый час в БД записывается информация, но нужно запись в файл чтобы можно было в любой момент сбросить файл с нужной информацией. Вот весь код. Здесь происходит запись в таблицу tblVNS8 и в файл, но проблема состоит в том, что пишет он ноли и постоянно файл перезаписывает.
Код: (delphi)
var
  aQuery: string;
  dataInFile: string;
  aCell: TM_TableCell;
begin
  if (SpecificPowerConsumption_VNS8_End.AsInt64 <> 0) and (SpecificPowerConsumption_VNS8_Start.AsInt64 <> 0) then
    begin
    aCell := tblVNS8.GetCell(0, tblVNS8.RowIndex);

    aQuery := 'UPDATE `specificinfovns8` SET ' +
      '`timestamp`=' + MySQLDateTime(Now, dttFull) + ', ' +
      '`specific`=' + QuotedStr(vrSpecificVNS8.AsStr) + ', ' +
      '`hourly`=' + QuotedStr(vrHourlyVNS8.AsStr) + ', ' +
      '`rpm`=' + QuotedStr(vrRPMVNS8.AsStr) + ', ' +
      ' WHERE `id`=' + QuotedStr(aCell.Text);

    dataInFile := DateToStr(Now) + ' ' + vrSpecificVNS8.AsStr + ' '  + vrHourlyVNS8.AsStr + ' ' + vrRPMVNS8.AsStr;

    TextFileOpen('TableVNS8.txt', '', fomRewrite, fcpUTF8);
    TextFileWriteLn(dataInFile);
    TextFileClose;

    RunSQL(aQuery, nil, 5);
  end;
end.

11
Ваши вопросы / Связь с ПЛК
« : 28 Мая 2020, 14:06:37 »
Здравствуйте.

Пишем свой скрипт определения связи с ПЛК. К сожалению скрипт в примерах Simaple-Scada не подошёл из-за проблем нижнего уровня по этому было решено постоянно менять значение переменной в самом ПЛК.

Был написан вот такой скрипт:

Код: (delphi)
begin
  if InterfaceModule_disconnect_flag.Value = FALSE then
  begin
    InterfaceModule_disconnect_flag.Value := TRUE;
  end else begin if InterfaceModule_disconnect_flag.Value = FALSE then
  begin
    InterfaceModuleTimerCheckState.Value := 0;
    vrMsgDisconnect.Value := TRUE;
    if vrMsgConnect.Value = TRUE then
    begin
      AddMessage(Now, mkMessage, 'Установлена связь с ПКЛ', true, false);
      vrMsgConnect.Value := FALSE;
    end;
  end else
  begin
    InterfaceModuleTimerCheckState.Value := InterfaceModuleTimerCheckState.Value + 1; //Накопление 10-ти секунд
    if InterfaceModuleTimerCheckState.Value >= 10 then
    begin
    vrMsgConnect.Value := TRUE;
    if vrMsgDisconnect.Value = TRUE then
    begin
      AddMessage(Now, mkAlarm, 'Связь с ПЛК утеряна', true, true);
      vrMsgDisconnect.Value := FALSE;
    end;
    end;
    end;
  end;
end.

Суть задачи такова, что постоянно нужно менять значение в теге InterfaceModule_disconnect_flag с TRUE на FALSE. То-есть по дефолту тег имеет значение TRUE, скада должна менять значение на FALSE, но если по истечению 10-ти секунд значение с FALSE не сменится на TRUE значит ПЛК не на связи.

Скрипт к сожалению отрабатывает не совсем так как хотелось. Подскажите пожалуйста в чём может быть проблема, какое может быть решение?

12
Здравствуйте.
На ПЛК реализовали функцию обнуления переменных при потере связи с модемом. На ОРС сервере (MasterOPC) теги все обнулились, на скаде нет, но другие теги обновляются нормально. То-есть те теги которые обнулились на ОРС сервере на скаде остались на своих старых значениях вместо ноля

13
Здравствуйте. Раннее в теме "Расчёт удельной потребляемой мощности" я писал о том, что функция ArchiveValueByTime иногда пишет ошибку NAN после расчётов. Я думал, что исправил, но за сутки довольно таки много раз попадается ошибка NAN, а если значение переменной перевести в строку, то будет ошибка INF.

Ошибка происходит именно в расчёте удельной потребляемой мощности. Эта функция ещё используется в расчётах суточной воды и часовой, но там всё в порядке и никаких ошибок не было.

Скрипт который выполняется каждый час:

Код: (delphi)
var
  aDateSpecPower: TDateTime;
begin

  //Удельная потребляемая мощность ВНС 19
  aDateSpecPower := RecodeTime(Now, HourOf(Now), MinuteOf(Now), 0, 0);
  ArchiveValueByTime(kWh_Counter_19, SpecificPowerConsumption_VNS19_End, aDateSpecPower);

  aDateSpecPower := IncHour(Now, -1);
  ArchiveValueByTime(kWh_Counter_19, SpecificPowerConsumption_VNS19_Start, aDateSpecPower);

end.

Скрипт "Изменилась переменная". Он срабатывает по тегам SpecificPowerConsumption_VNS19_End и SpecificPowerConsumption_VNS19_Start

Код: (delphi)
begin
  SPC_VNS19.Value := SpecificPowerConsumption_VNS19_End.Value - SpecificPowerConsumption_VNS19_Start.Value;
  //Вычисляем удельную потребляемую мощность ВНС19
  SpecificPowerConsumption_VNS19_Result.Value := SPC_VNS19.value / HourlyWaterConsumption_VNS19_Result.Value;
end.

Потом бывает очень странный график (красная линия)

Тег HourlyWaterConsumption_VNS19_Result имеет результат расчёта часового расхода воды, но через туже самую ArchiveValueByTime расчёт происходит правильно и без ошибок.

Расчёты суточной воды и часовой абсолютно одинаковы вместе с расчётом удельной потребляемой мощности, но меняются в расчётах только теги.

14
Здравствуйте. Вопрос состоит в том, как сделать больше делений на шкале графика чтобы было 0.1, 0.2, 0.3...1.
Сейчас деление идёт по 0.5, как уменьшить это?
Требуется это сделать на красной шкале

15
Здравствуйте. Не могу никак понять логику, как можно добавить строки в таблицу через скрипт?

Допустим есть кнопка, по нажатию на кнопку нужно создавать строку с неким текстом столько раз, сколько была раз нажата кнопка. Понажимал я её раз 10 и 10 строк с каким-то текстом там создалась.

А по факту мне некий список, который будет ежечасно заполнять себя значениями расхода воды

Страницы: [1] 2 3