PDA

Просмотр полной версии : ПР + РЕЛЕ С ИНТЕРФЕЙСОМ RS485



TaPX
09.08.2023, 10:00
Добрый день, товарищи. Подскажите пожалуйста, может кто-то знает - можно ли подружить ПР вот с таким модулем(https://pcus.ru/rele-s-interfejsom-rs485-modbus-rtu) по RS-485?

melky
09.08.2023, 10:10
Можно подружить, посмотрел в ПР200, есть для мастера команды 0х01 и 0х05

TaPX
09.08.2023, 10:33
Можно подружить, посмотрел в ПР200, есть для мастера команды 0х01 и 0х05

А где брать номера регистров? Вот эти команды - это шестнадцатиричные данные, которые надо будет писать в сетевые переменные, правильно? Объясните, пожалуйста, поподробнее, как их подружить.

melky
09.08.2023, 10:43
По вашей ссылке все написано в примерах. Воспользуйтесь для проверки любой команды парсером Modbus
01 01 00 01 00 01 AC 0A - чтение состояния - https://rapidscada.net/modbus/ для запросов и ответов RTU режима

Можете порыться еще у китайцев, другие продавцы могут более подробнее расписывать.

TaPX
09.08.2023, 11:03
По вашей ссылке все написано в примерах. Воспользуйтесь для проверки любой команды парсером Modbus
01 01 00 01 00 01 AC 0A - чтение состояния - https://rapidscada.net/modbus/ для запросов и ответов RTU режима

Можете порыться еще у китайцев, другие продавцы могут более подробнее расписывать.

Спасибо за парсер, сейчас пропробую. Это туда в парсер вбивать команды из примеров и смотреть, что он выдаст?

melky
09.08.2023, 11:16
да, если это запрос, ставите соответствующий переключатель на RTU, если ответ, аналогично.

Там команд в принципе кот наплакал

TaPX
09.08.2023, 11:25
Поигрался с парсером, есть непонятные моменты:
1. При записи команд на включение/выключение реле передаваемое значение - это "on" и "off". Как это в ПР реализовать - писать в переменную ноль на выключение и любое число на включение?
2. На этой релюшке есть два входа - in1 и in2. Как читать их значения, я тоже не понял.

melky
09.08.2023, 11:30
Скорее всего у вас 1-й Coil это выход 1, а 2-й coil это выход 2.
Возможно реле позволяет включать выключать командой записи в регистр битовой маской, но в описании этого не указано.
У меня вообще есть реле на 8 выходов, которое различными значениями вкл/выкл с таймером, без таймера но это зависит от прошивки управления в плате. Как у вас не знаю.

Если реле на руках, можете поиграться через Modpoll, расчеты CRC для Modbus есть online, можно даже при помощи терминала поклацать.

TaPX
09.08.2023, 13:19
Скорее всего у вас 1-й Coil это выход 1, а 2-й coil это выход 2.
Возможно реле позволяет включать выключать командой записи в регистр битовой маской, но в описании этого не указано.
У меня вообще есть реле на 8 выходов, которое различными значениями вкл/выкл с таймером, без таймера но это зависит от прошивки управления в плате. Как у вас не знаю.

Если реле на руках, можете поиграться через Modpoll, расчеты CRC для Modbus есть online, можно даже при помощи терминала поклацать.

А как койлы писать из ПР? Я раньше только холдинг регистры писал.

melky
09.08.2023, 13:52
Выберите Булевую переменную, и увидите как.

Сергей0308
09.08.2023, 14:01
Так вроде подобное уже неоднократно обсуждали на форуме, даже я принимал участие в одной из тем!

TaPX
09.08.2023, 15:52
Так вроде подобное уже неоднократно обсуждали на форуме, даже я принимал участие в одной из тем!

А не дадите ссылочку?

TaPX
09.08.2023, 15:55
Выберите Булевую переменную, и увидите как.

Ну смотрите, управлять выходами с помощью ПР на этом модуле я научился. У этого модуля есть загадочные "in1" и "in2". Не знаете, для чего они? Подавал на них плюс, подавал минус, думая, что будут срабатывать выходы - они не срабатывают. Если это чисто информационные входы - как их читать?

melky
09.08.2023, 16:20
TaPX не могу знать, возможно входы. То есть если плата ваша 2in - 2out например. У меня 8х8 плата и другой функционал управления.

Вообще ссылку вы дали на плату с одним реле, а пишете, что у вас их два.

Если такая, то там тоже все написано как читать входы.
https://pcus.ru/moduli/moduli-rele/rele-s-interfejsom-rs485-dvojnoj-modbus-rtu-2x

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

TaPX
10.08.2023, 09:17
Честно, я не вижу тут информации, как читать входы.

imaex
10.08.2023, 09:24
Честно, я не вижу тут информации, как читать входы.

Чтение дискретных входов - функция 2. Не факт, конечно, что это устройство её поддерживает. Пробуйте. Надеюсь, что сам дивайс у у Вас на руках. Или Вы просто теоретизируете?

melky
10.08.2023, 09:28
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

Как вариант, что писал выше, найдите такую плату у китайцев, может быть больше информации, в том числе и по входам

TaPX
10.08.2023, 10:00
Устройство на руках. Функцию 2 не пробовал, пробовал только 3 - щас попробую

melky
10.08.2023, 10:01
Не функцию 2 а адрес 2. И заметьте, если там же на сайте откроете версию на 4 реле, то вообще в запросах не увидите чтения состояния реле.
То есть приходится ориентироваться на данные между тремя платами.

Кстати у китайцев не нашел именно таких плат. Пытался сейчас найти, но все другие.

TaPX
10.08.2023, 10:04
А инпут регистры - они булевские?

жекон
10.08.2023, 10:08
А инпут регистры - они булевские?Разложите и будет булевый

melky
10.08.2023, 10:28
А инпут регистры - они булевские?

А это дело производителя, как захочет, так и сделает.

TaPX
10.08.2023, 13:20
Так, входы я тоже прочитал, функцией два, на нулевом регистре на нулевом бите - спасибо вам всем за помощь )

