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

SCADAMaster
09.01.2015, 09:51
Приложите ваш проект.

SokolovS
10.01.2015, 10:43
Вот пример проекта

SCADAMaster
10.01.2015, 13:18
Мы проверили - у нас все работает корректно, даже если значение в ОРС сервере не меняется, но в архиве присутсвует - оно записывается на выход.
Посмотрите архив у ОРС HDA переменной и сравните с тем что формирует скрипт. Возможно у вас просто от OPC HDA данные не поступают.

SokolovS
12.01.2015, 08:18
Вот архивы по входу и выходу:
1612116122
Проект был запущен, затем были добавлены данные в ОРС HDA
Версия скады 3.5.1

SCADAMaster
12.01.2015, 08:35
Попробуйте проверить на текущей Demo.

ivandragon
12.01.2015, 11:45
Доброго времени суток. Подскажите есть ли готовое решение для передачи данных с теплосчетчика ВКТ-7, с установленным модулем ethernet, в Мастер Скаду?

SCADAMaster
12.01.2015, 13:05
Данный прибор можно подключить через OPC сервер - его распространяет компания Теплоком:
http://www.teplocom-sale.ru/catalogue/software.php?SECTION_ID=136

SokolovS
12.01.2015, 15:31
Попробуйте проверить на текущей Demo.

Проверил на 3.6.0.48491 3.6(RT32ReleaseMax)_15_01_10_22_27
Поведение не изменилось

SokolovS
12.01.2015, 15:41
Дошло наконец
Заменил

StartTime=EndTime; на
StartTime=mas[mas.Length-1].Time.AddSeconds(1); Архивы-то из прошлого

_Pavel_
13.01.2015, 21:59
Подскажите, пожалуйста: что означает это сообщение?
Появляется через какое-то время работы проекта в режиме исполнения при попытке записи в OPC-переменную.

16147

Александр_АСК
14.01.2015, 00:13
Возникла проблема с решением такой задачи: есть периоды времени (источник данных является расчетом = метка_конца - метка_начала) необходимо их просуммировать в отчете (по идее производится бендом "итог" и функцией SumTime) но результат получается всегда 00:00:00

SCADAMaster
14.01.2015, 14:52
Подскажите, пожалуйста: что означает это сообщение?
Появляется через какое-то время работы проекта в режиме исполнения при попытке записи в OPC-переменную.

Пришлите отчет об ошибках.
Для того чтобы сформировать отчет об ошибках:
В Режиме Исполнения (RT):
"Сервис"->"Отчет об ошибках" или
Alt+F10 ->"Отчет об ошибках"
Поставьте галочку "Включая конфигурацию текущего проекта". Сформированную папку заархивируйте и выложите сюда.

_Pavel_
15.01.2015, 09:01
Пришлите отчет об ошибках.


Отчёт во вложении.

SCADAMaster
15.01.2015, 13:13
Возникла проблема с решением такой задачи: есть периоды времени (источник данных является расчетом = метка_конца - метка_начала) необходимо их просуммировать в отчете (по идее производится бендом "итог" и функцией SumTime) но результат получается всегда 00:00:00
SumTime работает с типом TimeSpan. Поэтому чтобы произвести суммирование временных интервалов, нужно исправить формулу выражения:
{SumTime(Данныеданные, new TimeSpan(данные.Время.Hour, данные.Время.Minute, данные.Время.Second))}
Данныеданные - название бэнда.
данные.Время - колонка типа DateTime

Vitamin
15.01.2015, 15:13
Здравствуйте! Подскажите пожалуйста как сделать чекбокс с помощью "события". Где-то описывалось - не найду. Спасибо!

SCADAMaster
15.01.2015, 15:46
Пример в приложении.

_Pavel_
15.01.2015, 16:00
SCADAMaster, есть новости по моему вопросу?
Ещё вопрос:
Почему функция:
WORD_TO_INT(64486);
в ФБ "Код ST" вызывает "ошибка устройства"? В CDS корректно получается соответствующее отрицательное число...

SCADAMaster
15.01.2015, 18:15
Отчёт во вложении.
Нам необходима также конфигурация ОРС сервера и лог обмена с устройством.
Для этого в свойствах сервера включите запись журнала и всех его событий, размер лога задайте равным 10000. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
c:\Documents and Settings\All Users\Application Data\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Лог заархивируйте и вышлите нам. Приложите конфигурацию ОРС сервера, а также сообщите номер версии ОРС сервера.

После этого также сформируйте отчет об ошибках из MasterSCADA

_Pavel_
15.01.2015, 20:34
Хорошо, завтра сделаю.

Подскажите, пожалуйста:
В ФБ "Программа ST" Стандартная функция WORD_TO_INT() возвращает "ошибка устройства" при значениях WORDа от 32768 до 65535, т.е. соответствующего диапазону отрицательных значений типа INT. В CoDeSys эта функция работает корректно. Это фича или баг?

_Pavel_
16.01.2015, 09:30
Версия сервера 3.1.3
Лог во вложении.

SCADAMaster
16.01.2015, 10:28
Ошибка проявилась в момент когда вы записывали лог сервера?
Нужен еще отчет скады, чтобы знать время возникновения.

_Pavel_
16.01.2015, 11:25
Да, ошибка проявилась и я сразу остановил сервер и снял логи. Отчёт скады я, к сожалению, не снял, но по времени должно быть в конце лога.

_Pavel_
16.01.2015, 12:39
Вот здесь видно время ошибок

SCADAMaster
16.01.2015, 14:35
SCADAMaster, есть новости по моему вопросу?
Ещё вопрос:
Почему функция:
WORD_TO_INT(64486);
в ФБ "Код ST" вызывает "ошибка устройства"? В CDS корректно получается соответствующее отрицательное число...
Это ошибка.
Данная ошибка исправлена. Если у вас Demo версия, то вы можете проверить работу ФБ в Beta версии. Для получения доступа к Beta версии направьте запрос в техподдержку.

SCADAMaster
16.01.2015, 19:47
Да, ошибка проявилась и я сразу остановил сервер и снял логи. Отчёт скады я, к сожалению, не снял, но по времени должно быть в конце лога.
Судя по всему ошибка генерируется Windows - возможно возникают какие то ошибки при работе технологии OLE.
Попробуйте установить на компьютер OPC Core Components, в зависимости от типа вашей ОС:
https://yadi.sk/d/L9j6yyci2QfW1
https://yadi.sk/d/ewpkpmMv2QfWB
Если не поможет, то попробуйте проверить на другом компьютере.

ford7
18.01.2015, 11:31
Подскажите, можно ли установить Modbus Universal MasterOPC Server 32 на nas (synology) например, когда нет постоянно работающего компьютера?

SCADAMaster
18.01.2015, 13:28
Судя по описанию данных устройствах используется собственная операционная система базирующая на Linux. Но если на ней можно развернуть виртуальную машину с ОС Windows (судя по описанию можно), то тогда установить ОРС сервер будет можно.

ford7
18.01.2015, 17:49
Судя по описанию данных устройствах используется собственная операционная система базирующая на Linux. Но если на ней можно развернуть виртуальную машину с ОС Windows (судя по описанию можно), то тогда установить ОРС сервер будет можно.

А проще нет варианта, чтобы сразу на линукс?

SCADAMaster
18.01.2015, 20:40
OPC сервер не работает в среде Linux.

tokarevdn
19.01.2015, 08:52
подскажите где можно скачать simulator сервер который используется в видео уроках. на сайте инсата не нашел, на ftp где скачивал скаду тоже не нашел

SCADAMaster
19.01.2015, 10:05
Проект создавался на основе старого симулятора - лучше использовать вместо него наш новый ОРС сервер. К проекту приложен проект MasterSCADA и конфигурация:
http://www.masterscada.ru/files/documentation/masterscada/First_MasterSCADA_Project.zip
Скачайте данный файл. Внутри него лежит конфигурация с симулятором для нового OPC сервер - Modbus Universal MasterOPC Server
http://www.masteropc.ru/products/?category=399
Его бесплатную версию на 32 точки можно скачать здесь:
http://www.masteropc.ru/prices/info.php?pid=6944
Скачайте и установите данный ОРС.

Будут небольшие отличия в названии ОРС переменных, но в остальном - все тоже самое. В архиве также есть файл Readme, где описаны отличия.

Можно скачать и старый Simulator - он лежит на нашем FTP (в папке /OPC серверы/OPC-сервер Demo ToolKit/). Но данный ОРС сервер может некорректно работать на Windows 7 (необходимо отключить UAC или установить его не в Program Files, а например в C:\Toolkit).

_Pavel_
19.01.2015, 11:47
Судя по всему ошибка генерируется Windows - возможно возникают какие то ошибки при работе технологии OLE.
Попробуйте установить на компьютер OPC Core Components, в зависимости от типа вашей ОС:
https://yadi.sk/d/L9j6yyci2QfW1
https://yadi.sk/d/ewpkpmMv2QfWB
Если не поможет, то попробуйте проверить на другом компьютере.

