javalikecalc
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| javalikecalc [2026/08/28 12:03] – fix 95.129.139.197 | javalikecalc [2026/09/11 13:57] (current) – Добавлен новый скрипт walhi | ||
|---|---|---|---|
| Line 67: | Line 67: | ||
| Что это за константа ''/ | Что это за константа ''/ | ||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | **Массовое изменение** логических параметров. Всплыл мой косяк, который надо исправить быстро и в нескольких местах. Свою ситуацию рассматривать не буду, но приведу аналогию. Есть у вас обработка входных данных, | ||
| + | |||
| + | Для начала, | ||
| + | |||
| + | <code java> | ||
| + | io = SYS.XMLNode(" | ||
| + | SYS.cntrReq(io); | ||
| + | </ | ||
| + | |||
| + | Далее уже работать с этим объектом. В нем будет 7 массивов по количеству столбцов таблицы с переменными: | ||
| + | |||
| + | Теперь про код обработки. Для начала надо описать задание: | ||
| + | |||
| + | |||
| + | <code java> | ||
| + | // Формируем задание | ||
| + | // Формат: | ||
| + | // " | ||
| + | // " | ||
| + | // " | ||
| + | config = new Array(); | ||
| + | |||
| + | command = new Object(); | ||
| + | command.template = " | ||
| + | command.param = new Array(); | ||
| + | command.value = new Array(); | ||
| + | command.param.push(" | ||
| + | command.value.push(0.01); | ||
| + | config.push(command); | ||
| + | |||
| + | command = new Object(); | ||
| + | command.template = " | ||
| + | command.param = new Array(); | ||
| + | command.value = new Array(); | ||
| + | command.param.push(" | ||
| + | command.value.push(0.01); | ||
| + | config.push(command); | ||
| + | |||
| + | command = new Object(); | ||
| + | command.template = " | ||
| + | command.param = new Array(); | ||
| + | command.value = new Array(); | ||
| + | command.param.push(" | ||
| + | command.value.push(0.01); | ||
| + | command.param.push(" | ||
| + | command.value.push(5); | ||
| + | config.push(command); | ||
| + | </ | ||
| + | |||
| + | После того, как сформировали задание, | ||
| + | |||
| + | |||
| + | <code java> | ||
| + | for (var i = 0; i < config.length; | ||
| + | // Получаем объект шаблона | ||
| + | tmp = config[i].template.split(" | ||
| + | templateObject = SYS.DAQ.nodeAt(" | ||
| + | | ||
| + | // Создаем в конфигурации задания дополнительное поле | ||
| + | // с номером элемента в таблице, | ||
| + | config[i].el = new Array(); | ||
| + | | ||
| + | const_mask = 0x40; // Взято из исходных кодов | ||
| + | // TPrmTempl:: | ||
| + | // TPrmTempl:: | ||
| + | |||
| + | // Запрашиваем таблицу с вводами и выводами шаблона | ||
| + | io = SYS.XMLNode(" | ||
| + | SYS.cntrReq(io); | ||
| + | |||
| + | // Столбцы таблицы редактирования шаблона | ||
| + | // Идентификатор, | ||
| + | // Связь, переменная или константа описано в столбце " | ||
| + | varNames = io.childGet(0); | ||
| + | varSource = io.childGet(5); | ||
| + | for (var j = 0; j < varNames.childSize(); | ||
| + | name = varNames.childGet(j).text(); | ||
| + | source = varSource.childGet(j).text().toInt(); | ||
| + | tmp = config[i].param.indexOf(name); | ||
| + | if (tmp != -1){ | ||
| + | // Найден целевой параметр | ||
| + | // Проверяем, | ||
| + | if (source & const_mask) | ||
| + | config[i].el[tmp] = j; | ||
| + | else | ||
| + | config[i].el[tmp] = EVAL; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Теперь можно пройтись по дереву. Указываем начальную точку и вызываем рекурсивную функцию, | ||
| + | |||
| + | |||
| + | |||
| + | <code java> | ||
| + | // Рекурсивная функция для прохода по дереву опроса | ||
| + | function runConfig(parent){ | ||
| + | attrs = parent.nodeList(" | ||
| + | for (var i = 0; i < attrs.length; | ||
| + | attr = parent.nodeAt(attrs[i]); | ||
| + | tmpl = attr.cfg(" | ||
| + | if (!tmpl.isEVal()){ | ||
| + | // Это логический параметр | ||
| + | for (var j = 0; j < config.length; | ||
| + | if (config[j].template == tmpl){ | ||
| + | // Есть задание для этого шаблона | ||
| + | for (var k = 0; k < config[j].param.length; | ||
| + | if (!config[j].el[k].isEVal()) | ||
| + | setConfig(attr, | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } else { | ||
| + | // Это стандартный параметр. Вызываем рекурсивно, | ||
| + | if (attr.nodeList(" | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | plc = SYS.DAQ.ModBus.PLC01; | ||
| + | runConfig(plc); | ||
| + | </ | ||
| + | |||
| + | Функция '' | ||
| + | |||
| + | <code java> | ||
| + | function setConfig(node, | ||
| + | req = SYS.XMLNode(" | ||
| + | SYS.cntrReq(req); | ||
| + | oldValue = req.text(); | ||
| + | if (oldValue != value) log += node.nodePath() + id.replace("/", | ||
| + | req = SYS.XMLNode(" | ||
| + | SYS.cntrReq(req); | ||
| + | } | ||
| + | </ | ||
| + | |||
javalikecalc.1787918633.txt.gz · Last modified: by 95.129.139.197
