PDA

Просмотр полной версии : Вопросы начинающего



Страницы : 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

SokolovS
06.08.2014, 11:49
Вот, пожалуйста
06-08-2014 10:48:21.690 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 10:48:21.142 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 10:48:20.674 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 10:48:19.549 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 10:48:19.520 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 10:48:19.313 Node1::Device1:(10.0.3.2:502) Rx: [0000]
06-08-2014 10:48:18.332 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 10:48:18.332 Node1::Device1:(10.0.3.2:502) Rx: [0022] 00 00 00 00 00 05 01 03 02 00 00 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 10:48:15.162 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01

SCADAMaster
06.08.2014, 13:08
Вы проверяли на той же конфигурации?
Выложите ее. Как долго вы ждете для воспроизведения ошибки.
Также приложите полный лог.

Это запросы из вашего скрипта? Вам нужно менять Transaction ID - это позволит избежать подобных ошибок.

SokolovS
06.08.2014, 14:57
Да, конфигурация ровно та же
Подчинённое устройство отвечает с задержкой в 1 секунду
Лог, который я прикладывал, идёт с запуска ОРС сервера, т. е. в данном конкретном случае ждать пришлось около четырёх секунд. Затем ошибки повторяются через разные промежутки времени.

Вот более длинный аналогичный лог

06-08-2014 13:55:33.265 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:33.265 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:32.234 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:32.234 Node1::Device1:(10.0.3.2:502) Rx: [0011] 0A 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:31.233 Node1::Device1:(10.0.3.2:502) Tx: [0012] 0A 00 00 00 00 06 01 03 00 00 00 01
06-08-2014 13:55:31.233 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:30.201 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:30.201 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:29.170 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:29.170 Node1::Device1:(10.0.3.2:502) Rx: [0011] 09 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:27.367 Node1::Device1:(10.0.3.2:502) Tx: [0012] 09 00 00 00 00 06 01 03 00 00 00 01
06-08-2014 13:55:27.197 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:27.167 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:27.167 Node1::Device1:(10.0.3.2:502) Rx: [0000]
06-08-2014 13:55:26.165 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:26.165 Node1::Device1:(10.0.3.2:502) Rx: [0011] 08 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:24.172 Node1::Device1:(10.0.3.2:502) Tx: [0012] 08 00 00 00 00 06 01 03 00 00 00 01
06-08-2014 13:55:24.172 Node1::Device1:(10.0.3.2:502) Rx: [0011] 07 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:24.152 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:23.151 Node1::Device1:(10.0.3.2:502) Tx: [0012] 07 00 00 00 00 06 01 03 00 00 00 01
06-08-2014 13:55:23.141 Node1::Device1:(10.0.3.2:502) Rx: [0000]
06-08-2014 13:55:22.139 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:22.139 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:21.108 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:21.108 Node1::Device1:(10.0.3.2:502) Rx: [0011] 06 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:20.107 Node1::Device1:(10.0.3.2:502) Tx: [0012] 06 00 00 00 00 06 01 03 00 00 00 01
06-08-2014 13:55:20.107 Node1::Device1:(10.0.3.2:502) Rx: [0000]
06-08-2014 13:55:19.105 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:19.095 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:18.074 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:18.074 Node1::Device1:(10.0.3.2:502) Rx: [0011] 05 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:17.062 Node1::Device1:(10.0.3.2:502) Tx: [0012] 05 00 00 00 00 06 01 03 00 00 00 01
06-08-2014 13:55:17.062 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:16.031 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:16.031 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:14.999 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:14.999 Node1::Device1:(10.0.3.2:502) Rx: [0011] 04 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:13.998 Node1::Device1:(10.0.3.2:502) Tx: [0012] 04 00 00 00 00 06 01 03 00 00 00 01
06-08-2014 13:55:13.797 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:12.776 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:12.766 Node1::Device1:(10.0.3.2:502) Rx: [0011] 03 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:10.783 Node1::Device1:(10.0.3.2:502) Tx: [0012] 03 00 00 00 00 06 01 03 00 00 00 01
06-08-2014 13:55:10.783 Node1::Device1:(10.0.3.2:502) Rx: [0011] 02 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:10.763 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:09.762 Node1::Device1:(10.0.3.2:502) Tx: [0012] 02 00 00 00 00 06 01 03 00 00 00 01
06-08-2014 13:55:09.551 Node1::Device1:(10.0.3.2:502) Rx: [0011] 00 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:08.530 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01
06-08-2014 13:55:08.530 Node1::Device1:(10.0.3.2:502) Rx: [0011] 01 00 00 00 00 05 01 03 02 00 00
06-08-2014 13:55:07.518 Node1::Device1:(10.0.3.2:502) Tx: [0012] 01 00 00 00 00 06 01 03 00 00 00 01
06-08-2014 13:55:07.518 Node1::Device1:(10.0.3.2:502) Rx: [0000]
06-08-2014 13:55:06.517 Node1::Device1:(10.0.3.2:502) Tx: [0012] 00 00 00 00 00 06 01 03 00 01 00 01

SCADAMaster
06.08.2014, 18:16
Проблема в том, что вы применяете функцию SendAndRecive без всякого контроля (вы не проверяете поступил ответ или нет). Кроме того у вас указан максимальный размер приемного буфера - 255. Поэтому, если по какой то причине ответ от устройства не успел поступить, то сервер сначала выдает пустой ответ, а затем принимает следующий за ним который состоит уже из двух.
Вам нужно сделать полный контроль достоверности приема данных.

Либо используйте функции из раздела Modbus - в них эти нюансы учитываются.

SokolovS
07.08.2014, 09:24
Вы правы, на моей тестовой конфигурации дело оказалось в слишком маленьком времени ожидания ответа устройства.

Функции из раздела Modbus не совсем удобны в том плане, что смешать обновление регистров разных типов не удастся, а от ExtFunction я отказался уже достаточно давно

azausatu
07.08.2014, 10:16
Добрый день.
1. Как в скрипте выйти без подтверждения из режима исполнения?
2. Как в скрипте получить имя текущего оператора?

SCADAMaster
07.08.2014, 11:15
ExtFunction я отказался уже достаточно давно
Вы отказались от нее из-за ошибки с чередованием байт - мы ее поправили.

SokolovS
07.08.2014, 12:56
Нет, чередование байт тогда я реализовал своей функцией
Просто ExtFunction пытается сама обрабатывать если устройство ответило ошибкой, меня это не устраивает

SCADAMaster
07.08.2014, 15:10
1. Как в скрипте выйти без подтверждения из режима исполнения?

В секцию using добавить
using MasterSCADALib;

код:
MasterSCADAHlp.Instance.ToDesign(EApplicationOpFla gs.aofIgnorePermissions | EApplicationOpFlags.aofAsyncCall);
Работает начиная с версии 3.6



2. Как в скрипте получить имя текущего оператора?
HostFB.TreeItemHlp.Project.RTPermissions.CurrentUs er

azausatu
11.08.2014, 14:52
Добрый день
Возникла необходимость реализации рецепта, по типу, как на картинке:
14008
Описание:
1. Количество этапов N задается пользователем в режиме исполнения
2. Возможность загрузки и сохранения каждой строки таблицы

Т.е. происходит некий процесс в несколько этапов с разной длительностью, в каждом из этапов параметры должны быть такими, как задано в таблице, по окончанию данного этапа происходит переход на следующий до завершения.
Как понимаю стандартными средствами такое не реализовать? Если можно сделать что то похожее то как?

SCADAMaster
11.08.2014, 15:20
Штатными средствами можно сделать только если заранее известно количество шагов (или хотя бы их максимальное количество).
Если это неизвестно, то тогда нужно писать собственный ВФБ. Инструкция по созданию ВФБ прилагается к MasterSCADA - в разделе "документация"

SokolovS
11.08.2014, 16:50
В MasterSCADA возможно создать "вогнутый" объёмный элемент?

SCADAMaster
11.08.2014, 17:58
Вогнутый нельзя.
Можете попробовать сделать его сторонним редактором и импортировать как рисунок.

SokolovS
12.08.2014, 12:27
Хм... Жаль
Ещё вопрос
Использую MasterSCADA 3.5 и MasterOPC 3.0
ОРС-сервер запускается непосредственно скадой и, по задумке, автоматически завершает свою работу после остановки скады
Однако достаточно часто этого не происходит, причём если открыть окно ОРС-сервера, внизу написано, что остался один HDA-клиент
К сожалению, не нашёл где можно увидеть список клиентов, чтобы узнать скада ли это остаётся или какая-то другая программа. Могу лишь сказать, что если не трогать ОРС-сервер и перезапустить скаду несколько раз, клиентов становится всё больше и больше
Подскажете что можно с этим сделать?

MrNobody
13.08.2014, 11:49
Добрый день , подскажите как сделать так, чтобы при нажатии на созданную кнопку, появлялось окошко на подобии этого
14053
Но только, чтобы я мог поставить свой заголовок и убрать опцию заблокировать.
Можно ли это сделать без создания ВФБ?

SCADAMaster
13.08.2014, 13:13
Свой заголовок сделать нельзя, а вот ввод через подобное окно можно.
Вытащите на мнемосхему правой кнопкой мыши дискретную команду и выберите контрол "Редактируемое значение". В свойствах редактируемого значения, на вкладке "Значения" уберите содержимое полей значений - в итоге вы получите пустой контрол. Положите его поверх вашей кнопки - теперь при нажатии будет появляться окно ввода дискретного значения. Галочки "Заблокировать" там не будет

SCADAMaster
13.08.2014, 14:23
ОРС-сервер запускается непосредственно скадой и, по задумке, автоматически завершает свою работу после остановки скады
Однако достаточно часто этого не происходит, причём если открыть окно ОРС-сервера, внизу написано, что остался один HDA-клиент

Это ошибка в ОРС сервере. Мы ее исправили, исправление будет доступно в следующей стабильной версии.

SokolovS
13.08.2014, 14:40
Это ошибка в ОРС сервере. Мы ее исправили, исправление будет доступно в следующей стабильной версии.
Спасибо, жду обновления
И ещё вопрос.
Возможно ли построение отчёта по журнальным событиям?
Если нет, возможно ли через скрипт добавление данных в архив?

SCADAMaster
13.08.2014, 15:07
Возможно ли построение отчёта по журнальным событиям?

Нет, по архиву сообщений строить отчеты пока что нельзя.



Если нет, возможно ли через скрипт добавление данных в архив?
Можно и через скрипт. Можно просто архивировать нужную строковую переменную - ее можно использовать в отчете.

SokolovS
13.08.2014, 15:13
Можно и через скрипт. Можно просто архивировать нужную строковую переменную - ее можно использовать в отчете.
Подскажете функцию для добавления данных в архив?

SCADAMaster
13.08.2014, 15:22
Добавляете в скрипт выход типа "Строка" и пишите в него строковые значения.
Можно явно присваивать, можно с помощью команды:
SetValue("Выход", new PinValue(Значение, Время.ToUniversalTime()));
Тогда можно указать точную метку времени