Не помогло.:( Какое-то время работает, потом появляется эта ошибка при любой записи в OPC-переменную. Помогает перезапуск скады.
Проявляется на ОС Windows 8.1 x64 SL. :(
Вроде бы как дома на Win7 pro x86 такого не наблюдал, но ещё потестирую....

_Pavel_
19.01.2015, 14:41
Это ошибка.
Данная ошибка исправлена. Если у вас Demo версия, то вы можете проверить работу ФБ в Beta версии. Для получения доступа к Beta версии направьте запрос в техподдержку.

Установил betу. Отлично WORD_TO_INT() заработала!
Теперь не работает функция INT_TO_REAL() :(. Сразу пишет ошибка устройства. В предыдущей версии работала.

tokarevdn
20.01.2015, 09:32
в демо версии при добавлении ОРС переменных в дерево системы добавились не все переменные и группы. есть какое то ограничение на количество переменных?

SCADAMaster
20.01.2015, 09:48
Нет, именно в Demo версии никаких ограничений нет. Возможно какие то проблемы с сервером.

SCADAMaster
20.01.2015, 20:54
Теперь не работает функция INT_TO_REAL() :(. Сразу пишет ошибка устройства. В предыдущей версии работала.
Ошибка проявилась. Мы ее устранили. Исправление будет доступно в следующей Beta версии.

_Pavel_
20.01.2015, 22:53
Ещё ошибка: (В версии 3.6.0.47114 3.6(DemoReleaseMin)_14_09_11_18_45 )
В ФБ "Программа ST" переменной типа DWORD невозможно присвоить значение в котором 31-ый бит = 1, например 2147483648 (0x80000000)

Да что ж такое у вас там с типами!?!? :mad:

Почему в ФБ "Повторитель" нельзя унаследовать тип "Беззнаковый целый" ?

Alexcei64rus
21.01.2015, 00:02
Доброй ночи, люди.
У меня лицензионная MS 3.5
В версии 3.5 нету функции архива- сумма (ArchSum). Подскажите чем ее заменить.
Реализую следующую задачу- есть архивируемое значение, его нужно суммировать за сутки и отобразить в отчете. В демо 3.6 реализовал с помощею ArchSum.

SCADAMaster
21.01.2015, 08:30
Ещё ошибка: (В версии 3.6.0.47114 3.6(DemoReleaseMin)_14_09_11_18_45 )
В ФБ "Программа ST" переменной типа DWORD невозможно присвоить значение в котором 31-ый бит = 1, например 2147483648 (0x80000000)

На текущей Beta проблема не проявилась - попробуйте проверить на ней (качается там же).
Если и на Beta ошибка у вас проявится - пришлите код и последовательность действий приводящих к ошибке.

SCADAMaster
21.01.2015, 08:38
Реализую следующую задачу- есть архивируемое значение, его нужно суммировать за сутки и отобразить в отчете. В демо 3.6 реализовал с помощею ArchSum.
А непосредственно в самом отчете вы не можете просуммировать?

Можно еще суммировать через скрипт - получить архивные значения и произвести обработку. Пример кода:
string name=HostFB.TreeItemHlp.FullName+".Входы."+"Вход";
var elem = (ITreePinHlp)HostFB.TreeItemHlp.Project.Item(name) ;
PinDataArchiveHlp k=elem.DataArchiveItem;
var startTime=//указываете время с которого читать
var endTime=//указываете время по которое читать
var mas=k.Read(startTime, endTime, true); //читаем архив
double sum=0;
for (int i=0;i<mas.Length;i++)

{
sum=sum+Convert.ToDouble(mas[i].Value);
}

_Pavel_
21.01.2015, 10:08
На текущей Beta проблема не проявилась - попробуйте проверить на ней (качается там же).
Если и на Beta ошибка у вас проявится - пришлите код и последовательность действий приводящих к ошибке.

Проверил в beta-версии - работает. Хорошо.

Движемся далее :)

1. Вы не ответили на вопрос по поводу типа "беззнаковый целый" у ФБ "Повторитель" - почему выход не может наследовать этот тип, а превращается в "целый".

2. На мнемосхеме имеется элемент сгруппированный из множества других разных элементов - картинки, значения, выборы изображения и в том числе вложенная группа из нескольких картинок и выборов изображений. Этой большой группе присваивается динамизация положения "Левый". В итоге все элементы движутся вместе, кроме элемента "вложенная группа". Почему?

SCADAMaster
21.01.2015, 13:07
1. Вы не ответили на вопрос по поводу типа "беззнаковый целый" у ФБ "Повторитель" - почему выход не может наследовать этот тип, а превращается в "целый".

Потому что этот тип не был поддержан в повторителе.
Мы его поддержали, исправление будет в завтрашней Beta версии.



2. На мнемосхеме имеется элемент сгруппированный из множества других разных элементов - картинки, значения, выборы изображения и в том числе вложенная группа из нескольких картинок и выборов изображений. Этой большой группе присваивается динамизация положения "Левый". В итоге все элементы движутся вместе, кроме элемента "вложенная группа". Почему?
Ошибка проявилась - мы изучим данную проблему.

_Pavel_
21.01.2015, 21:26
исправление будет в завтрашней Beta версии.
.

Жду с нетерпением!

Подскажите, пожалуйста, никак не могу найти инфу в справке: почему кнопки без фиксации на мнемосхеме после кратковременного нажатия возвращаются в исходное состояние примерно через 4 секунды? При этом если кликать по кнопке, пока она ещё не "отжалась" видно, что команда срабатывает...

SCADAMaster
21.01.2015, 21:44
Так сделано специально, передача сигнала к устройствам занимает определенное время, поэтому реализована задержка на кнопке - чтобы оператор не пытался нажать на нее еще раз (видел что нажатие прошло).

_Pavel_
22.01.2015, 11:35
ИМХО: лучше бы это оставили на усмотрение разработчика: если нужно - задал таймаут...

ivandragon
23.01.2015, 08:04
Доброго времени суток. Помогите решить такую задачу.
Имеется емкость, на ней установлено 4(20%, 50%, 70%, 100%) бесконтактных датчика уровня с них выходит дискретный сигнал. Располагаются они относительно друг друга на расстоянии и реагируют замыкаясь на проходящею рядом с ними металлическую болванку. Происходит следующее: при заполнении емкости отрабатывает нижний аварийный уровень, болванка поднимается, тем самым отключая нижний датчик, но еще не включает нижний уровень, заполняя далее включается датчик нижнего уровня, но нижний аварийный уровень остается отключенным и т.д. Вопрос как на мнемосхеме фиксировать заполнение емкости таким образом чтобы при пропадании сигнала с датчика уровень на мнемосхеме не исчезал при заполнении и исчезал при опорожнении? Спасибо!

SCADAMaster
23.01.2015, 10:33
Можно воспользоваться действиями.
Создайте событие, в формулу которого добавьте сигнал от датчика. На закладке "Действия" создайте действие, которое будет присваивать переменной уровня (например команде) значение. Т.е. сработал первый датчик - уровню присвоилось 20, сработал второй - 50 и т.д.

ivandragon
23.01.2015, 11:47
Можно воспользоваться действиями.
Создайте событие, в формулу которого добавьте сигнал от датчика. На закладке "Действия" создайте действие, которое будет присваивать переменной уровня (например команде) значение. Т.е. сработал первый датчик - уровню присвоилось 20, сработал второй - 50 и т.д.

Я сделал по расчету отображение уровня в емкости, _20_zapasa_diz_topliva*20+_50_zapasa_diz_topliva*5 0+_80_zapasa_diz_topliva*80+_100_zapasa_diz_topliv a*100
1 датчик отработал 20% отобразилось, 2 сработал 50%, 3ий 70%, 4ий 100%., но вот вопрос когда уровень находится между датчиками, то на мнемосхеме отображается 0%, а по факту например уровень находится между 70 и 100%., как быть тогда?

alkor_aam99
23.01.2015, 12:44
Здравствуйте.
Использую MasterOPC Universal Modbus Server с MasterScada. OPC настроил для обмена данными с ПЛК150 c HDA доступом. MasterScada тоже добавил HDA сервер и т.п. запускаю всё это в RunTime, чтение данных из ПЛК в Scada проходит на ура. Через OPC задаю значения, они в ПЛК тоже попадают без проблем. Но при попытке установить значение в Scada, путём поля "Ввод значения" в дереве системы, оно устанавливается, на короткое время, и возвращается на старое значение, как будто OPC не принял введённое с Scada значение и переписал его своим, т.е. старым. В чём может быть дело ?
Спасибо.

SCADAMaster
23.01.2015, 13:30
Я сделал по расчету отображение уровня в емкости, _20_zapasa_diz_topliva*20+_50_zapasa_diz_topliva*5 0+_80_zapasa_diz_topliva*80+_100_zapasa_diz_topliv a*100
1 датчик отработал 20% отобразилось, 2 сработал 50%, 3ий 70%, 4ий 100%., но вот вопрос когда уровень находится между датчиками, то на мнемосхеме отображается 0%, а по факту например уровень находится между 70 и 100%., как быть тогда?
Сделайте как мы написали - через действия.
Через расчет так сделать не получится, так как нужно фиксировать значения по срабатыванию датчика.

SCADAMaster
23.01.2015, 13:31
Здравствуйте.
Использую MasterOPC Universal Modbus Server с MasterScada. OPC настроил для обмена данными с ПЛК150 c HDA доступом. MasterScada тоже добавил HDA сервер и т.п. запускаю всё это в RunTime, чтение данных из ПЛК в Scada проходит на ура. Через OPC задаю значения, они в ПЛК тоже попадают без проблем. Но при попытке установить значение в Scada, путём поля "Ввод значения" в дереве системы, оно устанавливается, на короткое время, и возвращается на старое значение, как будто OPC не принял введённое с Scada значение и переписал его своим, т.е. старым. В чём может быть дело ?
Спасибо.
Попробуйте сделать по другому.
В дереве объектов создайте объект и положите в него команду. Установите связь между этой командой и ОРС переменной. Осуществляйте ввод уже в эту команду (с мнемосхемы или прямо с дерева объектов).

alkor_aam99
23.01.2015, 14:55
С командой, честно говоря не понял как сделать, перетащил тег в объект - создалось значение. Пробовал через значение менять - всё то же самое. ((

alkor_aam99
23.01.2015, 15:23
Попробуйте сделать по другому.
В дереве объектов создайте объект и положите в него команду. Установите связь между этой командой и ОРС переменной. Осуществляйте ввод уже в эту команду (с мнемосхемы или прямо с дерева объектов).

Попробовал сделать то же для вместо HDA c DA. И заработало, данные стали записываться в ОРС и ПЛК ! Заметил, что когда на scada добавляешь теги в DA, то значок перед тегом - такой же как для ЗНАЧЕНИЯ при работе в дереве объектов. Когда добавляешь на scada теги в HDA, то значок у тега, как у КОМАНДЫ, при работе в дереве объектов. Может с этим связано, что нет возможности записать значение со SCADA в ОРС, когда значок у тега как у команды (в HDA OPC) ?

Попробовал ещё, что при добавлении тегов в DA ОРС, теги, с HDA доступом тоже видны и добавляются. И ещё и работают, т.е. удаётся со SCADA их записать в ОРС и контроллер.
Нормально ли настроить доступ из scada к одному и тому же тегу в ОРС сервере с HDA доступом одновременно через HDA ОРС и DA OPC серверы, т.е. на scada получить 2 по сути тега, обращающихся к одному тегу в ОРС сервере?

SCADAMaster
23.01.2015, 16:13
С командой, честно говоря не понял как сделать, перетащил тег в объект - создалось значение
Пример в приложении


Попробовал сделать то же для вместо HDA c DA. И заработало, данные стали записываться в ОРС и ПЛК ! Заметил, что когда на scada добавляешь теги в DA, то значок перед тегом - такой же как для ЗНАЧЕНИЯ при работе в дереве объектов. Когда добавляешь на scada теги в HDA, то значок у тега, как у КОМАНДЫ, при работе в дереве объектов. Может с этим связано, что нет возможности записать значение со SCADA в ОРС, когда значок у тега как у команды (в HDA OPC) ?

Когда вы записываете в двунаправленную переменную значение в дереве системы, вы записываете значение на его выход. Поэтому в следующем цикле опроса значение сбрасывается.



Попробовал ещё, что при добавлении тегов в DA ОРС, теги, с HDA доступом тоже видны и добавляются. И ещё и работают, т.е. удаётся со SCADA их записать в ОРС и контроллер.
Нормально ли настроить доступ из scada к одному и тому же тегу в ОРС сервере с HDA доступом одновременно через HDA ОРС и DA OPC серверы, т.е. на scada получить 2 по сути тега, обращающихся к одному тегу в ОРС сервере?
Да, нормально.

ivandragon
23.01.2015, 16:32
Сделайте как мы написали - через действия.
Через расчет так сделать не получится, так как нужно фиксировать значения по срабатыванию датчика.

можно попросить вас выложить пример, немного не понимаю как это реализовать, спасибо.

SCADAMaster
23.01.2015, 16:50
Пример прикреплен к предыдущему письму.

alkor_aam99
23.01.2015, 17:41
Пример в приложении


Когда вы записываете в двунаправленную переменную значение в дереве системы, вы записываете значение на его выход. Поэтому в следующем цикле опроса значение сбрасывается.


Да, нормально.

__________________Спасибо.

Boris_K
24.01.2015, 16:16
1) Возможно ли отображать графики с автомасштабированием, то есть чтобы минимум и максимум шкалы графика автоматически менялся в зависимости от выводимых кривых? Возможно ли отображать в логарифмическом масштабе? И можно ли управлять шкалой графика через переменные?

2) Мне нужно подключить ПЛК (ОВЕН ПЛК100) по интерфейсу RS-232 (через преобразователь USB/RS-232), протокол - Modbus (ASCII или RTU, скорость 115200 бод). При этом СКАДА должна быть мастером. С этим не будет проблем?

3) Какова минимальная частота опроса ПЛК, то есть частота обновления битовых флагов и различных переменных (целых, с плавающей точкой)? Например, в панелях от ОВЕНа можно настолько быстро, насколько позволяет скорость передачи данного объёма данных. MasterSCADA сможет максимально быстро опрашивать небольшой набор значений? И можно ли выбирать, какие значения с какой частотой опрашивать (например, в панелях обычно опрашиваются значения, присутствующие на текущем экране)?

4) Нужно управлять системой с любого из двух компьютеров, соединённых в лок. сеть. При этом должна быть возможность указать некий простой файл (например, txt) с настройками для будущего процесса, и чтобы система передала эти настройки в ПЛК. В процессе работы - архивировать значения некоторых переменных в файл (текстовый, или какой-либо другой формат), вести файл с журналом событий - какие лицензии для этого потребуются?

SCADAMaster
24.01.2015, 18:28
1) Возможно ли отображать графики с автомасштабированием, то есть чтобы минимум и максимум шкалы графика автоматически менялся в зависимости от выводимых кривых?

Да, возможно. В настройках пера в тренде есть параметр "Авторазмер".


Возможно ли отображать в логарифмическом масштабе?

Можно. Назначьте переменной логарифмическую шкалу (Система - Шкалы - аналоговые, в поле формат нужно вместо буквы f указать e).


И можно ли управлять шкалой графика через переменные?

Можно через скрипт.



2) Мне нужно подключить ПЛК (ОВЕН ПЛК100) по интерфейсу RS-232 (через преобразователь USB/RS-232), протокол - Modbus (ASCII или RTU, скорость 115200 бод). При этом СКАДА должна быть мастером. С этим не будет проблем?
Нет, не будет. Используйте наш Modbus Universal masterOPC
http://www.masteropc.ru/products/?category=399
Бесплатную версию на 32 точки, а также видеопримеры по созданию конфигурации можно скачать здесь:
http://www.masteropc.ru/prices/info.php?pid=6944
На странице также есть инструкция по созданию конфигураций для контроллеров ОВЕН.


3) Какова минимальная частота опроса ПЛК, то есть частота обновления битовых флагов и различных переменных (целых, с плавающей точкой)? Например, в панелях от ОВЕНа можно настолько быстро, насколько позволяет скорость передачи данного объёма данных. MasterSCADA сможет максимально быстро опрашивать небольшой набор значений? И можно ли выбирать, какие значения с какой частотой опрашивать (например, в панелях обычно опрашиваются значения, присутствующие на текущем экране)?

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



