PDA

Просмотр полной версии : Прошу дать вразумительные ответы касательно программирования ПЛК304 в CoDeSyS v3!



Грушецкий Павел
16.12.2011, 22:08
Здравствуйте! Возвращаюсь к теме программирования ПЛК 304 в CoDeSyS v3 (предыдущая моя тема "заглохла", ответа специалиста ОВЕН жду вторую неделю).

Начну с того, что все проблемы привык решать сам, но в случае ПЛК 304 + CoDeSyS v3 опускаю руки - документации по программированию попросту нет, а той, что имеется, абсолютно недостаточно. Я не имею ввиду сам CDS - там все понятно (о минусах все же упомяну ниже).

Далеко ходить не надо: связываю с контроллером по Modbus RTU девять модулей дискретного/аналогового ввода/вывода; скачал с сайта библиотеки, примеры, сделал - при чтении каналов модулей МВ110-8А в конце операции чтения не устанавливается флаг завершения операции, в связи с чем возникают неудобства в программировании, а главное - отсутствует понимание, почему при чтении каналов модуля МВ110-224.2А флаг устанавливается, даже при наличии обрывов датчиков на входах. Неделя поисков и решений - проблема в скачанной с сайта ОВЕН библиотеке :eek: (внутри библиотеки после чтения второго канала происходит переход обратно к первому каналу, а не к третьему и т.д.). Если уж скопировали внутренности ФБ для МВ110-224.2А в ФБ для МВ110-8А, так хоть проверьте перед тем, как выкладывать на главный сайт. Это просто недопустимо.

Вопрос следующий: существует ли возможность обращения по протоколу Modbus TCP/IP к отдельным битам в памяти ПЛК? Связываю со SCADA Movicon 11.1 (Progea), передавать WORDами получается, а вот биты упорно как не пишет, так и не читает. На SCADA не грешу, так как её же связывал с ПЛК110 - все нормально работает.

Также интересует вопрос, почему в конфигурации slave в CDS в переменные входа/выхода нельзя добавить больше чем по 40 штук? (т.е. максимум 80 байт на вход и 80 байт на выход? и это всё?)

И вообще, с CoDeSyS v3, как по мне, немного перемудрили: в целом, интерфейс стал более удобным и приятным, но куда делись макросы в CFC :confused: (зато в SFC макросы добавили), куда делась возможность добавления EN/ENO в LD :confused: и т.д. и т.п.

Пожалуйста, отреагируйте на вопрос о TCP/IP, т.к. проект "горящий" и довольно сложный (при планировании я даже подумать не мог что ПЛК110+CDSv2 и ПЛК304+CDSv3 - это как небо и земля; то, что в первом случае делалось за два дня. во втором случае занимает неделю :( ).

Заранее благодарю.

Pashtet
18.12.2011, 18:54
Павел здравствуйте.
Сам недавно стал опробовать русифицированную CoDeSys v3.4 SP4. По мере изучения "Help" (раздела "Помощь") наткнулся на описание Стандартных типов данных и там вот что (цитирую): "bool
Логический тип данных. Переменная может принимать 2 значения: TRUE (1) или FALSE (0). Занимает 8 бит памяти.

См. также: BOOL константы (операнды)
Copyright © 3S - Smart Software Solutions GmbH - CoDeSys V"

Битовая переменная занимает 8 бит памяти (т.е. целый байт)? Может быть шутка, а может трудности перевода или опечатка?
Попробуйте...

А с другой стороны если у Вас получалось с ПЛК 110 то функции записи/чтения в SCADA, в части записи/чтения битов, работают, то в Вашей ситуации наверно нужно смотреть на адресацию переменных, а также на распределение и выравнивание адресов в области памяти ПЛК3хх.

Грушецкий Павел
18.12.2011, 19:42
:) вот в адресации памяти ПЛК и вся проблема :) где она описана? где она задается? - не понятно. В случае ПЛК110 переменные разных типов просто добавлялись в конфигураторе ПЛК, неудобство состояло лишь в выравнивании адресации. Но все же можно было добавить переменную типа BYTE, которая состояла из восьми битов, к каждому из которых можно было обратиться по определённому адресу - необходимо было лишь высчитать номер этого бита, начиная с нулевого бита первой переменной в конфигурации связи по Modbus TCP/IP.

