Просмотр полной версии : ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)
kondor3000
26.05.2025, 12:46
Валенок, спасибо, можно и так. Но тут новая беда стряслась. В редакторе CFC упёрся вниз после сорокового блока, ползунок вертикальной прокрутки внизу, место не добавляется, соответственно ничего больше вставить не могу. Почему? В настойках пошарил, никаких ограничений на размер рабочего поля и кол-во блоков не нашёл, на форуме тоже тишина, либо я не так запрос формулирую. Подскажите, если кто знает.
На CFC лист ограничен, писать проект надо разбивая программу на функц. блоки (ФБ или программы), 84010
условно разбив программу на 4 части, на основном листе у вас будет всего 4 блока ФБ. Пример на скрине
По возможности блоки сделать законченными, типа блок управления, блок измерений, блок времени, блок автоматики и т.д.
Kalessin
26.05.2025, 14:15
На CFC лист ограничен
Ах, вот оно как! Спасибо -- буду знать. Я -- мигрант с Атмеги, в коде чутка разбираюсь, но интерфейс мне незнаком, оттого и детские вопросы.
Добрый день. подскажите пожалуйста. Переносил проект с 110-60 на 110-60m2 вроде все перенес, программа скомпилировалась, поставили плк, все мв-шки и панели все работает , температуры показывает , но не работает копка старт - стоп клапана , перепроверил еще раз все и увидел , что на 1 панели у меня нет окошек уставок , которые должны подгружаться из плк , с 99% из за этого и не работает все. Вопрос где в проекте это все прописывается? 84034
и в старом и новом проекте эти уставки прописаны
84036
Вообще как я понял , какая то проблема теперь обмена с панелями
kondor3000
28.05.2025, 13:27
Добрый день. подскажите пожалуйста. Переносил проект с 110-60 на 110-60m2 вроде все перенес, программа скомпилировалась, поставили плк, все мв-шки и панели все работает , температуры показывает , но не работает копка старт - стоп клапана , перепроверил еще раз все и увидел , что на 1 панели у меня нет окошек уставок , которые должны подгружаться из плк , с 99% из за этого и не работает все. Вопрос где в проекте это все прописывается?
и в старом и новом проекте эти уставки прописаны
Вообще как я понял , какая то проблема теперь обмена с панелями
Адреса в ПЛК у вас цифрами, какого вы в панели их буквами пишите?
Показанные адреса в ПЛК, в панели будут 4х 92 и 4х 96
В слейве все переменные энергонезависимые, но 1 раз их надо забить руками на панели и проверить правильно ли пишутся.
Не совсем поняли меня наверное) Адреса у меня цифрами 84057 и проект на панели я вообще не трогал.
Я взял проект который был на 110-60 и перенёс его , через программу , которая тут есть на форуме(с правками руками потом еще ) на 110-60m2, проект скомпилировался , все хорошо. На контролер подключено вот столько разных устройств 84058 вроде как все заработало, показания всех датчиков пришли на плк и потом появились на всех панелях. И тут я решил проверить дозирование 84059 и при нажатии кнопки старт ничего не происходит. Начал разбираться и увидел, что на другой панели не подгружаются уставки 84060 , подкинул обратно старый плк , настройки стразу погрузились 84062
Проверил еще раз проекты , все сходится строчка в строчку, адрес в адрес
Так, что вообще пока не понимаю где проблема
Единственные различия я пока нашел в Идент.модуля в старом проекте 203 имеет RS-2 . а в новом RS232 и так еще в паре мест, но адреса то одинаковые , в этом проблема?84063
kondor3000
29.05.2025, 08:30
Так, что вообще пока не понимаю где проблема
Единственные различия я пока нашел в Идент.модуля в старом проекте 203 имеет RS-2 . а в новом RS232 и так еще в паре мест, но адреса то одинаковые , в этом проблема?
Ещё раз, в слейве все переменные RETAIN, первый раз забить руками.
Идент.модуля 203 тут не при чём, смотрите откуда старый ПЛК берёт эти значения, должна быть или инициализация, или RETAIN переменные, может в глобальных. Либо они просто в слейве забиты и сохранены были.
Что то вы пропустили.
в глобальных есть 84065
;) блин оказывается все дело было в кабеле! в старом плк разъем rs232 телефонный , а в новом rj45
Здравствуйте
ПЛК 160, где в таргет файлах находятся аналоговые входа?
Спасибо.
Здравствуйте
ПЛК 160, где в таргет файлах находятся аналоговые входа?
Спасибо.
В такой формулировке вопроса нет смысла
kondor3000
04.06.2025, 12:57
Здравствуйте
ПЛК 160, где в таргет файлах находятся аналоговые входа?
Спасибо.
В таргет файле это Fast analog Input, раскройте их плюсиком, там 8 входов. На скрине 1 вход 84161
Здравствуйте! ПР200 + ИПП120. Возможно ли менять один параметр с обоих устройств?
kondor3000
04.06.2025, 17:22
Здравствуйте! ПР200 + ИПП120. Возможно ли менять один параметр с обоих устройств?
Вы пишите не в тот раздел.
В менеджере есть макросы SelChgI (SelChgF, SelChgB), управление из 2 мест
Boris111
05.06.2025, 07:51
Здравствуйте, у меня проблема с СП307, округляет число после выполнения функции сложения
Складываю float + unsigned, как выключить округление?
kondor3000
05.06.2025, 07:53
Здравствуйте, у меня проблема с СП307, округляет число после выполнения функции сложения
Складываю float + unsigned, как выключить округление?
Действия всегда проводятся с однотипными переменными. 84182
Вам сначала конвертировать unsigned в float, иначе не получится.
Это можно сделать умножив целое на 1.0 (float), а уже потом сложить два float
Allekseus
05.06.2025, 09:29
Всем здравствуйте.
Проблема такая - не могу связать СП310 и ПЛК110. Бьюсь уже месяц с разной периодичностью подходов )
Скачал с сайта готовые примеры программ с настройками, когда панель master, а плк slave и наоборот. Но ничего не работает как я не старался. И все настройки проверял и программу менял. Один раз получилось, что плк в slave режиме увидел панель, но почему не понял. При этом, когда элементы управления на экране СП в режиме "порт PLC" панель реагирует на нажатие с задержкой и состояние этих элементов вообще не меняет. Кнопка остается красной например. В окне ввода значений ничего не меняется. Стоит их перевести в "Порт - Внутренние регистры" панель начинает шустро реагировать, но связи с плк тогда совсем никакой.
Подключаю с помощью кабеля из комплекта поставки RS232.
В чем может быть засада?
kondor3000
05.06.2025, 09:36
Всем здравствуйте.
Проблема такая - не могу связать СП310 и ПЛК110. Бьюсь уже месяц с разной периодичностью подходов )
Скачал с сайта готовые примеры программ с настройками, когда панель master, а плк slave и наоборот. Но ничего не работает как я не старался. И все настройки проверял и программу менял. Один раз получилось, что плк в slave режиме увидел панель, но почему не понял. При этом, когда элементы управления на экране СП в режиме "порт PLC" панель реагирует на нажатие с задержкой и состояние этих элементов вообще не меняет. Кнопка остается красной например. В окне ввода значений ничего не меняется. Стоит их перевести в "Порт - Внутренние регистры" панель начинает шустро реагировать, но связи с плк тогда совсем никакой.
Подключаю с помощью кабеля из комплекта поставки RS232.
В чем может быть засада?
Вам надо чётко сделать как в примере.
Когда панель мастер, если добавить регистры, которых нет в слейве или не правильно настроить сеть, то панель будет жёстко тормозить.
То есть в слейве должны быть все регистры, которые читает мастер (а в мастере ничего лишнего).
Если сами не решите вопрос, выкладывайте проекты. В расширенных настройках, добавить файл.
Кабель проверить на соответствие пинам нужного порта панели.
Кабель для прошивки ПЛК (RS232 Debag) не подходит, надо убрать перемычку, а лучше спаять новый для RS485.
Allekseus
06.06.2025, 08:23
Спасибо за ответ!
Не ожидал, что кто-то вообще возьмется помогать. Неожиданно ) Спасибо!
Вам надо чётко сделать как в примере.
В том то и дело, что я пример вообще не меняю. Пусть там будут все, даже не нужные мне кнопки и дисплеи ввода данных. Лишь бы заработало, а потом уже что-то свое делать изменять. В настойках меняю только протокол с RS485 указанного в примере, на RS232, так как кабель уже прилагался.
Получается первым под подозрение попадает кабель? Как его проверить - есть там эта перемычка или нет?
Allekseus
06.06.2025, 08:37
84194
Вот такой.
Allekseus
06.06.2025, 08:42
Все, вижу - это кабель КС14, для программирования. А нужен КС16. Разобрался, спасибо!
Только вопрос - достаточно убрать перемычку? Или нужно сделать связь 5го и 6го контакта как в схеме?
84195 84196
kondor3000
06.06.2025, 08:45
84194
Вот такой.
Перемычка нарисована на наклейке, с ней ПЛК можно программировать, но обмен работать с ней не будет.
Вход Debag 232 даже без перемычки работает только в режиме слейв.
Для мастера надо использовать порт RS232, перемычку разорвать ( спайка в самом 9 пиновом разъёме) или спаять новый кабель.
84194
Вот такой.
Насчёт конкретно СП не знаю, но другие панели (в качестве мастера) подключаются без проблем этим кабелем, даже распайка DB-9 подходит (на ПЛК использовать порт "RS-232" (верхний))
Allekseus
06.06.2025, 11:11
Спасибо всем!
Пошел паять кабель )
Доброго времени суток. Вопрос - может ли ПЛК110 работать с Modbus функциями 1 и 5 по TCP? Библиотека с раздела Codesys 2 предназначена только для Modbus RTU\ASCII, как я понимаю. Пока вопрос остро не стоит, но хотелось бы знать, возможна ли реализация вообще или нет.
Доброго времени суток. Вопрос - может ли ПЛК110 работать с Modbus функциями 1 и 5 по TCP? Библиотека с раздела Codesys 2 предназначена только для Modbus RTU\ASCII, как я понимаю. Пока вопрос остро не стоит, но хотелось бы знать, возможна ли реализация вообще или нет.
Реализация возможна любая
Здравствуйте.
Потерял проекты, так и не смог разобраться где они храняться.
при чем при выборе они есть
84244
а в проводнике нет
84245
Подскажите, где они находяться?
kondor3000
10.06.2025, 10:02
Здравствуйте.
Потерял проекты, так и не смог разобраться где они храняться.
при чем при выборе они есть
а в проводнике нет
Подскажите, где они находяться?
Вы их разложили по разным папкам, просто откройте проекты и сохраните в нужную папку, на рабочем столе например.
Подскажите, где они находяться?
Вам сложно развернуть выпадающий список где выделено слово Projects? Или нажать на значек папки со стрелкой вверх? Это всё средства винды, к порограммированию отношения не имеющие
Вам сложно развернуть выпадающий список где выделено слово Projects? Или нажать на значек папки со стрелкой вверх? Это всё средства винды, к порограммированию отношения не имеющие
84252
84253
А вы думаете, я этого не делал?
а перед тем как открыть. там не типа "последние файлы" ? ну и проверить папку пользователя. а не в Program Files
84252
84253
А вы думаете, я этого не делал?
окно выбора файла это тоже проводник, выделите нужные("потерянные") файлы и скопируйте, далее перенесите в другую папку
In_Da_Cher_A
10.06.2025, 14:19
посмотрите, что у вас пишет Проект- Опции, какие там директории указаны
и Проект - настройки куда сохранился проект, в какую директорию
что-то у вас криво встало изначально и проект сохраняется туда, куда изначально у файла ранее было сделано сохранение
Создать новый, даже пустой, проект и выбрать в меню Файл-->Сохранить как...
Откроется папка куда был сохранен самый последний проект. Ну и посмотреть какая это папка
Newcomer
10.06.2025, 14:54
Добрый день
Надо связать ПЛК160 с ПК по RS-232 для передачи данных. Какой кабель нужно использовать, КС14 или КС16 ?
kondor3000
10.06.2025, 14:58
Добрый день
Надо связать ПЛК160 с ПК по RS-232 для передачи данных. Какой кабель нужно использовать, КС14 или КС16 ?
Открываете сайт Овен и смотрите Аксессуары для ПЛК, там написано, какой для чего
или просто 2 страницы назад, в конце страницы.
Kalessin
19.06.2025, 18:32
Коллеги, приветствую!
Столкнулся с очень странным глюком режима эмуляции, может кто разъяснит что к чему:
Дано: проект в составе PLC_PRG и нескольких объектов-программ. Всё компилируется без ошибок и при подключении к ПЛК работает как задумано.
Но если проект запустить в режиме эмуляции, то в объектах перестаёт работать вся арифметика – сложение, вычитание, сравнение и пр. При этом в PLC_PRG та же арифметика работает.
Пример: в объекте помещаю блок ADD, на входах два числа, на выходе тестовая переменная, нигде больше не используемая. Запускаю эмуляцию, старт – числа не складываются. Подключаюсь к ПЛК – складываются правильно.
В то же время если этот же блок всунуть в PLC_PRG то он складывается и в эмуляции и при подключении.
Как так-то?
Коллеги, приветствую!
Столкнулся с очень странным глюком режима эмуляции, может кто разъяснит что к чему:
Дано: проект в составе PLC_PRG и нескольких объектов-программ. Всё компилируется без ошибок и при подключении к ПЛК работает как задумано.
Но если проект запустить в режиме эмуляции, то в объектах перестаёт работать вся арифметика – сложение, вычитание, сравнение и пр. При этом в PLC_PRG та же арифметика работает.
Пример: в объекте помещаю блок ADD, на входах два числа, на выходе тестовая переменная, нигде больше не используемая. Запускаю эмуляцию, старт – числа не складываются. Подключаюсь к ПЛК – складываются правильно.
В то же время если этот же блок всунуть в PLC_PRG то он складывается и в эмуляции и при подключении.
Как так-то?
А "объекты-программы" каким образом вызываются?
Kalessin
19.06.2025, 21:58
А "объекты-программы" каким образом вызываются?
Да как обычно, без затей. В объекте прописаны входные и выходные переменные, в PLC_PRG (он у меня на СFC) вызываю модуль с соответствующим именем, подключаю к нему переменные. Повторюсь, "в железе" всё это нормально работает, проблема именно с эмуляцией. Неудобство в том, что даже те куски кода, которые можно было бы отлаживать в спокойной обстановке, приходится править в цеху, с подключением к ПЛК.
Я уже на ноут грешить начинаю, он не то, чтобы совсем убитый, но старенький, 8 лет ему. Может ему производительности не хватать для эмуляции? Хотя проект относительно несложный, каких-то зубодробительных вычислений нет, простая арифметика.
Kalessin
19.06.2025, 23:50
таски что ли?
Эм... не совсем понял вопрос.
Имеется проект под ПЛК 110-32 ещё первой ревизии который. В PLC_PRG прописан энкодер, обработчик ошибок, инициализация и всё такое. Также есть две подпрограммы manual [PRG] и main [PRG] -- ручное правление осями и рабочий цикл. Они вызываются в PLC_PRG принимают переменные, передают, читают входы, дёргают выходы и т.д.
При подключении к контроллеру всё это работает.
Но в эмуляции отваливается арифметика в подпрограммах. Поначалу думал, что где-то накосячил в переменных, потому сделал такой трюк. Создаю в подпрограмме блок ADD на вход передаю два числа 7 и 3 например. на выход цепляю переменную test WORD. Запускаю эмуляцию. В test значение 0. Подключаюсь к ПЛК, запускаюсь. В test значение 10.
Но если я такую же конструкцию создаю непосредственно в PLC_PRG то и в эмуляции и при подключении переменная принимает значение 10.
Как-то так. Ситуация не прямо вот безвыходная, работать можно, но хочется понять суть. Вот только сейчас сообразил, что не догадался всё сбросить, перезагрузиться и откомпилировать проект заново. Может какой-то спонтанный глюк.
Екатерина777
07.07.2025, 08:36
Всех приветствую! В рамках учебы дано задание по тех процессу: подача продукта в накопительный бак и выход продукта из накопительного бака через насосную группу. Также в баке присутствует теплообменник и имеется вытяжной вентилятор, удаляющий летучую фракцию из бака. Необходимо: 1. Включение и вывод на требуемую производительность вытяжного вентилятора.2. Заливка емкости не менее чем до нижнего уровня.3. Прогрев до заданной температуры.4.Включение рабочего насоса.
При падении производительности насоса более чем на 20с необходимо включить резервный насос. Необходимо предусмотреть возможность как ручного, так и автоматического управления. Установка должна быть отключена также в следующих ситуациях (с соответствующей сигнализацией):1. Отклонение производительности вентилятора от требуемой более чем на 20с 2. Падение уровня ниже нижнего более чем на 10с 3. Отклонение производительности насосной группы от требуемой более чем на 30с4. Отклонение температуры от требуемой более чем на 30с.
1. Вентилятор имеет частотный привод и управляется аналоговым сигналом 4-20мА. Его максимальная производительность составляет 360 м3/час. Датчик потока имеет входной сигнал в 4-20мА и предел измерения 480 м3/час. Нам необходимо поддерживать производительность вентилятора на уровне 300 м3/час с точностью 2%.
2. В накопительном баке уровень может меняться от 0 до 5 метров. Жидкость в баке — вода. При этом нам необходимо поддерживать уровень в пределах от 1 до 4 метров. Уровень измеряем датчиком давления с пределами измерения 0-100кПа и выходом 4-20мА. Клапан подачи воды управляется дискретным сигналом 24В.
3. Температура в баке может меняться от 10 до 90°С при этом нам нужно ее поддерживать на уровне 60 °С с допустимым отклонением 2°С. Измерения производим датчиком температуры с пределом 0-100°С и выходом 4-20мА. Время полного хода клапана теплоносителя — 25с. Управляется клапан сигналом 4-20мА. Его характеристику считаем линейной.
4. Насосы имеют частотный привод и управляются аналоговым сигналом 4-20мА. Максимальная производительность составляет 36 м3/час. Датчик потока имеет входной сигнал в 4-20мА и предел измерения 48 м3/час. В работе всегда находится только один из насосов. Второй является резервным.
5. Измерения производим датчиком температуры с пределом 0-100°С и выходом 4-20мА.
6. Световая сигнализация и подача питания на частотные преобразователи управляется дискретными сигналами 24В.
Только начала знакомиться с программированием, не понимаю в каком направлении двигаться по данному заданию. Буду рада любым рекомендациям/подсказкам, а в особенности примерам.
In_Da_Cher_A
07.07.2025, 09:10
Только начала знакомиться с программированием, не понимаю в каком направлении двигаться по данному заданию. с проектирования контроллера - с определения числа аналоговых каналов ввода, каналов аналогового вывода, тоже самое дискретный ввод и вывод
исходя из этого выбираем плк и модули ввода/вывода
это даст общую структурную схему сау и потом фукнциональную схему автоматизации
потом уже приступают к конфигурированию собственно плк в соответствующей программе и программированию алгоритмов управления, это как бы вообще отдельная история.
Екатерина777
07.07.2025, 09:25
Функциональная схема есть, конфигурация плк настроена.
In_Da_Cher_A
07.07.2025, 10:08
Функциональная схема есть, конфигурация плк настроена.и где она?
и сразу сделайте условно разбиение на отдельные "контура" регулирования или управления
Екатерина777
07.07.2025, 10:32
Прикрепляю функциональную схему84708
In_Da_Cher_A
07.07.2025, 18:27
приемлимо, ну ок.
где структура сау? конфиг плк модули вот это всё?
In_Da_Cher_A
07.07.2025, 18:29
Прикрепляю функциональную схемувот из этого надо сделать функциональную схему автоматизации
Прошу помощи с программой. Был PLC 110-60 с программой дозирования воды , перенес все на PLC 110-60 m2. Вроде как все работает, но тут выясняется что дозирование вообще не работает, то есть задаем уставку к примеру 100 литров, нажимаем старт, слышно что клапан щелкает , но счетчик дозирования фигачит и фигачит до бесконечности, хотя видно, что программа отрабатывает корректно , на 100 литрах выполнение дозирования останавливается.
Если кому не сложно , посмотрите пожалуйста , выкладываю старую и новую версию программ
Я уже просто голову сломал , что может быть не так.
84819
и вот после того как программа выполнила условия , счетчик продолжает крутиться (да и за 5 секунд 5000 литров тоже не может налиться)
84821
Причем все это на всех 4 счетчиках дозирования
А самое главное у меня физически закрыты краны, но счетчик считает
atomo2
В ПЛЦ_ПРГ сделан безусловный вызов ПОУ WODA_DOZIROVKA_NR170, там есть строчка
wimpCount :=wimpCount + COUNTER_NR170_WATER, которая безусловно выполняется в каждом цикле. Поэтому и скорость дозировки выше, чем расход топлива ракеты Ангары-5.
atomo2
В ПЛЦ_ПРГ сделан безусловный вызов ПОУ WODA_DOZIROVKA_NR170, там есть строчка , которая безусловно выполняется в каждом цикле. Поэтому и скорость дозировки выше, чем расход топлива ракеты Ангары-5.
Так она раньше тоже ведь была, но как то работало же?))
Почему сейчас даже при закрытых кранах, при старте счетчик фигачит и фигачит?
atomo2
При включенном мониторинге в конфигурации ПЛК посмотреть состояния счетных входов. Если показания меняются при отключенном потоке, то разбираться с внешними датчиками. Я сильно не вникал в ваш алгоритм, но не увидел обнуления счетной переменной. Подсчет импульсов должен учитываться только при работе дозирующего устройства.
У этих ПЛК есть неприятная особенность - отсутствует возможность сбросить Fast Counter ни снаружи, ни из программы, это и создает проблемы, приходится городить огород.
atomo2
При включенном мониторинге в конфигурации ПЛК посмотреть состояния счетных входов. Если показания меняются при отключенном потоке, то разбираться с внешними датчиками. Я сильно не вникал в ваш алгоритм, но не увидел обнуления счетной переменной. Подсчет импульсов должен учитываться только при работе дозирующего устройства.
У этих ПЛК есть неприятная особенность - отсутствует возможность сбросить Fast Counter ни снаружи, ни из программы, это и создает проблемы, приходится городить огород.
Спасибо, буду проверять датчики, проблема именно у 110-60м2 ?
wcur := WATER_FACT_NR170;
wtimer(tme := t#120s, CUR := wcur, PREV := wprev, DOZ := WATER_DOZ_NR170, NORM_S := TRUE);
IF wtimer.TIME_OUT THEN
WATER_DOZ_NR170 := FALSE;
END_IF;
IF WATER_START_NR170 AND (NOT WATER_DOZ_NR170) THEN
WATER_START_NR170 := FALSE;
wimpCount := 0;
WATER_DOZ_NR170 := TRUE;
WATER_DONE_NR170 := FALSE;
wtmp_zad := WATER_ZAD_NR170;
wcur := 0;
wprev := 0;
END_IF;
IF WATER_START_NR170 AND WATER_DOZ_NR170 THEN
WATER_START_NR93_1 := FALSE;
END_IF;
IF WATER_DOZ_NR170 THEN
WATER_ZAD_NR170 := wtmp_zad;
counter_copy := COUNTER_NR170_WATER;
IF O_CL_NR170_WATER THEN
WCOUNTER_ACTIVE_NR170 := TRUE;
wimpCount := wimpCount + counter_copy;
END_IF;
WATER_FACT_NR170 := DWORD_TO_WORD(wimpCount / 88);
IF WATER_FACT_NR170 >= WATER_ZAD_NR170 THEN
WATER_DOZ_NR170 := FALSE;
WATER_DONE_NR170 := TRUE;
END_IF;
ELSE
WCOUNTER_ACTIVE_NR170 := FALSE;
END_IF;
IF WATER_STOP_NR170 = TRUE THEN
WATER_DOZ_NR170 := FALSE;
WATER_DONE_NR170 := TRUE;
WATER_STOP_NR170 := FALSE;
END_IF;
wprev := wcur; Вот переделаk код, теперь счетчик останавливается, но опять же протока нет.... что он считает то :D
но опять же протока нет.... что он считает то :D
а не может такого быть, что на старом плк была настроена фильтрация на входах, а на новом этого пока нет, поэтому и считает всякий мусор
capzap
В проекте применен FastCounter на FDI, в этом режиме фильтрации нет.
WATER_ZAD_NR170 := wtmp_zad;
counter_copy := COUNTER_NR170_WATER;
IF O_CL_NR170_WATER THEN
WCOUNTER_ACTIVE_NR170 := TRUE;
wimpCount := wimpCount + counter_copy;
END_IF;
1. Считываем показания аппаратного счетчика
2. Счетчик дозировки := Счетчик дозировки + показания аппаратного счетчика
3. Повторяем до выхода на 3-ю космическую скорость.
Чуете подвох?
Надо к счетчику дозировки добавлять разницу между актуальными данными аппаратного счетчика и его же данными с предыдущего цикла ПЛК. Причем учитывать переполнение аппаратного счетчика. При достижении максимального значение счетчик сам обнуляется и считает с нуля. Это и есть те неудобства, о которых я говорил выше.
capzap
В проекте применен FastCounter на FDI, в этом режиме фильтрации нет.
в этом может быть проблема?
даже сейчас по всем 4 дозировкам , хотя я ничего не запускал и ничего не бежит , счетчики фигачат 84822
atomo2
В теории да, если датчик расхода на механических контактах, например геркон. Дребезг есть даже у них. В любом случае, стоит убедиться в отсутствие изменений показаний аппаратного счетчика при отключенном датчике.
counter_copy := COUNTER_NR170_WATER;
Далее
wimpCount := wimpCount + counter_copy;
--
Происходит увеличение wimpCount на величину counter_copy в каждом цикле ПЛК.
COUNTER_NR170_WATER в проекте прикручен к аппаратному счетчику на FDI, он не сбрасывается.
Надо как-то так:
1. Однократно при запуске программы считать COUNTER_NR170_WATER в переменную например old_counter_copy,
2. При дозировке:
wimpCount := wimpCount + (COUNTER_NR170_WATER - old_counter_copy);
old_counter_copy:= COUNTER_NR170_WATER;
Останется только прикрутить контроль переполнения COUNTER_NR170_WATER.
---
В конфиге ПЛК при мониторинге смотрели показания счетчиков FDI?
Товарищи , какой то странный прикол, перезагружаю я ПЛК и из 4 дозировок только на 1 счетчике бегут показания сразу после перезагрузки.
Далее жму старт дозировки 170 счетчика и он работает нормально, то есть показания не бегут, жму стоп , все останавливается , жму старт снова все запускается и показания не бегут (но может все же вылететь после 15 раз так и опять побегут и поможет только перезагрузка)
на других 2х после перезагрузки не бегут сразу автоматом , но после того как жмешь старт начинают бежать и помогает только перезагрузка ПЛК
Как раз и получается что написали вы Валенок?
Далее
wimpCount := wimpCount + counter_copy;
--
Происходит увеличение wimpCount на величину counter_copy в каждом цикле ПЛК.
COUNTER_NR170_WATER в проекте прикручен к аппаратному счетчику на FDI, он не сбрасывается.
Надо как-то так:
1. Однократно при запуске программы считать COUNTER_NR170_WATER в переменную например old_counter_copy,
2. При дозировке:
wimpCount := wimpCount + (COUNTER_NR170_WATER - old_counter_copy);
old_counter_copy:= COUNTER_NR170_WATER;
Останется только прикрутить контроль переполнения COUNTER_NR170_WATER.
---
В конфиге ПЛК при мониторинге смотрели показания счетчиков FDI?
84828 вот как раз после перезагрузки ПЛК видно что 3 счетчик сам включился автоматически и у него 1. Остальные по 0 , даже 170 после старта и стопа, а так до перезагрузки на 1 Единцу увеличивались после старта
atomo2
Не столь важно первоначальное значение, сколь именно его прирост без работы внешних датчиков. Если прироста не наблюдается, значит с датчиками всё в порядке, следует искать ошибку в алгоритме подсчета\преобразования данных аппаратного счетчика в своей программе. Примерные пути уже обозначены.
Ну вроде как исправил, теперь просто так счетчик не бежит и при нажатии кнопки старт тоже.
PROGRAM WODA_DOZIROVKA_NR170
VAR
wtmp_zad : WORD;
wimpCount : DWORD;
wcur : INT;
wprev : INT;
startCounter : DWORD := 0;
delta : DWORD := 0;
wtimer : TIMERING;
END_VAR
wcur := WATER_FACT_NR170;
wtimer(
tme := t#120s,
CUR := wcur,
PREV := wprev,
DOZ := WATER_DOZ_NR170,
NORM_S := TRUE
);
IF wtimer.TIME_OUT THEN
WATER_DOZ_NR170 := FALSE;
END_IF;
IF WATER_START_NR170 AND (NOT WATER_DOZ_NR170) THEN
startCounter := COUNTER_NR170_WATER;
wimpCount := 0;
WATER_DOZ_NR170 := TRUE;
WATER_START_NR170 := FALSE;
WATER_DONE_NR170 := FALSE;
wtmp_zad := WATER_ZAD_NR170;
wcur := 0;
wprev := 0;
END_IF;
IF WATER_START_NR170 AND WATER_DOZ_NR170 THEN
WATER_START_NR93_1 := FALSE;
END_IF;
IF WATER_DOZ_NR170 THEN
WATER_ZAD_NR170 := wtmp_zad;
IF O_CL_NR170_WATER THEN
WCOUNTER_ACTIVE_NR170 := TRUE;
ELSE
WCOUNTER_ACTIVE_NR170 := FALSE;
END_IF;
delta := COUNTER_NR170_WATER - startCounter;
wimpCount := delta;
WATER_FACT_NR170 := DWORD_TO_WORD(wimpCount / 88);
ELSE
WCOUNTER_ACTIVE_NR170 := FALSE;
WATER_FACT_NR170 := 0;
END_IF;
IF WATER_FACT_NR170 >= WATER_ZAD_NR170 THEN
WATER_DOZ_NR170 := FALSE;
WATER_DONE_NR170 := TRUE;
END_IF;
IF WATER_STOP_NR170 = TRUE THEN
WATER_DOZ_NR170 := FALSE;
WATER_DONE_NR170 := TRUE;
WATER_STOP_NR170 := FALSE;
END_IF;
wprev := wcur;
И снова я) Подскажите как получается такой адрес?
Если в плк имеем адрес 78:11 Включение вентилятора 18
84866
то в панели на кнопке включения этого же вентилятора имеем адрес 0x 1259
84867
84868
И снова я) Подскажите как получается такой адрес?
Если в плк имеем адрес 78:11 Включение вентилятора 18
84866
то в панели на кнопке включения этого же вентилятора имеем адрес 0x 1259
84867
84868
Есть руководство по программированию ПЛК1ХХ, там много чего описано:
84869
kondor3000
16.07.2025, 07:56
И снова я) Подскажите как получается такой адрес?
Если в плк имеем адрес 78:11 Включение вентилятора 18
то в панели на кнопке включения этого же вентилятора имеем адрес 0x 1259
В каждом регистре по 16 бит, 78 *16 бит =1248, это нулевой бит в 78 регистре
Регистр 78 *16 бит +N (номер бита) =1248+11 =1259, это 11 бит в 78 регистре
N=1259-1248=11
Всем спасибо большое , разобрался
Накидал программу, для быстрого подсчета всех адресов делаем экспорт конфигурации из плк или пишем количество блоков, по порядку ручками в программу и получаем весь список адресов. Пишите ваши пожелания и хотелки, добавлю)
84878
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
class ModbusAddressCalculatorOrder(tk.Tk):
def __init__(self):
super().__init__()
self.title("Калькулятор адресов")
self.geometry("750x650")
self.resizable(True, True)
self.blocks = []
self.create_widgets()
self.columnconfigure(0, weight=1)
self.columnconfigure(1, weight=1)
self.rowconfigure(3, weight=1)
self.rowconfigure(6, weight=1)
def create_widgets(self):
padding = {'padx': 10, 'pady': 5}
ttk.Label(self, text="Тип блока:").grid(column=0, row=0, sticky="w", **padding)
self.type_var = tk.StringVar()
self.type_combo = ttk.Combobox(self, textvariable=self.type_var,
values=["Float", "2 byte", "8 bit", "4 bytes"], state="readonly")
self.type_combo.grid(column=1, row=0, sticky="ew", **padding)
self.type_combo.current(0)
ttk.Label(self, text="Количество:").grid(column=0, row=1, sticky="w", **padding)
self.count_entry = ttk.Entry(self)
self.count_entry.grid(column=1, row=1, sticky="ew", **padding)
self.count_entry.insert(0, "1")
self.btn_add = ttk.Button(self, text="Добавить блок", command=self.add_block)
self.btn_add.grid(column=0, row=2, columnspan=2, pady=10, sticky="ew")
self.btn_load_exp = ttk.Button(self, text="Загрузить .EXP", command=self.load_exp_file)
self.btn_load_exp.grid(column=0, row=7, columnspan=2, pady=10, sticky="ew")
tree_frame = ttk.Frame(self)
tree_frame.grid(column=0, row=3, columnspan=2, sticky="nsew", padx=10, pady=5)
tree_frame.columnconfigure(0, weight=1)
tree_frame.rowconfigure(0, weight=1)
self.tree = ttk.Treeview(tree_frame, columns=("Тип", "Количество"), show="headings")
self.tree.heading("Тип", text="Тип блока")
self.tree.heading("Количество", text="Количество")
self.tree.column("Тип", width=250)
self.tree.column("Количество", width=100)
self.tree.grid(column=0, row=0, sticky="nsew")
tree_scrollbar = ttk.Scrollbar(tree_frame, orient="vertical", command=self.tree.yview)
tree_scrollbar.grid(column=1, row=0, sticky="ns")
self.tree.configure(yscrollcommand=tree_scrollbar. set)
btn_frame = ttk.Frame(self)
btn_frame.grid(column=0, row=4, columnspan=2, pady=10, sticky="ew")
btn_frame.columnconfigure((0, 1, 2), weight=1)
ttk.Button(btn_frame, text="Удалить блок", command=self.delete_block).grid(column=0, row=0, padx=5, sticky="ew")
ttk.Button(btn_frame, text="Вверх", command=self.move_up).grid(column=1, row=0, padx=5, sticky="ew")
ttk.Button(btn_frame, text="Вниз", command=self.move_down).grid(column=2, row=0, padx=5, sticky="ew")
self.btn_calc = ttk.Button(self, text="Рассчитать адреса", command=self.calculate_addresses)
self.btn_calc.grid(column=0, row=5, columnspan=2, pady=10, sticky="ew")
self.text_frame = ttk.Frame(self)
self.text_frame.grid(column=0, row=6, columnspan=2, sticky="nsew", padx=10, pady=5)
self.text_frame.columnconfigure(0, weight=1)
self.text_frame.rowconfigure(0, weight=1)
self.result_text = tk.Text(self.text_frame, wrap="none", font=("Consolas", 10))
self.result_text.grid(column=0, row=0, sticky="nsew")
self.scrollbar_v = ttk.Scrollbar(self.text_frame, orient="vertical", command=self.result_text.yview)
self.scrollbar_v.grid(column=1, row=0, sticky="ns")
self.result_text.configure(yscrollcommand=self.scr ollbar_v.set)
self.scrollbar_h = ttk.Scrollbar(self.text_frame, orient="horizontal", command=self.result_text.xview)
self.scrollbar_h.grid(column=0, row=1, sticky="ew")
self.result_text.configure(xscrollcommand=self.scr ollbar_h.set)
self.result_text.config(state="normal")
def add_block(self):
t = self.type_var.get()
c = self.count_entry.get()
try:
c = int(c)
if c <= 0:
raise ValueError
except ValueError:
messagebox.showerror("Ошибка", "Введите корректное положительное число для количества!")
return
self.blocks.append({"type": t, "count": c})
self.refresh_tree()
def refresh_tree(self):
self.tree.delete(*self.tree.get_children())
for idx, block in enumerate(self.blocks):
self.tree.insert("", "end", iid=idx, values=(block["type"], block["count"]))
def delete_block(self):
selected = self.tree.selection()
if not selected:
messagebox.showinfo("Информация", "Выберите блок для удаления.")
return
idx = int(selected[0])
del self.blocks[idx]
self.refresh_tree()
def move_up(self):
selected = self.tree.selection()
if not selected:
messagebox.showinfo("Информация", "Выберите блок для перемещения.")
return
idx = int(selected[0])
if idx == 0:
return
self.blocks[idx], self.blocks[idx - 1] = self.blocks[idx - 1], self.blocks[idx]
self.refresh_tree()
self.tree.selection_set(idx - 1)
def move_down(self):
selected = self.tree.selection()
if not selected:
messagebox.showinfo("Информация", "Выберите блок для перемещения.")
return
idx = int(selected[0])
if idx == len(self.blocks) - 1:
return
self.blocks[idx], self.blocks[idx + 1] = self.blocks[idx + 1], self.blocks[idx]
self.refresh_tree()
self.tree.selection_set(idx + 1)
def calculate_addresses(self):
addr = 0
lines = []
for idx, block in enumerate(self.blocks):
t = block["type"]
c = block["count"]
if t in ["Float", "4 bytes"]:
length = 2
total_length = c * length
elif t == "2 byte":
length = 1
total_length = c * length
elif t == "8 bit":
total_length = (c + 1) // 2
else:
messagebox.showerror("Ошибка", f"Неизвестный тип блока: {t}")
return
start_block = addr
end_block = addr + total_length - 1
lines.append(f"{idx + 1}. {t} ({c} шт.): от регистра {start_block} до {end_block}")
if t in ["Float", "2 byte", "4 bytes"]:
for i in range(c):
start_el = addr + i * length
end_el = start_el + length - 1
if length == 1:
lines.append(f" Элемент {i + 1}: регистр {start_el}")
else:
lines.append(f" Элемент {i + 1}: регистры {start_el} - {end_el}")
elif t == "8 bit":
for i in range(c):
reg = addr + i // 2
bit_pos = (i % 2) * 8
bit_addresses = [reg * 16 + bit_pos + b for b in range(8)]
bit_addresses_str = ", ".join(str(b) for b in bit_addresses)
lines.append(f" Элемент {i + 1}: регистр {reg}, биты {bit_pos}-{bit_pos + 7} → битовые адреса [{bit_addresses_str}]")
addr = end_block + 1
if lines:
lines.append(f"\nИтоговый конечный адрес регистра: {addr - 1}")
else:
lines.append("Список блоков пуст")
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, "\n".join(lines))
def load_exp_file(self):
filepath = filedialog.askopenfilename(
title="Выберите файл .EXP",
filetypes=[("EXP files", "*.exp"), ("Все файлы", "*.*")]
)
if not filepath:
return
blocks_from_file = self.parse_exp_modules(filepath)
if blocks_from_file:
self.blocks = []
for count, block_type in blocks_from_file:
self.blocks.append({"type": block_type, "count": count})
self.refresh_tree()
messagebox.showinfo("Готово", f"Загружено {len(blocks_from_file)} блоков из файла.")
else:
messagebox.showwarning("Внимание", "Не удалось найти подходящие блоки в файле.")
def parse_exp_modules(self, filename):
results = []
count = 0
prev_module = None
module_aliases = {
'float': 'Float',
'2 byte': '2 byte',
'8 bits': '8 bit',
'4 byte': '4 bytes' # поддержка _MODULE_NAME: '4 byte'
}
encodings = ['utf-8', 'cp1251', 'latin1']
for enc in encodings:
try:
with open(filename, 'r', encoding=enc) as f:
for line in f:
line = line.strip()
if line.startswith("_MODULE_NAME:"):
start = line.find("'")
end = line.rfind("'")
if start != -1 and end != -1 and end > start:
raw = line[start + 1:end].strip().lower()
block_type = module_aliases.get(raw)
if not block_type:
if prev_module is not None:
results.append((count, prev_module))
prev_module = None
count = 0
continue
if block_type == prev_module:
count += 1
else:
if prev_module is not None:
results.append((count, prev_module))
prev_module = block_type
count = 1
if prev_module is not None:
results.append((count, prev_module))
break
except Exception:
continue
return results
if __name__ == "__main__":
app = ModbusAddressCalculatorOrder()
app.mainloop()
Добрый день, подскажите пожалуйста вот такой момент.
Если я добавлю в модбас fix еще 1 адрес , то у меня все адреса что ниже сдвинуться? Или то что я добавляю в модбаск fix на адресацию не повлияет.
85038
kondor3000
28.07.2025, 08:08
Добрый день, подскажите пожалуйста вот такой момент.
Если я добавлю в модбас fix еще 1 адрес , то у меня все адреса что ниже сдвинуться? Или то что я добавляю в модбаск fix на адресацию не повлияет.
Не влияет, это было проще самому проверить, чем писать.
В модбас fix вы добавляете новый порт или интерфейс, а не адрес слейва.
Имею контроллер ОВЕН ПЛК 110-60 и среду программирования CoDeSys V2.3. Настройка фильтров входных сигналов распространяется на все входы (кроме быстрых)? У быстрых своя настройка. Или можно настраивать индивидуально каждую группу из 8 входов Discrete inputs[FIX] AT %IB.0, AT %IB.1, AT %IB.2 и AT %IB.3? Я что-то не нашел индивидуальную настройку для AT %IB.0, AT %IB.1, AT %IB.2 и AT %IB.3.
kondor3000
06.08.2025, 21:59
Имею контроллер ОВЕН ПЛК 110-60 и среду программирования CoDeSys V2.3. Настройка фильтров входных сигналов распространяется на все входы (кроме быстрых)? У быстрых своя настройка. Или можно настраивать индивидуально каждую группу из 8 входов Discrete inputs[FIX] AT %IB.0, AT %IB.1, AT %IB.2 и AT %IB.3? Я что-то не нашел индивидуальную настройку для AT %IB.0, AT %IB.1, AT %IB.2 и AT %IB.3.
Для быстрых входов и обычных дискретных входов, фильтры общие на все входы.
Кроме энкодеров и быстрых счётчиков
Добрый день, подскажите бредмаузер может блокировать связь между онлайн симулятором панели weintek и codesys 2.5 режиме эмуляции. Раньше все работало , теперь нет
kondor3000
11.08.2025, 07:53
Добрый день, подскажите бредмаузер может блокировать связь между онлайн симулятором панели weintek и codesys 2.5 режиме эмуляции. Раньше все работало , теперь нет
Симулятор панели работает с живым ПЛК, а не симулятором в codesys 2.3.
В codesys 3.5 можно работать с виртуальным ПЛК.
Симулятор панели работает с живым ПЛК, а не симулятором в codesys 2.3.
В codesys 3.5 можно работать с виртуальным ПЛК.
Спасибо, мне казалось что и так может тоже;)
Подскажите еще пожалуйста вот такой момент, разбираюсь в чужом проекте 85317 85318
Кнопка включения ПВС на панели имеет адрес 0x44, как я понял ведь должен быть адрес 3x0:05 (ON_OFF_PVS_FUG)
ПВС вообще не работает и я вот не пойму проблема в неправильном адресе кнопки или вообще программный блок не полный 85319 85320 85324
Как я понял MAN_Regulator это ручной ввод(оно нам не интересно) , а нас интересует AUTO_MAN атематическое регулирование? а ON_OFF_PVS_FUG это сброс регулятора и разрешение работы.
И мне нужно включить AUTO_MAN и ON_OFF_PVS_FUG
85322 проект плк
85323 проект панели
Обновил программу для подсчета адресов из конфигурации плк теперь считает как 3x , и так же пересчитывает в 0x
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
class ModbusAddressCalculatorOrder(tk.Tk):
def __init__(self):
super().__init__()
self.title("Калькулятор адресов")
self.geometry("750x700")
self.resizable(True, True)
self.blocks = []
self.create_widgets()
self.columnconfigure(0, weight=1)
self.columnconfigure(1, weight=1)
self.rowconfigure(3, weight=1)
self.rowconfigure(6, weight=1)
def create_widgets(self):
padding = {'padx': 10, 'pady': 5}
ttk.Label(self, text="Тип блока:").grid(column=0, row=0, sticky="w", **padding)
self.type_var = tk.StringVar()
self.type_combo = ttk.Combobox(self, textvariable=self.type_var,
values=["Float", "2 byte", "8 bit", "4 bytes"], state="readonly")
self.type_combo.grid(column=1, row=0, sticky="ew", **padding)
self.type_combo.current(0)
ttk.Label(self, text="Количество:").grid(column=0, row=1, sticky="w", **padding)
self.count_entry = ttk.Entry(self)
self.count_entry.grid(column=1, row=1, sticky="ew", **padding)
self.count_entry.insert(0, "1")
self.btn_add = ttk.Button(self, text="Добавить блок", command=self.add_block)
self.btn_add.grid(column=0, row=2, columnspan=2, pady=10, sticky="ew")
# Галочка для пересчета адресов в 0x
self.use_hex_var = tk.BooleanVar(value=False)
self.chk_hex = ttk.Checkbutton(self, text="Показывать адреса в 0x", variable=self.use_hex_var)
self.chk_hex.grid(column=0, row=2, columnspan=2, sticky="e", padx=10)
self.btn_load_exp = ttk.Button(self, text="Загрузить .EXP", command=self.load_exp_file)
self.btn_load_exp.grid(column=0, row=7, columnspan=2, pady=10, sticky="ew")
tree_frame = ttk.Frame(self)
tree_frame.grid(column=0, row=3, columnspan=2, sticky="nsew", padx=10, pady=5)
tree_frame.columnconfigure(0, weight=1)
tree_frame.rowconfigure(0, weight=1)
self.tree = ttk.Treeview(tree_frame, columns=("Тип", "Количество"), show="headings")
self.tree.heading("Тип", text="Тип блока")
self.tree.heading("Количество", text="Количество")
self.tree.column("Тип", width=250)
self.tree.column("Количество", width=100)
self.tree.grid(column=0, row=0, sticky="nsew")
tree_scrollbar = ttk.Scrollbar(tree_frame, orient="vertical", command=self.tree.yview)
tree_scrollbar.grid(column=1, row=0, sticky="ns")
self.tree.configure(yscrollcommand=tree_scrollbar. set)
btn_frame = ttk.Frame(self)
btn_frame.grid(column=0, row=4, columnspan=2, pady=10, sticky="ew")
btn_frame.columnconfigure((0, 1, 2), weight=1)
ttk.Button(btn_frame, text="Удалить блок", command=self.delete_block).grid(column=0, row=0, padx=5, sticky="ew")
ttk.Button(btn_frame, text="Вверх", command=self.move_up).grid(column=1, row=0, padx=5, sticky="ew")
ttk.Button(btn_frame, text="Вниз", command=self.move_down).grid(column=2, row=0, padx=5, sticky="ew")
self.btn_calc = ttk.Button(self, text="Рассчитать адреса", command=self.calculate_addresses)
self.btn_calc.grid(column=0, row=5, columnspan=2, pady=10, sticky="ew")
self.text_frame = ttk.Frame(self)
self.text_frame.grid(column=0, row=6, columnspan=2, sticky="nsew", padx=10, pady=5)
self.text_frame.columnconfigure(0, weight=1)
self.text_frame.rowconfigure(0, weight=1)
self.result_text = tk.Text(self.text_frame, wrap="none", font=("Consolas", 10))
self.result_text.grid(column=0, row=0, sticky="nsew")
self.scrollbar_v = ttk.Scrollbar(self.text_frame, orient="vertical", command=self.result_text.yview)
self.scrollbar_v.grid(column=1, row=0, sticky="ns")
self.result_text.configure(yscrollcommand=self.scr ollbar_v.set)
self.scrollbar_h = ttk.Scrollbar(self.text_frame, orient="horizontal", command=self.result_text.xview)
self.scrollbar_h.grid(column=0, row=1, sticky="ew")
self.result_text.configure(xscrollcommand=self.scr ollbar_h.set)
self.result_text.config(state="normal")
def add_block(self):
t = self.type_var.get()
c = self.count_entry.get()
try:
c = int(c)
if c <= 0:
raise ValueError
except ValueError:
messagebox.showerror("Ошибка", "Введите корректное положительное число для количества!")
return
self.blocks.append({"type": t, "count": c})
self.refresh_tree()
def refresh_tree(self):
self.tree.delete(*self.tree.get_children())
for idx, block in enumerate(self.blocks):
self.tree.insert("", "end", iid=idx, values=(block["type"], block["count"]))
def delete_block(self):
selected = self.tree.selection()
if not selected:
messagebox.showinfo("Информация", "Выберите блок для удаления.")
return
idx = int(selected[0])
del self.blocks[idx]
self.refresh_tree()
def move_up(self):
selected = self.tree.selection()
if not selected:
messagebox.showinfo("Информация", "Выберите блок для перемещения.")
return
idx = int(selected[0])
if idx == 0:
return
self.blocks[idx], self.blocks[idx - 1] = self.blocks[idx - 1], self.blocks[idx]
self.refresh_tree()
self.tree.selection_set(idx - 1)
def move_down(self):
selected = self.tree.selection()
if not selected:
messagebox.showinfo("Информация", "Выберите блок для перемещения.")
return
idx = int(selected[0])
if idx == len(self.blocks) - 1:
return
self.blocks[idx], self.blocks[idx + 1] = self.blocks[idx + 1], self.blocks[idx]
self.refresh_tree()
self.tree.selection_set(idx + 1)
def calculate_addresses(self):
addr = 0
lines = []
use_hex = self.use_hex_var.get() # галочка для hex
def fmt_reg(r):
return f"0x{r:02X}" if use_hex else f"3x{r}"
for idx, block in enumerate(self.blocks):
t = block["type"]
c = block["count"]
if t in ["Float", "4 bytes"]:
length = 2
total_length = c * length
elif t == "2 byte":
length = 1
total_length = c * length
elif t == "8 bit":
total_length = (c + 1) // 2
else:
messagebox.showerror("Ошибка", f"Неизвестный тип блока: {t}")
return
start_block = addr
end_block = addr + total_length - 1
lines.append(f"{idx + 1}. {t} ({c} шт.): от регистра {fmt_reg(start_block)} до {fmt_reg(end_block)}")
if t in ["Float", "2 byte", "4 bytes"]:
for i in range(c):
start_el = addr + i * length
end_el = start_el + length - 1
if length == 1:
lines.append(f" Элемент {i + 1}: регистр {fmt_reg(start_el)}")
else:
lines.append(f" Элемент {i + 1}: регистры {fmt_reg(start_el)} - {fmt_reg(end_el)}")
elif t == "8 bit":
for i in range(c):
reg = addr + i // 2
bit_pos = (i % 2) * 8
bit_addresses = [reg * 16 + bit_pos + b for b in range(8)]
bit_addresses_str = ", ".join(fmt_reg(b) for b in bit_addresses)
lines.append(f" Элемент {i + 1}: регистр {fmt_reg(reg)}, биты {bit_pos}-{bit_pos + 7} → битовые адреса [{bit_addresses_str}]")
addr = end_block + 1
if lines:
lines.append(f"\nИтоговый конечный адрес регистра: {fmt_reg(addr - 1)}")
else:
lines.append("Список блоков пуст")
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, "\n".join(lines))
def load_exp_file(self):
filepath = filedialog.askopenfilename(
title="Выберите файл .EXP",
filetypes=[("EXP files", "*.exp"), ("Все файлы", "*.*")]
)
if not filepath:
return
blocks_from_file = self.parse_exp_modules(filepath)
if blocks_from_file:
self.blocks = []
for count, block_type in blocks_from_file:
self.blocks.append({"type": block_type, "count": count})
self.refresh_tree()
messagebox.showinfo("Готово", f"Загружено {len(blocks_from_file)} блоков из файла.")
else:
messagebox.showwarning("Внимание", "Не удалось найти подходящие блоки в файле.")
def parse_exp_modules(self, filename):
results = []
count = 0
prev_module = None
module_aliases = {
'float': 'Float',
'2 byte': '2 byte',
'8 bits': '8 bit',
'4 byte': '4 bytes'
}
encodings = ['utf-8', 'cp1251', 'latin1']
for enc in encodings:
try:
with open(filename, 'r', encoding=enc) as f:
for line in f:
line = line.strip()
if line.startswith("_MODULE_NAME:"):
start = line.find("'")
end = line.rfind("'")
if start != -1 and end != -1 and end > start:
raw = line[start + 1:end].strip().lower()
block_type = module_aliases.get(raw)
if not block_type:
if prev_module is not None:
results.append((count, prev_module))
prev_module = None
count = 0
continue
if block_type == prev_module:
count += 1
else:
if prev_module is not None:
results.append((count, prev_module))
prev_module = block_type
count = 1
if prev_module is not None:
results.append((count, prev_module))
break
except Exception:
continue
return results
if __name__ == "__main__":
app = ModbusAddressCalculatorOrder()
app.mainloop()
85325 85326
kondor3000
15.08.2025, 07:52
У вас все адреса не правильные, и посчитали вы не правильно. Читайте предыдущую страницу.
Разберитесь сначала с адресами и функциями, проверьте в работе.
0х - это запись и чтение бит,
44 - номер бита, попадает в регистр 2 бит 12 ( 2*16+12=44 ),
4х -чтение и запись регистров, 4х_Bit (Доступ к битам в регистре) адрес 2 бит 12 85327
ну как так то?:eek: почему не правильно посчитал, все остальные адреса работают и совпадают , на предыдущей станице тоже все адреса пересчитал прописал и все заработало
Проекты не мои и все работает на 3x и 0x адресах (вообще не видел 4x адресов)
вот берем конфигурацию плк 85329
первые 2шт 8bits у нас получается
8 bit (2 шт.)
Элемент 1: регистр 0, биты 0-7 → битовые адреса [0, 1, 2, 3, 4, 5, 6, 7]
Элемент 2: регистр 0, биты 8-15 → битовые адреса [8, 9, 10, 11, 12, 13, 14, 15]
или
8 bit (2 шт.)
Элемент 1: регистр 3x0, биты 0-7 → битовые адреса [3x0, 3x1, 3x2, 3x3, 3x4, 3x5, 3x6, 3x7]
Элемент 2: регистр 3x0, биты 8-15 → битовые адреса [3x8, 3x9, 3x10, 3x11, 3x12, 3x13, 3x14, 3x15]
или
8 bit (2 шт.)
Элемент 1: регистр 0x00, биты 0-7 → битовые адреса [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07]
Элемент 2: регистр 0x00, биты 8-15 → битовые адреса [0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F]
разве нет?
kondor3000
15.08.2025, 09:54
1х - только чтение бит,
0х - запись и чтение бит,
3х - только чтение регистров, 3х_Bit - только чтение бит в регистре,
4х- запись и чтение регистров, 4х_Bit - запись и чтение бит в регистре,
1х - только чтение бит,
0х - запись и чтение бит,
3х - только чтение регистров, 3х_Bit - только чтение бит в регистре,
4х- запись и чтение регистров, 4х_Bit - запись и чтение бит в регистре,
я это понимаю) Но все тут проекты как то работают так , как я написал)
выше если интересно откройте проект панели HMI 192.6.0.42.rar проект панели и посмотрите все адреса.
kondor3000
15.08.2025, 10:10
я это понимаю) Но все тут проекты как то работают так , как я написал)
выше если интересно откройте проект панели HMI 192.6.0.42.rar проект панели и посмотрите все адреса.
Что значит как то работают?
0х не соответствует области 3х_Bit , если у вас только чтение, то область должна быть 1х (2х),
для 0х соответствие 4х_Bit
Это "как то работает" прокатит только на ПЛК Овен, и только на чтение, записи не будет.
Что значит как то работают?
0х не соответствует области 3х_Bit , если у вас только чтение, то область должна быть 1х (2х),
для 0х соответствие 4х_Bit
Это "как то работает" прокатит только на ПЛК Овен, и только на чтение, записи не будет.
вот как раз все на плк Овен и сделано) я и пытаюсь все исправить , потихоньку получается
kondor3000
15.08.2025, 10:46
вот как раз все на плк Овен и сделано) я и пытаюсь все исправить , потихоньку получается
Это не значит, что надо делать не правильно, а то так и будете дальше криво делать.
MakSevos
20.08.2025, 09:10
Здравствуйте у меня невозможно добавить во вкладку ресурсы никакие объекты. ПЛК110-32
kondor3000
20.08.2025, 09:20
Здравствуйте у меня невозможно добавить во вкладку ресурсы никакие объекты. ПЛК110-32
И что вы хотите добавить в Ресурсы, если там ничего добавить нельзя?
Добавлять можно только во вложенные объекты. Например, биб-ки в Менеджер биб-к или переменные в Глобальные переменные.
Алекс_инд
28.08.2025, 12:20
помогите что я делаю не так?
есть простой проект, я создал фб и в него не поступают данные. почему?
соответственно и на выходе с него ничего не работает.
я гдето не так объявляю переменные?
передачи по сетям работают нормально
85454
85453
Алекс_инд
Переменной i3 внутри ФБ нигде не присваивается никакого значения. По умолчанию оно будет равно нулю, поэтому условие в ФБ не выполняется.
Алекс_инд
28.08.2025, 19:06
Алекс_инд
Переменной i3 внутри ФБ нигде не присваивается никакого значения. По умолчанию оно будет равно нулю, поэтому условие в ФБ не выполняется.
оно и без нее точно так же не работает. остальные входные тоже с вопросом без значений.
In_Da_Cher_A
28.08.2025, 19:53
я создал фб и в него не поступают данные. почему?у вас сделан ФБ с двумя входами И1 И2 и одним выходом О1
что вы в программе подаёте на вход И2?
соответственно и на выходе с него ничего не работает.а что вы делаете и с какой переменной внутри ФБ?
что я делаю не так?а что вы хотите сделать?
я гдето не так объявляю переменные?вы неправильно создали ФБ и алгоритм внутри ФБ
вы неправильно использовали ФБ в основном коде программы
kondor3000
28.08.2025, 20:31
оно и без нее точно так же не работает. остальные входные тоже с вопросом без значений.
Чтобы посмотреть, как работает ФБ, надо вызвать его экземпляр, дважды щёлкнуть по ФБ в дереве, выбрать нужный экземпляр и нажать ОК 85471
И как уже сказали I3 в IF надо изменить, например на I1
Алекс_инд
28.08.2025, 21:28
Чтобы посмотреть, как работает ФБ, надо вызвать его экземпляр, дважды щёлкнуть по ФБ в дереве, выбрать нужный экземпляр и нажать ОК 85471
И как уже сказали I3 в IF надо изменить, например на I1
спасибо заработало/
я не знал что надо Т4 в поу еще раз выбрать.
меня вот это смущало при нажатии f5. я ж не знал.....
85474
про и3 это и так понятно было.
я на овены перешел месяц назад. до этого я 25 лет кодил 8032 авр пик и стм32. на маш кодах, асме и си. и в кодесисе я пока не могу привыкнуть что место объявления переменных влияет что они то передают значения то нет. вернее непривычно глобальные объявляются
вот так передает
85472
а вот так нет
85473
понятно что локальные глобальные (volatile которые в си) локальная сильнее глобальной.....
непривычно короче.
короче ассемблер и си рулят. а это какая то мешанина асма си паскаля бейсика......двоеточия, энды какието везде.....
kondor3000
28.08.2025, 22:25
непривычно короче.
короче ассемблер и си рулят. а это какая то мешанина асма си паскаля бейсика......двоеточия, энды какието везде.....
Это дело привычки, за неделю-другую привыкните. Зато все контроллеры и прог. реле с языком ST (Скады тоже), сможете программировать.
В реле Овен, тоже есть ST, только там возможностей меньше.
Алекс_инд
28.08.2025, 23:06
ну тык я с реле и принимаю аналоговый сигнал. а блок питания его подает.
у меня натурные испытания. живые так сказать.
я сразу все типы приборов и сетей запустил - 485 от пр102, на экран через езернет, в клауд и в приложение тоже все доходит - там оплатил 200 рублей.
пр102 дешевле чем модуль расширения))))
с электроникой то все понятно - поэтому все сети я освоил за полчаса, чуднО как среда программирования работает.
85475
Алекс_инд
28.08.2025, 23:16
вобщем спасибо. дьявол в мелочах
In_Da_Cher_A
29.08.2025, 08:02
я ж не знал.....
про и3 это и так понятно было.сам создал проблему и сам решил? :D
я на овены перешел месяц назад. до этого я 25 лет кодил 8032 авр пик и стм32. на маш кодах, асме и си. ну тогда должн быть знакома абревиатура RTFM
и в кодесисе я пока не могу привыкнуть что место объявления переменных влияет что они то передают значения то нет. вернее непривычно глобальные объявляются85476что там такого? выбрал класс оно само всё сделает
Алекс_инд
29.08.2025, 10:57
основная проблема была в том что я не знал как смотреть показания внутренних переменных блока.
rtfm это обычно линукс) а не мануал)) да и мануалов тысячи страниц - пока все прочтешь уже все проекты уйдут.
Алекс_инд
08.09.2025, 23:26
господа)) нужна бригада))
как работает логический элемент И??))
когда на оба входа подано 1 на выходе тоже 1. ну как бы с 12 лет знаю.
но в плк чтото там явно с циклами плк подмешивается.
подскажите как решить?
подаю на счетчик через этот самый и такты 0,5 секунды. пока на нижнем входе 1 то счетчик верно считает +1 каждые 2 секунды.
когда на нижний вход подаю 0(false) то счетчик за секунду насчитывает 1000.
что я делаю не так и почему так?
я даже свой и создал на ст как фб - итог тот же
надо отключать счетчик.
85654
85655
Обновить порядок, попробовать снова.
Я тут в ночИ заглянул. Могу ошибаться или советоваь не то :)
1. Поставь Автоматический порядок выполнения
2. ПРоверь, не заезжает ли где память друг на друга
3. Выложи проект
(Иду спать)
In_Da_Cher_A
09.09.2025, 08:50
порядок выполнения через задницу, плк не знает что ему делать
..
Ну конкретно здесь с порядком все норм, за исключением того, что с счётчика забирается то, что в ОЛ обзывается спецназванием "задержкой на цикл", а здесь просто забирается результат прошлого прогона счётчика.
С “и" на картинках все норм. Блинк в работе и там и там.
Касаемо порядка - в рамках картинок проблем нет
Вот проблема с "и". Из-за порядка
85662
Что внутри самопального фб - знает только автор. Даже если он что рассказывал - это не описание работы, а описание хотелки как должно работать. Так же никто кроме автора не знает что вокруг картинок.
И вообще - на что жалуемся? На какой “и"?
Пункт 3 из ответа Cs-Cs самый верный ответ здесь
Алекс_инд
09.09.2025, 10:48
самый просто И
85669
самый просто И
85669
Ну и? Т.к вы знаете с 12 лет как работает "И" и после
IF a AND b THEN x:=TRUE; ELSE x:=FALSE;
END_IF;
я предположу (но это не точно!) что вы пишите прям из-за стола задув свечи. Поздравляю вас с 12-летием.
Без обид:
x := a AND b;
По делу.
За пределами ваших картинок подтвердилось что вы таки накуролесили с порядком (выше картинок). Но опять же, не факт что именно порядок - проблема.
Зачем-то вызываете счетчик 2 раза. Это само по себе нормально, но анализировать условия вызовов учитывая еще и порядок - у меня нет времени.
Если с ходу - счетчик будет тикать как минимум всегда (по блинку) если в его 2й вызов будет всегда залетать FALSE
--
ловите лайфхак
bl1: BLINK := (ENABLE := TRUE, TIMELOW := T#1s, TIMEHIGH := T#1s);
А в поле кода оторвите и выкиньте квадраты к блинку.
Абсолютно тоже самое, но сможете прям находу экспериментить с блинком не думая что забудете что-то вернуть назад. Просто тырк-пырк питание и всё вернулось.
Алекс_инд
09.09.2025, 11:24
стер второй счетчик - заработало как надо.
как мне грамотно еще несколько счетчиков вставить в другие процессы в этом проекте?
я предположу (но это не точно!) что вы пишите прям из-за стола задув свечи. Поздравляю вас с 12-летием.
Без обид:
x := a AND b;
не привык я к этой среде. в кеиле пишется a&b=x.
ловите лайфхак
это где в каком окне такое написать?
стер второй счетчик - заработало как надо.
Мой расчетный счет ...
как мне грамотно еще несколько счетчиков вставить в другие процессы в этом проекте?
Верхнему столику повторите пожалуста
не привык я к этой среде. в кеиле пишется a&b=x.
Привыкайте. В си вообще x=a&&b или x=a&b в зависимости от того что хотите. Т.е еще и хотеть правильно нужно.
(хотя кому я это? Извините, не увидел где-то ранее - "от машинных кодов до си99")
Про кеил не слышал, но смысл понятен и понял почему вы здесь с квадратиков начали.
это где в каком окне такое написать?
Выше, в объявлениях же
bl1: BLINK ...
85680
Алекс_инд
09.09.2025, 11:42
смысл понятен и думаю понял почему вы здесь с квадратиков начали.
если б мне понять как в ст входы выходы притянуть - я б наверно сразу все на нем попробовал бы написать.
хотя пока тоже не понимаю как в ст использовать фб из библиотек.
в микропроцессоре то это просто регистр с именем/физическим адресом, который задан жестко и не меняется никогда))) а тут я чото пока не вычитал как входы выходы по адресу в памяти найти. хотя подозрение уже есть.
короче все эти программулины надстроенные верхним уровнем над софтом порцессора на плате плк - какаято дичь.
In_Da_Cher_A
09.09.2025, 12:03
короче все эти программулины надстроенные верхним уровнем над софтом порцессора на плате плк - какаято дичь.да да только командная строка, только хардкор, весь код надо писать в блокноте да да
Алекс_инд
09.09.2025, 12:07
Не. Кеил.))))
kondor3000
09.09.2025, 12:31
если б мне понять как в ст входы выходы притянуть - я б наверно сразу все на нем попробовал бы написать.
хотя пока тоже не понимаю как в ст использовать фб из библиотек.
С этого надо было начинать, разобраться что к чему, на одном простом примере, нажать F2 и вызвать нужный блок.
Уважаемые форумчане добрый день! Прошу Вас просветить по поводу обмена данными по Modbus RTU over TCP ,есть ли такие библиотеки для КДС 2.3,если есть то подскажите, где можно скачать.
С Уважением!
Прошу прощения если не в тему.
Уважаемые форумчане добрый день! Прошу Вас просветить по поводу обмена данными по Modbus RTU over TCP ,есть ли такие библиотеки для КДС 2.3,если есть то подскажите, где можно скачать.
С Уважением!
Не встречал. Обычно используется Modbus TCP. Чем вызвана такая необходимость?
В проекте заложен Nport5150 а, он как стало понятно уже после того как проект утвердил заказчик "недоконвертертирует" RTU в TCP в КДС 3.5 есть "OwenCommunication" , есть ли что то подобное в 2.3
kondor3000
11.09.2025, 09:44
В проекте заложен Nport5150 а, он как стало понятно уже после того как проект утвердил заказчик "недоконвертертирует" RTU в TCP в КДС 3.5 есть "OwenCommunication" , есть ли что то подобное в 2.3
OwenCommunication - это библиотечный мастер или слейв. В 2.3 тоже есть биб-ки обмена и даже примеры выложены на сайте.
Примеры подключения стороннего оборудования и устройств с нестандартными протоколами
Примеры сетевого обмена через биб-ки / Обмен через библиотеки Modbus и OwenNet https://owen.ru/product/codesys_v2/example_program
В проекте заложен Nport5150 а, он как стало понятно уже после того как проект утвердил заказчик "недоконвертертирует" RTU в TCP в КДС 3.5 есть "OwenCommunication" , есть ли что то подобное в 2.3
Засада!!! Примеры сетевого обмена через TCP и UDP конечно есть, но вот формировать ModbusRTU-пакет и потом ответный разбирать придется ручками. Не проще NPort на МКОН заменить?
В проекте заложен Nport5150 а, он как стало понятно уже после того как проект утвердил заказчик "недоконвертертирует" RTU в TCP в КДС 3.5 есть "OwenCommunication" , есть ли что то подобное в 2.3
проект утвердил заказчик , уже поздно что то менять госсструктура:(
In_Da_Cher_A
11.09.2025, 13:00
проект утвердил заказчик , уже поздно что то менять госсструктура:(
даже госструктура и заказчик не могут отменить законы физики или изменить их
..есть ли что то подобное в 2.3
Вот прям комплектного - нет.
Раз заказчик невменяемый/неизменяемый* - то в 2.3 есть syslibsocket, а значит можно сделать
*Сам иногда охреневаю от таких эльфийских танкеров
Доброе. ПЛК63М по 1.94, Codesys V2.3. Как победить ошибку максимального числа POU?
Доброе. ПЛК63М по 1.94, Codesys V2.3. Как победить ошибку максимального числа POU?
Небось либу OSCAT используете.
Нужно Проект-->Опции-->Генератор кода
Нажать "Исключить объекты", а затем выбрать "Исключить неиспользуемые"
85711
kondor3000
12.09.2025, 10:44
Доброе. ПЛК63М по 1.94, Codesys V2.3. Как победить ошибку максимального числа POU?
Проще из Оската взять нужные функции, а саму биб-ку удалить.
Можно открыть библиотеку как проект, выбрав расширение .lib, скопировать блоки к себе в проект.
Исключал неиспользуемые. Пробовал все библиотеки удалять, тоже самое.
Непонятно почему в codesys нельзя изменить 256 на 512
P.S. первый раз работаю с плк овен и codesys. До этого только плк от Canny програмировал.
Проще из Оската взять нужные функции, а саму биб-ку удалить.
Можно открыть библиотеку как проект, выбрав расширение .lib, скопировать блоки к себе в проект.
Не все так просто. В Oscat во многих блоках есть обращение к другим блокам.
kondor3000
12.09.2025, 13:24
Исключал неиспользуемые. Пробовал все библиотеки удалять, тоже самое.
Непонятно почему в codesys нельзя изменить 256 на 512
P.S. первый раз работаю с плк овен и codesys. До этого только плк от Canny програмировал.
Вы бы хоть скрины выкладывали, где вы и что меняете.
Небось либу OSCAT используете.
Нужно Проект-->Опции-->Генератор кода
Нажать "Исключить объекты", а затем выбрать "Исключить неиспользуемые"
85711
Кнопка Исключить неиспользуемые не активна.
85725
Эти библиотеки подклочены.
85724
Исключал здесь.
85725
Эти библиотеки подклочены.
85724
Исключал здесь.
После исключения нужно еще сделать Проект-->Очистить все и Проект-->Компилировать все
Очистил, скомпилировал, тоже самое.
Доброе. ПЛК63М по 1.94, Codesys V2.3. Как победить ошибку максимального числа POU?
насколько помню, никак. Открывать библиотеки Oscat и делать их отдельными и подгружать в свой проект. По крайней мере я так делал, другого пути не нашел.
Алекс_инд
13.09.2025, 13:54
люди, подскажите - нужен самый дешевый модуль 485 ->> вывод аналогового сигнала для опытов дома с плк110. прям хоть от ардуины. а то самому плату делать изза переезда нет времени-возможности. хочу китайский частотник запустить по шине 10 вольт для опытов.
а кстати - на плк возможно написать свой протокол? не модбас. без црц модбаса...... а то у меня много плат на своем протоколе из прошлой жизни так сказать. там прверка целостности пакетов есть но иначе устроена. и сами байты иначе передаются
люди, подскажите - нужен самый дешевый модуль 485 ->> вывод аналогового сигнала для опытов дома с плк110. прям хоть от ардуины. а то самому плату делать изза переезда нет времени-возможности. хочу китайский частотник запустить по шине 10 вольт для опытов.
а кстати - на плк возможно написать свой протокол? не модбас. без црц модбаса...... а то у меня много плат на своем протоколе из прошлой жизни так сказать. там прверка целостности пакетов есть но иначе устроена. и сами байты иначе передаются
А на китайском частотнике 485 нету? - может и не нужен аналоговый модуль.
Можно скачать ModBus.lib и попробовать подкорректировать под себя
Алекс_инд
13.09.2025, 14:52
А на китайском частотнике 485 нету? - может и не нужен аналоговый модуль.
Можно скачать ModBus.lib и попробовать подкорректировать под себя
не в том дело. я стараюсь делать системы которые можно быстро починить. а управление частотником по 485 это не быстро. сгорел частотник а именно такого нету. объект встанет!! а при управлении по аналогу можно купить любой и хотя бы аварийно запустить сейчас.
по 485 я с частотника только ток и прочее считываю. для контроля клина мотора или сухого хода например.
я когда майнинг центры делал там такие проблемы часто бывали. им же все самое дешевое дай. ну вот частотник на вентиляторы на 5квт. сгорел - асики или стоят неделю (потому что стойками рулит сигнетик по 485, прошивки нет), или покупаешь любой другой и пид регулятор С-100 за тыщу на озоне и по 10 вольтам все работает.
Алекс_инд
13.09.2025, 14:55
либа мне не нужна. тем более в инстркции не описаны регистры задания частоты и прочего. ну пока не нашел. описаны только на считывание. ток частота ну еще там штук 30 какихто. их я читаю свободно.
эти частотники все из одного подвала - у меня их много было в этом корпусе, но регистры, у всех разные как я понял
год назад они были под брендом esq
85735
у китайцев были модули с Modbus и 4-20мА, 0-10В поищите. Входы точно попадались, но возможно и с выходами есть.
https://aliexpress.ru/item/1005003251391150.html?sku_id=12000024860637881&spm=a2g2w.productlist.search_results.6.459b1a824cm P6A
вот например
написать протокол на ПЛК можно, на ST. Если не сильно замороченный конечно.
kondor3000
13.09.2025, 16:10
у китайцев были модули с Modbus и 4-20мА, 0-10В поищите. Входы точно попадались, но возможно и с выходами есть.
https://aliexpress.ru/item/1005003251391150.html?sku_id=12000024860637881&spm=a2g2w.productlist.search_results.6.459b1a824cm P6A
.
Эти модули полное гавнище. Там наверно 4 или 6 битный цап, короче сигнал прыгает и очень сильно.
не в том дело. я стараюсь делать системы которые можно быстро починить. а управление частотником по 485 это не быстро. сгорел частотник а именно такого нету. объект встанет!! а при управлении по аналогу можно купить любой и хотя бы аварийно запустить сейчас.
по 485 я с частотника только ток и прочее считываю. для контроля клина мотора или сухого хода например.
я когда майнинг центры делал там такие проблемы часто бывали. им же все самое дешевое дай. ну вот частотник на вентиляторы на 5квт. сгорел - асики или стоят неделю (потому что стойками рулит сигнетик по 485, прошивки нет), или покупаешь любой другой и пид регулятор С-100 за тыщу на озоне и по 10 вольтам все работает.
Данное заявление несколько противоречит предыдущему про использование "своих модулей с нестандартным протоколом"
либа мне не нужна. тем более в инстркции не описаны регистры задания частоты и прочего. ну пока не нашел. описаны только на считывание. ток частота ну еще там штук 30 какихто. их я читаю свободно.
эти частотники все из одного подвала - у меня их много было в этом корпусе, но регистры, у всех разные как я понял
год назад они были под брендом esq
А вот библиотека это было как раз к вопросу про разработку своего нестандартного протокола.
Регистры на управление обычно описываются в инструкциях на ПЧ отдельным разделом, и да, стандарта в управлении ПЧ по модбасу - к сожалению нет
Алекс_инд
13.09.2025, 19:02
Данное заявление несколько противоречит предыдущему про использование "своих модулей с нестандартным протоколом
Щас мне надо недорого на столе кускии программ наделать. Вщите будут модули овен за клиентские деньги. Переписать 5 регистров ввода вывода потом несложно
Алекс_инд
13.09.2025, 19:07
Мы обслуживание огромную кнс летом. Все по цифре рулится, в щитп 15 чамтотников на 2квт.Сгорел частотник, ждать 2 месяца. Вот и приехали
Тогда можно за 3 тыщи с копейками взять себе другой модуль от китайцев в корпусе. Если в поиске забъете 0-10В out, ali покажет
serg_ingener
15.09.2025, 08:17
Добрый день . Подскажите , на плк110 в конфигурации плк можно как-то отключать Universal Modbus device ? Чтобы его не опрашивал . Т.к. Universal Modbus device может быть выключен , а плк110 начнет тормозить .
kondor3000
15.09.2025, 08:25
Добрый день . Подскажите , на плк110 в конфигурации плк можно как-то отключать Universal Modbus device ? Чтобы его не опрашивал . Т.к. Universal Modbus device может быть выключен , а плк110 начнет тормозить .
Зачем вам его отключать? Достаточно считать ошибку Last Error, что слейв не работает (отключен, отвалился).
С чего вы решили, что будет тормозить? Это вам не панель мастер.
serg_ingener
15.09.2025, 08:49
Но плк как мастер будет тратить время на опрос устройства которое отключено ? Не так-ли . Может я ошибаюсь .
kondor3000
15.09.2025, 08:52
Но плк как мастер будет тратить время на опрос устройства которое отключено ? Не так-ли . Может я ошибаюсь .
На время цикла программы, это никак не повлияет.
По умолчанию, на опрос устройства 100 мс, повторов 0, вам так критична 0,1 секунда? При нескольких подключенных блоках, у вас больше времени на паузы уходит.
Поставьте 30 мс, будет 0,03 сек, на скорости 115200 этого достаточно для обмена.
serg_ingener
15.09.2025, 09:27
А если настроить плк в режиме слейв , он не будет обращать внимание на отсутствия мастера ? У меня Ethernet .
serg_ingener
15.09.2025, 09:31
У меня связь по Ethernet .
kondor3000
15.09.2025, 09:51
А если настроить плк в режиме слейв , он не будет обращать внимание на отсутствия мастера ? У меня Ethernet .
В режиме слейв не будет обращать, но если панель Мастер, то она будет тормозить по чёрному, уже писал.
ПЛК мастер не тормозит вообще.
serg_ingener
15.09.2025, 10:00
Другой вопрос . Номера порта 502 можно поменять на любой другой , например 501 (соответственно и на другом плк тоже 501 )
kondor3000
15.09.2025, 10:01
Другой вопрос . Номера порта 502 можно поменять на любой другой , например 501 (соответственно и на другом плк тоже 501 )
Можно, но обычно используют 502,503,504,505
serg_ingener
15.09.2025, 10:05
Спасибо , настрою 504 .
serg_ingener
15.09.2025, 10:11
Вся суть . У меня плк 110 мастер для мв210 и второго плк 110 . Второй плк110 мастер для своего мв210 , но по порту 503 (мне когда-то специалист посоветовал так сделать) . Теперь третий плк надо добавить со своим мв210 , он будет мастером для первого плк110 но по порту 504 . Так правильно ?
kondor3000
15.09.2025, 10:16
Вся суть . У меня плк 110 мастер для мв210 и второго плк 110 . Второй плк110 мастер для своего мв210 , но по порту 503 (мне когда-то специалист посоветовал так сделать) . Теперь третий плк надо добавить со своим мв210 , он будет мастером для первого плк110 но по порту 504 . Так правильно ?
Ну вобщем так можно, не понятно зачем вам так делать, кусками добавлять.
serg_ingener
15.09.2025, 10:25
Первые два плк сделал 2 года назад . Теперь дорабатываем проект .
Плк может работать для одного устройства мастер а для другого слейв на одном порту ? У меня на 3-м плк ещё СП307 ( как мастер для плк )по Ethernet и мв210 (как слейв для плк ) .
kondor3000
15.09.2025, 10:27
Первые два плк сделал 2 года назад . Теперь дорабатываем проект .
Плк может работать для одного устройства мастер а для другого слейв на одном порту ? У меня на 3-м плк ещё СП307 ( как мастер для плк )по Ethernet и мв210 (как слейв для плк ) .
Лучше на разных портах.
serg_ingener
15.09.2025, 10:31
Лучше на разных портах.
Я только сейчас задумался над этим , но настраиваю механизм уже месяц , вроде и так работает .
Спросил у человека который продал плк63 (по первой версии), он говорит ему посоветовали использовать старые версии таргета и библиотеки, там 512 POU
Прошил при помощи двух резисторов и кнопки на 2.12, проблема с числом POU решилась.
Теперь не могу понять что я делаю не так, отсутствует связь I/O в проекте с I/O в ПЛК63)
А после смены таргета в проекте была дана команда "Стандартная конфигурация"?
Тренировочный проэкт с новым таргетом создавал
Кто нибудь может посмотреть через Anydesk?
Решил для начала написать проэкт для винтового подемника с "электронной" синхронизацией. Codesys 2.3, плк63
Неожиданно возникла проблема, оператор SUB вычитает WORD, а AND не хочет делать сложение WORD. Как так?
МихаилГл
25.09.2025, 11:35
Наверное не and , а add
Решил для начала написать проэкт для винтового подемника с "электронной" синхронизацией. Codesys 2.3, плк63
Неожиданно возникла проблема, оператор SUB вычитает WORD, а AND не хочет делать сложение WORD. Как так?
А что? Нельзя просто - и + написать-то для ЧИСЕЛ.
Или ты путаешь ЛОГИЧЕСКОЕ сложение и умножение и математические?
ДЛя логики использую OR, AND, XOR, NOT
Для математики - ADD, SUB, MUL и прочие или их обычную запись типа Result := dwData - 10;
Скинул обновленный проект ПЛК110 заказчику. Он прошил с помощью утилиты plc_io. Но такое ощущение, что проект не обновился.
Я когда после компиляции жму на "Создание загрузочного проекта", мне сообщается, что "Текущий код не соответствует загруженному. Продолжить?".
Такой вопрос ненормален, нужно что то исправлять перед созданием загрузочного проекта?
In_Da_Cher_A
25.09.2025, 13:41
Такой вопрос ненормаленв чём ненормальность то? КДС в офлайне, физически не с чем сравнить, что не так?
In_Da_Cher_A
25.09.2025, 13:42
Продолжить?и вы не продолжаете, да?
в чём ненормальность то? КДС в офлайне, физически не с чем сравнить, что не так?
У меня был вопрос, а не утверждение
и вы не продолжаете, да?
нет, продолжаю
In_Da_Cher_A
25.09.2025, 13:49
'Онлайн' 'Создание загрузочного проекта'
Используется для того, чтобы сделать код проекта автоматически загружаемым при перезапуске ПЛК. При перезапуске контроллера этот проект будет выполняться автоматически.
Выполнение команды зависит от целевой системы. Например, для 386 системы создаются 3 файла: default.prg, содержащий код проекта, default.chk, содержащий контрольную сумму кодов, default.sts, содержащий статус контроллера.
Эта команда также доступна в режиме offline, если проект скомпилирован без ошибок. В этом случае в директории проекта создаются следующие файлы: <имя проекта> .prg, в котором сохраняется код проекта, и <имя проекта> .chk - хранит контрольную сумму. При необходимости эти файлы можно переименовать и записать в контроллер.
В зависимости от настроек целевой системы в режиме offline создается новый *.ri-файл (загрузочная информация). Также в зависимости от настроек будет дано сообщение, если такой файл уже существует.
Информация о загрузке сохраняется в файле <имя проекта>0000000ar.ri, который используется, если система поддерживает возможность Горячего обновления (изменения в режиме Online). Этот файл удаляется командой 'Проект' 'Очистить все'.
В зависимости от целевой платформы при каждом создании загрузочного проекта *.ri файл может генерироваться заново.
Изначально заказчику нужно было выводить процент использования насоса (от частотника). А потом он захотел видеть в Герцах. Считываю и сразу передаю на панель, а выводится по прежнему в процентах :)
Частотник Meyertec VFD1 имеет два регистра 1001 и 1007, которые передают одинаковую информацию (удивительно, но так по руководству).
Я считываю регистр 1001, который вообще то в Гц.
85905
Проект у заказчика записался корректно - прислал фото результатов работы утилиты записи.
to Ollema
выше In_Da_Cher_A вам всё что нужно привёл.
... Но такое ощущение, что проект не обновился...
А чтобы не было ощущений, делайте какие-нибудь внешние проявления нового - попищите пищалкой, пощелкайте неиспользуемым выходом, выведите какое-нить левое значение на панель на несколько секунд после старта, перепишите на старте файлик с версией который после рестарта считайте и т.п. - фантазия тут не имеет границ.
Да если бы я там был, мигом бы все решилось. Беда в том, что заказчик далеко и там работают одни начальники :)
Приходящий киповец - редкий гость по вызову :)
Пришел залил, ушел. Начальники скинули через день результат и устранились.
Разберусь, просто решил провериться - все ли верно было сделано с моей стороны.
Да если бы я там был..
А вы изначально исходите из того что вас там нет, но нужно как-то просто (спросив что-то по телефону и т.п.) знать - прошилось ли
Так уже выяснил - прошилось.
Так уже выяснил - прошилось.
А зачем тогда рассказ про "ощущения"?
Да, чето тупанул ADD и AND слились АND. Смутило что WORD через AND проходит но ничего не изменяется)
..ADD и AND слились ...Смутило что WORD через AND проходит но ничего не изменяется)
От такой невнимательности - UINT.
Как проще всего прокручивать несколько надписей в одной строке на дисплее плк63?
Как проще всего прокручивать несколько надписей в одной строке на дисплее плк63?
бегущая/циклически?
Пока три ошибки в виде выходов из 3 тригеров, если нет ошибок "нет ошибок", в случае ошибки в одной строке от 1 до 3 словосочетаний, по очереди. Сильно сокращать или использовать коды не хочется. Язык CFC плк63
Пробовал через три SEL, когда доходит до третьего выкидывает обращение к неизвестному адресу)
Я непонял чем еще можно менять текст в ShowString
Пока три ошибки в виде выходов из 3 тригеров, если нет ошибок "нет ошибок", в случае ошибки в одной строке от 1 до 3 словосочетаний, по очереди.
var
alarm: dword;
index: byte := 31;
alarm_str : array[0..2] of string(16) := 'нет ошибок','xxx','yyy','zzz';
ton: ton := (pt := t#3s);
-----
alarm := 0;
alarm.1 := ..
alarm.2 := ..
alarm.3 := ..
alarm.0 := alarm = 0;
ton(in := not ton.Q);
if ton.Q or not extract(alarm, index) or index > 3 then
repeat
index := (index + 1) mod 4;
until extract(alarm, index)
end_repeat
ShowString(?,0,?,alarm_str[index]);
end_if
CFC
В квадратики сами
Спасибо. Осталось понять как это реализовать в CFC. Я выбрал CFC потому что нет времени вникать в написание кода. Для меня это страный набор понятных слов.)
...Осталось понять как это реализовать в CFC...
А на кой?
PROGRAM XXXX
var_input
alarm1, alarm2,alarm3: bool;
end_var
var_output
str: string(16);
end_var
var
alarm: dword;
index: byte := 31;
alarm_str : array[0..2] of string(16) := 'нет ошибок','xxx','yyy','zzz';
ton: ton := (pt := t#3s);
end_var
-----
alarm := 0;
alarm.1 := alarm1;
alarm.2 := alarm2;
alarm.3 := alarm3;
alarm.0 := alarm = 0;
ton(in := not ton.Q);
if ton.Q or not extract(alarm, index) or index > 3 then
repeat
index := (index + 1) mod 4;
until extract(alarm, index)
end_repeat
str := alarm_str[index]; (*ShowString(?,0,?,alarm_str[index]);*)
end_if
вставляйте этот квадратик на свое квадратное поле и пихайте на/с ножек сами
А на кой?
неплохой вариант, заберу его себе на память, если не против :)
и в выложенном варианте как бы array[0..3]
P.S.
ожидаю, когда он спросит откуда брать extract :cool:
Здравствуйте!
Подскажите пожалуйста логику работы с в режиме Online. Если это важно, то работа ведётся с ПЛК 160, в версии CoDeSys 2.3.9.41. Изучал справку и мануал к CoDeSys, мануал ПЛК 160, но остался ряд вопросов, на которые не смог найти ответа или нашел, но не понял что это ответ на мой вопрос.
Есть ПЛК 160 который управляет…назовём это «газораспределительной системой», к ПЛК подключены датчики давления и вентиля, логика открытия/закрытия вентилей в зависимости от давления на датчиках прописана в проекте «Проект1». Насколько я понимаю «Проект1» загружен в ПЛК, и он же использовался для 'Создания загрузочного проекта’. Наверняка я, конечно, утверждать этого не могу, так-как проект скомпилирован и фарш невозможно провернуть назад, но ПЛК уже неоднократно перезагружался и логика работы оборудования сохраняется.
Могу ли я скомпилированный «Проект1» достать из ПЛК? Насколько я понимаю просмотреть его и отредактировать я уже не смогу, но можно ли скомпилированный «Проект1» использовать как резервную копию? И если такое возможно, то что нужно для этого сделать, как выгрузить, как загрузить?
Если я правильно понимаю, то для того, чтобы работать (редактировать) с «Проект1» должна была быть сделана 'Загрузка исходных текстов'. Я не знаю было ли это сделано, я не нашел пункта 'Выгрузка исходных текстов' или чего-то подобного. Соответственно вопрос, как узнать была ли сделана 'Загрузка исходных текстов' «Проект1» и как исходные тексты открыть в CoDeSys?
На ПК с CoDeSys есть файл проекта, назовем его условно «Проект2». Я наверняка знаю, что он в точности не совпадает с «Проект1», об этом говорит сам CoDeSys при использовании команды 'Подключение'. Но я не знаю, насколько они отличаются. Если я загружу в ПЛК «Проект2» используя команду 'Загрузка', но не воспользуюсь командой 'Создания загрузочного проекта’, то после перезагрузки ПЛК он автоматически вернется к «Проект1» или для этого нужно сделать какие-то манипуляции?
kondor3000
01.10.2025, 16:11
Здравствуйте!
Подскажите пожалуйста логику работы с в режиме Online. Если это важно, то работа ведётся с ПЛК 160, в версии CoDeSys 2.3.9.41. Изучал справку и мануал к CoDeSys, мануал ПЛК 160, но остался ряд вопросов, на которые не смог найти ответа или нашел, но не понял что это ответ на мой вопрос.
Писать очень долго, читайте тему и смотрите там ссылки https://owen.ru/forum/showthread.php?t=40500
https://owen.ru/forum/showthread.php?t=11899&p=450010&viewfull=1#post450010
In_Da_Cher_A
01.10.2025, 17:07
Могу ли я скомпилированный «Проект1» достать из ПЛК? да
Насколько я понимаю просмотреть его и отредактировать я уже не смогу, да
но можно ли скомпилированный «Проект1» использовать как резервную копию? делайте с ним что хотите
И если такое возможно, то что нужно для этого сделать, как выгрузить, как загрузить?прочитать РЭ и РП на КДС и на ПЛК - сохранение проекта и PLC браузер
Если я правильно понимаю, то для того, чтобы работать (редактировать) с «Проект1» должна была быть сделана 'Загрузка исходных текстов'. да
Я не знаю было ли это сделано, я не нашел пункта 'Выгрузка исходных текстов' или чего-то подобного. Соответственно вопрос, как узнать была ли сделана 'Загрузка исходных текстов' «Проект1» и как исходные тексты открыть в CoDeSys?сделав все манипуляции для подключения к контроллеру и КДС, такие же как и для выгрузки скомпилированного проекта
[QUOTE]На ПК с CoDeSys есть файл проекта, назовем его условно «Проект2». Я наверняка знаю, что он в точности не совпадает с «Проект1», об этом говорит сам CoDeSys при использовании команды 'Подключение'. не факт. КДС может просто не видеть служебных файлов, которые остались на пк, с которого была загрузка
Но я не знаю, насколько они отличаются. Если я загружу в ПЛК «Проект2» используя команду 'Загрузка', но не воспользуюсь командой 'Создания загрузочного проекта’, то после перезагрузки ПЛК он автоматически вернется к «Проект1» да
или для этого нужно сделать какие-то манипуляции?не создавать загрузочный проект
Спасибо In_Da_Cher_A, вы мне очень помогли.
прочитать РЭ и РП на КДС и на ПЛК - сохранение проекта и PLC браузер
Да, читать придется много 400 + 200 страниц, у меня ещё и РП на КДС в формате картинки, то есть без возможности поиска по тексту, хотя вроде с Овена качал.
не факт. КДС может просто не видеть служебных файлов, которые остались на пк, с которого была загрузка
То есть может быть такое, что служебные файлы были удалены, перемещены или переименованы и проект не распознаётся как аналогичный, но на самом деле проект в ПЛК и открытый на ПК идентичные?
Позвольте ещё один вопрос прежде чем я углублюсь в чтение РЭ и РП.
Если открыть в КДС пустой проект и соединится с ПЛК (режим Онлайн-Подключение), то в случае если исходные данные проекта были загружены в ПЛК, то они автоматом подгрузятся в КДС?
kondor3000
01.10.2025, 19:24
Позвольте ещё один вопрос прежде чем я углублюсь в чтение РЭ и РП.
Если открыть в КДС пустой проект и соединится с ПЛК (режим Онлайн-Подключение), то в случае если исходные данные проекта были загружены в ПЛК, то они автоматом подгрузятся в КДС?
Ничего само не подгрузится, по ссылкам прочитайте 2-3 страницы.
Подключившись пустым проектом и не заливая ничего, открываете ПЛК-браузер, команду filedir и смотрите есть ли в файлах, 85974
проект название проекта.pro, если нет значит исходник не залили.
Если есть можно скачать, скопировав название и нажав "Читать файл из ПЛК"
Ничего само не подгрузится, по ссылкам причитайте 2-3 страницы.
Подключившись пустым проектом и не заливая ничего, открываете ПЛК-браузер, команду filedir и смотрите есть ли в файлах, 85974
проект название проекта.pro, если нет значит исходник не залили.
Если есть можно скачать, скопировав название и нажав "Читать файл из ПЛК"
Примного благодарен, завтра пойду пытать оборудование.
In_Da_Cher_A
01.10.2025, 20:05
читать придется много 400 + 200 страницда всё там не надо, учитесь искать по ключевым словам или по смыслу смотрите те разделы, которые относятся к теме плюс/минус
Если открыть в КДС пустой проект и соединится с ПЛК (режим Онлайн-Подключение), то в случае если исходные данные проекта были загружены в ПЛК, то они автоматом подгрузятся в КДС?нет, любая исходная инфа, которая там была загружена в ПЛК, загружается В ПЛК только при старте системы, после включения или рестарта, кдс к этому не имеет никакого отношения, это просто "телевизор"
То есть может быть такое, что служебные файлы были удалены, перемещены или переименованы и проект не распознаётся как аналогичный, но на самом деле проект в ПЛК и открытый на ПК идентичные?или не помню в деталях этот момент, или он нигде не описан толком, на что смотрит КДС при сравнении в момент соединения, пишут только про то какие файлы делает КДС
но много раз было что ругается на разницу при подключении спустя год другой,при этом имя файла такое же и точно знаю что никто там не лазил кроме меня, вероятно делал мелкие он-лайн правки через энидеск и на моём пк нет всей той служебной инфы что делает кдс
поэтому воспользуйтесь "последним шансом" который предоставляет КДС, загрузите и посмотрите на работу, если будут проблемы - сделаете перезагрузку, вернувшись к исходнику в памяти плк
In_Da_Cher_A
01.10.2025, 20:08
у меня ещё и РП на КДС в формате картинкистранно, там вроде нормальные были пдфки
Блин! Если вопрос ещё актуален - вот же ж я подробный пост делал: https://cs-cs.net/codesys-archiv-projekta-ishodniye-kody
Про Архив проекта, про Source.Dat и про то, какие файлы важны для проекта.
Блин! Если вопрос ещё актуален - вот же ж я подробный пост делал: https://cs-cs.net/codesys-archiv-projekta-ishodniye-kody
Про Архив проекта, про Source.Dat и про то, какие файлы важны для проекта.
Спасибо за ссылку, намного понятней чем в мануале, сохранил в закладки. Прочитаю на досуге более внимательно.
странно, там вроде нормальные были пдфки
Да это я видимо криворучка, вместо скачать распечатал через виртуальный принтер и видимо криво, получил мануал по КДС 200 метров весом, тупо картинка. Уже перекачал нормальную ПДФку.
или не помню в деталях этот момент, или он нигде не описан толком, на что смотрит КДС при сравнении в момент соединения, пишут только про то какие файлы делает КДС
но много раз было что ругается на разницу при подключении спустя год другой,при этом имя файла такое же и точно знаю что никто там не лазил кроме меня, вероятно делал мелкие он-лайн правки через энидеск и на моём пк нет всей той служебной инфы что делает кдс
поэтому воспользуйтесь "последним шансом" который предоставляет КДС, загрузите и посмотрите на работу, если будут проблемы - сделаете перезагрузку, вернувшись к исходнику в памяти плк
К сожалению, рабочий исходник в ПЛК залит не был, разобраться в этом помог ПЛК-браузер. Точнее исходники в ПЛК были, но ни по названию, ни по содержанию они не соответствовали рабочему проекту. Однако ситуацию спасло то, что в недрах ПК удалось найти проект, который в точности соответствовал проекту из автозагрузки.
Проект уже откорректирован, залит в ОЗУ, вроде всё работает. Неделю тестируем, если всё в порядке, то залью его в ПЗУ.
Правда без приключений не обошлось. Первый раз загрузка измененного проекта в ОЗУ прошла без проблем. Потом перезагрузил ПЛК, чтобы убедится, что исходный проект успешно загрузился из ПЗУ. И при повторной попытке записать измененный проект в ПЛК обнаружил, что кнопка загрузки не активна. Проблема решилась переводом ПЛК в режим «Стоп» переключателем на передней панели. После перезагрузки ПЛК изменённый проект без проблем загрузился в девственно чистую ОЗУ и запустился без ошибок. А ещё предстоит разобратся с переменными коих в проекте 362 штуки, но это уже совсем другая история. Разберусь помаленьку, если будет тяжко прибегу сюда 😊
А ещё почему-то не удалось удалить через ПЛК-браузер не нужный мусор командой filedelete. Но это пока не важно. Сейчас понимаю, что я, наверное, зря взял название файла в квадратные скобки, но так было написано в примере ☹ Короче с трудом мне даётся логика работы в КДС.
Ещё раз спасибо всем за ценные подсказки!
In_Da_Cher_A
03.10.2025, 14:25
И при повторной попытке записать измененный проект в ПЛК обнаружил, что кнопка загрузки не активна. Проблема решилась переводом ПЛК в режим «Стоп» переключателем на передней панели. После перезагрузки ПЛК изменённый проект без проблем загрузился в девственно чистую ОЗУ и запустился без ошибок. посмотрите что пишут про поведение в разных положениях переключателя. И в какойто момент надо пользоваться командой "очистить всё"
неплохой вариант, заберу его себе на память, если не против :)
и в выложенном варианте как бы array[0..3]
P.S.
ожидаю, когда он спросит откуда брать extract :cool:
Ну 0..2 не единственная неточность)
После исправления знаков кодесусу все равно не нравится строка: alarm_str : ARRAY[0..3] OF STRING(16) := 'текст'.'текста'.'текстб'.'текств'.
Ошибка 3760 неверное начальное значение.
kondor3000
04.10.2025, 12:13
Ну 0..2 не единственная неточность)
После исправления знаков кодесусу все равно не нравится строка: alarm_str : ARRAY[0..3] OF STRING(16) := 'текст'.'текста'.'текстб'.'текств'.
Ошибка 3760 неверное начальное значение.
Вы не внимательны, где вы перечисление нач. значений через точку увидели и в конце ; где?
Не знаете как пишется, копируйте текст и меняйте только надписи. Заодно запоминайте как надо https://owen.ru/forum/showthread.php?t=10555&p=472576&viewfull=1#post472576
alarm_str : array[0..3] of string(16) := 'нет ошибок','xxx','yyy','zzz';
Таже ошибка, 3760 неверное начальное значение.
Я не знаю как правильно создать функциональный блок CFC из кода ST. СИ и ST я не владею.
Мне нужно сделать один проект на плк63, больше работать с кодесус и плк63 мне не понадобится.
kondor3000
04.10.2025, 14:38
Таже ошибка, 3760 неверное начальное значение.
Я не знаю как правильно создать функциональный блок CFC из кода ST. СИ и ST я не владею.
Мне нужно сделать один проект на плк63, больше работать с кодесус и плк63 мне не понадобится.
Вот скрин, ошибок нет 86005
Если у вас есть ошибки, то делайте скрин, там подписано, что за ошибка и при нажатии, показывает где она.
Из скрина стало понятно, но
86007
здесь показывает IF ton.Q OR NOT EXTRACT(alarm, index) OR index > 3 THEN
kondor3000
04.10.2025, 16:33
Из скрина стало понятно, но
здесь показывает IF ton.Q OR NOT EXTRACT(alarm, index) OR index > 3 THEN
Добавьте биб-ку Util.lib в Менеджере библиотек по нажатии ПКМ.
Про этот вопрос уже писали))) https://owen.ru/forum/showthread.php?t=10555&p=472587&viewfull=1#post472587
ожидаю, когда он спросит откуда брать extract :cool:
Всего неделя понадобилась)))
Я автоэлектрик, а не программист. В свободное от работы время на работе тренируюсь на ПЛК63, чтобы заменить сдохший контролер, ввиду отсутствия прошивки на него.
Выше я имел ввиду что с вашего скрина стало понятно что делал не так, кроме того в какой библиотеке Exstract.
Спасибо, заработало.
п.с. В CannyLab c "квадратиками" таких заморочек нет, конечно и фукционал там маловат)
kondor3000
04.10.2025, 17:09
Я автоэлектрик, а не программист. В свободное от работы время на работе тренируюсь на ПЛК63, чтобы заменить сдохший контролер, ввиду отсутствия прошивки на него.
Выше я имел ввиду что с вашего скрина стало понятно что делал не так, кроме того в какой библиотеке Exstract.
Спасибо, заработало.
п.с. В CannyLab c "квадратиками" таких заморочек нет, конечно и фукционал там маловат)
Тоже не программист, только когда мне надо, я ищу сам или задаю вопросы (чего почти не бывало), но никак не жду неделю.
Мне надо всё и сразу)
Работа была некогда было заниматься этим проектом)
Решил добавить еще ошибку, проблем не было.
PS/Прогнал в симуляции весь проэкт. работает.
Теперь нужно сочинить меню для настройки нескольких параметров.
Старый контролер судя по всему писал положение кареток, ошибки и блокировку на флешку и с большой долей вероятности по этому перестал работать
Добрый день. Возникла проблема с установкой ПО и подключением ПР200 к ПК на W8.1 .
С официального сайта Овен скачаны файлы необходимые для установки (Сервисное ПО и среда программирования)
Попытка установить среду (крайнюю версию) не удалась по причине ошибки " невозможно связаться с сервером" на этапе скачивания установщиком дополнительных компонентов. Вариантов как-то пропустить этот шаг и установить необходимое вручную не предусмотрен.
Была предпринят вариант установки более ранней версии OwenLogic - установка удалась, но опять же нет возможности связаться с сервером критических обновлений, о чём свидетельствует сообщение в нижней части экрана. Попытки установить скачанные вручную Microsoft Visual C++ 2015-2022 (Owen Logic версии 1.22 и старше) - не увенчались успехом. Установщик ссылается на то, что установлены более ранние версии ( не понимаю как это может помешать? всегда ставились разные и никаким программам не мешали)
В итоге : прибор подключен, связь установлена, ПО прибора обновлено средой разработки, но я даже не могу из меню Прибор посмотреть информацию о приборе, потому что половина пунктов этого меню неактивна.
Почему невозможно установить связь с сервером - загадка, потому как связь с официальным сайтом без проблем? Может кто-то сталкивался с такой проблемой ?
In_Da_Cher_A
05.10.2025, 12:56
подключением ПР200 к ПК на W8.1 .бро, это в другой раздел напиши
бро, это в другой раздел напиши
В какой, подскажите пожалуйста ?
In_Da_Cher_A
05.10.2025, 13:28
https://owen.ru/forum/forumdisplay.php?f=63
Дмитрий...
09.10.2025, 21:01
Добрый вечер. Не подскажит как снять показания с 2трм1 по rs485 на плк110 в кодесис 2.3. связь установил, регистр согласно инструкции поставил 0000. В ответ приходит набор цифр а не показания том со входа.
In_Da_Cher_A
09.10.2025, 21:04
порядок байт проверьте, что у вас в настройках
86104
Дмитрий...
09.10.2025, 21:12
порядок байт проверьте, что у вас в настройках
86104
В настройках трм? Завтра проверю, отпишусь. Если не сложно расскажите подробнее.
Дмитрий...
09.10.2025, 21:13
Си-8 по протоколу Овен разобрался а тут всю голову сломал
kondor3000
09.10.2025, 21:53
В настройках трм? Завтра проверю, отпишусь. Если не сложно расскажите подробнее.
В ПЛК в UMD, поставьте настройку Native (перестановка регистров Float), скрин смотрите
Дмитрий...
10.10.2025, 07:53
В ПЛК в UMD, поставьте настройку Native (перестановка регистров Float), скрин смотрите
Спасибо. Все заработало. Оказалось все так просто.
В руководстве ПЛК63 указана максимальная частота на дискретных входах 50гц, однако при 10гц счётчик перестаёт чкитать импульсы. Язык CFC
Alex61
Если счет делается в теле программы, то вероятнее всего цикл программы больше 100мс.
Что бы повысить скорость счета над использовать прерывание по таймеру, если ПЛК63 поддерживает такое. Либо уменьшить время цикла до 20мс, если получится.
В руководстве ПЛК63 указана максимальная частота на дискретных входах 50гц, однако при 10гц счётчик перестаёт чкитать импульсы. Язык CFC
Отключи фильтрацию для дискретных входов
86116
Постоянную времени сделай 0
ЗЫ.
86117
Дмитрий...
14.10.2025, 17:32
Добрый день. Помогите. Плк110 +Си-8 протокол Овен. Показания dtmr (dword) как преобразовать в нормальный вид часы минуты секунды? В кодесис 2.3 SFC
kondor3000
14.10.2025, 17:42
Добрый день. Помогите. Плк110 +Си-8 протокол Овен. Показания dtmr (dword) как преобразовать в нормальный вид часы минуты секунды? В кодесис 2.3 SFC
Обычно время DWORD в миллисекундах, делите на 1000, получаете в секундах.
Далее делите на 3600, получаете часы и т. д.
и переходите на ST, все расчёты в одной строке будут, а не на 3 страницы.
Сергей1978
16.10.2025, 18:56
Добрый день. Есть вопрос для тех кто работает с ПЛК110. Суть в следующем. Есть программа, которая собирает дискретные сигналы в байты, и далее 4 байта в двойное слово. Потом это число через порт RS-485 номер 2(Slave), опрашивается с помощью МСД200. Проблема в том, что число в контроллере не совпадает с числом в МСД200. Отличие небольшое. Не пойму в чем проблема. Может кто подскажет. Скрины прикладываю.86225862268622786228862298623086231
Добрый день. Есть вопрос для тех кто работает с ПЛК110. Суть в следующем. Есть программа, которая собирает дискретные сигналы в байты, и далее 4 байта в двойное слово. Потом это число через порт RS-485 номер 2(Slave), опрашивается с помощью МСД200. Проблема в том, что число в контроллере не совпадает с числом в МСД200. Отличие небольшое. Не пойму в чем проблема. Может кто подскажет. Скрины прикладываю.
А почему думаете, что 4 байта в МСД - это именно целочисленное значение, а не с плавающей запятой?
Сергей1978
16.10.2025, 19:16
А почему думаете, что 4 байта в МСД - это именно целочисленное значение, а не с плавающей запятой?
Не совсем понял. Что вы имеете ввиду. Программой в контроллере я формирую битовую маску, и отправляю в МСД200. Это обычные 0 и 1, представленные в виде двойного слова. В контроллере это хорошо видно DWORD = 134217756. А в МСД200 DWORD уже равен 134217760.
kondor3000
16.10.2025, 19:28
Именно так, у вас происходит конвертация DWORD_TO_REAL, скрин 86233 или 86232
Число 134217756 при конвертации округляется до 134217760, у REAL не хватает точности, 8 знаков, 9 знак округляется.
Зачем так сделали в МСД200, вопрос к разработчикам.
kondor3000
24.10.2025, 09:49
Здравствуйте!
Вопрос по настройке ТРМ 1032м:
Вижу Т-прямой в тесте входы выходы модуля расширения ПРМ-2, но не вижу её в главном меню (Т-прямой выкл.). Что не так?
Здесь тема по ПЛК (среда CoDeSys V2.3)
ValeraD.
24.10.2025, 10:19
Извиняюсь.
Здравствуйте.
Вопрос по совместимости версий owen logic
После обновления программы на последнюю версию, проект созданный в предыдущей версии стал практически не читаем, чтобы его посмотреть приходится устанавливать старую версию, при этом перестают открываться проекты созданные в более новой версии owen logic. Получается очень неудобно приходится переустанавливать то новую, то старую версию owen logic и при этом нельзя скопировать что-то из старого проекта в новый. Можно ли как-нибудь корректно конвертировать проект в новую версию?
На скриншотах одна и та же программа открытая в старой и новой версиях.
8650886509
Какой ужас. Получается все что ранее создано должно быть выброшено. А изменение размера холста не помогает ?
Здравствуйте.
Вопрос по совместимости версий owen logic
После обновления программы на последнюю версию, проект созданный в предыдущей версии стал практически не читаем, чтобы его посмотреть приходится устанавливать старую версию, при этом перестают открываться проекты созданные в более новой версии owen logic. Получается очень неудобно приходится переустанавливать то новую, то старую версию owen logic и при этом нельзя скопировать что-то из старого проекта в новый. Можно ли как-нибудь корректно конвертировать проект в новую версию?
На скриншотах одна и та же программа открытая в старой и новой версиях.
8650886509
Ну допустим он и в старой версии читается с трудом ).
Попробуйте в старой версии передвинуть все блоки и комментарии в середину холста, а потом сконвертировать проект в новую.
Ну а если не поможет - ну в конце концов все связи на месте и их не так уж много - выровняйте их вручную
kondor3000
31.10.2025, 09:28
Здравствуйте.
Вопрос по совместимости версий owen logic
После обновления программы на последнюю версию, проект созданный в предыдущей версии стал практически не читаем, чтобы его посмотреть приходится устанавливать старую версию, при этом перестают открываться проекты созданные в более новой версии owen logic. Получается очень неудобно приходится переустанавливать то новую, то старую версию owen logic и при этом нельзя скопировать что-то из старого проекта в новый. Можно ли как-нибудь корректно конвертировать проект в новую версию?
На скриншотах одна и та же программа открытая в старой и новой версиях.
У меня стоит одновременно около 8 версий ОЛ. Открываю не нажатием на проект, а из нужной версии ОЛ.
Разрабатываю и сохраняю в старой версии, потом можно конвертировать в любую новую, какую надо. Всё конвертируется без проблем, если начальный проект нормально сделан.
У вас на скрине масштаб 100% и 40 %, конечно он не влезет. Сделайте одинаковый размер поля и масштаб.
Так же копипастом все прекрасно переносится, при смене платформы ПР.
У меня стоит одновременно около 8 версий ОЛ..
Я всё понимаю но это не то чтобы нормально.
И лично для меня это одна из причин делать всё на ST. Текст не надо масштабировать и т.п.
В первой картинке даже цветом выделены смысловые группы, почему это тупо в отдельные макросы не пихнуть?
Что заставляет рисовать разводку электрики квартир на схеме электроснабжения района? Типа "солидно" показывать начальству/заказчику?
kondor3000
31.10.2025, 16:17
Я всё понимаю но это не то чтобы нормально.
И лично для меня это одна из причин делать всё на ST. Текст не надо масштабировать и т.п.
В первой картинке даже цветом выделены смысловые группы, почему это тупо в отдельные макросы не пихнуть?
Что заставляет рисовать разводку электрики квартир на схеме электроснабжения района? Типа "солидно" показывать начальству/заказчику?
Для наших ПР это нормально, если не хочешь лишится одновременно и проектов и нормальной работы при очередном баге.
Что и происходит постоянно с ТС.
И на каком языке написан проект без разницы, я тоже на ST пишу.
Для наших ПР это нормально, .
Да чего нормального то?
Вот например вдумайтесь в смысл оного
86522
И на каком языке написан проект без разницы,
Ну да. Нас..ть можно на чем угодно)
--
А этой теме вообще тут нужно быть?
---
Чета ТС утёк. Наверное это было ДСП и за ним пришли)
Руслан К.
06.11.2025, 12:56
Здравствуйте. Посоветуйте пожалуйста как лучше поступить. Ситуация: в установке на ПР103 с модулями расширения реализован контроль температуры воды в резервуаре с PID-регулятором (допустимая погрешность в +/- 0,5 градуса) через регулировку мощности нагревателя с помощью регулятора напряжения 4-20мА. Заменили ТЭНовый котел на электродный. Теперь нужно переписать часть программы для управления температурой нагрева с PID-регулированием через ТТР 3-32В (дискретное). Как лучше поступить? Боюсь, что если использовать релейный выход, то он долго не прослужит.
Значит Ваша ПР103 имеет выходы AO, которые можно перевести в режим вывода 0-10в и переписать программу для работы в дискретном режиме (ШИМ).
Т.е. выдавать 10в на ТТР, когда надо включить нагрев и 0в - наоборот.
Например, так:
86619
Здравствуйте..
А чем разделы ПР/Ложиков не подошли?
Руслан К.
06.11.2025, 14:50
Извиняюсь. Не понял вопрос.
Руслан К.
06.11.2025, 15:20
Значит Ваша ПР103 имеет выходы AO, которые можно перевести в режим вывода 0-10в и переписать программу для работы в дискретном режиме (ШИМ).
Т.е. выдавать 10в на ТТР, когда надо включить нагрев и 0в - наоборот.
Например, так:
86619
Объясните пожалуйста, переменная Period - это базовая единица времени? Я понимаю суть формулы, что при нагреве PID будет уменьшаться от 1 до 0, таким образом время включения будет уменьшаться, а время паузы будет увеличиваться. Как определить правильно величину данной переменной? Исходя из скорости нагрева, опытным путем?
Да. Период надо подобрать так, чтобы температура сильно не раскачивалась (скажем при двухпозиционном регулировании +- 1 градус).
При большом объеме воды будет приличная величина. Тогда в ПИД-режиме будет работать плавно и с максимальным периодом вкл/выкл.
Руслан К.
07.11.2025, 14:38
Да. Период надо подобрать так, чтобы температура сильно не раскачивалась (скажем при двухпозиционном регулировании +- 1 градус).
При большом объеме воды будет приличная величина. Тогда в ПИД-режиме будет работать плавно и с максимальным периодом вкл/выкл.
Спасибо за помощь. Буду пробовать. Думаю Период оставить на 1 секунде. Объем воды примерно 4-5 м3. Динамика нагрева (котел 7кВт)/охлаждения (утеплённый резервуар остывает сам) плавная. Хотелось бы добиться высокой степени точности поддержания температуры. Ещё раз спасибо.
Спасибо за помощь. Буду пробовать. Думаю Период оставить на 1 секунде. Объем воды примерно 4-5 м3. Динамика нагрева (котел 7кВт)/охлаждения (утеплённый резервуар остывает сам) плавная. Хотелось бы добиться высокой степени точности поддержания температуры. Ещё раз спасибо.
Если рассчитать время нагрева на 1 градус 4м3 воды при 7кВт на онлайн калькуляторе (https://www.rusinzh.ru/kalkulyatory/vremya-nagreva-vody/),
то понадобится 0,66 часа или 40 минут. Т.е. даже при 1 минутном периоде можно добиться точности удержания в 0,01 градуса. Все будет зависеть от скорости остывания и настроек ПИД-регулятора.
grigoriyvip
27.11.2025, 11:42
Здравствуйте по какой то причине не могу подключиться к ПЛК,все сделал как на официальном видео может ли это быть связано с тем,что индикатор батареи светится красным
grigoriyvip
27.11.2025, 12:42
Попробовал все порты, все равно не работает ни по USB b ни по ethernet и rs232
grigoriyvip
27.11.2025, 13:02
Возможно ли залить программу не используя ПК, через HMI панель
kondor3000
27.11.2025, 13:09
Здравствуйте по какой то причине не могу подключиться к ПЛК,все сделал как на официальном видео может ли это быть связано с тем,что индикатор батареи светится красным
В старых ПЛК стоит аккумулятор, меняется на купленный на АЛИ за 150-300 руб, размером 25х25 мм (25х30 мм), (3,7 В 150-450 мА )
С панели залить проект нельзя, заливка возможна по 3 портам как на видео.
grigoriyvip
27.11.2025, 13:20
То есть не даёт залить из за батареи?
grigoriyvip
27.11.2025, 13:20
Можете подсказать какого формата искать аккумулятор
grigoriyvip
27.11.2025, 13:21
А все прочитал внимательно
grigoriyvip
27.11.2025, 13:24
Дело в том,что ПК видит ПЛК но подключиться к нему не получается
kondor3000
27.11.2025, 13:29
То есть не даёт залить из за батареи?
Вы для начала напишите точное название ПЛК, и по какому порту подключаетесь, каким кабелем, какие настройки.
а аккумулятор в старых меняется на такого типа https://aliexpress.ru/item/32996947807.html?spm=a2g2w.detail.rcmdprod.11.3339 38b5AMV86P&mixer_rcmd_bucket_id=testRecallSegment&pdp_trigger_item_id=0_32922372464&ru_algo_pv_id=31a11d-61b690-5a439a-23ab84-1764237600&scenario=aerSimilarItemPdpRcmd&sku_id=12000015649809280&traffic_source=recommendation&type_rcmd=core
https://aliexpress.ru/item/32922372464.html?spm=a2g2w.detail.rcmdprod.20.9cfd 2d2317AHC3&mixer_rcmd_bucket_id=testRecallSegment&pdp_trigger_item_id=0_1005007648840057&ru_algo_pv_id=31a11d-61b690-5a439a-79d513-1764237600&scenario=aerSimilarItemPdpRcmd&sku_id=12000032444831225&traffic_source=recommendation&type_rcmd=core
grigoriyvip
27.11.2025, 13:47
Плк 110-60М пробовал подключиться через все порты
grigoriyvip
27.11.2025, 13:49
Все настройки взял из видео, с канала ОВЕН
kondor3000
27.11.2025, 13:54
Плк 110-60М пробовал подключиться через все порты
Не поверите, многие и тут портачат постоянно, то скорость не та, то кабель, то драйвер, то настройки.
А родной аккум такой https://techzip-1.ru/katalog-tovarov/akkumulyatory-zaryadnye-ustrojstva/akkumulyatory-li-ion-li-pol/lir2466-lby2-akkumulyator/?ysclid=mihbcogvg53987443,
кстати для проверки можно временно подключить и аккум 18650, 3,7 В на проводках, главное, чтобы ничего не замкнуло.
В ПЛК 110 старого выпуска, которые с аккумулятором, в случае когда ему плохело, просто слетали ретайн-переменные в ноль. Я даже делал проверку при включении, если переменные=0, то выводится предупреждение, и ставятся значения по умолчанию. Но проблем с подключением из за мертвого акка не наблюдал.
В качестве замены приобретал плоские "кирпичи" 300-500мАч, со встроенной платой защиты. Габариты - лишь бы в корпус влезло.
grigoriyvip
27.11.2025, 15:01
Как бы это не звучало, но к сожалению все настройки были перепроверены, кабеля использовались комплектные, поэтому не могу понять почему возникает ошибка
grigoriyvip
27.11.2025, 15:02
Да и дело в том,что ПК видит ПЛК как устройство, не получается подключиться именно через codesys
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot