Меняли, потому что штатные библиотеки 3s не работали как надо.
к тому же в поведении UDP с 0.3.64 ничего не поменялось
Последний раз редактировалось Филоненко Владислав; 01.02.2017 в 18:28.
Тролль-наседка, добрый, нежный и ласковый
Просмотрел стр. форума с 1 по 55 и с 90 по последнюю. Не нашел ответа на одну хр..нь. Итак: КДС v2.3.9.41, PLC 110-24.P.M (02), Target 3.10, периферия блок Input 8 бит, ПЛК мастер на Modbus (RTU). Создаю целевую функцию, вхожу в конфигуратор ПЛК, включаю Modbus (Master) RS485, подключаю Universal Modbus device, вставляю 8 bit input module, и получаю:
8 bit input module [VAR]
AT %QB6.1.0.0:BYTE;(**) [CHANNEL(Q)]
Т.е., входные сигналы попадают в область выходов!? Звоню в тех. поддержку... Уверяют, что так и должно быть, мол, ускоряется обработка. 20 лет работаю с Сименсом, Омроном и пр., такого не видел. Ладно, пишу простенькую программку:
LD %IX1.0.0 (*вход на ПЛК*)
AND %IX1.0.1 (*вход на ПЛК*)
ST %IX6.1.0.0.2 (*вход на внешнем модуле входов*)
Компилирую. И... все ОК: 0 ошибок, 0 предупреждений. Ладно добавляю:
LD %IX1.0.0 (*вход на ПЛК*)
AND %IX1.0.1 (*вход на ПЛК*)
ST %QX6.1.0.0.2 (*вход на внешнем модуле входов*)
LD %IX1.0.0 (*вход на ПЛК*)
AND %IX1.0.1 (*вход на ПЛК*)
ST %IX1.0.2 (*вход на ПЛК*)
Компилирую.Получаю: Ошибка 4020:Odin(7): Операндом для "ST";"STN";"S";"R" должна быть переменная или прямой адрес, доступные по записи. 1 ошибка, 0 предупреждений. Е.о. КДС не видит, что %QX6.1.0.0.2 входной сигнал. Сразу мысль: у меня в проекте более 60 входов и более 60 выходов. Если я "очепятнусь" и вместо %QX6.2.0.0.2 (выходной сигнал) поставлю %QX6.1.0.0.2 (входной сигнал), то КДС проглотит и не поморщится. Найти сие потом...ой! И еще: как поведет себя вход на модуле входов с 24в на выходе, если я на него подам еще и 24в с контроллера. Есть ли какие-либо мысли по данному поводу. У меня приличный опыт по Сименсу, Овен только однажды пуско-наладил. Сейчас нужно запрограммировть СУ на Овен (времена то тяжелые).
Ну так зачем же бросать уютный Сименс и переходить на плохой CoDeSYs.
Это разные языки программирования и особенности их надо понять и простить
Тролль-наседка, добрый, нежный и ласковый
http://www.kipshop.ru/CoDeSys/steps/...figuration.pdf страница 14, рисунок 1.6
и не надо будет этого кода через %
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Владислав, причем тут CoDeSys? Он все понимает правильно: I - это входной сигнал, Q - это выходной сигнал. А переход на Овен это не от хорошей жизни. Мы тут на "земле" работаем в режиме выживания. Заказчики не воспринимают контроллеры за 2500 - 4500 евро. Да и за отечественного производителя я обеими руками. В Сименсе такие снобы. Я все прекрасно понимаю. Сименс контроллерами занимается с 70-х годов и коллективчик там, как заметил кто-то на форуме, размером со Сколково. Естественно у них все вылизано. Но нарушать общепринятые соглашения... это как-то чересчур. Непонятна сама логика. Входа/выхода самого контроллера распределены как принято, а периферия нет.
Работал я как-то с STEP7, исплевался весь. Наворочено там много чего, но все до ужаса заорганизованно. Ни какой свободы. Некоторые моменты там вообще из каменного века. Компиляция проекта длится ужасно долго. То что в CoDeSys компилируется 3 секунды в STEP7 компилируется 3 минуты.
Последний раз редактировалось Вольд; 03.02.2017 в 11:02.
Прямую адресацию привел для наглядности. Применение символьных имен переменных картину не меняет. Применение входов в адресном пространстве выходов делает программу понятной только его создателю. В отделе я единственный программист (не идет народ в промышленное программирование). А ехать по первому чиху в Мурманск, Красноярск или в Верхнюю Туру ни возможности ни желания нет.
Все входа/выхода специально сделаны Q, чтобы можно было включать как подмодули мастера и Slave в modbus slave и иметь к их данным прямой доступ из SCADA верхнего уровня.
P.S. Правилом хорошего тона при написании программ на CoDeSys является не использование прямого доступа к данным в slave и master, т.к. они не являются достоверными по умолчанию. Всегда нужен блок-прокладка с проверкой "а не мусор ли в данных". В нем, для перфекционизма, можно и преобразовать Q в I
Тролль-наседка, добрый, нежный и ласковый
Замечательно?! А как же с входами/выходами самого контроллера (используется ПЛК 110-24.60.Р.М (02))?
Прямую адресацию в примере применил умышленно для наглядности и сокращения объема сообщения.
Не достоверность прямого доступа просто пугает! Если на 7-й вход блока расширения приходит сигнал от кнопки "Аварийный стоп" и транслируется в область памяти %IX 6.0.0.0.6, то я должен быть абсолютно уверен, что этот бит и есть сигнал от кнопки "Аварийный стоп", а не что-либо другое.
Присвоение прямому адресу имени не снимает вопрос. CoDeSys все равно видит эту переменную как выход, Назначение такой переменной значения "Входной" не меняет ситуацию, все равно CoDeSys позволяет туда писать (проверено).