Таргет последний 3.3 для ПЛК110 60 М02, проект делался под ПЛК110 60 М02 изначально и в этом смысле ничего не менялось.
Вид для печати
[QUOTE=kondor3000;411644]Может был сбой или при первой установке программы или забыли поставить новый таргет. А проект пересохранили.
Попробуйте очистить всё, компилировать всё. Или выложите проект для проверки.
В таких случаях нужно иметь резервную копию
Вообщем с ПК где проект открывался без проблем подключился к ПЛК и залил исходник, далее проблемным ноутом прочитал исходник из плк и все сразу похорошело, причем проблемная копия тоже стала открываться на проблемном ноуте без проблем. Но что это было так и не понял.
Здравствуйте, интересует следующий вопрос - на объектах стоят контроллеры плк-100, которые собирают информацию от счётчика количества жидкости по 8-му дискретному входу. Данные контроллеры передают информацию по 485 выходу через модем на телемеханику и являются 2013 года выпуска. Много лет подряд когда снимали счётчики количества жидкости, то питание данного контроллера отключали по причине того, чтобы при дальнейшем подключении счётчика количества жидкости не закоротили концы 24 вольта. Вопрос в следующем - прошло 10 лет с момента выпуска и эксплуаиации этого контроллера, не слетит ли программа спустя 10 лет и не придётся ли искать новую программу для заливки, а возможно и производить смену аккумулятора или в целом контроллер на аналогичный? Или же можно не беспокоиться и отключать питание данного контроллера и в дальнейшем для безопасности?
Добрый день.
Подскажете, пожалуйста, кто знает, требуется ли перезагрузка ПЛК при загрузке нового файла local_addres.dat для применения новых сетевых настроек? Или достаточно залить новый файл?
Требуется!
Всем привет!
Никто не подскажет как переменную типа REAL преобразовать в строку с форматированием?
Необходимо вывести REAL записать в строку в формате например 7.5e+002
У меня есть переменная типа REAL. Я вывожу эту переменную на панель оператора. В панели оператора нет формата типа 7.5e+002 (нет такого формата вывода), а мне нужно именно в таком формате показывать эту переменную на панели. Вот подумал, что можно преобразовать в строку с форматированием типа 7.5e+002.
Если переменной REAL задать значение 0,01 и потом преобразовать в строку, то получиться '1.e-002' и передать на панель эту строку и все норм. Но если значение будет равно 750, то строка тоже будет '750', а мне надо чтобы было 7.5e+002
Значит ли это, что:
Код:strVal := REAL_TO_STRING(750/1000); // strVal := '7.5e-001'?
exp := STRING_TO_INT(RIGHT(strVal, 4)) + 3; // exp := 2
IF exp < 0 THEN
sign := '-'
exp := -exp;
ELSE
sign := '+' // sign := '+'
END-IF
strVal := LEFT(strVal, LEN(strVal) - 4) + sign + RIGHT('00' + INT_TO_STRING(exp), 3); // strVal := '7.5e+002'
Доброго дня!
Есть ПЛК160 (Codesys 2.3). По модбас опрашивает другие модули (овен и не овен). Пришел момент "свалить все в одну кучу". Условно, есть у нас где-то там модуль 16Р, у которого на 1 выходе сидит привод, коий можно ворочать в положении вкл/выкл. На отладке управление было простое: WS20_21.Ai[1] присваиваем то, либо иное значение. Дошло дело до написания управления и хотелось бы сделать некий общий список устройств по всей системе с более интуитивным кодом, например MV201.close (название крана на схеме, который и сидит на первом выходе 16P и необходимое действие). Вопрос (после смеси паскаля с си, немножко луа и пайтона уже поплыл в синтаксисе): в какой форме правильно объявить все сетевые переменные (устройства на входах) и добавить к ним действия? Думал, что через универсальную функцию, да что-то по документации не срастается. Вроде как нельзя просто взять и написать FUNCTION (*название устройства с последующем указанием в коде где оно есть*, *че делать с ним*) ввиду проблем с глобальными переменными. Спасибо!
А к модулю то как подключаетесь? Через конфигурацию или библиотеки?
Easy_Enemy Так не принято. Но если очень хочется - то можно оформить какие-то управляторы и элементы в виде фунциональных блоков. А к ним добавить Действия. Тогда можно вызывать действия в виде "MyFB.Close".
Но где-то потом всё равно надо будет забрать из FB обычные данные и обычным способом передать их на модули IO.
Фигушки =) В терминах CodeSys как раз FB - это чистый код и есть. А попытки из него сделать ООП - это дичь =)
Ну, образно, если хочется - то ты можешь считать что FB - это классы, которые имеют несколько экземпляров и действия (методы без аргументов).
ПЛК - это ни фига не СИ, и не похож на виндовские языки программирования.
Я не сильно понял, в чём затруднение, но я как-бы и не "гуру чистого кода", но можно сделать например так:
создать структуру "VALVE" с переменными "close" и "open" (ну и другими полями если нужно)
Добавить в программу переменную типа "VALVE" с названием "MV201", обращаться внутри программы по "MV201.close"("MV201.ореn").
Отдельно где-то потом присваивать выходной переменной (можно в виде MODULE.IN.b, где MODULE - экземпляр модуля вывода, IN- вход модуля (битовая маска выходов), и b - номер бита (выхода)) нужное поле структуры "VALVE"
Добрый день! Подскажите пожалуйста в чем может быть дело. Есть два ПЛК110-(220/24)-30.М, заливаю программу(не мной написанную) на 190 кб(есть предупреждения о несоответствии типов UINT /INT) - раз в полсекунды мигает светодиод "Работа"(у обоих). В инструкции что то про сбой в ОС ПЛК. Любая другая прога, в частности простейший Ген(BLINK), вполне себе четко отрабатывает и длительное время(тоже на обоих). Предположу, что виновата программа. Может кто сталкивался с подобным? Спасибо
Программа во вложении
Какая ужасная. На будущее:
1. В дереве POU можно создавать папки и подпапки. Элементы программы надо разложить по ним.
2. В коде нужно делать комментарии.
3. Переменные надо называть понятными именами. Все. Включая и всякие tp1, tp2 и так далее.
4. Некоторые вещи, где пакетно что-то обрабатывается, нужно писать на ST в цикле и массивах, а не через CFC.
Первое, что бросается в глаза, во всех блоках на языке CFC не правильный порядок работы элементов,
надо правой кнопкой мыши по холсту выставить Порядок/ В соответствии с потоком данных.
Второе, не подключены 2 входа в блоках программы.
Третье, в двух местах надо заменить тип INT на UINT и наоборот.
А так программа компилируется, значит явных ошибок нет, нужна отладка программы вами или автором.
Да, ещё несколько блоков не работают, (не вызваны в программе), в дереве выделены серым цветом (может так и задумано автором).
Сделал всё, что написал, в предыдущем посте.
Запустил программу в эмуляции, в программе включил Имитатор, отработали 4 ПЧ, 4 насоса, 4 RGB подсветки, Вложение 68970
Прога проработала 1 час без проблем и 7 шагов. Но в ней не хватает 2 визуализаций и частично не подключены блоки
Если и есть проблемы, то в связи с панелью, ПЧ или модулями ВВ, возможны мелкие недочёты, но в целом прога рабочая. Вложение 68972
Здравствуйте, вот такие 2 ошибки не подскажите, как решить
Нельзя у переменной BOOL найти какие-то разряды (in_v.0 - in_v.32)
Поменяй тип на DWORD
Вложение 69174
Здравствуйте. Помогите пожалуйста понять теорию получения данных в ПЛК110 от МВ110-8АС.
В документации читаю что каждый вход на МВ рассматривается как отдельное устройство. Но тут же на форуме читаю как получить за один запрос данные по всем входам МВ. В какой форме приходит ответ в ПЛК от 8 датчиков 4..20мА? Например добавляю в UMD два элемента String input по 24 регистра каждый, как в примере у condor3000. Понимаю что в каждый стринг поступит 48 байт единичек и нулей. Как мне понять где лежит информация по каждому датчику и сколько байт она будет содержать?
Для начала скачайте руководство МВ110-8АС и посмотрите адреса регистров, они тут совершенно другие, соответственно и String input тут будет с другим числом байт и другим начальным адресом.
https://owen.ru/product/moduli_analo...n_and_software
Теория по работе со String тут https://owen.ru/forum/showthread.php...l=1#post244022
Например адрес Str14 будет 256, соответственно число в Str14[0]= числу в регистре 256 ( w1:=w_1^[0]; ) и т. д.
senkos В начале МОЕЙ темы, на которую все ссылаются с примером от kondor3000, лежит готовый проект ПЛК с примером и подробными комментариями.
Предполагаю мне данную таблицу нужно смотреть, но как разобраться в ней.Вложение 69238
Спасибо вам, попробую разобраться и понять суть.
Но все же не понятно в этой таблице какие регистры использовать мне для чтения, например iRD - 0x100....0x107, iRDt - 0x108....0x117, Read - 0x120....0x137
Если вы видите адрес типа 0х100 (измеренное целое значение 1 канала, без смещения), то это адрес в HEX, открываете калькулятор в режиме программист набираете 100 в HEX,
переводите в DEC, получаете 256, десятичный адрес регистра, в котором лежит значение 1 канала.
Например адрес Str14 будет 256, соответственно число в Str14[0]= числу в регистре 256 ( w1:=w_1^[0]; ) и т. д.
Например вы получили значение 245, смещение вы задали 1 знак, делите 245 на 10, получаете температуру 24,5 градуса.
(0х118) 280 адрес - Статус 1 канала
288 адрес (0х120) - значение 1 канала Float ( 2 регистра, адреса 288 и 289), после перестановки регистров, получаете сразу температуру например 24,512856 градуса
Благодарю вас за помощь в понимании!
Правильно ли я понял, что если мне не обязательны большие и точные данные float, то я могу обойтись двумя байтами с командой iRD, где в регистре 0х100 будут лежать данные по первому каналу. Задав смещение точки 1, получу десятичную часть, соответственно потом разделив полученное значение на 10.
String input в данном случае будет один с начальным адресом 256 и количеством регистров 8 для получения данных с восьми каналов.
Или садись, два. Учи дальше! :)
Дополню понимание темы:
Чтобы мне получить "Статус результата" + "Данные" + "Смещение" в ответе, создаю два String input. В первый String помещаю Данные (0х100...0х107) + Статус (0х118....0х11F), то есть 256 начальный регистр и всего 32 регистра из которых 16 (0х108...0х117) регистров будут мне не нужны. Во второй String помещаю Смещение 8 (0х20...0х27) регистров.