PDA

Просмотр полной версии : CODESYS V3.5. Вопросы и ответы



Страницы : 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Евгений Кислов
27.10.2020, 10:47
Здравствуйте. Не пойму, почему после открытия - чтения - на закрытии остается висеть признак работы блока
51530

Добрый день.
По фрагменту кода сложно дать какие-то комментарии.
Например, возможно, Close_0 вызывается где-то еще.

Lef6
27.10.2020, 11:07
Больше нигде не вызывается, я даже изменил имя всё равно не помогло. Это может в последующем повлиять на работу контроллера? если нет, то можно оставить так, или же предоставить вам доступ, чтобы вы сами посмотрели?

Евгений Кислов
27.10.2020, 11:08
Больше нигде не вызывается, я даже изменил имя всё равно не помогло. Это может в последующем повлиять на работу контроллера? если нет, то можно оставить так, или же предоставить вам доступ, чтобы вы сами посмотрели?

Лучше выложите проект - мы попробуем повторить эту ситуацию у себя.

Lef6
27.10.2020, 11:43
архив проекта
https://yadi.sk/d/36GTtnf3cGknNw

Евгений Кислов
27.10.2020, 13:21
У меня не воспроизвелось:

51531

Но я открываю свой файл, в наличии которого в ПЛК твердо уверен.

Lef6
27.10.2020, 16:24
У меня не воспроизвелось:

51531

Но я открываю свой файл, в наличии которого в ПЛК твердо уверен.

Здесь дело явно не в отсутствии файла, т.к. он даже не считал бы его, а выдал ошибку уже на блоке OPEN. У меня считывает и потом закрыть не может. Дело или в прошивке какой или времени цикла или еще чего...

Евгений Кислов
27.10.2020, 17:02
Похоже, вы столкнулись с этим багом - блок выполняет свою работу (хэндл становится равным 0), но после этого вместо xDone успевает произойти еще один вызов ФБ, при котором блок пытается закрыть файл с нулевым хэндлом и терпит неудачу.

51535

Вы можете обновиться до актуальной прошивки - там уже рантайм от CODESYS V3.5 SP14 Patch 3, и данная проблема отсутствует.

Lef6
28.10.2020, 07:46
Ясно. Спасибо )

Максим Ульянов
04.11.2020, 11:40
Коллеги доброго времени! подскажите как в проект добавить еще один PLC_PRG только на другом языке ? в примерах встречается но как это реализовать не понял

Евгений Кислов
04.11.2020, 11:44
Коллеги доброго времени! подскажите как в проект добавить еще один PLC_PRG только на другом языке ? в примерах встречается но как это реализовать не понял

Добрый день.
ПКМ на узел Application - Добавление объекта - POU - выбрать тип Программа
Созданную программу надо будет привязать к задаче.

Максим Ульянов
04.11.2020, 12:40
Евгений огромное спасибо за ваши ответы) еще глупый вопрос ) я могу допустим в программе на CFC создать таймер и вызывать программу на ST?допустим по нему писать значения в таблицу визуализации ,как я понял работа с таблицами возможно или более удобна на языке ST

Евгений Кислов
04.11.2020, 12:59
Евгений огромное спасибо за ваши ответы) еще глупый вопрос ) я могу допустим в программе на CFC создать таймер и вызывать программу на ST?допустим по нему писать значения в таблицу визуализации ,как я понял работа с таблицами возможно или более удобна на языке ST

Да, вы можете так сделать. В данном случае можно сделать функциональный блок на ST - в дополнительной программе нет особого смысла.

Максим Ульянов
04.11.2020, 13:44
Д В данном случае можно сделать функциональный блок на ST
я конечно понимаю что зумачал уже.. но как его создать?)

Евгений Кислов
04.11.2020, 13:55
я конечно понимаю что зумачал уже.. но как его создать?)

ПКМ на узел Application - Добавление объекта - POU - выбрать тип Функциональный блок

Cs-Cs
04.11.2020, 14:05
Максим Ульянов Ну... по идее почитать руководство по этому делу (по программированию на CodeSys, которое было у ОВЕНа и на кого есть ссыль в подписи у Евгения Кислова, чтобы ВСЕ видели).
Тебе надо решить то, что тебе будет удобнее:
а) Если у тебя ОЧЕНЬ много сделано на CFC, и тебе нужен какой-то кусочек кода на ST, потому что на ST понятнее - то тогда удобнее сделать FB для этого кусочка.
б) Если же ты боишься (как я раньше) работать с таймерами и другими блоками на ST (или не понимаешь как это делать), и если почти всё ты хотел бы писать на ST - то надо научиться работать с таймерами и FB на ST.

Я учился так:
а) Сообразил что конкретный блок надо объявить в ST в разделе где переменные объявляют (так же как на CFC). Ну типа пишем tmTimer : TON; - объвяили таймер задержки на включение.
б) Понимать, что этот блок в ST ВСЕГДА должен вызываться. То есть его нельзя пихать во всякие циклы, IF и прочие херовины, а то он не всегда будет срабатывать.
в) Понимать, что этот блок должен разом получать все входные переменные. Выходные можно забирать как угодно.
г) Для удобной вставки вызова блока (чтобы описать все его параметры) есть удобная кнопка "F2". Она открывает окно выбора того, что вставить в код. Там надо выбрать "Вызовы интерфейса", галочку "Вставить с аргументами" и нужный нам таймер.
Тогда CodeSys вставит его со всеми сигналами и параметрами примерно так:
tmTimer(IN:=, PT:=, Q=>, ET=> );
Это - аналог нарисованного таймера с теми же сигналами. Сюда вписываешь переменные, и всё.
То, что помечено как ":=" - входы, то что ">=" - выходы. Ненужное можно удалить.

То есть можно написать так (bStart - переменная, по которой запускается таймер):
tmTimer(IN:= bStart, PT:= t#500ms);

А дальше где-то написать типа
IF (tmTimer.Q) THEN -- если выход таймера (Q) включен - то жжом.

Может я не то написал, но если проблема была только в этом - то лучше правильно научиться, чем плодить фигню в программах.
И вот так зверски жёстко это может выглядеть:
51700

Yaroslav_22
05.11.2020, 21:12
Здравствуйте, подскажите, почему в пустом проекте 520 ошибок?
5175751757
CS3.5 SP14 P3
Версия таргета 3,5,11,50
В СПК107М1 3,5,11,57

Евгений Кислов
05.11.2020, 21:16
Добрый день.
Для начала - в правом верхнем углу надо нажать Загрузка отсутствующих библиотек.

Yaroslav_22
05.11.2020, 21:24
Помогло, Спасибо!!!

Максим Ульянов
06.11.2020, 08:59
Коллеги ,доброе утро! где взять последнию версию Визуализации?
51767

Евгений Кислов
06.11.2020, 09:07
Коллеги ,доброе утро! где взять последнию версию Визуализации?
51767

Проек - Установки проекта - Профиль визуализации

Lef6
09.11.2020, 08:53
Здравствуйте. Вопрос по работе блока File.Copy. Когда он выдает ошибку, что копия существует. Я перезапускаю блок с параметром перезаписи копии файла. Блок его перезаписывает. И если я снова запускаю блок без перезаписи на тот же файл копия которого существует, он перестает выдавать ошибку о существовании копии файла. В чем тут дело?
архив проекта https://yadi.sk/d/of7_eDpe4WXttQ

Евгений Кислов
09.11.2020, 09:14
Дело в этом:

51807

Lef6
09.11.2020, 09:19
А где я это сам могу посмотреть, чтобы лишних вопросов не задавать?)

Евгений Кислов
09.11.2020, 09:39
А где я это сам могу посмотреть, чтобы лишних вопросов не задавать?)

Честно говоря, нигде - доступ к багтрекеру только через взаимодействие с разработчиками CODESYS.

Максим Ульянов
09.11.2020, 12:50
Евгений ,Доброго Дня...разбираюсь с одним за ваших примеров..все понятно огромное спасибо..но вот появилась такая дрянь..
51817 Перечеслиние описано ,добавлено ,в каких то местах кода все нормально..

Евгений Кислов
09.11.2020, 13:04
Добрый день.
Выложите проект, пожалуйста.

Максим Ульянов
09.11.2020, 13:16
51818

Посмотрите пожалуйста...

Евгений Кислов
09.11.2020, 13:45
У вас интересная ситуация - в библиотеке AlarmManager уже объявлена неявная глобальная переменная STATE, и поэтому у компилятора возникает непонимание, что ему делать.

51820

В принципе, это мелкая ошибка на стороне CODESYS - мы сообщим об этом разработчикам.
Вы можете переименовать STATE во что-то другое - тогда проблем не будет.

Или - очень сильное колдунство - перенести STATE на вкладку POU и в коде использовать обращение типа __POOL.STATE.READ

51821

Еще один вариант - убрать из перечисления прагму {attribute 'qualified_only'} и в коде не использовать пространство имен в стиле:

eState := READ; // а не STATE.READ

Максим Ульянов
09.11.2020, 14:01
В принципе, это мелкая ошибка на стороне CODESYS - мы сообщим об этом разработчикам.
Вы можете переименовать STATE во что-то другое - тогда проблем не будет.




Огромное спасибо) помогло)

Максим Ульянов
09.11.2020, 17:38
еще вопрос...есть массив структур :TE0: ARRAY [0..22] OF TE0; // датчики температуры
есть описание структур : TYPE TE0 : // структура, отображаемая в таблице
STRUCT
sName: STRING ; // столбец имени
sValue: REAL; // столбец значени
END_STRUCT
END_TYPE



подскажите как сразу строкам sName присвоить текстовые значения,в описании это возможно?
И можно ли подцепить один из элементов sValue напрямую к входу выходу ?

Евгений Кислов
09.11.2020, 18:02
1. Если нужно инициализировать прямо в области объявления - то посмотрите здесь пример "3-dimensional arrays of a user-defined structure"
https://help.codesys.com/webapp/_cds_datatype_array;product=codesys;version=3.5.16 .0

2. Что вы подразумеваете под "подцепить один из элементов sValue напрямую к входу выходу"?

VladGC
10.11.2020, 09:26
Добрый день!
Возник вопрос по версиям таргетов и ядра плк.

Для работы с прошивкой plc210 1.2.0721.0832 нужен таргет-файл 3.5.14.35, который идет в комплекте OwenTargets-3.5.14.30-09

В web интерфейсе плк есть упоминание ядра плк:
Версия ядра ПЛК 3.5.14.30

Во вкладке device> установка соединения написана версия таргета 3.5.14.30

В вкладке device >информация написана версия Версия: 3.5.14.35

Правильно я понимаю что во вкладке device > установка соединения версия относится к ядру плк?
5183251834

Евгений Кислов
10.11.2020, 09:30
Добрый день.


Правильно я понимаю что во вкладке device > установка соединения версия относится к ядру плк?

Да, все верно.

Максим Ульянов
11.11.2020, 09:34
Коллеги ,доброе утро . Пытаюсь запустить проект в СПК...51855
что блин ему нужно...

Евгений Кислов
11.11.2020, 09:35
У вас исключение, связанное с ошибкой сегментации - нужно отлаживать проект и искать, где случились проблемы с доступом к памяти.

Максим Ульянов
11.11.2020, 09:40
Вы очень понятно написали...как бы еще понять как это сделать...

Максим Ульянов
11.11.2020, 10:18
проект пустой...убрал почти все...........не каких ошибок при компиляции а дальше ...51857
*EXCEPTION* [AccessViolation] occurred: App=[Application], Task=[MainTask]

Евгений Кислов
11.11.2020, 10:32
проект пустой...убрал почти все...........не каких ошибок при компиляции а дальше ...51857
*EXCEPTION* [AccessViolation] occurred: App=[Application], Task=[MainTask]

Если в этом состоянии сделать загрузочное приложение и перезагрузить контроллер - что произойдет?

Максим Ульянов
11.11.2020, 10:39
это и происходит...больше не чего..

Евгений Кислов
11.11.2020, 10:42
это и происходит...больше не чего..

Обеспечьте подключение по TeamViewer - я посмотрю, в чем может быть дело.

ComradeBulkin
11.11.2020, 18:55
Добрый вечер!

Взрыл всё, что мог, но не могу решить вопрос с Менеджером тревог.

Собственно задача в том, чтобы иметь возможность сбрасывать все текущие тревоги "одной кнопкой", но чтобы они повторно срабатывали с установленной у них задержкой.

Дело в том, что на нашем оборудовании есть тревоги, которые необходимо, что срабатывали снова после подтверждения. Например, при холодном пуске, пока установка не выйдет на режим, но защиты надо отрабатывать всё-равно.

Банальный пример:

Есть дверца в топку. Если она открыта слишком долго - сработает тревога. Но есть вероятность, что её подтвердят. И тогда при повторной ситуации, тревога просто не сработает. А мне надо, что при подтверждении таймер задержки срабатывания запускался снова.

Либо я совсем запутался и не понимаю, как работают различные режимы подтверждения.

Евгений Кислов
11.11.2020, 19:05
Добрый вечер!

Взрыл всё, что мог, но не могу решить вопрос с Менеджером тревог.

Собственно задача в том, чтобы иметь возможность сбрасывать все текущие тревоги "одной кнопкой", но чтобы они повторно срабатывали с установленной у них задержкой.

Дело в том, что на нашем оборудовании есть тревоги, которые необходимо, что срабатывали снова после подтверждения. Например, при холодном пуске, пока установка не выйдет на режим, но защиты надо отрабатывать всё-равно.

Банальный пример:

Есть дверца в топку. Если она открыта слишком долго - сработает тревога. Но есть вероятность, что её подтвердят. И тогда при повторной ситуации, тревога просто не сработает. А мне надо, что при подтверждении таймер задержки срабатывания запускался снова.

Либо я совсем запутался и не понимаю, как работают различные режимы подтверждения.

Добрый день.

Вы можете поставить режим подтверждения ACK и при нажатии на кнопку квитирования сбрасывать сами сигналы тревог (я исхожу из того, что у них задан тип "дискретный") и перезапускать таймер(-ы), которые будут определять момент, в который тревоги будет активированы повторно (если их условия к этому моменту все еще выполняются).

Или можно просто использовать режим ACK_REP - тогда после квитирования тревога все равно останется в таблице, исчезнет только после снятия условия.

RV9WFJ
11.11.2020, 22:13
А еще проще всю логику описать в коде, а в Alarm выбрасывать уже готовый флаг тревог. Я со временем к этому пришел. Подумываю уже совсем отказаться от Alarm Manager.

ComradeBulkin
12.11.2020, 08:57
Добрый день.

Вы можете поставить режим подтверждения ACK и при нажатии на кнопку квитирования сбрасывать сами сигналы тревог (я исхожу из того, что у них задан тип "дискретный") и перезапускать таймер(-ы), которые будут определять момент, в который тревоги будет активированы повторно (если их условия к этому моменту все еще выполняются).

Или можно просто использовать режим ACK_REP - тогда после квитирования тревога все равно останется в таблице, исчезнет только после снятия условия.

Спасибо. Собственно я к этому также и склоняюсь. Жаль, что нет в библиотеке Менеджера тревог такой функции. Как минимум странно, что после деактивации счётчик не запускается снова, а сработка происходит сразу. Или есть в этом смысл?

ComradeBulkin
12.11.2020, 08:59
А еще проще всю логику описать в коде, а в Alarm выбрасывать уже готовый флаг тревог. Я со временем к этому пришел. Подумываю уже совсем отказаться от Alarm Manager.

Да, видимо вариантов других нет. Жаль только, что придётся таймерами перегружать систему.

VladGC
12.11.2020, 09:46
Да, видимо вариантов других нет. Жаль только, что придётся таймерами перегружать систему.

А много у вас параметров ?
У себя я организовал обработку тоже в коде
В alarmGroup вставлен массив строк
Так же созданы классы тревог ( для закраски разными цветами)

Далее в коде идет обработка



(*
1-10 : статусы
11-30: связь
31-40: запрос обслуживания
41-99: ошибка


*)


//Статусы состояния


//Статусы - связи
awsMessageJournalLatch2[11] :=ptawsName_Mb_dev^[1];
awsMessageJournalLatch2[12] :=ptawsName_Mb_dev^[2];
awsMessageJournalLatch2[13] :=ptawsName_Mb_dev^[3];
awsMessageJournalLatch2[14] :=ptawsName_Mb_dev^[4];
awsMessageJournalLatch2[15] :=ptawsName_Mb_dev^[5];
awsMessageJournalLatch2[16] :=ptawsName_Mb_dev^[6];



afbAlarmTrgiggerDelay[11].IN:=D1_4301_MU210_501.byModbusError <> MB_ErrorCodes.RESPONSE_SUCCESS;
afbAlarmTrgiggerDelay[12].IN:=D2_4301_MV210_101.byModbusError <> MB_ErrorCodes.RESPONSE_SUCCESS;
afbAlarmTrgiggerDelay[13].IN:=D1_3003_MV210_202.byModbusError <> MB_ErrorCodes.RESPONSE_SUCCESS;
afbAlarmTrgiggerDelay[14].IN:=D2_3003_MV210_101.byModbusError <> MB_ErrorCodes.RESPONSE_SUCCESS;
afbAlarmTrgiggerDelay[15].IN:=D3_3003_MU210_410.byModbusError <> MB_ErrorCodes.RESPONSE_SUCCESS;
afbAlarmTrgiggerDelay[16].IN:=D4_3003_MV210_101.byModbusError <> MB_ErrorCodes.RESPONSE_SUCCESS;


// Журнал событий
awsMessageJournalLatch1: ARRAY [1..100] OF WSTRING(20);
awsMessageJournalLatch2: ARRAY [1..100] OF WSTRING(60);
afbAlarmTrgiggerDelay: ARRAY [1..100] OF oscatbasic.TONOF;


В таком решении, очень просто переносится журнал из проекта в проект, т.к. таблица тревог всегда одна и та же, а весь текст в коде
Одна и та же дискретная переменная идет в два способа наблюдений:
Способ наблюдения Дискретный - для текущего журнала ( класс ошибки без архивации)
Способ наблюдения Изменение - для исторического (класс ошибки с архивацией)

51913
51914
51915

ComradeBulkin
12.11.2020, 10:40
А много у вас параметров ?
У себя я организовал обработку тоже в коде
В alarmGroup вставлен массив строк
Так же созданы классы тревог ( для закраски разными цветами)

Далее в коде идет обработка



В таком решении, очень просто переносится журнал из проекта в проект, т.к. таблица тревог всегда одна и та же, а весь текст в коде
Одна и та же дискретная переменная идет в два способа наблюдений:
Способ наблюдения Дискретный - для текущего журнала ( класс ошибки без архивации)
Способ наблюдения Изменение - для исторического (класс ошибки с архивацией)



У нас порядка 500 кодов ошибок, но из них надо перезапускать около 50. Так что да, буду творить что-то аналогичное вашему решению. Здраво сделано, спасибо большое!

Максим Ульянов
12.11.2020, 17:15
Коллеги ,знаю что замучил..но я не чего не понимаю...51946
Но зачем компилятор пытается преобразовать INT в BOOL ?

YuriBel
12.11.2020, 17:38
ну наверное затем, что вы ПРИСВАИВАЕТЕ переменной I значение 40, и пытаетесь ее (переменную) использовать в качестве условия IF. Двоеточие уберите.

Максим Ульянов
12.11.2020, 17:40
Спасибо)))

Максим Ульянов
13.11.2020, 10:57
Коллеги доброго дня ,Прошу не кидать тухлыми яблоками..51960
почему не происходит инициализация переменной в цикле FOR?
если инициализирую переменную выше цикла то все нормально работает...
может я что то в синтаксе не понимаю.

vniko
17.11.2020, 10:41
Максим, судя по предыдущему Вашему вопросу, после END_FOR стоит знак точка с запятой, которого не должно быть.
А так надо смотреть в отладке по шагам, почему не происходит инициализация.

GoodLuck
17.11.2020, 14:02
Подскажите, пожалуйста, как убрать букву "М". И что она означает?


Недавно тут задавали такой вопрос, к сожалению, не могу найти.

Евгений Кислов
17.11.2020, 14:15
Подскажите, пожалуйста, как убрать букву "М". И что она означает?


Недавно тут задавали такой вопрос, к сожалению, не могу найти.

https://www.owen.ru/forum/showthread.php?t=28167&p=305691&viewfull=1#post305691

DenisV
20.11.2020, 15:59
Добрый день!
Пытаюсь реализовать функцию инвертирования входов ПЛК 210 с помощью переключателей в веб визуализации. Сама функция выглядит следующем образом:
52114
aInvRs_DI (массив структур для панельки на экране)
aInvRs_DI[16].xButt - переменная переключателя
aInvRs_DI[16].dwColorBrick - переменная смены цвета индикатора
Вызов функции из программы выглядит так
TargetVars.stRightSide.xDi16:=funInvers(TargetVars .stRightSide.xDi16,aInvRS_DI[16].xButt,Color =>aInvRS_DI[16].dwColorBrick);
при компиляции выдает предупреждение:
'Application.TargetVars.stRightSide.xDi16' - не корректный объект для присваивания", вообще всё работает, как задумано. И если заменить таргет переменную на глобальную переменную, то выдаст то же самое предупреждение, а если задать переменную из plc_prg, то предупреждение отсутствует.
А вопрос вот собственно в чем: Насколько критично это предупреждение и почему оно возникает? Если оставить таргет переменную или глобальную какие могут быть последствия?

Евгений Кислов
20.11.2020, 16:10
Добрый день.
'Application.TargetVars.stRightSide.xDi16' - эта переменная, значение которой зависит только от состояния соответствующего дискретного входа.
Не очень понятно, что вы ожидаете, присваивая туда какое-то значение.

vniko
20.11.2020, 16:22
DenisV, насколько я помню, функция может иметь только одну выходную переменную - это сама функция (пусть специалисты меня поправят). У вас же выходных переменных - две. Хотя, я сам пробовал в функции дополнительно изменять глобальную переменную (естественно в вызове функции никакие выходные переменные не указывал) - всё работало как надо и не было ошибок.
Возможно, Вам более подошел бы функциональный блок.

Евгений Кислов
20.11.2020, 16:30
насколько я помню, функция может иметь только одну выходную переменную - это сама функция (пусть специалисты меня поправят).

Поправляю - такая возможность (VAR_OUTPUT для функций) появилась уже во второй редакции МЭК 61131-3.
В CODESYS V3.5 это поддержано (а вот в CoDeSys V2.3 - поддержано не было).
https://help.codesys.com/webapp/_cds_obj_function;product=codesys;version=3.5.16.0 #functions-with-additional-outputs

vniko
20.11.2020, 16:39
Евгений, спасибо за информацию. Уточните, а с какого сервис пака у функции появились дополнительные выходы, а то "вторая редакция" многим, наверное, ничего не говорит?

Евгений Кислов
20.11.2020, 16:45
Евгений, спасибо за информацию. Уточните, а с какого сервис пака у функции появились дополнительные выходы, а то "вторая редакция" многим, наверное, ничего не говорит?

Я не помню версий CODESYS V3.5, в которых бы это не поддерживалось.
Вторая редакция стандарта вышла в 2003 году.

Yaroslav_22
21.11.2020, 09:29
Здравствуйте, подскажите, пожалуйста, как сделать (какой элемент отвечает за это) что бы картинка менялась по ее ID (пул изображений с их ID создан)
CS3.5 SP14

Евгений Кислов
21.11.2020, 09:40
Здравствуйте, подскажите, пожалуйста, как сделать (какой элемент отвечает за это) что бы картинка менялась по ее ID (пул изображений с их ID создан)
CS3.5 SP14

Добрый день.
С помощью элемента Изображение.
Посмотрите пример:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/02_Concepts/11_3_04_Example_Animation_3511v2.projectarchive

Yaroslav_22
21.11.2020, 10:45
Добрый день.
С помощью элемента Изображение.
Посмотрите пример:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/02_Concepts/11_3_04_Example_Animation_3511v2.projectarchive

Спасибо! То что нужно

DenisV
23.11.2020, 08:58
Добрый день.
'Application.TargetVars.stRightSide.xDi16' - эта переменная, значение которой зависит только от состояния соответствующего дискретного входа.
Не очень понятно, что вы ожидаете, присваивая туда какое-то значение.

Как я уже писал, я хочу добиться инвертирования значения переменной привязанной ко входу. Тогда остается непонятным вопрос: почему при привязке к определенному входу переменной из области глобальных переменных возникает это же предупреждение, а при задании её из plc_prg нет ?

Евгений Кислов
23.11.2020, 09:02
Как я уже писал, я хочу добиться инвертирования значения переменной привязанной ко входу. Тогда остается непонятным вопрос: почему при привязке к определенному входу переменной из области глобальных переменных возникает это же предупреждение, а при задании её из plc_prg нет ?

У меня такого предупреждения не возникает.
Выложите, пожалуйста, простейший проект, на котором можно увидеть это сообщение.

DenisV
23.11.2020, 10:48
У меня такого предупреждения не возникает.
Выложите, пожалуйста, простейший проект, на котором можно увидеть это сообщение.

https://dropmefiles.com/RrwKL

В проекте использованы 5 вариантов задания переменной
В gvl.xDi13 и TargetVars.stRightSide.xDi17 возникает предупреждение
в остальных нет, почему так происходит? и почему возникла разница между
обычной глобальной переменной и глобальной переменной заданной как элемент массива?

Евгений Кислов
23.11.2020, 11:04
Предупреждения исчезнут, если в вашей программе закомментировать строки 2 и 10.
Тут, на мой взгляд, вопрос в том, почему 3 другие строки не вызывают предупреждений. Ответить на него я не могу - вероятно, это мелкая недоработка в CODESYS.

Я еще раз хочу обратить ваше внимание, что вы пытаетесь записывать что-то в переменные, привязанные к дискретным входам контроллера.
В момент привязки ко входам эти переменные становятся доступны только для чтения, потому что их значение начинает зависеть только от состояния соответствующего дискретного входа.

DenisV
23.11.2020, 11:31
Хорошо, я вас понял, спасибо за помощь!

DenisV
23.11.2020, 13:32
что-то мне везет на не очевидные предупреждения :D
столкнулся с таким предупреждением:
"Сравнение одного типа перечисления (MB_ERRORCODES) с другим (MB_ERRORCODES)"

aLinkControl[1]:=AO_D1_3001_MU210_501.byModbusError <> IoDrvModbus.MB_ErrorCodes.RESPONSE_SUCCESS;

Задача следующая: получить сигнал об отсутствии связи с устройством для записи в журнал.
Причем для устройства из шаблонов MU210-501 Версия: 3.5.11.7 есть такое предупреждение
А для не шаблонного устройства данное предупреждение не возникает, несмотря на то что применена та же самая логика.
Опять же всё работает корректно, но насколько критично это предупреждение ?

Евгений Кислов
23.11.2020, 13:44
что-то мне везет на не очевидные предупреждения :D
столкнулся с таким предупреждением:
"Сравнение одного типа перечисления (MB_ERRORCODES) с другим (MB_ERRORCODES)"

aLinkControl[1]:=AO_D1_3001_MU210_501.byModbusError <> IoDrvModbus.MB_ErrorCodes.RESPONSE_SUCCESS;

Задача следующая: получить сигнал об отсутствии связи с устройством для записи в журнал.
Причем для устройства из шаблонов MU210-501 Версия: 3.5.11.7 есть такое предупреждение
А для не шаблонного устройства данное предупреждение не возникает, несмотря на то что применена та же самая логика.
Опять же всё работает корректно, но насколько критично это предупреждение ?

Посмотрите здесь (нужная галочка) + вам надо IoDrvModbusTCP.MB_ErrorCodes.RESPONSE_SUCCESS;
https://youtu.be/IFUN4cYskRI?t=285

DenisV
26.11.2020, 14:40
Помогло, спасибо!

Спорягин Кирилл
28.11.2020, 13:44
Не получается скачать Codesys V3.5 SP11 Patch5 с сайта. Видимо, проблемы на сервере?

Евгений Кислов
28.11.2020, 13:52
Не получается скачать Codesys V3.5 SP11 Patch5 с сайта. Видимо, проблемы на сервере?

Да, у нас в эти выходные технические работы, к сожалению.
Можно скачать отсюда (https://owen.ua/files/download/PO/CODESYS/CODESYS_3.5_SP11_Patch5.zip).

Спорягин Кирилл
28.11.2020, 16:29
Скачал. Спасибо.
Но при установке возникают проблемы (см. снимок экрана).52225

Спорягин Кирилл
28.11.2020, 16:30
Соответственно CoDeSys не встает.
Запуск установщика осуществляю от имени администратора.

Спорягин Кирилл
28.11.2020, 17:06
Видимо, дело в необновленной Виндоус.
Устанавливаю обновления. Отпишусь.

Спорягин Кирилл
01.12.2020, 18:54
Видимо, дело в необновленной Виндоус.
Устанавливаю обновления. Отпишусь.

Вообщем, что-то было в паленой Виндоус.
Снес винду, поставил другую версию винды, все установилось.

Postoronniy
05.12.2020, 11:04
Добрый день! В CDS 3.5.5.7 не отображаются вкладки для соотнесения входов/выходов на Modbus слейвах. Пробовал переустанавливать, результата не дало. При этом в CDS 3.5.14.3 они есть. Версии COM, мастера, слейвов 3.5.4.0 в обоих проектах. Подскажите, пожалуйста, что можно сделать. 52336

Евгений Кислов
05.12.2020, 11:10
Добрый день.
Используйте актуальную для вашей модели СПК версию шаблонов - там эти вкладки есть:
https://ftp.owen.ru/CoDeSys3/04_Library/04_Components/Mx110Drivers_v3.5.4.13.package

Михаил_И
08.12.2020, 04:16
Доброе время суток, подскажите, где в codesys 3.5 настроить длину выравнивания структуры ? поясню, создаю структру вида
zagolovok :
for_bool : ARRAY[0..505] OF BYTE ;
for_INT : ARRAY[0..1] OF INT ;
for_REAL : ARRAY[0..24] OF REAL;
логично бы видеть ее длину = 506+4+100= 610 байт, но sizeoff показывает 612 -( как бы настроить выравнивание по 1 байту ? спасибо

Михаил_И
08.12.2020, 04:38
друзья , все нашел {attribute 'pack_mode' := '1'}
просто думал что где то галочку надо воткнуть. но нет, атрибут компилятора прям в структуре

lazy
10.12.2020, 15:14
Написал свою бибку для CDS3. Добавляю в проект, все внутренности видятся только через дополнительное пространство имен.
Например, хочу добавить в проект структуру из библиотеки. нужно объявлять так: <имя переменной>:<дополнительное имя бибки>.<имя структуры>;
а хочется так: <имя переменной>:<имя структуры>;

Кто знает, что и где подкрутить в библиотеке, чтобы без лишней бижутерии все объявлялось? :)

Евгений Кислов
10.12.2020, 16:36
Написал свою бибку для CDS3. Добавляю в проект, все внутренности видятся только через дополнительное пространство имен.
Например, хочу добавить в проект структуру из библиотеки. нужно объявлять так: <имя переменной>:<дополнительное имя бибки>.<имя структуры>;
а хочется так: <имя переменной>:<имя структуры>;

Кто знает, что и где подкрутить в библиотеке, чтобы без лишней бижутерии все объявлялось? :)

У вас при объявлении структуры, скорее всего, указан атрибут attribute ‘qualified_only’ (он устанавливается по умолчанию), который отвечает за это поведение.
И это правильно - потому что автор другой библиотеки может выбрать для одного из своих компонентов такое же имя, как и у вас - и пространство имен в этом случае позволит компилятору понять, что именно вы хотите объявить.

lazy
10.12.2020, 16:47
У вас при объявлении структуры, скорее всего, указан атрибут attribute ‘qualified_only’ (он устанавливается по умолчанию)

нет, никаких атрибутов ни где не указано. или он даже если его нет явно компилятором применяется? как отменить или какой может противоположный атрибут есть? страсть как неудобно все объявления перелопачивать. в других библиотеках же (например в ваших) такого же нет...

fatlortroll
10.12.2020, 16:54
Для типа IoDrvModbusTCP.ModbusTCPSlave_Diag в документации выстраивается такая иерархия наследования: ModbusTCPSlave <- ModbusTCPSlaveBase <- IoDrvModbusBase.ModbusSlaveBase , а в IoDrvModbusBase никакого ModbusSlaveBase не находится. Я так понимаю, он объявлен в закрытой части библиотеки?
Интересен он тем, что в нём, похоже, объявлены методы AllocChannels и FreeChannels. Если по первому методу ещё всплывает какая-то подсказка относительно входных переменных, то по второму -- увы, пусто. Хотелось бы знать, как можно добраться до этих скрытых методов, или до их документации, не забираясь вглубь бинарников.

Евгений Кислов
10.12.2020, 17:23
Для типа IoDrvModbusTCP.ModbusTCPSlave_Diag в документации выстраивается такая иерархия наследования: ModbusTCPSlave <- ModbusTCPSlaveBase <- IoDrvModbusBase.ModbusSlaveBase , а в IoDrvModbusBase никакого ModbusSlaveBase не находится. Я так понимаю, он объявлен в закрытой части библиотеки?
Интересен он тем, что в нём, похоже, объявлены методы AllocChannels и FreeChannels. Если по первому методу ещё всплывает какая-то подсказка относительно входных переменных, то по второму -- увы, пусто. Хотелось бы знать, как можно добраться до этих скрытых методов, или до их документации, не забираясь вглубь бинарников.

Уточните, пожалуйста, какую практическую задачу вы пытаетесь решить?
Чем вам не подходит настройка слэйва через дерево проекта?

Евгений Кислов
10.12.2020, 18:21
нет, никаких атрибутов ни где не указано. или он даже если его нет явно компилятором применяется? как отменить или какой может противоположный атрибут есть? страсть как неудобно все объявления перелопачивать. в других библиотеках же (например в ваших) такого же нет...

Попробуйте вот этот ключ оставить пустым или удалить.

52429

fatlortroll
11.12.2020, 08:00
> какую практическую задачу вы пытаетесь решить

Автоматизация настройки проекта. Скорее, с теоретической точки зрения интересно. Но если получится -- тоже хорошо будет.

> Чем вам не подходит настройка слэйва через дерево проекта?

Не знаю, как можно это автоматизировать.

Евгений Кислов
11.12.2020, 08:10
> какую практическую задачу вы пытаетесь решить

Автоматизация настройки проекта. Скорее, с теоретической точки зрения интересно. Но если получится -- тоже хорошо будет.

> Чем вам не подходит настройка слэйва через дерево проекта?

Не знаю, как можно это автоматизировать.

Вы можете использовать библиотеку OwenCommunication - она позволяет организовать обмен исключительно кодом, без настройки через дерево проекта.
https://owen.ru/forum/showthread.php?t=31816

fatlortroll
11.12.2020, 09:00
Спасибо, интересно, буду смотреть.

Cs-Cs
11.12.2020, 09:31
fatlortroll Чёрт! Вот это телепатия! )) Я вчера перетряхнул проект на OwenCommunication!
У меня в среднем в каждом проекте около 100 BOOL входов и 100 BOOL выходов.
Мои требования были такие:
а) Не привязывать переменные программного IO к дереву конфигурации. То есть, не вписывать туда все-все переменные IO, чтобы если в дереве надо что-то удалить или заменить, потом их не перенабивать руками (о том, что их можно выгрузить-загрузить в CSV я знаю).
б) Получать статус каждого устройства в дереве программно. То есть если у меня один модуль IO отвалится, я хочу про него знать. И даже в визуализации я делаю системную страницу, где показываю состояние всего IO аппаратно. Например, мне ж надо знать что у меня отвалился модуль термодатчиков - и аварийно отключать нагрев.
в) Ускорить опрос или сделать его контролируемым - чтобы точно знать, что и как будет опрашиваться и в какой последовательности.

В итоге в соотнесении IO я забираю одну-две переменную (например для модулей IO - битовую маску и счётчик входов), а потом прям в коде разбираю их побитно как мне надо. Если именится способ опроса устройства или что-то будет копипаститься между проектами, то код копипастить проще.
OCLка укорила опрос в 1,5 раза. Я вчера (как раз Евгению Кислову слал на мыло) написал под неё свою обёртку - массив, где задаются построчно данные, которые надо писать-читать, чтобы наглядно всё было.
Оно рработает, и работает хорошо! В далёком будущем я думаю для себя написать какую-то простую программку (может на Visual Basic), в которой можно будет создавать модули IO, их переменные и привязку к битам, а она мне будет генерировать тот самый код для опроса этого всего.
Прикладываю картинки, хвастаюсь:
Вот так обычно обращаются через OCL к устройствам 52430
Из-за этого получается жёсткая копипаста, в которой надо не забывать менять адреса и регистры: 52431
Я замутил структуру, которая у меня описывает один регистр. Получился аналог "Канал IO" в штатном Slave-устройстве CodeSys: 52432
Дальше описал все свои "каналы" в виде массива этих структур: 52433
Ну и всё, дальше циклически беру из массива нужные данные и даже FB опроса, и выполняю: 52434

Страница с инфой про IO выглядит у меня так: 52435
Инфу для IO и программы я беру вот так (тут канал 1 берётся из OCL, а каналы 2 и 3 - из штатного дерева устройств): 52436
И побитово я всё IO после OCL разбираю примерно так: 52437
Вот для формирования этого всего кода я в будущем хочу накатать скрипт, хоть какой-то =)

ИТОГО: OCL я буду применять для простого и быстрого опроса модулей IO в щите. А для внешних линий пока останусь на штатных средствах.
Сорри, меня понесло! Для меня OCL, моя обёртка, и идея набросать себе программу-скрипт для генерации кода опроса - это ща прям открытие! Не мог не поделиться! =)

lazy
11.12.2020, 10:13
Попробуйте вот этот ключ оставить пустым или удалить.

52429

Спасибо! Оставил ключ пустым и все заработало как надо )

fatlortroll
11.12.2020, 13:41
> набросать себе программу-скрипт для генерации кода опроса
Вроде как в CoDeSys 3.5 заявляют интеграцию с Python-ом, но я ещё в эту сторону только приглядываюсь.

borgivan
16.12.2020, 22:11
Коллеги, я создал шаблон устройства с интерфейсом, впилил его фоеймом, потом изменил некоторые условия прямоугольников да кнопок, и похоже, что инстанс не обновляет поведение . Когда меняю положение элементов в шаблоне, инстанс меняется, а вот с условиями в свойствах - как застыли. Может надо как-т обновлять проект, потому что каждый раз по новой все фреймы пересоздавать - не вариант вообще.

Евгений Кислов
16.12.2020, 22:13
Коллеги, я создал шаблон устройства с интерфейсом, впилил его фоеймом, потом изменил некоторые условия прямоугольников да кнопок, и похоже, что инстанс не обновляет поведение . Когда меняю положение элементов в шаблоне, инстанс меняется, а вот с условиями в свойствах - как застыли. Может надо как-т обновлять проект, потому что каждый раз по новой все фреймы пересоздавать - не вариант вообще.

Опишите, пожалуйста, подробно и пошагово, как воспроизвести проблему.

borgivan
16.12.2020, 22:23
Воспроизвести не пробовал. Но если подробнее: 1) Создал визуализацию: пара кнопок и рисунков 2) добавил интерфейс in_out 3) привязал переменные интерфейса к свойствам кнопок и картинок 4) на странице создал фрейм и туда вклячил этот шаблон 5) пошел в шаблон, поменял условия видимости, сохранил, перезалил проект 6) видимость кнопок не изменилась по новому условию 7) втупую привязал вход шаблона к параметру видимости, перезалил 8) в проекте форсом переменную пишу, которая передается в инстанс - по нулям

Евгений Кислов
16.12.2020, 22:34
У меня эта ситуация не повторяется - изменения сразу применяются.
Если выложите проект (где только этот фрейм и сразу понятно, куда жать и куда смотреть) - тогда могу посмотреть, в чем дело.

borgivan
16.12.2020, 22:45
Попробую ещё раз воспроизвести

borgivan
18.12.2020, 02:03
Коллеги, помогите разобраться с энергонезависимой памятью (PERSISTENT). Правильны ли мои размышления?

1) Инициализирую PERSISTENT переменную каким-то значением в блоке инициализации
2) Меняю её значение в программе
3) При последующих обновлениях софта переменная будет инициализироваться сохраненным в памяти значением, а не из блока инициализации

Есть ли какие-то хитрости и подводные камни?

Евгений Кислов
18.12.2020, 09:17
Коллеги, помогите разобраться с энергонезависимой памятью (PERSISTENT). Правильны ли мои размышления?

1) Инициализирую PERSISTENT переменную каким-то значением в блоке инициализации
2) Меняю её значение в программе
3) При последующих обновлениях софта переменная будет инициализироваться сохраненным в памяти значением, а не из блока инициализации

Есть ли какие-то хитрости и подводные камни?

Размышления правильные, единственный нюанс - если сам список PERSISTENT переменных как-то изменится, то все переменные будут проинициализированы заново значениями из области объявления.

Спорягин Кирилл
21.12.2020, 17:10
При работе с CDS V3.5 SP11 Patch 5 постоянно самопроизвольно запускается онлайн справка.
Это что может быть?

Евгений Кислов
21.12.2020, 17:26
При работе с CDS V3.5 SP11 Patch 5 постоянно самопроизвольно запускается онлайн справка.
Это что может быть?

Я слышал о таком один раз, но сам не наблюдал.
Инструменты - Опции - Справка - если снять галку, то должно помочь.

Алексей24
22.12.2020, 13:49
Доброго времени суток! Пытаюсь настроить обмен в режиме Modbus TCP Master по видео на оф. Ютуб канале Овен. Контроллер ПЛК200, Модуль МВ210-101. Вроде все делаю как показано, использую шаблон. При запуске, как я понял, нет опроса слейва, пишет " Не запущена шина". В чем может быть проблема?

Евгений Кислов
22.12.2020, 13:54
Доброго времени суток! Пытаюсь настроить обмен в режиме Modbus TCP Master по видео на оф. Ютуб канале Овен. Контроллер ПЛК200, Модуль МВ210-101. Вроде все делаю как показано, использую шаблон. При запуске, как я понял, нет опроса слейва, пишет " Не запущена шина". В чем может быть проблема?

Добрый день.
Вероятнее всего - в ошибке при указании сетевых настроек ПЛК или модуля.

Алексей24
22.12.2020, 13:59
Добрый день.
Вероятнее всего - в ошибке при указании сетевых настроек ПЛК или модуля.

Можно поподробнее? Просто нет опыта работы ни в CDS ни с ПЛК. IP адрес указан неверно?

Евгений Кислов
22.12.2020, 14:02
Можно поподробнее? Просто нет опыта работы ни в CDS ни с ПЛК. IP адрес указан неверно?

1. Уточните, пожалуйста, как соединены ПЛК и модуль (напрямую или через коммутатор, как порт ПЛК используется).
2. Выложите проект CODESYS
3. Выложите скриншоты сетевых настроек ПЛК (из web-конфигуратора, вкладка Сеть/Интерфейсы) и модуля (из ОВЕН Конфигуратор)

Алексей24
22.12.2020, 14:40
Eth1 модуля с Eth2 ПЛК. Eth1 ПЛК с компьютером.

Евгений Кислов
22.12.2020, 14:44
У вас на скриншоте текущий IP-адрес модуля 192.168.1.99, а в проекте CODESYS задан 10.2.11.122.
Нужно и в CODESYS прописать 192.168.1.99.

Алексей24
22.12.2020, 14:48
У вас на скриншоте текущий IP-адрес модуля 192.168.1.99, а в проекте CODESYS задан 10.2.11.122.
Нужно и в CODESYS прописать 192.168.1.99.

Да, действительно. Поменял, но опрос все равно не идет. Перезагрузил CDS и все заработало. Спасибо за помощь!

