Спасибо! Работает.
Вид для печати
Спасибо! Работает.
А скажите, в чём отличие канала сообщений "журнал" от канала "архив"? Из справки и методичек понятно не стало.
SCADAMaster , в версии 3.7.1.54827 (в других не проверял) не работает WORD_TO_INT (если данное преобразование происходит в функциональном блоке)
В приложенном проекте 2 программы, одна работает без ФБ, вторая идентичная, только вызов ФБ происходит из библиотеки. Как только ворду присваиваю больше >32767, выход программы отваливается, показывая ошибку.
Добрый день.
Скажите, можно ли как-то в минилегенде установить (отсортировать) названия перьев в нужном мне порядке?
Спасибо.
Как почистить старые данные из файлового архива? Например, в архиве данные за 3 месяца - хочется оставить данные только за последнюю неделю?
Максимальное значение int16 это 32767
Об этом же написано и в справке по ST
Канал "Архив" по сути представляет собой сохранение сообщения в архив для его последующего просмотра, т.е. без него после перезапуска проекта сообщения без этой галки вы не увидите
Журнал остался для совместимости со старыми проектами. В будущих версиях скорей всего будет убран. Сейчас он ни на что уже не влияет.
Частично.
Файловый архив удаляется блоками. Т.е. грубо говоря пока блок не будет больше определенного (хотя и не очень большого) объема И не превысит значения по времени, удаления не будет. Лишние значения не удаляться, но могут остаться небольшие "хвосты" за 11-12 день. Это особенность файлового архивирования.
О том что максимальное значение INTa: 32767 я знаю со школьного курса информатики, а также я знаю, И О ЧЕМ В ВАШЕЙ ЖЕ СПРАВКЕ НАПИСАНО, что у wordа верхний предел это : 65535. И в скаде вашей работает конвертация, только в скрипте когда ее производишь.
Прочитайте мое сообщение повнимательней, и не поленитесь скачать проект который я Вам предоставил, и присвойте ИМЕННО wordам ( в программах ST это входы IN) значение превышающее 32767, и увидите как один ST-код работает, а второй нет. Он должен перевести значения INT после верхнего предела в отрицательные, так как количество значений и у INTa и у WORDа одинаковое!
Чем принципиально отличается Повторитель от Значения, который используется как повторитель/клеммник?
Сервис внешних связей мне не очень понравился, а ФБ нельзя группировать. Но в справке и методичках рекомендуется использовать именно Повторитель.
В принципе можно использовать и значение и повторитель.
Значение по умолчанию наследует атрибуты источника (тип данных, шкалу), но это можно выключить поставив галочку "Запрет наследования типов".
Просто ранее (до версии 3.5) значение работало только на вход, поэтому и использовался повторитель.
ScadaMaster, вы меня игнорируете?
Проблема проявилась, мы с ней разберемся.
В какой срок ожидать исправления?
Очень короткий вопрос. Наверняка уже задавали, но не шмогла найти.?
Как в Изображение Объекта вывести имя этого объекта? Что бы при последующем копировании объекта и переименовании копий это имя также менялось и на дочерних "изображения объекта"?
Штатно вывести имя объекта нельзя.
Можно сделать специальный скрипт, который запишет в значение имя объекта, а уже это значение выносить на мнемосхему.
Подскажите, где читать и смотреть. Хочу в отчет вывести все аварийные сообщения за последний сутки. Сообщения именно типа "Авария". Не могу найти в примерах и хелпе как выводить архив сообщений.
Редактор отчетов работает только с архивом данных, и не работает с архивом сообщений.
Как вариант - можно с помощью скрипта отслеживать появление событий и записывать их на выходы скрипта. А уже эти выходы скрипта использовать в редакторе отчетов.
В приложении проект с несколькими различными скриптами для работы с архивом сообщений, вам нужен пример "Отслеживание сообщений категорий и источников".
Подробнее также описано здесь:
http://blog.insat.ru/2016/08/c-masterscada_13.html
Это я понимаю. А есть ли свойство в API типа "Имя родительского объекта" или надо разбирать весь путь, полученный по FullName, и выдирать оттуда предпоследний элемент?
HostFB.TreeItemHlp.ParentObject.Name
Но вообще лучшее решение - сделать Команды которые будут содержать имена объектов. С помощью скрипта в режиме разработке по команде DoAction перебирать все объекты вниз, искать значения и писать в них имя родительского объекта.
sing System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using MasterSCADALib;
using MasterSCADA.Common;
using MGDesign.MasterSCADA;
using MGDesign.Hosts;
using MGDesign.Items;
using System.IO;
using System.Drawing;
using System.Windows.Forms;
public partial class ФБ : ScriptBase
{
string NewName; // новое имя из имени объекта
//чтобы выполнить скрипт - нажмите кнопку DoAction
public override void DoAction()
{
var elem = (ITreeItemHlp)HostFB.TreeItemHlp.Project.ObjectTre eRootItem; // устанавливаем местоположение скрипта как в корневом объекте
elem.NavigateChilds(delegate(ITreeObjectHlp item)
{
if (item.ObjectType != EObjectType.otFolder) //проверка что переменная это объект
return true; //если не объект - переход к следующему объекту
//создание переменной команды "Имя_Объекта"
var name=(ITreePinHlp)HostFB.TreeItemHlp.Project.Item( item.FullName+".Имя_Объекта");
if (name==null) return true; //если такой команды нет - переход к следующему объекту
string StrName=name.ParentObject.Name; //определяем имя объекта
name.ConstValue=StrName; //записываем в константу
name.ApplyChange(""); //применяем
return true;
}, TreeItemMask.Object, (NavigateItemsFlags)0);
}
}
Скрипт сделан усечением из другого - может быть с ошибками, но принцип мы думаем ясен.
Спасибо. Вот рабочий вариант Скрипта.
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using MasterSCADALib;
using MasterSCADA.Common;
public partial class ФБ : ScriptBase
{
string NewName; // новое имя из имени объекта
//чтобы выполнить скрипт - нажмите кнопку DoAction
public override void DoAction()
{
var elem = (ITreeItemHlp)HostFB.TreeItemHlp.Project.ObjectTre eRootItem; // устанавливаем местоположение скрипта как в корневом объекте
elem.NavigateChilds(delegate(ITreeObjectHlp item)
{
if (item.ObjectType != EObjectType.otFolder) //проверка что переменная это объект
return true; //если не объект - переход к следующему объекту
//создание переменной команды "Имя_Объекта"
var name=(ITreePinHlp)HostFB.TreeItemHlp.Project.Item( item.FullName+".Имя_Объекта");
if (name==null) return true; //если такой команды нет - переход к следующему объекту
string StrName=name.ParentObject.Name; //определяем имя объекта
name.ConstValue=StrName; //записываем в константу
name.ApplyChange(""); //применяем
return true;
}, TreeItemMask.Object, (NavigateItemsFlags)0);
}
}
ScadaMaster, подскажите пожалуйста, когда будет решена проблема с WORD_TO_INT?
Мы сообщим когда разберемся с проблемой.
Подскажите вот такую вещь, пожалуйста. Доделываю проект, внешних переменных немного - 250. Объектов 1500, фб2100 штук. Ввод аналоговых параметров работает хорошо. Тренды рисуются, даже отчет аварийных сообщений приделал. Но никак не могу добиться быстродействия на дискретных сигналах. Кнопки жмутся по 2-3 секунды, сигналы управления еле уходят в плк. Настройки опроса такие: опрос ОРС сервера 50мс, галка период. опрос объектов снята. Передача данных ОРС серверу по изменению входов.
В настройке самого ОРС сервера опрос каждые 100мс.
ПЛК - S7-1200, OPC сервер ваш, от Инсат.
Добавлял и контрол Кнопка из палитры "Управление". Тупит моя скада, тупит.
Рад любому совету, в каком направлении двигаться.
Как у вас сделаны кнопки? Через выходы динамизации?
Нужно просто вытащить команду типа дискретный на мнемосхему - она станет кнопкой. Эту кнопку удерживать не нужно.
С циклами лучше не играться - попробуйте сначала вернуть стандартный 1000 мс. Если будет недостаточно для работы (как правило достаточно), то нужно снижать его на всех уровнях - в ОРС сервер, в настройках опроса ОРС в скаде, в циклах опроса объектов (везде ставить одно значение)
Кнопки сделаны Командой. Вытаскиваю лкм на мнемосхему - она становится кнопкой. Далее команду привязываю к ОРС переменной. Включаю рантайм, жму на кнопку. Она включается, но импульс в ОРС не проходит (наблюдаю лог орс сервера) . Причем, нажав на кнопку и убрав мышку кнопка остается в нажатом положении еще секунды 2-3. Сама. Где то на косячил)
Попробую веруть все настройки опроса к стандартным. Еще отпишусь)
Удержание кнопки на 2-3 секунды - это нормальное поведение.
А вот если установлены разные периоды опроса, например у объекта где лежит кнопка 50 мс, а у ОРС сервера 1000, то тогда значение может и не передаться.
Вернул настройки по умолчанию. А по умолчанию к объектов это опрос по изменению. И передача данных ОРС серверу тоже по изменению стоит по умолчанию. Мне лучше переключить на периодический опрос? Потому что реакция на нажатие кнопки есть, но задержка порядке 3-4 секунд. Позже скину архив с настройками.
Спасибо за подсказки.
Как вы проверяете время реакции?
Приложите ваш проект, выполните Проект - Экспортировать, сформированную папку заархивируйте и вышлите нам.
Ну как, нажимаю кнопку на мнемосхеме. Кнопка прижалася, жду, жду, включилась реле в шкафу), жду, жду, появился зеленый индикатор на мнемосхеме - реле прижато. Как то так)
Архив отправил личным сообщением.
С циклом в 1000 мс, примерно так и получится - послать запрос, ОРС послал запрос, дождался ответ, скада получила передала дальше.
Можно попробовать снижать время опроса - снизьте его в параметрах опроса в ОРС сервере, в параметрах опроса ОРС в скаде и период опроса объектов. Везде поставьте одинаковое значение. Можно начать с 500 мс.
Пока что в стабильуню версию исправление не внесено. Слишком много было правок и переносить одно изменнеие затруднительно.
Мы планируем через неделю-две выпустить 3.8, в нее это изменение попадет.
Если нужно срочно - можем собрать Beta версию на ключ.