4) Нужно управлять системой с любого из двух компьютеров, соединённых в лок. сеть. При этом должна быть возможность указать некий простой файл (например, txt) с настройками для будущего процесса, и чтобы система передала эти настройки в ПЛК. В процессе работы - архивировать значения некоторых переменных в файл (текстовый, или какой-либо другой формат), вести файл с журналом событий - какие лицензии для этого потребуются?
Для управления с двух компьютеров вам потребуется две сетевые версии или MAS + MSRT-Client. Напишите письмо на scada@insat.ru, и опишите требуемую конфигурацию (в частности количество точек) - вам подберут оптимальную конфигурацию.
Для сохранения настроек, можно использовать скрипт "Сохранение и загрузка наборов команд". Скрипт находится в Палитра ФБ - Библиотека - Примеры скриптов - Сохранение и загрузка наборов команд. Скрипт нужно расположить в объекте, с командами, значения которых нужно сохранять и загружать по запросу.
У скрипта есть три входа. "Набор" - строковое имя набора (например название рецепта) под которым будет произведено сохранение значени или наоборот загрузка. "Сохранение" - при подаче на него импульса происходит сохранение значений команд с именем заданным на входе "Набор". "Загрузка" - при подаче на него импульса происходит загрузка значений команд из сохраненного набора (также заданного на входе "Набор").
Единственное ограничение скрипта - нет возможности работать со строками, но это ограничение можно снять.

Архивация и ведение журналов входит в базовую версию.

Boris_K
24.01.2015, 19:11
Единственное ограничение скрипта - нет возможности работать со строками, но это ограничение можно снять.

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


Используйте наш Modbus Universal masterOPC

А разве нельзя просто задать регистры Модбас, настроить параметры порта и связи, и просто подключиться к ПЛК, зачем использовать OPC-сервер для этого? (Извиняюсь, если глупый вопрос, но опыта пока мало).

SCADAMaster
24.01.2015, 19:51
Нужны простейшие строковые операции - например, из ПЛК читается значение с плавающей точкой - давление в высоковакуумной камере, может изменяться примерно в миллиард раз (от глубокого вакуума до атмосферы), поэтому в скаде нужно вывести его в экспоненциальном виде, а после значения дописать единицу измерения, кроме того (в случае например, обрыва связи с датчиками давления), вместо значения вывести "Ошибка" (сигналом этого будет отрицательное значение передаваемого давления). То есть нужны простейшие строковые операции (хотя-бы присваивание, объединение, конвертация числа в строку) и условный оператор. Это можно реализовать?

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




А разве нельзя просто задать регистры Модбас, настроить параметры порта и связи, и просто подключиться к ПЛК, зачем использовать OPC-сервер для этого? (Извиняюсь, если глупый вопрос, но опыта пока мало).
В MasterSCADA связь реализуется через ОРС серверы.

Boris_K
24.01.2015, 21:37
в случае проблем со связью или датчиками, можно менять признак качества переменной Нет, я имею в виду, что все данные от датчиков поступают в ПЛК, а он уже передаёт в скаду всю информацию, нужную для наблюдения и управления. Сама скада будет связываться только с ПЛК. Можно ли проделать описанные операции со строками? Это будет предпочтительнее, в том числе для минимизации обмена.

_Pavel_
24.01.2015, 22:26
Подскажите, пожалуйста, не нашёл в справке:
1. Можно ли динамизировать положения окна?
2. Можно ли создать самозакрывающееся через определённый таймаут сообщение? (через стандартный канал сообщений)

SCADAMaster
24.01.2015, 22:35
Нет, я имею в виду, что все данные от датчиков поступают в ПЛК, а он уже передаёт в скаду всю информацию, нужную для наблюдения и управления. Сама скада будет связываться только с ПЛК.
И что? Точно также можно передавать в скаду состояние датчиков, которые ОРС сервер будет представлять как достоверный/недостоверный признак качества.


Можно ли проделать описанные операции со строками? Это будет предпочтительнее, в том числе для минимизации обмена.
Как замена на строки приведет к минимизации обмена?

Boris_K
24.01.2015, 23:02
И что? Точно также можно передавать в скаду состояние датчиков, которые ОРС сервер будет представлять как достоверный/недостоверный признак качества.
Как замена на строки приведет к минимизации обмена?

В моём случае передаётся только одно 4-байтовое значение, а в Вашем вместе с ним надо ещё передавать состояние датчика, то есть ещё как минимум бит. Конечно, обмен не сильно "пострадает", но чем меньше передаётся переменных, тем меньше путаницы, ИМХО.

SCADAMaster
25.01.2015, 09:36
Конечно, обмен не сильно "пострадает", но чем меньше передаётся переменных, тем меньше путаницы, ИМХО.
Один бит погоды не сделает - все равно регистры опрашиваются группой. Обработать отдельные биты можно на уровне скрипта в ОРС сервере (есть видеопример на эту тему), зато на верхнем уровне вы получите обработанное значение, и никакой дополнительной работы в скаде делать не потребуется.


В моём случае передаётся только одно 4-байтовое значение, а в Вашем вместе с ним надо ещё передавать состояние датчика, то есть ещё как минимум бит.
Так как эту проблему решает использование строк?
Если нарушение датчика будет являться отрицательное значение, то опять таки проблема решаема с помощью ОРС признаков качества. На уровне ОРС сервер, с помощью скрипта анализируете значение, если оно отрицательное - выставляете в тег предыдущее достоверное значение, и признак качества SensorFailure. Можем приложить пример.

Boris_K
25.01.2015, 18:39
Так как эту проблему решает использование строк?

Часто предпочтительно сформировать определённую строку (сообщение), содержащую какие-то данные, числовые или логические (true/false), преобразованные в тот или иной текстовый вид. Это можно сделать?

А какова минимальная временная дискретность данных на тренде? Часто требуется хотя-бы порядка десятой доли секунды, например для построения графиков переходных процессов при ПИД- или позиционном регулировании. В моём случае, это вакуумное напыление тонких плёнок, инерционность нагревателя очень мала (по сравнению с печкой), и скорость напыления должна устанавливаться по возможности быстро...

SCADAMaster
25.01.2015, 19:16
Часто предпочтительно сформировать определённую строку (сообщение), содержащую какие-то данные, числовые или логические (true/false), преобразованные в тот или иной текстовый вид. Это можно сделать?

Можно.



А какова минимальная временная дискретность данных на тренде? Часто требуется хотя-бы порядка десятой доли секунды, например для построения графиков переходных процессов при ПИД- или позиционном регулировании. В моём случае, это вакуумное напыление тонких плёнок, инерционность нагревателя очень мала (по сравнению с печкой), и скорость напыления должна устанавливаться по возможности быстро...
Тренд лишь отрисовывает данные которые находятся в архиве. Поэтому дискретность будет зависеть от скорости опроса приборов. Если использовать передачу данных по OPC HDA, то можно добиться получания архивных записей вплоть до миллисекунд.

energvk
26.01.2015, 12:06
Добрый день! Хочу создать событие, которое активируется, если в системе определенный оператор (для блокировки определенных кнопок и значений). Из ФБ "Служебная информация" можно как то вытащить? Или оно только для отображения?

SCADAMaster
26.01.2015, 12:59
Можно, выход "Имя оператора" для этого и предназначен.

energvk
26.01.2015, 13:08
то есть достаточно в событии прописать Имя_оператора (Оператор1)?

Выдает ошибку синтаксиса

SCADAMaster
26.01.2015, 13:44
В событии и расчете использовать строки нельзя. Используйте ФБ "Сравнение строк" (закладка "Вычисления").

ivandragon
26.01.2015, 14:01
Доброго времени суток. Помогите решить такую задачу.
Имеется емкость, на ней установлено 4(20%, 50%, 70%, 100%) бесконтактных датчика уровня с них выходит дискретный сигнал. Располагаются они относительно друг друга на расстоянии и реагируют замыкаясь на проходящею рядом с ними металлическую болванку. Происходит следующее: при заполнении емкости отрабатывает нижний аварийный уровень, болванка поднимается, тем самым отключая нижний датчик, но еще не включает нижний уровень, заполняя далее включается датчик нижнего уровня, но нижний аварийный уровень остается отключенным и т.д.
С этим разобрался, спасибо! Ну вот еще вопросик. Как вывести на мнемосхему время за которое уровень опустится с, допустим, 50% до 20%?

energvk
26.01.2015, 14:03
В событии и расчете использовать строки нельзя. Используйте ФБ "Сравнение строк" (закладка "Вычисления").

Спасибо, уже разобрался.

_Pavel_
26.01.2015, 14:05
Подскажите, пожалуйста, не нашёл в справке:
1. Можно ли динамизировать положения окна?
2. Можно ли создать самозакрывающееся через определённый таймаут сообщение? (через стандартный канал сообщений)

ivandragon
26.01.2015, 14:09
Да, чуть не забыл, можно или нет транслировать изображение с камеры ноутбука в скаду?

energvk
26.01.2015, 14:20
Ещё вопрос. Можно ли стандартными средствами выполнить следующее. Устанавливаю команду в значение 1, после того как OPC сервер выполнил отправку на плк, сбросить команду в 0 и опять же отправить её в плк?

SCADAMaster
26.01.2015, 14:31
Да, чуть не забыл, можно или нет транслировать изображение с камеры ноутбука в скаду?
Если написать свой ВФБ, который будет обрабатывать изображение:
http://yandex.ru/yandsearch?text=C%23%20и%20Web%20камера&clid=1955453&lr=213&csg=172%2C1685%2C15%2C10%2C0%2C0%2C0
http://easylab.net.ua/net-c-windows-forms/c-programma-dlya-zapisi-s-vebkameryi

SCADAMaster
26.01.2015, 14:33
Ещё вопрос. Можно ли стандартными средствами выполнить следующее. Устанавливаю команду в значение 1, после того как OPC сервер выполнил отправку на плк, сбросить команду в 0 и опять же отправить её в плк?
Поясните - нужно отследить обратную связь от контроллера? Дождаться когда тег установиться в 1?

energvk
26.01.2015, 14:45
Поясните - нужно отследить обратную связь от контроллера? Дождаться когда тег установиться в 1?

Да, и сбросить его затем в ноль

SCADAMaster
26.01.2015, 15:08
Пример в приложении.

SCADAMaster
26.01.2015, 15:14
Подскажите, пожалуйста, не нашёл в справке:
1. Можно ли динамизировать положения окна?

Нет, положение окна не динамизируется.



2. Можно ли создать самозакрывающееся через определённый таймаут сообщение? (через стандартный канал сообщений)
Пока что нельзя.
Мы добавим вход управления состоянием в ФБ "Состояние окна сообщений".

energvk
26.01.2015, 15:21
Спасибо большое

Сергей Мих
26.01.2015, 19:02
День добрый, существует ли возможность сохранять отчёты в облачных дисках (яндекс, гугл, майл).
Пробовался с ФБ . сохранить документ по пути http://yadisk...., выдаёт ошибку о не правильном пути.

SCADAMaster
26.01.2015, 19:30
Может быть просто установить утилиту для синхронизации - сохраняете отчет в локальную папку, а он загружается в облако?

SokolovS
27.01.2015, 12:01
В MasterSCADA в скрипте у меня используется полностью идентичный код в разных местах проекта и в разных проектах. Также более-менее универсальная его часть используется в другом скрипте.
Подскажите пожалуйста, есть ли возможность, стандартная или не документированная, сделать так, чтобы этот код хранился в одном месте? По максимуму хотелось бы хранить только одну копию кода на все проекты и скрипты, но заинтересует и решение в рамках каждого проекта

приборист
27.01.2015, 14:06
Добрый день!
Подскажите как можно отследить статус переменной OPC из Мастерскады?
Я думал использовать динамические свойства OPC переменных, но не получается никак привязаться к значению Признак качества, и такой способ отбирает один канал OPC. Может есть простое решение?

Значения изменяются редко, при плохих значениях стандартно выскакивает сообщение (его убрал, т.к. 100 сообщений по всех параметрам не нужны)
Хочется чтобы просто загоралась лампочка\надпись нет связи.

SCADAMaster
27.01.2015, 14:17
Подскажите как можно отследить статус переменной OPC из Мастерскады?
Я думал использовать динамические свойства OPC переменных, но не получается никак привязаться к значению Признак качества, и такой способ отбирает один канал OPC. Может есть простое решение?

Можно использовать модуль "Расчет" и "Событие" - у них есть функция OPCQuality( ). Также можно использовать ФБ "Вывод признаков качества" (закладка "Обработка сигналов" палитры ФБ).

приборист
27.01.2015, 15:01
Можно использовать модуль "Расчет" и "Событие" - у них есть функция OPCQuality( ). Также можно использовать ФБ "Вывод признаков качества" (закладка "Обработка сигналов" палитры ФБ).

Спасибо, все намного проще))

SCADAMaster
27.01.2015, 16:04
В MasterSCADA в скрипте у меня используется полностью идентичный код в разных местах проекта и в разных проектах. Также более-менее универсальная его часть используется в другом скрипте.
Подскажите пожалуйста, есть ли возможность, стандартная или не документированная, сделать так, чтобы этот код хранился в одном месте? По максимуму хотелось бы хранить только одну копию кода на все проекты и скрипты, но заинтересует и решение в рамках каждого проекта
Можно вызывать метод из одного скрипта. Код такой:
var Скрипт = (ScriptFB)HostFB.TreeItemHlp.Project.Item("Объект.Объект 1.Скрипт").FBObject; //получаем ссылку на первый скрипт
dynamic obj = Скрипт.ScriptObject;
obj.MyMethod(); //Этот метод должен быть определен в первом скрипте

Можно также написать в Visual Studio dll библиотеку, скомпилировать и подключать ее в нужные скрипты.

SokolovS
27.01.2015, 16:28
Можно вызывать метод из одного скрипта. Код такой:
var Скрипт = (ScriptFB)HostFB.TreeItemHlp.Project.Item("Объект.Объект 1.Скрипт").FBObject; //получаем ссылку на первый скрипт
dynamic obj = Скрипт.ScriptObject;
obj.MyMethod(); //Этот метод должен быть определен в первом скрипте
О, вот это интересная тема
Я правильно понимаю, передавать-возвращать переменные можно как обычно?
Самое важное: в каком пространстве имён будет выполняться метод? В смысле, будет ли он иметь доступ к переменным из вызывающего скрипта? К переменным собственного скрипта?
И, возможно, вы сможете сказать. Можно ли с помощью метода вернуть объект, класс которого описан в вызываемом скрипте?

SCADAMaster
27.01.2015, 17:58
Самое важное: в каком пространстве имён будет выполняться метод? В смысле, будет ли он иметь доступ к переменным из вызывающего скрипта? К переменным собственного скрипта?

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



И, возможно, вы сможете сказать. Можно ли с помощью метода вернуть объект, класс которого описан в вызываемом скрипте?
Нет, обращаться можно только через dynamic (то есть методы/поля будут определятся в режиме исполнения). Для статической типизации надо делать dll

SokolovS
28.01.2015, 08:11
Доступа к переменным вызывающего скрипта метод иметь не будет - только к собственным.
Вы можете вынести в этот метод основные вычисления, а привязку ко входам, выходам и т.п. осуществлять в вызывающем скрипте.


Нет, обращаться можно только через dynamic (то есть методы/поля будут определятся в режиме исполнения). Для статической типизации надо делать dll
Спасибо большое, буду пробовать

mkv
29.01.2015, 15:47
Добрый вечер. Обновили ключевую скаду до сетевой версии. В дистрибутиве имеется Демо Интернет-клиент. Установил и его. При запросе запуска Интернет клиента с другого компьютера (вводе IP адреса), открывается только первое окно Интернет-клиента, в которое вводится пароль оператора. При вводе пароля ничего не открывается и не выдаётся ни какой ошибки. Скажите, это потому, что ДЕМО версия или я что-то не настроил в самой скаде? Можно ли через Демо версию проверить работоспособность Скады с клиентом? Спасибо.

SCADAMaster
29.01.2015, 16:17
К ключевой версии нельзя ставить Demo интернет-клиент.
Поставьте Demo версию скады с этого диска и оттуда же интернет-клиент.

_Pavel_
30.01.2015, 10:57
Подскажите, пожалуйста. Столкнулся со странной проблемой:
Скада в режиме исполнения, идёт интенсивный обмен данными с контроллером (ОВЕН ПЛК-110 new) через MASTER-OPC Server. Контроллер TCP-мастер (объявлен в конфигурации) - OPC-сервер соответственно TCP-slave. Имитирую разрыв связи методом отключения кабеля ethernet от контроллера, затем через некоторое время подключаю обратно (интенсивный обмен за это время заканчивается). Соединение восстанавливается, данные текущие приходят корректно, однако через несколько секунд по некоторым тегам (которые активно менялись) несколько раз приходят ложные данные, затем всё становится нормально ( у меня картинка с динамизацией положения "левый" начинает прыгать, в визуализации CDS эта же картинка, привязанная к этой же переменной в этот момент не прыгает). В логе обмена OPC-сервера действительно присутствуют эти ложные значения как принятые, однако я параллельно открываю CDS смотрю переменные конфигурации в режиме online и не вижу изменений на борту контроллера. Такое ощущение, что приходят значения, которые принимал тэг во время разрыва... Подскажите, пожалуйста с чем это может быть связано?

mkv
30.01.2015, 11:00
Добрый день. У операторов на компьютере блокированы все программы, установленные в системе Windows. Работает только СКАДА. Скажите, можно ли из под скады запустить нужную мне программу в Windows? (сделать в скаде кнопку через которую указать путь к файлу запуска нужной мне программы в Windows?). Спасибо.

SCADAMaster
30.01.2015, 11:26
Добрый день. У операторов на компьютере блокированы все программы, установленные в системе Windows. Работает только СКАДА. Скажите, можно ли из под скады запустить нужную мне программу в Windows? (сделать в скаде кнопку через которую указать путь к файлу запуска нужной мне программы в Windows?). Спасибо.
Можно. Для этого есть ФБ "Запуск процесса" (закладка "Служебные" палитры ФБ).

SCADAMaster
30.01.2015, 11:28
Подскажите, пожалуйста. Столкнулся со странной проблемой:
Скада в режиме исполнения, идёт интенсивный обмен данными с контроллером (ОВЕН ПЛК-110 new) через MASTER-OPC Server. Контроллер TCP-мастер (объявлен в конфигурации) - OPC-сервер соответственно TCP-slave. Имитирую разрыв связи методом отключения кабеля ethernet от контроллера, затем через некоторое время подключаю обратно (интенсивный обмен за это время заканчивается). Соединение восстанавливается, данные текущие приходят корректно, однако через несколько секунд по некоторым тегам (которые активно менялись) несколько раз приходят ложные данные, затем всё становится нормально ( у меня картинка с динамизацией положения "левый" начинает прыгать, в визуализации CDS эта же картинка, привязанная к этой же переменной в этот момент не прыгает). В логе обмена OPC-сервера действительно присутствуют эти ложные значения как принятые, однако я параллельно открываю CDS смотрю переменные конфигурации в режиме online и не вижу изменений на борту контроллера. Такое ощущение, что приходят значения, которые принимал тэг во время разрыва... Подскажите, пожалуйста с чем это может быть связано?
Вряд ли проблема на стороне ОРС, если бы в буфер поступили данные то они бы сразу выдались. Скорее на стороне ПЛК данные застревают в буфере.
Почему вы используете ОРС режиме Slave? Если использовать его в режиме мастера, то подобных ситуаций можно избежать - можно включить отслеживание Tranasction ID, включить реинициализию узла, а в крайнем случае закрывать порт в каждом цикле.

_Pavel_
30.01.2015, 12:03
Почему вы используете ОРС режиме Slave?

Для организации событийного обмена. Тэги (входные для контроллера), которые скада передаёт в контроллер (управление) - в сервере в режиме мастер (передаются по изменению + пойлинг раз в 2 сек. для контроля связи), а контроллер сообщает в скаду соответственно своим мастером (он работает в режиме "both" по изменению + пойлинг раз в секунду для контроля связи).

SCADAMaster
30.01.2015, 13:04
Тогда выясняйте в техподдержке ОВЕН - возможно у них есть возможно закрывать порт, как у нас в ОРС.

Vitorgan
31.01.2015, 01:13
Доброй ночи, подскажите пожалуйста, создаю собственное окно выбора оператора, данное окно управления делаю стартовым, в него хочу поместить информацию о текущей дате, времени, список строк с ФИО операторов, возможно фото операторов. Вопрос в следующем, каким образом можно сделать так, чтобы после подтверждения выбора оператора, когда уже открывается мнемосхема, данные о выборе сохранились в файл, например в любой текстовый документ. который я в любой момент могу открыть и просмотреть информацию о том в какой день какой оператор работал, сколько по времени и т.д.

SCADAMaster
31.01.2015, 09:39
Можно использовать ФБ "Сохранение в файле" закладка "Работа с архивом".
Но лучше сделать при помощи ФБ "Скрипт C#" - с его помощью также можно записать данные в файл, используя функции .Net.

Vitorgan
31.01.2015, 13:49
Спасибо, а есть пример записи в файл при помощи данного ФБ, кроме сохранения и загрузки набора команд?

SCADAMaster
31.01.2015, 14:23
Нет, других примеров у нас нет.
Поищите в интернете.

_Pavel_
31.01.2015, 15:18
Для вывода на мнемосхему видео потока (RTSP) с сетевой камеры видеонаблюдения использую ActiveX плагин VLC ActiveX Plugin and IE Web Plugin v1. Есть 2 проблемы:
1. В присутствии этого плагина при остановке режима исполнения иногда возникает Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: MasterSCADA.exe
Версия приложения: 3.6.1.48806
Отметка времени приложения: 54cc461c
Имя модуля с ошибкой: StackHash_ab02
Версия модуля с ошибкой: 6.1.7601.18247
Отметка времени модуля с ошибкой: 521ea91c
Код исключения: c0000374
Смещение исключения: 000c3873
Версия ОС: 6.1.7601.2.1.0.256.1
Код языка: 1049
Дополнительные сведения 1: ab02
Дополнительные сведения 2: ab021bab8cecb79d04f284b15ec93868
Дополнительные сведения 3: 1b2b
Дополнительные сведения 4: 1b2b1d0bf1bae5f04719e1f9e8269614

2. На другом компьютере пропали свойства плагина. Не могу подсунуть URL, остались только стандартные свойсва: положение, отображение и т.д. При нажатии кнопки свойства из контекстного меню ничего не происходит. Подскажите, пожалуйста, почему?

Vitorgan
31.01.2015, 16:39
Никак ни могу понять, есть знаки разделители, например ";", они описаны в коде, а вот символы типа доллара ($) или амперсанд (&) появляются при открытии любого текстового редактора... Каким образом от них можно избавиться?

SCADAMaster
31.01.2015, 17:06
Для вывода на мнемосхему видео потока (RTSP) с сетевой камеры видеонаблюдения использую ActiveX плагин VLC ActiveX Plugin and IE Web Plugin v1. Есть 2 проблемы:
1. В присутствии этого плагина при остановке режима исполнения иногда возникает
2. На другом компьютере пропали свойства плагина. Не могу подсунуть URL, остались только стандартные свойсва: положение, отображение и т.д. При нажатии кнопки свойства из контекстного меню ничего не происходит. Подскажите, пожалуйста, почему?
Трудно сказать. Приложите отчет об ошибках, инсталлятор плагина.

SCADAMaster
31.01.2015, 17:07
Никак ни могу понять, есть знаки разделители, например ";", они описаны в коде, а вот символы типа доллара ($) или амперсанд (&) появляются при открытии любого текстового редактора... Каким образом от них можно избавиться?
Про какой редактор идет речь. Опишите вашу проблему подробнее - со скриншотами.

Vitorgan
31.01.2015, 17:46
в c# не разбираюсь, пытаюсь изменить код вашего скрипта - "сохранение и загрузка набора команд", удалил все что связано с загрузкой из кода(т.к. мне требуется только сохранять в файл). При сохранении в код подставил текущую дату и время (var CurrentTime = DateTime.Now;) он отображает дату и время в столбце после значения, так как мне и надо.

Вот про эти символы я говорю:
16490

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

SCADAMaster
31.01.2015, 18:51
В исходном скрипте есть такие команды:
var commandPath = HostFB.TreeItemHlp.Project.GetRelativeName(HostFB. TreeItemHlp.Parent, item, false); //относительное имя команды
var commandName=HostFB.TreeItemHlp.Project.GetRelative Name(HostFB.TreeItemHlp.Parent, command, true).Replace(";", "_");
Именно эти команды и имеют в строковом представлении указанные вами символы. Зачем вы вообще их пишете?
Может вам просто у скрипта сделать набор входов, на них подать сигналы и сохранять в файл значения с этих входов?


И никак не могу разобраться, как сделать чтобы новый заход любого из операторов добавлял строку в тот же файл, а не перезаписывал его
Нужно в этой строчке, вместо false поставить true:
using(var file = new StreamWriter(FilePathName, false, Encoding.GetEncoding("windows-1251")))
Подробнее здесь:
https://msdn.microsoft.com/ru-ru/library/f5f5x7kt(v=vs.110).aspx

Vitorgan
31.01.2015, 19:05
Именно эти команды и имеют в строковом представлении указанные вами символы. Зачем вы вообще их пишете?

Да я в принципе так и хочу, просто незнание языка заставляет не создавать собственный код, а пытаться разобраться уже в существующем)))

Vitorgan
31.01.2015, 19:52
Как сделать в скрипте набор входов? надо ли объявлять их тип в самом коде? если на панели справа мы уже это сделали, объявляются они так как в обычном c# коде?, но в вашем примере я не увидел чтобы вообще объявлялись переменные. Короче засел я с этим ФБ)

SCADAMaster
31.01.2015, 20:05
Входы добавляются в правой части скрипта - через контекстное меню. Там же указывается и их тип.
После добавления их можно использовать в коде.

tokarevdn
02.02.2015, 07:41
каким образом можно реализовать такую ситуацию: есть бак и два насоса. один накачивает в него другой выкачивает. при достижении аварийного нижнего значения в баке необходимо отключить откачивающий насос а при достижении аварийного верхнего - накачивающий. заранее спасибо

SCADAMaster
02.02.2015, 08:57
Это нужно сделать на MasterSCADA или каким то прибором?
Если прибором - то вам нужно задать вопрос в разделе "Подбор оборудования".

tokarevdn
02.02.2015, 09:08
в самой скаде

SCADAMaster
02.02.2015, 10:25
А промежутках между нижним аварийным и верхним аварийным как идет управление насосами?
Вы можете воспользоваться модулем "Событие", у него есть закладка "Действия" - с ее помощью можно присваивать значения. Например отключать команды управляющие насосами

Boris_K
02.02.2015, 13:00
в самой скаде

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

_Pavel_
02.02.2015, 13:05
По поводу ActiveX плагина VLC:
скачивается здесь (http://get.videolan.org/vlc/2.1.5/win32/vlc-2.1.5-win32.exe)
Добавляем в систему:
16527

Добавляем на мнемосхему и видим группу опций "прочее":
16528

Подскажите, пожалуйста, почему эта группа опций "прочее" может пропасть на другом компьютере?

SCADAMaster
02.02.2015, 13:17
Мы проверили - у нас установилось корректно, в свойства есть.
Попробуйте переустановить плагин

_Pavel_
02.02.2015, 13:31
Уже пробовал... не помогло, видимо какие-то настройки в ОС, ладно, спасибо, буду разбираться...

_Pavel_
03.02.2015, 09:02
Тогда выясняйте в техподдержке ОВЕН - возможно у них есть возможно закрывать порт, как у нас в ОРС.

http://www.owen.ru/forum/showthread.php?t=14520&p=160889&viewfull=1#post160889

Такое ощущение, что приходят значения, которые принимал тэг во время разрыва... Подскажите, пожалуйста с чем это может быть связано? - Если TCP-slave не игнорирует значения из предыдущей сессии - такое поведение возможно, я думаю. Но почему slave не игнорирует данные? Свяжитесь с разработчиком OPC

Значения из предыдущей сессии - такое возможно?

SCADAMaster
03.02.2015, 10:02
Приложите лог обмена. Для этого в свойствах сервера включите запись журнала и всех его событий, размер лога задайте равным 10000. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
c:\Documents and Settings\All Users\Application Data\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Лог заархивируйте и вышлите нам.

nenaika
03.02.2015, 13:12
Добрый день! Начал разбираться с MasterScada. Сделал небольшой проект на версии RT32 для получения и обработки оперативной информации. Сейчас необходимо разработать более серьезный проект. В наличии есть OPC DA сервер, по средствам которого я опрашиваю приборы учета (сервер идет вместе с прибором). В сервере реализована возможность обратиться к архивным данным прибора – введены соответствующие переменные (тип архива (часовой, суточный, месячный), параметр, время и т.д.), с помощью которых формируется запрос на чтение архивных данных. Соответственно на выходе получаю значение параметра, метку времени и признак качества. Т.е. можно написать С#-скрипт для получения данных за время работы прибора. Чем сейчас и занимаюсь. Встал вопрос – как в С#-скрипте сформировать переменные мастерскады и их архивы и соответственно записывать в них данные, что бы была возможность работать с ним дальше средствами Мастерскады. Т.е. объединить 3 значения, полученные от ОРС сервера, в одну переменную скады.

SCADAMaster
03.02.2015, 13:59
Для этого нужно выполнить следующую команду:
SetValue("Выход", ВашеЗначение,ПризнакКачества, МеткаВремени);

Как мы понимаем вы будете получать значение, признак качества и метку времени от входа скрипта. Это делается так:
(int)GetValue("Вход").OpcQuality; - признак качества
GetValue("Вход").Value; - Значение
GetValue("Вход").Time; - метка времени.

nenaika
03.02.2015, 15:27
Спасибо за ответ.
Но немного не так. Соответственно 3 входа скрипта (значение, время, качество), так как 3 ОРС переменные. Поэтому получается у меня SetValue("Выход", значение_Вход1, значение_Вход2, значение_Вход3). Попробовал реализовать (SetValue("ВыходЗначения",GetValue("Значение_Вход").Value,GetValue("Признак").Value,GetValue("Время").Value);), но компилятор выдал «Ни одна из перегрузок метода "SetValue" не принимает "4" аргументов».

SCADAMaster
03.02.2015, 15:43
Пример в приложении.

SCADAMaster
03.02.2015, 16:00
Такое ощущение, что приходят значения, которые принимал тэг во время разрыва...
Как тег может принимать значения во время разрыва?
И как сервер может понять что пришел запрос с предыдущей сессии?

Вообще по нормальному здесь должно быть Transaction ID. Его использование (постоянное увеличение) позволяет избежать получения ложных запросов. У нас в ОРС сервере он контролируется и генерируется (как в режиме Master так и в режиме Slave).

nenaika
03.02.2015, 16:15
Большое спасибо!
Я посмотрел реализацию метода SetValue в хэлпе по объектной модели.

_Pavel_
03.02.2015, 17:00
Как тег может принимать значения во время разрыва?
.

Имелось ввиду переменная в контроллере, соответствующая этому тэгу, она непрерывно менялась во время разрыва. Я постараюсь снять на видео данный эффект...

SCADAMaster
03.02.2015, 18:41
Самое главное нужен лог.

_Pavel_
03.02.2015, 21:02
Лог во вложении. Ложные значения зафиксированы в 20:52:15...18. Тэг с адресом 6 формата UINT32.

_Pavel_
03.02.2015, 21:23
... ещё на всякий случай. Зафиксировал конкретные значения:
Время примерно 21:21:55, нормальное значение тэга - 1078, ложное значение - 9365.

SCADAMaster
03.02.2015, 22:09
Лог во вложении. Ложные значения зафиксированы в 20:52:15...18. Тэг с адресом 6 формата UINT32.
В указанное время запросов по адресу 6 нет. Есть чуть раньше:
[03.02.2015 20:52:14.482] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 2B 1F 00 00
[03.02.2015 20:52:14.482] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
[03.02.2015 20:52:14.494] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 29 7D 00 00
[03.02.2015 20:52:14.494] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
[03.02.2015 20:52:14.506] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 27 DB 00 00
[03.02.2015 20:52:14.506] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
[03.02.2015 20:52:14.518] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 26 39 00 00
[03.02.2015 20:52:14.518] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
[03.02.2015 20:52:14.530] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 25 69 00 00
[03.02.2015 20:52:14.530] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
[03.02.2015 20:52:14.542] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 23 C7 00 00
[03.02.2015 20:52:14.542] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
Как вы сами можете видеть контроллер шлет за короткое время набор разных значений.


... ещё на всякий случай. Зафиксировал конкретные значения:
Время примерно 21:21:55, нормальное значение тэга - 1078, ложное значение - 9365.
Лог за указанное вами время отсутствует.

_Pavel_
03.02.2015, 23:58
В указанное время запросов по адресу 6 нет. Есть чуть раньше:
Лог за указанное вами время отсутствует.

Что-то не так с временами, я записывал время по часам на мнемосхеме скады... завтра попробую ещё раз

_Pavel_
04.02.2015, 20:42
Во вложении скриншот ситуации, которая меня беспокоит. Это происходит после физического разрыва соединения. Стрелками отмечены связанные тэги. Реальное значение = 1077 не меняется в контроллере, а в сервере вижу ложные значения. Судя по логу сервер эти ложные значения честно получает. Чрез несколько секунд значение в сервере восстановится. Кто же всё-таки виноват- контроллер, который почему-то генерит неправильное сообщение, или сервер, который не должен это сообщение принимать?

SCADAMaster
04.02.2015, 22:05
Посмотрите на скриншот 1B 9B это 7067. Почему сервер не должен принять это значение? Как он должен определить что оно не достоверное?

_Pavel_
04.02.2015, 22:28
Да, да, я специально поймал этот момент, чтобы было видно транзакцию. Вижу, что значение приходит для сервера вроде бы достоверное. Пойду спрошу у Владислава... эх, опять сниффер заставит запускать... :)

SokolovS
05.02.2015, 16:38
В MasterOPC time.TimeNow() возвращает время с секундной точностью, однако во всех логах оно отдаётся с точностью до тысячной доли секунды, а среди функций работы со временем есть функции, работающие с точностью до милисекунды. Как получить текущее время с такой точностью?

SCADAMaster
05.02.2015, 16:50
Добавить миллисекунды можно помощью функции time.TimeToTimeStamp( ). Описание функции вы можете посмотреть в справке.
Или вам нужно получить точное время с миллисекундной точностью?

Vitorgan
05.02.2015, 21:38
Уже 3 день пытаюсь что то сотворить с данным скриптом, мое достижение это то, что компилирует без ошибок), но ни нового файла не создает на диске C, ничего вообще:(, прошу помощи, что я делаю не так?:confused:


using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using System.Windows.Forms;
using MasterSCADALib;
using System.IO;
using MasterSCADA.Documents;
using System.Collections.Generic;
using System.Text;
using InSAT.Library;

public partial class ФБ : ScriptBase
{
Edge read = new Edge();
Edge write = new Edge();
public override void Execute()
{
if (Сохранение!=null)
{
StreamWriter csv = new StreamWriter("C:\test.csv", true, System.Text.Encoding.GetEncoding(1251));
//открытие файла для записи
{
var Fio = ФИО;
var smena = смена;
var now = DateTime.Now;
csv.WriteLine("{0};{1};{2}", Fio, smena, now); //записываем в файл
}
}
}
}

SCADAMaster
05.02.2015, 21:49
Попробуйте для начала сохранять не на диск C, а куда нибудь в другое место (например в папку на диске D). Чтобы писать файл в корень диска нужны права администратора, а по умолчанию MasterSCADA запускается без них

Vitorgan
05.02.2015, 22:07
Попробуйте для начала сохранять не на диск C, а куда нибудь в другое место (например в папку на диске D). Чтобы писать файл в корень диска нужны права администратора, а по умолчанию MasterSCADA запускается без них

Ура он создал файл, только в нем ничего не прописал)))) вроде радость что создал файл сам, и тут же расстройство

SCADAMaster
05.02.2015, 22:13
Приложите проект.

Vitorgan
05.02.2015, 22:18
16598
вот, пробую, при переходе в режим исполнения создает файл, в дереве объектов даю значения, и переключаю "Сохранить" в "вкл", ноль эмоций

SokolovS
06.02.2015, 07:56
Добавить миллисекунды можно помощью функции time.TimeToTimeStamp( ). Описание функции вы можете посмотреть в справке.
Или вам нужно получить точное время с миллисекундной точностью?
Конечно, с милисекундной точностью

SCADAMaster
06.02.2015, 08:18
16598
вот, пробую, при переходе в режим исполнения создает файл, в дереве объектов даю значения, и переключаю "Сохранить" в "вкл", ноль эмоций
В приложении исправленный пример.

Vitorgan
06.02.2015, 13:36
В приложении исправленный пример.

Спасибо Вам большое, SCADAMaster, все работает, а не подскажите что было не так, как я понял вы добавили еще одну переменную логическую переменную bool? M=false;

_Pavel_
06.02.2015, 13:59
Подскажите, пожалуйста, по журналу:
Создал событие, которое генерит сообщение: Категория: информация, приоритет: обычный. Каналы: строка статуса, журнал.
В режиме исполнения открываю основной журнал - вижу появляющиеся сообщения. Закрываю журнал, затем вновь открываю - вижу только одно последнее сообщение. Куда пропали остальные?

SokolovS
06.02.2015, 14:01
Пробовали снизу период выставить больше?

_Pavel_
06.02.2015, 14:19
угу, по умолчанию период 4 часа и автопрокрутка, пробовал ставить "все сообщения"

SokolovS
06.02.2015, 14:25
Флаг в фильтре стоит "только активные" или "только неквитированные"?

