PDA

Просмотр полной версии : ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)



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

petera
29.07.2019, 10:40
при таком раскладе как в конфигураторе обозначать ретейновские переменные?

ВСЕ переменные в слейве конфигурации являются ретейн автоматом, т.е нигде больше обозначать их как ретейн не нужно.

Yaroslav_22
29.07.2019, 10:40
ВСЕ переменные в слейве конфигурации являются ретейн автоматом, т.е нигде больше обозначать их как ретейн не нужно.

понял, спасибо!

Sulfur
29.07.2019, 10:41
Регистры в области обмена Модбас де факто есть ретейн, при условии, что ПЛК слейв.

Пьер
30.07.2019, 07:59
А это

чем не устроило ?

не получилось так, ошибочка выходит. А capzap, прислал, по его выходит без ошибок, с адресацией надо делать, на прямую не выходит.

Yaroslav_22
30.07.2019, 10:20
А сразу в конфигурации ПЛК создавать регистры FLOAT\REAL не? При явной адресации всегда есть вариант нарваться на конфликт. При адресации в конфиге КДС сам распределяет память, исключая конфликты.

забил переменные в конфигуратор, но некоторые обращаются к ФБ, у которых вход на запись и чтение, как быть с такими переменными?
43803

capzap
30.07.2019, 10:26
забил переменные в конфигуратор, но некоторые обращаются к ФБ, у которых вход на запись и чтение, как быть с такими переменными?
43803

в конфигураторе всё глобальное, если нет необходимости не подавайте их на вход ФБ, а используйте непосредственно внутри блока

Yaroslav_22
30.07.2019, 10:29
к сожалению есть необходимость, т.к. эти переменные выводятся на панель и в зависимости от того, что "натыкает" пользователь, программа должна это исправить и отобразить

когда я эти переменные создавал просто в глобальных переменных, такого не было

capzap
30.07.2019, 10:33
попытайтесь воссоздать проблему в тестовом проекте и выложите здесь если проблема останется. Потому что на словах выглядит как бред

Yaroslav_22
30.07.2019, 10:55
надеюсь меня правильной поймут, приложен тестовый вариант, ситуация такая же

ps можно ли обращаться к слову по битово,т.е конфигураторе установить переменную в 2байта и обращаться к нему по битово

capzap
30.07.2019, 11:22
надеюсь меня правильной поймут, приложен тестовый вариант, ситуация такая же

ps можно ли обращаться к слову по битово,т.е конфигураторе установить переменную в 2байта и обращаться к нему по битово

не стал пока вдаваться в подробности проблемы,а вот к словам
к сожалению есть необходимость придрался бы, выложил вариант как я и описывал до этого, а вообще если такого плана логика то и функции достаточно было бы

Yaroslav_22
30.07.2019, 11:32
не стал пока вдаваться в подробности проблемы,а вот к словам придрался бы, выложил вариант как я и описывал до этого, а вообще если такого плана логика то и функции достаточно было бы

Понял, спасибо!

но кажется нашел решение своей проблемы

Sulfur
30.07.2019, 11:37
забил переменные в конфигуратор, но некоторые обращаются к ФБ, у которых вход на запись и чтение, как быть с такими переменными?


Плюсик нажмите и покажите. Есть подозрение что имя переменной Вы вбили только в комментарий.
43807

Sulfur
30.07.2019, 11:40
можно ли обращаться к слову по битово,т.е конфигураторе установить переменную в 2байта и обращаться к нему по битово
Да.


Var1:BOOL;
Var2:BOOL;
Word1:WORD;
------
Var1:=Word1.0;(*Переменной Var1 присваиваем значение бита №0 переменной Word1*)
Word1.15:=Var2;(*Биту №15 переменной Word1 присваиваем значение переменной Var2*)

Yaroslav_22
30.07.2019, 11:41
не, тут все верно, записана именно переменная и коментарий!

Yaroslav_22
30.07.2019, 11:42
Да.


Var1:BOOL;
Var2:BOOL;
Word1:WORD;
------
Var1:=Word1.0;
Word1.15:=Var2;



да, я так и решил проблему, теперь функциональный блок обращается к переменной word, а в панели буду к ней обращаться по битово!

Валенок
30.07.2019, 20:49
не получилось так, ошибочка выходит..
Да ладно. Даже не пробывали небось. Что делали-то ?

Casper17
31.07.2019, 16:54
Здравствуйте. Стоит задача управлять несколькими выходами ПЛК100, переключать высоковольтную нагрузку. ПО планирую писать на Java, а не использовать SCADA системы. В CoDeSyS создал проект, добавил ModBUS slave, переменную 2 байта, и считываю ее успешно. Как сейчас считать и записать дискретные входы и выходы по Modbus!?

capzap
31.07.2019, 17:20
Здравствуйте. Стоит задача управлять несколькими выходами ПЛК100, переключать высоковольтную нагрузку. ПО планирую писать на Java, а не использовать SCADA системы. В CoDeSyS создал проект, добавил ModBUS slave, переменную 2 байта, и считываю ее успешно. Как сейчас считать и записать дискретные входы и выходы по Modbus!?ни как, только в проекте транслировать входа/выхода в коилсы/регистры модбас

tPorte
01.08.2019, 09:32
Здравствуйте! Подскажите пожалуйста, в codesysy 2.3 при печати данных визуализации через "файл" - "печать", CoDeSys выдает ошибку - Высота и ширина элемента "Контент" слишком мала! и далее печать не происходит. Как изменить размер элемента Контент и что это за элемент такой?

Sulfur
03.08.2019, 20:05
Не могу избавиться от одного ОРС
Нажатие кнопки Update приводит к появлению еще одной записи в Local. Вытер с компа все что связано с Lenze, даже в реестре, переустановил CDS, не помогло.
43841

Не нужны Systembus - Server Driver и CAN 8220.

Требуется оставить только то, что позволяет подключаться к ПЛК110 разных модификаций.

petera
04.08.2019, 07:22
Не могу избавиться от одного ОРС
Нажатие кнопки Update приводит к появлению еще одной записи в Local. Вытер с компа все что связано с Lenze, даже в реестре, переустановил CDS, не помогло.
43841

Не нужны Systembus - Server Driver и CAN 8220.

Требуется оставить только то, что позволяет подключаться к ПЛК110 разных модификаций.
Причем здесь реестр и пр. Когда открываешь чужой проект, созданный на другом компьютере или для "неизвестного" ПЛК, то в списке каналов можно найти все, что угодно: - и wago и номера несуществующих портов... А этих записей точно нет в моем реестре.
Значит ВСЕ эти настройки Gateway хранятся в самом файле проекта, в данном случае в проекте "APS_v1_3.pro"
Нужно не кнопку Update нажимать, а для каждой ненужной записи нажимать кнопку Remove. После чего сохранить проект

Sulfur
04.08.2019, 08:04
Проект мой, созданный лично мной от первой до последней буквы.
Нажатие Remove не удаляет лишние записи.
Удаляется только Lenze Standart, но после перезапуска CDS все возвращается, плюс еще одна копия ОРС.

petera
04.08.2019, 08:26
Проект мой, созданный лично мной от первой до последней буквы.
Нажатие Remove не удаляет лишние записи.
Удаляется только Lenze Standart, но после перезапуска CDS все возвращается, плюс еще одна копия ОРС.
А если эти мои проекты открыть
43842

43843

Sulfur
04.08.2019, 10:16
43846

Открывал на свежеустановленном КДС.
Есть ощущение, что Gateway чудит. Не могу найти список протоколов, что бы грохнуть ненужные. Работа с Ленцами не предполагается.
Напрягает то, что с каждым открытием проекта количество OPC возрастает. А когда плодятся сущности, то мне становится страшно.

petera
04.08.2019, 11:08
43846

Открывал на свежеустановленном КДС.
Есть ощущение, что Gateway чудит. Не могу найти список протоколов, что бы грохнуть ненужные. Работа с Ленцами не предполагается.
Напрягает то, что с каждым открытием проекта количество OPC возрастает. А когда плодятся сущности, то мне становится страшно.
Просто жесть!:(

petera
04.08.2019, 11:11
Я бы у официалов спросил - здесь https://forum-ru.codesys.com/index.php

Sulfur
05.08.2019, 07:59
petera
Надежды мало, последнее сообщение там было полгода назад.

Casper17
06.08.2019, 14:31
А есть возможность сбросить ПЛК программно? К примеру отправить команду по ModBus!

petera
06.08.2019, 15:36
А есть возможность сбросить ПЛК программно? К примеру отправить команду по ModBus!

PROGRAM PLC_PRG
VAR
Init: BOOL;
TON_Power: TON;
END_VAR

(*При первом запуске*)
IF NOT Init THEN
ResetPLC:= FALSE; (*Сбросить старую команду*);
Init:=TRUE;
END_IF

TON_Power(IN:= ResetPLC AND Init, PT:=T#500ms);
WHILE TON_Power.Q DO; END_WHILE (*Бесконечный цикл для перезапуска ПЛК*)
где ResetPLC - команда по Модбас
43920

Casper17
06.08.2019, 16:32
Спасибо большое!

pgomberg
07.08.2019, 16:06
Добрый день. Подскажите, как правильнее реализовать запись переменных в slave по Modbus TCP - можно ли перезаписывать их в каждом цикле, либо следует анализировать их значения и записывать в случае изменения? Значения переменных меняются изредка.

YuriBel
07.08.2019, 17:59
А вы собираетесь использовать мастер из конфигурации или будете сами писать обмен?

pgomberg
07.08.2019, 21:45
А вы собираетесь использовать мастер из конфигурации или будете сами писать обмен?

Обмен пишем сами. Функциональный блок чтения из слейва вызываю по таймеру, а вот с записью вопрос - целесообразно ли записывать переменные (три регистра) при каждом вызове ФБ?

Валенок
08.08.2019, 00:21
Записывать в область слейва на этом же ПЛК ? - по барабану.
Или писать в удаленный слейв ? Тогда лучше по изменению. Но не забывать про закрытие порта сервером если вы долго молчите

pgomberg
08.08.2019, 08:11
Записывать в область слейва на этом же ПЛК ? - по барабану.
Или писать в удаленный слейв ? Тогда лучше по изменению. Но не забывать про закрытие порта сервером если вы долго молчите
Обмен по TCP с удаленным слейвом. Порт вроде не должен закрываться, чтение из этого слейва идет постоянно с периодом 250ms.

Карбофос
08.08.2019, 15:36
Здравствуйте!

Имеется ПЛК110[M02], к нему будет подключено несколько произвольных модбас-устройств по RS-485. Можно ли получить статус каждого (онлайн/оффлайн) по отдельности и записать их в переменные для дальнейшей обработки?

Casper17
08.08.2019, 17:28
У меня такой вопрос. Если я на ПЛК110[M02] создам два ModBus TCP элемента, 1- master, для опроса модулей ввода\вывода. 2 - slave по нему ПК будет опрашивать и записывать регистры. Два ПК смогут подключиться к одному ПЛК по ModBus TCP для чтения, записи данных?

ASo
08.08.2019, 17:38
Вы должны создать 2 слейва с разными номерами портов IP.

Casper17
08.08.2019, 19:10
Вы должны создать 2 слейва с разными номерами портов IP.

Это тогда придется дублировать данные и как-то синхронизировать между двумя ModBus TCP элементами в ПЛК. Правильно ли я понимаю, эту проблему решают ОРС сервера. Они собирают данные с устройств и хранят эти значения, а потом по запросу отдают их SCADA системе или другому устройству. Так сказать посредник.

Валенок
09.08.2019, 21:48
Это тогда придется дублировать данные и как-то синхронизировать между двумя ModBus TCP элементами в ПЛК..
Слейв - 1. Портов на него - 2. И никаких синхронизаций. Если только не нужно как-то различать мастеров.
А можно тупо программный слейв-сервер. Тогда и порт один и клиентам проще.

Casper17
10.08.2019, 19:00
Слейв - 1. Портов на него - 2. И никаких синхронизаций. Если только не нужно как-то различать мастеров.
А можно тупо программный слейв-сервер. Тогда и порт один и клиентам проще.

А программный слейв-сервер это как? Через библиотеки? Пример можно или направление указать?!

Валенок
10.08.2019, 22:51
А программный слейв-сервер это как? Через библиотеки?
Да. Syslibsocket

Rednaxel
11.08.2019, 11:02
Это тогда придется дублировать данные и как-то синхронизировать между двумя ModBus TCP элементами в ПЛК...

Слейв - 1. Портов на него - 2. И никаких синхронизаций. Если только не нужно как-то различать мастеров.
А можно тупо программный слейв-сервер. Тогда и порт один и клиентам проще.

У меня похожая ситуация: в сети Modbus TCP к ПЛК 110 нужно подключить несколько панелей.
Давайте уточним для ясности:
1) Разные порты нужны для разных модулей TCP в ПЛК: один порт для Modbus Slave и другой для Modbus Master? Правильно я понял, или нет?
2) Несколько мастеров (панелей или ПК), которые опрашивают и пишут в один ПЛК Slave в сети TCP вполне могут работать за счет параллельно открытых TCP соединений. Это так? Или нет?

Правда в последнем случае возникает вопрос стабильности и скорости, особенно когда панелей больше 2х. И вот тут сразу возникает мысль о сервере. Но только я задумывался об отдельном устройстве, как посреднике между панелями и ПЛК. Как здесь может помочь тот-же ПЛК: не совсем понимаю?

