Переставьте у ПЛК ASCII на RTU
Вид для печати
Переставьте у ПЛК ASCII на RTU
Проще было выложить тестовый проект.
Ставьте Модбас RTU,
шаг 32 нужен только для протокола Овен, для Модбас можно сделать хоть подряд, 32 и 33
Регистры надо читать только вместе, Маска бит 32 Bit Input Module (DWORD), записывать Маску бит 32 Bit Output Module,
Все тайминги лучше оставить по умолчанию, зачем Polling Time - 500 поставили? , зачем скорость 9600 ?
функция записи только 0х10, режим поставьте Both
Короче, удалите всё и сделайте заново, меняйте только RTU, скорость, слейв адрес и Both.
Я так понимаю как то так должно выглядеть?
Добрый вечер. Сегодня разбирался с ПЛК. И вроде бы нашел проблему. Обратил внимание, что после сброса питания светодиод "РАБОТА" на ПЛК тускло горит. Перечитал документацию, и понял, что неправильно загружал программу. Изначально делал так:открываю CODESYS, далее ОНЛАЙН > Подключение(выскакивает окно записать программу) > жму ДА > жму СТАРТ. И все заработало....до сброса питания. Сегодня сделал так:открываю CODESYS, далее ОНЛАЙН > Подключение > Создание загрузочного проекта. Теперь все работает. Признаю, изначально не доглядел, где-то подзабыл. Всем ответившим боьшое спасибо.
Спасибо большое за подсказку, все еще не проверил, но вроде бы работает. А еще один вопрос, как правильно присвоить тэг биту из 32bit input module. По адресации не очень удобно писать программу получается, под 200 адресов в уме держать.
Пытался сделать так, но выдает ошибку 4024.
Скрытый текст:
Пытался сделать по мануалу, не помогло.
Скрытый текст:
Потому что вы на вход присваиваете переменную IN.0 := KSM7_1;, а надо в переменную присваивать вход KSM7_1:=IN.0; это распаковка из Маски бит.
IN : DWORD; - объявлять не надо, если имя IN дано 32bit input module.
Адресацию AT%QW.... вообще не надо использовать, достаточно дать имя.
А пример у вас для выхода, там наоборот, на запись собираются биты. Это упаковка бит в Маску.
про work mode = both
Имеет смысл для устройств "чисто вывода" при наличии на них контроля связи с влиянием на выходы
Для МУ контроль связи это t.out со значением <> 0. Из практики норм 3...6 (сек) (Если 0 - то в both смысла нет)
При сопряжении такого МУ с work mode = both, polling time имеет смысл от 1000 мс (и выше)
Для МВ контроль связи бессмыслен, разве что на его диодик "связь" посмотреть
work mode = both с polling time 100 - неадекват всегда, т.к. выродился в work mode = poll time
Для МУ..МВ/RTU/115200 max timeout >30 - неадекват всегда. Нет ответа через 30 мс - не будет никогда.
Добрый день! Вопрос по синтаксису. Можно присваивать тип переменной таким образомЖ
Var_1,Var_2,Var_n:BOOL;
Кодесис не ругается, но вот можно так делать?
Да, это переменная из конфига, добавил для пробы, забыл удалить.
Да, немного неправильно написал, но и наоборот перед этим пробовал, компилятор все равно ругается.
Сильно не ругайтесь, просто ну не привык я к овену, избалован всякими Сименсами, Шнайдерами и Дельтами. Там присвоение тэгов, да и вообще первоначальная настройка намного проще.
Переделал, все равно на меня ругается компилятор))
Скрытый текст:
приложите скрин ВСЕЙ области программы. вместе с верхней частью, где идёт объявление перменных, и нижней, где идёт собственно сам текст.
ну как-то странно тогда всё это выглядит :DЦитата:
избалован всякими Сименсами, Шнайдерами и Дельтами.
вы реально не догоняете, что вы сделали? :D
вам сегодня уже писали про это
Это должен быть текст программы или ФБ, вы же написали текст программы в объявлении глобальных переменных.
Вам реально надо посмотреть обучающие видео https://www.youtube.com/watch?v=eSTm...l7GCJi0DQeV5qx
Я понял, это получается можно присвоить только программно, я надеялся можно как то через глобальные переменные объявить.
В сименсе или шнайдере, мне было достаточно в конфиге добавить необходимые блоки расширения и задать тэги входов выходов. И мне остается писать программу. Не нужно было искать какой регистр считывать, какие настройки связи с модулями устанавливать. В Овене лично мне посложнее.
Забыл сказать спасибо всем за подсказки и наставление на путь истинный)
И протоколы там внезапно без настроек связи
Ну не всем и не всегда необходима связь, мне в 99% случаев необходим шкаф который работает обособленно, а когда необходимо было, на том же шнайдере я использовал Ethernet, с минимальным количеством настроек.
а здесь это чем отличается?Цитата:
в конфиге добавить необходимые блоки расширения и задать тэги входов выходов.
те же яйца, только в профиль
в ОВЕНе даже проще - перменная IN сразу глобальная, один раз ввели имя в конфиге и всё, и не надо ничего объявлять специально
и - не надо задавать теги отдельно, в тексте программы идёт прямое обращение к нужному входу или выходу и всё.
Если бы вы не занимались тупой "перекладкой" глобальной переменной в "Имя_переменная", то вообще было бы ещё проще
Так и в других контроллерах она сразу глобальная. А здесь переменная IN это 32 входа, а у меня таких от IN1 до IN4. Мне лично было бы удобнее, если я мог каждому входу сразу присвоить необходимое имя, что бы в момент написания программы, не отвлекаться на поиск по схеме на IN1.15 или на IN2.27 у меня сидит определенный датчик, а так я сразу дал ему имя и меня ничего не отвлекает.
Простите заранее, все таки наверное туплю, но я жутко не люблю возиться с Овеном.
и что, что 32? у меня сейчас в общей сумме 25 таких "IN" и десяток OutЦитата:
А здесь переменная IN это 32 входа, а у меня таких от IN1 до IN4.
нравится вам Имя_нарицательное, ну работайте с ним, вы же сами сказали
в ОВЕНе всё то же самое, только "задать теги входов/выходов" как "Имя_нарицательное" здесь реализовано через присвоение в области VAR, что в общем-то логично - хочешь работай напрямую, хочешь работай с Имя_переменнаяЦитата:
мне было достаточно в конфиге добавить необходимые блоки расширения и задать тэги входов выходов.
забили в VAR присвоение Имя_переменная = IN_номер и вас ничего не отвлекаетЦитата:
если я мог каждому входу сразу присвоить необходимое имя, что бы в момент написания программы, не отвлекаться на поиск по схеме на IN1.15 или на IN2.27 у меня сидит определенный датчик, а так я сразу дал ему имя и меня ничего не отвлекает.
вы просто никак не догоните, что в КДС (а не у ОВЕНа, он-то здесь малость вообще не при делах, что дали с тем и работает)Цитата:
Просто получается лишнее действие надо выполнять.
эта процедура "присвоения Имени" условно может быть выполнена в 2 этапа - объявление Глобальной Переменной в конфиге, и присвоения Имя_переменная=Глобальная.Вход101 в области VAR
вот и всё
ой ну так или иначе мы все ведём какие-то списки входов/выходов, модулей, адресов, регистров и так далее, как удобнее работать, поэтому говорить что в Шнайдере или там где-то ещё прям вот совсем не надо ничего делать - ну вот не надо. Везде надо вести документацию, не хотите на схеме ничего писать, всё равно где-то что-то писать будет надо - на тот же аналог надо писать диапазон, какие-то уставки и прочееЦитата:
поиск по схеме на IN1.15 или на IN2.27 у меня сидит определенный датчик
и когда у вас триста четыреста входов выходов, вы так или иначе не запомните все Имя_переменная, даже если вы ас по системам кодификации переменных и всё равно полезете в какой-то "список", который у вас где-то будет "лежать"
Если тебе удобно длинное чтиво - вот тебе моя статья о том, что ты сейчас делаешь: https://cs-cs.net/technologii-testir...matikoy-na-plk
Тебе нужен заголовок 4 (про IO сигналы). То, о чём ты спрашиваешь, я делаю во всех своих проектах.
Но, к сожалению, да - придётся делать руками: объявить много переменных на разные датчики и руками назначать их через битовые маски. Но один раз за всю программу.
В моей статье есть куча скриншотов и всё-всё описано.
Я даже так же делаю и с выходами, чтобы иметь глобальный сигнал "Включить всё" для проверки всех реле и блоков питания.
В общем-то при помощи нехитрых трюков можно и биты поименовать
Вложение 81817
Ну на 210 модули сделали же таргеты, да и ABB лет 15 назад настроил CoDeSys под себя, на PM571 нужно было только скачать с их сайта КДС и там по умолчанию стояли все таргеты и библиотеки.
Спасибо, почитал, во многом наши мысли совпадают.
А можно поинтересоваться как?))
Ладно, контроллер и блоки расширения побеждены, программа пишется, даже панель почти побеждена. Вопрос как раз по связи с панелью СП310.
Имеется много битовых сигналов, они работают штатно. А вот передача данных с цифрового ввода не работает, хотя вроде бы все сделал по инструкции. Даже в комментариях номера прописал, что бы не запутаться.
Скрытый текст:
Настройки цифрового ввода панели.
Скрытый текст:
Где я опять косячу? Ткните носом пожалуйста.
Регистр это 2 буля, тк буль это байт. Даже надпись что 8битс есть
Зато сименсы, шнайдеры...
Первый же пример на сайте Овен для ПЛК63-73, это вывод на экране ЖКИ https://owen.ru/product/codesys_v2/example_program
Доброе утро! Вопрос по синтаксису и не только.Необходимо передать СП310 время отработки таймера ТОН.
обявляю тай мер: TON_1:TON;
загружаю : TON_1(IN:=Var_1 , PT:=T#10S , Q=> , ET=> );
Таймер работает и к нему вопросов нет. Создаю переменную для трансляции времени таймера в панель : V310_TON_1_DISPLEI:BYTE;
Терерь настраиваю в ресурсах ПЛК регистр вывода: Вложение 81934, Вложение 81935
Делаю настройку цифроого дисплея в панеле : Вложение 81936 , Вложение 81937
В ПЛК добавляю преобразования :
V310_TON_1_DISPLEI:=TIME_TO_BYTE (TON_1.ET);
И не работает. Никогда этого не делал вот и прошу меня поправить. Спасибо.
Регистр input модуле
“настраиваю.. . регистр вывода... "
А что с ним не так?
А, надо OUTPUT? сейчас исправлю
Задам тупые вопросы:
1. Почему время в байты? Обычное TIME - это DWORD, который хранит число МиллиСекунд. В один байт оно не влезет.
Может быть, тебе стоит поделить время до какого-то более крупного значения.
Например, можно так:
* TIME_TO_DWORD(TON_1.ET) / 1000 = Секунды
* TIME_TO_DWORD(TON_1.ET) / (1000 * 60) = Минуты
2. Modbus передаёт WORD. Поэтому полученный результат надо явно перевести в тип WORD
DWORD_TO_WORD(TIME_TO_DWORD(TON_1.ET) / 1000)
3. Судя по скриншотам конфигурации ПЛК ты даёшь команду ЧТЕНИЯ из панели (потому что Input Module - это прочитать ИЗ чего-то в ПЛК).
Если панель Slave - то тебе нужен наоборот: Register Output Module.
4. И ещё не забудь, что иногда важен порядок регистров или байт.