В CDSv3 же память ПЛК разбита на две области - ввода и вывода (максимум по 40 байт), области разбиты на переменные типа WORD (максимум по 40 переменных). Обращение происходит по адресам от 0 до 39 (как для области ввода, так и для области вывода). В принципе, каждая переменная разбита на 16 битов, даже указаны какие-то адреса этих битов, но по этим адресам обратиться не получается.

Пробовал создавать список глобальных переменных типа BOOL, и назначать битам WORDов из памяти ввода/вывода (чтобы не делать распаковку полученных регистров) - но происходит следующее: например, мы читаем регистр #0 со значением 1, так вот если не назначать нулевому биту регистра переменную, то CDS покажет, что этот бит = 1, а если назначить, то бит останется = 0.:confused:

В результате, всё равно приходится распаковывать регистры ввода и упаковывать регистры вывода.

Я бы с этим смирился, но, например, на SCADA нет возможности упаковывать/распаковывать регистры - что делать?

В общем, я хочу, чтобы мне кто-либо из техподдержки сказал, например, что обращаться к отдельным битам в памяти ПЛК нельзя - я тогда оставлю все попытки и сосредоточусь на альтернативных методах решения данной задачи; или можно - тогда пускай объяснят как.

kolyan
18.12.2011, 19:46
Сам недавно стал опробовать русифицированную CoDeSys v3.4 SP4.

Скажите, пожалуйста, а где можно эту версию CoDeSys скачать?

Грушецкий Павел
18.12.2011, 19:51
http://owen.com.ua/sreda-programmirovaniya-codesys/sreda-programmirovaniya-codesys-v3-i-drugoe-programmnoe-obespechenie-dlya-oven-plk304/308-i-oven-spk207.html

здесь гляньте

Pashtet
18.12.2011, 21:31
Вот некоторые выдержки из "AT-Declaration" раздела "Help".
Если Вы сделали и учли то, что описано ниже (особенно выделенное красным шрифтом), то тогда описанная Вами проблема скорее всего ориентирована на аппаратную возможность Вашего ПЛК, а это уже- тех. поддержка "Овен".

При указании адреса распределение памяти и размер задаются с помощью специальных последовательностей символов.
Синтаксис:
%<префикс области памяти><префикс размера><число|.число|.число....>
Поддерживаются следующие префиксы области памяти:
I Входы (физические входы, "sensors")
Q Выходы (физические выходы, "actors" )
M Память данных

Префиксы размера:
X Один бит
None Один бит
B Байт (8 бит)
W Слово (16 бит)
D Двойное слово (32 бит)

Примеры:
%QX7.5 и %Q7.5 бит 7.5 в области выходов
%IW215 215е слово в области входов
%QB7 байт 7 в области выходов
%MD48 двойное слово в позиции памяти 48
%IW2.5.7.1 зависит от конфигурации ПЛК
ivar AT %IW0 : WORD; пример объявления переменной с адресом

Убедитесь, что используется подходящий адрес:
Для задания адреса в приложении в первую очередь необходимо знать используемую область памяти. После этого задается нужный размер: бит,байт, word, dword (см. выше: X, B, W, D)

Решающую роль играет текущая конфигурация устройства и установки (аппаратная структура, описание устройства,параметры входов\выходов). Обратите особое внимание на различия адресов у устройств, использующих "режим байта-дресации", и тех, что применяют "режим word-адресации".
Таким образом, в зависимости от размера и режима адресации, к разным ячейкам памяти можно обращаться по одному и тому же адресу.