Валенок
11.08.2019, 12:26
1) Разные порты нужны для разных модулей TCP в ПЛК: один порт для Modbus Slave и другой для Modbus Master? Правильно я понял, или нет?
Нет. Серверу-слейву порт назначаете Вы, мастеру - местная ОС.


2) Несколько мастеров (панелей или ПК), которые опрашивают и пишут в один ПЛК Slave в сети TCP вполне могут работать за счет параллельно открытых TCP соединений. Это так? Или нет?
Так, но чтоб и порт слейва один - только при программном слейве.
А для штатного слейва - к одному слейву прицепить несколько портов. Внешние мастера цепляются к разным портам, но всё падает в одну область слейва - штатно различить откуда прилетело не сможете. (Открытое окно на улицу. Кто украл трусы с подоконника - не узнаете)


Правда в последнем случае возникает вопрос стабильности и скорости, особенно когда панелей больше 2х
Стабильность одинаковая во всех случаях. Предел (для МО2) около 1000 модбас-запросов в секунду.
Для программного : в принципе можно сделать больше за счет потока запросов от одного клиента. Но тут уже сам клиент должен уметь организовать поток запросов. Ну и при программном исполнении никто не запрещает несколько "расширить" модбас.


посреднике между панелями и ПЛК. Как здесь может помочь тот-же ПЛК..
Для каких-то конкретных задач - поможет. Для других - лишнее звено.

Rednaxel
12.08.2019, 12:24
Так, но чтоб и порт слейва один - только при программном слейве.
А для штатного слейва - к одному слейву прицепить несколько портов. Внешние мастера цепляются к разным портам, но всё падает в одну область слейва - штатно различить откуда прилетело не сможете. (Открытое окно на улицу. Кто украл трусы с подоконника - не узнаете)


Эксперимент подтвердил: подключается только один мастер.
Кроме панели Овен СП-310 в проекте планируется использовать в качестве панелей несколько iPad и Android планшетов с помощью ПО Iridium Mobile.
Оно умеет только в режиме Мастер. Сбило утверждение разработчиков что множество панелей нормально работают с одним контроллером.
Как теперь выяснилось, не все контроллеры поддерживают множественные подключения и ОВЕН в их числе.
Трюк с портом срабатывает, благодарю за подсказку! Но этот вариант усложняет разработку и обновление проектов.
Возможно придется разработать процедуру автоматического выбора порта при подключении, или внедрять Iridium сервер, который несомненно решит проблему за счет удорожания.
Буду думать. Благодарю за обсуждение!

Casper17
16.08.2019, 13:50
Подскажите пожалуйста, на сайте Овен нашел библиотеку СЭТ-4ТМ.03М для Codesys 3.5, а есть ли для версии Codesys 2.5?

Maddyson
16.08.2019, 20:14
Добрый день господа, подскажите в какую сторону думать, необходимо реализовать многозадачность на плк, первая программа основная (PLC_PRG) должна работать при срабатывании какого либо события (в моем случае это автоподмена аквариума по кнопке), вторая программа doliv (автодолив воды в коллектор аквариума) тоже должна работать при включенной переменной (другой кнопке). На просторах разных форумов нашел лишь кусочек кода в котором не смог разобраться как его прилепить и работает ли он вообще
IF ФлагОбнаруженияСиналаСтоп=TRUE
THEN ПрограммаПустышка
ELSE ОсновнаяПрограмма
END_IF; в конфигурации задач если выставить выполнение по событию, то он не сбрасывает значение выхода что критично, в библиотеках порылся и не совсем разобрался как реализовать этот останов программы, привлекла внимание лишь SysLibTasks.lib, помогите кто знает или имел дело

Rednaxel
17.08.2019, 23:02
Добрый день господа, подскажите в какую сторону думать, необходимо реализовать многозадачность на плк,
По умолчанию ПЛК циклически выполняет задачу, содержащую вызов одной программы PLC_PRG в которой Вы и пишете свой алгоритм на одном из выбранных языков.

При этом, в зависимости от заданных Вами условий (значения входов ПЛК например), выполняется то или иное действие, программа может ветвится, запуская в нужный момент дополнительные функции, блоки и подпрограммы.

Когда программа пользователя отработает один цикл, ПЛК считывает состояние входов, устанавливает выходы, обрабатывает коммуникационные каналы и снова запускает программу. И так примерно 1000 раз в секунду, ну или медленнее если программа достаточно сложная.

Конфигурация задач на закладке Ресурсы позволяет гибко настроить этот механизм, но если Вы новичок оно Вам точно не нужно.

Вам просто нужно описать алгоритм своей задачи по типу "если ... то".
Посмотрите простые примеры программ (https://owen.ru/forum/showthread.php?t=13588). Думаю разберетесь. Если будут затруднения, опишите подробнее свой алгоритм, подскажем. Успехов

Солнечный заяц
22.08.2019, 15:07
Уважаемые знатоки, почему переменная "а" всегда False? Как это работает?
UPD: b - переменная типа WORD. Если изменить тип переменной на INT, то компилятор будет ругаться.

A.Simonov
22.08.2019, 15:30
Добрый день.

Попробуйте поставить b=10 в скобки, так процедура сравнения будет проводиться корректно.
a:= NOT (b = 10);

Солнечный заяц
23.08.2019, 11:25
not b => FFFF

Т.е. идет поразрядная инверсия... Теперь понял. Не знал. Спасибо.

Александр N
26.08.2019, 08:41
Добрый день. Столкнулся с проблемой при написании программы в codesys. При симуляции программы один из fb перестает работать, линии связей окрашиваются в светло серый цвет, в окне объявления переменных появляются вопросы.Программа в CFC.
Причем это происходит не сразу после входа в режим симуляции, а через какое-то время. Подскажите как с этим бороться.
Спасибо.

Sulfur
26.08.2019, 11:45
Александр N
В данном проекте я обнаружил следующее:
1. Множественное объявление переменных. Например переменная di01_schetOborot объявлена в конфигурации и в FUNCTION_BLOCK zavihritel. Объявление в ФБ лишнее. Переменные, объявленные в конфигурации, имеют статус глобальных, и обращаться к ним можно из любого ФБ или ПОУ в любой момент.
2. Замер оборотов на входе DI1, примененный в данном случае, будет "медленным", ибо в этом режиме быстрые входа работают как обычные. Если замеряемая частота довольно высокая, то как вариант можно использовать SysLibPorts (сами входа в режиме Fast discrete inputs - direct control), ФБ переводить в ПОУ, а вызов этой задачи выполнять из Конфигуратора задач, используя прерывание таймера с минимальным временем (20мкс вроде как). Либо использовать функционал входов Fast Counters.

Александр N
26.08.2019, 12:55
Спасибо за комментарий. По оборотам разберусь. Мне более важно разобраться с остановкой работы блоков. Множественное объявление переменных может быть причиной этого.

Sulfur
26.08.2019, 13:08
Какой конкретно ФБ подвисает?

Александр N
26.08.2019, 14:49
zatvor_andGidravlika

Sulfur
27.08.2019, 12:10
В этом блоке тоже куча многократно объявленных переменных. Рекомендую все же убрать дубли объявлений.

Александр N
27.08.2019, 12:13
Хорошо попробую

Александр N
28.08.2019, 08:51
Все получилось, убрал лишние переменные, убрал перекрытия памяти и зависание пропало. Спасибо за Ваши отзывы.

perunov
28.08.2019, 13:08
Добрый день! Подскажите пожалуйста, как можно отправить String из ПЛК на панель оператора. Codesys предлагает только 2 байта, 4 байта, 8 бит и Float. Есть ли инструмент который передаст String в String на СП307? Спасибо!

petera
28.08.2019, 14:33
Добрый день! Подскажите пожалуйста, как можно отправить String из ПЛК на панель оператора. Codesys предлагает только 2 байта, 4 байта, 8 бит и Float. Есть ли инструмент который передаст String в String на СП307? Спасибо!

Например 10шт 2байта дадут String(20)

perunov
28.08.2019, 14:45
Большое спасибо. Я решил кодировать в Integer, его отправлять на панель, а потом декодировать с помощью элемента "Вариационный текст", хорошо что на сп307 есть такая возможность.
44343

petera
28.08.2019, 15:13
Большое спасибо. Я решил кодировать в Integer, его отправлять на панель, а потом декодировать с помощью элемента "Вариационный текст", хорошо что на сп307 есть такая возможность.
44343
А если нужно не только в панель но и обратно?
Если все таки понадобится, то вот для стринг из 20 символов
57238

57239

ЗЫ.

https://www.youtube.com/watch?v=Wy2aXKFsqJw

perunov
28.08.2019, 15:20
А если нужно не только в панель но и обратно?
Если все таки понадобится, то вот для стринг из 20 символов
44346

44347

Большущее спасибо, сохранил!!!

petera
28.08.2019, 15:30
Добавил кино

https://www.youtube.com/watch?v=Wy2aXKFsqJw

Rednaxel
29.08.2019, 09:51
А если нужно не только в панель но и обратно?
Если все таки понадобится, то вот для стринг из 20 символов

ЗЫ.

https://www.youtube.com/watch?v=Wy2aXKFsqJw

Наглядно, доступно, понятно и просто круто! ;)
Вот это все надо бы сохранить в Каталог "Примеры программ для ПЛК100/150/154/110/160" (https://owen.ru/forum/showthread.php?t=13588).

Как это сделать, кто знает? Написать Александру Приходько (https://owen.ru/forum/private.php?do=newpm&u=1611)?

oldmaster
31.08.2019, 11:21
Добрый день. Прошу помочь советом. Ранее автоматизацией не занимался. Приточно-вытяжная вентиляция. Вентилятор притока канальный. Грелка 380 В, общая мощность 6 кВт, 3 ТЭН звездой без нейтрали. Есть желание переделать систему на ПР200, но запнулся как сделать регулировку ТЭН. Читал много, но видимо не достаточно для полного понимания. Вариант 1 через пид-регулятор получить 0-10 в на выходе, но тогда не получается подобрать ТТР с плавной регулировкой, 3-х фазное, с управлением 0-10 в. Вариант 2 использовать алгоритм двухпозиционного регулятора. Здесь смущает ресурс встроенных реле ПР200.

ASo
31.08.2019, 12:19
Купите ПР с выходами 0..10В и управляйте одним ТТР с входом управления постоянным напряжением напрямую или через транзистор.

Сергей0308
31.08.2019, 12:36
Есть модификация ПР200 с 4 транзисторными выходами, там встроенная ШИМ:

44400

+ одно трехфазное(полюсное) или три однофазных(полюсных) дискретных ТТР!

Короче, масса вариантов, глаза разбегаются в разные стороны!

Евгений Андреевич
01.09.2019, 10:58
Здравстуйте! Появился у меня вопрос по работе с таймерами.

FOR i:=0 TO 9 DO
FOR j:=0 TO 9 DO
ton1(IN:=TRUE, PT:=T#217ms);
IF ton1.Q THEN
a:=SysTimeGetMs();
x[i,j]=a;
END_FOR
END_FOR

Я не понимаю почему таймер срабатывает всего лишь 1 раз и независимо от цикла. То есть на первом шаге он запустился, а циклы i,j моментально проходят до конца, а таймер просто сам по себе отработал и все. Помогите пожалуйста разобраться, как правильно вызывать таймер на каждой итерации цикла. Пробовал сделать 2 функциональных блока: в одном циклы, на каждой итерации вызывается второй функциональный блок с таймером и арифметическим действием, но ничего не меняется, таймер так же сам по себе отрабатывает 1 раз и на этом все. Не знаю, что делать.

capzap
01.09.2019, 11:29
Здравстуйте! Появился у меня вопрос по работе с таймерами и нигде не могу найти ни примера, ни объяснения.
Задача следующая: разработать 2 функциональных блока. Первый должен заполнять int массив 10х10 элементов случайными числами. Случайные числа – по TON с пресетом 217 мс дёргать системные миллисекунды. Соответственно полное заполнение в районе 22 с. Второй блок ищет максимальное число, его индексы и среднее арифметическое всех элементов.
Итак, делаю я первый функциональный блок заполнения массива. Код:

FOR i:=0 TO 9 DO
FOR j:=0 TO 9 DO
ton1(IN:=TRUE, PT:=T#217ms);
IF ton1.Q THEN
a:=SysTimeGetMs();
x[i,j]=a;
END_FOR
END_FOR

Я не понимаю почему таймер срабатывает всего лишь 1 раз и независимо от цикла. То есть на первом шаге он запустился, а циклы i,j моментально проходят до конца, а таймер просто сам по себе отработал и все. Помогите пожалуйста разобраться, как правильно вызывать таймер на каждой итерации цикла. Пробовал сделать 2 функциональных блока: в одном циклы, на каждой итерации вызывается второй функциональный блок с таймером и арифметическим действием, но ничего не меняется, таймер так же сам по себе отрабатывает 1 раз и на этом все. Не знаю, что делать.

потому что гладиолус", блок должен выглядеть совершенно иначе


IF ton1.Q THEN
array[count / 9, count MOD 9] := TIME_TO_DINT(TIME()) MOD 1000;
count := count +1;
END_IF;
ton1(IN:=NOT ton1.Q,PT:=T#217ms);
примерно так, в среде разработкине проверял

Avenging_Archangel
01.09.2019, 15:47
Здравствуйте! Я новичок в программировании ПЛК, поэтому вопросы будут возможно глупыми. Я программирую ПЛК110-30 (старого образца), и столкнулся с такой интересной проблемой, решение которой пока в интернете не нашел. При подключении онлайн для нормальной работы ПЛК я должен выполнить следующее: Онлайн -> Подключение -> Онлайн -> Сброс (заводской) -> Загрузка -> Старт. Если я сделаю подключение не в этой последовательности или перед сбросом пройдет больше 10 секунд, ПЛК перезагружается и теряет связь, приходится это все делать сначала. Причем неважно, я внес изменения в программу или только подал питание на ПЛК, в обоих случаях работает только после этих манипуляций. А вот с маленькими проектами (скажем проверяю работу какого-то блока отдельно) онлайн подключение происходит нормально, просто подключаюсь и запускаю ПЛК. Как можно избавиться от этих лишних телодвижений? Может есть какая настройка в программе?

Rednaxel
01.09.2019, 19:03
....Может есть какая настройка в программе?
Прогоамму выложите. Посмотрим

Avenging_Archangel
01.09.2019, 19:48
Прикрепляю программу. Все программы, которые начинаются с CNC в данный момент не вызываются, они черновые.

Avenging_Archangel
01.09.2019, 20:53
1. То есть для начала попробовать убрать репит/антил и попробовать загрузить? Второй пункт не понял если честно. Но в общем, когда подключается к плк, все работает отлично. Мне самое главное избавиться от лишних движений при подключении онлайн, а код потом поправлю, я сам понимаю что там жесть, как уже говорил, новичок в этом, это мой первый, и уже если честно надеюсь что единственный проект

Миронов Илья
02.09.2019, 11:43
Здраствуйте, возможно ли использование ПК в роли панели оператора для контроллера ПЛК110 [М02] ? С панелями все понятно т.к там есть конфигуратор.

P\s: Если да, буду признателен ссылке (примера), как это все организовать и какое ПО для этого нужно.

Rednaxel
02.09.2019, 12:30
Здраствуйте, возможно ли использование ПК в роли панели оператора для контроллера ПЛК110 [М02] ?
Хороший вопрос, Илья ;) Вариантов, как обычно, сразу несколько.

Самый простой: Облако ОВЕН Cloud (https://owen.ru/owencloud): Просто, удобно, бесплатно, но нужен интернет.

Затем на ум приходят многочисленные SCADA системы, ОВЕН рекомендует например такие (https://owen.ru/catalog/scada_sistemi): Можно создать систему любого уровня сложности, но уже за деньги.

Стоит упомянуть также системы "Умный дом": OpenHub (https://www.openhab.org/), MajorDomo (https://mjdm.ru/), Iridium Mobile (https://iridi.com/ru/).

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

Миронов Илья
02.09.2019, 13:37
Появилась необходимость перевести старое оборудование на логику и управление ПЛК.
В программа будет иметь возможность управлять множеством (~60 дискр. ~ 5 аналог.) дискретных и аналоговых вх\вых. А также необходимо реализовать возможность построения графиков тех.процесса.

Возможность соединения ПЛК и ПК через компьютер не вариант. Использование панели оператора СП3хх, более простой способ в плане связи с ПЛК и созданием самой архитектуры управления, но ее цена сопоставима с *нормальным* ПК. К тому же (если я не прав то исправьте, т.к знаю все это на уровне плинтуса) хотелось бы большей вариативности (высокое разрешение изображения) с созданием окон на СП3хх, а именно создать в 3D проект(AutoCAD\Cinema 4D) установки и использовать его (отдельные ракурсы в jpg) как кнопки и фронтальное изображение окна.

Casper17
02.09.2019, 13:47
Подключаю модуль MY210-403 к ПЛК110-60. Добавил ModBus Master, в нем добавил универсальное устройство, настроил IP, добавляю 32 bit output state, чтобы записывать значения в модуль, для управления реле. Но команды не проходят, пока не записать 255 во второе поле которое называется Command. Как-то от этого можно уйти?
44420

petera
02.09.2019, 14:13
Подключаю модуль MY210-403 к ПЛК110-60. Добавил ModBus Master, в нем добавил универсальное устройство, настроил IP, добавляю 32 bit output state, чтобы записывать значения в модуль, для управления реле. Но команды не проходят, пока не записать 255 во второе поле которое называется Command. Как-то от этого можно уйти?
44420
А добавить обычный 32 bit output без всяких "state", не судьба?
44421

capzap
02.09.2019, 14:21
или как вариант, в параметрах UMD вернуть режим в пункте work mode, а какой это перечитать документацию на конфигуратор

Andrew_Stranger
02.09.2019, 15:13
Появилась необходимость перевести старое оборудование на логику и управление ПЛК.
В программа будет иметь возможность управлять множеством (~60 дискр. ~ 5 аналог.) дискретных и аналоговых вх\вых. А также необходимо реализовать возможность построения графиков тех.процесса.

Возможность соединения ПЛК и ПК через компьютер не вариант. Использование панели оператора СП3хх, более простой способ в плане связи с ПЛК и созданием самой архитектуры управления, но ее цена сопоставима с *нормальным* ПК. К тому же (если я не прав то исправьте, т.к знаю все это на уровне плинтуса) хотелось бы большей вариативности (высокое разрешение изображения) с созданием окон на СП3хх, а именно создать в 3D проект(AutoCAD\Cinema 4D) установки и использовать его (отдельные ракурсы в jpg) как кнопки и фронтальное изображение окна. А оно Вам надо 3D? Что автоматизируйте, если не секрет.

Rednaxel
02.09.2019, 16:42
... хотелось бы большей вариативности (высокое разрешение изображения) с созданием окон на СП3хх, а именно создать в 3D проект(AutoCAD\Cinema 4D) установки и использовать его (отдельные ракурсы в jpg) как кнопки и фронтальное изображение окна.

Промышленная автоматика тяготеет в сторону функциональности, надежности и консерватизма прежде всего, а потом уже всякие дизайнерские навороты. Что впрочем не значит что нельзя сделать красивый интерфейс с 3D мнемосхемой установки, в том числе и на СП3хх. Но нужно знать меру во-первых, во-вторых иметь немалый опыт. Многие конторы, занимающиеся разработкой установок имеют в штате отдельного дизайнера интерфейсов.
Вы уверены что вот так вот с нуля потянете и то и то? Или лучше сосредоточится на функциональности?

И да, что за установку автоматизируете, поделитесь?

Rednaxel
02.09.2019, 16:51
... всякие дизайнерские навороты...


"Кстати о птичках": Мультиплатформенное ПО Iridium Mobile как раз имеет приоритет в сторону дизайна и благодаря мощному редактору Iridium Studio, позволяет создавать весьма навороченные интерфейсы (https://iridi.com/ru/download/software/v3/#tab3).

Миронов Илья
03.09.2019, 08:09
3D модель установки хотел сделать в виде окон и некоторых активных элементов (к примеру клапан или насос). К слову зачем ? Просто, как мы все знаем покупатель сначала покупает глазами, а качество исполнения и работоспособность гарантировать я думаю смогу. Возвращаясь к моему предыдущему вопросу, есть информация как использовать ПК взамен панели оператора (без связи через интернет и покупку доп. платного ПО) ?


Заранее спасибо за внимание !

capzap
03.09.2019, 08:13
3D модель установки хотел сделать в виде окон и некоторых активных элементов (к примеру клапан или насос). К слову зачем ? Просто, как мы все знаем покупатель сначала покупает глазами, а качество исполнения и работоспособность гарантировать я думаю смогу. Возвращаясь к моему предыдущему вопросу, есть информация как использовать ПК взамен панели оператора (без связи через интернет и покупку доп. платного ПО) ?


Заранее спасибо за внимание !протокол обмена открытый и доступен в качестве библиотек во всех распространенных языках программирования, вопрос не для этого форума, а на том на чем собираетесь делать, если конечно не устраивает ни одно из готовых решений различных СКАД и бесплатных в том числе

Миронов Илья
03.09.2019, 08:13
Я не хочу использовать 3D модель как основу интерфейса (то есть она не будет крутиться в панели оператора) картинка будет статична, просто после создания 3D модели можно использовать разные ракурсы картинки и выделить на ней определенные активные зоны(например двигатель или клапан)

Установка предназначена для напыления серебра.

Andrew_Stranger
03.09.2019, 10:25
3D модель установки хотел сделать в виде окон и некоторых активных элементов (к примеру клапан или насос). К слову зачем ? Просто, как мы все знаем покупатель сначала покупает глазами, а качество исполнения и работоспособность гарантировать я думаю смогу. Возвращаясь к моему предыдущему вопросу, есть информация как использовать ПК взамен панели оператора (без связи через интернет и покупку доп. платного ПО) ?
Заранее спасибо за внимание ! Сначала Вы пишите, "Возможность соединения ПЛК и ПК через компьютер не вариант." А сейчас вам уже надо ПК??? И Как вы можете гарантировать что-то, если вы на форуме спрашиваете как связать ПК и переферию?

PavelGO
03.09.2019, 11:53
Подскажите, пожалуйста, по пользовательским типам данных. Правильно я понимаю, что структуру нельзя прописать в конфигурации входа плк, например "pump.flow" и придётся объявлять входы как простые переменные и тратить процессорное время на присваивание?

Rednaxel
03.09.2019, 12:01
... прописать в конфигурации входа плк, например "pump.flow" ...

Точку уберите из имени переменной, и все получится.

PavelGO
03.09.2019, 12:20
хм. Может не правильно высказался. Мне не дефайн нужен. Есть структура:
TYPE Tpump :(*Модель насоса*)
STRUCT
cmd_on:BOOL;
flow:BOOL;
flow_alarm:BOOL;
owerheat_alarm:BOOL;
oper_time:WORD;(*Время наработки*)
flow_delay:WORD;(*Задержка при старте перед определением сухого хода*)
END_STRUCT
END_TYPE

pump:Tpump;

Хочется без лишних присваиваний заставить плк писать дискретный вход в pump.flow

Миронов Илья
03.09.2019, 12:24
Опечатка, через интернет. Гарантировать могу т.к я курирую эту установку и при возникновении неисправности или недоработки (которая не вылезла в ходе тестирования) можно будет оперативно устранить.
Спасибо за ответы.

Миронов Илья
03.09.2019, 12:26
Спасибо, буду иметь ввиду.

Andrew_Stranger
03.09.2019, 12:27
Вроде как в конфигураторе вы только можете объявить переменные, но не можете обратиться к уже объявленной переменной в тексте программы.

PavelGO
03.09.2019, 12:36
лучше потратить процессорное время, 3мкс роли не сыграют, а входам конфигурации можно присвоить только структуру конфигурации, но не как непонятно какую структуру некоего объекта

Спасибо. Так и думал. Надеялся на обход какой или патч. Теоретически то компилятор может вычислить адрес поля структуры и писать в него, а не в переменную, (как в третьем cs )

capzap
03.09.2019, 12:49
Спасибо. Так и думал. Надеялся на обход какой или патч. Теоретически то компилятор может вычислить адрес поля структуры и писать в него, а не в переменную, (как в третьем cs )

Вы открывали когда нибудь глобальные переменные в онлайне? Обратите внимание в следующий раз, что стоит возле присвоенного имени бита входа, при желании можно "жестко зашить" указатель

Avenging_Archangel
03.09.2019, 22:01
Здравствуйте! У меня возможно глупый вопрос по действиям, никак не вкурю в них. Допустим у меня в проекте три программы, PROG1, PROG2 и PROG3. Друг друга они не вызывают, скажем все программы запускаются из конфигуратора задач. Я к PROG1 добавляю два действия DEISTV1 и DEISTV2, в которые копирую код PROG2 и PROG3, само собой из PROG1 они вызываться не будут, а вот из конфигуратора к ним обращаться как к PROG1, PROG1.DEISTV1 и PROG1.DEISTV2. Интересует вопрос, в чем будет отличие в плане работы программы, если программы отдельно и если программы засунуты в действие?

Валенок
03.09.2019, 22:50
в чем будет отличие
ни в чем......

Eugene Vavilov
04.09.2019, 10:34
Здравствуйте! Вопрос такой: программа ПЛК использует счётчик времени, вызываемый TIME(). Производится вычисление интервала времени между текущим показанием TIME и записанным предыдущим. По описанию функций счётчик времени достигает 49d17h2m47s295ms (4194967295 ms). И что потом: он сбрасывается и начинает отсчёт с нуля? или что?

petera
04.09.2019, 11:54
Здравствуйте! Вопрос такой: программа ПЛК использует счётчик времени, вызываемый TIME(). Производится вычисление интервала времени между текущим показанием TIME и записанным предыдущим. По описанию функций счётчик времени достигает 49d17h2m47s295ms (4194967295 ms). И что потом: он сбрасывается и начинает отсчёт с нуля? или что?

Это значит, что указанным способом (вычисление интервала времени между текущим показанием TIME и записанным предыдущим) можно измерять интервалы времени не более 49d17h2m47s295ms. Замечу, что это не зависит от начального значения TIME()
Если нужно больше, то используют часы реального времени и переменные DT(DateAndTime).

Eugene Vavilov
04.09.2019, 12:59
Это значит, что указанным способом (вычисление интервала времени между текущим показанием TIME и записанным предыдущим) можно измерять интервалы времени не более 49d17h2m47s295ms. Замечу, что это не зависит от начального значения TIME()
И ??
Вот у меня предыдущее значение записалось, допустим, PrevTime = 49d17h2m47s000ms (равное текущему показанию счёта). Следующее вычисление (интервал) - через 500 ms. "TiME() минус PrevTime". Какой будет результат ? TIME() будет дальше продолжать отсчёт и мне интервал нормально вычислит = 500 ms? Я то думал, что может перепрыгнуть через "0" и выдаст отрицательный результат.

Eugene Vavilov
04.09.2019, 13:03
вот Вы даже знаете последнее число в диапазоне, разве сложно перед заданием вопроса вычесть из текущего значения что нибудь из прошлого. К приvеру из 100 вычесть 5 или из 100 вычесть TIME_TO_UDINT(T#49d17h2m47s0ms)
Не понял Вашу логику, зачем? Я не могу менять значение TIME() или сбросить его без перезагрузки программы.

petera
04.09.2019, 13:25
И ??
...допустим, PrevTime = 49d17h2m47s000ms (равное текущему показанию счёта). Следующее вычисление (интервал) - через 500 ms. "TiME() минус PrevTime". Какой будет результат ?

Естественно будет
TiME() минус PrevTime = 500 ms
:)

Eugene Vavilov
04.09.2019, 13:33
и не надо ни чего менять, ответите на вопрос чему будет равно значение UDINT_TO_TIME(TIME_TO_UDINT(T#2m47s0ms) - TIME_TO_UDINT(T#49d17h2m47s0ms)) ?

"минус" 4194800000 ms. Или "минус" 49d17h0m00s000ms.
А вообще то должен выдать ошибку, т.к. UDINT в диапазоне от 0 - не предусматривает отрицательных значений.
И если так - выдаст ошибку и перезагрузит контроллер - мои проблемы решены :)
Кстати, можно ли из самого проекта в режиме работы отдать команду на перезагрузку контроллера ??

petera
04.09.2019, 13:44
"минус" 4194800000 ms. Или "минус" 49d17h0m00s000ms.
А вообще то должен выдать ошибку, т.к. UDINT в диапазоне от 0 - не предусматривает отрицательных значений.
И если так - выдаст ошибку и перезагрузит контроллер - мои проблемы решены :)
Кстати, можно ли из самого проекта в режиме работы отдать команду на перезагрузку контроллера ??

А разве TIME может быть отрицательным?

Правильный ответ 167296ms или 2m47s296ms

ЗЫ
Развернутый ответ на Ваш предыдущий вопрос

...допустим, PrevTime = 49d17h2m47s000ms (равное текущему показанию счёта). Следующее вычисление (интервал) - через 500 ms. "TiME() минус PrevTime". Какой будет результат ?
TimeNow=49d17h2m47s000ms + 500ms = 204ms

Интервал = TimeNow - PrevTime = 204ms - 49d17h2m47s000ms = 500ms

Eugene Vavilov
04.09.2019, 13:58
ЗЫ
Развернутый ответ на Ваш предыдущий вопрос

49d17h2m47s000ms + 500ms = 204ms

204ms - 49d17h2m47s000ms = 500ms
Не очевидно, но факт! Не очевидно то, что (204 - 4194967000) = 500. Видимо, это связано, как Вы заметили, что TIME тоже не принимает отрицательных значений.
Значит, фактически идёт переход через "0" ? Это нормально, пойдёт.
Через 49 дней точно будет понятно :) Спасибо (у меня в режиме эмуляции почему то ничего не считает программа, поэтому не могу свои и чужие догадки или размышления проверять без контроллера)

petera
04.09.2019, 14:19
Не очевидно, но факт! Не очевидно то, что (204 - 4194967000) = 500. Видимо, это связано, как Вы заметили, что TIME тоже не принимает отрицательных значений.
Значит, фактически идёт переход через "0" ? Это нормально, пойдёт.
Через 49 дней точно будет понятно :) Спасибо (у меня в режиме эмуляции почему то ничего не считает программа, поэтому не могу свои и чужие догадки или размышления проверять без контроллера)

Почему не очевидно?
Целочисленная арифметика без знаковых чисел, числа представлены 4 байтами(32бита)
Операции вычитания в этом случае заменяются операцией сложения с числом в дополнительном коде
Дополнительный код 4294967000 == NOT(4294967000) + 1 = 296
(204 - 4294967000) = 204 + 296 = 500

ЗЫ
49d17h2m47s000ms = 4294967000

Eugene Vavilov
04.09.2019, 14:57
Извините, не сталкивался с целочисленной арифметикой без знаковых чисел раньше, про дополнительные коды не слышал.
Так по факту, значение TIME() - на дисплее или в программе, по достижении T#49d17h2m47s295ms, далее изменится на 0 и начинается отсчёт с нуля. Удалось проверить.
Спасибо за разъяснения!

spa
04.09.2019, 15:49
Подскажите что за ошибка:
44449

Валенок
04.09.2019, 16:12
Извините, не сталкивался с целочисленной арифметикой без знаковых чисел раньше
Да ладно. Сталкивались все, всю жизнь, регулярно. Например :
Фильм начался в 23-00, закончился в 1-00. Сколько шел фильм ?

Eugene Vavilov
04.09.2019, 16:17
Аааа, в этом смысле =) 2 дня по 1 часу в каждом

Валенок
04.09.2019, 20:34
Аааа, в этом смысле =) 2 дня по 1 часу в каждом
Ну так да. Как и здеся...

у меня ... PrevTime = 49d17h2m47s000ms.... Следующее вычисление ...через 500 ms..
.. 100 дней. 296ms в первой полсотне и 204 во второй.

Avenging_Archangel
05.09.2019, 05:31
Здравствуйте! Интересует вопрос, могу ли я программно запретить выполнение какого-либо задания в конфигураторе задач? Опишу суть проблемы. Имеется концевик с нормально замкнутыми и нормально разомкнутыми контактами, они подключены к ПЛК. В PLC_PRG вход NC я инвертирую, и входа вешаю на прерывания. Замыкание NO или размыкание NC вызывают одну и ту же программу. НО! При нормальной работе концевика получится так, что программа вызовется дважды, один раз при размыкании NC и второй раз при замыкании NO. Мне нужно чтобы если скажем NC разомкнулось, прерывание по замыканию NO не вызывалось, так как нужное действие уже будет произведено. Использовать только один контакт концевика или ждать обоих срабатываний не вариант, по опыту знаю, что концевики любят умирать в неподходящий момент, поэтому нужно именно отключение вызова прерывания. Пока придумал только костыль по типу промежуточной программы, которая будет запускаться вместо основной про прерываниям, в ней объявляю переменную разрешения вызова основной программы, которая будет сбрасываться в момент срабатывания концевика, и устанавливаться в момент отжатия концевика. Вызов основной программы само собой через IF. Должен же быть способ лучше. И попутный вопрос, можно ли сделать вызов программы не по переднему фронту, а по заднему?

Sulfur
05.09.2019, 07:58
Avenging_Archangel
Если уж так хочется поразвлекаться с прерываниями, то можно пойти другим путем.
Делаем глобальную булеву переменную, например StartProgramm1.
В прерываниях по необходимым условиям устанавливаем её в TRUE
Пишем отдельную ПОУ Programm1, причем там должно быть прописано условие окончания алгоритма, по которому StartProgramm1 сбрасывается в FALSE.
В ПЛЦ_ПРГ пишем следующее:

IF StartProgramm1 THEN Programm1(); END_IF;
Что имеем в результате:
По сработке любого NC или NO устанавливается флаг StartProgramm1.
Начинает выполняться Programm1.
Изменение состояний входов NC и NO уже не меняют состояние флага.
Состояние флага меняет только Programm1.
Выполнение Programm1 прекратится в следующем цикле ПЛК после сброса флага StartProgramm1.
Следовательно Programm1 выполняется только один раз.

Avenging_Archangel
05.09.2019, 08:33
Ну в принципе похожим образом сейчас и реализовано у меня, хотелось бы попроще, типа как в AVR микропроцессорах, запретил внешнее прерывание на нужной ноге в регистре EIMSK, сделал нужные дела и разрешил прерывание

Avenging_Archangel
05.09.2019, 08:51
В том то и дело, что по идее концевик будет нажиматься очень медленно, и если там будет стоять не щелчковый, а типа советского ..овна, который будет на пружине, после размыкания NC контакта перед замыканием NO контакта может пройти и полсекунды. Ну и я конечно не знаю как в ПЛК устроены прерывания, если сравнивать с AVR, с которыми одно время работал, там если даже пришло второе прерывание во время работы первого, если прерывания запретить просто CLI, процессор все равно поставит бит прерывания, и после выхода из первого сразу перейдет во второе.

Avenging_Archangel
05.09.2019, 08:52
Через действие и делаю, думал есть способ проще

Валенок
05.09.2019, 14:15
всмысле нет,
В смысле - нету смысла в семафоре. Изнутри заперлись. Даже если диарея - ждать придется.
Ногой дверь открывает только вч-таймер.

Avenging_Archangel
05.09.2019, 15:18
С семафором пока не разобрался, но если я правильно понял, им можно заблокировать программу если она выполняется сейчас. Если это так, то вообще не вариант, так как программа по срабатыванию концевика очень маленькая, условно говоря 40 строк кода, поэтому до второго срабатывания она сто пудово успеет выполниться.
Вкратце опишу, для чего это мне нужно. В общем, я заменяю на ПЛК внутренности одного станка, и в нем есть ЧПУ. И сейчас я занимаюсь с определением конечных точек ЧПУ, на которых стоят концевики. В идеале при поиске алгоритм такой: запускаю мотор по направлению к концевику, при касании концевика мотор начинает вращаться в другую сторону, как концевик размыкается, мотор опять идет к концевику, и так три раза. В моменты касания концевика я сохраняю значение энкодера и потом нахожу среднее. Именно поэтому мне нужно для надежности оба контакта концевика, но это полбеды. Так как оборудование все-таки ответсвенное, будет еще функция, типа если концевик сработал не во время поиска нулей - все, приехали, беги и смотри что не так с приводами. И именно для последней задачи мне нужно игнорировать второе срабатывание во время поиска.
Вроде я написал эту часть кода, сегодня вечером попробую на плк на столе.

Валенок
05.09.2019, 20:18
..запускаю мотор по направлению к концевику, ..
..при касании концевика мотор начинает вращаться в другую сторону,
..как концевик размыкается, мотор опять идет к концевику,
и так три раза. ...

Забейте и забудьте про прерывания для таких задач.
Классический автомат

..В моменты касания концевика я сохраняю значение энкодера и потом нахожу среднее. Именно поэтому мне нужно для надежности оба контакта концевика, но это полбеды...,
еще функция, если концевик сработал не во время поиска нулей - все, приехали, беги и смотри что не так с приводами. ..
для последней задачи мне нужно игнорировать второе срабатывание во время поиска. ...
Особенности состояний-шагов

Sulfur
05.09.2019, 21:25
Avenging_Archangel
А что мешает поставить индуктивные датчики? На моем ЧПУ так. Правда у меня не на Овене, а на ЛинуксЦНЦ, но работает отлично.
Но даже на Овене можно вычислить гистерезис индуктивного датчика по переднему и заднему фронту сигнала.

Avenging_Archangel
05.09.2019, 21:34
Ну я реализовал вот так (прикрепляю проект). Тестирую в железе на столе, пока вроде норм. Программы CNC_FINDING.CncMaxFinding и CNC_FINDING.CncMinFinding запускаются с ИП320, а дальше уже по прерываниям от концевиков. Комментарии в программах поиска максимума не все правильные, в поиске минимума вроде все поправил.

Avenging_Archangel
05.09.2019, 21:41
Ну больше дело в финансах. Восстановить станок больше моя прихоть, как такового задания мне не было, я вообще работаю главным конструктором и занимаюсь разработкой электрощитового оборудования, электроника как хобби, поэтому интересно с ПЛК повозиться. Я работаю на маленьком заводе (у нас работников меньше 50), директор и так нехило затратился на ПЛК, ИП320 и ПЧВ1, боюсь если я попрошу еще купить индукционные датчики, меня пошлют далеко и надолго:) Да и плюс концевики в моем мухосранске проще найти, чем индукционные датчики.

capzap
06.09.2019, 07:48
Ну я реализовал вот так (прикрепляю проект). Тестирую в железе на столе, пока вроде норм. Программы CNC_FINDING.CncMaxFinding и CNC_FINDING.CncMinFinding запускаются с ИП320, а дальше уже по прерываниям от концевиков. Комментарии в программах поиска максимума не все правильные, в поиске минимума вроде все поправил.

самое первое это см .вложение, дальше смысла нет рассматривать проект как рабочий, если нарушен порядок выполнения
второе, понятно что Вы не программист, но попробуйте где нибудь этот код написать в компьютерных языках программирования и "прогнать" по нему статический анализ, например действие CncMaxFinding
I) IF bFindMax=TRUE OR bFindMax=TRUE
II) внутри условия из первого пункта вновь проверка IF bFindMax=TRUE
III) и как продолжение есть еще и ELSE которое никогда не выполняется

