не могли бы Вы подсказать как присвоить одно значение нескольким переменным или входам за раз? a, b , c , := d ; - так не получается...
Вид для печати
не могли бы Вы подсказать как присвоить одно значение нескольким переменным или входам за раз? a, b , c , := d ; - так не получается...
СПСБ!!!!!!!!!!!!!!!
Вроде, здесь это делается
Вложение 81341
Здравствуйте! Вопрос по использованию модуля МВ110-224.8А.
Для термопар типа К (ХА) - нужно установить настройку по ГОСТ: -200...+1360 градусов,
или по шильду: -40...+1100 градусов?
В частности использование целочисленного регистров Izm_int1.
Вопрос при минусовой температуре будут же не отрицательные показания от модуля?
Хочется учесть этот ньюанс в OwenLogic (при пусконаладке).
Не подскажите правильную логику обработки сигнала?
И ещё имеется сетевая переменная status1 (например, для первого канала)
не подскажите значения для диагностики обрыва, неисправностей?
Спасибо большое за ответы!
Прописывать надо в модуле МВ110-224.8А как в него заложено, для термопар типа К (ХА)
Чтобы были показания со знаком, надо использовать переменную типа INT, так как в Лоджике нет типа INT, используют макросы (функции на ST), конвертация дополнительного кода в переменную типа FLOAT.
Функции FLOAT_TO_INT и INT_TO_FLOAT на ST____ https://owen.ru/forum/showthread.php...821#post429821
Но проще наверное сразу прочитать температуру FLOAT.
Статус надо обрабатывать, взять коды из руководства, например Обрыв датчика 16#F00D, перевести в DEC (61453) и сравнивать с этим числом.
По хорошему надо было использовать ПЛК, там всё делается через структуру и перечисление, регистры читаются группой.
В Лоджике вывод придётся делать через динамический текст, регистры читаются по 1 (2), вряд ли есть смысл связываться с ещё и с чтением ошибок.
Имеется контроллер ПЛК110-24.60.Р[М02] и внешнее устройство, которое может управляться по RS-485 (Modbus). У внешнего устройства я буду использовать три регистра: 101 ("чтение") , 103 "чтение/запись" и 153 ("чтение"). Не пойму, как правильно сконфигурировать устройство, где один регистр работает и на чтение и на запись. Я сделал так:
Вложение 81526
В Reg_103_read и Reg_103_write указал один и тот же адрес регистра 103.
Это правильно?
Подскажите, как правильно конфигурировать в этом случае?
Чтение в своём UMD, настройка By Poll Time (циклическое чтение), Вложение 81528
запись в другом UMD, настройка By Value Change (запись по изменению)
Для некоторых модулей дискретного ввода-вывода, прокатывает настройка Both, в одном UMD, как у вас. Надо проверять.
Под рукой не имею оборудование. Его пока заказали. Попробовать негде. Готовлю себя в теоретическом плане.
Как Вы предлагаете, то мне не понятно, как можно для регистра 103 (внешнего устройства) настроить параметр Work mode?
Придется включать в проект еще один UniveralModbus device отдельно для регистра 103 для записи и чтения и там изменять параметр Work mode.
Вложение 81530
Вложение 81529
А можно использовать два UniveralModbus device с одним адресом в сети Modbus?
И еще, а я в своих прошлых проектах не изменял параметр Work mode для модуля ввода МУ110-224.16Р и все работает. Возможно я не прав, паправьте.
Не первый раз обращаюсь к Вам с вопросами и всегда получаю доходчивые ответы. Большое спасибо!
В проекте у меня будет группа не овеновских ВУ. Вот и о них все вопросы.
А овеновские модули будут МВ110-224.16ДН и МУ110-224.16Р. С ними все, вроде, понятно.
Из-за разных скоростей обмена данными я буду эти группы ВУ подключать на разные RS-485 (1-2).
Из Вашего ответа меня заинтересовали групповые опросы и записи через string. Я правильно понял, это чтение или запись группы рядом расположенных регистров ВУ?
Боюсь, что меня это ожидает в новом проекте. Не могли бы Вы дать ссылку на документацию, где это можно изучить. И желательно с примерами.
А можно и прислать фрагмент, как конкретно Вы это делаете на примере.
Вот ссылки на групповой опрос через String, для регистров с адресами подряд. Petera всё разложил по полочкам, есть примеры чтения и записи
https://owen.ru/forum/showthread.php...l=1#post333593
https://owen.ru/forum/showthread.php...l=1#post244022
Для корректной работы ПЛК с внешними устройствами по RS-485 (Modbus), как можно определить, что, например, связь нарушена (обрыв)? И, вообще, где можно узнать, какие бывают протоколированные ошибки и как их прочитать? И как думаете, если внешнее устройство не включено, то это такая же ситуация, что и нарушена связь?
в программе ПР есть уставка 1 (время реакции).
ПР подружил с панелью оператора (мастер). Если уставку 1 привязать к "входной блок сетевой переменной", то при старте эта переменная равна нулю. Видимо до получения от мастера (панель оператора) переменной, ПР (slave) трактует как "0".
Значение по умолчанию в ПР102 почему-то не дает поставить.
Как сделать чтобы в памяти ПР102 было ненулевое значение?
В Модбас мастере, есть адрес и ошибка, дайте им имя и получите ошибку ERR<>0, при обрыве сзязи Вложение 81574
Если блоков несколько, адрес меняется вместе с ошибкой, если связь есть, то ошибка =0.
Вы пишите не в тот раздел, здесь ПЛК (среда CoDeSys V2.3), а вам нужно в Программируемые реле.
По теме, сделайте инициализацию при включении, из энергонезависимой переменной. Вложение 81575
Я правильно понял, что в моем случае, когда 4 ВУ, я должен в программе на каждом цикле анализировать эти переменны (Last address и Last error). Там постоянно (!) меняются адреса внешних устройств и ошибки по этим адресам? И ничего там не сохраняется на долго. Значения меняются с частотой опроса внешних устройств? Я нашел всего два кода ошибок для RS-485 интерфейса: 0 (ошибки нет) или 81 (превышен таймаут ожидания ответа).
Если у меня 4 ВУ, то я должен по каждому устройству отработать Ваш фрагмент программы. Например:
Так?Код:IF Last_Adres=3 AND Last_Error<>0 THEN
Avar1:=TRUE; ELSE Avar1:=FALSE;
END_IF
IF Last_Adres=4 AND Last_Error<>0 THEN
Avar2:=TRUE; ELSE Avar2:=FALSE;
END_IF
IF Last_Adres=5 AND Last_Error<>0 THEN
Avar3:=TRUE; ELSE Avar3:=FALSE;
END_IF
IF Last_Adres=6 AND Last_Error<>0 THEN
Avar4:=TRUE; ELSE Avar4:=FALSE;
END_IF
В моем проекте требуется на ВУ по RS-485(Modbus) в три регистра передать значения. Но передавать необходимо строго в определенной последовательности. Как я могу просто проверять корректность передачи данных по Modbus? Или придется после каждой записи данных в регистр опять читать этот регистр и смотреть, что записалось?
ну так записывайте в эти переменные СТРОГО В ОПРЕДЕЛЁННОЙ последовательности, и сами в программе своей контролируйте эту записьЦитата:
Но передавать необходимо строго в определенной последовательности.
в чём проблема прикрутить дополнительное условие для записи переменной?
Можно упростить код. Только надо понимать, что так аварии будут постоянно мигать (работа в динамике)
Если же надо включить аварию, лучше использовать вариант 1exan с CASE. В шагах можно дописать включение других переменных.Код:Avar3:=Last_Adres=3 AND Last_Error<>0 ;
Avar4:=Last_Adres=4 AND Last_Error<>0 ;
Avar5:=Last_Adres=5 AND Last_Error<>0 ;
Avar6:=Last_Adres=6 AND Last_Error<>0 ;
Код:CASE Last_Adres OF
3: Err3 := Last_Error<>0;
4: Err4 := Last_Error<>0;
5: Err5 := Last_Error<>0;
6: Err6 := Last_Error<>0;
END_CASE;
Наверно я не корректно поставил задачу. Представьте, необходимо записать по Modbus под адресом 3 в регистр 101, например, значение 100. После это, в регистр 103 значение 127 и только после этого в регистр 107 значение 3.
Хотите сказать, что если я запишу :
...
Reg101 := 100;
Reg103 := 127;
Reg107 := 3;
...
Это все пройдет корректно? Если да, то это отлично!
Просто, я раньше много лет работал с контроллерами Шнайдерэлектрик M221, то там нужно дождаться пока пройдет первая пересылка данных, а уж потом заталкиваем следующие данные. И там постоянно контролирую передачю данных.
ну формально, строки обрабатываются по порядку
и присвоение значения переменной идёт по порядку строк в программе
поэтому всё это будет работать "как есть"
если же вам необходимо Reg103 присвоить 127 только после записи числа 100 в слейв 3 и вы без этого спать не сможете спокойно, то добавьте Условие к присвоению Reg103
прочтите из слейва состояние регистра 101, и если он равен ранее введённому числу 100, то Reg103:=127
если нет, то другое действие или значение какое необходимо
то же самое делаете для Reg107
всё зависит от того, как вы сделаете обмен - либо стандартной конфигурацией, либо будете писать сами, через билиотеку, строго чередуя отправку/приём как вам это хочетсяЦитата:
там нужно дождаться пока пройдет первая пересылка данных, а уж потом заталкиваем следующие данные.
как хотите. Ваш проект, заморачивайтесь как хотите. Только надо ли оно действительно так упарываться? сомневаюсьЦитата:
И там постоянно контролирую передачю данных.
ещё и контрольные суммы пресчитывайте каждый раз
только кому это надо? если железка не работает, это и так будет видно и пересчётом контрольной суммы это не вылечишь и плохие кабели не заменишь
Непонятна цель.
Абсолютно так же корректно все пройдет если запишите
илиКод:...
Reg103 := 127;
Reg107 := 3;
Reg101 := 100;
...
и дажеКод:...
Reg107 := 3;
Reg103 := 127;
Reg101 := 100;
...
Код:...
Reg103 := -1584;
...
Reg101 := 3495;
....
Reg107 := 7747;
....
Reg107 := 3;
...
Reg101 := 100;
...
Reg103 := 127;
Да пофигКод:Просто, я раньше много лет работал с контроллерами Шнайдерэлектрик M221,
задачи типа
Т.е. 3 последовательных подтверждённых записи здесь можно внятно решить только на биб-ках.Цитата:
..После это, в регистр 103 значение 127 и только после этого в регистр 107 значение 3.
При условии что именно это нужно.
А в общем случае, в модбас-rtu ни на чем не исключите повторной записи
Да ладно, вот поймал CASE на шаге 2,Вложение 81589
1 и 2 переменные уже записаны, но вторая еще не прочитана,
а 3 вообще ещё не записана и даже не отправлена на запись.
Зачем 2(два) раза подтверждать?
---
М - Мама
КШ - Красная шапочка
Б - Бабушка
В - Александр Сергеевич Волк
Сказка от бибок
Цитата:
М: КШ - отнеси Б пирожки
КШ убегает..
(*В провожает КШ сонным взглядом*)
.. и прибегает
КШ: М! Б сказала спасибо
Сказка от конфигурации
Заставили ребенка 2 раза сбегать к БЦитата:
М: КШ - отнеси Б пирожки
КШ убегает..
(*В провожает КШ сонным взглядом*)
.. и прибегает
КШ: М! Б сказала спасибо.
М: Ок, но мне похер. Сбегай ЕЩЕ РАЗ к Б и спроси её - она получила пирожки?
КШ убегает..
(*В провожает КШ уже голодным взглядом*)
.. и прибегает
КШ: М! Б покрутила пальцем у виска, спросила - не передать ли тебе таблетки от склероза?
И подвергли опасности В. Он старый, инсульт может приключится