Обратите внимание, что для битовых адресов режим МЭК-адресации всегда word-ориентирован. Это значит, что перед точкой должно стоять количество word, а после имени - количество битов.


Перекрытие диапазонов памяти для байтового режима адресации:
D0 включает B0 - B3, W0 включает B0 и B1, W1 включает B1 и B2, W2 включает B2 и B3

Замечание: По умолчанию логические переменные занимают один байт, если в объявлении не указан прямой битовый адрес. Пример: изменение значения переменной varbool1 AT %QW0 влияет на область памяти QX0.0 - QX0.7.

Замечание: При онлайн-изменении адреса переменных могут измениться. Не забывайте о такой вероятности, используя указатели.

Грушецкий Павел
18.12.2011, 21:46
Спасибо. Завтра попробую ещё раз - отпишусь по результату.

Игорь Петров
19.12.2011, 12:00
Битовая переменная занимает 8 бит памяти (т.е. целый байт)? Может быть шутка, а может трудности перевода или опечатка?
Константа 3 типа INT займет аж целых 16 бит. 14 не используются. В программах для 64 бит компьютеров под BOOL выделяют 64 бит. Что в этом нового?

Процессор за один такт может взять байт. Затем микропрограмма выделяет из него 1 бит. Машинный код будет больше и медленнее. Поэтому в CoDeSys сделано гибко. Если явно задан битовый адрес, то BOOL займет 1 бит, иначе целый байт.

В хелпе шуток нет, они идут отдельным файлом :)

Грушецкий Павел
21.12.2011, 21:23
Что касается битов в составе регистра: использовать для этого закладку IO Mapping в конфигурации Slave все же не получилось. Решил все-таки вручную прописать адреса и регистров и битов в таблице глобальных переменных. Работает.

Вылезла другая проблема, с которой разобраться не получилось (звонил и в московский отдел техподдержки, и в харьковский): невозможно прочитать с контроллера регистры с адресом, выше %QW12. Сказали, что проблема все-таки в CoDeSyS+ПЛК, и что на данный момент эта проблема решается. Будем ждать.

Спасибо работникам отдела техподдержки за понимание :)

Логвиненко Андрей
11.01.2012, 15:33
Добрый день.
Не стал делать новую тему, решил написать сюда.
Занялся переносом программ с ПЛК 1хх на ПЛК 304 и обнаружил неприятную вещь:
-математические функции в ПЛК304 не работают.
В Control Win V3 работают, а в ПЛК304 ошибку не выдают, но возвращают или 0 или infinity или неправильные значения.
Версия Codesys 3.4 sp4.

Логвиненко Андрей
11.01.2012, 15:59
В дополнение к предыдущему сообщению.
Продолжил тестирование, получил следующее:

EXPT(2.0,2.0) возвращает 0,

a:=2;
b:=2;
EXPT(a,b) возвращает 4.

Аналогично для других функций.

Евгений Сергеевич
11.01.2012, 17:22
на счет экспоненты мы знаем, боремся. А какие еще функции работают неправильно.

Логвиненко Андрей
11.01.2012, 17:37
проверял EXP, SIN, COS, SQRT, эффект одинаковый.

Евгений Сергеевич
12.01.2012, 13:48
to Грушецкий Павел

чтобы обойти случившуюся у вас ошибку задайте одинаковое количество входных и выходных регистров - 33шт.
команды:
6 и 16 это запись,
3 это чтение записанного значения (то что записали сами в Input регистры )
4 это чтение выходных регистров (то что выдает программа в Output регистры).
Над увеличением числа работаем сейчас. И над устранением этой баги.

Грушецкий Павел
12.01.2012, 17:37
Спасибо, попробую.

Грушецкий Павел
12.01.2012, 20:21
Так как Вы описали (обращение к битам через точку, например, %QX1.1 или %IX10.4) и у меня работает. Не работает, если биты назначать в таблице конфигурации входов/выходов slave'а.