третье, добавляйте в конфигуратор модуль Button обязательно

Avenging_Archangel
06.09.2019, 08:45
1. Про порядок знаю, просто сейчас занимаюсь с поиском нулей, и после внесения изменений в PLC_PRG порядок не наводил, но за напоминание спасибо. Хотя и в данный момент все в PLC_PRG работает в железе как ни странно.
2. Большое спасибо, тут реально ошибка, которую проглядел, в реальности первое условие должно быть IF bFindMax=TRUE OR bStartInit=TRUE, когда дошел бы до отладки начального поиска нуля, сильно бы удивился, что программа не вызывается, и зная себя, потратил бы полчаса на поиск ошибки :)
3. Про button читал, вроде это косяк овена, и иногда программа останавливается самопроизвольно. Добавил в проект. Еще раз спасибо.

Sulfur
06.09.2019, 11:46
На будущее:
Конструкции типа IF bFindMax=TRUE OR bStartInit=TRUE можно писать короче - IF bFindMax OR bStartInit
Т. е. в проверке условия КДС автоматически сравнивает с TRUE.
Если надо проверить на FALSE, то можно написать так:
IF NOT bFindMax OR NOT bStartInit THEN
Лично мое мнение - удобнее читать код.

Avenging_Archangel
06.09.2019, 13:23
можно писать короче - IF bFindMax OR bStartInit