_Pavel_
06.02.2015, 14:38
Ни тот ни другой, "только компьютер объекта", причём если эту галку снять, сообщения тут же пропадают и после обратной установки не появляются

SCADAMaster
06.02.2015, 15:18
Спасибо Вам большое, SCADAMaster, все работает, а не подскажите что было не так, как я понял вы добавили еще одну переменную логическую переменную bool? M=false;
У вас неправильно была написана строка:
using(var file = new StreamWriter(@"C:\test.csv", true, Encoding.GetEncoding("windows-1251")))
Также нужно иметь ввиду, что данная команда не создает папки. То есть если папка куда происзводится сохранение не существует нужно ее создать.
В примере "Сохранение и загрузка набора команд это есть":
Directory.CreateDirectory(HostFB.TreeItemHlp.Folde rPath)

Переменная M нужна для создания триггера переднего фронта. То есть сохранение будет производится только когда на входе сигнал из False перейдет в True.

SCADAMaster
06.02.2015, 15:18
Каналы: строка статуса, журнал.

Нужен еще канал "Архив".

SokolovS
06.02.2015, 15:40
В MasterOPC time.TimeNow() возвращает время с секундной точностью, однако во всех логах оно отдаётся с точностью до тысячной доли секунды, а среди функций работы со временем есть функции, работающие с точностью до милисекунды. Как получить текущее время с такой точностью?

Конечно, с милисекундной точностью
Всё же, на мой вопрос есть ответ?

SCADAMaster
06.02.2015, 15:43
Такой функции нет.
Для какой задачи вам это требуется?

SokolovS
06.02.2015, 16:00
Пытаюсь за приемлемое время приблизительно определить неточность хода часов устройства

SCADAMaster
06.02.2015, 18:06
Пока что как вариант - вы можете производить запись в тег, а затем у тега в скрипте перед записью, читать метку времени тега - она будет с миллисекундами.

Vitorgan
06.02.2015, 18:09
Напомните пожалуйста как отключить окно ввода оператора стандартное, поиск по форуму не дал результатов

SCADAMaster
06.02.2015, 18:20
Для этого вам нужно запустить файл проекта с параметрами /user: /password:
Подробнее вы можете прочитать в справке. Раздел "Работа в режиме исполнения - Запуск проекта из командной строки и по ярлыку".

Vitorgan
06.02.2015, 23:55
Снова прошу помощи, создаю общего оператора, для входа в проект по ярлыку, а каким образом сделать так, чтобы данный оператор мог входить в проект независимо от смен?

SCADAMaster
07.02.2015, 09:26
Назначьте его во все смены, или отключите у данной категории смены совсем.

Boratinka
07.02.2015, 16:09
Возможно я задам глупый вопросы, но как то сам не вижу.
1 - Как нарисовать треугольник с штриховкой чтобы цвет фона можно было менять
2 - Можно ли как то редактировать панели управления к примеру насоса мнемонического или задвижки что идёт в комплекте, родная немного не подходит

Искал поиском, но как то видимо не то набирал в поиске. все 200 страниц ветки не осилил. Заранее спасибо, и извините за глупый вопрос.

SCADAMaster
08.02.2015, 09:45
1 - Как нарисовать треугольник с штриховкой чтобы цвет фона можно было менять

Контрола "Треугольник" у нас нет. Можно нарисовать треугольник при помощи контрола "Линия" - включив у него в свойствах "Замкнутая линия".
После этого можно включить закрашивание полученного контрола. Управление цветом производится через входы динамизации.



2 - Можно ли как то редактировать панели управления к примеру насоса мнемонического или задвижки что идёт в комплекте, родная немного не подходит

Нет, стандартные окна контрол не редактируемые.

Vitorgan
09.02.2015, 00:43
Доброй ночи, подскажите пожалуйста, есть 2 переменных, изменяются от 0 до 99, их требуется отправить в OPC сервер (int16, на каждую переменную 1 байт). НО перед отправкой я обязательно должен первую переменную разложить на биты, сдвинуть их на 8 битов влево, и прибавить ко всему этому вторую переменную, тем самым получив инт16. Такое действо только в скрипте можно сотворить? и как сделать так чтобы скрипт работал не от значения какой-либо переменной(ложь, истина) а постоянно- в онлайн режиме заменил какую либо из двух имеющихся переменных, сразу посчиталось общее число. Заранее благодарю

SCADAMaster
09.02.2015, 08:09
В скрипте это сделать можно - для этого есть функции по работе с битами.
В зависимости от того что вам требуется используйте исполнение скрипта после чтения или перед записью. Видеопримеры работы со скриптами есть на странице сервера.

_Pavel_
09.02.2015, 09:10
При вхождение в режим исполнения с уровнем доступа "оператор" постоянно появляется окно "подтверждение действия". Подскажиите, пожалуйста, где его отключить?

SCADAMaster
09.02.2015, 09:44
Система - Операторы - Права доступа. Снимите галочку "Подтверждение" у нужного действия. В частности - "Включить режим исполнения".

Andrei1401
09.02.2015, 11:12
У меня такой вопрос. Можно ли при создании сетевого проекта использовать сетевую версию Master SCADA и Demo версию?

SCADAMaster
09.02.2015, 11:42
Нет, так сделать нельзя. Либо две Demo, либо две ключевых.

Vitorgan
09.02.2015, 23:39
В скрипте это сделать можно - для этого есть функции по работе с битами.
В зависимости от того что вам требуется используйте исполнение скрипта после чтения или перед записью. Видеопримеры работы со скриптами есть на странице сервера.

То ли мы не правильно друг друга поняли, то ли я чего то не понимаю? Вы говорите про OPC сервер(про скрипт в теге)?, а я имел ввиду что мне надо все это сделать в MasterScadе

SCADAMaster
10.02.2015, 08:06
В MasterSCADA тоже можно, например через ФБ "Скрипт C#".

_Pavel_
10.02.2015, 11:38
Подскажите, пожалуйста: в справке указано:


Поддерживаются следующие операционные системы: Windows XP SP3 и более поздние, Windows 2003 Server SP2 и более поздние, Windows 7 и более поздние.
Поддерживаются как 32-битные так и 64-битные системы.

А что насчёт windows 8 / 8.1 ? Семёрку становится сложнее и дороже приобретать...

Vitorgan
10.02.2015, 11:49
То ли мы не правильно друг друга поняли, то ли я чего то не понимаю? Вы говорите про OPC сервер(про скрипт в теге)?, а я имел ввиду что мне надо все это сделать в MasterScadе

А как в этом скрипте сделать, чтобы он постоянно выполнял действия с битами и складывал(не по состоянию какой либо переменной)?

Boris_K
10.02.2015, 13:17
Можно ли средствами MasterLink связываться с ПЛК по modbus TCP? В исходных настройках такого нет, нельзя ли как-то добавить?

SCADAMaster
10.02.2015, 13:19
А что насчёт windows 8 / 8.1 ? Семёрку становится сложнее и дороже приобретать...
Поддерживается и 8 и Windows 8.1, и Windows 10.
Также как и Windows Server 2012.

SCADAMaster
10.02.2015, 13:21
Можно ли средствами MasterLink связываться с ПЛК по modbus TCP? В исходных настройках такого нет, нельзя ли как-то добавить?
В принципе можно, но мы все же рекомендуем использовать Modbus Universal MasterOPC - он более удобен.
Для работы по Modbus TCP в MasterLink, нужно добавить в MasterLink через контекстное меню виртуальный порт, и в его настройках задать - Modbus TCP. После этого в порт добавляется устройство, задается IP, Modbus ID и т.д, а далее регистры и т.п.

SCADAMaster
10.02.2015, 13:25
А как в этом скрипте сделать, чтобы он постоянно выполнял действия с битами и складывал(не по состоянию какой либо переменной)?
Не совсем понятно что вас интересует - как работать с битами, или как сделать чтобы скрипт выполнялся не по изменению.
По первому вопрос можно найти примеры в интернете:
https://msdn.microsoft.com/ru-ru/library/vstudio/17zwb64t(v=vs.110).aspx
http://professorweb.ru/my/csharp/charp_theory/level3/3_12.php
По второму вопросу - нужно в настройках опроса скрипта включить периодический. Но вообще лучше использовать опрос по изменению - в этом режиме идет меньше нагрузка на процессор.

Boris_K
10.02.2015, 13:45
В принципе можно, но мы все же рекомендуем использовать Modbus Universal MasterOPC - он более удобен. А не будет ли у МастерЛинк каких-либо отличий от OPC в плане надёжности и макс. скорости опроса?

SCADAMaster
10.02.2015, 14:01
В плане надежности и производительности они одинаковы.

Vitorgan
10.02.2015, 14:59
Не совсем понятно что вас интересует - как работать с битами, или как сделать чтобы скрипт выполнялся не по изменению.

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

Vitorgan
10.02.2015, 16:20
Опять проблема... Есть переменная A(вещественный тип), оператор вводит значения от 0 до 9,9, но данную переменную я должен перевести в int, следовательно оператор вводит например 7,6, я получаю из этого 76, сделал это через расчет (A*10), расчет вставил в скрипт, но в скрипте получается что я складываю целый с вещественным(требуется выполнять в скрипте математические действия), поэтому компилятор начинает ругаться. Как быть?

SCADAMaster
10.02.2015, 16:35
Вообще целый и вещественный складывать можно, поэтому компилятор на это ругаться не должен.
Может быть вы результат этой операции пытаетесь присвоить целочисленной переменной? Тогда будет выдаваться ошибка.

Vitorgan
10.02.2015, 16:48
Ну да, но мне и результат целочисленный нужен

Vitorgan
10.02.2015, 17:04
Добавил новую переменную A_x (вещественное), ее умножил на 10 в скрипте, следующей строкой приравнял ее к A(целое), вроде все работает

SCADAMaster
10.02.2015, 17:38
Ну вообще лучше бы привести явно:
int=Convert.ToInt32(b);

Vitorgan
10.02.2015, 18:20
Спасибо, попробую. А Каким образом в расчете или событии в формулу можно прописать длинную сложную логику, типа :

Если пер.А= 1 или 2, и пер.Б=1, то расчет равен 1, иначе 2
Если пер.А= 1 или 2, и пер.Б=0, то расчет равен 0, иначе 2

чтоб расчет один из 3 значений выбирал

cerceli
10.02.2015, 18:32
Здравствуйте.Столкнулся с такой проблемой, прыгает связь по RS485 между плк150 и ПЧ(т.е то 0 то 81)Хотя на обоих устройствах настройки идентичны. скорость 11520,no parity,8bits,2stop b.rs485,rtu. При этом идет ломанное отображение считываемой эталонной скорости в ПЧ.В чем проблема?

SCADAMaster
10.02.2015, 19:07
Если пер.А= 1 или 2, и пер.Б=1, то расчет равен 1, иначе 2

ЕСЛИ ((А=1 ИЛИ А=2) И Б=1, 1, 2)

SCADAMaster
10.02.2015, 19:08
Здравствуйте.Столкнулся с такой проблемой, прыгает связь по RS485 между плк150 и ПЧ(т.е то 0 то 81)Хотя на обоих устройствах настройки идентичны. скорость 11520,no parity,8bits,2stop b.rs485,rtu. При этом идет ломанное отображение считываемой эталонной скорости в ПЧ.В чем проблема?
С этим вопросом вам лучше обратится в раздел "ПЛК" или "Эксплуатация".

Vitorgan
10.02.2015, 19:40
ЕСЛИ ((А=1 ИЛИ А=2) И Б=1, 1, 2)

тогда он выбирает из 2 значений, а надо примерно "ЕСЛИ ((А=1 ИЛИ А=2) И Б=1, 1, 2) а ЕСЛИ ((А=1 ИЛИ А=2) И Б=0, 0, 2)

И в расчете должно быть либо 0, либо 1, либо 2

SCADAMaster
10.02.2015, 19:57
Тогда делайте вложенные ЕСЛИ
ЕСЛИ ((А=1 ИЛИ А=2) и Б=1, 1, ЕСЛИ ((А=1 ИЛИ А=2) И Б=0, 0, 2 ))

Boris_K
11.02.2015, 11:42
Вопросы по MasterLink.

1) Нужно связаться с ПЛК (он Modbus slave) по сетевому кабелю. В MasterLink добавляю виртуальный порт, ставлю протокол Modbus TCP, добавляю устройство Modbus. При этом у него почему-то уже есть 1 тег, называется "отказ", по умолчанию у него адрес 0, его можно поменять, но удалить сам тег почему-то нельзя. Что это? И какой ставить адрес, ведь нулевой адрес будет занят регистрами опрашиваемого ПЛК.

2) Почему нельзя добавить регистры, доступные и на чтение и на запись?

SCADAMaster
11.02.2015, 11:56
Отказ - это статус модуля (есть связь или нет). Не нужно его удалять или менять адрес.
Добавление регистров производится через контекстное меню модуля (вставить регистр чтения, регистр записи и т.д.).
Посмотрите документацию - в ней это описано:
http://www.masterscada.ru/services/support/art_step_by_step/Communicate_With_Low_Level.pdf

Boris_K
11.02.2015, 12:25
Не нужно его удалять или менять адрес.
Добавление регистров производится через контекстное меню модуля (вставить регистр чтения, регистр записи и т.д.).
Посмотрите документацию - в ней это описано:
http://www.masterscada.ru/services/s..._Low_Level.pdf

В документации нет ответов:

1) Нельзя добавить регистры, доступные сразу и на чтение и на запись?
2) Как быть с адресом тега "отказ"? Если я оставлю 0, он не будет влиять на модбас-регистр 0 опрашиваемого ПЛК?

3) В каких лицензиях поддерживается связь по Modbus TCP? Неужели только в MSRT-MasterLink-U? (В документации написано что в Base из Модбасов только Modbus RTU Master)

SCADAMaster
11.02.2015, 12:58
1) Нельзя добавить регистры, доступные сразу и на чтение и на запись?
Нет, так нельзя.



2) Как быть с адресом тега "отказ"? Если я оставлю 0, он не будет влиять на модбас-регистр 0 опрашиваемого ПЛК?

Не будет.



3) В каких лицензиях поддерживается связь по Modbus TCP? Неужели только в MSRT-MasterLink-U? (В документации написано что в Base из Модбасов только Modbus RTU Master)
Он входил в базовую версию, но это уже не играет роли - мы объединили MasterLink в одну опцию:
http://insat.ru/prices/info.php?pid=5572

Boris_K
11.02.2015, 15:11
1) А почему не показывает всю статистику обмена в режиме исполнения? Например, на закладке Опрос у устройства Модбас в полях где мин., макс. и среднее время обмена - нет значений. На закладке Данные у отдельных регистров часто написано только макс. значение, остальные поля либо пустые, либо показывают 0 мс, либо нет и макс. значения. При этом связь нормально работает и признаки недостоверности - "Норма".

2) При старте исполнительного режима открывается окно консоли MasterPLC (хотя сам ПЛК у меня программируется не из MS). Можно ли как-то отключить это окно, чтобы не загромождать панель задач?

Flutter
11.02.2015, 15:19
Вопрос такой:
На что влияют цвета границ на вкладке Система-Шкалы и как ими пользоваться?
То есть допустим у меня есть какой-то графический объект, к свойству заливки которого я привязываю переменную. Можно ли сделать, чтобы цвет этого объекта автоматически менялся в соответствии с границами заданной шкалы этой переменной?

SCADAMaster
11.02.2015, 15:30
1) А почему не показывает всю статистику обмена в режиме исполнения? Например, на закладке Опрос у устройства Модбас в полях где мин., макс. и среднее время обмена - нет значений. На закладке Данные у отдельных регистров часто написано только макс. значение, остальные поля либо пустые, либо показывают 0 мс, либо нет и макс. значения. При этом связь нормально работает и признаки недостоверности - "Норма".

Чтобы увидеть статистику обмена, нужно в настройках MasterLink включить вывод отладочных сообщений "В окне" или "В файл", а затем включить вход "Ресурсы - Диагностика - Формирование расширенного журнала". Если выбран режим запись в файл то данные пишутся в текстовый файл
\MasterSCADA Projects\sys_log\Statistics\Имя_Проекта.



2) При старте исполнительного режима открывается окно консоли MasterPLC (хотя сам ПЛК у меня программируется не из MS). Можно ли как-то отключить это окно, чтобы не загромождать панель задач?
В настройках MasterLink включить вывод сообщений в файл или "не отображать".

SCADAMaster
11.02.2015, 15:31
На что влияют цвета границ на вкладке Система-Шкалы и как ими пользоваться?

При нарушении границ значения окрашиваются в этот цвет, а также этот цвет применяется к шкалам контролов (индикатора, стрелочного прибора).



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

Flutter
11.02.2015, 15:45
Нет, так сделать нельзя.

Жаль, было бы удобно.
А как мне тогда лучше проделать такой фокус?

SCADAMaster
11.02.2015, 15:55
Через вход динамизации. У компонентов есть вход динамизации "Цвет", в него можно перетащить переменную и настроить соответствие цветов (какому значению какой цвет).
Посмотрите данную документацию - в ней это описано:
http://www.insat.ru/services/support/art_step_by_step/master%20scada%20animation.pdf

Boris_K
11.02.2015, 16:50
Если через МастерЛинк нужно и читать, и писать определённый Модбас-регистр, то я просто добавил "регистр запись" и "регистр чтение", которые ссылаются на один и тот же адрес, это нормальный способ?

SCADAMaster
11.02.2015, 18:07
Совершенно верно.
Еще рекомендуется в свойствах устройствах включить способ записи - по изменению (по умолчанию периодическая).

Victor721
12.02.2015, 07:26
Добрый день, возникли вопросы при создании проекта в MS:

1. Как реализовать вывод сообщения и звука при изменении дискретного значения?

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

SCADAMaster
12.02.2015, 08:24
1. Как реализовать вывод сообщения и звука при изменении дискретного значения?

При помощи модуля события - пример в приложении.




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

xaron
13.02.2015, 09:21
перенёс вопрос в другой раздел

SCADAMaster
13.02.2015, 10:43
Вопросы по ПЛК, нужно задавать в разделе "ПЛК"

nenaika
16.02.2015, 10:09
Добрый день! Подскажите, пожалуйста, как можно реализовать паузу в С#-скрипте. Использование System.Threading.Thread.Sleep(500) останавливает работу и самой MasterScada.

SCADAMaster
16.02.2015, 11:56
Добрый день! Подскажите, пожалуйста, как можно реализовать паузу в С#-скрипте. Использование System.Threading.Thread.Sleep(500) останавливает работу и самой MasterScada.
А что нужно реализовать что требуется останавливать работу ?

nenaika
16.02.2015, 12:08
Идет посыл данных ОРС-серверу, затем необходимо дождаться ответа ОРС-сервера и записать полученные значения и так по определенному циклу некоторое количество раз. Нужна именно пауза, а не остановка. Может посмотреть System.Timers.Timer?

SCADAMaster
16.02.2015, 12:58
Идет посыл данных ОРС-серверу, затем необходимо дождаться ответа ОРС-сервера и записать полученные значения и так по определенному циклу некоторое количество раз. Нужна именно пауза, а не остановка. Может посмотреть System.Timers.Timer?

По алгоритму смотрите сами. По поводу скрипта, он выполняется в главном потоке, потому Вызов паузы в нем, означает вызов паузы для всей скады.
Используйте BeginInvoke (RTManager.Instance.ThreadHolder.BeginInvoke)

nenaika
16.02.2015, 13:11
Спасибо! Буду разбираться.

Boris_K
16.02.2015, 15:36
1) Когда поменял что-либо в проекте (настройки тренда какие-нибудь и т. д.), нажал кнопку "сохранить", запускаю на исполнение, и часто (но не всегда!) выдаёт запрос о сохранении проекта, потом о сохранении тренда (не всегда!)... И не нашёл пока закономерности. Почему возникают эти запросы, ведь я уже сохранил проект перед этим?

2) На тренде, когда включена автопрокрутка, причём сдвиг автопрокрутки равен 0 (для плавного движения), при изменении значения переменной, вертикальная часть кривой отрисовывается сразу, но следующий за ней горизонтальный участок только через 2 - 3 секунды. Перелопатил все настройки, все периоды отрисовки делал порядка 10 - 50 мс, при этом параметр "отрисовка констант" установлен, и всё равно не помогает. Горизонтальная часть всё равно начинает рисоваться с приличной задержкой. Раздражает...

3) Можно ли уменьшить период перерисовки обычного графика на мнемосхеме (он около секунды)? У него нет такой настройки...

nenaika
16.02.2015, 15:50
По алгоритму смотрите сами. По поводу скрипта, он выполняется в главном потоке, потому Вызов паузы в нем, означает вызов паузы для всей скады.
Используйте BeginInvoke (RTManager.Instance.ThreadHolder.BeginInvoke)
Как я понял, мне надо в скрипте передать значения ОРС-серверу, затем организовать отдельный поток, в который необходимо перейти,сделать паузу,возвратиться назад и тогда считать данные, которые уже обновятся на ОРС-сервере? Извините, если пишу глупости, но в С# не силен.

SCADAMaster
16.02.2015, 16:27
1) Когда поменял что-либо в проекте (настройки тренда какие-нибудь и т. д.), нажал кнопку "сохранить", запускаю на исполнение, и часто (но не всегда!) выдаёт запрос о сохранении проекта, потом о сохранении тренда (не всегда!)... И не нашёл пока закономерности. Почему возникают эти запросы, ведь я уже сохранил проект перед этим?

Нажимаете Сохранить или Сохранить всё?



3) Можно ли уменьшить период перерисовки обычного графика на мнемосхеме (он около секунды)? У него нет такой настройки...
Тут скорее вопрос, с какой частотой у вас обновляются данные. Тренд рисует по архиву. Если данные в архиве обновляются с частотой 1 сек, то и тренд будет так отрисовываться.

SCADAMaster
16.02.2015, 16:32
Как я понял, мне надо в скрипте передать значения ОРС-серверу, затем организовать отдельный поток, в который необходимо перейти,сделать паузу,возвратиться назад и тогда считать данные, которые уже обновятся на ОРС-сервере? Извините, если пишу глупости, но в С# не силен.
По хорошему вам надо подписываться на сообщения от OPC сервера и ждать когда Он пришлет их вам (вы ведь не знаете успели ли они обновится за указанный промежуток времени). Но почему к OPC надо обращаться через скрипт, а не штатным способом скады ?

Boris_K
16.02.2015, 16:39
Нажимаете Сохранить или Сохранить всё?

И то, и другое пробовал. И по-разному бывает.


Тут скорее вопрос, с какой частотой у вас обновляются данные. Тренд рисует по архиву. Если данные в архиве обновляются с частотой 1 сек, то и тренд будет так отрисовываться.

Сам опрос объекта поставил с периодом 10 мс. Ставил архивирование, пробовал разные периоды (в окне настроек там почему-то заголовок "переопределить настройки шаблона") - не влияет никак...

nenaika
16.02.2015, 17:11
По хорошему вам надо подписываться на сообщения от OPC сервера и ждать когда Он пришлет их вам (вы ведь не знаете успели ли они обновится за указанный промежуток времени). Но почему к OPC надо обращаться через скрипт, а не штатным способом скады ?
Таким образом идет чтение архивов через ОРС DA - сервер. В сервере есть переменные тип, запроса, тип архива, тип параметра и т.п., которые задаются, а сервер выдает соответственно каждую запись архива в др. переменные - значения в соответствии с запросом. Т.е. если надо вычитать допустим часовой архив за 3 дня - 72 запроса и ответа - не представляю, как сделать это штатно. Есть еще переменная "счетчик запросов" в сервере, в которой добавляется 1, если запрос прошел - можно, скорее всего, контролировать и по ней. Но мне кажется, что только с такой проверкой не очень хорошо. Пауза выполняет роль дополнительной проверки. Вообще этот скрипт должен использоваться до старта МастерСкады для вычитки всех архивов - затем архивы ведутся в самой скаде. И если случается нештатная ситуация(нет связи, электричества и т.д.) - дописываются из архивов приборов. Как то так.

SCADAMaster
17.02.2015, 11:35
Вы описываете поведение HDA сервера. Точно ли сервер является DA? Посмотрите будет ли данный сервер в списке доступных, если попытаться добавить его как HDA.

nenaika
17.02.2015, 13:01
Вы описываете поведение HDA сервера. Точно ли сервер является DA? Посмотрите будет ли данный сервер в списке доступных, если попытаться добавить его как HDA.
К сожалению, нет. Он отображается при поиске только в органайзере DA-серверов.

_Pavel_
17.02.2015, 16:44
Подскажите, пожалуйста, как можно получить количество сообщений в буфере (которые видны в окне сообщений)?

Boris_K
18.02.2015, 10:14
Ответьте, пожалуйста:

1) Где устанавливается период архивации значений - закладка "Архив", рамка "переопределить настройки шаблона"? Почему он тогда не влияет на частоту перерисовки простого графика на мнемосхеме?

2) На тренде, когда включена автопрокрутка, причём сдвиг автопрокрутки равен 0 (для плавного движения), при изменении значения переменной, вертикальная часть кривой отрисовывается сразу, но следующий за ней горизонтальный участок только через 2 - 3 секунды. Перелопатил все настройки, все периоды отрисовки делал порядка 10 - 50 мс, при этом параметр "отрисовка констант" установлен, и всё равно не помогает. Горизонтальная часть всё равно начинает рисоваться с приличной задержкой. Как это вылечить?

nenaika
18.02.2015, 11:44
День добрый! Помогите разобраться со следующей ситуацией. В с#-скрипте устанавливаю значения для ОРС переменных, они устанавливаются, но так получается, что не воспринимаются сервером DA. Но выполняя присваивание командой в режиме исполнения - все проходит нормально. Т.е. объявляя var Тип_парам_OPC = (ITreePinHlp)HostFB.TreeItemHlp.Project.Item("Система.Компьютер 1.OPC DA 2_0_3_0 Server.tm3.ArhiveRecord.TypePar"); а затем присваивая Тип_парам_OPC.AddAssignValueTask(1,null); Видим в МастерСкаде в дереве системы, что действительно TypePar = 1, но просматривая, допустим, dOPC Explorer вижу, что значение TypePar в сервере не изменилось. Если создаю дискретную команду и устанавливаю действие "присвоить" "Система.Компьютер 1.OPC DA 2_0_3_0 Server.tm3.ArhiveRecord.TypePar" = 1, все работает и параметр становиться равным 1.

SCADAMaster
18.02.2015, 12:29
Ответьте, пожалуйста:

1) Где устанавливается период архивации значений - закладка "Архив", рамка "переопределить настройки шаблона"? Почему он тогда не влияет на частоту перерисовки простого графика на мнемосхеме?
У тренда. Расширенные настройки->Производительность\качество ->Интервал автопрокрутки
http://screencast.com/t/1WRlGGJX3Ih
Видно что частота увеличилась. Или вопрос был в другом ?


2) На тренде, когда включена автопрокрутка, причём сдвиг автопрокрутки равен 0 (для плавного движения), при изменении значения переменной, вертикальная часть кривой отрисовывается сразу, но следующий за ней горизонтальный участок только через 2 - 3 секунды. Перелопатил все настройки, все периоды отрисовки делал порядка 10 - 50 мс, при этом параметр "отрисовка констант" установлен, и всё равно не помогает. Горизонтальная часть всё равно начинает рисоваться с приличной задержкой. Как это вылечить?
Можете привести пример с видео. Так не ясно как это выглядит.

SCADAMaster
18.02.2015, 12:30
Если параметр на чтение/запись то надо так -
Тип_парам_OPC = ((ITreePinHlp)HostFB.TreeItemHlp.Project.Item("Система.Компьютер 1.OPC DA 2_0_3_0 Server.tm3.ArhiveRecord.TypePar")).InputPin;
Там фактически 2 отдельные переменные, одна на запись, другая на чтение

nenaika
18.02.2015, 12:34
Если параметр на чтение/запись то надо так -
Тип_парам_OPC = ((ITreePinHlp)HostFB.TreeItemHlp.Project.Item("Система.Компьютер 1.OPC DA 2_0_3_0 Server.tm3.ArhiveRecord.TypePar")).InputPin;
Там фактически 2 отдельные переменные, одна на запись, другая на чтение
Да, вы правы, параметр на чтение/запись. Спасибо, буду пробовать.

Boris_K
18.02.2015, 14:08
1)
У тренда. Расширенные настройки->Производительность\качество ->Интервал автопрокрутки

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

2) Теперь насчёт тренда:

На тренде, когда включена автопрокрутка, причём сдвиг автопрокрутки равен 0 (для плавного движения), при изменении значения переменной, вертикальная часть кривой отрисовывается сразу, но следующий за ней горизонтальный участок только через 2 - 3 секунды. Перелопатил все настройки, все периоды отрисовки делал порядка 10 - 50 мс, при этом параметр "отрисовка констант" установлен, и всё равно не помогает. Горизонтальная часть всё равно начинает рисоваться с приличной задержкой. Как это вылечить?

Вот картинка с примером тренда, думаю тут всё понятно:

16783

SCADAMaster
18.02.2015, 15:47
1)

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


2) Теперь насчёт тренда:

Это штатное поведение тренда. Настройки на более быстрое отрисовывание этой линии, нет.

_Pavel_
18.02.2015, 15:59
Подскажите, пожалуйста, как можно получить значение количества сообщений в буфере (которые видны в окне сообщений)?

Boris_K
18.02.2015, 19:06
Это штатное поведение тренда. Настройки на более быстрое отрисовывание этой линии, нет

Жалко. Глюк на ровном месте...

SCADAMaster
19.02.2015, 12:09
Подскажите, пожалуйста, как можно получить значение количества сообщений в буфере (которые видны в окне сообщений)?
На текущий момент получить это число в коде нельзя. Мы доработаем ФБ "Состояние окна сообщений" чтобы у него можно было видеть это значение.

SokolovS
19.02.2015, 13:39
Подскажите пожалуйста
На данный момент использую связку MasterOPC-com0com-com2tcp-TeleofisWRX708 (GPRS модем-терминал ModbusRTU)
Решил проверить можно ли выбросить две прокладки, в режиме Modbus over TCP удалось добиться связи.
Однако связь достаточно нестабильная
ОРС сервер успешно связывается с модемом и начинает слать запросы. Если всё хорошо, то уже с первого запроса идёт обмен информацией, в логе обмен есть как запросы, так и ответы. Ответы бывают некорректные, пусть и нечасто.
Если же ответ с первого раза не приходит, ни разу не удалось получить и потом его: сервер рвёт соединение и устанавливает заново, шлёт повторные запросы, однако результат всегда одинаков: в случае опроса функцией modbus.ReadHoldingRegistersAsUInt16 это таймаут, в случае опроса функцией server.SendAndReceiveDataByMask это ответ из 0 байт (тоже интересный вопрос, почему так).
При работе с промежуточными звеньями такого поведения не наблюдается
Прошу помочь разобраться в проблеме и найти ответы на эти вопросы:
1. Почему не удаётся получить ответ в некоторых случаях
2. Почему server.SendAndReceiveDataByMask при работе по ТСР и таймауте возвращает 0 байт без ошибок
По поводу первого вопроса могу предположить, что поведение связано с тем, что при реинициализации узла и при любом другом завершении сеанса связи ТСР соединение не разрывается корректным образом, соответственно, у модема остаётся активным старое соединение

IIeroniux
19.02.2015, 15:15
День добрый!

Как я понимаю контрол типа 'выпадающий список' на мнемосхеме невозможно сохранить в отчете.

Какой элемент выглядит на мнемосхеме как 'выпадающий список' (т.е. заранее заданные строки) + позволяет пользователю добавлять новые? Как я понял это ФБ 'Список строк', но как с ним работать не могу понять. В окне настроек забил в него нужные строки, а в режиме исполнения их не видно.

Спасибо!

nenaika
19.02.2015, 15:15
Добрый день! Извините, если глупый вопрос. Подскажите, пожалуйста, как получить в с#-скрипте значение ОРС переменной? К примеру, объявлена переменная var Температура_тр_OPC = (ITreePinHlp)HostFB.TreeItemHlp.Project.Item("Система.Компьютер 1.OPC DA 2_0_3_0 Server.tm3.ArhiveRecord.DataT");. По справке нашел только InputPin, но это только для получения заданного значения переменной, которая чтение/запись. Значение переменной меняется,только если дать соответствующий запрос ОРС серверу. Это архивное значение, получаемое по запросу.

SCADAMaster
19.02.2015, 16:10
День добрый!
Какой элемент выглядит на мнемосхеме как 'выпадающий список' (т.е. заранее заданные строки) + позволяет пользователю добавлять новые? Как я понял это ФБ 'Список строк', но как с ним работать не могу понять. В окне настроек забил в него нужные строки, а в режиме исполнения их не видно.


У ФБ Список строк в окне настроек указываются только:
Путь до файла.
или
Возможность задать файл через вход
-------
Для работы у ФБ нужно только задать путь до файла, где хранятся строки
http://screencast.com/t/yNZG0o7ZZr

IIeroniux
19.02.2015, 16:28
Блин, насколько удобный сервис (я о http://screencast.com/ - у нас как раз видео сайты запрещены ИТ)! Спасибо! (а это Вам!)

SCADAMaster
19.02.2015, 16:36
Добрый день! Извините, если глупый вопрос. Подскажите, пожалуйста, как получить в с#-скрипте значение ОРС переменной? К примеру, объявлена переменная var Температура_тр_OPC = (ITreePinHlp)HostFB.TreeItemHlp.Project.Item("Система.Компьютер 1.OPC DA 2_0_3_0 Server.tm3.ArhiveRecord.DataT");. По справке нашел только InputPin, но это только для получения заданного значения переменной, которая чтение/запись. Значение переменной меняется,только если дать соответствующий запрос ОРС серверу. Это архивное значение, получаемое по запросу.
Температура_тр_OPC.GetRTPin().ObjectValue;

Andrei1401
19.02.2015, 21:43
Подскажите пожалуйста, можно ли где нибудь найти пример скрипта выполняющего функцию таймера с возможность задания времени и что бы по окончании времени выдавался сигнал .

SCADAMaster
20.02.2015, 11:31
Подскажите пожалуйста, можно ли где нибудь найти пример скрипта выполняющего функцию таймера с возможность задания времени и что бы по окончании времени выдавался сигнал .
Работа со временем полностью освещена в MSDN (https://msdn.microsoft.com/ru-ru/library/System.DateTime%28v=vs.110%29.aspx)
В скаде можно использовать связку из ФБ Счетчик времени (Палитра->Работа со временем) и События (на которое можно повесить сигнал или любое другое действие), которое будет активироваться по достижению определенного значения ФБ.

ATA_jr
20.02.2015, 16:05
Добрый день, а есть возможность выводить данные из MasterSCADA на сайт? (мнемосхему, измеряемые значения и т.п.)
Если да, то как, и какая версия MS и дополнительные модули для этого требуются?

Заранее благодарю за ответ)

SCADAMaster
20.02.2015, 16:29
Добрый день, а есть возможность выводить данные из MasterSCADA на сайт? (мнемосхему, измеряемые значения и т.п.)
Если да, то как, и какая версия MS и дополнительные модули для этого требуются?

Заранее благодарю за ответ)
Мнемосхемы\тренды можно сохранять как сриншоты.
Переменные можно сохранять в БазуДанных (или текстовые файлы) и выводить уже из них.

nenaika
23.02.2015, 13:51
Добрый день! Есть ли возможность в С#-скрипте дописывать в значения в архив данных? Т.е. есть архив, допустим, команды в который записываются показания давления(условно) и с ПК что либо случается или проблемы со свяью и запись не ведется, потом возобновляется и запись продолжается. За пропущенное время я вынимаю данные из архива прибора (использую ОРС DA сервер) и надо их дописать в архив. Использование архивДавление.write(PinValue) не помогает, не записывает данные с метками времени меньшими, чем у последнего значения в архиве.

SCADAMaster
23.02.2015, 15:55
Нет, записывать значения с более ранней меткой времени нельзя - архив должен быть монотонным.
Почему нельзя постоянно читать OPC HDA?

nenaika
23.02.2015, 16:23
Нет, записывать значения с более ранней меткой времени нельзя - архив должен быть монотонным.
Почему нельзя постоянно читать OPC HDA?
Был бы OPC HDA ,я и проблем бы не знал - сервер то OPC DA. Но с возможностями обращаться к архивам и получать данные.

SCADAMaster
23.02.2015, 18:54
А что за прибор?
Как происходит обращение к архивам через DA?

nenaika
24.02.2015, 10:27
А что за прибор?
Как происходит обращение к архивам через DA?
Преобразователь измерительный многофункциональный ИСТОК-ТМ3 (для учета различных энергоресурсов). В сервере OPC DA есть переменные тип запроса, тип архива, тип параметра и т.п., которые задаются. Соответственно, после запроса прибор выдает каждую запись архива в переменные (расход, температура, метка времени и т.п.) - значения в соответствии с запросом. Выдается по одной записи (запрос-ответ). Соответственно стоит вопрос вычитки архивов прибора в архивы МастерСкады. Т.е. ведение архивов в программе и при необходимости корректировки их (в случае внештатных ситуаций), используя архивы прибора.

SCADAMaster
24.02.2015, 10:48
А его протокол не известен? Можно было бы попробовать поддержать его в Modbus Universal MasterOPC при помощи скриптов.
Можно в принципе попробовать реализовать и через C#. Но вам тогда нужно будет всегда формировать архив из скрипта. Производите опрос значений, когда связь есть - пишите сразу на выход ФБ с полученной меткой времени. Если связь пропала, а затем восстановилась, сначала начинаете читать архив, писать его на выход, а когда считаете до конца - снова читаете текущее значение и транслируете его на выход.