PDA

Просмотр полной версии : ПЛК110-60 (30) М2 ограничение количества сетевых переменных в 1000



Васильев
16.03.2026, 19:49
Коллеги, прошу помощи..
Проектировщики спроектировали ОГРОМНЫЙ шкаф управления на базе ПЛК110-60 + 6 МВ100-8А + 2 МВ110-6у+ 2 32ДН+1 16ДВ.
в итоге понимаю, что количество сетевых переменных 1000шт не хватает для реализации проекта..
Возможно ли увеличение количества сетевых переменных более 1000 (к примеру 1500).
Ранее обращался в поддержку - сказали нет возможности.

Спасибо большое.

МихаилГл
16.03.2026, 20:53
Что за сетевые переменные вы имеете ввиду? Если для скады и дальше передавать, то дискреты ужимайте в dint, и будет их в 32 раза меньше. Я вон для мастер скады 4000 переменных до лицензии в 200 тэгов ужал, а тут модулей кот наплакал...

In_Da_Cher_A
16.03.2026, 20:59
ПЛК110-60 + 6 МВ100-8А + 2 МВ110-6у+ 2 32ДН+1 16ДВ.у меня плк 110-60+2 8А + 20 16Д + 8Р
не помню проблем вообще никаких
ещё раза три можно было туда же засунуть

что можно было насовать в 1000 переменных на таком малом количестве входов - непонятно

In_Da_Cher_A
16.03.2026, 21:06
6 8А х 8 = 48х2 = 96
ну хорошо напихали всякой второстепенной ерунды на каждый канал - ещё 2х2 = 48*4=192
192+96=примерно 300
ок, напихали ещё по два регистра на каждый канал не знаю чего - итого 600
битовых тупо по каждому биту - ок, лень считать - 200 бит, это 12 регистров

грубо 800 переменных.
что там ещё надо придумать, чтобы ещё 200 нарыть?

kondor3000
16.03.2026, 21:17
Возможно ли увеличение количества сетевых переменных более 1000 (к примеру 1500).
Ранее обращался в поддержку - сказали нет возможности.

Вообще то, на ПЛК110 делали и по 4000 и больше сетевых переменных, кто вам про 1000 сказал?
Только опрос через String (групповой) лучше делать.

МихаилГл
16.03.2026, 21:47
Не знаю как у вас, а у меня на каждый механизм сама диагностика около 3х полноценных регистра в 32 бита занимает. А если и настройки алгоритма с hmi туда запихнуть, то ещё столько же. Зато я за 5 сек могу определить куда кого послать, если механизм встал колом, электрика на движок, киповца на концевики или датчики, асушника в рп на модуль. Операторы так привыкли, что сами знают кого и куда посылать в хорошем смысле этого слова)

Cs-Cs
16.03.2026, 22:26
Васильев У тебя какая лицензия (буква в обозначении): L или M? M - это неограничено, L - 360 байт на все Slave.
ОВЕНская библиотека Modbus поможет это обойти.

Васильев
17.03.2026, 07:01
Не знаю как у вас, а у меня на каждый механизм сама диагностика около 3х полноценных регистра в 32 бита занимает. А если и настройки алгоритма с hmi туда запихнуть, то ещё столько же. Зато я за 5 сек могу определить куда кого послать, если механизм встал колом, электрика на движок, киповца на концевики или датчики, асушника в рп на модуль. Операторы так привыкли, что сами знают кого и куда посылать в хорошем смысле этого слова)

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

Васильев
17.03.2026, 07:04
Коллеги я не спрашивал как мне разместить мои переменные в 1000 регистров...
Количество регистров в 1000 можно заметить при добавлении устройства Modbus TCP - последний регистр 999.
Ранее обращался в поддержку, где также подтвердили максим 1000 регистров

Васильев
17.03.2026, 07:23
Коллеги представляю решение, как обойти ограничение в 1000 сетевых переменных..
Насколько правильно время покажет, а пока сетевые переменные доступны в программе и управляются с панели.
Для доступа через панель создаем два устройства Modbus TCP для первого указываем порт 502, а для второго порт 510 (как для ПЛК)