Да, я знаю, для AVR, когда я начинал их изучать, я так и делал. А вот в Codesys мне почему-то удобнее когда видно, где какое значение. Не знаю с чем это связано, возможно потому что еще не все понимаю в этой среде программирования. Ну и иногда я использую типа дефайнов, например _vDirect:=vDirectToMax, где _vDirect - булевская переменная, а vDirectToMax - булевская константа, равная FALSE.

Eugene Vavilov
06.09.2019, 23:04
Кстати, можно ли из самого проекта в режиме работы отдать команду на перезагрузку контроллера ??
Вопрос актуален. Случайно получилось в результате некорректного использования цикла WHILE.. (Просто искал возможность кратковременного отображения строки "Записано" на дисплее при перезаписи retain- переменной не в ущерб остальным надписям).

Rednaxel
07.09.2019, 09:28
Вопрос актуален. Случайно получилось в результате некорректного использования цикла WHILE..

Есть такое (https://owen.ru/forum/showthread.php?t=12701). Конкретно пост #8

Smith2007
07.09.2019, 21:07
44507
Подключил библиотеку SysLibStr.lib и вызвал в POU одну из функций.
Компиляция проходит без ошибок, но при попытке загрузить программу в ПЛК - выдается сообщение об ошибке
С чем это может быть связано?
ПЛК110-30М

_Mikhail
08.09.2019, 18:56
44507
Подключил библиотеку SysLibStr.lib и вызвал в POU одну из функций.
Компиляция проходит без ошибок, но при попытке загрузить программу в ПЛК - выдается сообщение об ошибке
С чем это может быть связано?
ПЛК110-30М

Нужно загрузить библиотеку где созданы данные POU.

Smith2007
08.09.2019, 19:16
Нужно загрузить библиотеку где созданы данные POU.

Библиотека загружена. Компилируется без ошибок.
Именно при загрузке в ПЛК ошибка возникает

_Mikhail
08.09.2019, 19:36
Библиотека загружена. Компилируется без ошибок.
Именно при загрузке в ПЛК ошибка возникает

Значит PLC не поддерживает данные блоки.
Выкладывай проект и тип контроллера

capzap
08.09.2019, 19:37
Библиотека загружена. Компилируется без ошибок.
Именно при загрузке в ПЛК ошибка возникает

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

Smith2007
08.09.2019, 22:18
Данная библиотека работает если поддержана в системе исполнения.
И вот самое интересное, а в эмуляции Вы получили нужный результат или для Вас только результат компиляции имеет значение
Вероятнее всего не поддерживается контроллером. ПЛК110-30М (2013 г.в.). Ни чего не обновлял с момента покупки. Просто работает ежедневно и я стал забывать про него. Появился интерес MQTT клиента подключить, а там работу со строками нужно поддержать. В общем все клиенты MQTT для Codesys 2.3 очень сырые. Отказался от этой идеи.

Вопрос: А может можно как-то совсем снести этот Codesys и использовать стандартный С++? (мне он кажется более привычным и удобным, начиная от IDE)

зы. Есть опыт работы с микроконтроллерами stm32 с RTOS

capzap
08.09.2019, 22:25
Появился интерес MQTT клиента подключить, а там работу со строками нужно поддержать.

эта бибка ничего не несет в себе, чтоб делать на неё упор в работе с протоколом, а последующее предложение про сырость ни чем не обосновано

Smith2007
09.09.2019, 00:55
эта бибка ничего не несет в себе, чтоб делать на неё упор в работе с протоколом, а последующее предложение про сырость ни чем не обосновано
Понятно, что можно обойти эту библиотеку.
Сделал пример для проверки как оно будет работать. После нескольких публикаций ПЛК виснет.
Проект прилагаю. Если есть время и желание, можете посмотреть. Он очень простой.

capzap
09.09.2019, 07:50
Понятно, что можно обойти эту библиотеку.
Сделал пример для проверки как оно будет работать. После нескольких публикаций ПЛК виснет.
Проект прилагаю. Если есть время и желание, можете посмотреть. Он очень простой.

так это не проект, а так, набор символов. Непонятна цель всего этого эксперимента, зачем задачи, зачем держать такое количество библиотек

Smith2007
09.09.2019, 09:32
так это не проект, а так, набор символов. Непонятна цель всего этого эксперимента, зачем задачи, зачем держать такое количество библиотек
Библиотеки от реального проекта остались.
А задачи там всего 2.
Одна собственно клиент MQTT
Вторая это тестирование отправки используя клиента.
Как раз поубирал все лишнее, что бы понять как оно работает.
Цель проста: Проверить как оно работает. Как постит значения в топики. Следующим экспериментом должно быть подписка и прием сообщений, но до него не дошел ибо не смог с зависаниями разобраться. ПЛК просто подвисает на второй отправке

taksony
10.09.2019, 10:16
Добрый день. Есть задача сделать переключение между двумя насосами по времени наработки. Время задается с панели. Я правильно понимаю, что мне нужно создать ф.блок учета наработки, но добавить в него преобразование dword_to_time для введенного с панели значения?

petera
10.09.2019, 12:40
Добрый день. Есть задача сделать переключение между двумя насосами по времени наработки. Время задается с панели. Я правильно понимаю, что мне нужно создать ф.блок учета наработки, но добавить в него преобразование dword_to_time для введенного с панели значения?

Если на панели время вводится в миллисекундах, тогда да, конечно dword_to_time
:rolleyes:

Валенок
10.09.2019, 16:52
Если на панели время вводится в миллисекундах, тогда да, конечно dword_to_time
:rolleyes:
Так 3 знака на точку и в секундах

oldmaster
11.09.2019, 07:13
Добрый день. Мой первый проект. Приточно-вытяжная система вентиляции торговой точки. Не было опыта работы ни с программируемыми реле, ни с твердотельными реле. Просьба проверить схему. Отдельный вопрос по варистору. Какой именно подойдет? Проект на стадии разработки. Вытяжной вентилятор планирую включать параллельно с притоком. 44543

Mike Osokin
11.09.2019, 10:47
Приведённая схема работать не будет т.к 3 входа твердотельных реле соединены последовательно, на каждом входе напряжение будет меняться в пределах 0-3х вольт.
Подберите вместо 3х однофазных, одно трёхфазное реле. Обратите внимание на контроллер для приточной вентиляции ТРМ1033.

petera
11.09.2019, 10:48
Добрый день. Мой первый проект. Приточно-вытяжная система вентиляции торговой точки. Не было опыта работы ни с программируемыми реле, ни с твердотельными реле. Просьба проверить схему. Отдельный вопрос по варистору. Какой именно подойдет? Проект на стадии разработки. Вытяжной вентилятор планирую включать параллельно с притоком. 44543

У ПР аналоговый выход - пассивный, для цепи 4-20 мА нужен внешний источник питания
44561

Нагрузка чисто активная - ТЭН, зачем варисторы?

oldmaster
11.09.2019, 11:23
Приведённая схема работать не будет т.к 3 входа твердотельных реле соединены последовательно, на каждом входе напряжение будет меняться в пределах 0-3х вольт.
Подберите вместо 3х однофазных, одно трёхфазное реле. Обратите внимание на контроллер для приточной вентиляции ТРМ1033.

Не получилось подобрать 3-х фазное с управлением 0-10 В
Если изменить схему на параллельное подключение? 44562

oldmaster
11.09.2019, 11:29
У ПР аналоговый выход - пассивный, для цепи 4-20 мА нужен внешний источник питания
44561

Нагрузка чисто активная - ТЭН, зачем варисторы?

У меня вариант ПР200-220.4.х с двумя выходами 0-10 В. Правильно я понял, что НЕ получу на выходе 0-10 В ?
Нужен дополнительный источник питания 10 В?
Зачем тогда встроенный блок питания?

petera
11.09.2019, 11:36
У меня вариант ПР200-220.4.х с двумя выходами 0-10 В. Правильно я понял, что НЕ получу на выходе 0-10 В ?
Нужен дополнительный источник питания 10 В?
Зачем тогда встроенный блок питания?
Я не посмотрел, что у Вас реле с управлением по напряжению, мои замечания справедливы для реле с управлением 4..20мА(.LA), тогдо можно их входы включать последовательно, как на Вашей схеме.

Mike Osokin
11.09.2019, 11:40
< Если изменить схему на параллельное подключение? >
Тогда будет работать. Попробуйте в ПР200 организовать ШИМ на таймерах. Период ШИМ - 10 секунд, длительность импульсов от 0,1 до 9,9 секунд. На ПР Zelio у меня получалось.

Sulfur
11.09.2019, 12:06
oldmaster

Если изменить схему на параллельное подключение?
Есть нюанс. Выход ПР может не потянуть три ТТР. Т. е. необходимо замерить ток потребления трех параллельно включенных входов ТТР при поданным на них 10 вольт, и сравнить его с разрешенной нагрузкой для выхода ПР.

Данная система не требует ТТР именно с аналоговым управлением. У таких ТТР есть одна неприятная особенность - они создают помеху в сети, что может вызвать проблему у других устройств. Предпочтительнее использовать ТТР с дискретным управлением 3-32VDC и контролем перехода через ноль. Но тут уже особенность ПР - в них нет транзисторного выхода. Однако, если ПР не на гарантии, то выход есть. Я в подобных случаях просто выпаиваю реле из платы, а те контакты, которые идут на обмотку реле подключаю к контактам ПР, где были контакты реле. Далее это все подключается к ТТР (группе ТТР).

Красным показаны изменения.

oldmaster
11.09.2019, 17:33
oldmaster

Есть нюанс. Выход ПР может не потянуть три ТТР. Т. е. необходимо замерить ток потребления трех параллельно включенных входов ТТР при поданным на них 10 вольт, и сравнить его с разрешенной нагрузкой для выхода ПР.

Данная система не требует ТТР именно с аналоговым управлением. У таких ТТР есть одна неприятная особенность - они создают помеху в сети, что может вызвать проблему у других устройств. Предпочтительнее использовать ТТР с дискретным управлением 3-32VDC и контролем перехода через ноль. Но тут уже особенность ПР - в них нет транзисторного выхода. Однако, если ПР не на гарантии, то выход есть. Я в подобных случаях просто выпаиваю реле из платы, а те контакты, которые идут на обмотку реле подключаю к контактам ПР, где были контакты реле. Далее это все подключается к ТТР (группе ТТР).

Красным показаны изменения.

Проверил по документации ТТР, ток в цепи управления 3-5 мА. Встроенный блок питания ПР заявлен на 100 мА. Должно хватить с запасом. Выбрал именно это ТТР т.к. в документации указано, что они как раз подходят для регулировки мощности ТЭН. Больше интересует, что за помехи могут возникнуть в сети, кому они могут мешать и как защититься от них? Спасибо 44566

Sibiryak22rus
12.09.2019, 06:24
подскажите по выбору автомата, нужно запитать:
ПЛК110-60 -2шт. (45ВА*2)
МУ110-32Р -1шт. (25ВА)
МВ110-8И -1шт. (6ВА)
МВ110-8А -4шт. (6ВА*4)
МВ110-8АС -7шт. (8ВА*7)
и того 201 ВА, на сколько понимаю для работы достаточно автомата -1А, не будет ли выбивать автомат при включении вводного автомата?

IVM
12.09.2019, 10:12
подскажите по выбору автомата, нужно запитать:
ПЛК110-60 -2шт. (45ВА*2)
МУ110-32Р -1шт. (25ВА)
МВ110-8И -1шт. (6ВА)
МВ110-8А -4шт. (6ВА*4)
МВ110-8АС -7шт. (8ВА*7)
и того 201 ВА, на сколько понимаю для работы достаточно автомата -1А, не будет ли выбивать автомат при включении вводного автомата?

Ставь на 3 А, не прогадаешь.

Sulfur
12.09.2019, 10:45
oldmaster

Больше интересует, что за помехи могут возникнуть в сети, кому они могут мешать и как защититься от них?
В реле "с контролем перехода через ноль" включение и выключение нагрузки происходит при околонулевом напряжении, т. е. в момент когда синусоида напряжения проходит ноль.
В "аналоговых" реле коммутация нагрузки делается фазовым методом, т. е. момент коммутации может приходиться на любое амплитудное значение синусоиды. Вот именно это и создает импульсную помеху в сеть. Лечится либо установкой дросселей (как минимум), либо специальным фильтром, либо выделенной подачей питания (например с отдельного автомата с подстанции).

IVM
12.09.2019, 12:09
В "аналоговых" реле коммутация нагрузки делается фазовым методом, т. е. момент коммутации может приходиться на любое амплитудное значение синусоиды.

Не любое амплитудное, а любое мгновенное значение синусоиды.

Mike Osokin
12.09.2019, 12:43
Проверил по документации ТТР, ток в цепи управления 3-5 мА. Встроенный блок питания ПР заявлен на 100 мА. Должно хватить с запасом. Выбрал именно это ТТР т.к. в документации указано, что они как раз подходят для регулировки мощности ТЭН. Больше интересует, что за помехи могут возникнуть в сети, кому они могут мешать и как защититься от них? Спасибо
Аналоговый выход не сможет работать на 3 входа ТТР. Он может работать на сопротивление больше 2кОм (см. характеристики аналоговых выходов). Входное сопротивление у Вашего ТТР по паспортным данным 4кОма.
Конечно, можно поставить эмиттерный повторитель на выходе ПР200, можно поискать 3х фазный регулятор мощности со входом 0-10 Вольт, но лучше использовать дискретный выход с ШИМ.
Помехи, возникающие от фазового управления тиристорами могут влиять на показания датчиков температуры и дискретные входы ПР200.
Следует раздельно вести (в разных кабель-каналах) силовые и сигнальные цепи, особенно на длинных трассах.

oldmaster
12.09.2019, 18:15
Аналоговый выход не сможет работать на 3 входа ТТР. Он может работать на сопротивление больше 2кОм (см. характеристики аналоговых выходов). Входное сопротивление у Вашего ТТР по паспортным данным 4кОма.
Конечно, можно поставить эмиттерный повторитель на выходе ПР200, можно поискать 3х фазный регулятор мощности со входом 0-10 Вольт, но лучше использовать дискретный выход с ШИМ.
Помехи, возникающие от фазового управления тиристорами могут влиять на показания датчиков температуры и дискретные входы ПР200.
Следует раздельно вести (в разных кабель-каналах) силовые и сигнальные цепи, особенно на длинных трассах.

Прошу подробнее, почему не сможет. Характеристики аналогового выхода изучил. Указано 2-10 кОм. Если 3 ТТР по 4 кОм соединить параллельно то должно получиться 1,3 кОм? Т.е. нужно еще добавить 1-2 кОм. Или здесь этот расчет сопротивления не работает? Почему?
Моих познаний и опыта сейчас не достаточно для ШИМ варианта. К тому же реле и ТТР заказаны, жду. И у них только релейные дискретные выходы. Аналоговые 0-10 В.
Относительно рекомендаций по прокладке, спасибо, обязательно учту. Могу как вариант использовать металлорукава. Один для датчиков, второй для силового кабеля ТЭН. Он же должен работать как экран? Расстояние от щита до грелки 15-20 метров.

Sulfur
12.09.2019, 21:42
oldmaster
Резистор в цепь не годится, ибо будет работать как делитель напряжения. Т. е. ТТР никогда не выйдет на полную мощность. Оптимальным будут следующие варианты:
1. Использовать еще один аналоговый выход (если он есть). Программно выход регулятор назначить не на один, а на два выхода в параллель. К одному выходу подключить одну ТТР, а к другому два.
3. Собрать самостоятельно эмиттерный повторитель. Схема очень простая, детали стоят копейки, и легко ищется в сети. Единственный маленький недостаток - Uвых будет равно Uвх минус 0.6 вольт. Т. е. потери 6 %. Но в данном случае это не критично.

Mike Osokin
13.09.2019, 11:49
Здравствуйте. Есть проект, в котором используется следующее оборудование:
Контроллер PLC110.30-M v2
Модули ввода: МВ110-32ДН 10шт.
Модули вывода: МУ110-32Р 5шт.
Плата входов реле контроля скорости (РКС) 1шт.
Модули подключены по интерфейсу RS-485, протокол ModBus RTU.
К RS-485-1 подключены 8 модулей ввода и 4 модуля вывода. К RS-485-2 подключены: плата дискретных входов, 2 модуля ввода и 1 модуль вывода.
На втором канале модуль вывода постоянно выдаёт ошибки. Плату входов отключал и убирал из конфигурации - изменений нет.
Пожалуйста, посмотрите проект. Что можно исправить?

Проблема решена настройкой параметров обмена RS-485

Отвечает Валенок:
Модули :
Для всех 32Р/ДН странный параметр rs.dL = 0..2
Для 32Р t.out = 3...10 (выходы упадут если нет связи.

ПЛК :
Про AT% - уже сказано
Минц.ПЛК зачем 15мс ? Начинайте от 1. После посмотрите в статистику

Для всех UMD :
max timeout = 20...30 //если не ответил за 30 - не ответит от слова вообще. Зачем еще ждать ?

Для 32ДН :
polling time = 300 //только потому что - конфигурация.
если какие 32ДН не являются критичными - увеличивать до приемлемого
для критичных - уменьшать по мере прояснения обстановки

Для 32Р :
work mode = both //по времени и изменению
polling time = смело 1000...2000 (если t.out = 0, то polling time можно хоть 5000)
Благодарю за помощь!

Sulfur
13.09.2019, 13:11
Как вариант - программа большая, может банально не хватать времени на опрос. Попробуйте увеличить Polling Time на канале проблемного модуля. Либо поставить в Work mode метод by value cange.
И да, явная адресация в объявлениях переменных - частая причина проблем. Не фэншуйно это. Рекомендую перенести GenAlr, LastAddr1, LastError1, LastAddr2 и LastError2 (и прочие если есть) в конфигурацию ПЛК.

Mike Osokin
14.09.2019, 05:36
Sulfur Спасибо, Ваши замечания учту. Пока возможность экспериментировать ограничена т.к. оборудование (кроме нитки3) находится в эксплуатации.

Aco
15.09.2019, 18:13
Привет.
Я новичок в программировании ПЛК (изучаю FBD). Подскажите, как реализовать программу по включению задвижки после получения определенной последовательности сигналов от кнопок. Например, нажал на кнопку А, а потом на Б. Если кнопку на Б нажать первой, а потом на А, то ничего не должно произойти. Только последовательность А -> Б может подать сигнал на включение задвижки

Aco
15.09.2019, 18:46
Вообще, изначально ТЗ было таким, что для on/off задвижки нужно держать нажатой кнопку А больше 5 секунд, а вторую кнопку Б держать нажатой от одной до трех секунд, при нажатой кнопке А. Включение и выключение должно происходить при последовательности А->Б
Извиняюсь, неправильно объяснил

Rednaxel
15.09.2019, 20:01
Вообще, изначально ТЗ было таким...

Вообще, это не вовсе и не ТЗ. Это уже вариант решения задания, который не раскрывает непосвященному тайну настоящего ТЗ. Не понятно например как поступать если кнопка А так и не была отпущена, а Б нажата на эти 3 сек. и отпущена? Ну и другие ситуации."

Настоящее ТЗ должно выглядит так:
Чтобы открыть люк ракетной шахты двое старших офицеров вахты подводной лодки должны одновременно нажать каждый свою кнопку, при чем первый офицер (старший на вахте) должен нажать эту кнопку первым...

Ну, надеюсь понимаете ;)
Иначе программист наваяет что-то совершенно свое, не подходящее под реальные условия.

Александр N
16.09.2019, 11:17
Добрый день проблемы с зависанием codesys в режиме эмуляции. Проверил контроле проекта - проблемы только по множественному обращению к выходам, но это из-за того используются модули вывода которые управляются word и соответственно битовых выходов по 16. Есть ли еще какие либо причины зависания? Проект во вложении.
Спасибо.

Александр N
16.09.2019, 12:30
Очистить все пробовал, порядок по потоку, goto нет. Проявляется следующим образом, при навигации по программе, после открывания разных фб (как правило 9-10 раз) происходит зависание. Т.Е на входах выходах ???, линии становятся серыми и т.д.

Валенок
16.09.2019, 13:21
а если в этот момент закрыть все ненужные окна ?
и кажется есть неисп. фблоки

Трофимов Артем
16.09.2019, 14:48
Добрый день проблемы с зависанием codesys в режиме эмуляции. Проверил контроле проекта - проблемы только по множественному обращению к выходам, но это из-за того используются модули вывода которые управляются word и соответственно битовых выходов по 16. Есть ли еще какие либо причины зависания? Проект во вложении.
Спасибо.

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

Александр N
16.09.2019, 15:02
Неиспользуемые блоки удалил, в том числе и модуль калибровки (в принципе они не использовались) - результат тот же. А вот после того как в режиме эмуляции стал закрывать неиспользуемые окна зависание пропало.
Т.е. получается что если открыто больше 9 окон codesys зависает. Или есть какое-то объяснение?
Спасибо за поддержку.

Mike Osokin
17.09.2019, 04:44
Т.е. получается что если открыто больше 9 окон codesys зависает. Или есть какое-то объяснение?
Спасибо за поддержку.
Есть ограничение на количество отображаемых переменных. В моём проекте Codesys выдаёт такую ошибку и просит закрыть лишние окна.

bort992
22.09.2019, 18:33
Всем привет. Возникла необходимость в подключении к ПЛК100 для заливки программы, - "И тут, пошли неуважения". Роутер получает приватный IP-адрес 10......, то есть VPN-клииент. В самом роуторе прописан постоянный адрес для ПЛК-100, - 192.168.1.45, а также, этот айпишник прописан в ПЛК - 192.168.1.45. Для данного ПЛК, открыт порт 502, который опрашивает скада без проблем, и не важно с какого региона идет опрос. И так же отрыл порт 1200, но вот здесь и происходит затык. В Gateway менял с TCP на Local, что тоже результата не дало.

PavelGO
22.09.2019, 20:39
Всем привет. Возникла необходимость в подключении к ПЛК100 для заливки программы, - "И тут, пошли неуважения". Роутер получает приватный IP-адрес 10......, то есть VPN-клииент. В самом роуторе прописан постоянный адрес для ПЛК-100, - 192.168.1.45, а также, этот айпишник прописан в ПЛК - 192.168.1.45. Для данного ПЛК, открыт порт 502, который опрашивает скада без проблем, и не важно с какого региона идет опрос. И так же отрыл порт 1200, но вот здесь и происходит затык. В Gateway менял с TCP на Local, что тоже результата не дало.

ICMP открой для внешнего влан на роутере. Без пингов не работает. Хотя где то в реестре должно правиться, не помню где. Еще если обьект ответственный и никого там нет, - не шей удалённо! Может не запуститься при ошибке связи!

Sulfur
23.09.2019, 09:00
Вопрос по среде программирования:
Какое количество вложений подпрограмм допустимо? Например из PLC_PRG вызывается POU, в которой есть вызов другой POU, где так есть вызов POU или FB, и т. д.

Rednaxel
23.09.2019, 11:48
Всем привет. Возникла необходимость в подключении к ПЛК100 для заливки программы, - "И тут, пошли неуважения". Роутер получает приватный IP-адрес 10......,
........
Для данного ПЛК, открыт порт 502, который опрашивает скада без проблем, и не важно с какого региона идет опрос. И так же отрыл порт 1200, но вот здесь и происходит затык. В Gateway менял с TCP на Local, что тоже результата не дало.

Кажется у Вас связь через VPN канал? Если все настроено правильно, нет необходимости пробрасывать какие-либо порты. Естественно никаких фаерволов на VPN канале быть не должно, иначе зачем он тогда?
Проверено в разных вариантах все и так работает.
Может у Вас не прописаны или некорректно прописаны маршруты из одной сети в другую, причем с обоих сторон проверьте: пинги должны туда-сюда бегать без проблем.

bort992
23.09.2019, 11:55
Да, VPN. Открыли все порты в роуторе командой ICMP для ПЛК, в общем, так и не удалось подключить Codesys удаленно.

Rednaxel
23.09.2019, 12:05
Открыли все порты в роуторе командой ICMP для ПЛК...

Что за команда такая? Почему не знаю?
Поскольку ключевое слово здесь роутер, еще раз повторяю: дело в маршрутизации.
Опишите ситуацию подробнее, лучше если схема есть -- каким образом вы связываетесь с ПЛК?

bort992
23.09.2019, 12:38
Клиент-1(Codesys) IP-10.8.0.2 -----СЕРВЕР VPN ----- Клиент-2(ПЛК) IP-роутера: 10.8.0.10 --- ПЛК: 192.168.1.50 (ПОРТЫ открыты: 502, 1200). Проверил в локалке прогай NMAP, порты 502, 1200 открыты. В файерволе ПК 1200 прописал. Скада опрашивает ПЛК по 502 без проблем, и не важно какой адрес будет у этого клиента.

Rednaxel
23.09.2019, 13:05
Клиент-1(Codesys) IP-10.8.0.2 -----СЕРВЕР VPN ----- Клиент-2(ПЛК) IP-роутера: 10.8.0.10 --- ПЛК: 192.168.1.50 (ПОРТЫ открыты: 502, 1200). Проверил в локалке прогай NMAP, порты 502, 1200 открыты. В файерволе ПК 1200 прописал. Скада опрашивает ПЛК по 502 без проблем, и не важно какой адрес будет у этого клиента.

Как я уже сказал, никаких портов пробрасывать не нужно! Вместо этого нужно корректно настроить маршрутизацию.
Информации для этого все еще недостаточно.
Какой внутренний IP адрес ПК где CodeSys?
Какой внутренний IP адрес ПК со Скадой?
Какой адрес роутера, который дает выход в интернет?
VPN канал "поднят" у вас на ПК или на роутере (клиент кто)?
А с той стороны где ПЛК, кто поддерживает VPN канал? сервер кто?

Скорее всего Ваш ПК где CodeSys "не понимает" куда слать пакеты в сеть 192.168.1.0 и вместо чтобы кидать их в VPN шлюз, отправляет их в маршрут по умолчанию, т.е. в интернет, понимаете? Возможно наоборот: VPN сервер на той стороне не знает куда слать ответы от ПЛК. Надеюсь сервером VPN на стороне ПЛК является роутер интернета (шлюз по умолчанию)? Иначе все немного сложнее.
"tracert 192.168.1.50" в командной строке на ПК для понимания ситуации.

До полного прояснения ситуации точнее сказать как делать не могу.

bort992
23.09.2019, 13:06
Просканировал клиента-2 через VPN, NMAP показал, что только открыт 502 порт

Rednaxel
23.09.2019, 13:17
Просканировал клиента-2 через VPN, NMAP показал, что только открыт 502 порт

Забудьте про порты. Разберитесь с маршрутами.
Читайте внимательно мой пост выше.

bort992
23.09.2019, 13:18
Совсем запутался. Есть точки А - В - С. В точках "А" и "В" стоят роуторы с VPN-клиентом на борту. Между этими точками, VPN - сервер, который выдает адреса для: "А" - 10.8.0.2, для "В" - 10.8.0.10. Точка "С" - мобильное приложение со СКАДОЙ, и поднятым VPN - клиентом 10.8.0.20
В точке "А" ПК с IP - 192.168.1.64 с Codesysem на борту. В Codesys прописал адрес для ПЛК - 10.8.0.10

В точке "В" роутер выдает постоянный адрес для ПЛК - 192.168.1.50. Здесь же, будет стоят сервер для СКАДЫ.

Rednaxel
23.09.2019, 15:23
...
В точке "А" ПК с IP - 192.168.1.64 с Codesysem на борту.
...
В точке "В" роутер выдает постоянный адрес для ПЛК - 192.168.1.50.

Вот Вам и ошибка нарисовалась: адрес сети на разных точках должен быть разный, иначе маршрутизация не работает.
В "Иронии судьбы" улица и дом были одинаковые а город разный. А у вас и город одинаковый.

В вашем случае - поменяйте на точке "В" адрес сети с 192.168.1.XX на 192.168.2.XX
Что в точке "С"? То же самое? Тоже меняйте.

Может стоит пригласить профессионального сисадмина? Он за 15 минут все настроит.

Rednaxel
23.09.2019, 15:38
В Codesys прописал адрес для ПЛК - 10.8.0.10
Не-не-не! Адрес ПЛК у Вас какой? Правильно 192.168.1.50. А точнее, после исправления адреса сети (см.выше) будет 192.168.2.50 вот его и прописывайте в CodeSys.
10.8.0.10 - это всего лишь промежуточная точка на маршруте от ПК к ПЛК и обратно и кодесису она вообще по-барабону.
Это должен знать только маршрутизатор, роутер т.е., он специально для этого предназначен и, надеюсь обучен, т.е. в нем должны быть прописаны маршруты из одной сети в другую.

И не забываем в самом ПЛК поменять адрес, если он статический.

bort992
23.09.2019, 17:02
Хорошо, а как быть с тем, что мне нужно зайти на ПЛК с другова ПК, который подключен через модем с поднятым VPN - клиентом?

Rednaxel
23.09.2019, 17:26
Хорошо, а как быть с тем, что мне нужно зайти на ПЛК с другова ПК, который подключен через модем с поднятым VPN - клиентом?

Не совсем понял вопрос: имеете ввиду что когда поменяем адрес сети, вы потеряете доступ? Так его и так нет.
Смысл описанной мной настройки маршрутизации в том, что все связанные ВПН-каналами устройства будут "видеть" друг друга по TCP/IP безо всяких пробросов портов и прочая.

Но, при всех этих манипуляциях проще всего посетить все точки ножками и настроить все на месте.
Варианты удаленной настройки конечно есть, но Вы точно не справитесь, нужно иметь немалый опыт чтобы сделать все удаленно.

bort992
23.09.2019, 20:43
Я не против того, чтобы посетить ножками. Вот объясните мне одно, точка "С" - телефон со Скадой на борту и VPN-клиентом, получает 10.8.0.20. В Скаде нарисовал две кнопки: Wi-Fi (192.168.1.50 - Port 502) и 3G (10.8.0.10 - Port 502), далее эти кнопки привязал к java скрипту, при нажатии на кнопку Wi-Fi - подключение к домашней, при запуске VPN-Klient и нажатии на кнопку 3G сети - подключение из вне. И вся эта конструкция работает как часы.

Rednaxel
23.09.2019, 22:13
Сомневаюсь что дальнейшее пережевывание интересно большинству, поэтому ответил в приват.

JORA102
25.09.2019, 06:56
Подскажите какие блоки нужно использовать для сложения чисел на языке LD
44774

JORA102
25.09.2019, 06:59
Можете подсказать

capzap
25.09.2019, 07:23
Можете подсказать

попробуйте создать ПОУ на языке ST, а потом конвертируйте его в нужный язык

Sulfur
25.09.2019, 10:50
JORA102

для сложения чисел на языке LD
Я в таких случаях делаю FB на ST, в котором помимо других входных переменных обязательно есть булева переменная Enable (например), а так же есть выходная булева переменная Out. Обе переменные должны быть объявлены в VAR первыми в списке, причем по факту внутри FB они могут никак не использоваться. Это нужно для того, что бы при вставке ФБ в цепь LD автоматически подключались вход и выход. На выход Оut этого ФБ нужно повесить локальную булеву переменную, которая будет выполнять роль пустой заглушки. Что бы компилятор не выдавал ошибку.
44781

Sulfur
25.09.2019, 13:18
выбрать элемент с EN?
И что, я могу туда затолкать несколько формул, алгоритмов и работой в том числе с глобальными переменными унутре?

capzap
25.09.2019, 13:51
И что, я могу туда затолкать несколько формул, алгоритмов и работой в том числе с глобальными переменными унутре?

в чем сомнения не пойму?

Sulfur
25.09.2019, 14:28
Я почему-то считал, что "Элемент с EN" только для базовых логических операций типа AND\OR\MOVE и пр, а не для ФБ. В любом случае для сложных алгоритмов придется писать свои ФБ.

Александр N
25.09.2019, 15:23
Добрый день. В системе используется энкодер. Контроллер ПЛК110-60, использую fast encoder. Все хорошо, единственная проблема , может кто-нибудь подскажет как организовать сброс на 0. В определенных точках перемещения объекта необходимо сбрасывать счет для коррекции.
Заранее спасибо.

_Mikhail
25.09.2019, 20:00
Я почему-то считал, что "Элемент с EN" только для базовых логических операций типа AND\OR\MOVE и пр, а не для ФБ. В любом случае для сложных алгоритмов придется писать свои ФБ.

Да, придется писать свой ФБ, т.к. стандартные блоки не подойдут по Вашему заданию.
Если хотите делать в LD, то в одном network - один блок ADD/MUL/...... c EN
выход объявляете промежуточную переменную и используете ее дальше.
решайте сами, что для Вас проще

Rednaxel
25.09.2019, 20:33
Добрый день. В системе используется энкодер. Контроллер ПЛК110-60, использую fast encoder.
Это речь все о том же проекте dso_psk3_dozators.pro? Точнее ПЛК110-60M v2 у Вас, так? Что-то не увидел там прямого управления.

Все хорошо, единственная проблема , может кто-нибудь подскажет как организовать сброс на 0. В определенных точках перемещения объекта необходимо сбрасывать счет для коррекции....
Как обычно, телепаты ушли в отпуск :p поэтому давайте точнее: в каком блоке какой счетчик или таймер нужно сбросить?

Александр N
25.09.2019, 20:46
Да проект тот же, просто то что вы видели - незаконченная версия. Проект немалый и сейчас в процессе разработки.

Александр N
25.09.2019, 20:52
Вообще на мой взгляд, немного странно что такой модуль как fast encoder не имеет функции сброса, по-моему в любых счетных системах необходима точка отсчета. Может все-таки есть какое-нибудь лаконичное решение.

Александр N
25.09.2019, 20:59
По поводу телепатов... fast encoder это системный модуль контроллера, он хорошо считывает данные с энкодера (1024имп/об) и вполне устраивает, просто в начале пути перемещения механизма надо его обнулять.

Sulfur
25.09.2019, 22:08
Александр N


кто-нибудь подскажет как организовать сброс на 0
Штатными средствами Овен - никак.
Варианта два:
1. Делать промежуточную переменную, в которой накапливаются данные с энкодера, и делать сброс её хоть в ноль, хоть в произвольное значение.
2. Искать здесь на форуме информацию о среде HardellaIDE для разаработки своих программ для сопроцессора быстрых входов ПЛК 110-ой серии.

Rednaxel
25.09.2019, 22:21
Вообще на мой взгляд, немного странно что такой модуль как fast encoder не имеет функции сброса, по-моему в любых счетных системах необходима точка отсчета. Может все-таки есть какое-нибудь лаконичное решение.
А через прямое управление не? https://www.youtube.com/watch?v=WfIRyDNOf3k&feature=youtu.be

Sulfur
25.09.2019, 22:29
Rednaxel
Делал я такое. Работало нестабильно, да на скорости могут быть проблемы.
Самописные модули на HardellaIDE работают стабильно уже несколько лет практически круглосуточно и без проблем.

Александр N
26.09.2019, 06:58
Пробовал через прямое управление - в принципе работает, но появились сбои при загрузке в контроллер, хотя компиляция проходила без ошибок. Поэтому как то не хочется.
Скорее всего придется применять промежуточную переменную и как то обыгрывать переход счетчика через старший бит. (счетчик считает до 65535 и переходит в 0.
Кстати не поделитесь более полной информацией по самописным модулям.
Спасибо.

Sulfur
26.09.2019, 11:10
Александр N
Ссылка (https://owen.ru/forum/showthread.php?t=23013&page=52&p=233878#post233878) на мой рабочий проект ABZ-энкодера с обнаружением машинного нуля.
При желании именно внешнего программного сброса можно "развернуть" вход сброса (он у меня на FDI3) вовнутрь, в хост.
В начале той темы найдете ссылки на HardellaIDE.

gudzeale
26.09.2019, 12:02
Всем доброго! С Овеном встретился впервые, немного не понял, скачать программу в Codesys для просмотра и редактирования нельзя?
Это не работает как с Сименсом?... подключился, выгрузил и можно редактировать ...

Rednaxel
26.09.2019, 12:36
Всем доброго! С Овеном встретился впервые, немного не понял, скачать программу в Codesys для просмотра и редактирования нельзя?
Это не работает как с Сименсом?... подключился, выгрузил и можно редактировать ...

Нет, в контроллер загружается откомпилированный машинный код, для редактирования нужно иметь исходный проект в виде файла *.pro
Существует возможность сохранить исходный проект в ПЛК, чтобы потом его считать оттуда - команда Онлайн -> Загрузка исходных текстов но этим редко кто пользуется.

gudzeale
26.09.2019, 12:53
Благодарю! Все ясно и понятно ))

Алексей Васильев
27.09.2019, 11:30
Всем доброго дня. С Codesys столкнулся впервые и у меня возник вопрос по регулировке температуры.Например,мне нужно поддерживать Т-ру трубопровода в пределах 0....+5 , как-бы это сделать с мин. количеством вкл.-выкл.,т.е. включать при 0 и выключать при +5 , ждать пока Т понизится до 0 и все повторять заново. Пробую на ST,заранее спасибо.

petera
27.09.2019, 11:36
Всем доброго дня. С Codesys столкнулся впервые и у меня возник вопрос по регулировке температуры.Например,мне нужно поддерживать Т-ру трубопровода в пределах 0....+5 , как-бы это сделать с мин. количеством вкл.-выкл.,т.е. включать при 0 и выключать при +5 , ждать пока Т понизится до 0 и все повторять заново. Пробую на ST,заранее спасибо.

Если T>= 5 то Выкл.Нагрев
Иначе если T<= 0 то Вкл.Нагрев
Конец Если

Алексей Васильев
27.09.2019, 12:54
То есть IF T>=5 THEN OUT1:= FALSE ELSEIF T<=0 THEN OUT1:= TRUE END_IF?

capzap
27.09.2019, 13:03
То есть IF T>=5 THEN OUT1:= FALSE ELSEIF T<=0 THEN OUT1:= TRUE END_IF?

еще так можно

IF NOT (T > 0 XOR T > 5) THEN
OUT := NOT T > 5;
END_IF;

Алексей Васильев
28.09.2019, 01:12
ооо сколько вариантов-то,спасибо Большое всем

Rednaxel
28.09.2019, 17:19
ооо сколько вариантов-то,спасибо Большое всем
Блин, я тоже впечатлен, если честно :)

