Вход

Просмотр полной версии : CODESYS V3.5. Вопросы и ответы



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

LogikASUTP
30.03.2026, 14:34
Исключение и место, где оно произошло. В журнале можно текст посмотреть еще

а как понять из-за чего возникло это исключение?

LogikASUTP
30.03.2026, 14:35
Исключение, у вас деление на 0 в строке.
delta должна быть хоть 0,0001, но не 0.

спасибо вам большое. Предыдущее моё сообщение не актуально

Назаров Александр
03.04.2026, 15:30
Здравствуйте коллеги!. С чем может быть связано такое непоследовательное размещение рецептов в памяти ПЛК?
PPD_3
PPD_2
PPD_1
PPD_6
PPD_4
PPD_5
88732

RV9WFJ
03.04.2026, 15:53
Там много чего непоследовательно может быть и вообще в разных местах. Я столкнулся с этим когда написал процедуру которая по указателю на первую и последнюю переменные сохраняет настройки в файл и потом их восстанавливает когда необходимо. На небольших кусках памяти она отлично работает. А когда переменных и массивов становится много то оказывается они хранятся в памяти далеко не последовательно и вообще по разным секторам. И функция SysMemCopy становится бесполезной.

Евгений Кислов
03.04.2026, 16:10
Здравствуйте коллеги!. С чем может быть связано такое непоследовательное размещение рецептов в памяти ПЛК?
PPD_3
PPD_2
PPD_1
PPD_6
PPD_4
PPD_5
88732

Добрый день.
Если коротко - с тем, что так устроена реальная жизнь.

Все операции с чтением содержимого директорий сводятся к вызову на нижнем уровне чего-то вроде readdir, для которой:

The order in which filenames are read by successive calls to
readdir() depends on the filesystem implementation; it is unlikely
that the names will be sorted in any fashion.


https://man7.org/linux/man-pages/man3/readdir.3.html

Назаров Александр
03.04.2026, 16:55
Добрый день.
Если коротко - с тем, что так устроена реальная жизнь.

Все операции с чтением содержимого директорий сводятся к вызову на нижнем уровне чего-то вроде readdir, для которой:

The order in which filenames are read by successive calls to
readdir() depends on the filesystem implementation; it is unlikely
that the names will be sorted in any fashion.


https://man7.org/linux/man-pages/man3/readdir.3.html


Там много чего непоследовательно может быть и вообще в разных местах. Я столкнулся с этим когда написал процедуру которая по указателю на первую и последнюю переменные сохраняет настройки в файл и потом их восстанавливает когда необходимо. На небольших кусках памяти она отлично работает. А когда переменных и массивов становится много то оказывается они хранятся в памяти далеко не последовательно и вообще по разным секторам. И функция SysMemCopy становится бесполезной.

Спасибо, будем вживаться в реалии.

kondor3000
03.04.2026, 17:22
Спасибо, будем вживаться в реалии.

Не надо вживаться, достаточно в слейве выделить группу регистров (достаточного для всех рецептов) и положить туда массив структур рецептов.
Всё будет по порядку и передаваться будет по порядку.
Длину String надо тоже ограничить, местом достаточным для записи,
вы например добавляете 5 символ в String(4), вот и съезжают структуры.
Надо поставить String(5), если меньше 10 или String(6), если до 99 рецептов

Назаров Александр
14.04.2026, 11:51
Нужно отслеживать момент изменения значения в ячейке таблицы. Нашел событие OnValueChanged. Попробовал его использовать. Событие не генерируется. Баг Codesysa? Вопрос, можно ли с этим бороться? Или как еще, в принципе, можно в коде отследить это событие?

Евгений Кислов
14.04.2026, 12:36
Нужно отслеживать момент изменения значения в ячейке таблицы. Нашел событие OnValueChanged. Попробовал его использовать. Событие не генерируется. Баг Codesysa? Вопрос, можно ли с этим бороться? Или как еще, в принципе, можно в коде отследить это событие?

Добрый день.
Это действительно похоже на баг CODESYS.

Если есть возможность организовать ввод через диалог NumpadOwen/KeypadOwen из библиотеки OwenVisuDialogs - то можно отследить закрытие диалога с помощью анализа полей структуры OVD.DialogsSettings.g_stClosedDialogInfo
Поле wsDialogTitle позволит понять, что был закрыт именно диалог, открытый из таблицы (соответственно, в настройках открытия диалога ввода в таблице нужно указать ему уникальный заголовок).

Но это не позволит отличить ввод нового значения от ввода того же значения, что и было.

В принципе, можно в коде циклически проверять значение каждой ячейки - совпадает ли оно с тем, которое было при прошлой проверке.

Назаров Александр
14.04.2026, 15:55
Добрый день.
Это действительно похоже на баг CODESYS.

Если есть возможность организовать ввод через диалог NumpadOwen/KeypadOwen из библиотеки OwenVisuDialogs - то можно отследить закрытие диалога с помощью анализа полей структуры OVD.DialogsSettings.g_stClosedDialogInfo
Поле wsDialogTitle позволит понять, что был закрыт именно диалог, открытый из таблицы (соответственно, в настройках открытия диалога ввода в таблице нужно указать ему уникальный заголовок).

Но это не позволит отличить ввод нового значения от ввода того же значения, что и было.

В принципе, можно в коде циклически проверять значение каждой ячейки - совпадает ли оно с тем, которое было при прошлой проверке.

Спасибо, буду пробовать.
Еще вопрос про библиотеки.
1. Если библиотека установлена в разделе POU, то нужно ли ее устанавливать в разделе "Устройства", если Устройство не использует код из раздела "POU" ?
2. Почему папки одной версии библиотеки OSCAT BASIC выглядят по разному в Менеджерах библиотек POU и Устройств?
3. Что значит плейсхолдер POU не будет разрешен на устройстве и с чем связана ошибка ...Невозможно разрешить библиотеку плейсхолдера?
... небольшая каша в голове по этому вопросу, хотелось бы прояснить...
Где Можно ли поподробнее поизучать этот момент, лучше на русском языке.88830888318883288833

Евгений Кислов
14.04.2026, 16:14
1. Нет.
2. Сложно сказать, не зная деталей предыстории. Это, например, мог организовать автор проекта по каким-то личным причинам.
3. Судя по вашему скрину - с некорректной настройкой плейсхолдеров в проекте. Можете завтра утром связаться со мной по телеграм (см. в подписи), чтобы более предметно обсудить этот вопрос.


Где Можно ли поподробнее поизучать этот момент, лучше на русском языке

https://oscat.ru/wp-content/Video/CodesysOneLove/MainPlaylist/111_LibraryPlaceholders.mp4

Назаров Александр
14.04.2026, 16:31
1. Нет.
2. Сложно сказать, не зная деталей предыстории. Это, например, мог организовать автор проекта по каким-то личным причинам.
3. Судя по вашему скрину - с некорректной настройкой плейсхолдеров в проекте. Можете завтра утром связаться со мной по телеграм (см. в подписи), чтобы более предметно обсудить этот вопрос.



https://oscat.ru/wp-content/Video/CodesysOneLove/MainPlaylist/111_LibraryPlaceholders.mp4

Евгений, спасибо большое, завтра напишу в телеграм. Кино смотрел, эти вопросы не затронуты.

Назаров Александр
15.04.2026, 14:52
1. Нет.
2. Сложно сказать, не зная деталей предыстории. Это, например, мог организовать автор проекта по каким-то личным причинам.
3. Судя по вашему скрину - с некорректной настройкой плейсхолдеров в проекте. Можете завтра утром связаться со мной по телеграм (см. в подписи), чтобы более предметно обсудить этот вопрос.



https://oscat.ru/wp-content/Video/CodesysOneLove/MainPlaylist/111_LibraryPlaceholders.mp4

Евгений, спасибо за помощь - быстро, лаконично и профессионально!!!!

Назаров Александр
16.04.2026, 12:12
Добрый день.
Это действительно похоже на баг CODESYS.

Если есть возможность организовать ввод через диалог NumpadOwen/KeypadOwen из библиотеки OwenVisuDialogs - то можно отследить закрытие диалога с помощью анализа полей структуры OVD.DialogsSettings.g_stClosedDialogInfo
Поле wsDialogTitle позволит понять, что был закрыт именно диалог, открытый из таблицы (соответственно, в настройках открытия диалога ввода в таблице нужно указать ему уникальный заголовок).

Но это не позволит отличить ввод нового значения от ввода того же значения, что и было.

В принципе, можно в коде циклически проверять значение каждой ячейки - совпадает ли оно с тем, которое было при прошлой проверке.

Диалог NumpadOwen подтянул в менеджере визуализации, назначил имя диалога. Изменение полей диалога не происходит при вызове и закрытии диалога. Что не так?
88852
88853
88854

Евгений Кислов
16.04.2026, 12:16
Диалог NumpadOwen подтянул в менеджере визуализации, назначил имя диалога. Изменение полей диалога не происходит при вызове и закрытии диалога. Что не так?
88852
88853
88854

На втором скрине видно, что вы выбрали VisuDialogs.Numpad, переопределив тем самым настройку из менеджера визуализации.
Выберите По умолчанию или OVD.NumpadOwen.

Назаров Александр
16.04.2026, 12:27
На втором скрине видно, что вы выбрали VisuDialogs.Numpad, переопределив тем самым настройку из менеджера визуализации.
Выберите По умолчанию или OVD.NumpadOwen.

Дья́вол в дета́лях. Спасибо, просмотрел.

aaaSashaMGGU
22.04.2026, 08:18
Добрый
Как вызвать метод/действие из CFC?
Да, есть вот этот FAQ: https://owen.ru/forum/showthread.php?t=28167&page=14&p=389349&viewfull=1#post389349
Но тут речь идёт про какие-то рецепты, про какую-то библиотеку рецептов
Спасибо

Евгений Кислов
22.04.2026, 08:26
Добрый
Как вызвать метод/действие из CFC?
Да, есть вот этот FAQ: https://owen.ru/forum/showthread.php?t=28167&page=14&p=389349&viewfull=1#post389349
Но тут речь идёт про какие-то рецепты, про какую-то библиотеку рецептов
Спасибо

Добрый день. Метод - по аналогии с тем, что показано по ссылке.
Действие - просто в прямоугольнике (объект "Элемент" или "Box with EN/ENO") напишите имя действия.


Если из скрина по ссылке неочевидно, как применить это к вашему проекту - то, пожалуйста, выложите проект с одним методом и действием, которые вы хотите вызвать в CFC.
Я покажу, как это сделать.

aaaSashaMGGU
22.04.2026, 08:33
Добрый день. Метод - по аналогии с тем, что показано по ссылке.
Действие - просто в прямоугольнике (объект "Элемент" или "Box with EN/ENO") напишите имя действия.


Если из скрина по ссылке неочевидно, как применить это к вашему проекту - то, пожалуйста, выложите проект с одним методом и действием, которые вы хотите вызвать в CFC.
Я покажу, как это сделать.

Всё, разобрался, спасибо!
Объект "Элемент" в данном случае не имеет входов - и его нельзя использовать (у действия ведь нет входов). А вот "Box with EN/ENO" имеет вход EN.
В общем, вот так работает:
88909
Код действия ACT:

qqq := qqq + 1;

aaaSashaMGGU
22.04.2026, 09:02
Следующий вопрос
Вызвать действие внутри PRG получилось
Также получилось вызвать действие во втором PRG из первого
Но не выходит вызвать действие из FB, объявленного внутри PRG
И уж тем более не выходит вызвать действие из FB, объявленного внутри другого PRG
Прикладываю проект...
Спасибо заранее

aaaSashaMGGU
22.04.2026, 09:14
Следующий вопрос
Вызвать действие внутри PRG получилось
Также получилось вызвать действие во втором PRG из первого
Но не выходит вызвать действие из FB, объявленного внутри PRG
И уж тем более не выходит вызвать действие из FB, объявленного внутри другого PRG
Прикладываю проект...
Спасибо заранее

Методом научного тыка определил, как нужно делать:
88914
Так работает.
Евгений, простите, что не дождался ответа

Назаров Александр
23.04.2026, 10:21
Добрый день коллеги!
При перезаливке программы, отредактированные файлы рецептов в предыдущей загрузке, затираются данными занесенными в экземпляры группы рецептов. Что нужно сделать, чтобы избежать данного сценария?

Евгений Кислов
23.04.2026, 10:32
Добрый день коллеги!
При перезаливке программы, отредактированные файлы рецептов в предыдущей загрузке, затираются данными занесенными в экземпляры группы рецептов. Что нужно сделать, чтобы избежать данного сценария?

Добрый день.
Нужно снять эту галочку:

88936

MarcusTroy
23.05.2026, 13:14
меня интересует именно на практике. и если да то как лучше сделать второй ПИД-регулятор (Slave) для приточных клапанов или простую функцию VentSpeed * Коэффициент для приточных заслонок?

MarcusTroy
23.05.2026, 13:21
первое сообщения не послал))) есть помещение вытяжная шахта с вентилятором и приточная шахта с вентилятором и заслонкой. необходимо поддерживать температуру по уставке в соответствии с показаниями с датчика темп. и отрицательное давление по уставке и показаниям с датчика
давления

MarcusTroy
23.05.2026, 13:24
Евгений Кислов - подскажите какой в моем случае лучше использовать пид регулятор а именно с какой библиотеки. везде сигнал на управление исполнительными 0 -10 вольт.

Евгений Кислов
23.05.2026, 13:33
Евгений Кислов - подскажите какой в моем случае лучше использовать пид регулятор а именно с какой библиотеки. везде сигнал на управление исполнительными 0 -10 вольт.

Добрый день.
Если вам нужно использовать ПИД-регулятор в CODESYS V3.5 - то начните со стандартного PID_FIXCYСLE из библиотеки Util.

MarcusTroy
23.05.2026, 16:00
Подскажите а пид регуляторы с автонастройкой коэффициентов - какие посоветуете?

Iliaaer
25.05.2026, 11:14
Я добавил в проект ПЧВ3 в codesys, но у меня появились две ошибки, исправить которые у меня не получается. Что делать?

[ERROR] Менеджер библиотек [Device: Plc Logic: Application]: Невозможно открыть библиотеку 'IoDrvModbus, 3.5.4.0 (3S - Smart Software Solutions GmbH)'. (Причина: Библиотека 'IoDrvModbus, 3.5.4.0 (3S - Smart Software Solutions GmbH)' не установлена в системе.)
[ERROR] Менеджер библиотек [Device: Plc Logic: Application]: Невозможно открыть библиотеку 'IECStringUtils, 3.5.5.0 (System)'. (Причина: Библиотека 'IECStringUtils, 3.5.5.0 (System)' не установлена в системе.)

893268932789328

Евгений Кислов
25.05.2026, 12:01
Я добавил в проект ПЧВ3 в codesys, но у меня появились две ошибки, исправить которые у меня не получается. Что делать?

[ERROR] Менеджер библиотек [Device: Plc Logic: Application]: Невозможно открыть библиотеку 'IoDrvModbus, 3.5.4.0 (3S - Smart Software Solutions GmbH)'. (Причина: Библиотека 'IoDrvModbus, 3.5.4.0 (3S - Smart Software Solutions GmbH)' не установлена в системе.)
[ERROR] Менеджер библиотек [Device: Plc Logic: Application]: Невозможно открыть библиотеку 'IECStringUtils, 3.5.5.0 (System)'. (Причина: Библиотека 'IECStringUtils, 3.5.5.0 (System)' не установлена в системе.)

893268932789328

Добрый день.
Какой контроллер вы используете?

