Смотрите
данные на выходе с Lectus Вложение 15051
данные на входе Scada Вложение 15052
свойства переменной Вложение 15053
Не получается изменить свойство переменной
Вид для печати
Смотрите
данные на выходе с Lectus Вложение 15051
данные на входе Scada Вложение 15052
свойства переменной Вложение 15053
Не получается изменить свойство переменной
добрый вечер, подскажите пожалуйста можно ли изменять вид окна сообщений?
Тип данных ОРС переменной берется от самого ОРС сервера, и в скаде изменять нельзя. Трудно сказать почему Lectus передает ОРС клиенту некорректные данные. Какой тип данных вы указали у переменной? Попробуйте другой тип такого же количества байт.
спасибо за помощь. Такой вопрос. Требуется чтобы при запуске проекта перед появлением мнемосхемы, появлялось окно с выбором смены, оператора, датой и т.д. только после этого, появлялось окно мнемосхемы. Можно ли как нибудь организовать данное окно?
Добрый день.
Разработал свой ВФБ ввода значений. Как сделать ввод и запись переменных в экспоненциальном режиме? Т.е. если взять стандартный элемент "Значение" и перетащить на вход переменную, которой назначена экспоненциальная шкала, то и ввод значений становится вида 0.00e+000, и в дереве объектов это значение отобразится в этом виде.
Еще вопрос. Пусть имеется переменная в OPC и переменная в дереве объектов. Если соединить входы-выходы обоих переменных то при включении скады появится сообщение:
"Ошибка записи значения "" в переменную "" (Событие не смогло вызвать ни одного из абонентов)"
Как устранить такое поведение?
У нас появляется штатное окно выбора оператора, а каждый оператор может быть назначен в определенную смену. Сделать по другому штатными средствами не получится.
Если только отключать окно ввода оператора, делать собственное окно, а вход в систему осуществлять через скрипт.
Непосредственный - это задача самого контрола. Отображение же выхода в дереве объектов и на мнемосхеме зависит, как вы правильно написали, он назначенной шкалы.
Если вам нужно чтобы значение всегда было в экспоненциальном виде, то тогда можно сделать выход в виде строки - тогда можно будет задать собственный способ отображения.
Какой ОРС сервер у вас используется? Мы проверили на нашем Modbus Universal masterOPC сервере - ошибка не возникла.
Подобная ошибка может возникать на OPC сервере Lectus.
Пусть всегда будет в экспоненциальном виде. Мне нужно обрабатывать малые значения, вида 0,0000001 - 0,0000100. Тип данных - вещественный двойной точности. Пусть я буду обрабатывать их внутри контрола, отображать их преобразовав в строку в окне ввода значения и на мнемосхеме, и после ввода значения делать обратные преобразования в double и отправлять в OPC. Но в дереве объектов значения малых переменных выглядят как "0.000", хотя в OPC уходят малые значения как есть. Нельзя ли узнать как реализован стандартный фб "Значение", а именно почему отображается на выходе малая величина в виде 000e+000 а уходит в OPC корректно?
OPC сервер - MasterOPC Universal Modbus Server 3.0.0.9.
В каких случаях возникает такая ошибка? Когда в дереве объектов связанная переменная имеет значение а OPC еще не загрузился?
И еще, у переменных в дереве объектов во вкладке "Опрос" стоит галочка "Включен при отсутствии потребителей", для чего она предназначена?
Можно сделать автоматический вход. Для этого вам нужно запустить файл проекта с параметрами /user: /password: Для этого вам нужно либо сделать файл bat либо задать свойства ярлыка (что предпочтительнее). Подробнее вы можете прочитать в справке. Раздел "Работа в режиме исполнения - Запуск проекта из командной строки и по ярлыку".
Для последующей смены оператора без использования окна используйте специальный скрипт - пример есть на форуме:
http://www.owen.ru/forum/showthread....hlight=relogon
А зачем вообще вам нужно?
Почему нельзя просто назначить экспоненциальную шкалу выходу?
Здесь дело не в ФБ. Дерево просто ограничивает количество выводимых на экран знаков после запятой, но это никак не отражается на точности. То есть данные всегда используются в полном объеме, независимо от типа переменной.
Пришлите ваш проект.
Зачем вы вообще так сделали? Такая привязка не имеет смысла.
Если ее снять то переменная не будет выполняться, если у нее нет потребителей (она не имеет выходных связей). Лучше не снимать ее.
Выбрать в дереве объектов выход ВФБ и выбрать шкалу? Хорошо. Но в визуальной части все равно нужно сделать приведение, чтобы отображалось как надо.
В проекте имеется окно настроек, в котором имеется поле, куда нужно вводить пароль и кнопка "Применить". Чтобы все изменения, проделанные в окне настроек, отправились в OPC, нужно ввести пароль и нажать кнопку "Применить". При открытии окна все эти переменные считываются с OPC в группу переменных Bufer в дереве системы, все изменения происходят в ней. Затем, если нажали кнопку "Применить", переменные с буфера посылаются в группу inOPC, связанную напрямую с OPC. И если в ходе изменения сменили пароль до нажатия кнопки применить, то переменные с OPC считываются снова в Bufer, как бы так отменяются проделанные изменения.
Я сделал группу "inOPC" переменных в дереве объектов , такую же как в OPC, и связал каждую переменную OPC между копией в дереве. И в случае нажатия кнопки применить я меняю значения переменных в группе в дереве через приведенный скрипт и они посылаются в OPC. Аналогично я прогружаю значения при открытии окна, в другом скрипте.
var project = this.HostFB.TreeItemHlp.Project;
var input = HostFB.TreeItemHlp.ParentObject.FullName.ToString( )+".Bufer.";
var output = HostFB.TreeItemHlp.ParentObject.FullName.ToString( )+".inOPC.";
for (int i=0;i<=N-1;i++)
{
var inputI = string.Format("{0}{1}{2}",input,"Block",(i+1).ToSt ring());
var valueInputI = (ITreePinHlp)project.Item(inputI);
uint? valueInput = (uint?)(valueInputI.GetRTPin().ObjectValue);
ValueMassive[i] = (uint?)(valueInput);
}
for (int k=0;k<=N-1;k++)
{
var outputI = string.Format("{0}{1}{2}",output,"Block",(k+1).ToS tring());
var valueOutputI = (ITreePinHlp)project.Item(outputI);
valueOutputI.AddAssignValueTask((uint?)ValueMassiv e[k],null);
}
Такая привязка мне нужна была для того, чтобы значения при запуске не переписали текущие
Проект пока прислать не могу. Попробую еще раз разобраться сам, если проблему не смогу устранить - сообщу Вам.
Возникла другая проблема - проблема при разработке ВФБ. Созданный элемент не появляется в палитре.
Вот выписка из отчета о ошибках:
*LogSession Started='05.11.2014 12:53:27' Computer='LENOVO-ПК' Version='3.6.0.44483' VersionName='3.6(DemoReleaseMax)_14_02_17_11_48' Config='Demo' Schema='1'*
*Error Thread='0xaa0' ThreadName='Обновление палитры ФБ' Time='05.11.2014 12:53:44.670' Error='Неопознанная ошибка ' Code='0x80004005'>
Не удается загрузить иконку для Код доступа 0511 (DReaderThread.cpp, 402)</Text>
Попытка загрузить из ресурсов иконку для фб Code0511.Control с ID=c9e859dc-f682-4fc2-8e19-5d636d611432 не удалась
Иконку создал с таким же именем как у класса, 16 пикселей на 16, 4bpp Indexed цвета. Лежит в той же папке что и класс.
Вот исходник: Вложение 15076
Вы изменили namespace ФБ. Не изменяйте namespace и имя класса которые wizard создал по умолчанию (это оговорено в документации).
Исправленная версия ФБ в приложении.
Распаковал архив, построил решение. Не заработало. Удалил предыдущий dll файл из папки MasterScada и удалил ветку в реестре с данным CLSID, заработало. Спасибо большое! Тогда встречный вопрос, чтобы создать новый ФБ, не тратя время на создание нового проекта в студии, достаточно ли переименовать решение, поменять CLSID в контроле и в визуальной части, и ввести другие названия в DisplayName?
Лучше сделайте заново - это займет значительно меньше времени, чем выискивать ошибки из-за неправильного переименования
Добрый день. Имеется ли возможность в мастерскаде при работе в режиме исполнения блокировать оператору возможность входа в проводник (например нажав на кнопку плывущего окна на клавиатуре). В скаде "круг" или "wincc" к примеру эта возможность имеется. Операторы вечером поверх МС открывают игры, фильмы. Через месяц работы компьютер начинает виснуть.
На вкладке "служебные" палитры ФБ есть функциональный блок "Контроль приложений" - с его помощью вы можете отследить все действия которые выполняются на компьютере.
Для блокировки отдельных функций операционной системы можно воспользоваться сторонними программи. Например блокирование определенных действий можно сделать при помощи программы WinLock:
http://www.crystaloffice.com/winlock/
http://www.softkey.ru/catalog/progra...ID=5091#o12858
Доброго времени суток. У меня вопрос по редактору отчётов. Посмотрев видеопример, я создал отчёт в котором есть график изменения температуры. На графике каждая узловая точка отмечается кружочком. Но т.к. у меня график строится за интервал времени, примерно равный 2-м часам, то эти "кружочки" сливаются и не видно самой линии графика. Как сделать так, чтобы узловые точки на гафике никак не выделялись? Т.е чтобы график представлял собой просто тонкую линию. Заранее спасибо за ответ.
Добрый вечер!
1 Есть ОРС сервер - Lectus, который передаётся значения регистров из ПЛК в MasterScada на удалённый компьютер.
2 Эти переменные должны отображаться на мониторе оператора (окно 1 из рис.) , а также задаваться с экрана (окно 2 рис.).
Также значения этих переменных меняются локально с панели оператора СПК непосредственно на котельной.
Вложение 15092
3 Значения переменных, хранящихся в регистрах ПЛК , а также значения, задаваемые с помощью ФБ "Команда" в режиме "редактирование сообщения", заводятся на входы ST текста.
4. Если пользователь задаёт значения и нажимает кнопку "Задать настройки", то они через выходы ST программы передаются ПЛК, который записывает их в свои регистры, и дальше эти значения выводятся в окне 1
Изначально настройки заданы в ОРС сервере, но , когда я запускаю Scada, то эти значения затираются и записываются 0. Как это можно сделать, чтобы Scada не затирала значения в регистрах, потому что в ST тексте сразу сохранить их в переменных не получается
Лучше использовать для этой задачи команды с обратной связью и повторители по условию. Пример в приложении.
Рекомендуем вам заменить OPC сервер Lectus, на наш Modbus Universal MasterOPC сервер - у ОРС сервера Lectus возникают значительные задержки при передаче данных клиенту при большом количестве точек (от 300).
Подскажите, а на что надо обращать внимание при сборке ПК для Мастерскады, на какие комплектующие? например оперативная память, частота процессора и т.д.
Это зависит от проекта.
Минимальные системные требования - 2 ядерный процессор, 2 Гб оперативной памяти и внешняя видеокарта. Чем больше проект - тем мощнее должен быть компьютер.
Утро доброе, вопрос такой, есть две переменных одна беззнаковая целая (А), а вторая дискретная (Б). Переменная А отображает значение на весах, можно ли сделать так, что если в течении определенного времени (например 10 секунд) изменения значения не происходит, то включается на 2-3 секунды переменная Б.
На закладке палитры "Обработка сигналов" есть ФБ "Дифференициал" - с его помощью можно изменить на сколько изменился параметр за определенное время.
Затем вы можете с помощью модуля "Событие" отследить что значение не превышает какую-либо, близкую к нулю величину. Затем с помощью ФБ "Задержка по времени" вы можете сформировать логический сигнал, если величина не изменяется нужное вам время.
Никак не получается. и на форуме про данный ФБ никто не спрашивал. А можете на "пальцах" объяснить как сделать вот это:
Приращение это время за которое должно пройти изменение, так? на вход я кидаю переменную А, которая должна изменяться (происходит "загрузка" компонента), если все работает, то "скорость изменения" периодически выдает разные значения. Вот с этой переменной мне и надо работать? Но как отслеживать это в событии я не понимаю.
А я наверное понял, если "скорость изменения", в какой то момент упадет до нуля? то как раз это и означает что за определенное время переменная А не изменилась? Если это так, тогда другой вопрос, ведь переменная "А" не всегда будет изменяться, только когда происходит дозирование. Как сделать чтобы данный ФБ работал только в определенное время?
И этого я добился, но опять столкнулся с проблемой, есть шнек из которого сыпется компонент, я сделал так, в событии прописал, что если шнек включен, и в ФБ "Дифференициал" скорость изменения равна 0, то на переменную "Б" подается сигнал. Но пока компонент пройдет сквозь шнек, проедет еще несколько секунд, следовательно, ноль на переменной "скорость изменения" будет висеть некоторое время, как тогда быть?
А в чем проблема? Используйте ФБ "Задержка по времени".
Можно в начальный момент - при старте шнека подать на вход этого ФБ чуть больше времени (например 20 секунд, вместо 10), а когда дифференциал изменится - дать снова 10.
Значит я что то не понял. Как отследить по событию изменение. Ведь в событии у меня прописано все просто, если шнек работает, и "скорость изменения" ФБлока ровна нулю, то подать истину на переменную Б. Но ведь как только включается шнек, на "скорости изменения" все равно 0 стоит, Ведь компонент еще не начал сыпаться. а событие работает если 0.
Хотел бы уточнить, как можно через форму отчета изменить ориентацию страницы?
Ориентацию страницы можно задать на этапе разработки отчета. Это делается в свойствах страницы - пункт "Ориентация".
Я сделал форму с выбором выводимых параметров. Их несколько. Если выбрать один параметр, в принципе он поместится на странице с ориентацией портрет, но если выбрать все параметры, то они уже не помещаются на страницу с ориентацией Портрет. Вот я и хотел, можно ли выбрать ориентацию автоматически, в зависимости сколько выбрано параметров?
Вы используете события? Нужно в событии отчета "Начало построения прописать":
Page1.Orientation = StiPageOrientation.Portrait;
или
Page1.Orientation = StiPageOrientation.Landscape;