Не могу найти описание настроек в меню смена целевой платформы (5 вложение),
03E8h есть 1000 и по идеи должен отвечать за количество сетевых переменных, но этот параметр ни на что не влияет...

Спасибо большое.

kondor3000
17.03.2026, 07:57
Добавляя по 4Byte, можно сделать 2000 регистров, ничего не делая больше 88512
Не считая нескольких TCP, которые можно добавить

Васильев
17.03.2026, 08:10
Добавляя по 4Byte, можно сделать 2000 регистров, ничего не делая больше 88512
Не считая нескольких TCP, которые можно добавить

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

Валенок
17.03.2026, 08:14
.. тогда как в программе обращаться к переменным?..
Структуру натяните на этот слейв

kondor3000
17.03.2026, 08:17
возможно и это решение...
тогда как в программе обращаться к переменным? как получить доступ через панель?

Обращаться через структуру (или через массив), можно сделать несколько структур (массивов) и все положить в слейв,
из панели обращаетесь, как и раньше, по адресам.
Пример через структуру тут https://owen.ru/forum/showthread.php?t=10555&page=987

1exan
17.03.2026, 08:18
Коллеги представляю решение, как обойти ограничение в 1000 сетевых переменных..
Насколько правильно время покажет, а пока сетевые переменные доступны в программе и управляются с панели.
Для доступа через панель создаем два устройства Modbus TCP для первого указываем порт 502, а для второго порт 510 (как для ПЛК)

Не могу найти описание настроек в меню смена целевой платформы (5 вложение),
03E8h есть 1000 и по идеи должен отвечать за количество сетевых переменных, но этот параметр ни на что не влияет...

Спасибо большое.

Попробуйте внутрь первого слейва с 998 элементами добавить ВЛОЖЕННЫЙ слейв со следующими далее переменными. Для вложенного слейва в MODBUS(Fix) можете ничего не указывать

Cs-Cs
17.03.2026, 11:15
возможно и это решение...
тогда как в программе обращаться к переменным? как получить доступ через панель?У меня ж прям статья есть. Через структуру удобно всё делать.
В конце статьи пример есть: https://cs-cs.net/codesys-modbus-karta-registrov-struktury

Васильев
17.03.2026, 11:45
У меня ж прям статья есть. Через структуру удобно всё делать.
В конце статьи пример есть: https://cs-cs.net/codesys-modbus-karta-registrov-struktury

у меня почти все переменные (нет все) однорегистровые и для меня структура в этом случае не удобно

Cs-Cs
17.03.2026, 12:03
у меня почти все переменные (нет все) однорегистровые и для меня структура в этом случае не удобноНе понял. Так это ж ещё лучше: в ней все поля будут как WORD или INT. Прям лучшая удача из возможных.
Зато не надо будет в конфигурацию ПЛК вписывать имена или адреса их. Всё в структуре создашь красиво.
...а потом, если захочешь - с ней легко на ОВЕНскую библиотеку Modbus перейдёшь, где памяти для Slave точно больше.

kondor3000
17.03.2026, 14:35
у меня почти все переменные (нет все) однорегистровые и для меня структура в этом случае не удобно

Как не удобно?
В структуре вы можете сделать массив регистров WORD, и работать с ними. А положить его можно в выделенное место в конфигурации хоть DWORD-ов.

Васильев
17.03.2026, 15:58
Как не удобно?
В структуре вы можете сделать массив регистров WORD, и работать с ними. А положить его можно в выделенное место в конфигурации хоть DWORD-ов.

а как положить (отобразить) структуру к примеру с адреса AT%QW6.800.0 ???

kondor3000
17.03.2026, 16:12
а как положить (отобразить) структуру к примеру с адреса AT%QW6.800.0 ???

compressors AT%QW6.800.0 : COMPRESSOR; -объявление

Структура COMPRESSOR, в ней массив w: ARRAY[0..1999] OF WORD;, положена по адресу AT%QW6.800.0,
обращаться к ней как compressors.w[0] - ваш массив

Только места должно хватать на всю структуру, поэтому адрес скорее должен быть AT%QW6.0.0

Васильев
17.03.2026, 16:20
compressors AT%QW6.800.0 : COMPRESSOR;

Структура COMPRESSOR, в ней массив w: ARRAY[0..1999] OF WORD;, положена по адресу AT%QW6.800.0,
обращаться к ней как compressors.w[0] - ваш массив

в этом случае элементы структуры располагаются в памяти в порядке их объявления в структуре (с учетом смещений)?
А это в codesys 2.3 возможно?

Валенок
17.03.2026, 16:29
...
А это в codesys 2.3 возможно?
А что в вашем понимании структура?

Васильев
17.03.2026, 16:57
А что в вашем понимании структура?

TYPE vfdCMD :
STRUCT


setCMD:WORD; (* последняя успешная команда*)
setFreq:WORD; (* установленная частота*)
setFreqMax:WORD; (* установленная максимальная частота*)
setFreqMin:WORD; (* установленная максимальная чатота*)

newCMD:WORD; (* произвольная команда*)
newWrAddr: WORD; (* адрес для записи*)
newWrData:WORD; (* данные для записи*)
newFirstAddr:WORD; (* первый для чтения*)
newQuantity:WORD; (* количество для чтения*)
newFreq:WORD; (*частота*)
newRegAddr:WORD; (* адрес записываемого регистра*)
newRegValue:WORD; (* сам регистр для записи*)


...

Валенок
17.03.2026, 17:15
Немного недопоняли.
Сама структура это не что-то конкретное, а просто описание относительного порядка полей.
А относительно чего, так это от точки приложения. Главное правильно прикладывать.
Это к странному вопросу:

в этом случае элементы структуры располагаются в памяти в порядке их объявления в структуре (с учетом смещений)?

Валенок
17.03.2026, 17:19
TYPE vfdCMD :
STRUCT


setCMD:WORD; (* последняя успешная команда*)
setFreq:WORD; (* установленная частота*)
setFreqMax:WORD; (* установленная максимальная частота*)
setFreqMin:WORD; (* установленная максимальная чатота*)

newCMD:WORD; (* произвольная команда*)
newWrAddr: WORD; (* адрес для записи*)
newWrData:WORD; (* данные для записи*)
newFirstAddr:WORD; (* первый для чтения*)
newQuantity:WORD; (* количество для чтения*)
newFreq:WORD; (*частота*)
newRegAddr:WORD; (* адрес записываемого регистра*)
newRegValue:WORD; (* сам регистр для записи*)


...


TYPE vfdCMD_set :
STRUCT
CMD:WORD; (* последняя успешная команда*)
Freq:WORD; (* установленная частота*)
FreqMax:WORD; (* установленная максимальная частота*)
FreqMin:WORD; (* установленная максимальная чатота*)
end_struct

TYPE vfdCMD_new :
STRUCT
CMD:WORD; (* произвольная команда*)
WrAddr: WORD; (* адрес для записи*)
WrData:WORD; (* данные для записи*)
FirstAddr:WORD; (* первый для чтения*)
Quantity:WORD; (* количество для чтения*)
Freq:WORD; (*частота*)
RegAddr:WORD; (* адрес записываемого регистра*)
RegValue:WORD; (* сам регистр для записи*)
end_struct

TYPE vfdCMD :
STRUCT
Set: vfdCMD_set;
New: vfdCMD_new;
end_struct;
))
.........................

kondor3000
17.03.2026, 17:20
в этом случае элементы структуры располагаются в памяти в порядке их объявления в структуре (с учетом смещений)?
А это в codesys 2.3 возможно?

По порядку, а смещений у вас нет, так как все регистры WORD.

Васильев
17.03.2026, 17:31
По порядку, а смещений у вас нет, так как все регистры WORD.

я не всю структуру привёл, у меня там есть и byte и bool - занимают по одному байту в структуре, а в памяти будут адресоваться по четным адресам - так?

Васильев
17.03.2026, 17:35
vop01_addr AT%QW6.800.0: WORD;
vop01_power AT%QW6.800.0: WORD;
vop01_00000 AT%QW6.801.0: WORD;
vop01_mode1_T1 AT%QW6.802.0: INT;
vop01_mode1_T1_hist AT%QW6.803.0: INT;
vop01_mode1_T2 AT%QW6.804.0: INT;
vop01_room_state AT%QW6.805.0: INT;
vop01_mode2_T1 AT%QW6.806.0: INT;
vop01_11111 AT%QW6.807.0: INT;
vop01_mode1_minColdvalue AT%QW6.808.0: WORD;
vop01_mode2_minColdvalue AT%QW6.809.0: WORD;
vop01_Tinput AT%QW6.810.0: INT;
vop01_Toutput AT%QW6.811.0: INT;
vop01_t1 AT%QW6.812.0: INT;
vop01_t2 AT%QW6.813.0: INT;
vop01_t3 AT%QW6.814.0: INT;
vop01_temperatura AT%QW6.815.0: INT;
vop01_tenable AT%QW6.816.0: WORD;
vop01_klapan_value AT%QW6.817.0: WORD;
vop01_leds AT%QW6.818.0: WORD;
vop01_Talarm AT%QW6.819.0: WORD;


если объявить структуру, можно разместить её в памяти по адресу, для codesys2.3 ?

kondor3000
17.03.2026, 17:42
я не всю структуру привёл, у меня там есть и byte и bool - занимают по одному байту в структуре, а в памяти будут адресоваться по четным адресам - так?

Лучший вариант это проверить x:=SIZEOF(vfdCMD_set);
где x: DWORD; - размер структуры в байтах.

Зачем вы напихали адресов в самой структуре?
Написал же нужен только начальный адрес структуры при объявлении. Даже ссылку с примером вам давал.
https://owen.ru/forum/showthread.php?t=10555&page=987

Валенок
17.03.2026, 17:43
Может это так и задумано,

vop01_addr AT%QW6.800.0: WORD;
vop01_power AT%QW6.800.0: WORD;
но в общем случае именно 1 (один) раз где-то объявить структуру по AT% и такой случайной фигни не пролетит.


я не всю структуру привёл
давайте всю

Валенок
17.03.2026, 17:47
Лучший вариант это проверить x:=SIZEOF(vfdCMD_set);

Внимание! В офлайне Sizeof косячит

Васильев
17.03.2026, 17:52
Лучший вариант это проверить x:=SIZEOF(vfdCMD_set);
где x: DWORD; - размер структуры в байтах.

Зачем вы напихали адресов в самой структуре?
Написал же нужен только начальный адрес структуры при объявлении. Даже ссылку с примером вам давал.
https://owen.ru/forum/showthread.php?t=10555&page=987

у меня сейчас так реализовано.
Возможно перейду на структуру.

kondor3000
17.03.2026, 17:54
у меня сейчас так реализовано.
Возможно перейду на структуру.
Откройте пример по ссылке и разберитесь один раз, как надо делать. Как читать 8 модулей и сложить всё в слейв.
Можно в эмуляции запустить и ещё пример на следующей странице, специально для эмуляции с начальными данными.

Валенок
17.03.2026, 17:54
Зачем вы напихали адресов в самой структуре?
Есть некоторый интересный ньюанс при использовании этого в структурах в виде ФБ )) Его можно назвать предтечей static

Васильев
17.03.2026, 17:56
Может это так и задумано,

но в общем случае именно 1 (один) раз где-то объявить структуру по AT% и такой случайной фигни не пролетит.


давайте всю


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

Валенок
17.03.2026, 18:01
две переменные ..
а обращение к этим переменным из разных програмных блоков (ФБ, Program) или в рамках одного?

Cs-Cs
17.03.2026, 18:50
а как положить (отобразить) структуру к примеру с адреса AT%QW6.800.0 ???Ты можешь прочитать мою статью?!
И взять оттуда пример?!
Я же там специально сделал так, чтобы не использовать прямые адреса!!!
Ну НЕ реклама это - а нормальная статья.