Iliaaer
25.05.2026, 12:51
Добрый день.
Какой контроллер вы используете?
ПЛК210-03CS

Евгений Кислов
25.05.2026, 13:07
ПЛК210-03CS

Тогда вы используете не ту версию шаблонов.
1. Удалите ваши шаблоны из дерева проекта
2. Установите актуальную версию шаблонов: https://ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/01_Components/Mx110Drivers_v3.5.11.13.package
3. Добавьте в дерево проекта шаблоны версии 3.5.11.13

Iliaaer
25.05.2026, 15:29
Тогда вы используете не ту версию шаблонов.
1. Удалите ваши шаблоны из дерева проекта
2. Установите актуальную версию шаблонов: https://ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/01_Components/Mx110Drivers_v3.5.11.13.package
3. Добавьте в дерево проекта шаблоны версии 3.5.11.13

Все заработало, спасибо!

TaPX
26.05.2026, 09:53
Доброе утро.
Такая штука: ввёл пароль неправильно для повышения прав (переключение на пользователя "Сервис") несколько раз, теперь "пользователь не активен". Как это можно сбросить? Или оно само через какое-то время сбросится? Установлена библиотека "OwenVisuDialogs"
89335

Евгений Кислов
26.05.2026, 11:51
Доброе утро.
Такая штука: ввёл пароль неправильно для повышения прав (переключение на пользователя "Сервис") несколько раз, теперь "пользователь не активен". Как это можно сбросить? Или оно само через какое-то время сбросится? Установлена библиотека "OwenVisuDialogs"
89335

Добрый день.
Проверьте эти настройки:

89339


Как это можно сбросить?

Полная прогрузка проекта должна решить проблему.

TaPX
26.05.2026, 14:04
Добрый день.
Проверьте эти настройки:

89339



Полная прогрузка проекта должна решить проблему.

Понял, благодарю

TaPX
26.05.2026, 15:41
Добрый день.
Проверьте эти настройки:

89339



Полная прогрузка проекта должна решить проблему.

а что значит "полная прогрузка проекта"? )

Евгений Кислов
26.05.2026, 16:41
а что значит "полная прогрузка проекта"? )

Компиляция - Очистить все
Онлайн - Подключение

TaPX
27.05.2026, 09:02
Компиляция - Очистить все
Онлайн - Подключение

Понял, благодарю
Пы.Сы.: Сработало )

Юра54
27.05.2026, 11:29
Евгений, здравствуйте!
"Неожиданно" обнаружил, что в проекте Кодесис имеются 2 менеджера библиотек - на вкладке "устройства" и на вкладке "POU", и наборы библиотек в них разные.
1) Зачем их 2 и в чем разница? Что куда складывать? Я запутался с "OSCAT BASIC".
2) Какого рода проблемы могут возникать из-за установки этой и других библиотек не в тот менеджер?
3) Есть ли какое-то общее описание менеджеров библиотек и их работы или статья на эту тему?

Евгений Кислов
27.05.2026, 11:39
Евгений, здравствуйте!
"Неожиданно" обнаружил, что в проекте Кодесис имеются 2 менеджера библиотек - на вкладке "устройства" и на вкладке "POU", и наборы библиотек в них разные.
1) Зачем их 2 и в чем разница? Что куда складывать? Я запутался с "OSCAT BASIC".
2) Какого рода проблемы могут возникать из-за установки этой и других библиотек не в тот менеджер?
3) Есть ли какое-то общее описание менеджеров библиотек и их работы или статья на эту тему?

Добрый день.
В проекте на вкладке Устройства может быть несколько контроллеров. У каждого из них будет свой отдельный менеджер библиотек.
На вкладке POU находится "общий" менеджер библиотек, библиотеки которого доступны всем контроллерам.
Основное правило: не добавлять одну и ту же библиотеку и на вкладке Устройства, и на вкладке POU (кроме тех, что появляются там автоматически - но с ними вы ничего не сделаете).