Xen
28.09.2019, 22:04
Добрый день! Не тот шрифт и его размер в панелях слева. Для сравнения код на скриншоте - 16й Arial. Лечится?
Codesys 2.3.9.41 русский.
44844

Sulfur
29.09.2019, 20:07
Xen
Проект>Опции>Редактор>Шрифт>Ставим желаемое.

Кстати, спасибо за наводку, ибо работаю на ноуте с фулл-хд дисплеем, все хотел увеличить размер, но как-то руки не доходили.

44857

Rednaxel
29.09.2019, 20:29
Проект>Опции>Редактор>Шрифт>Ставим желаемое.
Это понятно, кстати рекомендую поставить моноширинный Corier,
но Xen спрашивал о панелях СЛЕВА, и это, насколько я знаю в настройках поменять нельзя, нет?

Sulfur
30.09.2019, 13:42
Сорри, мы с агрохолдинга, поэтому постоянно путаю право-лево.
Как вариант - в C:\Program Files (x86)\3S Software\CoDeSys V2.3 есть файлик CoDeSys.ini, можно там поковырять. Либо имеет место быть подмена шрифтов в самой винде.

Xen
30.09.2019, 16:29
В codesys.ini нельзя настроить шрифт интерфейса, по крайней мере нужного пункта я не нашёл.