MrNobody
13.08.2014, 15:45
Свой заголовок сделать нельзя, а вот ввод через подобное окно можно.
Вытащите на мнемосхему правой кнопкой мыши дискретную команду и выберите контрол "Редактируемое значение". В свойствах редактируемого значения, на вкладке "Значения" уберите содержимое полей значений - в итоге вы получите пустой контрол. Положите его поверх вашей кнопки - теперь при нажатии будет появляться окно ввода дискретного значения. Галочки "Заблокировать" там не будет
Спасибо - оригинальное решение)))

SokolovS
14.08.2014, 11:15
Добавляете в скрипт выход типа "Строка" и пишите в него строковые значения.
Можно явно присваивать, можно с помощью команды:
SetValue("Выход", new PinValue(Значение, Время.ToUniversalTime()));
Тогда можно указать точную метку времени

В скрипте возможно обращение к выходной переменной имя которой содержится в другой?
Или создать массив выходных переменных

SCADAMaster
14.08.2014, 11:50
Например вот так:
string name=HostFB.TreeItemHlp.Parent.FullName+".Команда 1";
var elem = (ITreePinHlp)HostFB.TreeItemHlp.Project.Item(name) ;
Параметр2=(double)elem.GetRTPin().Value.Value; //читаем значение команды

SokolovS
14.08.2014, 12:06
Спасибо
А как поступить если мне нужно записать значение выходной команды?

SCADAMaster
14.08.2014, 13:10
Можно вот так
elem.AddAssignValueTask(значение,null);

SokolovS
14.08.2014, 14:20
var elem = (ITreePinHlp)HostFB.TreeItemHlp.Project.Item(HostF B.TreeItemHlp.FullName+".Выходы.Параметр1");
elem.AddAssignValueTask(7,null);Результат:
Ошибка: Exception from HRESULT: 0x80040667Что я делаю не так?

SCADAMaster
14.08.2014, 15:25
Проверяйте путь - возможно где то ошиблись.

SokolovS
14.08.2014, 15:46
Если введён неправильный путь, ошибка такая:
Ошибка: Object reference not set to an instance of an object.

SCADAMaster
14.08.2014, 16:11
Приложите ваш проект

SokolovS
15.08.2014, 09:15
Забавно, ошибка возникает только если вызывать Execute непосредственно
В режиме исполнения работает нормально
Спасибо за помощь

Mihei
16.08.2014, 17:00
Использую связку masterSCADA + lectusOPC. Опрашиваю 350 переменных.
При изменении значения в скаде параметр передаётся в лектус с существенной задержкой(1-2 сек)
при опросе параметры передаются мгновенно

Как увеличить скорость отправки команды в мастер скада?
Или я что то пропустил?

SCADAMaster
16.08.2014, 18:04
Это проблема OPC сервера Lectus - на большом количестве точек (100-500 и выше) у него начинаются сильные задержки при передаче данных клиенту.
Рекомендуем вам сменить Lectus на наш Modbus Universal MasterOPC сервер:
http://insat.ru/products/?category=399

MrNobody
19.08.2014, 08:44
Доброе утро! Возник такой вопрос, а можно ли кнопку сделать круглой или прозрачной как дискретная команда без вывода окошка (если сделать пустой контрол) .
Нужна кнопка, как на видео, которая по входному состоянию меняет цвет и имеет выходную переменную состояние.
http://www.owen.ru/forum/showthread.php?t=16842
Однако нужна форма кнопки именно круглая. Спасибо.

SCADAMaster
19.08.2014, 10:04
Круглую нельзя, прозрачную можно.
Добавьте в дерево объектов Событие, формулу можно не прописывать. Вытащите ее на мнемосхему правой кнопкой мыши и выберите контрол "Зона выбора" - это прозрачная кнопка. Положите ее поверх нужного вам элемента.
В данном примере подобным образом делают checboxы:
http://insat.ru/products/?category=1298

MrNobody
19.08.2014, 11:45
Круглую нельзя, прозрачную можно.
Добавьте в дерево объектов Событие, формулу можно не прописывать. Вытащите ее на мнемосхему правой кнопкой мыши и выберите контрол "Зона выбора" - это прозрачная кнопка. Положите ее поверх нужного вам элемента.
В данном примере подобным образом делают checboxы:
http://insat.ru/products/?category=1298
Спасибо, а как изменить время события. Я нажимаю на него, оно вкл. проходит полсекунды и снова выкл?

energvk
19.08.2014, 12:55
Добрый день! Прошу пояснить небольшой вопрос.
Есть masterscada с opc lectus. Lectus опрашивает объект через заданный интервал времени (допустим 1 час). Необходимо, чтобы мастерскада выполняла опрос opc (с заданным интервалом) без инициирования соединения с объектом, т.е. получала значения последнего опроса opc. А соединение происходило только при изменении в мастерскада переменных (для записи их в контроллер). Не совсем понятно как это осуществить.

SCADAMaster
19.08.2014, 13:05
Спасибо, а как изменить время события. Я нажимаю на него, оно вкл. проходит полсекунды и снова выкл?
Можно использовать ФБ "Выдержка времени" (в палитре "Работа со временем"). Выход События завести на вход "Сброс", а на входах Часы\Минут\Секунды настроить нужную задержку

SCADAMaster
19.08.2014, 13:12
Добрый день! Прошу пояснить небольшой вопрос.
Есть masterscada с opc lectus. Lectus опрашивает объект через заданный интервал времени (допустим 1 час). Необходимо, чтобы мастерскада выполняла опрос opc (с заданным интервалом) без инициирования соединения с объектом, т.е. получала значения последнего опроса opc. А соединение происходило только при изменении в мастерскада переменных (для записи их в контроллер). Не совсем понятно как это осуществить.
По умолчанию так и происходит.

energvk
19.08.2014, 13:18
По умолчанию так и происходит.

Странно, у меня при запуске в режим исполнения, lectus сразу начинает осуществлять соединение с объектом и опрашивать его.

SCADAMaster
19.08.2014, 16:31
При запуске режима исполнения происходит запуск ОРС сервера, и сервер пытается выполнить дозвон до объекта.
Можете попробовать задать в ОРС сервере начальную фазу.

energvk
19.08.2014, 19:04
Странно как-то, OPC-сервер то запущен в это время, немного непонятно... Но если я поставлю начальную фазу несколько секунд, через эти несколько секунд дозвон то всё равно пойдет, а это не нужно.

Ещё заодно вопрос про ваш opc-сервер, а то у меня сложилась противоречивое мнение. Суть в том, что есть удаленный объект, который опрашивается opc-мастером через заданный интервал времени (плк - слэйв этом случае), при этом, в случае аварии на объекте, плк как мастер осуществляет дозвон до opc для информирования об аварии, т.е. opc выступает в роли слэйва (на стороне плк - один модем, на стороне пк - два модема). Неоднократно, на форумах попадалась информация, что opc вашей фирмы не может это обеспечить в отличии от лектуса. Насколько правильно я понял?

energvk
19.08.2014, 19:06
При запуске режима исполнения происходит запуск ОРС сервера, и сервер пытается выполнить дозвон до объекта.
Можете попробовать задать в ОРС сервере начальную фазу.

Наверное проблему решит снятие галочки с "Опрос при старте" в настройках. Завтра проверю.

energvk
20.08.2014, 12:28
Наверное проблему решит снятие галочки с "Опрос при старте" в настройках. Завтра проверю.

Не решило, всё также запускается принудительный опрос.

SCADAMaster
20.08.2014, 13:50
Суть в том, что есть удаленный объект, который опрашивается opc-мастером через заданный интервал времени (плк - слэйв этом случае), при этом, в случае аварии на объекте, плк как мастер осуществляет дозвон до opc для информирования об аварии, т.е. opc выступает в роли слэйва (на стороне плк - один модем, на стороне пк - два модема). Неоднократно, на форумах попадалась информация, что opc вашей фирмы не может это обеспечить в отличии от лектуса. Насколько правильно я понял?
Тут вопрос не к OPC, а к модему. Он должен быть настроен на автоподнятие трубки при дозвоне. Т.е. поступил звонок, модем поднял трубку, пошли данные.

SokolovS
20.08.2014, 17:56
Какие инструменты отладки есть в скрипте MasterSCADA? Вывод в консоль, пошаговое исполнение?
Есть ли пошаговое исполнение в MasterOPC?

SCADAMaster
20.08.2014, 18:40
Пошагового исполнения нет. Можно выводить информацию в лог скриптов функцией server.Message

energvk
20.08.2014, 22:07
Тут вопрос не к OPC, а к модему. Он должен быть настроен на автоподнятие трубки при дозвоне. Т.е. поступил звонок, модем поднял трубку, пошли данные.

Это я прекрасно понимаю. Значит пример на сайте "Пример обмена между ПЛК по каналу CSD с использованием резервного канала" будет работать с MasterOPC? Вроде я где то встречал (сейчас не могу найти), что этот пример может работать только с лектусом

energvk
20.08.2014, 22:09
И ещё вопрос: когда проект в режиме исполнения его можно свернуть? или только закрыть? Также не могу найти как основную мнемосхему в режиме исполнения отцентровать посредине экрана или это нельзя и нужно сразу знать разрешение экрана оператора и растягивать его на максимум?

SokolovS
21.08.2014, 09:09
Пошагового исполнения нет. Можно выводить информацию в лог скриптов функцией server.Message
Интересует вывод в консоль в MasterSCADA

energvk
21.08.2014, 09:46
Пытаюсь MasterOPC опросить объект по модему, но получаю ответ:


1-08-2014 08:38:22.906 баграмяна-22а:Запрос 3:баграмяна-22а:HOLDING_REGISTERS
21-08-2014 08:38:22.906 баграмяна-22а:Превышение таймаута баграмяна-22а:HOLDING_REGISTERS
21-08-2014 08:38:01.625 modem:Набор номера ATD8981xxxxxxx
21-08-2014 08:38:01.625 баграмяна-22а:Запрос 2:баграмяна-22а:HOLDING_REGISTERS
21-08-2014 08:38:01.625 баграмяна-22а:Превышение таймаута баграмяна-22а:HOLDING_REGISTERS
21-08-2014 08:37:45.218 modem:Звонок невозможен.Модем не подключен
21-08-2014 08:37:41.609 баграмяна-22а:Запрос 1:баграмяна-22а:HOLDING_REGISTERS
21-08-2014 08:37:41.609 modem:Порт 2 открыт
21-08-2014 08:37:41.609 Server:Cтарт конфигурации C:\Documents and Settings\All Users\Application Data\InSAT\MasterOPC Universal Modbus Server\SERVERCFG\bagramyana-22a.mbp
21-08-2014 08:37:41.609 Server:MasterOPC Universal Modbus Server Demo 32 Build - 3.0.0.4

При этом таймаут уже 30 секунд стоит...В какую сторону копать?

SCADAMaster
21.08.2014, 11:40
Интересует вывод в консоль в MasterSCADA
Добавляете к скрипту строчку System.Diagnostics.Debug.Assert(false)
и запускаете скаду в режиме ОТЛАДКА, при выполнении скрипта выпадет окно, нажав в нем кнопку "Повтор" будет предложено выбрать отладчик (если в системе стоит VisualStudio), после его выбора вы попадете в запущенную студию, где программа будет остановлена на этой (System.Diagnostics.Debug.Assert(false)) строке, дальше можете отлаживаться по шагам.

SCADAMaster
21.08.2014, 11:54
И ещё вопрос: когда проект в режиме исполнения его можно свернуть? или только закрыть?
С точки зрения системы, MasterSCADA со своими окнами, это еще одна программа, так что сворачивание\разворачивание работает так же как и с другими программами.
Если нужно убрать среду разработки, оставив только окна мнемосхем, то скрип для этого неоднократно приводился на форуме (во вложении).
Так же управлять размером открывающихся мнемосхем можно через ФБ "Управление документом" (В палитре закладка "Служебные")

SokolovS
21.08.2014, 12:44
Добавляете к скрипту строчку System.Diagnostics.Debug.Assert(false)
и запускаете скаду в режиме ОТЛАДКА, при выполнении скрипта выпадет окно, нажав в нем кнопку "Повтор" будет предложено выбрать отладчик (если в системе стоит VisualStudio), после его выбора вы попадете в запущенную студию, где программа будет остановлена на этой (System.Diagnostics.Debug.Assert(false)) строке, дальше можете отлаживаться по шагам.
Спасибо
Студию какой версии придётся ставить?

SCADAMaster
21.08.2014, 13:03
В 2010\2012\2013 работает. На более ранних не проверяли, но по идее должно работать и там.

energvk
21.08.2014, 13:45
Так же управлять размером открывающихся мнемосхем можно через ФБ "Управление документом" (В палитре закладка "Служебные") Где можно подробно почитать информацию по данному ФБ, а то не могу толком разобраться, как это работает

SCADAMaster
21.08.2014, 14:10
Где можно подробно почитать информацию по данному ФБ, а то не могу толком разобраться, как это работает

Справка по F1 по этому ФБ.
В настройках у ФБ:
Объект - выбирается объект в котором находятся документы (тренд\журнал\мнемосхема\отчет)
Документ - выбирается конкретный документ из тех, что есть в данном объекте
Использовать значение входов при открытии документа - Ложь, то в группу "Открыть" можно будет только открыть документ
Истина, в группе "Открыть" появляются доп параметры открытия (размер, положение, заголовок, способ открытия)

energvk
21.08.2014, 15:21
Справка по F1 по этому ФБ.
В настройках у ФБ:
Объект - выбирается объект в котором находятся документы (тренд\журнал\мнемосхема\отчет)
Документ - выбирается конкретный документ из тех, что есть в данном объекте
Использовать значение входов при открытии документа - Ложь, то в группу "Открыть" можно будет только открыть документ
Истина, в группе "Открыть" появляются доп параметры открытия (размер, положение, заголовок, способ открытия)

Да, я так сразу и делал, но никаких изменений не происходит, меняю разрешение, мнемосхема размер не меняет (вход "Как окно" включал, открытие мнемосхемы как окно и разрешение на изменение размера, тоже ставил).

И нет значка для сворачивания окна

SCADAMaster
21.08.2014, 15:52
Да, я так сразу и делал, но никаких изменений не происходит, меняю разрешение, мнемосхема размер не меняет (вход "Как окно" включал, открытие мнемосхемы как окно и разрешение на изменение размера, тоже ставил).
http://screencast.com/t/ZaeRSZFg7Q9 размеры меняются, возможно что то не так делали.


И нет значка для сворачивания окна
Его и не было. Стандартные механизмы по умолчанию не блокируются, т.е. через контекстное меню свернуть окно можно.
Все окна являются дочерними относительно родительского окна (MasterSCADA), так что свернуть их как отдельное окно на панель задач не выйдет в любом случае. Если требуется всё же убрать окно, то это делается подачей координат (положение относительно верхнего левого угла монитора) на входы "Верхний" и "Левый" и подачи после этого на вход "Открыть" "Вкл" http://screencast.com/t/IRD5XIIAmVtz

energvk
21.08.2014, 16:20
Цитата Сообщение от energvk Посмотреть сообщение
Да, я так сразу и делал, но никаких изменений не происходит, меняю разрешение, мнемосхема размер не меняет (вход "Как окно" включал, открытие мнемосхемы как окно и разрешение на изменение размера, тоже ставил).
http://screencast.com/t/ZaeRSZFg7Q9 размеры меняются, возможно что то не так делали.


Да, меняется. А можно сделать, чтобы при запуске в режим исполнения, команда "Открыть" сразу включалась, т.е. при запуске автоматически? И можно ли чтобы оно разворачивалось на весь экран? И мнемосхема растягивалась при этом под размер окна (или это нельзя)?

Со сворачиванием понял, спасибо!

SCADAMaster
21.08.2014, 16:45
Да, меняется. А можно сделать, чтобы при запуске в режим исполнения, команда "Открыть" сразу включалась, т.е. при запуске автоматически? И можно ли чтобы оно разворачивалось на весь экран? И мнемосхема растягивалась при этом под размер окна (или это нельзя)?

Включать "Открыть" по умолчанию можно, достаточно на закладке "Опрос" выбрать константу "Вкл" или привязать дискретную команду у которой Значение до опроса будет равно "Вкл". Но учтите, что если мнемосхема будет меньше чем заданная величина (допустим что мнемосхема 100X100, а открываем как 200X200),
то будут серые поля 14124

если же мнемосхема будет больше чем заданная величина, то она откроется с полосами прокрутки
Было 14125
Стало 14126

energvk
21.08.2014, 16:45
Ещё вопросик: как после изменения переменной, осуществить принудительный опрос всех остальных? То есть, после команды изменения, opc выполняет соединение, в контроллере, происходит присвоение нового значения и после этого opc сразу должен выполнить полный опрос остальных переменных.

energvk
21.08.2014, 16:48
Включать "Открыть" по умолчанию можно, достаточно на закладке "Опрос" выбрать константу "Вкл" или привязать дискретную команду у которой Значение до опроса будет равно "Вкл". Но учтите, что если мнемосхема будет меньше чем заданная величина (допустим что мнемосхема 100X100, а открываем как 200X200),
то будут серые поля
если же мнемосхема будет больше чем заданная величина, то она откроется с полосами прокрутки


Понял, спасибо. Хотел сразу слишком многого :). Ну да ладно, не критично.

SCADAMaster
21.08.2014, 17:03
Ещё вопросик: как после изменения переменной, осуществить принудительный опрос всех остальных? То есть, после команды изменения, opc выполняет соединение, в контроллере, происходит присвоение нового значения и после этого opc сразу должен выполнить полный опрос остальных переменных.
У OPC на закладке Опрос, есть группа "Полный опрос", поле "Опрос по условию", в него надо перетащить дискретную переменную. После этого отслеживаем что нужная переменная изменилась и изменяем дискретную переменную с "выкл" на "вкл"

energvk
21.08.2014, 17:13
Да, мысль такая была, но не могу сообразить, как отслеживать изменения, поэтому думал есть проще вариант

SCADAMaster
21.08.2014, 17:28
Да, мысль такая была, но не могу сообразить, как отслеживать изменения, поэтому думал есть проще вариант
2 переменных, одна ваша изменяемая переменная, другая эталонная. Сравниваете в событии, если эталонная и изменяемая различаются, то присваиваете (через событие) новое значение эталонной переменной, одновременно, по этому же событию, производя принудительный опрос.

energvk
21.08.2014, 23:08
Спасибо, я как раз сделал похоже, только проще вышло, без сравнений

SokolovS
25.08.2014, 11:22
Как в MasterOPC вызвать функцию из подустройства текущего устройства?
Интересует такой вызов, чтобы не пришлось ковыряться в коде при переименовании узла или устройства.

Igor.m
25.08.2014, 12:24
Добрый день!
Вопрос по навигации между объектами: Возможно ли из главной мнемосхемы, где отображается 4 окна с объектами, производить выбор необходимого нам объекта для отображения, независимо из каждого окна любой из Nго количества?

SCADAMaster
25.08.2014, 13:17
Добрый день!
Вопрос по навигации между объектами: Возможно ли из главной мнемосхемы, где отображается 4 окна с объектами, производить выбор необходимого нам объекта для отображения, независимо из каждого окна любой из Nго количества?
Под отображением что понимается? Открытие новой мнемосхемы с указанным окном?
Так можно, если использовать N ФБ Управление документами. Каждый из ФБ отвечает за свою мнемосхему, через связку "Список" или "Выпадающий список"(Элементы диалога в палитре мнемосхемы) и "Переключатель 1 к N" включается нужный

Igor.m
25.08.2014, 13:32
Под отображением что понимается? Открытие новой мнемосхемы с указанным окном?

Да, а точнее открытие в каждом из окон (4 окна на одной мнемосхеме) выбранного объекта, и располагаться это все должно на одном мониторе. К примеру объектов 15, выбираем в первом окошке отображение 3го объекта, во втором 7го и т.д.

Igor.m
25.08.2014, 14:13
Как связать ФБ Управление документами с нужным окном?

SCADAMaster
25.08.2014, 16:16
Через настройки ФБ.

MrNobody
27.08.2014, 14:35
Добрый день, подскажите а возможно ли реализовать в ST программе таймеры TP ,TOF , TON?

SCADAMaster
27.08.2014, 14:46
Да, возможно - таймеры являются стандартными функциональными блоками.
Для корректной работы опрос у этого блока ST должен быть периодическим.

SokolovS
27.08.2014, 17:00
Как в MasterOPC вызвать функцию из подустройства текущего устройства?
Интересует такой вызов, чтобы не пришлось ковыряться в коде при переименовании узла или устройства.
Видимо, я не совсем ясно задал вопрос
Интересует вызов вроде такого:
server.RunFunctionFromSubDeviceByName("$(N).$(D).SomeSubdevice", "some_funciton", 0);Либо возможность из скрипта устройства получить его полный путь
Либо аналог функции server.GetAttributeCurrentTag для устройства
Либо, возможно, какой-либо другой способ

MrNobody
27.08.2014, 17:02
Да, возможно - таймеры являются стандартными функциональными блоками.
Для корректной работы опрос у этого блока ST должен быть периодическим.
Спасибо, но хотел бы уточнить, Вы имеете виду эти ФБ, которые представлены на рисунке?
14182

SCADAMaster
27.08.2014, 17:41
Как в MasterOPC вызвать функцию из подустройства текущего устройства?
Интересует такой вызов, чтобы не пришлось ковыряться в коде при переименовании узла или устройства.

А чем не подходит функция server.RunFunctionFromDevice( ) - вызов функции из текущего устройства.

SCADAMaster
27.08.2014, 17:42
Спасибо, но хотел бы уточнить, Вы имеете виду эти ФБ, которые представлены на рисунке?

Нет. В ST можно объявить переменную типа Ton и работать как с таймером. Вызовите справку блока ST - там есть описание стандартных функций.

SokolovS
27.08.2014, 17:56
А чем не подходит функция server.RunFunctionFromDevice( ) - вызов функции из текущего устройства.
Так из подустройства текущего устройства нужно вызвать

SCADAMaster
27.08.2014, 18:21
Из устройства вызывать функцию подустройства?

SokolovS
28.08.2014, 08:52
Из устройства вызывать функцию подустройства?

Ну да
Почему-то не получается

SCADAMaster
28.08.2014, 09:28
Такое невозможно.
Опишите вашу архитектуру, почему вы хотите вызывать именно так. Обычно вызов происходит снизу вверх (из подустройств вызывают функции устройств).

SokolovS
28.08.2014, 09:46
С реальной архитектурой это имеет мало общего
Я разделил в разные устройства скрипты обновления архивов и текущего состояния
После получения информации о текущем состоянии запускается обновление архивов из подустройства

Tagir
28.08.2014, 11:14
Добрый день! Подскажите как сделать блокирование (ограничение прав на управление) оператора с меньшими правами если в сетевой проект входит оператор с бОльшими правами (например, диспетчер).
Операторы входят с разных компьютеров.
Проект сетевой, мнемосхема одна и та же для обоих операторов.

SCADAMaster
28.08.2014, 14:05
С реальной архитектурой это имеет мало общего
Я разделил в разные устройства скрипты обновления архивов и текущего состояния
После получения информации о текущем состоянии запускается обновление архивов из подустройства
А причем здесь подустройства? Можно на уровне узла выставлять флаг, что нужно обновить состояние. И читать его из всех устройств.

SCADAMaster
28.08.2014, 14:08
Добрый день! Подскажите как сделать блокирование (ограничение прав на управление) оператора с меньшими правами если в сетевой проект входит оператор с бОльшими правами (например, диспетчер).
Операторы входят с разных компьютеров.
Проект сетевой, мнемосхема одна и та же для обоих операторов.
Штатных настроек для этого нет.
Можно, на объекте исполняемом на компьютере диспетчера, отследить вхождение оператора нужной категории. Передать эту категорию на второй компьютера, а затем обрабатывать - сравнить с категорией локального оператора, и затем блокировать (через входы динамизации) нужные контролы.

SokolovS
28.08.2014, 14:31
А причем здесь подустройства? Можно на уровне узла выставлять флаг, что нужно обновить состояние. И читать его из всех устройств.
Обновление архива происходит гораздо реже, чем обновление информации о текущем состоянии. Плюс к тому это обновление часто занимает большое количество времени.
Поэтому подустройство обновления архива занимается своими делами по собственному периоду обновления, но не просто обновляет этот архив, а создаёт сопрограмму. Сопрограмма имеет ограничение на время выполнения длиной в период обновления информации о текущем состоянии. Когда оно превышено, обновление архива приостанавливается, текущая информация обновляется устройством, а затем оно должно продолжить обновление архива запустив сопрограмму с того же места. Именно этот запуск я и сделал.

Tagir
28.08.2014, 14:40
Штатных настроек для этого нет.
Можно, на объекте исполняемом на компьютере диспетчера, отследить вхождение оператора нужной категории. Передать эту категорию на второй компьютера, а затем обрабатывать - сравнить с категорией локального оператора, и затем блокировать (через входы динамизации) нужные контролы.


а с помощью каких ФБ можно выполнить эти операции?
отслеживать вхождение оператора можно с помощью ФБ "Служебная информация", а как сравнить с категорией локального оператора?

SCADAMaster
28.08.2014, 15:38
Обновление архива происходит гораздо реже, чем обновление информации о текущем состоянии. Плюс к тому это обновление часто занимает большое количество времени.
Поэтому подустройство обновления архива занимается своими делами по собственному периоду обновления, но не просто обновляет этот архив, а создаёт сопрограмму. Сопрограмма имеет ограничение на время выполнения длиной в период обновления информации о текущем состоянии. Когда оно превышено, обновление архива приостанавливается, текущая информация обновляется устройством, а затем оно должно продолжить обновление архива запустив сопрограмму с того же места. Именно этот запуск я и сделал.
То есть на уровне устройства идет опрос действующих значений, а на уровне подустройства - архивов? Тогда пусть на уровне устройства, когда начинается опрос выставляется флаг остановки чтения архивов. На уровне подустройства вызывая функцию проверяйте этот флаг, и прекращайте чтение архивов.

Tagir
28.08.2014, 15:38
Вообще есть простой вариант.
При помощи ФБ "Скрипт C#" можно сменить оператора на компьютере.
Вы можете создать на компьютере оператора, например две категории операторов - "оператор" и "оператор с пониженными правами". Каждая категория настраивается индивидуально - у одной какие то действия разрешаете, у другой запрещаете. Создаете в каждой категории по оператору.
В обычном режиме оператор входит в слой логин и работает, если мастеру нужно отключить у него какие то действия, он посылает команду, скрипт выполняется, и оператор переключается на пониженную категорию.
Затем мастер можем вернуть оператора обратно, также используя скрипт.

Код скрипта для смены оператора такой:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;

public partial class ФБ : ScriptBase
{
bool? M=false;
public override void Execute()
{
if (Параметр1==true && M==false)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon("Оператор 1","1"); // Оператор 1 - имя оператора, 1 - пароль.
}
M=Параметр1;
}
}

Версия MasterSCADA должна быть 3.5.

Параметр1 - вход ФБ, типа "Логический"



Наткнулся на такой скрипт, он работает но только на локальном компьютере. Подскажите как подправить его, чтобы можно было сменить оператора на другом компьютере сетевого проекта

SCADAMaster
28.08.2014, 15:38
а с помощью каких ФБ можно выполнить эти операции?
отслеживать вхождение оператора можно с помощью ФБ "Служебная информация", а как сравнить с категорией локального оператора?
Можно использовать ФБ "Сравнение строк" (Закладка "Вычисления"). Можно использовать Скрипт C#.

SokolovS
28.08.2014, 15:54
То есть на уровне устройства идет опрос действующих значений, а на уровне подустройства - архивов? Тогда пусть на уровне устройства, когда начинается опрос выставляется флаг остановки чтения архивов. На уровне подустройства вызывая функцию проверяйте этот флаг, и прекращайте чтение архивов.

Пока подустройство не закончило выполнение своего скрипта, другие устройства в том же узле не запускают свои скрипты, если я правильно понял

SCADAMaster
28.08.2014, 16:03
Наткнулся на такой скрипт, он работает но только на локальном компьютере. Подскажите как подправить его, чтобы можно было сменить оператора на другом компьютере сетевого проекта
Так сделать нельзя.
Пусть скрипт исполняется на нужном компьютера, на сигнал на вход поступает от удаленного. Зашел диспетчер, нажал на кнопку - сигнал ушел на скрипт, оператор сменился на другого.

SCADAMaster
28.08.2014, 18:21
Пока подустройство не закончило выполнение своего скрипта, другие устройства в том же узле не запускают свои скрипты, если я правильно понял
Да. Но как быть в вашем случае - когда устройство вызывает функцию подустройства?

SokolovS
29.08.2014, 09:04
Да. Но как быть в вашем случае - когда устройство вызывает функцию подустройства?
... не совсем понял.
Мне кажется, этот вопрос задавал я.

SCADAMaster
29.08.2014, 09:44
Имеется ввиду, как вызов из устройства функции подустройства решит проблему:

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

SokolovS
29.08.2014, 09:59
Вы предложили такое решение:
То есть на уровне устройства идет опрос действующих значений, а на уровне подустройства - архивов? Тогда пусть на уровне устройства, когда начинается опрос выставляется флаг остановки чтения архивов. На уровне подустройства вызывая функцию проверяйте этот флаг, и прекращайте чтение архивов.Я вам ответил, что его реализовать не получается из-за того, что скрипты узла выполняются по очереди, то есть скрипт из подустройства никогда не дождётся изменения флага в устройстве.
А даже если и дождётся, после остановки обновления архива и опроса устройством нужно будет продолжить обновление, то есть опять же вызвать функцию из подустройства.

SCADAMaster
29.08.2014, 11:22
Это ясно.
Но изначально вы просили возможность вызывать функции подустройства из устройства. Как вам это поможет?
Функция server.RunFunctionFromDeviceByName( ) вас не устраивает только тем что нужно передавать в нее полное имя, что усложнит правку имен?
Имя можно получить при помощи кода. Положите в подустройство тег, в функции OnInit определите полное и короткое имя. Используя эти значения можно получить путь к подустройству, который потом через функцию передать в устройство.
Вот пример кода:
function OnInit()
local val={};
err,val=server.GetAttributeCurrentTag( ); --получаем текущий тег
local path=string.sub(val[2],1,string.len(val[2])-string.len(val[1])-1) -- выделяем из полного имени часть до имени тега.
server.Message(path); --для примера выводим в лог
end

SokolovS
29.08.2014, 12:06
Я надеялся, существует более простой, очевидный и прямой способ
Спасибо

SCADAMaster
29.08.2014, 13:13
Предложенный способ достаточно простой.

SokolovS
29.08.2014, 13:41
Да, согласен, можно найти сложнее
Однако хотелось бы простоты, например, поддержки такого вызова

server.RunFunctionFromSubDeviceByName("$(N).$(D).SomeSubdevice", "some_funciton", 0);Подобное уже реализовано в других функциях, так что не думаю, что в этом случае будут какие-то сложности.

SCADAMaster
29.08.2014, 15:24
Программист сейчас в отпуске, когда вернется, мы передадим ему ваше предложение.

Tagir
29.08.2014, 16:59
Так сделать нельзя.
Пусть скрипт исполняется на нужном компьютера, на сигнал на вход поступает от удаленного. Зашел диспетчер, нажал на кнопку - сигнал ушел на скрипт, оператор сменился на другого.

Это удалось сделать в автоматическом режиме, без использования кнопки. При входе диспетчера, на его компьютере исполняется скрипт с командой "public override void Start()".

А как теперь сделать, чтобы при выходе диспетчера оператор восстановился? Строка в скрипте диспетчера "public override void Stop()" не работает (не изменяется значение параметра в коде)

SCADAMaster
29.08.2014, 17:42
Строка работает, просто поскольку происходит выход значение не успевает записаться на выход.
Можно при помощи скрипта отслеживать состояние связи с компьютером - и если связь пропадает, выполнять смену оператора. Вот пример скрипта:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using MasterSCADALib;

public partial class ФБ : ScriptBase
{
public override void Execute()
{
var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.Компьютер 2");
Связь_есть=comp.RTItemState == ERTItemState.rtisNormal;

}
}

Tagir
01.09.2014, 09:20
насколько я понимаю, Связь_есть - переменная?
Компилятор ругается: "The name 'ERTItemState' does not exist in the current context в строке"

И куда эти три строки нужно вписать: в скрипт АРМа по месту, или в скрипт удаленного АРМа?

скрипт АРМа по месту выглядит так:

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;


public partial class ФБ : ScriptBase
{
bool? M=false;


public override void Execute()
{
if (Параметр1==true)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon("Просмотр","1"); // Просмотр - имя оператора, 1 - пароль.
}
M=Параметр1;
}


}



скрипт удаленного АРМа:

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;


public partial class ФБ : ScriptBase
{


public override void Start()
{
Параметр1=true;
}



}

SCADAMaster
01.09.2014, 12:50
насколько я понимаю, Связь_есть - переменная?

Да



Компилятор ругается: "The name 'ERTItemState' does not exist in the current context в строке"

Ругается на АРМе?
А версия MasterSCADA у вас какая (Справка - О программе)



И куда эти три строки нужно вписать: в скрипт АРМа по месту, или в скрипт удаленного АРМа?

Тот скрипт что мы дали нужно расположить на том компьютера на котором нужно менять оператора.

Tagir
01.09.2014, 13:18
Ругается на АРМе?
А версия MasterSCADA у вас какая (Справка - О программе)

уже не ругается. не было строки "using MasterSCADALib;". Версия 3.6.0.43228 3.6(DemoReleaseMin)_13_11_04_20_19.





Тот скрипт что мы дали нужно расположить на том компьютера на котором нужно менять оператора.

Сделал, но обратный переход не выполняется:


using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using MasterSCADALib;

public partial class ФБ : ScriptBase
{
bool? M=false;

public override void Execute()
{
if (Параметр1==true)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon("Просмотр","1"); // Просмотр - имя оператора, 1 - пароль.
}
M=Параметр1;

var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.АРМ диспетчера");
Связь_есть=comp.RTItemState == ERTItemState.rtisNormal;

}

}

SCADAMaster
01.09.2014, 14:17
Так где у вас реализация обратного перехода?

Tagir
01.09.2014, 14:26
Так где у вас реализация обратного перехода?

Так я у вас и хотел спросить как реализовать этот обратный переход?

SCADAMaster
01.09.2014, 17:37
Что-то такое:

public partial class ФБ : ScriptBase
{
bool? M=false;
bool? Change=false;

public override void Execute()
{
if (Параметр1==true)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon("Просмотр","1"); // Просмотр - имя оператора, 1 - пароль.
Change=true;
}
M=Параметр1;

var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.АРМ диспетчера");
if (Change==true && comp.RTItemState != ERTItemState.rtisNormal)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon("Оператор","1"); // Просмотр - имя оператора, 1 - пароль.
Change=false;
}

}

}

Tagir
02.09.2014, 13:53
Что-то такое:

public partial class ФБ : ScriptBase
{
bool? M=false;
bool? Change=false;

public override void Execute()
{
if (Параметр1==true)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon("Просмотр","1"); // Просмотр - имя оператора, 1 - пароль.
Change=true;
}
M=Параметр1;

var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.АРМ диспетчера");
if (Change==true && comp.RTItemState != ERTItemState.rtisNormal)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon("Оператор","1"); // Просмотр - имя оператора, 1 - пароль.
Change=false;
}

}

}


Строка if (Change==true && comp.RTItemState != ERTItemState.rtisNormal) не выполняется :)

Если изменить «!=» на «==», то при входе в проект Диспетчера происходит смена на оператора "Просмотр" и сразу же обратная смена на "Оператор"

SCADAMaster
02.09.2014, 14:16
Что значит не выполняется?
У вас Change переходит в состояние True? Скорее всего вы его где то сразу сбрасываете в false.

Tagir
02.09.2014, 14:49
Что значит не выполняется?
У вас Change переходит в состояние True? Скорее всего вы его где то сразу сбрасываете в false.

Переходит.
Если написать код:

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using MasterSCADALib;

public partial class ФБ : ScriptBase
{
bool? M=false;
bool? Change=false;

public override void Execute()
{

Change=Параметр1;


var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.Диспетчер");
if (Change==true && comp.RTItemState != ERTItemState.rtisNormal)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon("Оператор",""); // Оператор - имя оператора.
Change=false;
}

}

}

при входе Диспетчера переход на "Оператор" не происходит.

если же написать

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using MasterSCADALib;

public partial class ФБ : ScriptBase
{
bool? M=false;
bool? Change=false;

public override void Execute()
{

Change=Параметр1;


var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.Диспетчер");
if (Change==true && comp.RTItemState == ERTItemState.rtisNormal)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon("Оператор",""); // Оператор - имя оператора.
Change=false;
}

}

}

при входе Диспетчера переход на "Оператор" происходит.

SCADAMaster
02.09.2014, 15:29
В варианте кода, который мы приложили переход на режим "Просмотр", происходит по команде от сетевого компьютера, а выход - если с компьютером пропадает связь.
Если вы хотите чтобы переход выполнялся при подключении сетевого компьютера, то код будет другим.

Tagir
02.09.2014, 16:35
Нужно чтобы именно при выходе диспетчера из проекта происходила обратная смена оператора.
Если диспетчер выходит из проекта (режима исполнения), это означает что связь с компьютером пропадает?

SCADAMaster
02.09.2014, 17:35
Да, выложенный скрипт и решает эту задачу.

azausatu
05.09.2014, 09:05
Добрый день.
При разработке своего ВФБ возникла задача блокировать его работу в зависимости от имени оператора и наличия связи с контроллером. Завел для этого отдельную входную переменную типа boolean, в визуальную часть ВФБ она не передается. При размещении моего ВФБ на мнемосхеме, у него есть стандартный вход "Заблокирован", который создает сама MasterScada. Как понимаю, если поместить в него расчет с проверкой связи и именем оператора, он выполняет аналогичные действия, т.е. блокирует мой элемент? Хотел бы узнать подробнее как именно блокируется, запрещается выполнение контрола в ВФБ?

И еще вопрос не в тему, для общего понимания, возможно ли использовать для оформления средства WPF?

SCADAMaster
05.09.2014, 13:03
По этому свойству система делает окно контрола заблокированным (в окнах .Net это свойство Enabled). То есть можно в самом контроле установить Enable=false без использования этого свойства в скаде.

azausatu
05.09.2014, 13:29
Добрый день.
И еще вопрос не в тему, для общего понимания, возможно ли использовать для оформления средства WPF?

Не получится да?

Vitorgan
05.09.2014, 15:06
Добрый день, подскажите пожалуйста можно ли сменить стартовое изображение при загрузке Masterscada на свое личное?

SCADAMaster
05.09.2014, 15:42
Система - Режим исполнения - Настройки - Стартовая заставка.
Вначале будет отображаться заставка MasterSCADA, а когда загружается ваш проект - ваша заставка.

azausatu
08.09.2014, 09:45
Добрый день.
Как я понял, нельзя интегрировать элементы WPF в ВФБ, но можно их использовать в ActiveX?
Прочитал руководство "Создание ActiveX на C#", где в самом конце описывается как создать WPF контрол.
Можно ли более подробно объяснить, как это сделать?
Пустой ActiveX сделал, работает. Обработчик событий Load добавить в контрол моего ActiveX?

SCADAMaster
08.09.2014, 13:25
ВФБ на мнемосхеме представляется как ActiveX.
Вот ссылка Microsoft по созданию WPF на Windows Forms
http://msdn.microsoft.com/ru-ru/library/ms745781%28v=vs.110%29.aspx. Логика создания проекта одинаковая
Вот видео где видна работа ВФБ с WPF:
http://screencast.com/t/wgODtaLMl

evg3798
08.09.2014, 16:39
Здравствуйте!
Можно ли произвести автоматический экспорт в файл *.csv, а не через тренд.
Если можно, то как?
Спасибо.

SCADAMaster
08.09.2014, 16:50
Можно средствами тренда - через ФБ "Управление документом".
Назначаете в настройках этого ФБ тренд, задаете начало и конец и путь сохранения файла - с расширением csv.

evg3798
08.09.2014, 17:02
А можно ли вести дозапись в данный файл? Как это лучше сделать?
Спасибо

SCADAMaster
08.09.2014, 17:35
Нет, через тренд дозапись делать нельзя - пишите в новые файлы.
Дозапись можно сделать только через ФБ "Скрипт C#"

evg3798
10.09.2014, 03:33
Объект имеет вкладку "Архив" с опцией удаления архивов во вложенных объектах.
Как удалить эти архивы автоматически?
Спасибо.

SCADAMaster
10.09.2014, 08:14
Архивы удаляются автоматически - скада контролирует время и объем хранения, и удаляет старые данные.

evg3798
10.09.2014, 16:27
Архивы удаляются автоматически - скада контролирует время и объем хранения, и удаляет старые данные.
Я имел ввиду удаление автоматически определенной командой из среды исполнения, не заходя на соответствующую вкладку.

SCADAMaster
10.09.2014, 18:46
Можно только через скрипт.
Пример скрипта в приложении.

evg3798
11.09.2014, 03:29
Можно только через скрипт.
Пример скрипта в приложении.
Огромное Спасибо!
Это то, что мне надо.

evg3798
11.09.2014, 10:41
Можно только через скрипт.
Пример скрипта в приложении.
Еще вопрос.
Данный скрипт удаляет архивы из объектов и вложенных подобъектов.
А как удалить архивы из внешнего объекта (не включая скрипт в объект) с подобъектами, например - Компьютер- коннектор SQL - и т.п.
Спасибо.

Andrei1401
11.09.2014, 13:54
Здравствуйте. У меня следующий вопрос. Мне необходимо опросить модуль двоичных входов и выходов, а так же модуль релейных выходов. Тип данных у них написано bit field 32 и bite соответственно. Подскажите что мне нежно указать в OPC сервере, в поле тип данных.

SCADAMaster
11.09.2014, 14:20
bit Field 32 - скорее всего имеется ввиду тип Int32. Попробуйте установить данный тип в сервере и устройстве. Чередование байт нужно будут попробовать разное (обычно у четырехбайтовых чисел оно "старшим словом вперед").

SCADAMaster
11.09.2014, 14:51
Еще вопрос.
Данный скрипт удаляет архивы из объектов и вложенных подобъектов.
А как удалить архивы из внешнего объекта (не включая скрипт в объект) с подобъектами, например - Компьютер- коннектор SQL - и т.п.
Спасибо.
Исправьте строчку:
((MasterSCADALib.IArchiveCommon)HostFB.TreeItemHlp .Parent.DataArchive).ClearArchiveContent(0);
на:
((MasterSCADALib.IArchiveCommon)((ITreeItemHlp)Hos tFB.TreeItemHlp.Project.Item("полное имя")).DataArchive).ClearArchiveContent(0);
вместо "Полное имя" нужно указать путь к элементу чей архив вы хотите удалить

Andrei1401
11.09.2014, 15:40
bit Field 32 - скорее всего имеется ввиду тип Int32. Попробуйте установить данный тип в сервере и устройстве. Чередование байт нужно будут попробовать разное (обычно у четырехбайтовых чисел оно "старшим словом вперед").

Спасибо, модуль двоичных входов заработал, а вот релейный что то никак не хочет. Что может охват значение byte в типе данных и как можно выставить перестановку байтов?

SCADAMaster
11.09.2014, 16:03
Скорее всего это половина Modbus регистра, тип нужно ставить Int16.
Какой вас прибор? Приложите ссылку на документацию.

evg3798
11.09.2014, 16:07
Исправьте строчку:
((MasterSCADALib.IArchiveCommon)HostFB.TreeItemHlp .Parent.DataArchive).ClearArchiveContent(0);
на:
((MasterSCADALib.IArchiveCommon)((ITreeItemHlp)Hos tFB.TreeItemHlp.Project.Item("полное имя")).DataArchive).ClearArchiveContent(0);
вместо "Полное имя" нужно указать путь к элементу чей архив вы хотите удалить
Огромное спасибо

Andrei1401
11.09.2014, 16:27
Скорее всего это половина Modbus регистра, тип нужно ставить Int16.
Какой вас прибор? Приложите ссылку на документацию.

Прикладываю документацию с адресным пространством прибора, там последние два модуля меня интересуют.

SCADAMaster
11.09.2014, 16:48
Судя по всему это обычный int16, просто используется старший его байт.

Andrei1401
11.09.2014, 19:50
Судя по всему это обычный int16, просто используется старший его байт.

Я пробовал ставить int16, но толку никакого. Может надо сделать перестановку байтов, только вот как?

SCADAMaster
11.09.2014, 21:08
У тега есть настройка "Перестановка байтов в значении".
Но вообще со стандартной настройкой должно хотя бы значение меняться.

Andrei1401
11.09.2014, 21:28
Значение то меняется, только вот на контроллер почему то не уходит

SCADAMaster
11.09.2014, 21:55
Оно и не должно уходить - в документации четко прописано "R/O" - Read Only, только чтение.

Vitorgan
12.09.2014, 00:56
Доброй ночи, потребовалось отображать цифры как на электроном циферблате, отсюда вопрос: Возможно ли вставить скачанный шрифт формата .ttf в мастерскаду?

Andrei1401
12.09.2014, 08:02
Оно и не должно уходить - в документации четко прописано "R/O" - Read Only, только чтение.

Тогда мне вообще становится не понятно, как он вообще может включится? Он же читается модулем релейных выходов.

SCADAMaster
12.09.2014, 08:24
Скорее всего управление идет от самого контроллера - в зависимости от температуры, уставки и гистерезиса.

SCADAMaster
12.09.2014, 09:14
Доброй ночи, потребовалось отображать цифры как на электроном циферблате, отсюда вопрос: Возможно ли вставить скачанный шрифт формата .ttf в мастерскаду?
Если данный шрифт будет в списке доступных шрифтов, то можно.

Andrei1401
12.09.2014, 09:42
Все разобрался, надо было прописать связь по внутренней шине между модулем ЦПУ и релейным модулем, а в OPC сервере уже прописывать данные модуля ЦПУ. Спасибо что направили на правельный путь.

Vitorgan
12.09.2014, 11:09
а как его туда вставить? и как узнать в списке ли он доступных шрифтов? заранее благодарен

SCADAMaster
12.09.2014, 13:08
В списке представлены шрифты доступные в системе.
Про установку шрифтов можно найти в интернете:
http://netler.ru/pc/font.htm
http://windows.microsoft.com/ru-ru/windows7/install-or-delete-fonts

Vitorgan
12.09.2014, 16:23
Все получилось! Спасибо) подскажите пожалуйста, требуется выставить время смешивания компонентов оператором, вынести таймер на мнемосхему, после окончания времени, переменная смесителя должна перейти в состояние "выкл". С таймерами не работал.

SCADAMaster
12.09.2014, 17:42
Вам нужно использовать ФБ "Задержка по времени".
Для формирования времени используйте команду типа "Время" (в свойстах контрола оставьте только время), и ФБ "Разбор времени".

Vitorgan
12.09.2014, 18:11
Не совсем понял, я создаю команду "время", потом ФБ "разбор времени", выношу на мнемосхему секунды, а вот что с "задержкой по времени" делать так и не пойму...

SCADAMaster
12.09.2014, 18:43
Вам нужно в секундах просто задавать? Тогда разбор времени не нужен - просто команду типа "Целое". Связываете со входом ФБ "Секунд".

Vitorgan
12.09.2014, 19:27
Объясните пожалуйста на пальцах) уже час сижу с этими переменными, тыркаюсь тыркаюсь, и не как. Еще раз объясню что требуется:
1. На мнемосхеме должно быть окошко в котором ведется отчет времени ( типа этого 0:45 )
2. Уставку времени должен задавать оператор на мнемосхеме
3. По истечению времени, некая переменная должна поменять свое значение.

Заранее благодарен. Вся надежда только на Вас.

SCADAMaster
12.09.2014, 20:29
Пример в приложении

Vitorgan
12.09.2014, 22:24
Спасибо большое! Все понял, только вот могут эти 10 секунд отчитываться на мнемосхеме (0:10, 0:9, 0:8 ... и т.д.)

SCADAMaster
13.09.2014, 11:39
Для этого используйте ФБ "Счетчик пробега".
Для преобразования секунд выдаваемых на выход этого ФБ в формат времени используйте модуль "Расчет" - функцию Sec2Time( ).
Пример в приложении

evg3798
15.09.2014, 12:04
Исправьте строчку:
((MasterSCADALib.IArchiveCommon)HostFB.TreeItemHlp .Parent.DataArchive).ClearArchiveContent(0);
на:
((MasterSCADALib.IArchiveCommon)((ITreeItemHlp)Hos tFB.TreeItemHlp.Project.Item("полное имя")).DataArchive).ClearArchiveContent(0);
вместо "Полное имя" нужно указать путь к элементу чей архив вы хотите удалить

Еще один вопрос.
Данный скрипт удаляет архивы в "Объекте", а в "Системе"-"Компьютер" и т. д. не удаляет. Дело в том, что я делаю выборку из MSSQL и переношу на тренд. И мне необходимо иметь на тренде только данные одной выборки.
Спасибо.

SCADAMaster
15.09.2014, 15:12
Если укажите в пути компьютер, то должно удалить и с компьютера.

Vitorgan
15.09.2014, 17:24
Для этого используйте ФБ "Счетчик пробега".
Для преобразования секунд выдаваемых на выход этого ФБ в формат времени используйте модуль "Расчет" - функцию Sec2Time( ).
Пример в приложении

Спасибо Вам большое! спасли) Хотелось бы спросить, а вообще можно ли данный таймер сделать способом полегче, чтоб поменьше связей и переменных, а то таких счетчиков минимум 6 шт, помимо всего остального)))

azausatu
18.09.2014, 13:43
Добрый день
1. Нужно сделать кнопку смены оператора, после нажатия которой открывается стандартное окно с выбором пользователя и вводом пароля. Как через скрипт вызвать окошко смены оператора?
2. Как организовать такой вариант работы, когда к одному компьютеру подключены два монитора, две мыши и две клавиатуры? Управление после нажатия кнопки в скаде передается от одного рабочего места к другому, т.е. переключаются мониторы, клавиатуры и мыши, но компьютер один.

SCADAMaster
18.09.2014, 14:13
Добрый день
1. Нужно сделать кнопку смены оператора, после нажатия которой открывается стандартное окно с выбором пользователя и вводом пароля. Как через скрипт вызвать окошко смены оператора?

Создаете команду типа "Дискретный", на закладке "Действия" добавьте действие типа "Системное" - "Завершение сеанса".



2. Как организовать такой вариант работы, когда к одному компьютеру подключены два монитора, две мыши и две клавиатуры? Управление после нажатия кнопки в скаде передается от одного рабочего места к другому, т.е. переключаются мониторы, клавиатуры и мыши, но компьютер один.
Так сделать нельзя.

Vitorgan
19.09.2014, 00:28
Добрый вечер, подскажите пожалуйста, можно ли сделать так:
при выборе строки из выподающего списка, открывается окно в котором требуется произвести ввод данных.

SCADAMaster
19.09.2014, 08:20
Можно. Через выход динамизации, получаете номер строки. Если номер строки совпадает с нужным вам, то при помощи входа динамизации "Отключить" включаете видимость нужного вам поля данных.

Andrei1401
19.09.2014, 09:41
Добрый день. Подскажите, как в тренде сделать чтобы история хранилась не одни сутки а к примеру неделю?

SCADAMaster
19.09.2014, 10:54
По умолчанию данные хранятся 30 дней, и ограничены в размерах 30 мб, на один объект. Если данные хранятся у вас лишь день (что кажется маловероятным), то вероятно у вас срабатывает ограничение на объем.
Вы можете задать любую длительность и объем хранения. Настройки производятся в Компьютер - Архив - Данные.

Vitorgan
19.09.2014, 15:49
Можно. Через выход динамизации, получаете номер строки. Если номер строки совпадает с нужным вам, то при помощи входа динамизации "Отключить" включаете видимость нужного вам поля данных.

Задача состоит немного в другом, есть "Выпадающий список", в нем например 3 строки:
1. Ввод данных
2. Рецепты
3. Порядок дозирования

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

SCADAMaster
19.09.2014, 16:17
Можно. При помощи модуля "Событие" отслеживаете номер выбранной строки. Если номер соответсвует нужной вам, то событие переходит в состояние "Вкл".
Далее на закладке "Действия" создаете действие типа "открыть", и привязываете к нужному вам окну. Аналогично можно сделать через ФБ "Управление документом".

Vitorgan
19.09.2014, 16:21
Можно. При помощи модуля "Событие" отслеживаете номер выбранной строки.

Не совсем понимаю, каким образом я отслеживаю номер выбранной строки.

SCADAMaster
19.09.2014, 16:46
Создаете команду, связываете ее с выходом динамизации "Выбранная строка". Так вы получите номер выбранной строки в дереве объектов.
После этого значение с этой команды можно обрабатывать в модуле "Событие" составляя формулу.

Vitorgan
19.09.2014, 17:34
СкадаМастер, вы точно мастер! Получилось открыть окно при выборе строки, спустя 3 дня! Спасибо большое! Теперь встал вопрос, а если мне требуется выбрать из 6 строк, а к выбранной строке можно добавить только одну команду? как мне быть?

SCADAMaster
19.09.2014, 17:55
Это не играет роли. Команда возвращает номер выбранной строки, будет ли их 3 или 6 совершенно неважно.
После того как номер выбранной строки поступил в дерево объектов, вы можете его обрабатывать так как вам нужно.

Vitorgan
19.09.2014, 18:12
Но у меня же на каждую строку свое окно должно открываться

SCADAMaster
19.09.2014, 18:46
Тогда команда одна, а событий 6. У каждого события своя формула и свое окно для открытия.

Vitorgan
19.09.2014, 20:06
Тогда команда одна, а событий 6. У каждого события своя формула и свое окно для открытия.

Либо я уже завис, либо я что-то все таки не так делаю) с командой все сделал как вы сказали, а для события прописал в формуле, что если Команда1=истина, то событие истина. И открывается строка, которую я прописал в выходе динамизации "Выбранная строка".

SCADAMaster
19.09.2014, 21:50
Это очень странно. Команда должна у вас возвращать целое число - номер выбранной строки.
И формула должна быть например Команда1=3

Vitorgan
19.09.2014, 22:31
Спасибо, я понял. У меня "Команда1" была дискретной)))

Vitorgan
20.09.2014, 20:15
И снова я) подскажите пожалуйста, теперь я хочу закрывать неактивные окна объектов, которые в данные момент не выбраны в выпадающем списке, следовательно я создаю еще по 1 событию в каждом объекте, и на закладке "действия" выбираю закрытие окна объекта, а в формуле прописываю ( что если например Выбор не = 1, то закрывать данное окно)

Пытаюсь в формуле прописать что-то типа:
Выбор НЕ = 1, 1, 0

но вылетает ошибка синтаксиса... Что делаю не так?

SCADAMaster
20.09.2014, 21:07
Вы неправильно составляете формулу.
Нужно использовать оператор ЕСЛИ () - посмотрите его синтаксис в справке.

kolyaz
22.09.2014, 06:34
Заметил одну проблему при использовании скады :
Подключено 4 прибора-все работает идеально,
если отключить любой прибор скада начинает сбоить (не всегда включает с первого раза элемент или не выполняет действия по событию)
грешу на настройки в OPC , но нужен подробный совет

SCADAMaster
22.09.2014, 10:08
Скорее всего проблема не в скаде, а в самом сервере. Из-за того что он не может опросить устройство, снижается общий темп опроса что и приводит к подобным проблемам.
Какой ОРС сервер вы используете?
Опрос у объектов стоит по изменению?

kolyaz
22.09.2014, 11:02
OPC modbus universal master opc 500
Скада- мастерСкада100
//Из-за того что он не может опросить устройство, снижается общий темп опроса что и приводит к подобным проблемам.//--я тоже так думаю но как устранить
Опрос стоит по изменению

SCADAMaster
22.09.2014, 11:10
я тоже так думаю но как устранить

У ОРС сервера у устройства есть настройка "Повторное соединение после ошибки через" - по умолчанию стоит 10 секунд. Вы не уменьшали это значение? Возможно стоит увеличить - тогда это снизит трафик на опрос выключенного устройства.

Если это не поможет, то выложите ваш проект и конфигурацию ОРС сервера, а также сообщите номер версии ОРС сервера.

kolyaz
22.09.2014, 11:28
стоит 5с попробую увеличить до 10
Может и количество повторов при ошибке уменьшить

Vitorgan
23.09.2014, 16:32
Здравствуйте, может я не в той теме задаю вопрос, но где об этом узнать не представляю. Вопрос такой: есть устройство со своим протоколом обмена, но без собственного опс сервера, есть ли какие нибудь "общие" опс сервера?

azausatu
23.09.2014, 17:07
2. Как организовать такой вариант работы, когда к одному компьютеру подключены два монитора, две мыши и две клавиатуры? Управление после нажатия кнопки в скаде передается от одного рабочего места к другому, т.е. переключаются мониторы, клавиатуры и мыши, но компьютер один.



Так сделать нельзя.

Тогда нужно хотя бы переключать отображение мнемосхемы и окон на второй монитор, в случае нажатия соответствующей кнопки в скаде. Также нужно сделать обратное переключение со второго монитора на первый.
Возможно ли управлять отображением той или иной мнемосхемы, окна управления, на нужном мониторе через скрипт?

SCADAMaster
23.09.2014, 20:03
Возможно ли управлять отображением той или иной мнемосхемы, окна управления, на нужном мониторе через скрипт?
Может быть вам подойдут специальные программы:
http://www.actualtools.ru/multiplemonitors/

SCADAMaster
23.09.2014, 20:04
Здравствуйте, может я не в той теме задаю вопрос, но где об этом узнать не представляю. Вопрос такой: есть устройство со своим протоколом обмена, но без собственного опс сервера, есть ли какие нибудь "общие" опс сервера?
Общих ОРС серверов не бывает.
Если протокол обмена вашего устройства известен, то его можно поддержать в нашем Modbus Universal masterOPC сервере.
http://insat.ru/prices/info.php?pid=6944
На странице загрузки, у нас есть специальная документация с несколькими примерами реализации:
http://www.insat.ru/products/Universal_MasterOPC/MU_MasterOPC_Server_API_UG.pdf

azausatu
25.09.2014, 09:33
Добрый день.
При разработке нового проекта возник вопрос.
Имеется множество идентичных объектов, с похожими изображениями на мнемосхеме. Динамизация изображений объектов формируется отображением/скрытием нужных PNG картинок. Я при создании каждого объекта и его изображения добавляю эти PNG-файлы снова. В итоге получается в проекте множество дубликатов одинаковых файлов, хотелось бы избежать этого. Также, в случае, если какой то PNG файл пришлось изменить, нужно изменить его в каждом объекте, что долго.
Шаблонирование подходит только для одинаковых объектов, у меня они могут быть разными имея одно и то же изображение.
Я правильно понимаю, что для таких целей предусмотрен "Органайзер ресурсов"?
Как все таки уменьшить количество дубликатов файлов внутри проекта?

SCADAMaster
25.09.2014, 18:33
У ресурсов есть уровня иерархии -
1. \MasterSCADA Projects\Pictures
2. Папка Res проекта
3. Папка Res мнемосхемы
Скада ищет ресурс по имени с нижнего уровня до верхнего, пока не найдет.
Поэтому если внести исправление в рисунок в папке Pictures, то изменения должны применится ко всем этим рисункам в проекте.

Для переноса между 3 и 2 уровнем можно использовать органайзер ресурсов в мнемосхеме.
Для переноса между 2 и 1 уровнем можно использовать органайзер ресурсов проекта (Сервис\Органайзер\Ресурсов).
При экспорте проекта используемые в 1 файлы попадают в 2. Аналогично при экспорте мнемосхемы (в 3).

Andrei1401
29.09.2014, 08:26
По умолчанию данные хранятся 30 дней, и ограничены в размерах 30 мб, на один объект. Если данные хранятся у вас лишь день (что кажется маловероятным), то вероятно у вас срабатывает ограничение на объем.
Вы можете задать любую длительность и объем хранения. Настройки производятся в Компьютер - Архив - Данные.

Что мне можно сделать чтобы убрать это ограничение? На данный момент мне нужно видеть историю за 10 дней.

SCADAMaster
29.09.2014, 09:17
Задайте больше объем хранения - дайте например 3000 мб.

Vitorgan
30.09.2014, 22:50
здравствуйте, а можно ли в Мастерскаде осуществить такую вещь:
Есть окно рецептов, в нем:
1. Поле ввода названия рецепта
2. Поле ввода для значений компонента1, компонента2, и так 4 шт.
3. Поле ввода для уставки времени перемешивания компонентов.
Каждое значение уходит в опс сервер, а далее в дозирующее устройство.
А требуется чтобы рядом было что-то типа списка, в котором содержаться строки с названиями рецептов созданных ранее, и при нажатии на любой созданный ранее рецепт, в поля ввода выставлялись автоматом значения выставленные для данного рецепта. Запутано. Надеюсь понятно объяснил. Заранее спасибо!

Maxsvell
01.10.2014, 01:38
Всем привет! Вопрос: создаю ФБ (язык CFC), все бы ничего, но как сделать чтобы появились у готового при вызове ФБ, входа и выхода???Или я что то не то делаю?14569

SCADAMaster
01.10.2014, 08:08
Всем привет! Вопрос: создаю ФБ (язык CFC), все бы ничего, но как сделать чтобы появились у готового при вызове ФБ, входа и выхода???Или я что то не то делаю?14569
Вам нужно разместить ваш вопрос в разделе "ПЛК"

SCADAMaster
01.10.2014, 08:22
здравствуйте, а можно ли в Мастерскаде осуществить такую вещь:
Есть окно рецептов, в нем:
1. Поле ввода названия рецепта
2. Поле ввода для значений компонента1, компонента2, и так 4 шт.
3. Поле ввода для уставки времени перемешивания компонентов.
Каждое значение уходит в опс сервер, а далее в дозирующее устройство.
А требуется чтобы рядом было что-то типа списка, в котором содержаться строки с названиями рецептов созданных ранее, и при нажатии на любой созданный ранее рецепт, в поля ввода выставлялись автоматом значения выставленные для данного рецепта. Запутано. Надеюсь понятно объяснил. Заранее спасибо!
Указанную вами задачу можно решить.
Для сохранения набора рецептов используйте специальный скрипт - Сохранение и загрузка наборов команд. Скрипт лежит в библиотеке - Примеры скриптов.

MrNobody
01.10.2014, 10:54
Доброе утро! Подскажите можно ли организовать переключение между мнемосхемами по типу вкладок, например ка на рис.
14583

SCADAMaster
01.10.2014, 11:32
Так сделать нельзя.
Если только если рисовать вкладки самостоятельно, как это сделано в AutoSCADA:
http://insat.ru/products/?category=1297

Vitorgan
01.10.2014, 12:23
Указанную вами задачу можно решить.
Для сохранения набора рецептов используйте специальный скрипт - Сохранение и загрузка наборов команд. Скрипт лежит в библиотеке - Примеры скриптов.

Спасибо! А можно связать данный скрипт с "набором параметров" из палитры мнемосхемы

SCADAMaster
01.10.2014, 13:24
Именно этот компонент и используется в этом скрипте (он привязан к командам).

Vitorgan
01.10.2014, 22:22
Именно этот компонент и используется в этом скрипте (он привязан к командам).

в нем можно будет организовать сохранение имени "набора команд"?

Vitorgan
01.10.2014, 22:37
Извиняюсь....разобрался

Vitorgan
01.10.2014, 22:42
Но все равно вопросы есть, а можно ли чтоб при выборе строки, значения помимо переменных подставлялись в строки ввода? а то я вроде выбрал нужную строку, она висит а значения в полях ввода старые...

SCADAMaster
02.10.2014, 08:07
Должно подставляться - проверьте еще раз.
Возможно вы не подтверждаете кнопкой с галочкой ввода имени набора или не нажимаете загрузить набор.

Vitorgan
05.10.2014, 12:01
ScadaMaster, подскажите пожалуйста, пытаюсь переделать под себя список строк, вообще можно ли редактировать готовые ФБ? дело в том, что я хочу при выборе строки, не нажимать на галку(подтверждая выбор), а только потом нажимать на "загрузить".

Я решил создать событие, сделал из него зону выбора (поместил над галкой подтверждения выбора строки), а действие - выдать импульс, и подал этот импульс на переменную загрузить, а кнопку загрузить убрал вообще. Но событие не хочет ложиться поверх "выбора строки". Как мне быть?

Vitorgan
05.10.2014, 12:32
Наверное мне легче в настройках списка строк удалить подтверждение, и вместо нее просто поставить изображение собственной "галки"...

SCADAMaster
05.10.2014, 12:44
Редактировать готовые блоки нельзя.
А вот отключить подтверждение у данного ФБ можно.

Vitorgan
05.10.2014, 12:55
Да я так уже попробовал, но при нажатии собственной кнопки, на секунду выскакивает "галка подтверждения", мне всего лишь надо, чтоб и подтверждение и загрузка рецепта происходила по одному щелчку.

SCADAMaster
05.10.2014, 13:23
Не совсем понятно про какое появление кнопки вы говорите.
Опишите проблему подробнее.

Vitorgan
05.10.2014, 13:48
Я убрал подтверждение выбора, и на то место где была "галка подтверждения" вставил свою кнопку, в режиме исполнения - выбираю рецепт из списка, нажимаю загрузить и после нажатия кнопки, на секунду появляется "галка подтверждения"(которую я отключил в настройках), потом пропадает... 14619

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

Andrei1401
06.10.2014, 15:33
Мы на следующий год планируем закупить сенсорную панель и в связи с этим у меня вопрос. Планируется ли адаптация SCADA системы под сенсорные экраны?

SCADAMaster
06.10.2014, 16:38
Под сенсорной панелью вы подразумеваете сенсорный монитор?
Несколько наших клиентов использовали сенсорный монитор с MasterSCADA

Vitorgan
06.10.2014, 17:52
Подскажите пожалуйста, есть список строк, строковое значение из переменной "выбранная строка" транслируется в таблицу на мнемосхеме, но при повторном открытии режима исполнения - строка сбрасывается. Возможно ли при запуске сохранять строку выбранную ранее?

Vitorgan
06.10.2014, 18:01
Восстановление при рестарте... тормоз)

Andrei1401
06.10.2014, 18:20
Под сенсорной панелью вы подразумеваете сенсорный монитор?
Несколько наших клиентов использовали сенсорный монитор с MasterSCADA

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

SCADAMaster
06.10.2014, 18:35
Для ввода значений существует большое количество виртуальных клавиатур, самых разных типов.
Панель инструментов вы можете скрыть и сделать собственный тулбар - из обычных кнопок вызова или команд.

Andrei1401
06.10.2014, 19:09
Еще такой вопрос по обработке сигналов, а именно ФБ расход мазута, воды и пара. Я вроде все параметры ввел (диаметр трубопровода, сужающего усройства и т.д), но выход расхода так и не считает. Подскажите что нужно еще сделать чтобы все заработало.

SCADAMaster
06.10.2014, 19:28
У вас ключевая версия или Demo?
Для работы этого ФБ требуется опция MSRT-TE:
http://insat.ru/prices/info.php?pid=4274

Попробуйте проверить работу этого ФБ на Demo версии

Andrei1401
06.10.2014, 19:48
Я пробовал на 3.6.0.45554 3.6(DemoReleaseMax)_14_05_05_11_52 этой версии, но так и ничего не заработало. Там должен считаться счетчик или показываться мгновенный расход в гигакалориях?

SCADAMaster
06.10.2014, 20:12
Мгновенный расход.
Приложите ваш проект с ФБ, с настройками которые вы задали.

starik152
06.10.2014, 20:25
Есть сервер с ключом, а как подключить клиентский комп, с ограниченными возможностями

Andrei1401
06.10.2014, 20:34
Мгновенный расход.
Приложите ваш проект с ФБ, с настройками которые вы задали.

Я просто вставил ФБ, ввел параметры и запустил проект в режиме имитации.

SCADAMaster
06.10.2014, 20:56
Нужно прописать константы согласно ГОСТ.
К сожалению рабочего примера у нас нет - ФБ были написаны давно, сторонними разработчиками.

Andrei1401
06.10.2014, 21:04
Нужно прописать константы согласно ГОСТ.
К сожалению рабочего примера у нас нет - ФБ были написаны давно, сторонними разработчиками.

А где можно найти данные ГОСТы?

SCADAMaster
06.10.2014, 21:26
Номер госта указан в справке к ФБ

Andrei1401
06.10.2014, 22:00
Номер госта указан в справке к ФБ

Я конечно извиняюсь, может я не там смотрю, но по данному ФБ в справке я нашел только это

14650 14651

Vitorgan
06.10.2014, 22:02
Есть необходимость опрашивать некий прибор (весоизмерительный преобразователь) Протокол обмена схож с Dcon, но со своими символами начала и конца «кадра», со своим алгоритмом подсчета контрольной суммы.
На основе инструкции «реализация собственных протоколов» были прописаны скрипты в тегах.
Проблема №1. Для получения реального значения текущего веса необходима несколько параметров (4 параметра – два из них статические(с ними проблем нет), два других – читаются из прибора двумя разными командами). Замечено, что опрос первого параметра происходит корректно, а опрос второго параметра выдает код ошибки (как и в Dcon- «?»). Теги в иерархическом дереве структуры менялись местами, всегда первый «глушит» второй. Как устранить конфликт опросов тегов? Поэкспериментировать с периодом опроса? С подустройствами и группами? Где можно взять информацию с примерами организации групп и подустройств.
И в логе и в программе перехватывающей пакеты отправляемые в com-порт, я вижу что строка команды отправляется корректно.

SCADAMaster
07.10.2014, 08:18
Я конечно извиняюсь, может я не там смотрю, но по данному ФБ в справке я нашел только это

Данные ФБ вычисляют расход в соответствии с ГОСТом (ГОСТ 8.563.1 (2)-97)
http://www.docload.ru/Basesdoc/9/9659/index.htm

SCADAMaster
07.10.2014, 08:21
Проблема №1. Для получения реального значения текущего веса необходима несколько параметров (4 параметра – два из них статические(с ними проблем нет), два других – читаются из прибора двумя разными командами). Замечено, что опрос первого параметра происходит корректно, а опрос второго параметра выдает код ошибки (как и в Dcon- «?»). Теги в иерархическом дереве структуры менялись местами, всегда первый «глушит» второй. Как устранить конфликт опросов тегов? Поэкспериментировать с периодом опроса? С подустройствами и группами? Где можно взять информацию с примерами организации групп и подустройств.
Что значит глушит второй?
Ушел запрос, пришел ответ. Посылаете новый запрос - приходит новый ответ. Никаких конфликтов тут быть не может. В логе запросов нет "мешанины"?
Может быть устройству нужно некоторое время между запросами?

azausatu
07.10.2014, 15:48
Добрый день.
В скрипте формирую текстовый файл. Имеется множество входных переменных. Хотел в цикле прочитать значения всех входных переменных и формировать текстовый массив, который в дальнейшем пишется в файл. Как обратиться к значению входной переменной в скрипте? Не хочется вставлять все переменные вручную в код.

SCADAMaster
07.10.2014, 17:56
Пример в приложении

azausatu
08.10.2014, 09:54
Спасибо, очень помогло.
Нужно сделать счетчик количества запусков скады. По значению буду формировать уникальный ID для набора параметров, записанных в файл. При каждом запуске скады ID будет восстанавливаться при рестарте и увеличиваться на 1. Так вот, как в скрипте поймать удачный запуск скады?

SCADAMaster
08.10.2014, 10:19
Добавьте метод:
public override void Start()
Этот метод вызывается каждый раз при запуске скады.

Valera76
09.10.2014, 13:57
Доброго времени суток. Вначале опишу свою ситуацию, а затем задам вопрос и попрошу вашей помощи в его разрешении.
К MasterSCADA подключены две ТРМ-ки ОВЕН через ОВЕН-овский OPC-сервер. Скада архивирует, полученные от OPC-сервера значения температуры. На мнемосхеме имеется кнопка с фиксацией, которая запускает и останавливает OPC-сервер. Так же на мнемосхему вынесены две команды типа «Время» для задания оператором времени начала и конца построения отчёта с измеренными значениями температуры (они связаны с параметрами «Начало» и «Конец» источника данных отчёта). Построение отчёта запускается оператором соответствующей кнопкой (получена перетаскиванием на мнемосхему правой кнопкой мыши объекта, в котором сохранён отчёт).

Вопрос:
Как сделать так, чтобы время момента нажатия кнопки, запускающей OPC-сервер, передавалось в параметр «Начало» источника данных отчёта, а время момента отпускания этой кнопки передавалось в параметр «Конец» источника данных отчёта? И в то же время нужно оставить за оператором возможность задавать время начала и конца построения отчёта. Т.е. как сделать так, чтобы у параметров «Начало» и «Конец» источника данных отчёта, было два источника (один это ручное задание оператором, а другой это автоматическое задание этих времён кнопкой, запускающей OPC-сервер)?

SCADAMaster
09.10.2014, 16:37
Воспользуйтесь ФБ "Передний фронт" - по нему вы можете отследить нажатие кнопки. Выход этого ФБ пустите в событие. У события есть вкладка "Действия", с помощью действий можно присвоить переменным значения.
Для отслеживания отпускания кнопки, воспользуйтесь ФБ "Задний фронт", и также пустите его выход в событие.

Vitorgan
09.10.2014, 17:26
Добрый вечер, прошу помощи, есть окно объекта, в котором создаются рецепты, с помощью вашего скрипта они подгружаются в скаду, но хотелось бы в другом окне объекта отображать просто список с этими рецептами, Можно ли каким нибудь образом "прикрепить" список к файлу с сохраняющимися рецептами?

SCADAMaster
09.10.2014, 17:39
Устроит в виде такого же раскрывающегося списка?
Тогда вы можете сделать еще один ФБ "Список строк", привяжите его к тому же файлу что и основной (в настройках укажите одинаковый файл). А через свойства контрола отключите возможность добавления строк.

Vitorgan
09.10.2014, 17:44
Да я так и сделал, ну ладно) спасибо за оперативность!

azausatu
10.10.2014, 10:26
Добрый день.
Хотелось сделать навигацию по окнам в виде скрипта, так как кнопки, при нажатии на которых происходит переключение окон, также являются и индикаторами состояний. Изображение кнопки буду менять в скрипте. Все это можно реализовать через ФБ Управление документом, но думаю, проще было бы научиться открывать и закрывать окна при помощи скрипта.

Приведенный код не удалось запустить в режиме исполнения:
string FBPath = HostFB.TreeItemHlp.Project.ObjectTreeRootItem.Disp layName + "." + HostFB.TreeItemHlp.Parent.GetRelativeName(TreeItem Mask.RootObject);
IProjectHlp Проект = HostFB.TreeItemHlp.Project;
ITreeItemHlp Настройки = (ITreeItemHlp)Проект.Item(FBPath + "Настройки");
IAttributeHlp Окно_Настройки = Настройки.Attributes["Окно объекта"];
Окно_Настройки.Open();

Как это сделать правильно?

SCADAMaster
10.10.2014, 13:56
В Runtime нужно делать через beginInvoke:

using System.Threading;

RTManager.Instance.ThreadHolder.BeginInvoke(new ThreadStart(delegate
{
//ваш код
}));

azausatu
10.10.2014, 14:56
Спасибо. Заработало.

Еще вопрос. Можно ли вставить большое изображение объекта в окно управления так, чтобы у него появились полосы прокрутки а у окна управления не появились? Имеется таблица, ее размещаю в окно управления, таблица большая. Хотелось чтобы при перемотке таблицы ее шапка и кнопки вверху окна управления оставались на месте.

SCADAMaster
10.10.2014, 15:13
Нет, так сделать нельзя.
Если нужно чтобы кнопки поястоянно показывались, то можно их отобразить на другом окне которое будет открываться и закрываться синхронно с остальным.

azausatu
10.10.2014, 15:48
Нет, так сделать нельзя.
Если нужно чтобы кнопки поястоянно показывались, то можно их отобразить на другом окне которое будет открываться и закрываться синхронно с остальным.

Если окно во весь экран или имеет фиксированные координаты то сделать не трудно. А если окно можно перемещать? Как тогда привязать координаты второго окна к первому?

SCADAMaster
10.10.2014, 16:09
Если только через ФБ "Управление документом" - с его помощью можно открывать окно с заданными координатами.

Vitorgan
10.10.2014, 16:21
День добрый, а где можно изменить вид вводимого значения, создал команду, при нажатии на команду, открывается окно с вводом данных вида 1.000, а хотелось бы 1.0

SCADAMaster
10.10.2014, 16:41
Если переменной назначена шкала, то количество знаков после запятой берется от заданных в шкале