Юра54
27.05.2026, 11:44
Добрый день.
В проекте на вкладке Устройства может быть несколько контроллеров. У каждого из них будет свой отдельный менеджер библиотек.
На вкладке POU находится "общий" менеджер библиотек, библиотеки которого доступны всем контроллерам.
Основное правило: не добавлять одну и ту же библиотеку и на вкладке Устройства, и на вкладке POU (кроме тех, что появляются там автоматически - но с ними вы ничего не сделаете).

Спасибо! Вот это основное правило я и нарушал. Сейчас буду пытаться разгребать.

mf_
29.05.2026, 09:21
Добрый день. Подскажите, пожалуйста, можно ли как-то в AlarmGroup вставить в сообщение текст из массива строк asVFD_ALARM_TEXT[wERROR_VFD]?

Евгений Кислов
29.05.2026, 09:45
Добрый день. Подскажите, пожалуйста, можно ли как-то в AlarmGroup вставить в сообщение текст из массива строк asVFD_ALARM_TEXT[wERROR_VFD]?

Добрый день.
Да, с помощью LATCH-переменных.
Посмотрите видео: https://oscat.ru/wp-content/Video/CodesysOneLove/MainPlaylist/084_AlarmRaiseEvent.mp4
Оно несколько на иную тему, но там показано, как использовать LATCH-переменные.
Если текст из массива содержит кириллицу, то должен использоваться тип WSTRING.

Sulfur
29.05.2026, 12:31
Будет ли работать такое прямое объявление переменной?


sStringVar AT %MW100: STRING;

Евгений Кислов
29.05.2026, 12:34
Будет ли работать такое прямое объявление переменной?


sStringVar AT %MW100: STRING;

Это синтаксически корректное объявление.
Другой вопрос - какую пользу вы рассчитываете от него получить (если только речь не о ПЛК другого производителя, в котором на прямые адреса автоматически проецируется буфер Modbus Slave или что-то подобное).

mf_
29.05.2026, 12:37
Евгений, спасибо за ответ. Пробую реализовать, но почему-то сообщение не выводится. Можете предположить (погадать по фото) где я мог накосячить?

Sulfur
29.05.2026, 12:38
Речь о ПЛК другого производителя. Этот производитель не удосужился сделать в TCP_Slave настраиваемый пул переменных, а просто расшарил всю область %MWхх.

Евгений Кислов
29.05.2026, 12:52
Евгений, спасибо за ответ. Пробую реализовать, но почему-то сообщение не выводится. Можете предположить (погадать по фото) где я мог накосячить?

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

Cs-Cs
29.05.2026, 13:14
Евгений, спасибо за ответ. Пробую реализовать, но почему-то сообщение не выводится. Можете предположить (погадать по фото) где я мог накосячить?
Формат забыл указать как %s (как для вывода на экран).

89368

PS. Работа с такими штуками ОЧЕНЬ тормозит ПЛК. Потому что при записи новой тревоги он сначала во всей базе ищет уникальное значение строки для LATCH.
Если находит - переиспользует. Если не находит - добавляет новую. И это занимает время.
Вот например я сдуру сделал вывод времени работы ПЛК:

89369

mf_
29.05.2026, 13:31
По скринам сложно что-то сказать.
Я бы вам рекомендовал начать не с RaiseEvent, а с чего-то более простого - сделайте тревогу с типом наблюдения "Дискретный" и изменяйте ее булевскую переменную в процессе отладки.

Да, работает. Спасибо ещё раз. Я сначала подумал, что LATCH-переменные работают только с событиями, это не так.


Формат забыл указать как %s (как для вывода на экран).

Не, не влияет никак. Видимо, что то с обработкой событий не так, с дискретной ошибкой всё работает как нужно. Спасибо.

Валенок
29.05.2026, 13:50
Речь о ПЛК другого производителя. Этот производитель не удосужился сделать в TCP_Slave настраиваемый пул переменных, а просто расшарил всю область %MWхх.
Структуру положите по %MW0. Поля структуры и будут "настраиваемый пул переменных"

Sulfur
29.05.2026, 14:14
Валенок
Спасибо за подсказку. Придется курить мануалы по структурам, ибо с ними я еще не работал. Я же не настоящий программист, я просто баркас со дна достаю.

kondor3000
29.05.2026, 14:37
Валенок
Спасибо за подсказку. Придется курить мануалы по структурам, ибо с ними я еще не работал. Я же не настоящий программист, я просто баркас со дна достаю.

Чего там курить, структура это набор переменных, которые вам нужны, создали структуру, если несколько подобных, то массив структур
и положили всё по 1 прямому адресу.

Пример в среде 2.3, чтение 7 модулей 8АС структурами и отправка в слейв массива структур компрессоров https://owen.ru/forum/showthread.php?t=10555&page=987

Cs-Cs
29.05.2026, 16:11
Придется курить мануалы по структурам, ибо с ними я еще не работал.
На! https://cs-cs.net/codesys-modbus-karta-registrov-struktury
У меня там под 2.3 написано, а тебе надо:
1. Понять идею про структуру - как составить, как добавить.
2. Объявить её, как Валенок сказал - по началу адреса Slave (а НЕ как у меня в посте показано).

Sulfur
29.05.2026, 19:24
В моем проекте мне надо предоставить для HMI-мастера всего две строковые переменные. Если конкретно, то ПЛК читает статус из двух сервоприводов, транслирует его в стринг, и эти два статуса читает панелька. Сервы серьезные, состояний вагон и тележка. Что бы все не прописывать ручками, хотел из диагностического ФБ отображать статы на панельке. Структуры - это хорошо, особенно для миллионов регистров. Но не думаю, что ради двух переменных стоит ими пользоваться.
Я правильно понимаю, что при явном объявлении стринга КДС выделит необходимое количество регистров сам, начиная с указанного в объявлении? То есть не проблема указать %MW1000 для первой, и %MW2000 для второй переменной, к этим же адресам и обращаться с панельки.

kondor3000
29.05.2026, 19:58
В моем проекте мне надо предоставить для HMI-мастера всего две строковые переменные. Если конкретно, то ПЛК читает статус из двух сервоприводов, транслирует его в стринг, и эти два статуса читает панелька. Сервы серьезные, состояний вагон и тележка. Что бы все не прописывать ручками, хотел из диагностического ФБ отображать статы на панельке. Структуры - это хорошо, особенно для миллионов регистров. Но не думаю, что ради двух переменных стоит ими пользоваться.
Я правильно понимаю, что при явном объявлении стринга КДС выделит необходимое количество регистров сам, начиная с указанного в объявлении? То есть не проблема указать %MW1000 для первой, и %MW2000 для второй переменной, к этим же адресам и обращаться с панельки.

Напишите Str1:String(79); выделит 40 регистров, проверить размер в байтах можно x:=SIZEOF(Str1); это 80 байт
только по поводу адресов %MW1000 я сомневаюсь, например в СП3хх мастере, таких адресов нет, там адреса с 0. Лучше начать с 0 адреса типа %MW00

Sulfur
29.05.2026, 21:46
Спасибо, буду пробовать.

MarcusTroy
30.05.2026, 13:26
Подскажите Пожалуйста во всех примерах при использовании пид регулятора он используется для нагрева. А в моей задаче наоборот нужно охлаждать помещение т.е. при 100 идет охлаждение. Какие действия мне нужно сделать чтобы пид регулятор работал таким образом

SlavikP
30.05.2026, 13:40
Надо на ваш выбор или Kp подавать в ПИД со знаком минус или поменять на входах уставку и обратную связь местами.

MarcusTroy
30.05.2026, 18:59
Спасибо SlavikP. Все закрутилось.

IVM
02.06.2026, 13:57
Добрый день

Что не так ?

kondor3000
02.06.2026, 13:59
Добрый день

Что не так ?

Последняя строка - это присвоение в программе, а находится в окне объявлений.

IVM
02.06.2026, 14:32
Последняя строка - это присвоение в программе, а находится в окне объявлений.

Ваша правда.