melky
10.08.2023, 13:38
Что за функция 2 ? Пример запроса в HEX напишите

Read Input Status - Это ?

kondor3000
10.08.2023, 13:50
Так, входы я тоже прочитал, функцией два, на нулевом регистре на нулевом бите - спасибо вам всем за помощь )

И чем управляются входы, плюсом или минусом или сухой контакт?

TaPX
10.08.2023, 13:55
У меня почему-то зависает форум при выборе цитирования - отвечу так.
Мелкий. Видимо да. Вот скриншот из ПР, переменная in1. Eсли есть сигнал на входе1 - переменная выдает 1. Если есть сигнал на входе2 - переменная имеет значение 2. Если на обоих, то ее значение - 3.
Кондор. На входы подаю +, тот же, который приходит на DC+.

imaex
10.08.2023, 13:56
Что за функция 2 ?


Шутите?
https://ru.wikipedia.org/wiki/Modbus#Стандартные_функции_протокола_Modbus

Сергей0308
10.08.2023, 15:20
Мне понравилось, что если изменить только функцию чтения бита(булевой переменной) будет читаться совсем другой бит(булева переменная), в смысле как-то это очень непривычно, типа квантовой механики, для меня так просто чудеса, недавно подобный вопрос обсуждался в одной из тем на форуме!

imaex
10.08.2023, 15:37
Eсли есть сигнал на входе1 - переменная выдает 1. Если есть сигнал на входе2 - переменная имеет значение 2. Если на обоих, то ее значение - 3.


Так и должно быть. Я выше ссылку на статью в вики дал - там всё расписано.

kondor3000
10.08.2023, 16:03
Мне понравилось, что если изменить только функцию чтения бита(булевой переменной) будет читаться совсем другой бит(булева переменная), в смысле как-то это очень непривычно, типа квантовой механики, для меня так просто чудеса, недавно подобный вопрос обсуждался в одной из тем на форуме!

У других фирм и китайцев разные области памяти, поэтому читаются и пишутся разными функциями разные регистры (биты).
Овен наложил их друг на друга, поэтому и читаются одни и те же биты (регистры), разными функциями.

melky
10.08.2023, 16:22
imaex да понял я уже, Просто настолько давно не читал DI. DO с устройств, что забыл :)
Что забавно, таких плат у китайцев не нашел, чтобы и там посмотреть запросы.
А на указанном сайте есть 3 вида аналогичных плат, на 1, 2 и 4 выхода. И если сравнивать там данные, то не везде одинаково написано :) Типа купит человек плату на 4 выхода и гадать будет как что прочитать :)

TaPX
24.08.2023, 15:11
Товарищи, помогайте - не знаю, как обработать полученную информацию со входов этого китайского реле. Дело в том, что все 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

TaPX
24.08.2023, 15:49
Это так не работает

kondor3000
24.08.2023, 15:54
Это так не работает

Читайте, я написал про все варианты выше.

petera
24.08.2023, 16:49
Товарищи, помогайте - не знаю, как обработать полученную информацию со входов этого китайского реле. Дело в том, что все 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 )

petera
24.08.2023, 17:01
Это так не работает

Сетевая переменная in1 какого формата? Покажите ее в настройках мастера...

petera
24.08.2023, 17:12
Расписал все варианты, если чел принимает числа от 1 до 15, то переменная должна быть целочисленная и читаться функцией 0х03.
Либо 4 булевых с разными адресами ( чтение функцией 0х01 или 0х02 )

Вот именно, нужно 4 булевых с последовательными адресами. И никаких ехтрактов с преобразованием TO_INT
69765

kondor3000
24.08.2023, 19:33
Что Вы расписали, очевидные вещи, не в этом был вопрос, лучше примером покажите как конфигурировать несколько булевых переменных 1 или 2 функцией, если конечно в этом дело, а лучше почитать мануал, как производитель предлагает решать эту задачу

Это китайский блок без документации, какой производитель? Тут инфу по крупицам собираем, плюс ТС не может сформулировать вопрос нормально, а скрин с 4 булевыми уже Petera выложил

melky
24.08.2023, 19:39
по ссылке автора пройдите, если перейти на сайт там 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.

petera
24.08.2023, 21:08
Вот подобные платы на Али 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

melky
24.08.2023, 21:27
у плат есть входы.

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

TaPX
25.08.2023, 09:12
Распаковка бит из целочисленной, приём до 16 бит через 1 регистр. 69760
До 16 бит, можно упаковать в маску 69761
Упаковка бит в целочисленную, для передачи до 16 бит через 1 регистр
4 битовых можно просто подать на выходы 69763

Не работает распаковка - переменная булевская, которая невероятным образом принимает целочисленные значения.69784

TaPX
25.08.2023, 09:15
https://owen.ru/forum/attachment.php?attachmentid=32403&d=1501764156

6978569786
Обратите внимание, на тип переменной на первом скриншоте, и на то как она привязана к выходу на втором - без преобразования в инт.

TaPX
25.08.2023, 09:17
Расписал все варианты, если чел принимает числа от 1 до 15, то переменная должна быть целочисленная и читаться функцией 0х03.
Либо 4 булевых с разными адресами ( чтение функцией 0х01 или 0х02 )

когда я пытаюсь поменять тип переменной на целочисленный в настройках, то функция чтения меняется на 0х03 вместо 0х02, и значения входов просто не читаются

TaPX
25.08.2023, 09:18
Сетевая переменная in1 какого формата? Покажите ее в настройках мастера...

69787
Продублирую.

TaPX
25.08.2023, 09:22
Вот именно, нужно 4 булевых с последовательными адресами. И никаких ехтрактов с преобразованием TO_INT
69765

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

TaPX
25.08.2023, 09:24
Что вы все как коренные северные народы, что вижу о том пою. У плат реле нет входов, предполагаю что ни как не относится к вложенной ссылке, по этому писал уже нужно наименование устройства чтоб самому найти нужную информацию. А по ссылке ни каких крупинок собирать не надо, все на что способен модбас описано в примерах и чтение там не гипотетических входов , а арес слейв устройства

https://aliexpress.ru/item/1005001658789711.html?sku_id=12000020692927208&spm=a2g2w.productlist.search_results.11.6e3a4aa6Te wG9y

Вот ссылка на это реле.

TaPX
25.08.2023, 09:26
Вот подобные платы на Али 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.

А с чего вы взяли, что он тут читает входы? Мне думается, что он тут читает состояние выходов.

TaPX
25.08.2023, 09:36
Вот подобные платы на Али 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

TaPX
25.08.2023, 09:40
Нет там никакой целочисленной переменной
команда 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
Сделал, как вы говорите - все равно пишет все в одну переменную, упаковывая туда все выходы.

melky
25.08.2023, 09:42
capzap это не управление реле внешнее, это именно вход, используется по своему усмотрению.

А типа переменной Byte у мастера нет? 02 Function code 0x02 (2) - Read Discrete Inputs - как бы предполагает чтение минимум байта, а не бита

melky
25.08.2023, 10:05
На ПК можно как угодно расшифровать, получив этот несчастный байт. А ПР почему-то не хочет...

melky
25.08.2023, 10:22
Не последнем скрине применена функция 0х01

Так может надо так читать каждый бит, раз по описанию реле указано что используется функция 0х02 ?

Мои китайские реле по другому читаются, не могу проверить

kondor3000
25.08.2023, 10:26
Входы и надо читать функцией 0х02, а состояние выходов 0х01 ( если кто не понял, я об этом и писал)
и байт с их состоянием, на ПР200 не выловить, как я и думал.

TaPX
25.08.2023, 10:27
Не последнем скрине применена функция 0х01

Так может надо так читать каждый бит, раз по описанию реле указано что используется функция 0х02 ?

Мои китайские реле по другому читаются, не могу проверить

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

melky
25.08.2023, 10:30
Как они могут писаться в одну переменную, если указаны разные ? Хотя... Если ПР читает байт, независимо от установленного бита делает если > 0 то переменная true, то получается настроив 4 переменные и замыкая любой вход все 4-е переменные окажутся в true

kondor3000
25.08.2023, 10:37
Короче надо попробовать читать из 0 регистра целочисленную, функцией 0х04 и попробовать читать целочисленную, функцией 0х03

TaPX
25.08.2023, 10:42
Короче надо попробовать читать из 0 регистра целочисленную, функцией 0х02 и попробовать читать целочисленную, функцией 0х03

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

melky
25.08.2023, 10:45
TaPX вам про другое, возможно прошивка реле хранит состояние входов и выходов еще в Input Regisres или Holding Registers

И на счет функции 2 при чтении из одного регистра но разных бит, то тут проблема ПР, пусть исправляют, так как согласно настройкам ПР должна булевую переменную выставлять по указанному биту и только.

Банально, оставьте на 4-х входовом реле единственную переменную с битом 0, и поочередно замыкайте входы - что произойдет ? Выведите переменную на экран соответственно

kondor3000
25.08.2023, 10:47
я ж вам писал выше, что это невозможно - при изменении типа переменной с булевской на целочисленную невозможно выбрать вторую функцию, которая читает дискретные входы. И если все таки изменить ее тип и читать нулевой регистр третьей функцией - не читается ничего.

Я исправил функцию уже на 04 и 03, чтение целочисленных

TaPX
25.08.2023, 11:03
TaPX вам про другое, возможно прошивка реле хранит состояние входов и выходов еще в Input Regisres или Holding Registers

И на счет функции 2 при чтении из одного регистра но разных бит, то тут проблема ПР, пусть исправляют, так как согласно настройкам ПР должна булевую переменную выставлять по указанному биту и только.

Банально, оставьте на 4-х входовом реле единственную переменную с битом 0, и поочередно замыкайте входы - что произойдет ? Выведите переменную на экран соответственно

Так я именно так и делал. Эта переменная - БУЛЕВСКАЯ начинает принимать целочисленные значения, в зависимости от того, какие и сколько выходов замкнуто. Сейчас не могу показать - сканирую холдинг регистры этой релюшки.

melky
25.08.2023, 12:07
Я о другом. Создаете ОДНУ булевую переменную, она же может быть только 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. В ПЛК есть оба варианта

TaPX
25.08.2023, 13:44
Я о другом. Создаете ОДНУ булевую переменную, она же может быть только true или false, вне зависимости от значения, так как любое значение то байт получаемый больше 0.
Указываете например бит 2. И замыкаете поочередно входа. Если переменная будет становиться в true независимо от замкнутого входа, значит это недоработка в Овен Лоджике и возможно прошивках ПР

Если так будет, делайте видео и пусть Овен исправляет.

Я создавал одну булеву переменную. Пробовал указывать у нее варианты бита от 0 до 4. И при замыкании входов, если выбран бит 1-3, ничего не происходит. А если выбран бит 0 - переменная принимает совсем не булевы значения, являясь при этом булевой.

TaPX
25.08.2023, 13:45
В ПР необходимо сделать возможность чтения целочисленных функциями 0х01 и 0х02
или как максимум добавить BYTE и чтение BYTE функциями 0х01 и 0х02. В ПЛК есть оба варианта

Походу, остается только общаться с техподдержкой.

melky
25.08.2023, 13:49
Ничего не понял :) как булевая переменная может не быть булевой ? :) Скрины можете сделать когда

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

melky
25.08.2023, 14:12
Там чтение 0х01 функцией, на 0х02 такое же поведение? типа булевая, но покажет число 11 ? типа замкнуто 3 входа ?

А если ее при этом перевести в Int переменную ? bool-to-int и как вариант попробовать FB на ST сделать и попробовать выдернуть число?

И как бы чтение других битов должно же было приводить к какому-то результату, нет?

TaPX
25.08.2023, 14:42
Там чтение 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() - тогда при любом положительном значении переменной на выходе функции единица, а при ноле, соответственно, ноль.

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

melky
25.08.2023, 15:14
Мда, тут явно косяк ОЛ. при значениях 1, 2, 4, 8 (как серым горит) переменная должна становиться true в зависимости какой бит выставлен в функции чтения.

Ну или реально, чтобы сделали переменную Byte для функций 0х01 и 0х02 и чтобы на поле программы она была как int чтобы уже там применять Extract и Putbit

И главное же сам ОЛ каким-то чудом выводит ЦИФРЫ :)

TaPX
25.08.2023, 15:34
Мда, тут явно косяк ОЛ. при значениях 1, 2, 4, 8 (как серым горит) переменная должна становиться true в зависимости какой бит выставлен в функции чтения.

Ну или реально, чтобы сделали переменную Byte для функций 0х01 и 0х02 и чтобы на поле программы она была как int чтобы уже там применять Extract и Putbit

И главное же сам ОЛ каким-то чудом выводит ЦИФРЫ :)

В этом то и парадокс. И самое интересное, выход щелкает только при значении "1" этой переменной.

capzap
25.08.2023, 15:35
С функцией "2" происходит то же самое. Скрины приложу сейчас. Функция 1 читает выходы, а функция 2 - входы.
Если ее стандартным готовым блоком bool_to_int интовать, то при интовании в единичку конвертируется только значение 1 переменной, значения 0, 2, 4, 8 на выходе блока bool_to_int принимают нулевое значение.
Пробовали писать функцию на ST с использованием внутри нее встроенной функции bool_to_udint() - тогда при любом положительном значении переменной на выходе функции единица, а при ноле, соответственно, ноль.

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

осталось дождаться когда Вы по аналогии с выходами сделаете четыре входных буля и каждому, с помощью 2 функции, выставите в конфигураторе соответствующий бит и после покажете скрин

TaPX
25.08.2023, 15:51
осталось дождаться когда Вы по аналогии с выходами сделаете четыре входных буля и каждому, с помощью 2 функции, выставите в конфигураторе соответствующий бит и после покажете скрин

Да пожалуйста:
698116981269813698146981569816

замыкал входы на китайской релюшке.

melky
25.08.2023, 15:56
p.s. непонятно в какой момент применяется распознавание бита, если вообще применяется, раз первая булевая переменная изменяет свои значения, хотя просто должна быть 0 или 1 в зависимости какой бит проверяется.

TaPX
25.08.2023, 15:58
p.s. непонятно в какой момент применяется распознавание бита, если вообще применяется, раз первая булевая переменная изменяет свои значения, хотя просто должна быть 0 или 1 в зависимости какой бит проверяется.

парадокс. Мы тут думаем, что проблема в прошивке ПР.

petera
25.08.2023, 16:16
парадокс. Мы тут думаем, что проблема в прошивке ПР.

Проблема в прошивке китайского чуда.
Стандартом https://owen.ru/forum/showthread.php?t=38243&p=414984&viewfull=1#post414984 не запрещено в функции 02(01) запрашивать по одному биту, что мастер в ПР и делает. В ответ нормальный слейв должен упаковать в байт ответа всего один бит(младший в байте ответа).
Китайское чудо упорно запихивает в байт ответа ВСЕ биты входов!!!.

Поигрался вчера с реальной ПРкой и реальным слейвом по этой картинке
69817

Из нормального слейва в сетевые переменные Var1..Var3 читаются по одному биту, не зависимо от состояние соседних бит в слейве.
Если бы мастер в ПР мог делать чтение группы бит, то все бы работало, а так не судьба подружить ПРку с этим китайским чудом.

ЗЫ.
Мастер ПР знает, что в ответ на запрос ОДНОГО бита получит результат в младшем бите ответного байта, по этому ПО ПРки не предусматривает просмотр и выделение ВСЕХ бит из байта ответа

melky
25.08.2023, 16:29
petera как тогда объяснить показания различных значений, которые видны на скринах в первой булевой переменной, 1, 2, 4, 8, 11 ????? 11 - включено 3 бита

Сергей0308
25.08.2023, 16:38
petera как тогда объяснить показания различных значений, которые видны на скринах в первой булевой переменной, 1, 2, 4, 8, 11 ????? 11 - включено 3 бита

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

Какая-то непоследовательность, в смысле, обычно Вы всё предполагаете и предполагаете, даже там, где это не требуется, а здесь, всё, фантазия кончилась!

melky
25.08.2023, 16:41
Сергей0308 какой баг?, человек включает и выключает входы, ОЛ текстом отображает битовую маску, согласно замкнутым входам, а выудить требуемый бит кто-то не может - сам ПР, либо ОЛ или кто?

Сергей0308
25.08.2023, 16:47
Сергей0308 какой баг?, человек включает и выключает входы, ОЛ текстом отображает битовую маску, согласно замкнутым входам, а выудить требуемый бит кто-то не может - сам ПР, либо ОЛ или кто?

Так у него даже документации нет, пусть сначала документацию найдёт и что это устройство поддерживает! И причём тут ПР, пусть с ПК ОРС сервером проверит!

petera
25.08.2023, 18:39
petera как тогда объяснить показания различных значений, которые видны на скринах в первой булевой переменной, 1, 2, 4, 8, 11 ????? 11 - включено 3 бита

Очень просто, ОЛ выводит байт ответа, какой получил из слейва, ведь предполагалось, что получим байт, в младшем бите которого, находится состояние ОДНОГО входа (Внешний вид байта в этом случае совпадает с внешним видом отображения одного бита). Упростили программисты, так сказать, себе жизнь. Никто же не думал, что "шальной" слейв в ответ на запрос состояния ОДНОГО входа пришлет состояние ВСЕХ.

melky
25.08.2023, 21:45
Один бит Modbus передать не может, как минимум передается один байт. А вот кто-то не может вычленить из байта требуемый запросом бит

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

Сергей0308 у китайцев, документацию? вы шутите? :) Это же клепают не крупные фирмы типа chint и им подобные.....

Сергей0308
25.08.2023, 22:49
Один бит Modbus передать не может, как минимум передается один байт. А вот кто-то не может вычленить из байта требуемый запросом бит

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

Сергей0308 у китайцев, документацию? вы шутите? :) Это же клепают не крупные фирмы типа chint и им подобные.....

Вы, как обычно, в смысле, как с Луны упали, неужели нет других устройств, в смысле, с документацией или с какими народ уже разобрался, в смысле, знает как они работают? В смысле, необязательно брать "неведому зверушку"!

melky
25.08.2023, 23:55
Сергей0308 Цена определяющий фактор. Но с китайцами нужен глаз да глаз. Например один иностранец купил на тао-бао подобную плату реле, все бы хорошо, но вот байты CRC китайцы перепутали.
Второе устройство с перепутанной CRC как-то тут на форуме показывали.

и опять же, вытащить нужные биты из запроса данного конкретного реле для любой Scada не представляет сложности. Сложность возникла у ПР

Сергей0308
26.08.2023, 00:15
Сергей0308 Цена определяющий фактор. Но с китайцами нужен глаз да глаз. Например один иностранец купил на тао-бао подобную плату реле, все бы хорошо, но вот байты CRC китайцы перепутали.
Второе устройство с перепутанной CRC как-то тут на форуме показывали.

и опять же, вытащить нужные биты из запроса данного конкретного реле для любой Scada не представляет сложности. Сложность возникла у ПР

Ну, это опять ваша гипотеза, давайте не будем фантазировать, скажем как оно есть на самом деле на данный момент, в смысле, пока трудности возникли только у ТС! Ранее подобные реле уже обсуждали на форуме(даже я в этом участвовал) и успешно все проблемы разрешались! В смысле, ничего не стоит проверить на другом устройстве или ОРС сервером!

melky
26.08.2023, 00:49
Сергей0308 реле были другие, там спокойно через холдинги все читалось, и входы и выходы и управление реле.

petera
26.08.2023, 01:15
Один бит Modbus передать не может, как минимум передается один байт. А вот кто-то не может вычленить из байта требуемый запросом бит...
https://owen.ru/forum/attachment.php?attachmentid=11962&d=1392751544
А я разве говорил, что один бит?
Очень просто, ОЛ выводит байт ответа, какой получил из слейва, ведь предполагалось, что получим байт, в младшем бите которого, находится состояние ОДНОГО входа

melky
26.08.2023, 07:52
petera а слейв считает, спросили 0 регистр DI, какая разница какой ты там бит хочешь посмотреть - держи байт и разбирайся сам :)
слейв не прав?, должен был сделать смещение в 0 бит запрашиваемый и выдать байт в таком виде? Вроде у него не Coils запрашивают, а DI, DO

imaex
26.08.2023, 08:32
Вроде у него не Coils запрашивают, а DI, DO

А Coils у нас теперь не DO? Ну ОК, чё...

capzap
26.08.2023, 08:46
нашли ошибку, будем надеяться её поправят, тут главное охватить как можно больше ситуаций, например вейнтек сколько бы бит не запрашивать, формирует запрос заполнить байт полностью 69829 и вот появляется вопрос, если слейв заточен под конкретный запрос будет ли он отвечать, выдавая свои discret inputs или ответит ошибкой 02

melky
26.08.2023, 09:00
imaex это набор, расположенный в байте, среди которого и надо определить требуемый, вроде не задача слейва смещать запрашиваемый бит в 0-й бит в данном случае.

imaex
26.08.2023, 09:06
imaex это набор, расположенный в байте, среди которого и надо определить требуемый, вроде не задача слейва смещать запрашиваемый бит в 0-й бит в данном случае.

Спасибо кэп. Осталось непонятным - DO и coil - это одно и то же, или нет?

melky
26.08.2023, 09:11
imaex смотрите протокол пожалуйста, раз сами на него ссылались. 0х01 это регистры DO - Read Coil Status запрос НЕСКОЛЬКИХ состояний Coils


Значения DO в ответе находятся в одном байте и соответствуют значению битов.
Значения битов определяются как 1 = ON и 0 = OFF.

битовая маска выходов. Для входов аналогично.

Описание реле соответствуют протоколу? вроде да, почему на запрос бита 4 слейв должен отвечать только 0 или 1 ? на каком таком основании?

Это как раз ОЛ должен при использовании переменной Bool и выставлении бита 4 наложить маску на ответ и выдать в переменную true или false.
А не слейв вам заранее все подготовить. И тут реально напрашивается переменная Byte, int чтобы уже в программе на один запрос самим разложить на биты.
а не делать 4 и более запросов, учитывая что ПР не поддерживает групповые запросы вообще.

imaex
26.08.2023, 09:20
melky, Вы такой многословный, я поражаюсь. За мыслью не успеваете, когда пишите. Очевидно, что в результате и рождаются перлы вроде:


Вроде у него не Coils запрашивают, а DI, DO

ТщательнЕЕ надо.

melky
26.08.2023, 09:31
imaex ну имел ввиду не в единственном экземпляре :)
з.ы. я уже сам запутался, вроде как запрашивая С 4-го бита например 5 DI то в байте ответа в нулевом бите должен оказаться 4-й Coil, в 1-м 5-й, во 2-м - 6-й и так далее и в последнем байте ответа пустые части должны быть заполнены нулями....

Чтобы за железку найти проверить этот момент с ответом слейва...
Так что вероятно petera прав, просто слейв тут предполагает что запросы всегда с 0 бита и минималка 8 бит типа

надо доставать английский документ и сидеть переводить, а то на просторах на русском кто во что горазд, видимо так же и китайцы поступили :(

TaPX
26.08.2023, 19:01
Сергей0308 реле были другие, там спокойно через холдинги все читалось, и входы и выходы и управление реле.

Просканировал холдинги на ней, там только один тысячный регистр, в котором постоянно висит тройка - независимо от того, что происходит на входах или выходах. Адрес слейва у нее выставлен на "1", если что.

TaPX
26.08.2023, 19:03
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 больше у таких не бывает.
А адрес слейва меняется? В каком он регистре?

melky
26.08.2023, 21:21
kondor3000 смена адреса есть в примерах по ссылкам на платы, можно через парсер посмотреть

TaPX
27.08.2023, 12:40
Это возможно скорость, 3 - 9600, 4 -19200 больше у таких не бывает.
А адрес слейва меняется? В каком он регистре?

Скорость стоит 9600, похоже она.