Создать переменную без начального значения и по условию присваивать ее другой переменной.
Вид для печати
Подскажите как в мастер скаде 4D реализовать кнопку с таймером, т.е. при нажатии на кнопку на мнемосхеме она вдавливается и параметр присваивается ВКЛ, а через 2 секунды параметр стал ВЫКЛ и кнопка на мнемосхеме отжалась?
Здравствуйте, смотрю урок 3 Быстрый старт, у меня при перетаскивании из вкладки объекты во вкладку Бибдтотеки локальные содержимое окон не сохраняется - и соответственно потом все содержимое удаляется в источнике. В чем может быть проблема? И еще вопрос - В среде проектирования все работает сигналы на контроллер проходят, но как только запускаю проект через RT, клиент перестает общается с OCP, запускаю среду проеэтирование там тоже перестает и пишит при компеляции версия исполнительного устройства устарела.
Вопрос про конвертацию.
С прибора идут данные INT, в скаде я их принимаю, но мне нужно на окно вытащить уже REAL с 2 знаками после запятой (например, 1267 должно стать 12,67).
Попробовал создать параметр LREAL и задать формат {f2}, но получил ту же самую целую часть с двумя нулями после запятой.
Можно ли сделать быструю конвертацию, не прибегая к программным блокам (FBD, ST и тп)?
Здравствуйте коллеги!
Подскажите пожалуйста, правильно ли я понимаю: 1 сообщение тревога обрабатывает 1 параметр? Если мне надо контролировать 100 параметров, мне надо создать 100 сообщений тревога и связать их со входом активность сообщения?
Можно ли создать одно сообщение конкретного типа и привязать к нему кучу параметров?
Приветствую,
если 100 параметров привязать к одному входу ( через или) то при возникновении двух и более событий будет непонятно какое событие произошло
если надо использовать какие либо превышения, я бы использовал штатные функции - контроль границ
А если надо только записывать сообщения в архив журнала то можно использовать fb - FireBaseEvent
Код:FOR i := 1 to 5 DO
IF g_msg_eventChange_D4[i].changed THEN
Система(Time:= , Message:=g_msg_eventChange_D4[i].msg , AckTime:= , Acked:= , Severity:=200 , ClientUserId:= , ClientAddress:= , EventTypeId:= , Archive:= );
END_IF;
END_FOR;
Может кто-нибудь помочь с получением значений из сообщений в формате JSON? Буду крайне признателен.
У меня прилетают сообщения по MQTT в JSON. К примеру одно из наиболее маленьких:
[{"ts":1657711987000,"ms":{"ru1":{"force":-99999,"temp":-2000,"ts":0},"ru2":{"force":-99999,"temp":-2000,"ts":0},"ru3":{"force":-99999,"temp":-2000,"ts":0},"meteo":{"airt":0.000000,"ah":0,"wd": 0,"ws":0.000000}},"hs":"ba5e11c1eacd3873e308427667 5a8d0a"}]
На входе массив структур(судя по квадратным скобкам), который состоит из: переменной ts, структуры ms и переменной hs.
Структура ms в свою очередь состоит из структур ru1-3 и структуры meteo.
Структуры ru1-3 состоят из полей: force, temp, ts.
Структура meteo состоит из полей: airt, ah, wd, ws.
Т.е. по сути получается «матрёшка» из полей, вложенных в структуры, которые в свою очередь вложены в ещё одну структуру, которая с двумя переменными составляет массив.
Я создавал все эти структуры с соответствующими полями и потом вкладывал одно в другое, как указанно в разделе справки «Соответствие элементов JSON и MasterScada 4D.
Далее чтобы было более понятно
[{"ts":1657711987000,
"ms":{
"ru1":{"force":-99999,"temp":-2000,"ts":0},
"ru2":{"force":-99999,"temp":-2000,"ts":0},
"ru3":{"force":-99999,"temp":-2000,"ts":0},
"meteo":{"airt":0.000000,"ah":0,"wd":0,"ws":0.0000 00}
},
"hs":"ba5e11c1eacd3873e3084276675a8d0a"}]
Согласно справки имена ключей и типы данных должны совпадать. Разработчики устройства, с которого летят сообщения дали мне типы данных: "[{"ts":%lld,"ms":{%s"meteo":{"airt":%f,"ah":%d,"wd" :%d,"ws":%f}},"hs":"%s"}]"
Как я понял это написано на С. Я сопоставил эти типы данных с данными в 61131-3. Сделал, как указанно в справке создал свой сложный тип данных. Структуру meteo с полями airt,ah,wd,ws, структуры ru1-3 с полями force, temp,ts. Вложил в структуру ms и конечную струтуру с полями ts, hs. И всё это в массив.
Назначал полученный тип данных параметру канала и в ответ нули. Датчиков на девайсе нет но, ts-вермя и hs- контрольный хэш должны прилетать.
Возвращаю исходный тип данных, вижу, строку в которой есть данные.
Ещё если назначить конечным типом данных массив структур( о чём говорят квадратные скобки) то, на выходе и массив, и теперь из 3-х строк.
А если назначить конечным типом данных структуру(что согласно справке будет не верно) то, всё раскладывается на отдельные параметры но, в них нули, как написано выше.
Через функцию STRING_TO_OBJECT тоже пытался. Тоже не работает.
Справка - фуфло. Написана не прозрачно и не однозначно. У ТП как всегда всё работает, всё здорово, "Не понимаем в чём у вас проблема". Способ конвертации крайне неудобен, нужно всё сообщение до последнего ключа раскладывать, а бывают сообщения ооооооооооочень длинные.
[{"ts":1658146763000,"status":"RN","hw_version":"00 01","base": {"status":"","GSM":"Op: MegaFon RUS, RSSI: -51dBm, BER: 6.400000%","versions": {"hw_version":"0001","fw_version":"NO","fw_bckup_s table_version":"NO","fw_status":"FC"},"data":{"brd _temp":37.000000,"voltage":14.157000,"uptime":5342 31,"rf_status":""}},"cab": {"status":"DO,"},"ru1":{"status":"","b1":{"voltage ":3.410000,"value_charge":20.000000},"brd_temp":29 ,"channel_occup_attempt": 0,"sessions_nak":0,"ru_ltota":1658146756000,"ru_rs si":-66,"rf_ru_rssi":0},"anem": {"temp":0.000000,"status":"WDL"},"t_hum": {"status":"THDL"},"hs":"b7ed13745b79f42642a7eeada4 9f3c5a"}]
А мне нужен лишь один ключ. И что делать???
Прилагаю скрины то, как делал и результаты.
PS.
Ещё момент, если в сообщении прилетают ключи с именами, совподающими с зарезервированными словами 61131-3 - беда! Т.к. по справке имена полей должны совпадать с ключами. Ничего не сделать.
В TeslaScada2 это реализовано по другому, у них не используется 61131-3 и реализовано на мой взгляд удачнее. Необязательно всё сообщение до последнего ключа преобразовывать но, ручками поработать придётся тоже.
Вложение 61792Вложение 61793Вложение 61794Вложение 61795Вложение 61796Вложение 61797Вложение 61797Вложение 61798Вложение 61799Вложение 61800
Доброго дня.
Подскажите, .changed - это какое-то пользовательское поле, или системное?
Поиском по справке такого не нашел (
Просто интересно каким образом реализовать в MS4D аналог скрипта "по изменению значения", общеупотребительного для других систем.
Неужели всё самому нужно лепить через дополнительные переменные и функции сравнения?