fatlortroll
28.12.2020, 08:55
День добрый. В справке CoDeSys указано, что условные прагмы могут применяться только в реализации POU, но не в декларации. А если нужно именно в декларации? В частности, я хочу по разному инициализировать переменную в зависимости от разрядности целевой системы (x32 или x64).

Евгений Кислов
28.12.2020, 09:01
День добрый. В справке CoDeSys указано, что условные прагмы могут применяться только в реализации POU, но не в декларации. А если нужно именно в декларации? В частности, я хочу по разному инициализировать переменную в зависимости от разрядности целевой системы (x32 или x64).

Добрый день.
В декларации, видимо, никак не получится - остается только переносить инициализацию в тело POU.
А какие ПЛК вы используете?

fatlortroll
28.12.2020, 09:07
Сейчас пользую СПК1xx.

Евгений Кислов
28.12.2020, 09:22
Сейчас пользую СПК1xx.

А почему вы тогда закладываетесь на 64-битный рантайм?
И как от его разрядности могут зависить значения инициализации?

fatlortroll
28.12.2020, 09:42
> почему вы тогда закладываетесь на 64-битный рантайм?
Пишу библиотеку, которая будет в дальнейшем использоваться на прочих устройствах с, возможно, отличающейся архитектурой.

> как от его разрядности могут зависить значения инициализации?
MAX_VALUE.

Евгений Кислов
28.12.2020, 09:45
MAX_VALUE.

Честно говоря, это не объясняет ситуацию.
Размер типов данных не зависит от разрядности рантайма, за исключением указателей - но для них есть спецтипы:
https://help.codesys.com/webapp/_cds_datatype_uxint_xword;product=codesys;version= 3.5.16.0

fatlortroll
28.12.2020, 10:03
Есть там такая неприятность, как __XWORD, например. Много библиотек завязаны на его использование. Вот я и захотел чуть больше определённости.

Пьер
28.12.2020, 14:46
Здравствуйте! Есть ли возможно в CDS 3.5 установить защиту от копирования программы или запаролить какую нибудь част программы, например step/ Спасибо!

VladGC
28.12.2020, 15:27
Здравствуйте! Есть ли возможно в CDS 3.5 установить защиту от копирования программы или запаролить какую нибудь част программы, например step/ Спасибо!
Где то есть библиотека для защиты, а еще есть вот такой док:
https://ftp.owen.ru/CoDeSys3/98_Books/CodesysSecurityWhitepaper_ru.pdf

fatlortroll
28.12.2020, 15:53
Project -> Project Settings -> Security
Наверное.

Евгений Кислов
28.12.2020, 16:27
Здравствуйте! Есть ли возможно в CDS 3.5 установить защиту от копирования программы или запаролить какую нибудь част программы, например step/ Спасибо!

Выше, в принципе, уже все написали, добавлю только про "запаролить часть программы":
https://youtu.be/yhfUygKHYU4

TATARin
29.12.2020, 17:34
Здравствуйте форумчане. Я пытаюсь конвертировать библиотеку ПИД_СЕ_12.10.2012.lib из CoDeSys2.3(ПЛК110-32) в CoDeSys3(ПЛК210-03), но при конвертации требует какой-то пароль - в описании к библиотеки нет пароля. Кто может подсказать где искать?52842

Евгений Кислов
29.12.2020, 17:37
Здравствуйте форумчане. Я пытаюсь конвертировать библиотеку ПИД_СЕ_12.10.2012.lib из CoDeSys2.3(ПЛК110-32) в CoDeSys3(ПЛК210-03), но при конвертации требует какой-то пароль - в описании к библиотеки нет пароля. Кто может подсказать где искать?52842

Добрый день.
Можете уточнить этот вопрос у автора библиотеки:
https://owen.ru/forum/member.php?u=1089
И заодно более свежую версию библиотеки попросить.

Gatling
09.01.2021, 01:38
Всем добрый день. Столкнулся с проблемой, есть написанная программа для плк, которая уже работает, она управляет конвейерами. Нужно реализовать ручной запуск конвейеров, для проверок их работы и т.д., вне зависимости от основной программы, которая циклично выполняется. Как мне вне зависимости от нее, подавать сигнал на переменные? Я должен создать в конфигурации задач что-то , что будет приоритетнее основного процесса? Примерно хотелось бы чтобы это выглядело так, человек жмёт на панели оператора кнопку, после этого действия основой программы прекращаются, и появляется возможность ручного управления. Не совсем понимаю как пользоваться конфигуратором задач.

Евгений Кислов
09.01.2021, 08:15
Добрый день.
В вашем случае нет необходимости работать с конфигурацией задач.
Нужно внести изменения в логику работы основной программы.

Например:




IF xIsAutoMode THEN

// действия в автоматическом режим


ELSE

// действия в ручном режиме

END_IF

Gatling
09.01.2021, 13:21
Добрый день.
В вашем случае нет необходимости работать с конфигурацией задач.
Нужно внести изменения в логику работы основной программы.

Например:




IF xIsAutoMode THEN

// действия в автоматическом режим


ELSE

// действия в ручном режиме

END_IF




А на языке FBD это как будет выглядеть?

ASo
09.01.2021, 14:07
Например, с переходами.

Gatling
09.01.2021, 14:21
Например, с переходами.

А как в переходе указать нужный Нетворк?

ASo
09.01.2021, 14:21
Меткой нетворка.

Gatling
09.01.2021, 14:57
Меткой нетворка.

Как это выглядит? Я с этим не сталкивался просто. И ещё вопрос, у меня есть три переменные, которые отвечают за запуск конвейеров, посредством сигналов с датчиков, соответственно если я в первом нетворке напишу условие перехода на , допустим, последний Нетворк, в котором будут условия запуска в ручном режиме тех же переменных на запуск конвейеров, то задача ПЛК же выполняется циклично, и если эти выходы в конечном нетворке не будут активны, то и запуска не будет по предыдущим условиям?т.е. надо чтоб этот Нетворк с ручным режимом работал только при переходе? Надеюсь смог объяснить свою мысль :D

ASo
09.01.2021, 20:20
Вот так, аналогично ST
52943

Gatling
11.01.2021, 13:28
Вот так, аналогично ST
52943

Спасибо большое.

Yaroslav_22
11.01.2021, 21:54
Здравствуйте,
столкнулся с такой проблемой - установил CS3.5 sp14 p3 на один ПК, сделал проект с визуализацией на СПК107 м01, подтянул картинки, мною же нарисованные. За архивировал проект ВЕСЬ. Установил такое же ПО на другой машине, разархивировал проект ВЕСЬ на другом ПК, но картинки не подтянулись, прописал к ним путь еще раз, но они так и не появились на экране. Может в настройках ПО на втором компе где то какую то галочку забыл поставить? что можно проверить еще?

Евгений Кислов
12.01.2021, 06:25
Здравствуйте,
столкнулся с такой проблемой - установил CS3.5 sp14 p3 на один ПК, сделал проект с визуализацией на СПК107 м01, подтянул картинки, мною же нарисованные. За архивировал проект ВЕСЬ. Установил такое же ПО на другой машине, разархивировал проект ВЕСЬ на другом ПК, но картинки не подтянулись, прописал к ним путь еще раз, но они так и не появились на экране. Может в настройках ПО на втором компе где то какую то галочку забыл поставить? что можно проверить еще?

Добрый день.
Что значит "не подтянулись"?
Выложите скриншот пула изображений, сделанный на "другом ПК".

fatlortroll
12.01.2021, 11:45
День добрый.
Есть ли возможность для функционального блока, имплементирующего два (к примеру) интерфейса с одинаковыми по сигнатуре методами, различить их вызовы?
Если да, то как это сделать.

Евгений Кислов
12.01.2021, 12:50
День добрый.
Есть ли возможность для функционального блока, имплементирующего два (к примеру) интерфейса с одинаковыми по сигнатуре методами, различить их вызовы?
Если да, то как это сделать.

Добрый день.
Можете более подробно описать ваш вопрос на конкретном примере?

capzap
12.01.2021, 13:11
День добрый.
Есть ли возможность для функционального блока, имплементирующего два (к примеру) интерфейса с одинаковыми по сигнатуре методами, различить их вызовы?
Если да, то как это сделать.

если есть схожие методы, может поможет расширение одного интерфейса другим, тогда и не придется решать поставленную задачу

fatlortroll
12.01.2021, 16:09
Есть два интерфейса, декларирующие методы с одинаковой сигнатурой (совпадающие имена методов, входные параметры и тип возвращаемого значения). И есть функблок, имплементирующий оба этих интерфейса. При реализации этого метода в функблоке компилятор не выдаёт предупреждений, но как понять, к какому из интерфейсов этот вызов будет относиться?

Почитал интернеты -- похоже, так делать плохая практика.

Евгений Кислов
12.01.2021, 16:29
Почитал интернеты -- похоже, так делать плохая практика.

Безусловно.


как понять, к какому из интерфейсов этот вызов будет относиться?

Можно просто проверить на простейшем примере в симуляторе.
Я бы предположил, что будет использоваться тело метода того интерфейса, который был указан первым во вкладке IMPLEMENTS.

fatlortroll
13.01.2021, 10:47
И снова здравствуйте. Теперь вопросы доставляет оператор __QUERYINTERFACE , а именно:
При сборке и запуске примера (https://help.codesys.com/webapp/_cds_operator_queryinterface;product=codesys;versi on=3.5.16.0) под СПК107 в PLC_PRG переменная xResult2 сначала принимает значение FALSE, затем, при присвоении переменной flag значения FALSE переключается в TRUE, и до перезагрузки ПЛК (или эмулятора) уже своего значения не меняет. Корректно ли такое поведение оператора __QUERYINTERFACE , или я не понимаю, как он работает?

Евгений Кислов
13.01.2021, 11:26
Все работает корректно.

fatlortroll
13.01.2021, 11:39
Т.е. при изменении flag с TRUE на FALSE, и обратно, xResult2 тоже изменяется? В runtime?

Евгений Кислов
13.01.2021, 11:54
Т.е. при изменении flag с TRUE на FALSE, и обратно, xResult2 тоже изменяется? В runtime?

При первом изменении с TRUE на FALSE - изменяется.
При последующих - нет.
Это корректное поведение.

fatlortroll
13.01.2021, 11:56
А можете объяснить логику такого поведения? Мне в голову пока ничего не приходит.

Евгений Кислов
13.01.2021, 12:21
А можете объяснить логику такого поведения? Мне в голову пока ничего не приходит.

При приведении itfbase2 к itfbase1 происходит изменение itfderived2, потому что он наследуется от itfbase2 - в этот момент все три ссылки становятся одинаковыми.
Никакие дальнейшие действия в программе уже не влияют на этот факт.

fatlortroll
13.01.2021, 12:54
Т.е. вызов __QUERYINTERFACE производит именно приведение, а не тестирует его возможность?

Евгений Кислов
13.01.2021, 13:02
Т.е. вызов __QUERYINTERFACE производит именно приведение, а не тестирует его возможность?

Вы выше приводили ссылку на онлайн-справку - там все написано:


At runtime, the operator executes a type conversion of an interface reference into another type.

fatlortroll
13.01.2021, 13:10
Вот я-же слепой! Сколько раз перечитывал...
Спасибо, буду думать теперь, как с этим жить.

ppaxan
14.01.2021, 07:31
Добрый день, в документе "Руководство пользователя OwenCloud 1.07" в разделе 5.11 указано что подключение к OwenCloud контроллеров СПК107 М01 через символьную кофигурацию возможно с прошивки 1.1.0611.1056. Для данной прошивки использован таргет файл OwenTargets-3.5.11.50-14, но в поекте компонент OwenCloud-3.5.11.5001 интерфейс имеет вид связи по ModbusTCP, в чем может быть проблема?
53001 53002 53003 53004

Евгений Кислов
14.01.2021, 07:55
Добрый день.
Вам, вероятно, надо обновить таргет в проекте (Device - Обновить устройство).

ppaxan
14.01.2021, 08:52
Я пробовал это сделать до версии 3.5.11.57, но почему-то Codesys автоматически ставит версию 3.5.14.34 и вчера была ошибка компиляции, сегодня как ни странно компиляция проходит. Использование версии таргет файла 3.5.14.34 в Codesys 3.5.11 не вызывет некорректной работы проекта и его загрузки в ПЛК? Пока нет возможности протестировать.

Евгений Кислов
14.01.2021, 09:08
Я пробовал это сделать до версии 3.5.11.57, но почему-то Codesys автоматически ставит версию 3.5.14.34 и вчера была ошибка компиляции, сегодня как ни странно компиляция проходит. Использование версии таргет файла 3.5.14.34 в Codesys 3.5.11 не вызывет некорректной работы проекта и его загрузки в ПЛК? Пока нет возможности протестировать.

Какая у вас версия прошивки?

ppaxan
14.01.2021, 09:18
Текущая 1.0.1229.1031, соответственно планировал обновить до 1.1.0611.1056

ppaxan
14.01.2021, 09:24
дико извиняюсь что встреваю в диалог, но как то далеко ушли от основной проблемы
ключевой момент вроде: "компонент OwenCloud-3.5.11.5001 интерфейс имеет вид связи по ModbusTCP", насколько я понял из-за этого человек боится сделать экспорт символьной конфигурации. А был ли мальчик, в чем проявляется это схожесть с модбас, вроде порт 1502 а не просто 502

Я так понимаю от этого зависит конфигурирование непосредственно в OwenCloud либо выбираешь тип программируемый контроллер с возможностью экспорта символьной конфигурации, либо выбирать ПЛК по ModbusTCP и нужно забивать параметры приема/передачи в ручную.

capzap
14.01.2021, 09:29
да, я посмотрел в документации, для автоматического переноса символьной конфигурации не хватает пароля и адреса шлюза

Евгений Кислов
14.01.2021, 09:51
Текущая 1.0.1229.1031, соответственно планировал обновить до 1.1.0611.1056

Тогда вам нужно использовать CODESYS V3.5 SP11 Patch 5 и соответствующую версию таргет-файла (3.5.11.57).

ppaxan
14.01.2021, 10:49
Ясно спасибо, а есть мысли почему версия таргет-файла 3.5.11.57 не выбирается? Может есть еще какой способ.

Евгений Кислов
14.01.2021, 12:50
Ясно спасибо, а есть мысли почему версия таргет-файла 3.5.11.57 не выбирается? Может есть еще какой способ.

Что значит "не выбирается"?
Приложите скриншоты или видео, пожалуйста.

stskr
15.01.2021, 04:13
Как посмотреть исходный код библиотеки в codesys 3.5?
Например, я знаю, что библиотека oscat_basic_333 открытая.
Открываю ее как проект, а исходные коды не доступны.

Евгений Кислов
15.01.2021, 04:43
Как посмотреть исходный код библиотеки в codesys 3.5?
Например, я знаю, что библиотека oscat_basic_333 открытая.
Открываю ее как проект, а исходные коды не доступны.

Покажите это скриншотом, пожалуйста..

stskr
15.01.2021, 11:56
Вот, во вложении
53023

Евгений Кислов
15.01.2021, 12:52
Внизу слева надо нажать на вкладку POU.

killa1988
15.01.2021, 14:30
Добрый день уважаемые форумчане!!!
Не могли бы поделиться советом как реализовать считывание нескольких переменных с выводом на экран СПК в заданные промежутки времени с панели???
Заранее благодарен.

Евгений Кислов
15.01.2021, 14:39
Добрый день уважаемые форумчане!!!
Не могли бы поделиться советом как реализовать считывание нескольких переменных с выводом на экран СПК в заданные промежутки времени с панели???
Заранее благодарен.

Добрый день.
Уточните, о какой панели речь.

killa1988
15.01.2021, 14:48
Добрый день.
Уточните, о какой панели речь.

Панель СПК110

Евгений Кислов
15.01.2021, 14:51
Панель СПК110

То есть один СПК считывает данные с другого СПК?
Вы можете описать задачу более подробно?

killa1988
15.01.2021, 14:57
То есть один СПК считывает данные с другого СПК?
Вы можете описать задачу более подробно?

Есть погодозависимая прога, с неё на дисплей нужно вывести значение снижения температуры подачи в заданные интервалы времени(период энергосбережения) относительно заданного оператором графика температуры подачи

killa1988
15.01.2021, 14:59
то есть - задаём время и в этом промежутке должен выводится процент снижения температуры

Евгений Кислов
15.01.2021, 16:42
И что именно в данный момент в рамках данной задачи у вас вызывает затруднения?

murzik
15.01.2021, 23:56
доброго времечка. Подскажите, в библиотеке OwenPidRegs для кодесис 3.5 коэффициенты ПИД-регулятора совпадают с коэффициентами в ТРМ210, ТРМ212? Можно оттуда срисовать, или надо автонастройку запускать?

Евгений Кислов
16.01.2021, 07:11
доброго времечка. Подскажите, в библиотеке OwenPidRegs для кодесис 3.5 коэффициенты ПИД-регулятора совпадают с коэффициентами в ТРМ210, ТРМ212? Можно оттуда срисовать, или надо автонастройку запускать?

Самый правильный вариант - попробовать оба варианта (с запуском АНР и настройками из ТРМ) и оценить качество регулирования по нужным критериям (амплитуда, время переходного процесса, точность выхода на уставку).

killa1988
18.01.2021, 08:52
И что именно в данный момент в рамках данной задачи у вас вызывает затруднения?

Затрудняет то, как сделать кнопку с выбором диапазона времени в который будет отображаться этот процент снижения

Евгений Кислов
18.01.2021, 08:55
Затрудняет то, как сделать кнопку с выбором диапазона времени в который будет отображаться этот процент снижения

В CODESYS есть элемент выбора даты-времени, проценты можно рассчитать в коде.

53056

killa1988
18.01.2021, 08:58
В CODESYS есть элемент выбора даты-времени, проценты можно рассчитать в коде.

53056

понял, спасибо!

fatlortroll
19.01.2021, 16:09
День добрый. Подскажите пожалуйста толковую литературу (можно и на английском) с описанием архитектуры Common Behaviour Model для CoDeSys 3.5.
Да, есть справка и online-help, но там всё как-то разрозненно, не складывается в голове полной картины.
В частности, не ясны связи функблоков Behaviour Model (ActionController, TimingController, BehaviourModel) с функблоками Edge Triggered и Level Controlled. Каковым должно быть наполнение самодельного функблока для корректного взаимодействия с логикой CBM? Требуется ли ещё какие элементы внешней обвязки для соответствия логике и архитектуре CBM?

Евгений Кислов
19.01.2021, 16:22
Добрый день.
На базовом уровне:

Толковая литература на английском (https://plcopen.org/system/files/downloads/plcopen_compliant_libraries_version_1.0.pdf) + перевод (https://ftp.owen.ru/CoDeSys3/98_Books/plcopen_compliant_libraries_v10_ru.pdf)

По конкретной обвязке (библиотека Common Behaviour Model) - только в справке, насколько я знаю:
https://help.codesys.com/webapp/yZZoqaSNWq1cHjbGwGAnZjRnqrA%2Ffld-Common-Behaviour-Model;product=CommonBehaviourModel;version=3.5.15. 0

fatlortroll
19.01.2021, 16:28
Спасибо.
Т.е. при разработке, например, OwenCommunication (заявлена как CBM-совместимая) вы опирались на вышеуказанную литературу? Или есть ещё, что можно (нужно) читать?

Евгений Кислов
19.01.2021, 16:29
Спасибо.
Т.е. при разработке, например, OwenCommunication (заявлена как CBM-совместимая) вы опирались на вышеуказанную литературу? Или есть ещё, что можно (нужно) читать?

Да, мы опирались на вышеуказанную литературу. Другой литературы порекомендовать не могу.
Разве что Styleguide от Siemens (п. 9) - но там примерно все то же самое, что и у PLCopen, только более сжато:
https://support.industry.siemens.com/cs/document/109478084/programming-styleguide-for-s7-1200-1500?lc=en-ww

fatlortroll
19.01.2021, 16:43
Спасибо, буду разбираться.

Gatling
19.01.2021, 20:31
Меткой нетворка.

Здравствуйте ещё раз) Я попробовал организовать это так, как на скриншоте, и при загрузке проекта в ПЛК, а если точнее, после активации бита HandOn на панели оператора, я не вижу изменений бита в онлайне ПЛК, и через некоторое время он перезагружается. Что-то не так сделал?53080

Евгений Кислов
19.01.2021, 20:39
Вы организовали бесконечный цикл. Контроллер перезагружается по сторожевому таймеру.

Gatling
19.01.2021, 20:42
Вы организовали бесконечный цикл. Контроллер перезагружается по сторожевому таймеру.

А как правильно это организовать?

Евгений Кислов
19.01.2021, 20:44
Правильно из одной метки переходить в другую, а не в ту же самую или выходить из нее через RETURN.

Gatling
19.01.2021, 23:54
Правильно из одной метки переходить в другую, а не в ту же самую или выходить из нее через RETURN.

Спасибо за ответ. А как правильно это написать, если мне нужно чтобы при активации бита (кнопкой на панели) выполнялся код именно прописанный в метке, а все что вне метки - нет? Просто ставить в начале переход на метку, а в конце выход с неё? Или после выхода с метки дальнейший код начнет выполняться?

Евгений Кислов
20.01.2021, 06:41
Просто ставить в начале переход на метку, а в конце выход с неё?

Да, именно так. (если под выходом подразумевается оператор RETURN)

fatlortroll
21.01.2021, 08:13
Добрый день. Подскажите пожалуйста, OwenCommunication поддерживает (официально) создание нескольких Slave-устройств (с разными адресами) на одном физическом интерфейсе?

Евгений Кислов
21.01.2021, 08:17
Добрый день. Подскажите пожалуйста, OwenCommunication поддерживает (официально) создание нескольких Slave-устройств (с разными адресами) на одном физическом интерфейсе?

Добрый день.
Вы, очевидно, про MB_SerialSlave?
Какую именно задачу вы пытаетесь решить?

fatlortroll
21.01.2021, 08:31
> про MB_SerialSlave?
Да, про него.

> Какую именно задачу вы пытаетесь решить?
Сэмулировать несколько частотных преобразователей одним ПЛК. У них ещё есть разрывы в адресах регистров, но это, как я понял, можно обработать, анализируя структуру MB_REQ_INFO.

Евгений Кислов
21.01.2021, 08:37
> про MB_SerialSlave?
Да, про него.

> Какую именно задачу вы пытаетесь решить?
Сэмулировать несколько частотных преобразователей одним ПЛК. У них ещё есть разрывы в адресах регистров, но это, как я понял, можно обработать, анализируя структуру MB_REQ_INFO.

Как раз для таких целей мы добавили специальную обработку адреса 255.
Если поставить блоку адрес 255, то он отвечает на запросы с любым Slave ID, "притворяясь" сразу всеми слэйвами шины.

fatlortroll
21.01.2021, 08:43
Да вот, на все адреса мне-бы и не надо, чтоб отвечал -- на том интерфейсе ещё могут жить устройства.
Я предполагал, что можно создать несколько экземпляров MB_SerialSlave с нужными usiSlaveId, и отдать им один дескриптор порта. А там уже для каждого выполнять свой анализ переданной Master-ом информации.

Евгений Кислов
21.01.2021, 08:48
Сэмулировать несколько частотных преобразователей


на том интерфейсе ещё могут жить устройства

Если у вас сейчас отладка (судя по первому сообщению) - то остальные слэйвы, вероятно, можно временно отключить.

Вызывать одновременно несколько экземляров ФБ с одним дескриптором нельзя - в каждый момент времени должен быть активен только один из них.

fatlortroll
21.01.2021, 09:03
Ясно, спасибо. Буду дальше думать, как решить задачу.

fatlortroll
21.01.2021, 12:50
Причём, что самое обидное, CoDeSys что второй, что третий, штатными средствами поддерживают работу нескольких Modbus-slave на одном интерфейсе. Но у штатных средств не хватает гибкости в настройках, какая есть у ваших библиотек.

Если бы губы Никанора Ивановича да приставить к носу Ивана Кузьмича, да взять сколько-нибудь развязности, какая у Балтазара Балтазарыча...

Евгений Кислов
21.01.2021, 13:04
что второй, что третий, штатными средствами поддерживают работу нескольких Modbus-slave на одном интерфейсе

К сожалению, вы ошибаетесь - попробуйте добавить в Modbus COM два Modbus_Serial_Device и посмотрите, что произойдет.

fatlortroll
21.01.2021, 13:06
А, да, про третий я ляпнул безосновательно, его так подробно не тестировал пока.
Тогда вдвойне обидно -- старый CoDeSys может больше, чем новый! :-D

Евгений Кислов
21.01.2021, 13:07
А, да, про третий я ляпнул безосновательно, его так подробно не тестировал пока.
Тогда вдвойне обидно -- старый CoDeSys может больше, чем новый! :-D

Дело в том, что в старом CoDeSys в принципе не было встроенного драйвера Modbus и он написан нашим разработчиком.
В CODESYS V3.5 используется уже стандартный драйвер от разработчиков среды.

fatlortroll
21.01.2021, 13:41
> в старом CoDeSys в принципе не было встроенного драйвера Modbus и он написан нашим разработчиком
Во как! Сурово. Хотя мне сложно представить, зачем вообще нужен CoDeSys, если в нём нет поддержки Modbus. Почти всё промоборудование на Modbus-е.

ASo
21.01.2021, 13:58
Так и в новом КДС этот драйвер написан через.... вобщем, криво.

Евгений Кислов
21.01.2021, 13:59
Так и в новом КДС этот драйвер написан через.... вобщем, криво.

А какие конкретно к нему претензии?

fatlortroll
21.01.2021, 14:16
Не может больше одного Slave-а на физический порт! :-D

Вот, по результатам сформировался списочек хотелок к OwenCommunication:
1. При указании usiSlaveId в 255 по аналогии с массивом паттернов запрещённых запросов организовать массив разрешённых адресов;
2. При указании usiSlaveId в 255 возможность определять, для какого адреса пришёл запрос;
3. И... И всё. Остальное я сам сделаю. :-D

Евгений Кислов
21.01.2021, 14:24
Вы можете добавить больше информации насчет того, зачем вам это нужно?
Прямо с конкретными примерами использования.

fatlortroll
21.01.2021, 14:34
Более точная эмуляция нескольких Slave-устройств на шине, при наличии на ней ещё и нескольких физических Slave-ов.

Если подробнее -- то сейчас я разрабатываю устройство, в котором будет несколько частотников, и модулей ввода и вывода. Для макета проще (и дешевле) собрать эмуляцию этих частотников, чем прикручивать сами частотники + двигатели (немаленькие по габаритам). При реализации тех моих хотелок для OwenCommunication я-бы в один ПЛК под CoDeSys 3 загнал эмулятор всех частотников, что сократило бы массогабаритные показатели макета до чуть ли не карманных. Ну и возможность этим эмулятором выставлять на шину любую комбинацию ошибок, например, тех частотников -- тоже большой плюс.

Можно, конечно, закупить мешок ПЛК, по одному на каждый эмулируемый частотник, но уже не так красиво, и финансово.

Евгений Кислов
21.01.2021, 14:50
Более точная эмуляция нескольких Slave-устройств на шине, при наличии на ней ещё и нескольких физических Slave-ов.

Если подробнее -- то сейчас я разрабатываю устройство, в котором будет несколько частотников, и модулей ввода и вывода. Для макета проще (и дешевле) собрать эмуляцию этих частотников, чем прикручивать сами частотники + двигатели (немаленькие по габаритам). При реализации тех моих хотелок для OwenCommunication я-бы в один ПЛК под CoDeSys 3 загнал эмулятор всех частотников, что сократило бы массогабаритные показатели макета до чуть ли не карманных. Ну и возможность этим эмулятором выставлять на шину любую комбинацию ошибок, например, тех частотников -- тоже большой плюс.

Можно, конечно, закупить мешок ПЛК, по одному на каждый эмулируемый частотник, но уже не так красиво, и финансово.

Если речь исключительно об эмуляции - то, на мой взгляд, проще имитировать это на ПК с помощью MasterOPC Universal Modbus Server от Инсат.
Тогда будет и несколько слэйвов на одном интерфейсе, и лог запросов.

ASo
21.01.2021, 14:56
А какие конкретно к нему претензии?
Я их уже приводил.
В режиме slave на контроллере не возможно записать по сети данные в Q или прочитать из I. Что делает этот драйвер бессмысленным по очевидной причине.

fatlortroll
21.01.2021, 14:58
А если делать строго наоборот: читать из Q, писать в I?

fatlortroll
21.01.2021, 15:01
> проще имитировать это на ПК с помощью MasterOPC Universal Modbus Server от Инсат

Можно и так, но хотелось весь макет на одной картонке собрать.

ASo
21.01.2021, 15:12
А если делать строго наоборот: читать из Q, писать в I?

Как Вы будете читать и менять значение (скажем, уставку) по сети и с экрана?

fatlortroll
21.01.2021, 15:14
А, хотелось, как во втором CoDeSys, чтобы один регистр можно было и читать, и писать?

ASo
21.01.2021, 15:55
А по другому часто бессмысленно.

MechMan
21.01.2021, 16:30
Евгений, добрый день. Не знаю где задать вопрос. Подскажите, при управлении водяным отоплением с ПЛК210 через термоголовки, лучше использовать APID_PWM? Или достаточно ON_OFF_HIST_REG? Я так понимаю система сильно инерционная, при простом шиме будет очень большой разброс. Где бы посмотреть пример? В системах KNX часто применяют ШИМ регулирование с периодом 10-15 минут. APID_PWM так может?

Евгений Кислов
21.01.2021, 16:30
Я их уже приводил.
В режиме slave на контроллере не возможно записать по сети данные в Q или прочитать из I. Что делает этот драйвер бессмысленным по очевидной причине.

Это реализовали в SP15 - будет доступно в следующей прошивке наших контроллеров.
Действительно, 3S потребовалось много времени на эту доработку - но скоро эта претензия перестанет быть справедливой.

fatlortroll
21.01.2021, 16:37
И всё же, как вы оцениваете возможность реализации тех двух пунктов из моих (не только) хотелок для OwenCommunication? Или желать этого мне больше не стОит?

Евгений Кислов
21.01.2021, 16:40
И всё же, как вы оцениваете возможность реализации тех двух пунктов из моих (не только) хотелок для OwenCommunication? Или желать этого мне больше не стОит?

По моей оценке - эти пункты нужны только лично вам в вашем конкретном специфическом случае, причем исключительно на этапе отладки проектного решения.
Я добавлю их в общий список пожеланий, но приоритет у них по приведенной выше причине будет довольно низкий.

И пока не увидел объяснения потребности в этом:


При указании usiSlaveId в 255 по аналогии с массивом паттернов запрещённых запросов организовать массив разрешённых адресов

fatlortroll
21.01.2021, 16:43
> И пока не увидел объяснения потребности в этом

При наличии на шине других Slave-ов не отзываться на запросы к ним.

Евгений Кислов
21.01.2021, 16:46
> И пока не увидел объяснения потребности в этом

При наличии на шине других Slave-ов не отзываться на запросы к ним.

Тогда, может, вам нужно не это, а возможность задавать для блока список Slave ID, на запросы к которым он отвечает?

fatlortroll
21.01.2021, 16:50
> возможность задавать для блока список Slave ID, на запросы к которым он отвечает

Да, именно это. Возможно, я коряво описал функционал.

Евгений Кислов
21.01.2021, 17:23
> возможность задавать для блока список Slave ID, на запросы к которым он отвечает

Да, именно это. Возможно, я коряво описал функционал.

Вы написали корректно, это я прочитал "массив разрешённых запросов", извините.

MechMan
21.01.2021, 18:10
Евгений, извините, я видимо вклинился в разговор и написал одновременно с вами. Не подскажете по поводу https://owen.ru/forum/showthread.php?t=20069&p=347908&viewfull=1#post347908 ?

Евгений Кислов
21.01.2021, 18:15
Евгений, извините, я видимо вклинился в разговор и написал одновременно с вами. Не подскажете по поводу https://owen.ru/forum/showthread.php?t=20069&p=347908&viewfull=1#post347908 ?

Добрый день. В APID_PWM нет управления периодом импульсов.
Я думаю, вам стоит решать вашу задачу опытным путем - определить критерии оптимальности, а потом последовательно рассматривать различные варианты.
Начать можно и с APID_PWM.

murzik
24.01.2021, 10:39
Что-то случилось с контроллером ПЛК210-03. Сделал проект, водрузил контроллер на оборудование. Через час всё стало зависать. На месте ничего не вышло. Принёс контроллер домой. Виснет визуализация, иногда и программа чудит. Не запоминаются Retain-переменные. Думал что не так в проекте. Начал из проекта удалять куски. Ничего не меняется. Создал пустой проект, в нём обозначил 3 Retain-переменных. Закидываю в них значения из кодесис, отключаюсь, перезагружаю контроллер - там нули.
В файлах журналов две ошибки красные и две жёлтые.5315453155
Батарейка, написано, что хорошая - 3.092В

Евгений Кислов
24.01.2021, 11:20
Добрый день.


Виснет визуализация

Как именно это проявляется?


и программа чудит

Как именно это проявляется?


Создал пустой проект, в нём обозначил 3 Retain-переменных

Как именно вы их обозначили?

murzik
24.01.2021, 11:29
Визуализация в основном перестаёт реагировать на кнопки. Иногда сами-по себе вылезают диалоги. Бывает просто не запускается при старте контроллера. Всё время крутится красное колёсико на экране.
В программе поставил включение питания панели по сигналу TRUE. Ну чтобы панель включалась, как запустится контроллер. Так вот, он однажды умудрился панель обесточить через некоторое время после старта.
Загрузочное приложение создаю, когда контроллер в режиме онлайн находится, или ставлю галочку "обновить загрузочное приложение" в менюшке загрузки.

Евгений Кислов
24.01.2021, 11:43
Визуализация в основном перестаёт реагировать на кнопки. Иногда сами-по себе вылезают диалоги. Бывает просто не запускается при старте контроллера. Всё время крутится красное колёсико на экране.
В программе поставил включение питания панели по сигналу TRUE. Ну чтобы панель включалась, как запустится контроллер. Так вот, он однажды умудрился панель обесточить через некоторое время после старта.
Загрузочное приложение создаю, когда контроллер в режиме онлайн находится, или ставлю галочку "обновить загрузочное приложение" в менюшке загрузки.

Предоставьте мне завтра доступ по TeamViewer, пожалуйста.
Данные для подключения можно написать в скайп или на почту (в подписи).

Aleksey1408
31.01.2021, 14:55
Я создал, ФБ. В нем я объявил переменные, как их скрыть когда, я вызываю ФБ?

ASo
31.01.2021, 14:58
Что значит - скрыть?

Aleksey1408
31.01.2021, 15:56
При программировании набрать ФБ и нажать Ctrl+пробел, то вылезает весь перечень используемых переменных как от этого уйти?

Евгений Кислов
31.01.2021, 17:36
Используйте прагму hide:
https://help.codesys.com/webapp/_cds_pragma_attribute_hide;product=codesys;version =3.5.16.0

fatlortroll
01.02.2021, 08:00
Перед объявлением переменных (строка выше VAR) добавить {attribute 'hide'} (https://help.codesys.com/webapp/_cds_pragma_attribute_hide;product=codesys;version =3.5.16.0).

SlavikP
02.02.2021, 05:33
Почему то мне не разрешено писать сообщения в ветке про ПЛК210, поэтому спрошу тут.
В добрые старые времена, когда Codesys 3.5 sp11 p5 считался "вполне себе", периодически появлялась нужда поместить в переменную текущий IP. Делал я это для СПК1xx[M01] так:


GVL.strIP:=concat(concat(concat(BYTE_TO_STRING(Tar getVars.stNetwork.abyGetIp[0]),'.'),BYTE_TO_STRING(TargetVars.stNetwork.abyGetI p[1])),'.');
GVL.strIP:=concat(GVL.strIP,concat(concat(BYTE_TO_ STRING(TargetVars.stNetwork.abyGetIp[2]),'.'),BYTE_TO_STRING(TargetVars.stNetwork.abyGetI p[3])));
И в целом все работало. Но настали новые времена, потребовались новые решения для ПЛК210 и я увидел, что в новом Codesys 3.5 sp14 p3 такой код неприменим. В таргетах все поменялось. Как мне правильно получить IP контроллера? Учитывая, что их может быть больше одного?
Раздел "43. Modbus TCP - изменение сетевых настроек из кода программы" (https://owen.ru/forum/showthread.php?t=28167&page=5&p=296714&viewfull=1#post296714) в CODESYS V3.5. Онлайн-FAQ похоже нужно поправить - в таргетах на ПЛК210 нет узла Network.

Евгений Кислов
02.02.2021, 06:29
Дело не в SP11/SP14 (для СПК на SP14 узел Network точно также доступен), а в том факте, что у ПЛК сетевых интерфейсов "может быть больше одного" (и более того - их число может изменяться в зависимости от конкретной конфигурации).


Как мне правильно получить IP контроллера? Учитывая, что их может быть больше одного?

https://owen.ru/forum/showthread.php?t=28167&p=336649&viewfull=1#post336649


CODESYS V3.5. Онлайн-FAQ похоже нужно поправить

Добавил в п. 43 информацию насчет того, что узел Network присутствует только у СПК.

fatlortroll
05.02.2021, 08:40
Добрый день. В приложенном проекте при попытке записать в ENUM Param_0008_E (VfdWesperRegisters/Group_00/) следующих значений:

5| ValueRawCoeff := 100,
6| ValueRawMin := 0,
7| ValueRawMax := REAL_TO_UINT(599.0 * UINT_TO_REAL(,
-------------------------------------------------------------------^
8| ValueRawDefault := ,
9| Address := 16#XXXX

после ввода скобки, отмеченной знаком ^ происходит зависание IDE. Является ли такое поведение IDE ошибкой?

UPD: если вводить UINT_TO_REAL( медленно, и нажатиями кнопки Esc отклонять всплывающие подсказки IDE, то иногда получается завершить ввод.

Евгений Кислов
05.02.2021, 09:02
Добрый день.


Является ли такое поведение IDE ошибкой?

Да, является.

fatlortroll
05.02.2021, 09:20
У вас тоже повторилось, или это моё персональное везение?

Евгений Кислов
05.02.2021, 09:24
У вас тоже повторилось, или это моё персональное везение?

Повторилось.

fatlortroll
05.02.2021, 09:33
01| {attribute 'qualified_only'}
02| {attribute 'strict'}
03| TYPE Param_XXXX :
04| (
05| ValueRawCoeff := ,
06| ValueRawMin := ,
07| ValueRawMax := ,
08| ValueRawDefault := ,
09| Address := 16#XXXX
10| ) UINT := ValueRawDefault;
11| END_TYPE

Исходный шаблон выглядит так, я его копирую в Enum каждого нового регистра, и изменяю в соответствии с его ограничениями.

fatlortroll
05.02.2021, 09:54
Ну и пусть бы подчёркивал красным, как синтаксическую ошибку. Виснуть-то зачем?

fatlortroll
05.02.2021, 10:04
> это для человека пустота не число, процессоры так не думают

Вы мне будете рассказывать, как работает синтаксический анализатор?

> Разве так сложно написать грамотное перечисление согласно спецификации?

Зачем тогда вообще IDE? Давайте в машинных кодах всё писать. И сразу без ошибок. Это же несложно, да?

fatlortroll
05.02.2021, 10:28
> ну ну, не плачте

Спасибо! Спасибо вам! Если бы не вы -- даже не знаю, что произошло-бы. Я очень вам благодарен за поддержку. Кстати, вот, держите -- ь -- вы обронили.

> изменить парарметризацию устройств не через перечисление, а через структуру, просто enum константный нельзя через него дать несколько адресов разным устройствам

Да я пока к окончательному выводу, как всё это будет работать, ещё не пришёл. Экспериментирую. ENUM-ы эти, скорее, для удобства, наглядности, при инициализации параметров. Они в устройства не попадут.

Евгений5213
06.02.2021, 17:53
Ошибка при скачивании CODESYS V3.5 SP11 Patch 5. Ошибка сети на последней минуте. Кто подскажет, как скачать?

Johnystu
07.02.2021, 00:33
Подскажите новичку, пытаюсь читать/писать данные с/на СПК107 через RS-232(COM5) <-> FTDI232 <-> ПК(Putty). Данные приходят и уходят, но непонятно в каком-то виде. Отправляю с ПЛК тип String '1' на ПК приходит 'g'. отправляю на ПЛК 1 приходит 'g'. Не пойму в чём дело. В место FTDI232 использовал для приёмо-передачи arduino mega , тоже самая неразбериха.
отправляю '3' приходит 'f'
k это J и всё в таком духе. отправляю 'test' приходит 'Q'
если отправлять с компа:
1 это g
2 это i
3 это f
4 - ничего не приходит
5 это e
6 это I

если отправлять эти символы с СПК
1 это g
2 это 3
3 это f
4 ничего не приходит
5 это e
6 это 2

никакой закономерности не нашёл...

Евгений Кислов
07.02.2021, 08:36
Судя по схеме - вы одновременно пытаетесь считывать и записывать в COM-порт.
Так делать нельзя.

Проще будет использовать библиотеку OwenCommunication:
https://youtu.be/uH3hnXmc0fw

Евгений Кислов
07.02.2021, 08:40
Ошибка при скачивании CODESYS V3.5 SP11 Patch 5. Ошибка сети на последней минуте. Кто подскажет, как скачать?

Попробуйте использовать браузер, который поддерживает докачку файлов.

Johnystu
07.02.2021, 15:15
Судя по схеме - вы одновременно пытаетесь считывать и записывать в COM-порт.
Так делать нельзя.


Я понимаю, это просто уже все возможные комбинации делал...



Проще будет использовать библиотеку OwenCommunication:
https://youtu.be/uH3hnXmc0fw
Сделал всё как в этом видео
та же сама хрень, непонятные символы:
Отправляю '#358B$R' получаю : 'nfel•'

Евгений Кислов
07.02.2021, 15:18
А есть возможность попробовать с другим конвертером?

Johnystu
07.02.2021, 15:26
А есть возможность попробовать с другим конвертером?

Делал пересылку сигналов через arduino mega через простой код:

void setup() {
// initialize both serial ports:
Serial.begin(9600);
Serial1.begin(9600);
}

void loop() {
// read from port 1, send to port 0:
if (Serial1.available()) {
int inByte = Serial1.read();
Serial.write(inByte);
}

Символы приходят аналогичные.

Евгений Кислов
07.02.2021, 15:34
Я имел в виду нормальный конвертер RS-232 to USB на базе какого-то известного чипа (Prolific, Silicon Labs и т.д.).

Johnystu
07.02.2021, 16:08
Я имел в виду нормальный конвертер RS-232 to USB на базе какого-то известного чипа (Prolific, Silicon Labs и т.д.).

К сожалению нет. Попробую сегодня напрямую в ком порт ноута подключить.

Johnystu
07.02.2021, 19:50
Поэкспериментировал с физическим портом на ноуте - всё нормально отображает. Почему такой эффект может происходить?

Евгений Кислов
07.02.2021, 20:09
Например, потому что на конвертере FTDI и Arduino может быть не RS-232, а TTL.

Johnystu
07.02.2021, 21:23
Например, потому что на конвертере FTDI и Arduino может быть не RS-232, а TTL.
Так и есть. Спасибо за помощь!

Mr_Camel
15.02.2021, 10:54
Всем добрый день! Нужно пнуть новичка в нужном направление. Что-то я запутался с передачей переменных Real. С ПЛК110.32 на СП310. Знаю что тем много...и все читал, но что-то не так делаю.
Подключил библиотеку ОСКАТ_333. Т.к там есть блок REAL_TO_DW, который не делает округление. Создаю в ресурсах переменную 4 byte (DWORD) и передаю на панель. Там создаю блок индикации, задую адрес регистра. И тип данных DWORD.
Формат Float. Без масштабирования. Но получается какой то бред на панели. Скрины прилагаю.53502535035350453505