По крайней мере в версии 2.3.9.37 для меню и диалогов в основном используется шрифт MS Sans Serif, но в части диалоговых окон и меню используется шрифт Helv.
Этот Helv в системе не установлен. У меня на XP в ветке реестра "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]" есть соответствующая подстановка другого шрифта
13584
Так вот, если здесь поменять шрифт на другой, то и в части диалоговых окон будет шрифт отличный от MS Sans Serif.

Если сделать так, то шрифт панелей не поменяется. Думаю, остаётся только догадаться, что это за шрифт, найти его по названию в реестре и заменить на нужный.

petera
30.09.2019, 21:39
В codesys.ini нельзя настроить шрифт интерфейса, по крайней мере нужного пункта я не нашёл.



Если сделать так, то шрифт панелей не поменяется. Думаю, остаётся только догадаться, что это за шрифт, найти его по названию в реестре и заменить на нужный.
Вы реестре подстановку для шрифта Helv делали или просто думаете, что шрифт панели не поменяется?

Сережа
01.10.2019, 02:49
Привет всем, я новичок в Codesys, и знаю что это избитая тема насчет примеров библиотеки Modbus.lib. Я прошел уже посвящение нулевым портом RS-485 и знаю что он должен быть INVALID. Проблема сейчас такая что функции совместно в одной программе не хотят работать, а если я одну функции Modbus вызываю то все проходит без проблем. Основная программа написана на LD, А блоки на ST. Суть программы заключается в том, что по переднему фронту отправляется первая функция а по заднему вторая. Может дело в таймаутах? таймауты для функций выбирал разные 10, 50, 100, 300 ms. Да и еще странность когда отправляю запрос, флаг Complete false, при следущей отправке, true и exception 255(ошибка таймаута). Использовании в ПК Modbus уже более менее освоен, но в плк не могу понять всех тонкостей.

44879 Основная программа
44878 Блок для COM-порта
44880 Первая Modbus-функция
44881 Вторая Modbus-функция

capzap
01.10.2019, 07:36
не позаднему фронту надо отправлять второй раз, а когда ответ придет от первого запроса

Сережа
01.10.2019, 07:45
Ну структура программы такая, что по переднему стробу у меня первая команда сбрасывает сумматор у расходомера, а вторая по заднему останавливает счет. Следовательно за продолжительность импульса я узнаю накопленный объем.

domovenok100
03.10.2019, 08:30
Здравствуйте!
Пытаюсь реализовать команду ПУСК/СТОП для частотника Hitachi L300P. Нужно менять бит COIL по адресу 1.
Подскажите пожалуйста, как в Codesys 2.3 выполнить установку единичного выхода команда modbus 0х05 по Modbus/TCP? Если можно с примером.

Rednaxel
03.10.2019, 11:18
Здравствуйте!
Пытаюсь реализовать команду ПУСК/СТОП для частотника Hitachi L300P. Нужно менять бит COIL по адресу 1.
Подскажите пожалуйста, как в Codesys 2.3 выполнить установку единичного выхода команда modbus 0х05 по Modbus/TCP? Если можно с примером.

Добрый день! Вы что-то упустили в описании задачи: какое именно устройство Вы пытаетесь запрограммировать с помощью CodeSYS?

Xen
03.10.2019, 14:26
Вы реестре подстановку для шрифта Helv делали или просто думаете, что шрифт панели не поменяется?
В реестре поменял, шрифты панелей не изменились. Зато в окнах настроек компонентов визуализации шрифт поменялся.

anipriev
08.10.2019, 09:08
Всем привет. Вопрос. Как при программной остановке выполнения программы сбросить состояние всех переменных и таймеров в исходное состояние? Программа на ST.

Sulfur
08.10.2019, 11:03
Вероятно прописать установку переменных в исходное по событию (например по нажатию кнопки "стоп"). Таймер сбрасывает отсчет в отсутствии сигнала на входе ( вход таймера:=false).

Val64
08.10.2019, 16:18
Добрый день.

var
циклы : (исходная_позиция, отработка, продолжать_дальше, прервать_процесс ...);
t : time;
время_например : time := t#3s;
определися_таки : bool;
-------------
case циклы of
исходная_позиция:
if запустил_процес_на_отработку then
t := time();
циклы := отработка;
end_if
отработка :
if концевик then
циклы := продолжать_дальше;
elsif time() - t > время_например then
циклы := sel(определися_таки, исходная_позиция, прервать_процесс);
end_if
продолжать_дальше:
... ;
прервать_процесс:
... ;
end_case

Кто подскажет как это все организовать в FBD или LD

petera
08.10.2019, 16:52
Добрый день.

var
циклы : (исходная_позиция, отработка, продолжать_дальше, прервать_процесс ...);
t : time;
время_например : time := t#3s;
определися_таки : bool;
-------------
case циклы of
исходная_позиция:
if запустил_процес_на_отработку then
t := time();
циклы := отработка;
end_if
отработка :
if концевик then
циклы := продолжать_дальше;
elsif time() - t > время_например then
циклы := sel(определися_таки, исходная_позиция, прервать_процесс);
end_if
продолжать_дальше:
... ;
прервать_процесс:
... ;
end_case

Кто подскажет как это все организовать в FBD или LD
1. Компилируешь проект
2. дереве проекта ПКМ
45053
3. Выбираешь LD или FBD. Задаешь новое имя
45054

Val64
10.10.2019, 19:00
PROGRAM PLC_PRG
VAR
t : TIME;
timing : TIME := t#10s; (* время_например*)
w : BOOL; (*концевик конца цикла*)
a: BOOL; (*определися_таки*)
in_w: (blue:=1, white:=2, red:=3, hite:=4); (* исходная_позиция*) (* отработка*)(* продолжать_дальше*)(* прервать_процесс*)
Start: BOOL; (* Старт программы*)
i_1: REAL;(* Для прверки переходов*)
i_2: REAL;(* Для прверки переходов*)
i_3: REAL;(* Для прверки переходов*)
i_4: REAL;(* Для прверки переходов*)
END_VAR

CASE in_w OF
blue: (* исходная_позиция*)
IF Start THEN (* Старт программы*)
t := TIME();
in_w := white;
END_IF
i_1:=i_1+1;
white: (* отработка*)
IF w THEN (*концевик конца цикла*)
in_w := red;
ELSIF TIME() - t > timing THEN
i_2:=i_2+1;

in_w := SEL(a, blue, hite);
END_IF
red: (* продолжать_дальше*)
i_3:=i_3+1;
;
hite: (* прервать_процесс*)
i_4:=i_4+1;
;
END_CASE

Вот что получилось, вроде работает.
Может кто поможет, а как привязать эти переменные к физическим вх.\вых.(M,D,X,Y,Q) .
Я пока испытываю в эмуляторе.

Val64
10.10.2019, 21:55
Ну и молодец.

Ну например у тебя есть w : BOOL; (*концевик конца цикла*). Удаляешь ее отсюда и вбиваешь имя w прямо входу. И всё. И забудь про эти гиблые ".(M,D,X,Y,Q)".

А если в панель HMI передавать, то как?

-=Vovka=-
15.10.2019, 10:32
Здравствуйте!
Как из редактора CoDeSys скопировать русский текст, например, в Word?

ASo
15.10.2019, 10:47
Как обычно.
Только установите клавиатуру на русский регистр - КДС не юникодное приложение.

-=Vovka=-
15.10.2019, 11:02
Жесть! Никогда б не додумался... :D
ASo, спасибо!

Вот если бы еще и окно редактора можно было бы на две части делить, как это реализовано в нормальных редакторах... :(

Rednaxel
15.10.2019, 15:15
Жесть! Никогда б не додумался... :D
ASo, спасибо!

Еще в 1С 7.7. из известных мне такие грабли веселые ;)


Вот если бы еще и окно редактора можно было бы на две части делить, как это реализовано в нормальных редакторах... :(
Не понял? Оно и так поделено, даже больше чем на три. В каком месте делить?

45132

rts
15.10.2019, 22:02
Здравствуйте! Есть ПЛК160. Написал счетчик времени, в режиме эмуляции все вроде работает, переменные увеличиваются, сбрасываются. Добавил в конфигурацию ПЛК модбас слейв и три переменные (секунды, минуты, часы) и присвоил их переменным в программе. И в режиме эмуляции программа отказывается работать, на выходе счетчика видно что счет идет, но в переменной, которая подключена к выходу висит 0. Что делаю не так? Подскажите, пожалуйста.

petera
15.10.2019, 22:27
Здравствуйте! Есть ПЛК160. Написал счетчик времени, в режиме эмуляции все вроде работает, переменные увеличиваются, сбрасываются. Добавил в конфигурацию ПЛК модбас слейв и три переменные (секунды, минуты, часы) и присвоил их переменным в программе. И в режиме эмуляции программа отказывается работать, на выходе счетчика видно что счет идет, но в переменной, которая подключена к выходу висит 0. Что делаю не так? Подскажите, пожалуйста.
Сам же захотел этого
Т.к. "присвоил их переменным в программе", то теперь нули из слейва постоянно будут переписывать значения в переменных.
45142

rts
15.10.2019, 23:01
Точно. Он же их читать должен и передавать, а значит переменные слейва это "выходы" ПЛК. Спасибо!

Александр Кузубов
22.10.2019, 11:02
Здравствуйте! Подскажите, пожалуйста, как подключить датчик давления с токовым сигналом 4-20мА к аналоговому входу ПЛК160? а конкретно: ведь нужно же вешать резистор на вход или он встроен в плк? если нужен, то какого номинала? А то в РЭ не нашел упоминания о резисторе.

specialist kipia
22.10.2019, 13:55
Добрый день. Начал пробовать писать программу на ST. При эмуляции возникает какой-то не понятный глюк. Сначала in = 0 out =0;
затем in =1 out=1. Все как бы хорошо но потом при in =1 out продолжает быть равным 1!!
Как это возможно?
45263

specialist kipia
22.10.2019, 14:17
Всё, понял)))КуДеСис коварный))45264

Sulfur
22.10.2019, 14:49
specialist kipia
Вариант 1


IF in
THEN out:=TRUE;
ELSE out:=FALSE;
END_IF;

Вариант 2


out:=in

petera
22.10.2019, 15:41
Здравствуйте! Подскажите, пожалуйста, как подключить датчик давления с токовым сигналом 4-20мА к аналоговому входу ПЛК160? а конкретно: ведь нужно же вешать резистор на вход или он встроен в плк? если нужен, то какого номинала? А то в РЭ не нашел упоминания о резисторе.

Если
в РЭ не нашел упоминания о резисторето с какого перепугу
нужно же вешать резистор на вход

otporuchik
22.10.2019, 16:06
Добрый день.
Подскажите, пожалуйста, как можно перехватить/считать ошибку сети (RS485, Modbus RETU) ПЛК160 и подключенных модулей типа МУ110 и МВ110?
Хотелось бы иметь возможность отслеживать, что какой-то модуль отвалился и сигнализировать об этом.
Видел упоминания о библиотеке PLC160.lib, поставляемой на диске с контроллером. Однако у меня на диске от контроллера такого не нашлось.
Буду признателен за совет.

Andrew_Stranger
22.10.2019, 16:10
Через стандартный конфигуратор45268

otporuchik
22.10.2019, 16:25
Через стандартный конфигуратор45268

Угм.
Спасибо.
Эти адреса - это же адреса модулей/устройств, т.е. модбас слэйв адреса?
Коды ошибок где их можно найти?
Пытаюсь найти какое-то руководство по этому вопросу, но пока мимо.

A.Simonov
22.10.2019, 17:23
Угм.
Спасибо.
Эти адреса - это же адреса модулей/устройств, т.е. модбас слэйв адреса?
Коды ошибок где их можно найти?
Пытаюсь найти какое-то руководство по этому вопросу, но пока мимо.

Добрый день.

Ответы есть в руководстве по программированию, страница 163.
https://owen.ru/uploads/24/rp_plk110.160.pdf

specialist kipia
22.10.2019, 22:27
Не сразу понял, что надо оба состояния описывать))) Спасибо всем за помощь)

otporuchik
23.10.2019, 09:34
Добрый день.

Ответы есть в руководстве по программированию, страница 163.
https://owen.ru/uploads/24/rp_plk110.160.pdf

Да, разобрался, спасибо!