Просмотр полной версии : ПР + РЕЛЕ С ИНТЕРФЕЙСОМ RS485
Добрый день, товарищи. Подскажите пожалуйста, может кто-то знает - можно ли подружить ПР вот с таким модулем(https://pcus.ru/rele-s-interfejsom-rs485-modbus-rtu) по RS-485?
Можно подружить, посмотрел в ПР200, есть для мастера команды 0х01 и 0х05
Можно подружить, посмотрел в ПР200, есть для мастера команды 0х01 и 0х05
А где брать номера регистров? Вот эти команды - это шестнадцатиричные данные, которые надо будет писать в сетевые переменные, правильно? Объясните, пожалуйста, поподробнее, как их подружить.
По вашей ссылке все написано в примерах. Воспользуйтесь для проверки любой команды парсером Modbus
01 01 00 01 00 01 AC 0A - чтение состояния - https://rapidscada.net/modbus/ для запросов и ответов RTU режима
Можете порыться еще у китайцев, другие продавцы могут более подробнее расписывать.
По вашей ссылке все написано в примерах. Воспользуйтесь для проверки любой команды парсером Modbus
01 01 00 01 00 01 AC 0A - чтение состояния - https://rapidscada.net/modbus/ для запросов и ответов RTU режима
Можете порыться еще у китайцев, другие продавцы могут более подробнее расписывать.
Спасибо за парсер, сейчас пропробую. Это туда в парсер вбивать команды из примеров и смотреть, что он выдаст?
да, если это запрос, ставите соответствующий переключатель на RTU, если ответ, аналогично.
Там команд в принципе кот наплакал
Поигрался с парсером, есть непонятные моменты:
1. При записи команд на включение/выключение реле передаваемое значение - это "on" и "off". Как это в ПР реализовать - писать в переменную ноль на выключение и любое число на включение?
2. На этой релюшке есть два входа - in1 и in2. Как читать их значения, я тоже не понял.
Скорее всего у вас 1-й Coil это выход 1, а 2-й coil это выход 2.
Возможно реле позволяет включать выключать командой записи в регистр битовой маской, но в описании этого не указано.
У меня вообще есть реле на 8 выходов, которое различными значениями вкл/выкл с таймером, без таймера но это зависит от прошивки управления в плате. Как у вас не знаю.
Если реле на руках, можете поиграться через Modpoll, расчеты CRC для Modbus есть online, можно даже при помощи терминала поклацать.
Скорее всего у вас 1-й Coil это выход 1, а 2-й coil это выход 2.
Возможно реле позволяет включать выключать командой записи в регистр битовой маской, но в описании этого не указано.
У меня вообще есть реле на 8 выходов, которое различными значениями вкл/выкл с таймером, без таймера но это зависит от прошивки управления в плате. Как у вас не знаю.
Если реле на руках, можете поиграться через Modpoll, расчеты CRC для Modbus есть online, можно даже при помощи терминала поклацать.
А как койлы писать из ПР? Я раньше только холдинг регистры писал.
Выберите Булевую переменную, и увидите как.
Сергей0308
09.08.2023, 14:01
Так вроде подобное уже неоднократно обсуждали на форуме, даже я принимал участие в одной из тем!
Так вроде подобное уже неоднократно обсуждали на форуме, даже я принимал участие в одной из тем!
А не дадите ссылочку?
Выберите Булевую переменную, и увидите как.
Ну смотрите, управлять выходами с помощью ПР на этом модуле я научился. У этого модуля есть загадочные "in1" и "in2". Не знаете, для чего они? Подавал на них плюс, подавал минус, думая, что будут срабатывать выходы - они не срабатывают. Если это чисто информационные входы - как их читать?
TaPX не могу знать, возможно входы. То есть если плата ваша 2in - 2out например. У меня 8х8 плата и другой функционал управления.
Вообще ссылку вы дали на плату с одним реле, а пишете, что у вас их два.
Если такая, то там тоже все написано как читать входы.
https://pcus.ru/moduli/moduli-rele/rele-s-interfejsom-rs485-dvojnoj-modbus-rtu-2x
Возможно по запросу состояния разные биты отвечают за разное - входы и выходы. На что замыкать вход надо смотреть по плате, на минус или на плюс. Ну и почитать и посмотреть будут ли меняться другие биты.
Честно, я не вижу тут информации, как читать входы.
Честно, я не вижу тут информации, как читать входы.
Чтение дискретных входов - функция 2. Не факт, конечно, что это устройство её поддерживает. Пробуйте. Надеюсь, что сам дивайс у у Вас на руках. Или Вы просто теоретизируете?
TaPX Запрос состояния реле. Определитесь, как работают входы, что надо подать на него для его активации, + или -
И проверьте на данном ответе будут ли изменяться биты, отличные от контроля выходов.
03 Status On On Off Off Off Off Off Off - 3-й бат на двух включенных реле занимают всего 2 бита.
Еще как вариант попробовать прочитать следующий адрес
00 00 Starting address Physical: 0x0000 (0)
Logical: 0x0001 (1)
то есть прочесть 1-й физический адрес при запросе Coils
Как вариант, что писал выше, найдите такую плату у китайцев, может быть больше информации, в том числе и по входам
Устройство на руках. Функцию 2 не пробовал, пробовал только 3 - щас попробую
Не функцию 2 а адрес 2. И заметьте, если там же на сайте откроете версию на 4 реле, то вообще в запросах не увидите чтения состояния реле.
То есть приходится ориентироваться на данные между тремя платами.
Кстати у китайцев не нашел именно таких плат. Пытался сейчас найти, но все другие.
А инпут регистры - они булевские?
А инпут регистры - они булевские?Разложите и будет булевый
А инпут регистры - они булевские?
А это дело производителя, как захочет, так и сделает.
Так, входы я тоже прочитал, функцией два, на нулевом регистре на нулевом бите - спасибо вам всем за помощь )
Что за функция 2 ? Пример запроса в HEX напишите
Read Input Status - Это ?
kondor3000
10.08.2023, 13:50
Так, входы я тоже прочитал, функцией два, на нулевом регистре на нулевом бите - спасибо вам всем за помощь )
И чем управляются входы, плюсом или минусом или сухой контакт?
У меня почему-то зависает форум при выборе цитирования - отвечу так.
Мелкий. Видимо да. Вот скриншот из ПР, переменная in1. Eсли есть сигнал на входе1 - переменная выдает 1. Если есть сигнал на входе2 - переменная имеет значение 2. Если на обоих, то ее значение - 3.
Кондор. На входы подаю +, тот же, который приходит на DC+.
Что за функция 2 ?
Шутите?
https://ru.wikipedia.org/wiki/Modbus#Стандартные_функции_протокола_Modbus
Сергей0308
10.08.2023, 15:20
Мне понравилось, что если изменить только функцию чтения бита(булевой переменной) будет читаться совсем другой бит(булева переменная), в смысле как-то это очень непривычно, типа квантовой механики, для меня так просто чудеса, недавно подобный вопрос обсуждался в одной из тем на форуме!
Eсли есть сигнал на входе1 - переменная выдает 1. Если есть сигнал на входе2 - переменная имеет значение 2. Если на обоих, то ее значение - 3.
Так и должно быть. Я выше ссылку на статью в вики дал - там всё расписано.
kondor3000
10.08.2023, 16:03
Мне понравилось, что если изменить только функцию чтения бита(булевой переменной) будет читаться совсем другой бит(булева переменная), в смысле как-то это очень непривычно, типа квантовой механики, для меня так просто чудеса, недавно подобный вопрос обсуждался в одной из тем на форуме!
У других фирм и китайцев разные области памяти, поэтому читаются и пишутся разными функциями разные регистры (биты).
Овен наложил их друг на друга, поэтому и читаются одни и те же биты (регистры), разными функциями.
imaex да понял я уже, Просто настолько давно не читал DI. DO с устройств, что забыл :)
Что забавно, таких плат у китайцев не нашел, чтобы и там посмотреть запросы.
А на указанном сайте есть 3 вида аналогичных плат, на 1, 2 и 4 выхода. И если сравнивать там данные, то не везде одинаково написано :) Типа купит человек плату на 4 выхода и гадать будет как что прочитать :)
Товарищи, помогайте - не знаю, как обработать полученную информацию со входов этого китайского реле. Дело в том, что все 4 входа (разжились такой же релюхой на 4 входа\выхода) пишутся в одну БУЛЕВСКУЮ переменную. Булевскую. Которая, в теории, должна принимать значения "0" или "1". Но она же принимает значения от 1 до 15 (4 входа теперь)! И тут возникает проблема. В Owen Logic мы эту переменную не можем сравнивать с целочисленной константой - она же булевская. А при конвертации ее в int она конвертируется в единичку, только если имеет значение единичку. При всех остальных значениях на ее выходе после конвертации висит 0. Получается, я могу получать сигнал только с первого входа. Как это победить?
kondor3000
24.08.2023, 15:32
Товарищи, помогайте - не знаю, как обработать полученную информацию со входов этого китайского реле. Дело в том, что все 4 входа (разжились такой же релюхой на 4 входа\выхода) пишутся в одну БУЛЕВСКУЮ переменную. Булевскую. Которая, в теории, должна принимать значения "0" или "1". Но она же принимает значения от 1 до 15 (4 входа теперь)! И тут возникает проблема. В Owen Logic мы эту переменную не можем сравнивать с целочисленной константой - она же булевская. А при конвертации ее в int она конвертируется в единичку, только если имеет значение единичку. При всех остальных значениях на ее выходе после конвертации висит 0. Получается, я могу получать сигнал только с первого входа. Как это победить?
Распаковка бит из целочисленной, приём до 16 бит через 1 регистр. 69760
До 16 бит, можно упаковать в маску 69761
Упаковка бит в целочисленную, для передачи до 16 бит через 1 регистр
4 битовых можно просто подать на выходы 69763
kondor3000
24.08.2023, 15:54
Это так не работает
Читайте, я написал про все варианты выше.
Товарищи, помогайте - не знаю, как обработать полученную информацию со входов этого китайского реле. Дело в том, что все 4 входа (разжились такой же релюхой на 4 входа\выхода) пишутся в одну БУЛЕВСКУЮ переменную. Булевскую. ...
https://owen.ru/forum/attachment.php?attachmentid=32403&d=1501764156
kondor3000
24.08.2023, 16:49
лучше уточните что имелось ввиду под фразой Я так понимаю стоит узнать модель устройства и самим посмотреть каким образом передаются данные
Расписал все варианты, если чел принимает числа от 1 до 15, то переменная должна быть целочисленная и читаться функцией 0х03.
Либо 4 булевых с разными адресами ( чтение функцией 0х01 или 0х02 )
Это так не работает
Сетевая переменная in1 какого формата? Покажите ее в настройках мастера...
Расписал все варианты, если чел принимает числа от 1 до 15, то переменная должна быть целочисленная и читаться функцией 0х03.
Либо 4 булевых с разными адресами ( чтение функцией 0х01 или 0х02 )
Вот именно, нужно 4 булевых с последовательными адресами. И никаких ехтрактов с преобразованием TO_INT
69765
kondor3000
24.08.2023, 19:33
Что Вы расписали, очевидные вещи, не в этом был вопрос, лучше примером покажите как конфигурировать несколько булевых переменных 1 или 2 функцией, если конечно в этом дело, а лучше почитать мануал, как производитель предлагает решать эту задачу
Это китайский блок без документации, какой производитель? Тут инфу по крупицам собираем, плюс ТС не может сформулировать вопрос нормально, а скрин с 4 булевыми уже Petera выложил
по ссылке автора пройдите, если перейти на сайт там 3 вида этих плат. Вся инфа по их запросам и ответам только там. Больше нигде не нашел таких же реле
kondor3000
24.08.2023, 20:35
Вот подобные платы на Али 1 вход на 1 выход, 2 вх - 2 вых, 4 вх-4 вых https://aliexpress.ru/item/4001348010775.html?spm=a2g2w.favourites.mywishlist .2.3c234aa6RNfDlK&sku_id=12000016111946965
Есть входы и выходы, входы читаются 1 и 2 функцией, выходы записываются 5 функцией
Адрес по умолчанию 255
Вот скрин одного из пользователей, чтение состояния выходов функцией 0х01, то есть булевая, а в 4 байте ответа, состояние входов в виде целочисленной переменной 0,1,2,3 69768
То есть определить 4 байт на ПР200 не получится (нужен ПЛК) или пробовать читать целочисленную функцией 0х01 и 0х02.
Вот подобные платы на Али 1 вход на 1 выход, 2 вх - 2 вых, 4 вх-4 вых https://aliexpress.ru/item/4001348010775.html?spm=a2g2w.favourites.mywishlist .2.3c234aa6RNfDlK&sku_id=12000016111946965
Есть входы и выходы, входы читаются 1 и 2 функцией, выходы записываются 5 функцией
Адрес по умолчанию 255
Вот скрин одного из пользователей, чтение состояния входов функцией 0х01, то есть булевая, а в 4 байте ответа, состояние реле в виде целочисленной переменной 0,1,2,3 69768
То есть определить 4 байт на ПР200 не получится (нужен ПЛК) или пробовать читать целочисленную функцией 0х03.
Нет там никакой целочисленной переменной
команда 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
у плат есть входы.
https://pcus.ru/rele-s-interfejsom-rs485-modbus-rtu
https://pcus.ru/moduli/moduli-rele/rele-s-interfejsom-rs485-dvojnoj-modbus-rtu-2x
https://pcus.ru/moduli/moduli-rele/modul-rele-4-kanalnyj-s-interfejsom-rs485
Распаковка бит из целочисленной, приём до 16 бит через 1 регистр. 69760
До 16 бит, можно упаковать в маску 69761
Упаковка бит в целочисленную, для передачи до 16 бит через 1 регистр
4 битовых можно просто подать на выходы 69763
Не работает распаковка - переменная булевская, которая невероятным образом принимает целочисленные значения.69784
https://owen.ru/forum/attachment.php?attachmentid=32403&d=1501764156
6978569786
Обратите внимание, на тип переменной на первом скриншоте, и на то как она привязана к выходу на втором - без преобразования в инт.
Расписал все варианты, если чел принимает числа от 1 до 15, то переменная должна быть целочисленная и читаться функцией 0х03.
Либо 4 булевых с разными адресами ( чтение функцией 0х01 или 0х02 )
когда я пытаюсь поменять тип переменной на целочисленный в настройках, то функция чтения меняется на 0х03 вместо 0х02, и значения входов просто не читаются
Сетевая переменная in1 какого формата? Покажите ее в настройках мастера...
69787
Продублирую.
Вот именно, нужно 4 булевых с последовательными адресами. И никаких ехтрактов с преобразованием TO_INT
69765
У вас тут выбрана функция чтения 0х01, вы читаете койлы - в моем случае это выходы реле. А мне нужно читать входы, функцией 0х02. Китайцы на этом реле реализовали это, передавая значения всех входов в один нулевой регистр, в четыре первых его бита. Поэтому булевская переменная овена принимает совсем не булевские значения. И как эту задачку решить,я вообще не понимаю.
Что вы все как коренные северные народы, что вижу о том пою. У плат реле нет входов, предполагаю что ни как не относится к вложенной ссылке, по этому писал уже нужно наименование устройства чтоб самому найти нужную информацию. А по ссылке ни каких крупинок собирать не надо, все на что способен модбас описано в примерах и чтение там не гипотетических входов , а арес слейв устройства
https://aliexpress.ru/item/1005001658789711.html?sku_id=12000020692927208&spm=a2g2w.productlist.search_results.11.6e3a4aa6Te wG9y
Вот ссылка на это реле.
Вот подобные платы на Али 1 вход на 1 выход, 2 вх - 2 вых, 4 вх-4 вых https://aliexpress.ru/item/4001348010775.html?spm=a2g2w.favourites.mywishlist .2.3c234aa6RNfDlK&sku_id=12000016111946965
Есть входы и выходы, входы читаются 1 и 2 функцией, выходы записываются 5 функцией
Адрес по умолчанию 255
Вот скрин одного из пользователей, чтение состояния входов функцией 0х01, то есть булевая, а в 4 байте ответа, состояние входов в виде целочисленной переменной 0,1,2,3 69768
То есть определить 4 байт на ПР200 не получится (нужен ПЛК) или пробовать читать целочисленную функцией 0х01 и 0х02.
А с чего вы взяли, что он тут читает входы? Мне думается, что он тут читает состояние выходов.
Вот подобные платы на Али 1 вход на 1 выход, 2 вх - 2 вых, 4 вх-4 вых https://aliexpress.ru/item/4001348010775.html?spm=a2g2w.favourites.mywishlist .2.3c234aa6RNfDlK&sku_id=12000016111946965
Есть входы и выходы, входы читаются 1 и 2 функцией, выходы записываются 5 функцией
Адрес по умолчанию 255
Вот скрин одного из пользователей, чтение состояния входов функцией 0х01, то есть булевая, а в 4 байте ответа, состояние входов в виде целочисленной переменной 0,1,2,3 69768
То есть определить 4 байт на ПР200 не получится (нужен ПЛК) или пробовать читать целочисленную функцией 0х01 и 0х02.
Более того, я попробовал почитать койлы в разные переменные - и эта релюха точно также пишет состояние выходов в один нулевой регистр в разные биты. В БУЛЕВУЮ ПЕРЕМЕННУЮ.
69788697896979069791
Нет там никакой целочисленной переменной
команда 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
6979369794
Сделал, как вы говорите - все равно пишет все в одну переменную, упаковывая туда все выходы.
capzap это не управление реле внешнее, это именно вход, используется по своему усмотрению.
А типа переменной Byte у мастера нет? 02 Function code 0x02 (2) - Read Discrete Inputs - как бы предполагает чтение минимум байта, а не бита
На ПК можно как угодно расшифровать, получив этот несчастный байт. А ПР почему-то не хочет...
Не последнем скрине применена функция 0х01
Так может надо так читать каждый бит, раз по описанию реле указано что используется функция 0х02 ?
Мои китайские реле по другому читаются, не могу проверить
kondor3000
25.08.2023, 10:26
Входы и надо читать функцией 0х02, а состояние выходов 0х01 ( если кто не понял, я об этом и писал)
и байт с их состоянием, на ПР200 не выловить, как я и думал.
Не последнем скрине применена функция 0х01
Так может надо так читать каждый бит, раз по описанию реле указано что используется функция 0х02 ?
Мои китайские реле по другому читаются, не могу проверить
Я читаю функцией 0х02, но у меня все входы пишутся в одну переменную с нулевым регистром и нулевым битом, хоть я и создаю несколько переменных с нулевым регистром и битами от 0 до 3-х.
Как они могут писаться в одну переменную, если указаны разные ? Хотя... Если ПР читает байт, независимо от установленного бита делает если > 0 то переменная true, то получается настроив 4 переменные и замыкая любой вход все 4-е переменные окажутся в true
kondor3000
25.08.2023, 10:37
Короче надо попробовать читать из 0 регистра целочисленную, функцией 0х04 и попробовать читать целочисленную, функцией 0х03
Короче надо попробовать читать из 0 регистра целочисленную, функцией 0х02 и попробовать читать целочисленную, функцией 0х03
я ж вам писал выше, что это невозможно - при изменении типа переменной с булевской на целочисленную невозможно выбрать вторую функцию, которая читает дискретные входы. И если все таки изменить ее тип и читать нулевой регистр третьей функцией - не читается ничего.
TaPX вам про другое, возможно прошивка реле хранит состояние входов и выходов еще в Input Regisres или Holding Registers
И на счет функции 2 при чтении из одного регистра но разных бит, то тут проблема ПР, пусть исправляют, так как согласно настройкам ПР должна булевую переменную выставлять по указанному биту и только.
Банально, оставьте на 4-х входовом реле единственную переменную с битом 0, и поочередно замыкайте входы - что произойдет ? Выведите переменную на экран соответственно
kondor3000
25.08.2023, 10:47
я ж вам писал выше, что это невозможно - при изменении типа переменной с булевской на целочисленную невозможно выбрать вторую функцию, которая читает дискретные входы. И если все таки изменить ее тип и читать нулевой регистр третьей функцией - не читается ничего.
Я исправил функцию уже на 04 и 03, чтение целочисленных
TaPX вам про другое, возможно прошивка реле хранит состояние входов и выходов еще в Input Regisres или Holding Registers
И на счет функции 2 при чтении из одного регистра но разных бит, то тут проблема ПР, пусть исправляют, так как согласно настройкам ПР должна булевую переменную выставлять по указанному биту и только.
Банально, оставьте на 4-х входовом реле единственную переменную с битом 0, и поочередно замыкайте входы - что произойдет ? Выведите переменную на экран соответственно
Так я именно так и делал. Эта переменная - БУЛЕВСКАЯ начинает принимать целочисленные значения, в зависимости от того, какие и сколько выходов замкнуто. Сейчас не могу показать - сканирую холдинг регистры этой релюшки.
Я о другом. Создаете ОДНУ булевую переменную, она же может быть только true или false, вне зависимости от значения, так как любое значение то байт получаемый больше 0.
Указываете например бит 2. И замыкаете поочередно входа. Если переменная будет становиться в true независимо от замкнутого входа, значит это недоработка в Овен Лоджике и возможно прошивках ПР
Если так будет, делайте видео и пусть Овен исправляет.
kondor3000
25.08.2023, 12:41
Я о другом. Создаете ОДНУ булевую переменную, она же может быть только true или false, вне зависимости от значения, так как любое значение то байт получаемый больше 0.
Указываете например бит 2. И замыкаете поочередно входа. Если переменная будет становиться в true независимо от замкнутого входа, значит это недоработка в Овен Лоджике и возможно прошивках ПР
Если так будет, делайте видео и пусть Овен исправляет.
В ПР необходимо сделать возможность чтения целочисленных функциями 0х01 и 0х02
или как максимум добавить BYTE и чтение BYTE функциями 0х01 и 0х02. В ПЛК есть оба варианта
Я о другом. Создаете ОДНУ булевую переменную, она же может быть только true или false, вне зависимости от значения, так как любое значение то байт получаемый больше 0.
Указываете например бит 2. И замыкаете поочередно входа. Если переменная будет становиться в true независимо от замкнутого входа, значит это недоработка в Овен Лоджике и возможно прошивках ПР
Если так будет, делайте видео и пусть Овен исправляет.
Я создавал одну булеву переменную. Пробовал указывать у нее варианты бита от 0 до 4. И при замыкании входов, если выбран бит 1-3, ничего не происходит. А если выбран бит 0 - переменная принимает совсем не булевы значения, являясь при этом булевой.
В ПР необходимо сделать возможность чтения целочисленных функциями 0х01 и 0х02
или как максимум добавить BYTE и чтение BYTE функциями 0х01 и 0х02. В ПЛК есть оба варианта
Походу, остается только общаться с техподдержкой.
Ничего не понял :) как булевая переменная может не быть булевой ? :) Скрины можете сделать когда
1. Одна единственная переменная, чтение 0х2, регистр 0, бит 2 - скрины сделать замкнув 3 вход, потом замкнув 4 вход, потом 2 вход
Аж интересно стало...
kondor3000
25.08.2023, 14:04
Ничего не понял :) как булевая переменная может не быть булевой ? :) Скрины можете сделать когда
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 сделать и попробовать выдернуть число?
И как бы чтение других битов должно же было приводить к какому-то результату, нет?
Там чтение 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
И главное же сам ОЛ каким-то чудом выводит ЦИФРЫ :)
Мда, тут явно косяк ОЛ. при значениях 1, 2, 4, 8 (как серым горит) переменная должна становиться true в зависимости какой бит выставлен в функции чтения.
Ну или реально, чтобы сделали переменную Byte для функций 0х01 и 0х02 и чтобы на поле программы она была как int чтобы уже там применять Extract и Putbit
И главное же сам ОЛ каким-то чудом выводит ЦИФРЫ :)
В этом то и парадокс. И самое интересное, выход щелкает только при значении "1" этой переменной.
С функцией "2" происходит то же самое. Скрины приложу сейчас. Функция 1 читает выходы, а функция 2 - входы.
Если ее стандартным готовым блоком bool_to_int интовать, то при интовании в единичку конвертируется только значение 1 переменной, значения 0, 2, 4, 8 на выходе блока bool_to_int принимают нулевое значение.
Пробовали писать функцию на ST с использованием внутри нее встроенной функции bool_to_udint() - тогда при любом положительном значении переменной на выходе функции единица, а при ноле, соответственно, ноль.
Чтение других битов дает всегда ноль, потому что все биты почему-то упаковываются в нулевой бит нулевого регистра.
осталось дождаться когда Вы по аналогии с выходами сделаете четыре входных буля и каждому, с помощью 2 функции, выставите в конфигураторе соответствующий бит и после покажете скрин
осталось дождаться когда Вы по аналогии с выходами сделаете четыре входных буля и каждому, с помощью 2 функции, выставите в конфигураторе соответствующий бит и после покажете скрин
Да пожалуйста:
698116981269813698146981569816
замыкал входы на китайской релюшке.
p.s. непонятно в какой момент применяется распознавание бита, если вообще применяется, раз первая булевая переменная изменяет свои значения, хотя просто должна быть 0 или 1 в зависимости какой бит проверяется.
p.s. непонятно в какой момент применяется распознавание бита, если вообще применяется, раз первая булевая переменная изменяет свои значения, хотя просто должна быть 0 или 1 в зависимости какой бит проверяется.
парадокс. Мы тут думаем, что проблема в прошивке ПР.
парадокс. Мы тут думаем, что проблема в прошивке ПР.
Проблема в прошивке китайского чуда.
Стандартом https://owen.ru/forum/showthread.php?t=38243&p=414984&viewfull=1#post414984 не запрещено в функции 02(01) запрашивать по одному биту, что мастер в ПР и делает. В ответ нормальный слейв должен упаковать в байт ответа всего один бит(младший в байте ответа).
Китайское чудо упорно запихивает в байт ответа ВСЕ биты входов!!!.
Поигрался вчера с реальной ПРкой и реальным слейвом по этой картинке
69817
Из нормального слейва в сетевые переменные Var1..Var3 читаются по одному биту, не зависимо от состояние соседних бит в слейве.
Если бы мастер в ПР мог делать чтение группы бит, то все бы работало, а так не судьба подружить ПРку с этим китайским чудом.
ЗЫ.
Мастер ПР знает, что в ответ на запрос ОДНОГО бита получит результат в младшем бите ответного байта, по этому ПО ПРки не предусматривает просмотр и выделение ВСЕХ бит из байта ответа
petera как тогда объяснить показания различных значений, которые видны на скринах в первой булевой переменной, 1, 2, 4, 8, 11 ????? 11 - включено 3 бита
Сергей0308
25.08.2023, 16:38
petera как тогда объяснить показания различных значений, которые видны на скринах в первой булевой переменной, 1, 2, 4, 8, 11 ????? 11 - включено 3 бита
Это может быть баг симулятора(онлайн режима), кстати, уже не раз подобные баги встречались!
Какая-то непоследовательность, в смысле, обычно Вы всё предполагаете и предполагаете, даже там, где это не требуется, а здесь, всё, фантазия кончилась!
Сергей0308 какой баг?, человек включает и выключает входы, ОЛ текстом отображает битовую маску, согласно замкнутым входам, а выудить требуемый бит кто-то не может - сам ПР, либо ОЛ или кто?
Сергей0308
25.08.2023, 16:47
Сергей0308 какой баг?, человек включает и выключает входы, ОЛ текстом отображает битовую маску, согласно замкнутым входам, а выудить требуемый бит кто-то не может - сам ПР, либо ОЛ или кто?
Так у него даже документации нет, пусть сначала документацию найдёт и что это устройство поддерживает! И причём тут ПР, пусть с ПК ОРС сервером проверит!
petera как тогда объяснить показания различных значений, которые видны на скринах в первой булевой переменной, 1, 2, 4, 8, 11 ????? 11 - включено 3 бита
Очень просто, ОЛ выводит байт ответа, какой получил из слейва, ведь предполагалось, что получим байт, в младшем бите которого, находится состояние ОДНОГО входа (Внешний вид байта в этом случае совпадает с внешним видом отображения одного бита). Упростили программисты, так сказать, себе жизнь. Никто же не думал, что "шальной" слейв в ответ на запрос состояния ОДНОГО входа пришлет состояние ВСЕХ.
Один бит Modbus передать не может, как минимум передается один байт. А вот кто-то не может вычленить из байта требуемый запросом бит
з.ы. вот вижу только работу онлайн отладки, а на экран что нибудь передается?
Сергей0308 у китайцев, документацию? вы шутите? :) Это же клепают не крупные фирмы типа chint и им подобные.....
Сергей0308
25.08.2023, 22:49
Один бит Modbus передать не может, как минимум передается один байт. А вот кто-то не может вычленить из байта требуемый запросом бит
з.ы. вот вижу только работу онлайн отладки, а на экран что нибудь передается?
Сергей0308 у китайцев, документацию? вы шутите? :) Это же клепают не крупные фирмы типа chint и им подобные.....
Вы, как обычно, в смысле, как с Луны упали, неужели нет других устройств, в смысле, с документацией или с какими народ уже разобрался, в смысле, знает как они работают? В смысле, необязательно брать "неведому зверушку"!
Сергей0308 Цена определяющий фактор. Но с китайцами нужен глаз да глаз. Например один иностранец купил на тао-бао подобную плату реле, все бы хорошо, но вот байты CRC китайцы перепутали.
Второе устройство с перепутанной CRC как-то тут на форуме показывали.
и опять же, вытащить нужные биты из запроса данного конкретного реле для любой Scada не представляет сложности. Сложность возникла у ПР
Сергей0308
26.08.2023, 00:15
Сергей0308 Цена определяющий фактор. Но с китайцами нужен глаз да глаз. Например один иностранец купил на тао-бао подобную плату реле, все бы хорошо, но вот байты CRC китайцы перепутали.
Второе устройство с перепутанной CRC как-то тут на форуме показывали.
и опять же, вытащить нужные биты из запроса данного конкретного реле для любой Scada не представляет сложности. Сложность возникла у ПР
Ну, это опять ваша гипотеза, давайте не будем фантазировать, скажем как оно есть на самом деле на данный момент, в смысле, пока трудности возникли только у ТС! Ранее подобные реле уже обсуждали на форуме(даже я в этом участвовал) и успешно все проблемы разрешались! В смысле, ничего не стоит проверить на другом устройстве или ОРС сервером!
Сергей0308 реле были другие, там спокойно через холдинги все читалось, и входы и выходы и управление реле.
Один бит Modbus передать не может, как минимум передается один байт. А вот кто-то не может вычленить из байта требуемый запросом бит...
https://owen.ru/forum/attachment.php?attachmentid=11962&d=1392751544
А я разве говорил, что один бит?
Очень просто, ОЛ выводит байт ответа, какой получил из слейва, ведь предполагалось, что получим байт, в младшем бите которого, находится состояние ОДНОГО входа
petera а слейв считает, спросили 0 регистр DI, какая разница какой ты там бит хочешь посмотреть - держи байт и разбирайся сам :)
слейв не прав?, должен был сделать смещение в 0 бит запрашиваемый и выдать байт в таком виде? Вроде у него не Coils запрашивают, а DI, DO
Вроде у него не Coils запрашивают, а DI, DO
А Coils у нас теперь не DO? Ну ОК, чё...
нашли ошибку, будем надеяться её поправят, тут главное охватить как можно больше ситуаций, например вейнтек сколько бы бит не запрашивать, формирует запрос заполнить байт полностью 69829 и вот появляется вопрос, если слейв заточен под конкретный запрос будет ли он отвечать, выдавая свои discret inputs или ответит ошибкой 02
imaex это набор, расположенный в байте, среди которого и надо определить требуемый, вроде не задача слейва смещать запрашиваемый бит в 0-й бит в данном случае.
imaex это набор, расположенный в байте, среди которого и надо определить требуемый, вроде не задача слейва смещать запрашиваемый бит в 0-й бит в данном случае.
Спасибо кэп. Осталось непонятным - DO и coil - это одно и то же, или нет?
imaex смотрите протокол пожалуйста, раз сами на него ссылались. 0х01 это регистры DO - Read Coil Status запрос НЕСКОЛЬКИХ состояний Coils
Значения DO в ответе находятся в одном байте и соответствуют значению битов.
Значения битов определяются как 1 = ON и 0 = OFF.
битовая маска выходов. Для входов аналогично.
Описание реле соответствуют протоколу? вроде да, почему на запрос бита 4 слейв должен отвечать только 0 или 1 ? на каком таком основании?
Это как раз ОЛ должен при использовании переменной Bool и выставлении бита 4 наложить маску на ответ и выдать в переменную true или false.
А не слейв вам заранее все подготовить. И тут реально напрашивается переменная Byte, int чтобы уже в программе на один запрос самим разложить на биты.
а не делать 4 и более запросов, учитывая что ПР не поддерживает групповые запросы вообще.
melky, Вы такой многословный, я поражаюсь. За мыслью не успеваете, когда пишите. Очевидно, что в результате и рождаются перлы вроде:
Вроде у него не Coils запрашивают, а DI, DO
ТщательнЕЕ надо.
imaex ну имел ввиду не в единственном экземпляре :)
з.ы. я уже сам запутался, вроде как запрашивая С 4-го бита например 5 DI то в байте ответа в нулевом бите должен оказаться 4-й Coil, в 1-м 5-й, во 2-м - 6-й и так далее и в последнем байте ответа пустые части должны быть заполнены нулями....
Чтобы за железку найти проверить этот момент с ответом слейва...
Так что вероятно petera прав, просто слейв тут предполагает что запросы всегда с 0 бита и минималка 8 бит типа
надо доставать английский документ и сидеть переводить, а то на просторах на русском кто во что горазд, видимо так же и китайцы поступили :(
Сергей0308 реле были другие, там спокойно через холдинги все читалось, и входы и выходы и управление реле.
Просканировал холдинги на ней, там только один тысячный регистр, в котором постоянно висит тройка - независимо от того, что происходит на входах или выходах. Адрес слейва у нее выставлен на "1", если что.
imaex смотрите протокол пожалуйста, раз сами на него ссылались. 0х01 это регистры DO - Read Coil Status запрос НЕСКОЛЬКИХ состояний Coils
битовая маска выходов. Для входов аналогично.
Описание реле соответствуют протоколу? вроде да, почему на запрос бита 4 слейв должен отвечать только 0 или 1 ? на каком таком основании?
Это как раз ОЛ должен при использовании переменной Bool и выставлении бита 4 наложить маску на ответ и выдать в переменную true или false.
А не слейв вам заранее все подготовить. И тут реально напрашивается переменная Byte, int чтобы уже в программе на один запрос самим разложить на биты.
а не делать 4 и более запросов, учитывая что ПР не поддерживает групповые запросы вообще.
Мне тоже так кажется
kondor3000
26.08.2023, 19:10
Просканировал холдинги на ней, там только один тысячный регистр, в котором постоянно висит тройка - независимо от того, что происходит на входах или выходах. Адрес слейва у нее выставлен на "1", если что.
Это возможно скорость, 3 - 9600, 4 -19200 больше у таких не бывает.
А адрес слейва меняется? В каком он регистре?
kondor3000 смена адреса есть в примерах по ссылкам на платы, можно через парсер посмотреть
Это возможно скорость, 3 - 9600, 4 -19200 больше у таких не бывает.
А адрес слейва меняется? В каком он регистре?
Скорость стоит 9600, похоже она.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot