Просмотр полной версии : ПЛК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 сек могу определить куда кого послать, если механизм встал колом, электрика на движок, киповца на концевики или датчики, асушника в рп на модуль. Операторы так привыкли, что сами знают кого и куда посылать в хорошем смысле этого слова)
Васильев У тебя какая лицензия (буква в обозначении): 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, которые можно добавить
возможно и это решение...
тогда как в программе обращаться к переменным? как получить доступ через панель?
.. тогда как в программе обращаться к переменным?..
Структуру натяните на этот слейв
kondor3000
17.03.2026, 08:17
возможно и это решение...
тогда как в программе обращаться к переменным? как получить доступ через панель?
Обращаться через структуру (или через массив), можно сделать несколько структур (массивов) и все положить в слейв,
из панели обращаетесь, как и раньше, по адресам.
Пример через структуру тут https://owen.ru/forum/showthread.php?t=10555&page=987
Коллеги представляю решение, как обойти ограничение в 1000 сетевых переменных..
Насколько правильно время покажет, а пока сетевые переменные доступны в программе и управляются с панели.
Для доступа через панель создаем два устройства Modbus TCP для первого указываем порт 502, а для второго порт 510 (как для ПЛК)
Не могу найти описание настроек в меню смена целевой платформы (5 вложение),
03E8h есть 1000 и по идеи должен отвечать за количество сетевых переменных, но этот параметр ни на что не влияет...
Спасибо большое.
Попробуйте внутрь первого слейва с 998 элементами добавить ВЛОЖЕННЫЙ слейв со следующими далее переменными. Для вложенного слейва в MODBUS(Fix) можете ничего не указывать
возможно и это решение...
тогда как в программе обращаться к переменным? как получить доступ через панель?У меня ж прям статья есть. Через структуру удобно всё делать.
В конце статьи пример есть: https://cs-cs.net/codesys-modbus-karta-registrov-struktury
Васильев
17.03.2026, 11:45
У меня ж прям статья есть. Через структуру удобно всё делать.
В конце статьи пример есть: https://cs-cs.net/codesys-modbus-karta-registrov-struktury
у меня почти все переменные (нет все) однорегистровые и для меня структура в этом случае не удобно
у меня почти все переменные (нет все) однорегистровые и для меня структура в этом случае не удобноНе понял. Так это ж ещё лучше: в ней все поля будут как 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 возможно?
...
А это в 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; (* сам регистр для записи*)
...
Немного недопоняли.
Сама структура это не что-то конкретное, а просто описание относительного порядка полей.
А относительно чего, так это от точки приложения. Главное правильно прикладывать.
Это к странному вопросу:
в этом случае элементы структуры располагаются в памяти в порядке их объявления в структуре (с учетом смещений)?
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
Может это так и задумано,
vop01_addr AT%QW6.800.0: WORD;
vop01_power AT%QW6.800.0: WORD;
но в общем случае именно 1 (один) раз где-то объявить структуру по AT% и такой случайной фигни не пролетит.
я не всю структуру привёл
давайте всю
Лучший вариант это проверить 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 модулей и сложить всё в слейв.
Можно в эмуляции запустить и ещё пример на следующей странице, специально для эмуляции с начальными данными.
Зачем вы напихали адресов в самой структуре?
Есть некоторый интересный ньюанс при использовании этого в структурах в виде ФБ )) Его можно назвать предтечей static
Васильев
17.03.2026, 17:56
Может это так и задумано,
но в общем случае именно 1 (один) раз где-то объявить структуру по AT% и такой случайной фигни не пролетит.
давайте всю
две переменные обращаются к одному и тому же адресу - сделано для совместимости с предыдущим проектом.
две переменные ..
а обращение к этим переменным из разных програмных блоков (ФБ, Program) или в рамках одного?
а как положить (отобразить) структуру к примеру с адреса AT%QW6.800.0 ???Ты можешь прочитать мою статью?!
И взять оттуда пример?!
Я же там специально сделал так, чтобы не использовать прямые адреса!!!
Ну НЕ реклама это - а нормальная статья.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot