по ссылке автора пройдите, если перейти на сайт там 3 вида этих плат. Вся инфа по их запросам и ответам только там. Больше нигде не нашел таких же реле
Вид для печати
по ссылке автора пройдите, если перейти на сайт там 3 вида этих плат. Вся инфа по их запросам и ответам только там. Больше нигде не нашел таких же реле
Вот подобные платы на Али 1 вход на 1 выход, 2 вх - 2 вых, 4 вх-4 вых https://aliexpress.ru/item/400134801...00016111946965
Есть входы и выходы, входы читаются 1 и 2 функцией, выходы записываются 5 функцией
Адрес по умолчанию 255
Вот скрин одного из пользователей, чтение состояния выходов функцией 0х01, то есть булевая, а в 4 байте ответа, состояние входов в виде целочисленной переменной 0,1,2,3 Вложение 69768
То есть определить 4 байт на ПР200 не получится (нужен ПЛК) или пробовать читать целочисленную функцией 0х01 и 0х02.
Нет там никакой целочисленной переменной
команда 01 позволяет получать множество бит в одном запросе
В примере
FF 01 00 00 00 08 28 12
FF -адрес слейва
01 - команда Read Coil Status
00 - Адрес первого Coil Hi байт
00 - Адрес первого Coil Lo байт
00 - Количество Coil Hi байт
08 - Количество Coil Lo байт
28 12 CRC
Т.е. из устройства с адресом 255 читается 8 бит(Coil's) начиная с 00
В ответе на команду 01 запрошенные значения дискретных выходов передаются в упакованном виде по одному биту на флаг. Единица означает включённое состояние, ноль — выключенное. Значения запрошенных флагов заполняют сначала первый байт, начиная с младшего бита, затем следующие байты, также от младшего бита к старшим. Младший бит первого байта данных содержит значение флага, указанного в поле «адрес». Если запрошено количество флагов, не кратное восьми, то значения лишних битов заполняются нулями.
FF 01 01 00 60 60
FF -адрес устройства
01 - команда Read Coil Status
01 - Количество байт далее
00 - упакованные значения Coil's
60 60 - CRC
Т.к. мастер в ПР не поддерживает групповые запросы, то в команде 01 будет всего один Coil и нужно сделать 4 булевых сетевых переменных с последовательными битами 0, 1, 2, 3
Не работает распаковка - переменная булевская, которая невероятным образом принимает целочисленные значения.Вложение 69784
Вложение 69785Вложение 69786
Обратите внимание, на тип переменной на первом скриншоте, и на то как она привязана к выходу на втором - без преобразования в инт.
Вложение 69787
Продублирую.
У вас тут выбрана функция чтения 0х01, вы читаете койлы - в моем случае это выходы реле. А мне нужно читать входы, функцией 0х02. Китайцы на этом реле реализовали это, передавая значения всех входов в один нулевой регистр, в четыре первых его бита. Поэтому булевская переменная овена принимает совсем не булевские значения. И как эту задачку решить,я вообще не понимаю.
https://aliexpress.ru/item/100500165...6e3a4aa6TewG9y
Вот ссылка на это реле.
Более того, я попробовал почитать койлы в разные переменные - и эта релюха точно также пишет состояние выходов в один нулевой регистр в разные биты. В БУЛЕВУЮ ПЕРЕМЕННУЮ.
Вложение 69788Вложение 69789Вложение 69790Вложение 69791
Вложение 69793Вложение 69794
Сделал, как вы говорите - все равно пишет все в одну переменную, упаковывая туда все выходы.
capzap это не управление реле внешнее, это именно вход, используется по своему усмотрению.
А типа переменной Byte у мастера нет? 02 Function code 0x02 (2) - Read Discrete Inputs - как бы предполагает чтение минимум байта, а не бита
На ПК можно как угодно расшифровать, получив этот несчастный байт. А ПР почему-то не хочет...
Не последнем скрине применена функция 0х01
Так может надо так читать каждый бит, раз по описанию реле указано что используется функция 0х02 ?
Мои китайские реле по другому читаются, не могу проверить
Входы и надо читать функцией 0х02, а состояние выходов 0х01 ( если кто не понял, я об этом и писал)
и байт с их состоянием, на ПР200 не выловить, как я и думал.
Как они могут писаться в одну переменную, если указаны разные ? Хотя... Если ПР читает байт, независимо от установленного бита делает если > 0 то переменная true, то получается настроив 4 переменные и замыкая любой вход все 4-е переменные окажутся в true
Короче надо попробовать читать из 0 регистра целочисленную, функцией 0х04 и попробовать читать целочисленную, функцией 0х03
TaPX вам про другое, возможно прошивка реле хранит состояние входов и выходов еще в Input Regisres или Holding Registers
И на счет функции 2 при чтении из одного регистра но разных бит, то тут проблема ПР, пусть исправляют, так как согласно настройкам ПР должна булевую переменную выставлять по указанному биту и только.
Банально, оставьте на 4-х входовом реле единственную переменную с битом 0, и поочередно замыкайте входы - что произойдет ? Выведите переменную на экран соответственно
Я о другом. Создаете ОДНУ булевую переменную, она же может быть только true или false, вне зависимости от значения, так как любое значение то байт получаемый больше 0.
Указываете например бит 2. И замыкаете поочередно входа. Если переменная будет становиться в true независимо от замкнутого входа, значит это недоработка в Овен Лоджике и возможно прошивках ПР
Если так будет, делайте видео и пусть Овен исправляет.
Ничего не понял :) как булевая переменная может не быть булевой ? :) Скрины можете сделать когда
1. Одна единственная переменная, чтение 0х2, регистр 0, бит 2 - скрины сделать замкнув 3 вход, потом замкнув 4 вход, потом 2 вход
Аж интересно стало...
Да скрины уже выложены, булевая In 1 (адрес 0 бит 0) меняет значения как целочисленная, остальные булевые по 0.
https://owen.ru/forum/showthread.php?t=38243&page=6#52
Там чтение 0х01 функцией, на 0х02 такое же поведение? типа булевая, но покажет число 11 ? типа замкнуто 3 входа ?
А если ее при этом перевести в Int переменную ? bool-to-int и как вариант попробовать FB на ST сделать и попробовать выдернуть число?
И как бы чтение других битов должно же было приводить к какому-то результату, нет?
С функцией "2" происходит то же самое. Скрины приложу сейчас. Функция 1 читает выходы, а функция 2 - входы.
Если ее стандартным готовым блоком bool_to_int интовать, то при интовании в единичку конвертируется только значение 1 переменной, значения 0, 2, 4, 8 на выходе блока bool_to_int принимают нулевое значение.
Пробовали писать функцию на ST с использованием внутри нее встроенной функции bool_to_udint() - тогда при любом положительном значении переменной на выходе функции единица, а при ноле, соответственно, ноль.
Чтение других битов дает всегда ноль, потому что все биты почему-то упаковываются в нулевой бит нулевого регистра.
Мда, тут явно косяк ОЛ. при значениях 1, 2, 4, 8 (как серым горит) переменная должна становиться true в зависимости какой бит выставлен в функции чтения.
Ну или реально, чтобы сделали переменную Byte для функций 0х01 и 0х02 и чтобы на поле программы она была как int чтобы уже там применять Extract и Putbit
И главное же сам ОЛ каким-то чудом выводит ЦИФРЫ :)
Да пожалуйста:
Вложение 69811Вложение 69812Вложение 69813Вложение 69814Вложение 69815Вложение 69816
замыкал входы на китайской релюшке.
p.s. непонятно в какой момент применяется распознавание бита, если вообще применяется, раз первая булевая переменная изменяет свои значения, хотя просто должна быть 0 или 1 в зависимости какой бит проверяется.
Проблема в прошивке китайского чуда.
Стандартом https://owen.ru/forum/showthread.php...l=1#post414984 не запрещено в функции 02(01) запрашивать по одному биту, что мастер в ПР и делает. В ответ нормальный слейв должен упаковать в байт ответа всего один бит(младший в байте ответа).
Китайское чудо упорно запихивает в байт ответа ВСЕ биты входов!!!.
Поигрался вчера с реальной ПРкой и реальным слейвом по этой картинке
Вложение 69817
Из нормального слейва в сетевые переменные Var1..Var3 читаются по одному биту, не зависимо от состояние соседних бит в слейве.
Если бы мастер в ПР мог делать чтение группы бит, то все бы работало, а так не судьба подружить ПРку с этим китайским чудом.
ЗЫ.
Мастер ПР знает, что в ответ на запрос ОДНОГО бита получит результат в младшем бите ответного байта, по этому ПО ПРки не предусматривает просмотр и выделение ВСЕХ бит из байта ответа
petera как тогда объяснить показания различных значений, которые видны на скринах в первой булевой переменной, 1, 2, 4, 8, 11 ????? 11 - включено 3 бита