PDA

Просмотр полной версии : Считывание битовых переменных с помощью ПР200, ИПП120 в режиме Master. РЕШЕНО!



bayk
16.11.2018, 13:18
Столкнувшись с проблемами обмена данными между ИПП120 и сторонним оборудованием Modbus при помощи техподдержки Овен, которые помогли разобраться в проблеме, пишу технологию вычисления необходимого регистра/бита для задания этих параметров в ОЛ.
Итак в инструкции на оборудование адреса до битовых переменных, считываемых функцией 0x01 написаны явно: например 2049. в ОЛ нет возможности сразу вписать этот регистр в настройку сетевого обмена. нужно сделать из него два числа вида номер регистра/номер бита.
для этого необходимо:
1. разделить адрес из инструкции на 16 и отбросить дробную часть : 2049/16=128,0625 = 128 - мы получаем адрес регистра, который вписываем в соотв. поле ОЛ
2. умножить полученный адрес регистра на 16 и вычесть это число из адреса, указанного в инструкции: 2049 - (128*16) = 2049 - 2048 = 1 - это мы получаем адрес бита в регистре, и снова вписываем его в ОЛ.
3. Profit!

capzap
16.11.2018, 14:24
Как считаете если как на скрине нажать равно какое значение получится?

i.go
16.11.2018, 14:49
В личку можете прислать название стороннего девайса? Спасибо

bayk
16.11.2018, 16:09
Я считаю в обычном калькуляторе. не переходя в режим программиста, чтобы людям было более понятно. тем более у меня штатный калькулятор программиста в вин7 он другой и я не совсем вкуриваю про что вы на скрине спрашиваете.

capzap
16.11.2018, 17:26
Вам не знакомо деление по модулю (https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_ %D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%BE%D0%BC)?

lara197a
16.11.2018, 17:54
capzap
сегодня ведь пятница.
зачем тут MOD :confused:
:)

Aviator_VZh
16.11.2018, 18:33
capzap
Я нажал равно и получил 1. Так и должно быть?

i.go
19.11.2018, 12:16
Вам не знакомо деление по модулю (https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_ %D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%BE%D0%BC)?

думаю, ТС имел в виду именно простое деление, как особенность нахождения правильной области памяти...

capzap
19.11.2018, 12:22
думаю, ТС имел в виду именно простое деление, как особенность нахождения правильной области памяти...

ну если считаете что
3) 128*16
4) 2049 - 2048
это проще чем перевести калькулятор, даже семерочный в режим программиста и выбрать названную мною команду, то так тому и быть

Ревака Юрий
19.11.2018, 12:49
ну если считаете что
1) 2049/16
2) округление 128,0625
3) 128*16
4) 2049 - 2048
это проще чем перевести калькулятор, даже семерочный в режим программиста и выбрать названную мною команду, то так тому и быть

Наверное более корректно говорить о двух операциях:
1. 2049/16 -вычисляем номер регистра
2. 2049MOD16 - вычисляем № бита
Калькулятор в режиме программиста, иначе просто MOD даст только номер бита, чего явно недостаточно.

i.go
19.11.2018, 16:23
Столкнувшись с проблемами обмена данными между ИПП120 и сторонним оборудованием Modbus при помощи техподдержки Овен, которые помогли разобраться в проблеме, пишу технологию вычисления необходимого регистра/бита для задания этих параметров в ОЛ.
Итак в инструкции на оборудование адреса до битовых переменных, считываемых функцией 0x01 написаны явно: например 2049. в ОЛ нет возможности сразу вписать этот регистр в настройку сетевого обмена. нужно сделать из него два числа вида номер регистра/номер бита.
для этого необходимо:
1. разделить адрес из инструкции на 16 и отбросить дробную часть : 2049/16=128,0625 = 128 - мы получаем адрес регистра, который вписываем в соотв. поле ОЛ
2. умножить полученный адрес регистра на 16 и вычесть это число из адреса, указанного в инструкции: 2049 - (128*16) = 2049 - 2048 = 1 - это мы получаем адрес бита в регистре, и снова вписываем его в ОЛ.
3. Profit!

Вот мне не понятно а почему два раза на 16 делим? Это вседа так будет? Или это частный случай, когда в регистре кроме одной булевой переменной ничего нет?

bayk
25.11.2018, 16:23
Почему, мы 2 раза не делим. где вы нашли это? посмотрите, у большинства оборудования производства НЕ овен каждый отдельный бит задан отдельным modbus адресом! вот эту задачу я и решал, как разделить этот целый адрес на части, которые можно скормить ИПП120

rovki
25.11.2018, 18:03
Вот делал в экселе - http://files.hmi-kascada.webnode.ru/200000090-1eb161fab3/%D0%92%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D0%BE%D0%B5%2 0%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7% D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B1%D0%B8 %D1%82%D0%BE%D0%B2%20,%D1%80%D0%B5%D0%B3%D0%B8%D1% 81%D1%82%D1%80%D0%BE%D0%B2%20%D0%B2%20%D0%BA%D0%B0 %D1%81%D0%BA%D0%B0%D0%B4%D0%B5%20%D0%B8%20%D0%B0%D 1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE.xlsx
если у кого калькулятор сломался ;) - преобразование битов в регистры и обратно ...

i.go
29.11.2018, 12:39
Вот делал в экселе - http://files.hmi-kascada.webnode.ru/200000090-1eb161fab3/%D0%92%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D0%BE%D0%B5%2 0%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7% D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B1%D0%B8 %D1%82%D0%BE%D0%B2%20,%D1%80%D0%B5%D0%B3%D0%B8%D1% 81%D1%82%D1%80%D0%BE%D0%B2%20%D0%B2%20%D0%BA%D0%B0 %D1%81%D0%BA%D0%B0%D0%B4%D0%B5%20%D0%B8%20%D0%B0%D 1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE.xlsx
если у кого калькулятор сломался ;) - преобразование битов в регистры и обратно ...

Что такое ардурино? Что такое каскада? Сертификаты на промышленное применение есть?

Aviator_VZh
29.11.2018, 13:17
Что такое ардурино? Что такое каскада? Сертификаты на промышленное применение есть?

Вы это про что? Про преобразование битов в регистры в экселе?

i.go
29.11.2018, 16:29
Вы это про что? Про преобразование битов в регистры в экселе?

Да, про экзель. При чем там ардурина? Мы же тут про логик овена...

Aviator_VZh
29.11.2018, 16:53
В топике никто, кроме Вас, про Ардуино не говорит. И вопрос про преобразование битов в регистры к железу не привязан.

rovki
29.11.2018, 21:17
В топике никто, кроме Вас, про Ардуино не говорит. И вопрос про преобразование битов в регистры к железу не привязан.

Вот именно ! Дал формулу расчета ,а вопросы про другое . Просто что было то и дал ...

i.go
30.11.2018, 09:25
В топике никто, кроме Вас, про Ардуино не говорит. И вопрос про преобразование битов в регистры к железу не привязан.

Если не привязано к железу, то зачем в файле упомянуты какие то решения? Причем, насколко помню, в дурине есть несколько подходов в модбасу. Если сказать А, то мужно говорить Б, а не Ы.

rovki
30.11.2018, 21:04
Если не привязано к железу, то зачем в файле упомянуты какие то решения? Причем, насколко помню, в дурине есть несколько подходов в модбасу. Если сказать А, то мужно говорить Б, а не Ы.

Да просто взял с сайта каскады ,которая применяется в том числе и с ардуиной где есть дискрет инпут ,коилс (флаги) - полная реализация модбаса практически ,а в ПР200 все работает (по модбасу) с регистрами (холдинг) ,ранее в пр110 ,114 , была работа с битами и их переводом ...

i.go
03.12.2018, 09:31
Да просто взял с сайта каскады ,которая применяется в том числе и с ардуиной где есть дискрет инпут ,коилс (флаги) - полная реализация модбаса практически ,а в ПР200 все работает (по модбасу) с регистрами (холдинг) ,ранее в пр110 ,114 , была работа с битами и их переводом ...

А онлайн куркулятора для этих дел нет? Не всегда есть возможность таскать с собой файлы эксель. А в калькуляторе винды очень геморно это все набирать.

petera
03.12.2018, 10:03
А онлайн куркулятора для этих дел нет? Не всегда есть возможность таскать с собой файлы эксель. А в калькуляторе винды очень геморно это все набирать.

На лоджике напиши и пользуйся

40174

Макрос Куркулятор
40175

Макрос сразу в проект добавляй.
В любой момент эмулятор запустил и получил результат

i.go
03.12.2018, 12:27
На лоджике напиши и пользуйся

40174

Макрос Куркулятор
40175

Макрос сразу в проект добавляй.
В любой момент эмулятор запустил и получил результат

Привет! А как 16чные разбирать подобным образом?

petera
03.12.2018, 13:26
Привет! А как 16чные разбирать подобным образом?

А про 16чные речь и не шла

Итак в инструкции на оборудование адреса до битовых переменных, считываемых функцией 0x01 написаны явно: например 2049. в ОЛ нет возможности сразу вписать этот регистр в настройку сетевого обмена. нужно сделать из него два числа вида номер регистра/номер бита.
для этого необходимо:
1. разделить адрес из инструкции на 16 и отбросить дробную часть : 2049/16=128,0625 = 128 - мы получаем адрес регистра, который вписываем в соотв. поле ОЛ
2. умножить полученный адрес регистра на 16 и вычесть это число из адреса, указанного в инструкции: 2049 - (128*16) = 2049 - 2048 = 1 - это мы получаем адрес бита в регистре, и снова вписываем его в ОЛ.