Грушецкий Павел
13.01.2012, 19:48
Неужто в моей SCADA можно производить такие операции. Но у меня 40 регистров ввода/вывода (итого порядка 600 дискретных переменных). Просто неохота загаживать SCADA работой, которую должен обеспечивать ПЛК. Как это было (и есть) в ПЛК110.


через "таблицу конфигурации входов/выходов" и не должно получаться

Как это не должно? Есть разбиение области памяти на регистры (с указанием соответствующих функций чтения/записи); есть возможность назначить битам этих регистров переменные типа BOOL - почему я не могу уйти от операций с обращением через точку, операций распаковки/упаковки, если такая возможность явно заложена производителем программного продукта? Но вот незадача - всё-таки не могу, потому что попросту не работает.

А по поводу невозможности обращения к отдельным регистрам: я знаю, при помощи каких функций это делается. Вопрос в том, почему, например, даже в той же SCADA представлены все функции Modbus, а у ОВЕН только две. как по мне, это недоработка.Об этом надо говорить заранее.

Грушецкий Павел
13.01.2012, 20:00
Ответ на этот вопрос (кто при чём) может дать ОВЕН. Я же не знаю, кто и что под кого там пишет. Да мне это и не интересно на самом деле. Я покупаю продукцию с сертификатами (одним словом, готовый продукт) и хочу, чтобы она работала исправно и обеспечивала тот функционал, который заявлен производителем. Если написано Modbus TCP/IP, то это должен быть полноценный протокол, если же нет - будьте добры укажите это отдельной строкой. По крайней мере, я имею на это право.

А кто там виноват не я должен выяснять. Я покупаю продукцию у ОВЕН и, соответственно, по любому вопросу обращаюсь к ним.

Кстати, спасибо специалистам ОВЕН: установил одинаковое количество регистров ввода/вывода - читает и пишет по всем адресам.

БлЮрий
08.08.2012, 18:48
Подскажите в каком направлении двигатся, если есть СП270 и ПЛК308 (мастер). Как организовать у них обмен данными. На языке CFC, с СП270 и ПЛК100 или 110 проблем нет, но с 308, не понимаю.

БлЮрий
09.08.2012, 18:50
А в програме какие модули установить ?

БлЮрий
06.09.2012, 17:30
capzap ,Огромное спасибо. Дело пошло.

capzap
06.09.2012, 17:41
не за что :)

aserr
18.09.2012, 15:24
Capzap, все сделал как в выложенном вами видео, но при запуске выдает такое. У меня ПЛК308. Может что-то не так делаю? Ткните.

capzap
18.09.2012, 15:41
таргет то один на оба плк, смотрите может порт неправильно назначили, может два добавленных устройства мешают друг другу

EvgenKinchin
19.11.2012, 09:38
на счет экспоненты мы знаем, боремся. А какие еще функции работают неправильно.

Здравствуйте.

В каком состоянии борьба? Несколько дней назад столкнулся с этой же самой проблемой.

MoZart
07.02.2013, 19:24
Господа, а подскажите, , пожалуйста такую вещь. Привязался к переменной %QW1. В маппинге вижу присвоенное ей значение 8. А вот в какой стандартный модбас адрес эта переменная вываливается? Я не могу её увидеть в лектусе!

Константинов Сергей
07.03.2013, 10:38
Здравствуйте, мне нужно к ПЛК304 присоединить еще 5 ПЛК304, с одного ПЛК получить нужные значения мне удалось, а вот теперь такой вопрос как можно организовать передачу значений на ПЛК в 1 порт. Как можно разделить ПЛК или распознать с какого из 5 ПЛК идет сигнал?

Константинов Сергей
07.03.2013, 10:40
Здравствуйте, мне нужно к ПЛК304 присоединить еще 5 ПЛК304, с одного ПЛК получить нужные значения мне удалось, а вот теперь такой вопрос как можно организовать передачу значений на ПЛК в 1 порт. Как можно разделить ПЛК или распознать с какого из 5 ПЛК идет сигнал, допустим получить сетевое имя ПЛК?