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

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

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

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


Сообщения - B.B

Страницы: [1] 2
1
Ваши вопросы / Re: Ключ защиты.
« : 24 Февраля 2025, 10:08:24 »
Не видно. Ни во внешнем, ни во внутренних портах.

2
Прямо какой-то "эффект генерала" наоборот... всё работает.
Код: (delphi)
var
  DateStart, DateEnd: TDateTime;
begin
  DateEnd:= Now;                                                     // время завершения цикла
  DateStart:= IncMinute(DateEnd, -CycleTime.AsInt)   // время начала цикла
end.
Спасибо за оперативную помощь  :D

3
Ваши вопросы / Re: Ключ защиты.
« : 21 Февраля 2025, 10:59:11 »
Посмотрю, но доступ к BIOS`у раньше понедельника не получу.

4
Использовании в скриптах функции сдвига, например на определённое число минут IncMinute,
в качестве параметра сдвига можно задать только константу.

Возможно ли работать с переменной типа DateTime или TDateTime?

Пока применяются возможности СУБД для работы со временем.

5
Ваши вопросы / Ключ защиты.
« : 21 Февраля 2025, 10:36:35 »
Добрый день.

У компьютера с сервером Simple-Scada есть порт на материнской плате и датчик открытия корпуса.
Очень хотелось бы перенести "флешку" внутрь корпуса, но при установке ключа защиты в этот порт ключ не виден.

В портах которые выведены на корпус всё отлично определяется и работает.
Любые носители (дисковые накопители, флешки и т.д.) при установке в порт на плате определяются и нормально работают.

Можете подсказать в чём может быть причина?


6
Есть же round()...
Нам надо именно целую часть, а Round() Возвращает число X округленное до ближайшего целого..
Поэтому INT

Иначе из 7,55 (это 7 часов 33 минуты) получим 8 часов и 33 минуты. Что неверно.

7

Почему-то
sunriseMinutes:=Int((sunrise*60) div 60);
даёт ошибку incopatible types "SINGLE" and "INTRGER"

я так понимаю, потому что операция деления нацело определена в Паскале только для случая, когда по обе стороны от div указаны
целочисленные значения. а у вас  переменная sunrise имеет тип SINGLE
Немного не так Int((sunrise*60) - целое, 60 - целое.
Поэтому "по обе стороны от div указаны целочисленные значения"

UPD Прошу прощения. Скобки! Порядок неправильный!! Действительно SINGLE получится, а выглядит как целое  :D

8
Добрый день. Подскажите пожалуйста, может быть есть скрипт для подсчета астрономического восхода и захода солнца? Планируется ли добавление в функционал расписания включение/отключения по заходу/восходу?

Подскажу примерные формулы (не учитывают сумерки) ... реализацию в скрипте не проверял (просто набил в ответе  :P )
1. Считаем склонение солнца в день года (подробнее см. в J. A. Duffie and W. A. Beckman, "Solar Engineering of Thermal Processes, 3rd Edition" pp. 13-14, J. Wiley and Sons, New York (2006))   
  sigma=(23.45*PI/180)*sin(2*PI*(284+_НОМЕР_ДНЯ_ОТ НАЧАЛА_ГОДА_)/365)
  Високосные года можно учитывать, а можно и не учитывать (небольшая погрешность в единицы минут получится)
2. Для известной широты места в градусах (далее _L_) считаем угол восхода/заката
  sunrise = acos(-tan((_L_*PI/180))*tan(sigma))
3. От истинного полудня отнимается угол восхода/заката (один час это 15 градусов) и получаем время восхода 
  _ВОСХОД_= 12-sunrise/(15*PI/180) 
  в полученной дроби целая часть - час восхода 
  ((_ВОСХОД_*60) div 60) - минуты восхода 
  _ЗАКАТ_= 12+sunrise/(15*PI/180) 
  в полученной дроби целая часть - час заката 
  ((_ЗАКАТ_*60) div 60) - минуты заката

Код: (delphi)
var 
 sigma,sunriseAngle,sunrise,sunset: Single;
 sunriseHour, sunriseMinutes, sunsetHour, sunsetMinutes : Extended;
begin
// склонение солнца в текущий день года
  sigma:=(23.45*PI/180)*sin(2*PI*(284+DayOfTheYear(Now))/365);
// для 45 градусов северной широты угол восхода солнца равен
  sunriseAngle:= arccos(-tan((45*PI/180))*tan(sigma));
// угол восхода
  sunrise:= 12-sunriseAngle/(15*PI/180);
// угол заката
  sunset:=12+sunriseAngle/(15*PI/180);

// искомые часы и минуты
  sunriseHour:=Int(sunrise);
  sunriseMinutes:=Int((sunrise*60) div 60);
  sunsetHour:=Int(sunset);
  sunsetMinutes:=Int((sunset*60) div 60);
end.

UPD 3-12-2024
Добрался до редактора...

Почему-то
sunriseMinutes:=Int((sunrise*60) div 60);
даёт ошибку incopatible types "SINGLE" and "INTRGER"

рабочий код ниже.

Код: (delphi)
var 
 sigma,sunriseAngle,sunrise,sunset: Single;
 sunriseHour,sunriseMinutes,sunsetHour,sunsetMinutes : Extended;
begin
// склонение солнца в текущий день года
  sigma:=(23.45*PI/180)*sin(2*PI*(284+DayOfTheYear(Now))/365);
// для 45 градусов северной широты угол восхода солнца равен
  sunriseAngle:= arccos(-tan((45*PI/180))*tan(sigma));
// угол восхода
  sunrise:= 12-sunriseAngle/(15*PI/180);
// угол заката
  sunset:=12+sunriseAngle/(15*PI/180);

// искомые часы и минуты
  sunriseHour:=Int(sunrise);
  sunriseMinutes:=Int((sunrise-sunriseHour)*60);

  sunsetHour:=Int(sunset);
  sunsetMinutes:=Int((sunset-sunsetHour)*60);
end.


9
Ошибки / Шкалы трендов
« : 20 Июля 2022, 22:13:31 »
Версия 2.5.13 (да, старая, но это на рабочем объекте и обновлять в ближайшие пару месяцев не будут)

При отображении переменных с одинаковым диапазоном (температуры) на шкале два деления с отметкой 50. (см. рис.)
Если уменьшить масштаб (цена деления от 2 градусов и более), то отображается корректно.

Возможно ошибка есть и в более новых.

10
Ваши вопросы / Re: Сервер на OS Linux
« : 19 Мая 2022, 16:23:51 »
Здравствуйте.
Планируется создать серверную версию Simple-Scada 2 для ОС Linux (x86, ARM)?

Отлично живёт под Wine`ом. Только рендер OpenGL.
И инсталлятор и сервер/редактор/клиент.
Под Ubuntu 16.04 проверено.

11
Ваши вопросы / Re: Наборы мнемосхем
« : 19 Мая 2022, 09:51:37 »
Это будет ад для разработчика интерфейса (фактически два проекта, но в одном и не закроет вопрос с разрешением экрана).

Накидать всё на одну мнемосхему.

Сделать переключение видимости объектов.
Мобильная версия  имеет префикс для всех объектов Mobi, десктопная Desk

И при первом запуске для десктопа делать
Код: (delphi)
var
  aObject: TM_Object;
  i: integer;
begin
{для всего, что на форме есть
GetShapeByName        GetFieldByName
GetTextByName            GetImageByName
GetLevelByName          GetButtonByName
GetPipelineByName      GetLineByName
GetValveByName          GetTankByName
GetTimeTrendViewerByName        GetScaleByName
GetCheckBoxByName   GetComboBoxByName
GetTableByName           GetCalendarByName
GetScheduleByName    GetMessageViewerByName
}
  for i:=1 to 999 do
  begin
    aObject := GetObjectByName('Mobi'+'Field'+IntToStr(i));  // ищем объект с префиксом Mobi
    if aObject <> nil then                   // если объект найден
      aObject.Visible := False;                // меняем видимость

    aObject := GetObjectByName('Mobi'+'Text'+IntToStr(i));  // ищем объект с префиксом Mobi
    if aObject <> nil then                   // если объект найден
      aObject.Visible := False;                // меняем видимость


    // ******* и т.д.
 
  end

end.

Для мобильного, соответственно     
Код: (delphi)
aObject := GetObjectByName('Desk'+'Field'+IntToStr(i));  // ищем объект с префиксом Desk

12
Спасибо за ответ.

Просто опять хотелось обойти гору...

Есть прибор с управлением через USBTMC драйвер, программа готовая для него
и очень сильнО было желание "без труда и без науки..."(С)
данные с него на этапе отладки в scada тренды запихать.

Но... истинный путь благородного мужа лежит через open62541  ;D

13
Добрый день.

Подскажите, пожалуйста, есть ли доступ к системным библиотекам из скриптов SimpleScada?
Например, для обращение к СОМ-портам.

14
Ясно. Неправильно поставлен вопрос был.
При записи руками значения в тег происходило изменение в ПЛК.
При изменении значения на мнемосхеме тег не обновлялся (теги только на чтение или только на запись, это ограничение устройства).

В логах arОРС (во вложении) часто встречается
"05.04.2022 10:00:52.998 - Превышено максимальное количество запросов на присвоение в устройстве "MOPO""

Обмен с МОПО 115200 бит/с по последовательному каналу. Т.е. частота опроса в 100 мс никак очередь вызвать не могла (там всего 13 тегов, на запись 3 и 10 на чтение).

Оказалось, что на обмен влиял второй порт в панельном ПК на который были подключены частотные преобразователи.
При выключенных ПЧ начинался неуверенный обмен с МОПО, получалась очередь и, как следствие, задержка обмена.

Спасибо за помощь и объяснение.

15

Скада работает всегда одинаково, как сразу после запуска, так и через любое другое количество времени. При записи значения в тег скада лишь передает на OPC-сервер обновленное значение и никак не влияет на скорость, с которой произойдет запись.
Вот об этом и речь. По какой-то причине происходит задержка передачи.

Скорость будет зависеть от того, как быстро OPC-сервер передаст значение на ПЛК и как быстро ПЛК его запишет.

Повторите проблему и пришлите логи OPC-сервера. Также, пришлите конфигурацию OPC-сервера. Возможно разработчик arOPC подскажет, в чем может быть проблема.
От ОРС на ПЛК передача происходит "мгновенно". От SCADA на ОРС тег не приходит (видно предыдущее значение). Как только значение тега в ОРС изменилось - тут же следует реакция ПЛК.

Логи приложу чуть позже. Установка в НИИ, удалённого доступа нет, надо выезжать на место (оформлять документы и т.д.).

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