скрин:Вложение 5706
проект: Вложение 5707
И что означает сообщение "1PLC STARTED"
Где можно смотерть расшифровку системных сообщений и ошибок?
Вид для печати
скрин:Вложение 5706
проект: Вложение 5707
И что означает сообщение "1PLC STARTED"
Где можно смотерть расшифровку системных сообщений и ошибок?
Включение ПЛК (но не запуск программы).Цитата:
что означает сообщение "1PLC STARTED"
Ошибок в конфигурации у вас я не нашёл.
Доброго всем суток времени.
Вот хотел поинтересоваться в правильном ли я направлении двигаюсь. дабы изучать ПЛК стал только пару недель назад. В электротехнике не шарю, скажу сразу =) но общее представление имею. Изучил основу CoDeSys (но блоки пока не все разобрал, только основные)
На новой работе дали задание изучить область Программируемых логических контроллеров для внедрения в Автоматическую линию контактной сварки. ПЛК будет выполнять роль РКС (регулятор контактной сварки).
Приглянулся нам ОВЕН ПЛК160
Программировать будем в CoDeSys v2.3.
Использую пока FBD, дабы более наглядный язык для новичка незнающего электротехнику
Таргет-файл использую 3S CoDeSes SP RTE с "виртуальным устройством ПЛК"(если можно так сказать, другими словами незнаю как назвать) OEMs:CoDeSys SP RTE Realtime Runtime System For Windows NT/2000/XP, т.к. для Таргет-файла PLC160 "виртуального ПЛК-симулятора" не нашел.
Итог:
•ПЛК (симулятор) - OEM:CoDeSys SP RTE Realtime Runtime System For Windows NT/2000/XP
•Среда - CoDeSys v2.3.
•Язык - FBD
•Таргет-файл - 3S CoDeSes SP RTE
Набросал такую вот программку для подачи сигнала с одного входа "VarBOOL1" на 4 выхода "VarQ1,VarQ2,VarQ3,VarQ4" поочередно ("беглый огонь"), т.е. после подачи сигнала (TRUE) на вход на каждый выход подается секундный импульс поочередно (сначала загарается/гаснет VarQ1 на 1 сек, потом VarQ2 на 1 сек и т.д.) и все это заключено в бесконечный цикл (VarQ4 := VarBOOL1). Цикл тут для наглядности примера, в реале удалю. Все работает как часы.
http://www.cyberforum.ru/attachment....p;d=1331726318
http://www.cyberforum.ru/attachment....4&d=1331726318
2 вопроса:
•Будет ли это работать именно так как задумано (с одного входа на 4 выхода) при подключении ОВЕН ПЛК 160, конечно используя таргет-файл PLC160?
•Существуют ли "виртуальные ПЛК-симуляторы" различных моделей (например ПЛК 160) или они существенно ни чем не отличаются от предложенного 3S CoDeSes SP RTE поэтому и не были созданы?
если вам "симулятор" нужен только для отладки программы, то ставьте таргет для плк, а в кодесисе "онлайн-режим эмуляции"
Скорее всего будет, но я бы не смог спокойно спать, увидев подобный код на объекте, т.к. вы полагаетесь на то, что таймеры работают идеально точно и остаются синхронизированными друг с другом. На всякий случай я бы сделал по крайней мере так: http://images.devs-on.net/Image/pzmy...ysUntitled.pngЦитата:
Будет ли это работать именно так как задумано (с одного входа на 4 выхода) при подключении ОВЕН ПЛК 160, конечно используя таргет-файл PLC160?
И на ST, как правило, лаконичнее получается:Так что рекомендую учить именно его.Код:i := TIME_TO_DWORD(TIME()) / 1000 MOD 4;
L1 := i = 0;
L2 := i = 1;
L3 := i = 2;
L4 := i = 3;
oops Забыл про разрешающий вход.
А так нагляднее
Попробуйте только L3 задержать на 3с :)
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:98px; overflow:auto"><div dir="ltr" style="text-align:left;">i := TIME_TO_DWORD(TIME()) / 1000 MOD 4;
L1 := i = 0;
L2 := i = 1;
L3 := i = 2;
L4 := i = 3;</div></pre>
Подскажите пожалуйста, как работает TIME_TO_DWORD(TIME())?
Какую переменную получает DIV от TIME_TO_DWORD(TIME()) в варианте с FBD?
Справочник CoDeSys дает не полное описание "TIME_TO/TIME_OF_DAY преобразования" :(
В данном примере хватит на сколько угодно, т.к. переполнение идёт через кратную четырём величину.Цитата:
хватит примерно на 49 суток
А по поводу 2-го вопроса:
•Какую переменную получает DIV от TIME_TO_DWORD(TIME()) в варианте с FBD конкретно в данном случае? Чтобы до конца понять.
В этом примере:
i := TIME_TO_DWORD(TIME()) / 1000 MOD 4;
(*1000 должна же делиться на конкретную переменную*)
Простите конешно если задаю глупые воросы, но спросить не у кого :confused:
У него в новой теме все условия для лампочек поменялись.
И там тоже можно на ST в четыре строки уложить :). Но на фига козе баян после каждого изменения хотелок.
см. пост #616
день добрый,форумяне!
скачал из раздела "Библиотеки для контроллеров ОВЕН ПЛК110/160 (Навигатор ПЛК110/160 версия 6)"
библиотеку ModBus.lib - но в описании на эту библиотеку написано:
Библиотека предназначена для работы (чтение/запись) с параметрами устройств через последовательный интерфейс ПЛК 63 стандартного протокола Mobdus.
Возможно так же применение данной библиотеки для других приборов на основе CoDeSys.
так пригодна эта библиотека именно на ПЛК-110/160?
как запрограммировать на языке st кнопку пуска с самофиксацией file:///F:/%D0%A1%D0%A5%D0%95%D0%9C%D0%90%20%D0%9B%D0%94.jpg
Пуск:=Пуск OR Нажато
Что за кнопка пуска такая, которая ST поддерживает? :) А если серьёзно, скажите хоть, что там на входе. И картинку вашу тут не увидят, т.к. её надо было прикреплять к сообщению, а не вставлять локальный путь к ней прямо в текст.А отключать как?Цитата:
Пуск:=Пуск OR Нажато
[IMG]file:///F:/%D0%A1%D0%A5%D0%95%D0%9C%D0%90%20%D0%9B%D0%94.jpg[/IMG]
КАК КАРТИНКУ ЭТУ ПИКРЕПЛЯТЬ
Вложение 5762 ЕСЛИ МОЖНО ТО ПЕРЕЧИСЛИТЕ ПОЖАЛУЙСТА СПИСОК ЛИТЕРАТУРЫ ПО ПРОРАММИРОВАНИЮ НА ST
:) я пользуюсь этим http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf
спасибо!!!
Здравствуйте! Подскажите пожалуйста Модбас слейв TCP передает только десять переменных в сеть, в чем проблема, как увеличить их колличество? Может адреса регистров не могу словить? ПЛК100-24Р-М.
ПЛК 100 собирает данные по Овен RS485 с 12 ТРМ202 данные, обрабатывает их и в формате Byte и Word через Модбас Слейв TCP/IP передает их скаде Трейс Моуд, скада видит только десять первых регистров, остальные упорно игнорирует, пробовал разные адреса..., только десять первых переменных берет, вне зависимости Byte или Word, может я че не так конфигурирую?
Трейс Моуд читает адреса регистров в 0хFF формате.
как поменять время и дату в ПЛК 150?
Подскажите, каким образом считать время в контроллере в формате дата [число, месяц, год] время [часы, минуты, секунды], т.е. считать из программы
Воспользуйтесь функциональным блоком CurTimeEx из библиотеки SysLibTime.lib. Удобно делать с библиотекой SysLibMem.lib:Имейте в виду: часы на овеновских ПЛК идут как пьяные. Они легко отстают на минуту за сутки и постоянно то ускоряются, то замедляются с периодичностью в 5-6 секунд. Если требуется равномерный источник времени для процесса, используйте функцию TIME().Код:VAR
timedate: SystemTimeDate;
systime: SysTime64;
GetTime: CurTimeEx;
END_VAR
(* Предварительно обнуляем структуры, как того требует CurTimeEx *)
SysMemSet(ADR(systime), 0, SIZEOF(systime));
SysMemSet(ADR(timedate), 0, SIZEOF(timedate));
GetTime(SystemTime := systime, TimeDate := timedate);
Yegor, можете привести пример с использованием функции Time? т.к. требуется источник точного времени.
TIME() выдаёт не календарное время, а время с момента запуска. Насколько я понимаю, это не то. Как бы там ни было, вот пример:Совмещением TIME() и CurTimeEx можно добиться равномерности также и календарного времени, но точности всё равно не будет, т.к. часы безнадёжно отстают и забегают во время простоя. Остаётся надеяться, что «овны» займутся этой проблемой.Код:VAR
uptime: TIME;
END_VAR
uptime := TIME();
Да.Цитата:
и в пустом проекте
1000.Цитата:
максимальное время цикла
Попробовал 200, 500 и 1000. Сначала выглядит будто ок, но потом всё равно перепрыгивает. В общем, та же фигня.Цитата:
пробовали Вы воспользоваться многозадачностью и считать время в отдельной задаче с фиксированным периодом?
Да и какое значение имеют условия исполнения, если при отключенном питании часы всё равно тупят? Я выключаю контроллер в 17:00 с синхронизированными по компу часами, а на утро к 8:00 обнаруживаю 30-секундное отставание. По праздникам и выходным больше минуты выходит. И в течение дня значительное отклонение набирается.
При использовании функц.блока CurTimeEx, обращение к времени происходит один раз, потом значения времени не меняются, в документации ничего вразумительного найти не нашел...
Если использовать
то при компиляции выдает "вызвать можно только экземпляр функционального блока" ошибка 4267PHP код:VAR
timedate: SystemTimeDate;
systime: SysTime64;
GetTime: CurTimeEx;
END_VAR
(* Предварительно обнуляем структуры, как того требует CurTimeEx *)
SysMemSet(ADR(systime), 0, SIZEOF(systime));
SysMemSet(ADR(timedate), 0, SIZEOF(timedate));
GetTime(SystemTime := systime, TimeDate := timedate);
Структуры надо обнулять прежде чем передавать их в CurTimeEx. Иначе вы не запрашиваете время, а устанавливаете его.Цитата:
При использовании функц.блока CurTimeEx, обращение к времени происходит один раз, потом значения времени не меняются, в документации ничего вразумительного найти не нашел.
Специально скопировал и вставил прямо этот код — он компилируется и работает. Возможно, у вас там какой-то конфликт имён, например, уже существует функция GetTime. Можете показать свой проект, и мы разберёмся, в чём дело.Цитата:
при компиляции выдает "вызвать можно только экземпляр функционального блока" ошибка 4267
Yegor
вот проект Вложение 5795
в программе "vremi"
Спасибо заранее!
Добавьте в проект SysLibMem.lib, о которой я говорил ранее, и уберите вот это:Код:SysMemSet: DATE;
SysLibMem.lib добавлена
убрал,Код:SysMemSet: DATE;
при компиляции все равно надо указать индентификатор SysMemSet.
не получилось:(