Просмотр полной версии : Вопросы по MasterSCADA 4D
Minarion
19.03.2020, 08:06
Здравствуйте!
Вопрос по редактированию сообщений. В архивный журнал падают тревожные сообщения. Параметр "активность" завязан с выходом ST программы. Возможно ли отредактировать данный тип сообщений, чтоб в архивном журнале отображалось не "появление" и "исчезновение", а, например, "На связи", "нет связи".
Здравствуйте!
Есть ли в МастерСКАДА 4Д резервирование баз данных проекта на разные серверы с восполнением пропущенных данных при восстановлении утраченной связи в одном из серверов? Таким образом получить всегда полную текущую БД на обоих исправных серверах?
Владимир Протопланов
19.03.2020, 10:12
В среде разработки появился неприятный баг: при создании какого-то объекта из библиотечных элементов, которые уже есть в других объектах и построении связей внутри нового объекта с этими элементами, то есть вероятность, что при компиляции эти связи продублируются в другие, более старые объекты, вызвав ошибку "имеет более одного отношения передачи данных" или из старых объектов связи продублируются в новый. При вырезании всех связей и повторной компиляции появляются новые связи и так до бесконечности. Спасет вырезание всех лишних связей, сохранение проекта, закрытие среды разработки и повторное открытие, только после этого можно компилировать проект и ничего не появится лишнего.47963
Здравствуйте!
Вопрос по редактированию сообщений. В архивный журнал падают тревожные сообщения. Параметр "активность" завязан с выходом ST программы. Возможно ли отредактировать данный тип сообщений, чтоб в архивном журнале отображалось не "появление" и "исчезновение", а, например, "На связи", "нет связи".
Можно что то подобное сделать,
В библиотеке, создаете "Тревога"
Туда, добавляете нужные поля, с нужным типом данных, далее тревогу кидаете в нужный объект.
В редакторе архивного журнала добавляете или изменяете необходимые поля, название поля надо вбить вручную, что бы имена совпадали с библиотечным.
Только стоит помнить, что текст который записывается в тревогу происходит при переходе из false в true, по этому при необходимости надо создать две тревоги: Есть связь" и "нет связи"
Здравствуйте!
Есть ли в МастерСКАДА 4Д резервирование баз данных проекта на разные серверы с восполнением пропущенных данных при восстановлении утраченной связи в одном из серверов? Таким образом получить всегда полную текущую БД на обоих исправных серверах?
Если силами самой скады, то у них есть опция резервирования, лучше на эту тему спросить в техподдержке
Если силами самой скады, то у них есть опция резервирования, лучше на эту тему спросить в техподдержке
Спросил. Опция "Резервирование" не позволяет резервировать БД. Хотя вроде в третьей версии, судя по справке, это было возможно.
Спросил. Опция "Резервирование" не позволяет резервировать БД. Хотя вроде в третьей версии, судя по справке, это было возможно.
Хм, может не так спросили ?
То есть вот такая схема не работает ?
47983
Вот даже тут есть схема на их сайте, если в такой схеме нет синхронизации архивов то это печально конечно
https://insat.ru/prices/info.php?pid=69981
Добрый день! OS Debian 9 , MS4D RT linux
Кто нибудь пробовал настроит опрос прибора через конвертер rs485 to usb (ch341) протокол modbus rtu . В windows платформе опрос идет.
Пробовал настроит через терминал minicom, lsusb , sudo chmod 777 /dev/ttyusb0 также не идет опрос. Подскажите пожалуйста как решит задачу?
manjey73
20.03.2020, 22:46
Наверное надо указывать не COM1 порт а именно как /dev/ttyUSB0 ? и убедиться что порт именно так определяется.
Наверное надо указывать не COM1 порт а именно как /dev/ttyUSB0 ? и убедиться что порт именно так определяется.
Здравствуйте.
Можете более подробно , где именно указать /dev/ttyUSB0 ?
В среде разработки в свойствах протокола modbus rtu нельзя указать /dev/ttyUSB0 вместо com port . Там только цифры можно указывать.
manjey73
21.03.2020, 15:21
Блин, ну это в техподдержке надо уточнить, почему в Linux RT системе нельзя указывать порты так, как они обозначаются в Linux
OlegGEORG
28.03.2020, 14:33
Добрый день.
Имеется несколько режимов работы оборудования со своими уставками.
Как проще сделать переключатель режимов работы.
Объясните, пожалуйста, по шагам.
Добрый день.
Имеется несколько режимов работы оборудования со своими уставками.
Как проще сделать переключатель режимов работы.
Объясните, пожалуйста, по шагам.
Если устроит, то можно через выпадающий список.
1. В библиотеке создаете новый тип данных Перечисление (подробно описано в справке).
2. В дереве объектов создаете параметр с этим библиотечным типом данных.
3. В программе описываете режимы работы оборудования для каждого значения перечисления.
4. Параметр из дерева объектов тащите в окно правой кнопкой мыши и вставляете контрол Выпадающий список.
48159
48160
OlegGEORG
28.03.2020, 17:41
Спасибо! Через выпадающий список и планировал. Но дальше дело не шло.
OlegGEORG
05.04.2020, 10:44
Добрый день.
Формирую таблицу из массива. В самом редакторе изменения таблицы не вижу, только когда
запускаю на исполнение в браузере вижу изменения. Так должно быть?
Т.е. если настраивать таблицу, при каждом изменении параметров таблицы необходимо каждый раз
запускать на исполнение?
OlegGEORG
05.04.2020, 10:54
В третье версии SCADA есть ФБ таблицы, которую можно редактировать в режиме исполнения.
В 4D для этих целей возможно использование только Стековой панели?
Хотел бы использовать таблицу для редактирования уставок параметров в зависимости
от режимов работы оборудования.
В третье версии SCADA есть ФБ таблицы, которую можно редактировать в режиме исполнения.
В 4D для этих целей возможно использование только Стековой панели?
Хотел бы использовать таблицу для редактирования уставок параметров в зависимости
от режимов работы оборудования.
А зачем менять уставки из таблицы? Обычно уставки прописываются один раз. Если вам их надо менять в зависимости от режима, то проще это сделать через выпадающий список (как вы и планировали ранее), тип данных Структура и программу, а в окне отображать только уставки выбранного режима через текст (или ту же таблицу, если сильно хочется).
48276
48275
Здравствуйте. Вопрос по резервированию. Открыл на двух компьютерах один и тот же проект. Добавил службу резервирования. Указал IP второго узла на каждый компьютер, указывающий друг на друга. При запуске узлы постоянно переключаются, перезагружают конфигурацию. Никак не договорятся, кто мастер, а кто слейв. Подскажите куда смотреть?
Minarion
25.05.2020, 17:25
Здравствуйте! Кто-то пробовал подружить MS4D и Telegram?
SCADAMaster4D
26.05.2020, 12:49
Здравствуйте. Вопрос по резервированию. Открыл на двух компьютерах один и тот же проект. Добавил службу резервирования. Указал IP второго узла на каждый компьютер, указывающий друг на друга. При запуске узлы постоянно переключаются, перезагружают конфигурацию. Никак не договорятся, кто мастер, а кто слейв. Подскажите куда смотреть?
Неправильно настраиваете. Откройте один проект на одном компьютере, второй компьютер с запущенной mplc просто укажите в настройках резервирования. После этого загружайте проект. Конфиг проекта загрузится и в основной, и в резервный.
Voro6yov
29.05.2020, 06:50
Здравствуйте!
У меня возникла следующая проблема.
В архивном журнале необходимо найти события, произошедшие в определенный день. Для этого я нажимаю кнопку перейти к дате, выбираю необходимую дату, нажимаю ок, но в архивном журнале отображается ноль сообщений. Кто нибудь сталкивался с такой проблемой?
Версия 1.2.7.
49328
49329
SCADAMaster4D
29.05.2020, 15:40
Проверьте на актуальной версии.
ftp://ftpGuestDemo:8AA55D8A@support.insat.ru/MasterSCADA4D/1.2/MasterSCADA4D.exe
Добрый день! Подскажите пожалуйста, как в mscada4d сделать так чтобы при нажатии на клавиатуре кнопки "s" закрывалось всплывающее окно. Заранее спасибо.
Добрый день! Подскажите пожалуйста, как в mscada4d сделать так чтобы при нажатии на клавиатуре кнопки "s" закрывалось всплывающее окно. Заранее спасибо.
Чтобы только закрывать - наверное никак. Если только каким-то образом повторно вызывать действие, которое это окно открывает. Единственный выход, который пришел в голову - это добавить событие в окно, которое по нажатию клавиши открывает всплывающее окно. Соответственно, по нажатию на "s" всплывающее окно сначала откроется, а по второму нажатию "s" - закроется. Но это будет работать только на HMI v2.
49727
Спасибо за ответ. Версия: 1.2.9. по описанной последовательности открытие окна происходит при нажатии на любую клавишу на клавиатуре.49752
Т.е. выбрав объект - прямоугольник - в событиях указываем - нажатие клавиши - панель пуста - добавляем параметры - вводим переменную - dint - 83; далее указываем открытие окна.
В случае объекта - кнопка - в событиях уже есть параметры, остается добавить только окно и код клавиши.
При запуске эмуляции нет реакции на нажатие кнопки, после фокуса - клика на объект и нажатия кнопки - любой - происходит открытие окна. Как сделать открытие по нажатию конкретной кнопки?
Юный Падаван
25.06.2020, 11:06
Добрый день, только начал разбираться в MasterScada4D. Хочу получить данные с сервера apache(xampp) с БД mysql, пытался получить данные через службу mysql, создавая узел "сервер", но безуспешно. Заранее спасибо.
Добрый день, только начал разбираться в MasterScada4D. Хочу получить данные с сервера apache(xampp) с БД mysql, пытался получить данные через службу mysql, создавая узел "сервер", но безуспешно. Заранее спасибо.
Вам необходимо использовать протокол MySQL в узле. В справке описано получение данных из MSSQL и PostgreSQL, но с MySQL все будет аналогично.
49839
Чтобы только закрывать - наверное никак. Если только каким-то образом повторно вызывать действие, которое это окно открывает. Единственный выход, который пришел в голову - это добавить событие в окно, которое по нажатию клавиши открывает всплывающее окно. Соответственно, по нажатию на "s" всплывающее окно сначала откроется, а по второму нажатию "s" - закроется. Но это будет работать только на HMI v2.
49727
Как определить действие открытие окна только по одной клавише - сейчас открывает окно при нажатии любой кнопки, хотя в параметрах указывал код кнопки. Заранее спасибо за ответ.
Как определить действие открытие окна только по одной клавише - сейчас открывает окно при нажатии любой кнопки, хотя в параметрах указывал код кнопки. Заранее спасибо за ответ.
Возможно это баг, что открывает по нажатию любой. В этом случае лучше в техподдержку написать.
Скороспелов Андрей
25.06.2020, 17:29
Как определить действие открытие окна только по одной клавише - сейчас открывает окно при нажатии любой кнопки, хотя в параметрах указывал код кнопки. Заранее спасибо за ответ.
Говорили, что сейчас это не работает.
Юный Падаван
26.06.2020, 17:34
Спасибо большое, это помогло, но результата не дало. Создавал протокол mysql, все параметры указывал, добавлял запрос mysql, добавлял туда команду, но ответа так и не добился.
Minarion
29.06.2020, 09:46
Как вы пишите запрос? Как присваиваете результат переменной?
Добрый день. Подскажите пожалуйста как по клику мыши открыть новое окно в развёрнутом виде на весь экран.
У меня открывается в центре небольшое окно, а только потом я могу его развернуть.
Добрый день. Подскажите пожалуйста как по клику мыши открыть новое окно в развёрнутом виде на весь экран.
У меня открывается в центре небольшое окно, а только потом я могу его развернуть.
Использовать действие "Открыть окно", связать его с окном, у свойства "Открыть новое" установить значение True, тогда окно будет открываться как новая вкладка в браузере.
Так и делаю, только окно открывается не на весь экран, приходится его вручную разворачивать
Так и делаю, только окно открывается не на весь экран, приходится его вручную разворачивать
Тогда у свойства "Открыть новое" установите значение False.
Если ставлю false я не могу это окно перетащить на другой монитор
Подскажите пожалуйста как в браузере сделать понятными названия вкладок? Например Освещение.
49964
Подскажите пожалуйста как в браузере сделать понятными названия вкладок? Например Освещение.
49964
https://owen.ru/forum/showthread.php?t=30695&p=314831&viewfull=1#post314831
Думаю, что сейчас ничего не поменялось.
kait-volga
02.07.2020, 09:09
Добрый день.
Подскажите пожалуйста, как динамизировать параметр "список" элемента "Выпадающий список".
В справке указано следующее:
"Это свойство имеет тип STRING и определяет список доступных строк в выпадающем списке. Строки в списке разделяются символом ~. При установке входящей связи список строк может быть изменен в результате работы среды исполнения. Если параметр типа перечисление был перетащен в окно правой кнопкой мыши, и в контекстном меню был выбран пункт Выпадающий список, то данное свойство заполнится автоматически."
Планировалось использовать "Выпадающий список" для выбора рецепта. Параметр "список" в качестве изменяемых в процессе работы наименований рецепта, а параметр "выбор" передавать в индекс массива.
На ум пришел только вариант с хранением строк в массиве, склейка их с разделителем "~" конкатенацией, и передача переменной String в параметр "список".
Может есть другие варианты организовать выбор и хранение рецептов?
Валерий Артемьев
04.07.2020, 12:35
Вопрос по отчетам.
для учета переменных с плохим признаком качества нужно перетаскивать в отчет переменные типа SYSTEM_LREAL_PARAM?
Вопрос по отчетам.
для учета переменных с плохим признаком качества нужно перетаскивать в отчет переменные типа SYSTEM_LREAL_PARAM?
Не совсем, можно и обычную переменную, если вы ее пишете в ручную используя fb write arch .
Но в отчетах беда и использованием плохих признаков
Minarion
31.07.2020, 15:53
Здравствуйте коллеги!
Кто-нибудь сталкивался с проблемой присваивания значений массиву в программе ST?
Мой путь: создал структуру, на ее основе создал массив. Это динамический массив в который загоняется результат SQL запроса. После этого значение передается в промежуточный параметр в узле с той же структурой (хз зачем, но ТП сказала что без этого не работает) В объекте созданы параметры с той же структурой. В ST программе пытаюсь присвоить результат SQL-запроса другому массиву с минимальной обработкой и ничего не получается. Не присваивается даже если использовать банальное ArrName[1].TimePgAP := "00:00:00". То есть в параметры на входе программы значения поступают, а обработать или присвоить другой переменной на выходе программы не получается (обычной переменной присвоить значение удается, а именно этому массиву нет). Во всех этих переменных используется единая структура массива.
kait-volga
01.08.2020, 07:19
Добрый день.
Тоже сталкивался с подобной проблемой, не передавались данные между структурами. Объяснение ТП "прямая передача сложных типов данных (структрур, массивов) между задачами невозможна". В справке также нашел упоминание:
"Важно! В текущей версии MasterSCADA 4D прямая передача сложных типов данных (структрур, массивов) между задачами невозможна. Например, если в задаче протокола было получено значение типа Структура, то его нужно связать сначала с глобальным параметром Узла, а затем уже глобальный параметр связывать напрямую с параметром задачи узла или непосредственно использовать в программах ST"
50455
значение передается в промежуточный параметр в узле с той же структурой
Если передавать из структуры в параметр, а далее опять в структуру, то все работает.
Minarion
04.08.2020, 09:24
Локализовал проблему.
Значение в ST программе не присваивается если массив созданный на основе структуры динамический. Если размер задать вручную, то значение в ST программе присваивается корректно.
AlexanderUshakov
05.08.2020, 13:33
Добрый день!
Есть такая проблема, в проекте данные приходят через протокол OPC UA с opc сервера kepserverex 5. И некоторые из данных, которые во времени почти всегда имеют постоянное значение (заряд ибп = 100%, статус работа ИБП = true) не инициализируются при запуске проекта и имеют статус кодом BadWaitingInitialData. Переменные, которые постоянно обновляются (токи, напряжение) инициализируются нормально.
Но когда происходит изменение этих параметров в opc сервере (заряд ибп = 99%, статус работа ИБП = false), это случается когда ИБП самотестируется и меняет режим работы на тест и переходит на батареи, данные сразу инициализируются в скаде и корректно отображаются на мнемосхеме.
Кто-то сталкивался с такой проблемой?
Minarion
13.08.2020, 11:05
Здравствуйте!
Подскажите, возможно ли динамический массив напрямую передать в отчет?
С обычным параметром получается, а массив не передает значения и просто в строку пишет:
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Minarion
14.08.2020, 15:37
Здравствуйте!
Подскажите, возможно ли динамический массив напрямую передать в отчет?
С обычным параметром получается, а массив не передает значения и просто в строку пишет:
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ответ от ТП: низзя.
Самое обидное что в справке есть описание что для генерации отчета можно использовать SQL запрос, однако это работает только в 3 версии. В 4 такого не предусмотрено.
50630
Minarion
18.08.2020, 16:00
Здравствуйте!
И снова вопрос по массивам...
Пытаюсь объединить два массива, но проблема в том что у них разный размер. NameAP общие.
Делаю так:
n:=UPPER_BOUND(RevStatusAp,1);
FOR i:=1 to n do
If RevWEB[i].NameAP = RevFromPg[i].NameAP
THEN RevWEB[i].TimePgAP := RevFromPg[i].TimeAP
END_IF;
END_FOR;
Моя логика такая: если строковые значения NameAP совпадают, то .TimeAP должен записаться в ту последовательность, номер которой был в RevWEB[i].NameAP. Но что-то не так. Где я не прав?
Николай М
24.08.2020, 11:39
Здравствуйте.
Не могу отправить СМС.
пробовал два разных модема ZTE и один Телеофис
ход "передачи" для всех один
отправка (статус SEND_SMS = 17)
смс отправлено (статус 18)
но затем ошибка 3
и отправление всякий раз повторяется (статус 17).
(Получилось отправить без ошибок только на ОВЕН ПМ-01)
но там есть особенность не применимая к остальным модемам.
Может кто сталкивался с подобной проблемой.
На каких модемах такой ошибки нет, или как ее решить?
Добрый день!
При передаче данных по ModbusTSP на ПЛК возникла необходимость конвертации в word переменной типа real. В блоках MasterScadaD есть ФБ, но он записывает только в одну переменную типа word, похоже обрезая real. Как сделать разбивку real на два word? Заранее спасибо!
Добрый день!
При передаче данных по ModbusTSP на ПЛК возникла необходимость конвертации в word переменной типа real. В блоках MasterScadaD есть ФБ, но он записывает только в одну переменную типа word, похоже обрезая real. Как сделать разбивку real на два word? Заранее спасибо!
Использовать функцию REAL_TO_DWORD, а затем DWORD разделить на младшее и старшее слово.
Использовать функцию REAL_TO_DWORD, а затем DWORD разделить на младшее и старшее слово.
Да, но при использовании REAL_TO_DWORD число округляется до целого. Как сохранить при преобразовании десятичные и сотые? Возможно не так понял Вас - можно привести пример?
PS: В codesys есть библиотека ОСL - с помощью которой вопрос решается однозначно правильно. Есть ли в masterscada что-то подобное? К сожалению не нашел...
Да, но при использовании REAL_TO_DWORD число округляется до целого. Как сохранить при преобразовании десятичные и сотые? Возможно не так понял Вас - можно привести пример?
PS: В codesys есть библиотека ОСL - с помощью которой вопрос решается однозначно правильно. Есть ли в masterscada что-то подобное? К сожалению не нашел...
Из скады в плк надо передать? Можно пойти с другой стороны, преобразовать в плк
Да, но при использовании REAL_TO_DWORD число округляется до целого. Как сохранить при преобразовании десятичные и сотые? Возможно не так понял Вас - можно привести пример?
PS: В codesys есть библиотека ОСL - с помощью которой вопрос решается однозначно правильно. Есть ли в masterscada что-то подобное? К сожалению не нашел...
Если вам надо, чтобы в одном слове была целая часть, а в другом - дробная, то можно с помощью программы, прикрепил во вложении.
Большое спасибо за код.
Получается для передачи данных из Masterscada4d нам нужно из real преобразовать в word. Скажем 3.3 перекидываем в word_1 это 16467 и word_2 это 13107 (что за тип пока не разобрался -16-й возможно).
Подойдет ли данная программа для разбивки?
Перекинув по ModbusTCP в codesys3.5 (на ПЛК) значения word_1 и word_2 мы уже их можем объединить с помощью OCL.word2_to_real. Условная модель описанного обмена на рис -50833
Почему вы не хотите сразу передать в real, заодно и на тегах сэкономить
Добрый день. Скажите. Можно ли как-то вытащить сигналы о нарушении связи с узлами, нарушении сети.
Есть вроде системные окна с такими сообщениями. А как это вытащить на мнемосхему?
Добрый день. Скажите. Можно ли как-то вытащить сигналы о нарушении связи с узлами, нарушении сети.
Есть вроде системные окна с такими сообщениями. А как это вытащить на мнемосхему?
С узлом нет, можно с протоколами. Для этого надо использовать признак качества (StatusCode) одного из каналов модуля, а также параметр Отказ, который есть в каждом модуле.
50940
Здравствуйте. Возник вопрос. Если в настройках подключения ModBus TCP указать два IP адреса через запятую, это будет резервированием каналов связи?
AlexanderUshakov
14.09.2020, 08:30
Проблема решилась тем, что я убрал шифрование в masterscada4 и убрал шифрование на opc-сервере. Все стало работать корректно.
OlegGEORG
17.10.2020, 14:12
Добрый день. Есть ли видео с примерами работы на языке SFC?
OlegGEORG
17.10.2020, 16:50
Помогите, пожалуйста, запрограммировать SFC-ветвление выбора.
51425
Спасибо
Юрий Горелый
18.10.2020, 16:44
Вы спросили пример SFC их есть у меня)
https://www.youtube.com/watch?v=Gg5dujnCE-w
в принципе я достаточно подробно описал как создал алгоритм работы светофора. И те знания, по Masterscada sfc что мне доступны.
OlegGEORG
19.10.2020, 19:23
Вы спросили пример SFC их есть у меня)
https://www.youtube.com/watch?v=Gg5dujnCE-w
в принципе я достаточно подробно описал как создал алгоритм работы светофора. И те знания, по Masterscada sfc что мне доступны.
Спасибо! Буду пробовать
Добрый день народ, возникла проблема с MS4D, при разработке его фризит будто CPU не хватает, но при этом система летает, кто сталкивался с такой проблемой и есть хотя-бы адекватное объяснения?
NoteBook:
CPU: Razen 7 4800, 8 ядер 16 потоков.
RAM: 64 GB DDR4.
GPU: RTX 2060 6GB
SSD: PCIE G3 SSD 512GB
Добрый день народ, возникла проблема с MS4D, при разработке его фризит будто CPU не хватает, но при этом система летает, кто сталкивался с такой проблемой и есть хотя-бы адекватное объяснения?
NoteBook:
CPU: Razen 7 4800, 8 ядер 16 потоков.
RAM: 64 GB DDR4.
GPU: RTX 2060 6GB
SSD: PCIE G3 SSD 512GB
Такая же проблема, проект весит 1 ГБ, при редактировании окон, компиляции проекта и т.п. все очень сильно тормозит. Единственное, что у меня проц слабоват, по остальному железу немного получше: i3-7100, 32GB DDR4, SSD 240 GB. Обращался по данному вопросу в саппорт, но ничего внятного сказать не смогли.
У вас сильно большой проект? Сколько весит? Просто задумывался о модернизации ПК, но раз у вас и на таком железе тормозит, то возникает вопрос о целесообразности улучшения ПК.
Проект весит 115 мб, да и мне саппорт не чего внятного не сказал, кроме как "очистить кеш, очистить историю обновить программу" и пишут что у них razen 5, 16 ОЗУ и все работает нормально =)
Проект весит 115 мб, да и мне саппорт не чего внятного не сказал, кроме как "очистить кеш, очистить историю обновить программу" и пишут что у них razen 5, 16 ОЗУ и все работает нормально =)
Да, мне тоже писали, что на 5 райзене и 16 ГБ ОЗУ все летает)))) Но вообще странно, что у вас такой небольшой проект медленно работает.
alex_vosc
20.11.2020, 00:50
Возможно ли подключение ПЛК110-32 в качестве узла (аналогично ПЛК110-30 и ПЛК110-60)?
AlekseyK
21.11.2020, 23:11
Добрый день.
Можно ли сделать окно визуализации больше разрешения монитора.
Хотелось бы реализовать экран, как Web-страницу большой "высоты", которую можно прокручивать вниз.
Поигрался с настройками "тип ширины", "тип высоты", у шаблона экрана и самого окна, но в итоге получается растягивание изображения в различных вариантах, но всегда вписанное в текущее разрешение монитора.
Это вообще реализуемо?
Добрый день.
Можно ли сделать окно визуализации больше разрешения монитора.
Хотелось бы реализовать экран, как Web-страницу большой "высоты", которую можно прокручивать вниз.
Поигрался с настройками "тип ширины", "тип высоты", у шаблона экрана и самого окна, но в итоге получается растягивание изображения в различных вариантах, но всегда вписанное в текущее разрешение монитора.
Это вообще реализуемо?
У контейнера стартового окна есть свойство "Подгонка". Выставляете его в значение "Прокрутить" (скрин во вложении). Остальные параметры всех окон оставляете по умолчанию.
52122
Alexey8723
23.11.2020, 22:11
Здравствуйте!Подскажите пожалуйста, а существует библиотека MQTT-клиента для MasterScada 4D? Например есть программа MQTT-FX,которая является брокером, и нужно передать информацию, например, с датчика температуры сразу в MasterScada 4D, так вот можно ли это реализовать и где примерно должен отобразиться этот параметр в MS4D? Просто очень мало информации про настройку MQTT протокола в MS4D. Заранее спасибо!
Коллеги, добрый день!
Кто уже работал в версии 1.2.11, работает ли у вас построение периодического отчета ?
Коллеги, добрый день!
Кто уже работал в версии 1.2.11, работает ли у вас построение периодического отчета ?
Да, работает корректно.
Да, работает корректно.
А у вас интервал в каких единицах работает ?
В версии 1.2.10 в интервал надо было подавать TIME.
В версии 1.2.11 появилась возможность выбирать единицу измерения интервала.
Я ожидал что при подаче на интервал числа 1 , при единице интервала месяц.
Получу интервалы за месяц.
То есть в 1.2.11 логично, что надо писать в значение количество часов минут или суток в формате int.
На проекте который изначально разработан в 1.2.10, переключатель не работает, отчет строится если интервал подается в TIME.
Создал новый тестовый проект в 1.2.11, периодический отчет не строится. То есть строится, но сам отчет пустой
52158
52159
А у вас интервал в каких единицах работает ?
В версии 1.2.10 в интервал надо было подавать TIME.
В версии 1.2.11 появилась возможность выбирать единицу измерения интервала.
Я ожидал что при подаче на интервал числа 1 , при единице интервала месяц.
Получу интервалы за месяц.
То есть в 1.2.11 логично, что надо писать в значение количество часов минут или суток в формате int.
На проекте который изначально разработан в 1.2.10, переключатель не работает, отчет строится если интервал подается в TIME.
Создал новый тестовый проект в 1.2.11, периодический отчет не строится. То есть строится, но сам отчет пустой
52158
52159
Я использую TIME. Сейчас попробовал с INT - строится пустой отчет.
AlekseyK
02.12.2020, 02:04
У контейнера стартового окна есть свойство "Подгонка". Выставляете его в значение "Прокрутить" (скрин во вложении). Остальные параметры всех окон оставляете по умолчанию.
52122
Спасибо за ваш ответ. Почему-то не пришло уведомление, о новом сообщении в теме. Временно решили вопрос через два вложенных окна.
У меня еще один вопрос.
Работаем в двух редакторах - один на инженерном ПК, где идет редактирование проекта, второй на рабочем ПК, установленном на производственной линии. Версии редакторов одинаковые. При переносе проекта простым копированием с одного компьютера на другой перестают работать связи параметров и элементов окон. Проект компилируется, загружается в рантайм. Но почти все связи при этом перестают работать. Если удалить связь и создать ее снова, то она начинает работать. Может сталкивались с подобной проблемой?
Спасибо за ваш ответ. Почему-то не пришло уведомление, о новом сообщении в теме. Временно решили вопрос через два вложенных окна.
У меня еще один вопрос.
Работаем в двух редакторах - один на инженерном ПК, где идет редактирование проекта, второй на рабочем ПК, установленном на производственной линии. Версии редакторов одинаковые. При переносе проекта простым копированием с одного компьютера на другой перестают работать связи параметров и элементов окон. Проект компилируется, загружается в рантайм. Но почти все связи при этом перестают работать. Если удалить связь и создать ее снова, то она начинает работать. Может сталкивались с подобной проблемой?
То есть связи вообще пропадают? Или связи остаются, но не работают? Как переносите проект и с какими элементами окон пропадают связи? Вообще с такой проблемой ни разу не сталкивался. Какая версия редактора?
AlekseyK
02.12.2020, 14:22
Вопрос снимается - проблема была не в копировании, а в пустом названием одно из перьев тренда. Проект стартовал, но как-то не полностью. К сожалению запуск проекта можем проверить только на ПК, на который копируем проект.
Добрый день! Подскажите пожалуйста как реализовать работу с системным (реальным) временем без таймера? Допустим выполнить действие спустя час после нажатия кнопки. Как я понял есть ФБ Time -Функция возвращает текущее значение аппаратного таймера контроллера. Аппаратный таймер не следует путать с модулем часов реального времени - так а если нужно использовать модуль часов реального времени - как быть?
есть еще GET_UTC_TIME - но как сделать обращение на сравнение только по параметру "часы/минуты"?
Для выполнения действия спустя час после нажатия кнопки не обязательно знать текущее время. Для этого есть ФБ TON, который представляет собой задержку на включение.
Юрий Горелый2
07.12.2020, 14:02
Вопрос:
"
есть еще GET_UTC_TIME - но как сделать обращение на сравнение только по параметру "часы/минуты"?"
есть функции преобразования типов. в блоках Конвертации.
т.е. если включить ф.б. GET_UTC_TIME то на выходе его будет переменная типа Date_and_time.
Это значение можно передать на вход функции
DT_TO_TOD (time of day) и получить текущее время в часах и минутах52348
ФБ TON - это вычислительный ресурс ПК, зачем делать то, что уже имеется (не оптимально), на мой взгляд лучше просто сравнивать значение и по достижении нужного времени относительно системного выполнять действие.
есть идея с помощью ADD TIME увеличивать исходное значение GET_UTC_TIME по флагу на нужный промежуток времени, а потом по достижению условия равенства прошедшего+нужный промежуток времени и текущего значения (GET_UTC_TIME) выполнять условие
Юрий Горелый2
07.12.2020, 16:22
есть идея с помощью ADD TIME увеличивать исходное значение GET_UTC_TIME по флагу на нужный промежуток времени, а потом по достижению условия равенства прошедшего+нужный промежуток времени и текущего значения (GET_UTC_TIME) выполнять условие
плохая идея играться с системным временем.
если надо в конкретное время для что-то делать - проще как я описал преобразовать тип GET_UTC_TIME к времени. ну а потом дальше преобразовать если надо.
Опять же есть интервалы.
есть идея с помощью ADD TIME увеличивать исходное значение GET_UTC_TIME по флагу на нужный промежуток времени, а потом по достижению условия равенства прошедшего+нужный промежуток времени и текущего значения (GET_UTC_TIME) выполнять условие
А что-то увеличивать исходя из условия, а потом что-то с чем-то сравнивать - это не вычислительный ресурс ПК? Уж лучше сделать проще и понятнее, чем какой-то колхоз городить. Да и не так много ресурсов требует рантайм ms4d.
системное время используется постоянно. Вопрос как разово считать текущее системное время?
варианты:
real_time:=TIME();
или лучше
real_time:=GET_UTC_TIME();
,а далее просто работаем с переменной на сравнение.
sys_time:=ADD_TIME(IN1:=real_time , IN2:=T#1m); //вот эта функция пока не работает
if real_time=sys_time_hour THEN
флаг на включение
какие преобразования работают с форматом DATE_AND_TIME? где он хранится ? в простых типах данных его нет.
скажем как из переменной DATE_AND_TIME получить переменную содержащую часы, минуты, секунды?
спасибо за ответ!
какие преобразования работают с форматом DATE_AND_TIME? где он хранится ? в простых типах данных его нет.
скажем как из переменной DATE_AND_TIME получить переменную содержащую часы, минуты, секунды?
52358
52359
кстати как в форуме скрин с экрана вставить?
кстати как в форуме скрин с экрана вставить?
скрин
52370
т.е. надо через pain формировать jpeg?
подскажите пожалуйста как реализовать локальный тип данных - диапазон, что бы он работал не только с целыми значениями, но и с десятичными и сотыми.
пока округляет веденное значение до целого, не получается исправить.
т.е. надо через pain формировать jpeg?
Попробуйте lightshot скачать , скриншоты делает оч легко
подскажите пожалуйста как реализовать локальный тип данных - диапазон, что бы он работал не только с целыми значениями, но и с десятичными и сотыми.
пока округляет веденное значение до целого, не получается исправить.
Когда создаете тип диапазон, в свойствах, надо указать подтип какой нибудь из вещественных. Но все равно тип диапазон у меня не пойми как работает. Мне кажется для этих целей лучше использовать функцию limit
52380
спасибо! но, дело в том что таких параметров нет.
последовательность: во вкладке библиотеки - локальная- создаем тип данных - диапазон. затем создаем во вкладке объекты переменную и задаем ей тип диапазон. real там отсутствует.5238352384
да, и еще вопрос - есть ли контроль версий для masterscada? допустим если надо вдвоем проект разрабатывать.
интересно у всех проекты Masterscada4D тормозят? посмотрел - проект съедает 5Гб оперативной памяти и это на этапе редактирования!!! - проект средних размеров. Пользовался альтернативными скадами там больше 1Гб не выходило.
интересно у всех проекты Masterscada4D тормозят? посмотрел - проект съедает 5Гб оперативной памяти и это на этапе редактирования!!! - проект средних размеров. Пользовался альтернативными скадами там больше 1Гб не выходило.
Да, также. Бывало и по 9 ГБ занимало.
9 ГБ!!! да... а у меня ОЗУ на компьютере на 8Гб... явно что-то нужно менять .)
спасибо! но, дело в том что таких параметров нет.
последовательность: во вкладке библиотеки - локальная- создаем тип данных - диапазон. затем создаем во вкладке объекты переменную и задаем ей тип диапазон. real там отсутствует.5238352384
Надо активировать служебные свойства:
Настройка редактора > настройка среды > разное > установить галочку служебные свойства,
после этого все появится.
52404
да, и еще вопрос - есть ли контроль версий для masterscada? допустим если надо вдвоем проект разрабатывать.
Контроль версий есть, но вот совместное редактирование под вопросом.
Можно выложить проект в сетевое хранилище, но лично у меня что то не сложилось. Не хочет проект нормально открываться из сети.
То же самое если и в google drive выложить.
Вообще, в какой то из версий, у них проскочило хранилище postgres. Я думаю в будущем такая возможность, как совместное редактирование, может быть появится
52405
интересно у всех проекты Masterscada4D тормозят? посмотрел - проект съедает 5Гб оперативной памяти и это на этапе редактирования!!! - проект средних размеров. Пользовался альтернативными скадами там больше 1Гб не выходило.
Думаю у многих)
У меня небольшой проект, на 100 точек, ~ 1 Гб оперативной потребляет.
Но тормоза судя по всему у многих есть. Но это проект, рантайм нормально работает
Коллеги, может у кого есть красивый пример окна с трендами ? Что бы начало и конец архива, интервалы, шкала, все работало адекватно?
служебные свойства - гениально! большое спасибо, помогли решить вопрос.
кто-нибудь пробовал учетные записи прописывать? как это делать? кроме описания в хелпе ничего не нашел. Нужно создавать окно с ФИО и паролем +статус доступа - а как быть если нужно задать больше пользователей чем в шаблоне? да, и как обращаться к этому окну, оно должно идти сразу при запуске ведь.
кто-нибудь пробовал учетные записи прописывать? как это делать? кроме описания в хелпе ничего не нашел. Нужно создавать окно с ФИО и паролем +статус доступа - а как быть если нужно задать больше пользователей чем в шаблоне? да, и как обращаться к этому окну, оно должно идти сразу при запуске ведь.
В дереве системы создаются пользователи, так же можно их добавлять в программе
Важно помнить , что не все фб которые работают с пользователями, работают с теми которые создали в дереве.
Сам в таком ключе не работал, по этому будет интересно узнать Ваш результат и опыт :)
52414
52415
52416
52417
Minarion
10.12.2020, 08:43
Здравствуйте!
Столкнулся с проблемой. Есть Master OPC MultiProtocol, в нём SNMP протокол на 2,5к точек. Используется 1,4к точек SNMP с периодом опроса 1с. Этот OPC добавлен в MS4D. С периодом опроса в 1с. Иногда MS4D "забывает" опросить переменную. Пример: в SNMP протоколе значение меняется с 1 на 0. В MS4D всё корректно передалось. Затем значение меняется на 1, но MS4D не меняет это значение у себя на выходе, считая что там всё ещё 0, хотя в самом OPC сервере видно что значение уже изменилось. Руками проверил в редакторе в режиме исполнения на момент ошибок присваивания, но там всё ровно.
В чем может быть проблема?
да, работает в статическом режиме - фото отчет позже. Пока не разобрался как в режиме исполнения добавлять пользователей и задавать им статус. Удобство в указании прав доступа.
Юрий Горелый2
10.12.2020, 11:15
да, работает в статическом режиме - фото отчет позже. Пока не разобрался как в режиме исполнения добавлять пользователей и задавать им статус. Удобство в указании прав доступа.
ну к примеру
https://www.youtube.com/watch?v=DYeVsDw2rDs&t=142s
там можно прямо на том канале искать по интерисующей тематике.
Т.е. на самом канале если искать видео - почти по каждой теме есть маленький пример, который показывает как сделать то либо другое.
Юрий Горелый2
10.12.2020, 11:19
Здравствуйте!
Столкнулся с проблемой. Есть Master OPC MultiProtocol, в нём SNMP протокол на 2,5к точек. Используется 1,4к точек SNMP с периодом опроса 1с. Этот OPC добавлен в MS4D. С периодом опроса в 1с. Иногда MS4D "забывает" опросить переменную. Пример: в SNMP протоколе значение меняется с 1 на 0. В MS4D всё корректно передалось. Затем значение меняется на 1, но MS4D не меняет это значение у себя на выходе, считая что там всё ещё 0, хотя в самом OPC сервере видно что значение уже изменилось. Руками проверил в редакторе в режиме исполнения на момент ошибок присваивания, но там всё ровно.
В чем может быть проблема?
полторы тысячи точек в секунду это достаточно много для Скада системы.
возможно с ними что-то происходит и что-то анализируется. надо посмотреть насколько нагружен компьютер.
Minarion
14.12.2020, 10:36
полторы тысячи точек в секунду это достаточно много для Скада системы.
возможно с ними что-то происходит и что-то анализируется. надо посмотреть насколько нагружен компьютер.
Да, наверное железо не справляется. Поставил интервал 3 секунды, вроде работает.
Детский вопрос: получаю значение частоты вида 500. Надо получить значение вида 50,0. Получается только таким образом: InFreq:=REAL_TO_STRING(InputFreq/10). Но строковое значение не запихнуть в тренд. Как можно цифровом типе сделать?
Да, наверное железо не справляется. Поставил интервал 3 секунды, вроде работает.
Детский вопрос: получаю значение частоты вида 500. Надо получить значение вида 50,0. Получается только таким образом: InFreq:=REAL_TO_STRING(InputFreq/10). Но строковое значение не запихнуть в тренд. Как можно цифровом типе сделать?
А исходное число в int или в real ?
Если в real, то конвертировать не надо.
А если допусти в INT то надо сначала преобразовать само число в real, а потом делить
Параметр_2:=INT_TO_REAL(Параметр_1)/10;
А что бы число на экран выводилось в формате 50,0, необходимо на самом текстовом блоке вывода поставить формат F1.
В режиме отладке все равно останется число 50, а на экране будет 50.0
Скороспелов Андрей
14.12.2020, 13:45
На параметр можно повесить шкалу, где в формате прописать f1.
Minarion
15.12.2020, 09:23
Да, наверное железо не справляется. Поставил интервал 3 секунды, вроде работает.
Неть, не помогло. Через пять дней опять тоже самое. В OPC сервере 1, а в скада 0. И так 3 часа...
Нагрузка на проц не поднимается выше 60%, на память выше 40%.
Неть, не помогло. Через пять дней опять тоже самое. В OPC сервере 1, а в скада 0. И так 3 часа...
Нагрузка на проц не поднимается выше 60%, на память выше 40%.
А HHD что пишет, какая скорость записи ?
Уважаемые, гуру! Предоставьте пожалуйста, пример подключения преобразователя частоты(любого) в мастер скада 4д, буду очень благодарен..
AlekseyK
17.12.2020, 08:56
Добрый день, всем.
У меня тоже вопрос.
Заметил такой момент. После старта или обновления визуализации (страницы в браузере) текстовые поля имеют значение по умолчанию до тех пор, пока не обновится привязанная переменная.
Поясню на примере.
В проекте, у объекта есть параметр типа реал, который получает свое значение по OPC. Далее этот параметр передается на тренд и в текстовое поле. Меняется этот параметр очень редко.
Так вот. После старта визуализации любым способом или просто обновлении страницы с визуализацией в тренде я вижу актуальное значение этого параметра, а в текстовом поле 0, который прописан этому текстовому полю как значение по-умолчанию.
Как только я меняю значение параметра в редакторе - то наблюдаю изменения и в тренде и в текстовом поле - значение становится корректным.
Такое ощущение, что текстовое поле обновляется по событию - изменение параметра, к которому оно привязано.
Кто-нибудь сталкивался в подобной ситуацией?
P.S. По большой загрузке процессора и памяти.
На это очень сильно влияет отображение трендов. Например, если вы хотите показать на экране тренд за последние сутки, причем данные у вас снимались каждую секунду, то MS4D будет честно пытаться всунуть в вашу картинку 60сек*60мин*24часа=86 400 значений. Но по факту ваш тренд на экране отображает поле 500х300 точек. И фактически покажет только 500 точек по оси X, а никак не 86400. Для решения проблемы можно использовать параметр тренда - Step of Resampling (Шаг прореживания). Который можно формировать исходя из параметров тренда "Ширина" и "Интервал".
У меня есть переменная типа BLOB в БД MySQL это переменная HEX массивб вопрос какую переменную нужно завести в МастерСкаде , чтобы можно было ее увидеть, считал как STRING выглядит как каракули, может есть переменная для HEX массивов
Добрый день, всем.
У меня тоже вопрос.
Заметил такой момент. После старта или обновления визуализации (страницы в браузере) текстовые поля имеют значение по умолчанию до тех пор, пока не обновится привязанная переменная.
Поясню на примере.
В проекте, у объекта есть параметр типа реал, который получает свое значение по OPC. Далее этот параметр передается на тренд и в текстовое поле. Меняется этот параметр очень редко.
Так вот. После старта визуализации любым способом или просто обновлении страницы с визуализацией в тренде я вижу актуальное значение этого параметра, а в текстовом поле 0, который прописан этому текстовому полю как значение по-умолчанию.
Как только я меняю значение параметра в редакторе - то наблюдаю изменения и в тренде и в текстовом поле - значение становится корректным.
Такое ощущение, что текстовое поле обновляется по событию - изменение параметра, к которому оно привязано.
Кто-нибудь сталкивался в подобной ситуацией?
P.S. По большой загрузке процессора и памяти.
На это очень сильно влияет отображение трендов. Например, если вы хотите показать на экране тренд за последние сутки, причем данные у вас снимались каждую секунду, то MS4D будет честно пытаться всунуть в вашу картинку 60сек*60мин*24часа=86 400 значений. Но по факту ваш тренд на экране отображает поле 500х300 точек. И фактически покажет только 500 точек по оси X, а никак не 86400. Для решения проблемы можно использовать параметр тренда - Step of Resampling (Шаг прореживания). Который можно формировать исходя из параметров тренда "Ширина" и "Интервал".
Если переменная из дерева системы, то да, у меня так же.
Я все переменные всегда в объект кладу, а оттуда уже на экраны, и тогда нормально все.
ДУмается мне что помимо изменения числа, переменной из дерева системы, отслеживается еще изменение во времени.
А то что на тренде у вас есть, я думаю это как написано в руководстве : дорисовка констант или что то в этом духе.
Я поставил на опрос модуль ввода, с периодом опроса 10 сек.
Картина как вы и описали, но через объект, все нормально отображается.
52549
У меня есть переменная типа BLOB в БД MySQL это переменная HEX массивб вопрос какую переменную нужно завести в МастерСкаде , чтобы можно было ее увидеть, считал как STRING выглядит как каракули, может есть переменная для HEX массивов
А массив байт или ворд не подойдет? ( сам не работал, просто предположение), можно еще попробовать запихнуть ваш массив в программу с# Ю там возможностей больше
А массив байт или ворд не подойдет? ( сам не работал, просто предположение), можно еще попробовать запихнуть ваш массив в программу с# Ю там возможностей больше
Пробовал с байтом, массив пустой получается со string только есть только кракозябры всякие
Пробовал с байтом, массив пустой получается со string только есть только кракозябры всякие
Можно ещё попробовать преобразовать в string в самом запросе, кракозябры наверное от кодировки зависят.
Использовать что нибудь в сторону select cast() или to_char (utf8)
AlekseyK
18.12.2020, 11:02
Если переменная из дерева системы, то да, у меня так же.
Я все переменные всегда в объект кладу, а оттуда уже на экраны, и тогда нормально все.
ДУмается мне что помимо изменения числа, переменной из дерева системы, отслеживается еще изменение во времени.
А то что на тренде у вас есть, я думаю это как написано в руководстве : дорисовка констант или что то в этом духе.
Я поставил на опрос модуль ввода, с периодом опроса 10 сек.
Картина как вы и описали, но через объект, все нормально отображается.
52549
У меня тоже данные берутся с объекта, а не с системы. Повторюсь, стоит переменной немного измениться и она дальше верно будет отображаться в проекте.
52557
У меня тоже данные берутся с объекта, а не с системы. Повторюсь, стоит переменной немного измениться и она дальше верно будет отображаться в проекте.
52557
Попробуйте как вариант, изменить тип переменной, вместо REAL , поставить SYSTEM * LREAL PARAM , а потом вытащить значение на экран.
По крайней мере у меня так сделано и сразу отображается
Игорь Владимирович
23.12.2020, 10:21
Всем привет!
Подскажите пожалуйста по элементу XY , нужно отрисовать график из массива 30 на 2, глубина 30, в каждом 2 значения для X и Y соответственно.
никак не разберусь с перьями..
Возникает Ошибка: Внутренняя ошибка : Не найден файл/папка для загрузки : C:\User\AppData\Roaming\InSAT\MasterSCADA4DBeta\De bug_OpenStreetMapSODK_Kazan\Облачный сервис 1\cfg\netcore Источник: 'Система.Облачный сервис 1' [Id=365067] при любом коде на C# в чем может быть дело? проблема решена в новой версии скады
Добрый вечер. Буду благодарен если скажете как решить ошибку: при использовании панели вкладок - в ней указываем окно текстового ввода - привязываем к данному окну переменную с сохранением значения.
Все вроде отлично. Далее закрываем окно панели вкладок - норм. НО! - при повторном открытии окна панель вкладок - переменная магическим образом обновляется! Как это возможно?!
Точнее: в панели вкладок размещено окно - видимость и активность которого меняется от состояния переменной. Итак вопрос: при изменении статуса активности окна - обнуляются ли данные в нем? СПС.
Как проследить состояние переменной при исполнении - откуда приходит нулевое значение.
Добрый вечер. Буду благодарен если скажете как решить ошибку: при использовании панели вкладок - в ней указываем окно текстового ввода - привязываем к данному окну переменную с сохранением значения.
Все вроде отлично. Далее закрываем окно панели вкладок - норм. НО! - при повторном открытии окна панель вкладок - переменная магическим образом обновляется! Как это возможно?!
Точнее: в панели вкладок размещено окно - видимость и активность которого меняется от состояния переменной. Итак вопрос: при изменении статуса активности окна - обнуляются ли данные в нем? СПС.
А можете скриншот сделать, не до конца понятно о чем конкретно речь?
вопрос снят - проблема в многовложенности окон с режимом изменения видимости и активности, что приводило к обнулению переменных. странно конечно, активность вроде не должна обнулять...
сейчас поставил панель вкладок и напрямую туда все вбил. НО! Вкладок около 10 - и они не помещаются на дисплее в рабочем режиме, их перекидываем на две строчки - а вторую строчку не вид52721но, как с ней работать теперь?
при вставке в панель вкладок созданного в объекте внешнего окна - данные переменных не сохраняются после закрытия окна.
такое впечатление, что при повторном включении окна в переменную вносятся 0. само вставляемое окно находится как бы поверх окна вкладок, т.е. при смене вкладки его видно.
Кто-нибудь пробовал прописывать интерфейс смены пароля учетной записи пользователя? Составил окно, но пока до конца не разобрался как программно выполнить.52752
Minarion
28.12.2020, 14:48
А HHD что пишет, какая скорость записи ?
С дисками тоже норм. 5 рейд на SAS. Затыков нет, ничего не тормозит. Обновил исполнительную, все равно такая фигня...
С дисками тоже норм. 5 рейд на SAS. Затыков нет, ничего не тормозит. Обновил исполнительную, все равно такая фигня...
1. А где смотрите что нет перезаписи с условного примера? В режиме отладки в дереве, или же в базе данных или в трендах?
2. По поводу дисков, в целом, в моих синтетических тестах, когда я писал 1к переменных 10 раз в секунду, на любом пк работало хорошо.
3. Попробуйте использовать не один протокол OPC DA, а несколько, т.е. когда подключаетесь к opc серверу выбрать первую сотню , затем добавить еще один протокол и добавить еще пару сотен . Вы говорите про тысячи тэгов, а я модули ввода разбивал на несколько протоколов: 1 модуль - 1 протокол. Будет интересен результат, т.к. с таким большим числом тегов не работал.
Minarion
29.12.2020, 07:29
1. А где смотрите что нет перезаписи с условного примера? В режиме отладки в дереве, или же в базе данных или в трендах?
2. По поводу дисков, в целом, в моих синтетических тестах, когда я писал 1к переменных 10 раз в секунду, на любом пк работало хорошо.
3. Попробуйте использовать не один протокол OPC DA, а несколько, т.е. когда подключаетесь к opc серверу выбрать первую сотню , затем добавить еще один протокол и добавить еще пару сотен . Вы говорите про тысячи тэгов, а я модули ввода разбивал на несколько протоколов: 1 модуль - 1 протокол. Будет интересен результат, т.к. с таким большим числом тегов не работал.
1. Напрямую в БД. В режиме отладки проверял на косяк, ошибок нет.
2. Мне думается что если бы был косяк с диском, он бы начинал "тупить" намного раньше, и перезапуск РТ бы без перезагрузки бы не помогал.
3. Не хотелось бы, это переменные перетягивать в объект по новой...
Написал в ТП, скинул логи, пока не нашли косяк.
UPD Ан нет, сейчас посмотрел, опять косячит. Лечится только перезапуском ПК.
Minarion
29.12.2020, 14:10
И ещё вопрос: как UNIX время привести к виду ДД.ММ.ГГГГ?
И ещё вопрос: как UNIX время привести к виду ДД.ММ.ГГГГ?
А где там unix ? Время в БД filetime
Вот пример запроса для mssql
SELECT TOP (10000) [layer],
[archive_itemid],
[source_time] AS [Время в FILE TIME],
CASE WHEN [source_time] <= 1 THEN NULL
ELSE
DATEADD(ms, (([source_time]) / CAST(10000 AS bigint)) % 86400000,
DATEADD(day, ([source_time]) / CAST(864000000000 AS bigint) - 109207, 0))
END
AS [Время в TIME UTC 0] ,[status_code] ,
FORMAT ([value], 'f2') AS Value
FROM [MyBD].[dbo].[data_raw] WHERE [status_code] = 0
Для postgresql где то на форуме есть пример
Minarion
30.12.2020, 07:08
А где там unix ? Время в БД filetime
Время в unix получаю от внешнего источника.
Время в unix получаю от внешнего источника.
В st не знаю, но можно создать программу с#:
Единственный момент где INT в с#, в MS4 это DINT, 2 строчка
public override void Execute()
{
DT= DateTime.Now;
UnixTime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
dtConvert= ConvertFromUnixTimestamp(UnixTime);
static DateTime ConvertFromUnixTimestamp(double timestamp)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return origin.AddSeconds(timestamp);
}
}
52849
Evgeniy_D
31.12.2020, 00:26
После конвертации проекта созданного в версии 1.1 2018 года и запуска не работает настройка фона всех окон, как это недоразумение исправить?
Графика проекта большая и некоторые элементы по цвету сливаются с голубым фоном, на графиках с белым, цвет элементов предопределён техническим заданием.
При запуске родной среды проекта, регулировка цвета фона окна работает.
После конвертации проекта созданного в версии 1.1 2018 года и запуска не работает настройка фона всех окон, как это недоразумение исправить?
Графика проекта большая и некоторые элементы по цвету сливаются с голубым фоном, на графиках с белым, цвет элементов предопределён техническим заданием.
При запуске родной среды проекта, регулировка цвета фона окна работает.
Что значит "не работает настройка фона"? В редакторе цвета невозможно задать? Или в рантайме цвета некорректно отображаются? И в каком формате цвета заданы, в HEX или RGBa? Попробуйте цвета переписать в RGBa.
Evgeniy_D
02.01.2021, 18:30
В проекте фон окон выбирается с помощью кнопок выбора цвета далее через переменные SolidColorType в заливку фона. Пришлось удалить связи и по новой создать, всё работает. Кстати в режиме исполнения значения переменных SolidColorType отображаются без закрывающей скобки типа = rgba(40,41,42,1
Добрый день! Подскажите пожалуйста как реализовать сохранение массива данных в файл и чтение данных из файла.
Есть потребность читать уставки (порядка 400 штук формата real) из внешнего файла (по нажатию кнопки, непостоянно) и иногда вносить изменения в файл.
На данный момент нашел только запись строки в файл и чтение строки из файла - но как распознать значения из строки (получается длинный набор чисел без привязки к переменным), надо писать какую-то отдельную программу
- может этот вопрос уже решен? Заранее спасибо за ответ.
Кто работал с XMLString, что это такое, в хелпах нет информации (странный подход у разработчиков - писать блоки и не давать на него инструкций в хелпе).
nub через массив строк не пробовали? з.ы. не работал с MasterScada, но так как она поддерживает C# если не ошибаюсь, то можно писать в файл переменные в виде массива строк при помощи
System.IO.File.WriteAllLines
и читать при помощи
System.IO.File.ReadAllLines
в другой системе я пишу файл вида
[63, 700]
[64, 700]
[451, 53]
[452, 53,5]
[453, 46]
где первая цифра это номер канала, а вторая это значение
пока не нашел в Masterscada4D поддержки C# или С++, кто-нибудь видел? через поиск в хелпах не находит. в инете информация есть только по третьей скаде.
пока не нашел в Masterscada4D поддержки C# или С++, кто-нибудь видел? через поиск в хелпах не находит. в инете информация есть только по третьей скаде.
Шарп в 1.2.11 появился, в объект добавляется "Программа C#". По плюсам был вебинар https://www.youtube.com/watch?v=gXwOYFsKJ2c
Большое спасибо! этот вебинар нечто - из "+" информативность - однако нет описания что и от куда берут, к примеру что за masterplcap? сам проект к видео не приложен.
nub тогда наверное вам проще обновиться до версии, где есть C#, я правда не знаю всех механизмов, как в нем писать скрипты (программы) на C# по этому не подскажу правильность кода, но там будет несколько строк всего и привязать это к кнопкам или другим элементам интерфейса.
в моем случае формула чтения значений из файла находится в самом первом канале БД, а записи в самом последнем и если значения менялись в процессе, то происходит запись в файл а при перезагрузке происходит чтение, но можно привязать и к кнопке интерфейса или даже внешней команде.
Добрый день! Подскажите пожалуйста как реализовать сохранение массива данных в файл и чтение данных из файла.
Есть потребность читать уставки (порядка 400 штук формата real) из внешнего файла (по нажатию кнопки, непостоянно) и иногда вносить изменения в файл.
На данный момент нашел только запись строки в файл и чтение строки из файла - но как распознать значения из строки (получается длинный набор чисел без привязки к переменным), надо писать какую-то отдельную программу
- может этот вопрос уже решен? Заранее спасибо за ответ.
Кто работал с XMLString, что это такое, в хелпах нет информации (странный подход у разработчиков - писать блоки и не давать на него инструкций в хелпе).
XMLString в справке есть, по крайней мере в последней сборке, попробуйте обновиться, там и c# будет.
Что бы распознать, необходимо что бы в файле был разделитель, если он есть то можно что то распарсить
VladGC самый простой способ через Словарь массив строк командами, что написал выше. Парсить ничего не надо тогда специально.
как обновиться в Masterscada4D? в меню не нашел - текущая версия 1.2.9 - поддержка внешнего кода у ФБ st есть как в вебинаре, только очень сложный алгоритм с подгрузкой библиотек - проект пока не удалось сделать.
будет ли эл. ключ работать после обновления?
как обновиться в Masterscada4D? в меню не нашел - текущая версия 1.2.9 - поддержка внешнего кода у ФБ st есть как в вебинаре, только очень сложный алгоритм с подгрузкой библиотек - проект пока не удалось сделать.
будет ли эл. ключ работать после обновления?
Бесплатно можно обновляться год с момента покупки, можно написать в тп , что бы дали ссылку на скачивание новой версии.
Затем надо переустановить как RT так и DT
Только надо все забекапить, что бы случайно не сломать как проект так и архивы и прочее
ясно. большое спасибо!!!
попробую сначала через file to string прочитать txt файл, затем string - на части (с помощью функций работы со строками) и присвоить переменным; если не пойдет, обновлюсь.
Кстати, а что будет в Masterscada4d при передачи данных командой file to string размер данных файла будет больше объема переменной типа string (к примеру в txt файле 1000 символов - и как теперь их прочитать все)
VladGC самый простой способ через Словарь массив строк командами, что написал выше. Парсить ничего не надо тогда специально.
FileToString читает в одну строку, а ReadAllLines читает в массив строк, которые надо будет все равно разбить на столбцы,
Получается что уходит одна итерация
ясно. большое спасибо!!!
попробую сначала через file to string прочитать txt файл, затем string - на части (с помощью функций работы со строками) и присвоить переменным; если не пойдет, обновлюсь.
Думаю стоит обновиться или подождать версии 1.2.12 , должна скоро выйти по идее..
По крайне мере, как предложил melky, может действительно лучше на с#, примеров в сети много, да и возможности побогаче
Кстати, а что будет в Masterscada4d при передачи данных командой file to string размер данных файла будет больше объема переменной типа string (к примеру в txt файле 1000 символов - и как теперь их прочитать все)
Все норм будет(одна большая строка):
53019
VladGC самый простой способ через Словарь массив строк командами, что написал выше. Парсить ничего не надо тогда специально.
FileToString читает в одну строку, а ReadAllLines читает в массив строк, которые надо будет все равно разбить на столбцы,
Получается что уходит одна итерация
Попробовал ReadAllLines с примером из https://www.cyberforum.ru/csharp-beginners/thread1736667.html
class Program
{
static void Main(string[] args)
{
string[] lines = File.ReadAllLines(@"D:\input.txt");
int[,] num = new int[lines.Length, lines[0].Split(' ').Length];
for (int i = 0; i < lines.Length; i++)
{
string[] temp = lines[i].Split(' ');
for (int j = 0; j < temp.Length; j++)
num[i, j] = Convert.ToInt32(temp[j]);
}
Параметр_1=num;
}
}
Ошибка: CS0029: Не удается неявно преобразовать тип "int[*,*]" в "int[]".
Не удается неявно преобразовать тип "int[*,*]" в "int[]"
Хотя сама переменная в MasterScada с типом ARRAY [*,*] OF DINT
В принципе добить можно до рабочего состояния, по крайней мере все читает как надо
ясно. большое спасибо!!!
попробую сначала через file to string прочитать txt файл, затем string - на части (с помощью функций работы со строками) и присвоить переменным; если не пойдет, обновлюсь.
Думаю стоит обновиться или подождать версии 1.2.12 , должна скоро выйти по идее..
По крайне мере, как предложил melky, может действительно лучше на с#, примеров в сети много, да и возможности побогаче
Кстати, а что будет в Masterscada4d при передачи данных командой file to string размер данных файла будет больше объема переменной типа string (к примеру в txt файле 1000 символов - и как теперь их прочитать все)
Все норм будет(одна большая строка):
53020
VladGC , эээ, пожалуй я приведу весь свой код, делал очень давно и возможно тут фокусы с Linq. я это делал в RapidScada, по этому не знаю, как эти же механизмы использовать в MasterScada, но может поможет понять и сделать как вам нужно.
У меня это три "формулы" - скрипта.
Чтение переменных - SetVal здесь встроенная функция Scada системы записать в канал № значение SetVal(1000, 23.6) пример
bool initRet = false;
double LoadRet()
{
if (!initRet)
{
if (System.IO.File.Exists(pathRet))
{
string[] RetLoad = System.IO.File.ReadAllLines(pathRet, Encoding.UTF8);
for (int i = 0; i < RetLoad.Length; i++)
{
SetVal(Convert.ToInt32(RetLoad[i].Substring(RetLoad[i].IndexOf("[")+1, RetLoad[i].IndexOf(", ")-(RetLoad[i].IndexOf("[")+1)),10),Convert.ToDouble(RetLoad[i].Substring(RetLoad[i].IndexOf(", ")+2,RetLoad[i].IndexOf("]")-(RetLoad[i].IndexOf(", ")+2))));
}
initRet = true;
}
}
return Convert.ToDouble(initRet);
}
Объявление переменной как Retain
string pathRet = @"/home/pi/scada/ScadaServer/Config/retain.txt";
Dictionary<int, double> DictRet = new Dictionary<int, double>();
public double Retain (double ret)
{
DictRet[CnlNum] = ret;
return ret;
}
Запись в файл
double SaveRet()
{
string[] RetSave = new string[DictRet.Count];
bool eq = false;
for (int i = 0; i < DictRet.Count; i++)
{
RetSave[i] = Convert.ToString(System.Linq.Enumerable.ElementAt( DictRet, i));
}
if (!System.IO.File.Exists(pathRet))
{
System.IO.File.WriteAllLines(pathRet, RetSave, Encoding.UTF8);
return 0;
}
else
{
string[] RetOld = System.IO.File.ReadAllLines(pathRet, Encoding.UTF8);
eq = System.Linq.Enumerable.SequenceEqual(RetOld, RetSave);
if (!eq)
{
System.IO.File.WriteAllLines(pathRet, RetSave, Encoding.UTF8);
}
}
return Convert.ToDouble(eq);
}
Все таки есть преобразования в строку при записи в файл и обратное преобразование в числа int и double
Скобочки [ и ] это я оказывается для красоты замутил что ли :) хотч не, это скорее особенность какого-то механизма при записи.
При записи я не парился с конвертированием Key и Value словаря, а сделал это через Linq. Обратно уже по одному. Вполне возможно можно обрезать лишние скобки и разделить строку и как то быстрее сделать при чтении но как-то особо не парился...
Здравствуйте!
Скачал бесплатную одночасовую версию Мастерскада4Д1.2.Формирую отчёт с помощью функции ReportFB. Старался сделать всё, как написано в хелпе ПО. Блок при запуске Execute выдаёт ошибку Can't parse response.
Подскажите пожалуйста, что это и как исправить. Или где посмотреть: гугл и хелп не находят.
Здравствуйте!
Скачал бесплатную одночасовую версию Мастерскада4Д1.2.Формирую отчёт с помощью функции ReportFB. Старался сделать всё, как написано в хелпе ПО. Блок при запуске Execute выдаёт ошибку Can't parse response.
Подскажите пожалуйста, что это и как исправить. Или где посмотреть: гугл и хелп не находят.
Дайте скриншот программы и отчета, что бы глянуть как оно выглядит
Есть документация от производителя самого отчета, но это не ваш случай
https://www.stimulsoft.com/ru/documentation/online/user-manual/
Коллеги, приветствую! Есть MasterSCADA 4D + ОВЕН110 MS4
Есть внешний канал modbus связанный с переменной InOut BOOL (свойство сохранять - выключено).
По приходу 1 выполняется некая подпрограмма, после ее выполнения регистр нужно обнулить. Никак не получается этого сделать, упрощенный пример:
R_TRIG_5(CLK:= MB_ALL_OFF );
IF R_TRIG_5.Q THEN
MB_ALL_OFF:= FALSE; (*Для сквозных переменных отключить свойство сохранять*)
END_IF
Переменная сбрасывается и сразу возвращается в TRUE.
Пробовал добавлять локальную промежуточную переменную и по ней в следующем цикле обнулять, эффект тот же.
Вероятно я упускаю что-то простое, тыкните носом пожалуйста.
Коллеги, приветствую! Есть MasterSCADA 4D + ОВЕН110 MS4
Есть внешний канал modbus связанный с переменной InOut BOOL (свойство сохранять - выключено).
По приходу 1 выполняется некая подпрограмма, после ее выполнения регистр нужно обнулить. Никак не получается этого сделать, упрощенный пример:
R_TRIG_5(CLK:= MB_ALL_OFF );
IF R_TRIG_5.Q THEN
MB_ALL_OFF:= FALSE; (*Для сквозных переменных отключить свойство сохранять*)
END_IF
Переменная сбрасывается и сразу возвращается в TRUE.
Пробовал добавлять локальную промежуточную переменную и по ней в следующем цикле обнулять, эффект тот же.
Вероятно я упускаю что-то простое, тыкните носом пожалуйста.
Это во внешних каналах или в протоколе?
Не до конца понятно где хотите обнулить, в протоколе или программе?
Это во внешних каналах или в протоколе?
Не до конца понятно где хотите обнулить, в протоколе или программе?
Через внешний канал модбас приходит 1, к каналу привязана переменная с типом InOut "MB_ALL_OFF".
По тригеру на этой переменной в программе исполняется код, в конце него обнуляю переменную. Что бы внешнее устройство увидело 0 в регистре.
Соответственно переменная обнуляется, но на следующем цикле она снова 1. Ощущение, что она не записывается в регистр.
Через внешний канал модбас приходит 1, к каналу привязана переменная с типом InOut "MB_ALL_OFF".
По тригеру на этой переменной в программе исполняется код, в конце него обнуляю переменную. Что бы внешнее устройство увидело 0 в регистре.
Соответственно переменная обнуляется, но на следующем цикле она снова 1. Ощущение, что она не записывается в регистр.
Тогда получается что это самое внешнее устройство опять посылает 1
Опять же не понятно,
Где и как идет опрос.
В masterscada4D стоит протокол modbus, по нему читаете регистры, которые в плк 110 находятся во внешних каналах?
53682
Тогда получается что это самое внешнее устройство опять посылает 1
Опять же не понятно,
Где и как идет опрос.
В masterscada4D стоит протокол modbus, по нему читаете регистры, которые в плк 110 находятся во внешних каналах?
53682
Проверял через qmodmaster, из него посылал единицу на нужный внешний канал плк 110 через ModbusTCP.
Протокол Modbus в данном конкретном примере исключил, да и вообще выкинул все. Оставил встроенный DI и DO и один внешний канал.
53684
Проверял через qmodmaster, из него посылал единицу на нужный внешний канал плк 110 через ModbusTCP.
Протокол Modbus в данном конкретном примере исключил, да и вообще выкинул все. Оставил встроенный DI и DO и один внешний канал.
53684
Попробуйте создать переменную вне программы, либо в узле либо в объеке, далее перетащите ее во внешние каналы, а затем связать на чтение и запись в программе53698
Попробуйте создать переменную вне программы, либо в узле либо в объеке, далее перетащите ее во внешние каналы, а затем связать на чтение и запись в программе53698
И правда, так работает. Спасибо огромное за помощь!
Интересно, с чем это связано.
Alexey8723
28.03.2021, 22:51
Здравствуйте коллеги. Подскажите пожалуйста. Не загружаются узлы в MasterScada 4D из MasterOPC Universal Modbus Server через протокол MQTT. В OPC MQTT клиент там где нужно указать IP-адрес, указываю адрес брокера, причем в MS4D при нажатии кнопки загрузить якобы происходит загрузка, написано что загрузка завершена, но теги не отображаются. Кто сталкивался помогите пожалуйста.
asutp2003
13.04.2021, 14:48
Если ещё актуально, то в МС4Д есть протокол MQTT и ни какой ОРС уже не нужен.
Minarion
29.04.2021, 12:18
Здравствуйте!
Вроде уже задавал этот вопрос тут, но может кто-то уже поразбирался с HTTP клиентом.
Вопрос такой: на выходе получается строка с кучей строк. Как её разбить на составляющие?
Например:
{
"ServerState": "Active",
"ArchiveSizeMb": 26720,
"ArchiveWriteSpeedMBps": 0,
"ArchiveDepthDays": 48.95885554461342,
"IsArchiveOverload": false,
"ArchiveErrors": {
"ErrorDb": false,
"ErrorFrameSaving": false,
"ErrorAllDrives": null,
"ErrorFramesShrinked": false,
"BadSmartStatus": false
}
}
Можно через функцию работы со строками, но как мне показалось это весьма неудобно и не гибко.
Есть ещё какие-либо варианты?
Minarion через массив строк и в список например
Здравствуйте!
Вроде уже задавал этот вопрос тут, но может кто-то уже поразбирался с HTTP клиентом.
Вопрос такой: на выходе получается строка с кучей строк. Как её разбить на составляющие?
Например:
{
"ServerState": "Active",
"ArchiveSizeMb": 26720,
"ArchiveWriteSpeedMBps": 0,
"ArchiveDepthDays": 48.95885554461342,
"IsArchiveOverload": false,
"ArchiveErrors": {
"ErrorDb": false,
"ErrorFrameSaving": false,
"ErrorAllDrives": null,
"ErrorFramesShrinked": false,
"BadSmartStatus": false
}
}
Можно через функцию работы со строками, но как мне показалось это весьма неудобно и не гибко.
Есть ещё какие-либо варианты?
У вас приходит ответ в формате JSON. В справке есть статья "Соответствие элементов JSON и MasterSCADA 4D" (Проект в MasterSCADA 4D - Справочная информация). Если коротко, то вам в библиотеке необходимо создать собственный тип данных (в вашем случае это будет структура), а затем преобразовать его в строку при помощи стандартной функции. Как результат, ваша структура наполнится значениями, с которыми дальше работаете как с отдельными переменными.
54877
54878
Minarion
29.04.2021, 14:31
У вас приходит ответ в формате JSON. В справке есть статья "Соответствие элементов JSON и MasterSCADA 4D" (Проект в MasterSCADA 4D - Справочная информация). Если коротко, то вам в библиотеке необходимо создать собственный тип данных (в вашем случае это будет структура), а затем преобразовать его в строку при помощи стандартной функции. Как результат, ваша структура наполнится значениями, с которыми дальше работаете как с отдельными переменными.
54877
54878
Спасибо Вам большое!
Доброго времени суток .
Добился работы Playsound от кнопки с экрана , но никак не могу добиться от BOOL значения true/false с аварий . Может есть какой то ньанс ?54949
Скороспелов Андрей
12.05.2021, 12:23
Что значит "добиться от BOOL значения true/false с аварий"?
Заместо кнопки , пытался вставить булевую переменную ( авария в программе ) , но звука нет . На скриншоте видно там висит в "play" СО первый порог для теста .
Скороспелов Андрей
14.05.2021, 11:56
А какая версия? Какой браузер? Я знаю, что в хроме нужно разрешать воспроизведение звука: chrome://settings/content/sound
Попробовал спустя неделю еще раз сделать ... и все заработало , мистика .
Minarion
17.05.2021, 08:24
Здравствуйте!
Вопрос по протоколу Postgres.
Возможно ли в запросе, а конкретно там где прописывается команда, завести строковый параметр из ST программы? Пробовал, но до команды ничего не доходит.
Здравствуйте!
Вопрос по протоколу Postgres.
Возможно ли в запросе, а конкретно там где прописывается команда, завести строковый параметр из ST программы? Пробовал, но до команды ничего не доходит.
Возможно, для этого в запрос добавляете выход АО. Даете ему тип string
Далее вставляете конструкцию в тело команды.
А из программы в этот строковый АО подаете свой текст
Minarion
18.05.2021, 09:15
3. Попробуйте использовать не один протокол OPC DA, а несколько, т.е. когда подключаетесь к opc серверу выбрать первую сотню , затем добавить еще один протокол и добавить еще пару сотен . Вы говорите про тысячи тэгов, а я модули ввода разбивал на несколько протоколов: 1 модуль - 1 протокол. Будет интересен результат, т.к. с таким большим числом тегов не работал.
Фактически прошло полгода.
Разделил на 4 протокола, увеличил интервал опроса до 10 секунд. Не помогло.
ТП пишет что заявка в работе, но никакой конкретики не даёт. Последнее время по этой проблеме отвечают на одно письмо из трех.
Такое себе.
Похоже что связка MasterOPC + MS4D ещё весьма сыровата...
Добрый день!
Есть ли аналог элемента "Выбор изображения" в этой скаде?
Здравствуйте. Впервые начал работать со Скадой. До этого вообще никакого опыта в работе со скадами не было. Имеем - МастерСкада 4Д, плк B&R X20CP3585. Нужно передать между ними огромные массивы данных, в общей сложности около 8000 тэгов по Modbus TCP. Самый большой массив данных составляет около 600 DINT. Вопрос - как это сделать с наименьшими затратами? Можно ли настроить каналы передачи данных таким образом, чтобы не прописывать каждый канал по отдельности, а сразу задать канал передачи данных, размером, скажем, в 600 DINT?
Второй вопрос - знаю, что эту проблему можно решить с помощью некого OPC-сервера. Что это такое и как это сделать? Прощу прощения за глупые вопросы, никогда с этим не сталкивался, сроки поджимают.
Modbus ограничен 256 байтами или около того, если не ошибаюсь. Соответственно у вас будет несколько запросов.
не прописывать не получится.
Можно сделать БЕЗ некого ОРС, любая Scada со встроенным Modbus драйвером. Таких есть несколько, от бесплатных до платных.
Это к вопросу выбора MasterScada, да еще 4Д
Юрий Горелый2
22.06.2021, 17:24
в мастерскаде есть импорт карты модбас регистров.
MrLonely импорт с бумажной документации от производителя? ну просто круто :)
Koozmidg
23.06.2021, 10:53
Здравствуйте.
У меня сейчас архив данных (БД SQLite) пишется в один файл (data.db). Подскажите, как сделать, чтобы архивная база данных заново создавалась с нужной мне периодичностью. Например, каждые сутки, или каждую неделю. Не удаляя при этом старую
SCADAMaster4D
23.06.2021, 14:52
Добрый день.
На данный момент такой возможности нет. Можете написать этот вопрос на почту support.ms4d@masterscada.ru, чтобы обсудить варианты решения задачи?
Minarion
21.07.2021, 08:09
Здравствуйте!
У кого-то есть опыта использования СУБД Firebird как источника данных в MS4D? Только через скрипты lua в ModbusOPC Server?
Здравствуйте! Необходимо отображение структуры здания в виде дерева, и переход на окно элемента при выборе его в дереве. В палитре есть папка Контролы, где имеется элемент Дерево одиночного выбора. Прошу знающих людей уточнить - это то что нужно? К сожалению справка на него отсутствует, как пользоваться не понятно, поиск по интернет так же результатов не дает. Есть ли еще варианты разворачиваемых/сворачиваемых списков?
Здравствуйте! Необходимо отображение структуры здания в виде дерева, и переход на окно элемента при выборе его в дереве. В палитре есть папка Контролы, где имеется элемент Дерево одиночного выбора. Прошу знающих людей уточнить - это то что нужно? К сожалению справка на него отсутствует, как пользоваться не понятно, поиск по интернет так же результатов не дает. Есть ли еще варианты разворачиваемых/сворачиваемых списков?5646956470
На вход контрола дерева одиночного/множественного подаете строку в формате JSON. Дерево его отображает.
Получить результат который вы выбрали можно из параметра "Значения"
Тип источника custom
56468
VladGC, спасибо за ответ, еще небольшое уточнение - на вложенных Вами скринах изображены страницы справки MS4D. Когда я пытаюсь получить справку по Дереву одиночного или множественного выбора, то у меня справочная система выдает ошибку -
5647156472
Версия MS4D 1.2.13.2387. Возникает вопрос - какова ваша версия?
SCADAMaster4D
09.08.2021, 14:29
Добрый день.
В 1.2.14 в справку добавили описание данных контролов.
VladGC, спасибо за ответ, еще небольшое уточнение - на вложенных Вами скринах изображены страницы справки MS4D. Когда я пытаюсь получить справку по Дереву одиночного или множественного выбора, то у меня справочная система выдает ошибку -
5647156472
Версия MS4D 1.2.13.2387. Возникает вопрос - какова ваша версия?
У меня версия 1.2.13.23064,
Эту справку можно открыть если есть по JSON или источник данных для дерева
Добрый день.
В 1.2.14 в справку добавили описание данных контролов.
Добавьте тогда это описание в Руководство пользователя MasterSCADA 4D.pdf, что на сайте https://masterscada.ru/
Добрый день.
В 1.2.14 в справку добавили описание данных контролов.
Планирует ли МПС СОФТ создать базовый, продвинутый курс с задачами на платформе stepik? Примерно такой https://stepik.org/course/97143/info .
SCADAMaster4D
11.08.2021, 14:06
Добрый день.
На данный момент курс находится в разработке.
Добрый день.
На данный момент курс находится в разработке.
Круто! Курс по MasterSCADA4D?
SCADAMaster4D
12.08.2021, 16:06
Да, по ней.
У меня несколько типов стандартных схем испытаний, хочу сделать их Примитивы - Картинка - (выпадающий список стандартных схем)
В хэлпе очень "сухо" об этом написано, прошу помощи. Спасибо!
"Если требуется, чтобы в клиенте визуализации отображались разные изображения, то следует связать свойство с параметром проекта, и настроить конвертер значений, т.е. выбрать необходимый тип конвертации, и выбрать для каждой опорной точки свой медиа-ресурс:..."
SCADAMaster4D
18.08.2021, 12:12
У меня несколько типов стандартных схем испытаний, хочу сделать их Примитивы - Картинка - (выпадающий список стандартных схем)
В хэлпе очень "сухо" об этом написано, прошу помощи. Спасибо!
"Если требуется, чтобы в клиенте визуализации отображались разные изображения, то следует связать свойство с параметром проекта, и настроить конвертер значений, т.е. выбрать необходимый тип конвертации, и выбрать для каждой опорной точки свой медиа-ресурс:..."
Нужно свойство Изображение картинки связать с параметром, который будет управлять сменой изображений. Потом настроить конвертер значений, в справке ссылка на статью есть. Там в источнике выбирается значение параметра, а в источнике нужное изображение.
Юрий Горелый2
18.08.2021, 12:44
У меня несколько типов стандартных схем испытаний, хочу сделать их Примитивы - Картинка - (выпадающий список стандартных схем)
В хэлпе очень "сухо" об этом написано, прошу помощи. Спасибо!
"Если требуется, чтобы в клиенте визуализации отображались разные изображения, то следует связать свойство с параметром проекта, и настроить конвертер значений, т.е. выбрать необходимый тип конвертации, и выбрать для каждой опорной точки свой медиа-ресурс:..."
ну если не сухо а с водой, тогда вот https://www.youtube.com/watch?v=ENQcuW7BEq8 . А так всё описано коротко и по делу)
Юрий Горелый, спасибо за быстрый и наглядный пример!)
Есть два ПК на одном среда разработки, другой впоследствии станет АРМ-ом (на нем OPC_MODBUS_SERVER и MasterSCADA 4D RT32). Выгрузка конфигурации и загрузка ее в среду исполнения - успешно. Но в дальнейшем или -1 или 100 ошибки. IP узла - ПК-АРМ... В чем моя ошибка???
petr2off
08.09.2021, 06:28
Добрый день.
Есть ли возможность задания в проекте MS4D глобальных символьных констант. Скажем из контроллера я получаю по Modbus регистр состояния задвижки, и например бит 1 означает, что задвижка открыта, а бит 2 то что закрыта. Соответственно хочется мне 2 символьные константы завести S_Open = 0x0001 и S_CLOSE = 0х0002, с разгону я такого механизма не увидел (а в Isagraf, например он есть).
Вадим Тюшкевич
09.09.2021, 09:35
Добрый день.
Есть ли возможность задания в проекте MS4D глобальных символьных констант. Скажем из контроллера я получаю по Modbus регистр состояния задвижки, и например бит 1 означает, что задвижка открыта, а бит 2 то что закрыта. Соответственно хочется мне 2 символьные константы завести S_Open = 0x0001 и S_CLOSE = 0х0002, с разгону я такого механизма не увидел (а в Isagraf, например он есть).
Если правильно понимаю вопрос, в объекте "АРМ" есть папка "Параметры", это для глобальных параметров
Прошу совета. В Среде разработки создан проект, запускаю его, с АЦП по СОМу данные поступают, графики строит, все устраивает. Выгружаю данную конфигурацию для загрузки ее в MASTER SCADA 4D RT1_2 (все на одном ПК, АРМ 127.0.0.1). Запускаю все процессы – ярлык OPC сервера подгружается, АЦП начинает мигать, запускаю клиент и вижу белое окно.
SCADAMaster4D
10.09.2021, 12:42
Добрый день.
Уточните, используется OPC-сервер и протокол OPC DA?
в OPC-сервере MasterOPC Universal Modbus Server описал конфигурацию своего АЦП (данные вижу - GOOD) и через протокол OPC-DA подтягиваю их в среду разработки MasterScada 4D.
SCADAMaster4D
10.09.2021, 13:13
Возможно неправильно настроен DCOM. Надо проверить dcomcnfg - https://www.screencast.com/t/Snqg5KMRFi
Вызовите меню "Выполнить" (win + R). Выполните команду dcomcnfg. Дальше Службы компонентов - Компьютеры - Мой компьютер - Настройка DCOM. Там найдите нужный OPC сервер и в свойствах на вкладке Удостоверение установите Текущий пользователь.
Текущий пользователь на всех серверах InSat, брендмауэр отключен, антивируса нет. В логах из Рабочей папки RT вижу свои значения от АЦП (C:\ProgramData\MPSSoft\MasterSCADA4DRT1_2\Server\ log\0)
7963663 [09:48:32.740Z] |5924| In file pin.cpp at line 17 2021.09.10 09:48:32.925'925 : 78662, write(8.562024116516114, 2021.09.10 09:48:32.000'000, 0x0)... экран клиента RT по прежнему белый (и браузера) :(
Проблема решена, все оказалось банально из-за разных версий Среды разработки и RT. Сначала все заработало дома (пришлось упереть с работы весь стенд) подозрение пало на версию Windows, но затем Юрий Горелый подсказал обратить внимание на версии инсталяторов MasterScada4D. Спасибо Юрию, опять:)
PS где можно подсматривать актуальность обновлений???
СмирноваЛС
15.09.2021, 13:11
Добрый день, поиском ничего не нашлось, а вопрос вроде простой.
Как в МС квитировать все существующие сообщения об авариях изменением одной переменной?
По факту на пульте управления кнопка "Квитировать всё".
SCADAMaster4D
15.09.2021, 14:06
В самом журнале есть кнопка квитировать все.
Если она не удобна, то можно создать свой элемент и на него повесить "вызвать метод".
57007
СмирноваЛС
15.09.2021, 14:30
Про журнал я в курсе, это не подходит.
Мне необходимо привязать "квитировать все" именно к изменению переменной, без действия оператора с элементами видеокадра. Я не точно выразилась - кнопка на пульте - физическая, я получаю данные о нажатии по модбас от контроллера.
SCADAMaster4D
15.09.2021, 14:52
Можете создать триггер окна по проверке параметра вызывать квитирование, статья в справке "HMI. Действия по условию". Или же можете использовать ФБ EventsCounter и с его помощью квитировать сообщения по заданному фильтру, статья в справке "EventsCounter".
СмирноваЛС
15.09.2021, 16:02
57010
Еще вопрос) Как в варианте "HMI. Действия по условию" в "элемент" вызова метода через триггер подцепить мой журнал? Я раньше связывала события в окне элементы, а тут они на разных вкладках.
SCADAMaster4D
16.09.2021, 11:02
Раскрыть полное дерево и в нём найти элемент. Раскрывается по кнопке слева от поля фильтра над деревом системы.
СмирноваЛС
16.09.2021, 12:41
Спасибо за ответы, всё нашла и оба варианта попробовала)
https://recordit.co/EGjiyUEEbJ замечательный пример для "Таблица данных" но.... самое интересное не показали. С помощью генератора Синуса и Пилы пытаюсь повторить пример и подать на вход массиву данные, но в таблице две колонки с нулями. Когда к Параметру притягиваю вручную на вход синус и пилу получаю ошибки "Параметр имеет больше одного отношение передачи данных".... "Не найдена функция конвертации из типа LREAL в тип Локальная.Массив_1". Можно коротенький видео-пример до с имитацией входа с Генератора. Спасибо:)
https://recordit.co/EGjiyUEEbJ замечательный пример для "Таблица данных" но.... самое интересное не показали. С помощью генератора Синуса и Пилы пытаюсь повторить пример и подать на вход массиву данные, но в таблице две колонки с нулями. Когда к Параметру притягиваю вручную на вход синус и пилу получаю ошибки "Параметр имеет больше одного отношение передачи данных".... "Не найдена функция конвертации из типа LREAL в тип Локальная.Массив_1". Можно коротенький видео-пример до с имитацией входа с Генератора. Спасибо:)
Покажите скриншот как на вход массиву подаете данные ?
Вместо Синуса и Пилы подаю на вход реальные данные с двух каналов АЦП. Структуру, Массив и Параметр сделал аналогично видеомануалу см. ссылку выше. Далее на Канал_1 вручную притягиваю данные ch1 (Value) и получаю ошибку ...
Недопустимый тип данных для связи с Система.АРМ 1.Протоколы.OPC DA.COM port.AIK 12_2.ch1.Вход.Value
57399
Если притягиваю Параметр Канал 1 - получаю ошибку конвертации
57400
Вместо Синуса и Пилы подаю на вход реальные данные с двух каналов АЦП. Структуру, Массив и Параметр сделал аналогично видеомануалу см. ссылку выше. Далее на Канал_1 вручную притягиваю данные ch1 (Value) и получаю ошибку ...
Недопустимый тип данных для связи с Система.АРМ 1.Протоколы.OPC DA.COM port.AIK 12_2.ch1.Вход.Value
57399
Так делать нельзя, если хотите через связи передавать значение, то надо поставить галочку " отображать элементы в дереве ":
57402
А если используете глобальные переменные, то проще сделать так:
В объекте создаете программу, далее на выходе программы создаете нужный массив структур.
В программе присваиваете нужному номеру массива нужную переменную.
57403
Так делать нельзя, если хотите через связи передавать значение, то надо поставить галочку " отображать элементы в дереве ":
57402
А если используете глобальные переменные, то проще сделать так:
В объекте создаете программу, далее на выходе программы создаете нужный массив структур.
В программе присваиваете нужному номеру массива нужную переменную.
57403
Еще можно сделать так:
В протоколе создаете программу, собираете нужные переменные, и связываете сразу с массивом структур, далее его целиком передаете куда надо
57404
Спасибо за ответ.
С описанием Структуры возникают сложности. Имею 12-канальное АЦП и каждый из каналов мне присылает значение внутри которого (Value, SourceTime и StatusCode) размер массива динамический. В итоге хочу добиться таблицы (Время 1, Значение 1, Время 2, Значение 2 и т.д).
PS
В мануале MS4D по запросу "массивы структур в окнах" есть пример, но настолько замудрённый что на стадии Структуры у меня и Мануала уже расхождения.
Спасибо за ответ.
С описанием Структуры возникают сложности. Имею 12-канальное АЦП и каждый из каналов мне присылает значение внутри которого (Value, SourceTime и StatusCode) размер массива динамический. В итоге хочу добиться таблицы (Время 1, Значение 1, Время 2, Значение 2 и т.д).
PS
В мануале MS4D по запросу "массивы структур в окнах" есть пример, но настолько замудрённый что на стадии Структуры у меня и Мануала уже расхождения.
Скачайте пример, может прояснит что
Не совсем понятно, зачем делать динамический массив, если получаете 12 каналов
https://dropmefiles.com/nsVfD
Все совсем не так как я строил:))))) Спасибо за пример!:)
Динамический массив может и не нужен, АЦП за эксперимент (время 30 мин до 1.5 часа) просто заполняет показаниями таблицу. В зависимости от Шкалы или StatusCode возможно буду подкрашивать критические участки поканально. Наконец просвет, а то буксую уже долго!
Все совсем не так как я строил:))))) Спасибо за пример!:)
Динамический массив может и не нужен, АЦП за эксперимент (время 30 мин до 1.5 часа) просто заполняет показаниями таблицу. В зависимости от Шкалы или StatusCode возможно буду подкрашивать критические участки поканально. Наконец просвет, а то буксую уже долго!
Еще рекомендую на графиках смотреть каналы отдельно
57418
Из трек каналов АЦП загоняю в массив[1...3] (тип SystemLrealParam), далее этот массив пытаюсь загнать в заранее созданный МассивСтруктур циклом.
Получаю ошибки.... подскажите где косяк
57573
Из трек каналов АЦП загоняю в массив[1...3] (тип SystemLrealParam), далее этот массив пытаюсь загнать в заранее созданный МассивСтруктур циклом.
Получаю ошибки.... подскажите где косяк
57573
Нужно создать локальную переменную i в Программа_ST_1
Из трек каналов АЦП загоняю в массив[1...3] (тип SystemLrealParam), далее этот массив пытаюсь загнать в заранее созданный МассивСтруктур циклом.
Получаю ошибки.... подскажите где косяк
57573
Как уже сказали надо создать переменную i
А еще на скриншоте у вас массив размером 1, имеет три канала.
Тут цикл не подходит, должно быть примерно так:
Массив структур[1].Канал_1 := Параметр_1[1];
Массив структур[1].Канал_2 := Параметр_1[2];
Спасибо за подсказку! В первом приближении почти все на месте... только колонка SourceTime уплыл формат (вместо DT, миллиарды) и циклом хотел сделать бегущие бесконечные колонки цифр., а не строчку :(
время исправил указав формат - HH:mm:ss.fff
ArturRazd
19.10.2021, 15:14
Добрый день!
Версия: 1.2.13.23187(MPLCD_1_2_20210629.1)
Как можно вывести в отчете итог по итоговой строке?
57579
Добрый день!
Версия: 1.2.13.23187(MPLCD_1_2_20210629.1)
Как можно вывести в отчете итог по итоговой строке?
57579
Надо сложить все итоги в этом текстовом поле,
по сути в нем будет еще раз вычисляться итог колонки и суммироваться с другими итогами.
57581
57582
57583
ArturRazd
19.10.2021, 16:08
Надо сложить все итоги в этом текстовом поле,
по сути в нем будет еще раз вычисляться итог колонки и суммироваться с другими итогами.
57581
57582
57583
Спасибо, заработало.
Есть 4 варианта работы моей системы (4 схемы) в основном Окне ставлю три "Окна Контейнера" Схема 1..4(выбор по Флагу), Тренд (в зависимости от Схемы) и Легенда (в зависимости от того что в Тренде). По 4 Флагам управляю всем этим... но когда устанавливаю связи Легенды и Тренда получаю предупреждение "wrong trend ID" и соответственно пустое окно Легенды. Когда все в одном Окне понятно как связь установить, а когда в разных?
ПС видимость/невидимость проще, но в одном окне при большом кол-ве связей - громоздко
SCADAMaster4D
27.10.2021, 14:18
Добрый день.
Включите полное дерево и на схеме окна найдите нужный элемент.
57695
Спасибо за ответ, но все равно получаю сообщение об ошибке...
57696
Сделал все в одном Окне, только связь указал по Вашему способу - работает. Делаю аналогично в разных Окнах - нет. Вырезаю работающую Легенду и вставляю со связями в новое Окно, тоже не работает - wrong trend ID
моя версия v. 1.2.13.23187(MPLCD_1_2_20210629.1)
Сделал все в одном Окне, только связь указал по Вашему способу - работает. Делаю аналогично в разных Окнах - нет. Вырезаю работающую Легенду и вставляю со связями в новое Окно, тоже не работает - wrong trend ID
моя версия v. 1.2.13.23187(MPLCD_1_2_20210629.1)
Думается мне, что работа в разных окнах легенды и тренда не предусмотрено, т.к. в случае подключения нескольких клиентов, непонятно с какого тренда брать информацию, а если еще и сам по себе тренд не открыт, то есть даже не создан, то и легенда не будет работать
Спасибо за ответ. Тоже было время подумать, хотелось структурировать все по окнам, кто за что отвечает, вставить управляющие элементы под соответствующими Контейнерами... но наверно не судьба:) и немного не корректно так делать. Красота страдает... остается играть теми "кубиками" что есть
Спасибо за ответ. Тоже было время подумать, хотелось структурировать все по окнам, кто за что отвечает, вставить управляющие элементы под соответствующими Контейнерами... но наверно не судьба:) и немного не корректно так делать. Красота страдает... остается играть теми "кубиками" что есть
А чем не устраивает поставить легенду под график?
Можно сделать окно высокое, сверху тренд, снизу легенду,
Потом загнать окно в контейнер с одинаковой шириной , и сделать прокрутку вниз
57709
Читаете мысли:) так и поступил
Здравствуйте,Коллеги!
Подскажите, пожалуйста,как сделать чтение и запись регистра Modbus float в одном поле текстового ввода (или другом элементе).
В контроллере существует регистр Modbus TCP (чтение и запись по одному адресу) необходимо осуществлять отображение значение регистра и его изменение в в одном поле текстового ввода (или другом элементе).
Создаю в Системе протокол с базовым каналом с доступом InOut, в объектах параметр,привязываю его к полю ввода текста и к каналу. Привязывал к каналу в различных вариантах. Отображение в поле текстового ввода происходит нормально, запись регистра работает не стабильно, выглядит как конкуренция записи старого и нового значения.
57850.
Здравствуйте,Коллеги!
Подскажите, пожалуйста,как сделать чтение и запись регистра Modbus float в одном поле текстового ввода (или другом элементе).
В контроллере существует регистр Modbus TCP (чтение и запись по одному адресу) необходимо осуществлять отображение значение регистра и его изменение в в одном поле текстового ввода (или другом элементе).
Создаю в Системе протокол с базовым каналом с доступом InOut, в объектах параметр,привязываю его к полю ввода текста и к каналу. Привязывал к каналу в различных вариантах. Отображение в поле текстового ввода происходит нормально, запись регистра работает не стабильно, выглядит как конкуренция записи старого и нового значения.
57850.
В окне надо создать элемент инкремент
На вход инкремента сделать связь с выходом регистра,
выход инкремента со входом регистра
upd, в регистре сделать запись по изменению
Здравствуйте,Коллеги!
Подскажите, пожалуйста,как сделать чтение и запись регистра Modbus float в одном поле текстового ввода (или другом элементе).
В контроллере существует регистр Modbus TCP (чтение и запись по одному адресу) необходимо осуществлять отображение значение регистра и его изменение в в одном поле текстового ввода (или другом элементе).
Создаю в Системе протокол с базовым каналом с доступом InOut, в объектах параметр,привязываю его к полю ввода текста и к каналу. Привязывал к каналу в различных вариантах. Отображение в поле текстового ввода происходит нормально, запись регистра работает не стабильно, выглядит как конкуренция записи старого и нового значения.
57850.
Сомневаюсь, что такая схема будет стабильно отрабатывать. Проще разнести функции чтения и записи, как по контролам, так и по регистрам. Сделайте два регистра с одинаковыми адресами - только один на чтение, другой на запись. Аналогично с контролами - для отображения контрол Текст, а для записи значения контрол Инкремент (контрол Текстовый ввод только для ввода текста, но никак не для значений).
Спасибо, VladGC, b_aleks!
С разделением входного и выходного параметра работает корректно, на данном этапе этого достаточно. Но остался вопрос. При применении текстового ввода при отображении значения можно задать формат (f3), при этом "дробный хвост" 4-х байтного float не отображается, в инкременте формата отображения нет. Есть какие-то пути решения с использованием инкремента (второй контрол для отображения использовать нельзя- нужно и ввод и отображение реализовать в 1-м элементе)?
57851
57852
Спасибо, VladGC, b_aleks!
С разделением входного и выходного параметра работает корректно, на данном этапе этого достаточно. Но остался вопрос. При применении текстового ввода при отображении значения можно задать формат (f3), при этом "дробный хвост" 4-х байтного float не отображается, в инкременте формата отображения нет. Есть какие-то пути решения с использованием инкремента (второй контрол для отображения использовать нельзя- нужно и ввод и отображение реализовать в 1-м элементе)?
57851
57852
Шаг инкримента указали правильный?
Еще можно сделать промежуточную переменную, и округлять переменную.
Сделать что то вроде такого:
Создать программу, вход регистра связать с выходом программы
Выход программы с входом регистра,
Точно так же связать с инкриментом
Округлять можно так
FUNCTION funRound : LREAL
VAR_INPUT
IN: LREAL := 0;
N: INT := 0;
END_VAR
VAR_OUTPUT
EnO: BOOL := True;
END_VAR
VAR
DECADES: ARRAY [0..8] OF LREAL := [1, 10, 100, 1000, 10000, 10000, 100000, 1000000, 10000000];
X: LREAL := 0;
END_VAR
X := DECADES[LIMIT(0,N,8)];
funRound:= DINT_TO_REAL(REAL_TO_DINT(in * X)) / X;
END_FUNCTION
Спасибо, VladGC, b_aleks!
С разделением входного и выходного параметра работает корректно, на данном этапе этого достаточно. Но остался вопрос. При применении текстового ввода при отображении значения можно задать формат (f3), при этом "дробный хвост" 4-х байтного float не отображается, в инкременте формата отображения нет. Есть какие-то пути решения с использованием инкремента (второй контрол для отображения использовать нельзя- нужно и ввод и отображение реализовать в 1-м элементе)?
57851
57852
У вас InPar и OutPar какого типа? Если REAL, то в инкременте так и будет дробная часть отображаться. Измените тип на LREAL, тогда в инкременте будет отображаться 1.1
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot