PDA

Просмотр полной версии : ПЛК110-60 + МВ110-16Д дискретные входы



Glog
05.04.2012, 08:22
Добрый день разъясните новичку. Есть приборы ПЛК110-60, МВ110-16Д, МВ110-8А и ИП320 связь RS485 MODBUS-RTU. Все отлично работает, но не могу опросить состояние дискретных входов с 9 по 16 на МВ110-16Д. Подскажите что нужно сделать в конфигурации ПЛК? Заранее спасибо.

Gans
05.04.2012, 10:16
Здравствуйте Glod
Вот этот документ: http://www.owen.ru/uploads/rie_mv110-16d_dn__881.pdf Стр 48 (Таблица В4).
если не поможет то покажите на чём остановились и окружающии обязательно помогут

Glog
05.04.2012, 10:25
Я могу прочитать битовые значения только первых 8 входов, никак не разберусь как опросить с 9 по 16 входа:confused:

Glog
05.04.2012, 10:44
Я как предположил: адреса с IX6.2.0.0.0 по IX6.2.0.0.7 это вход с 1 по 8, а IX6.2.1.0.0-IX6.2.1.0.7 - с 9 по 16. А не получается так, второй восьми битный модуль дублирует первый:confused:

lara197a
05.04.2012, 11:01
Вам нужно добавить не 8 бит инпут модуль, а регистр инпут модуль.
Потом обзываете переменную к примеру VXODY и используете в программе косвенную адресацию:
In_1:=VXODY.0;
.....
In_16:=VXODY.15;

grv008
21.06.2012, 04:44
Здравствуйте! Не опросить состояние дискретных входов МВ-110-16ДН по Modbus :confused: , а по протоколу Owen опрашивается. Не могу всосать, в чем причина. Выкладываю проект для опроса двух дискретных входов. Что я делаю не так? Помогите

Александр Ч.
21.06.2012, 08:09
В параметрах модулей Register input module использовать - 2 Command Read holding Registers(0x03)

grv008
21.06.2012, 09:58
Этот параметр и стоит в настройках модуля. И что интересно, изменил регистр на 51, вход реагирует, но при добавлении в программе дополнительных входов (а их еще 15 штук), при замыкании первого входа, срабатывают все входа, т.е. получается опрос сразу всех входов. Как мне входа разрулить. В программе этих модулей будет 7 штук. Пробовал делать опрос по битовой маске, работают только первых восемь входов (1-8), а 9-16 не реагирует, либо дублируют (1-8) так же, как и у пользователя Glog.

grv008
21.06.2012, 10:19
Мне нужны просто дискретные входа на модулях МВ-110-16ДН. Со счетчиками я уже разобрался.

Николаев Андрей
21.06.2012, 10:20
Все должно работать. Пример есть тут:
http://www.owen.ru/forum/showthread.php?t=11241

grv008
22.06.2012, 02:41
Я знаю что должно работать, а нет не хочет.:confused: . я уже все настройки перекрутил.

kolian-1111
27.06.2012, 03:38
Пробовал делать опрос по битовой маске, работают только первых восемь входов (1-8), а 9-16 не реагирует, либо дублируют (1-8) так же, как и у пользователя Glog.

ну как удалось победить, а то у меня такая же беда:confused:

Николаев Андрей
27.06.2012, 09:22
Все работает.
У кого что не работает выкладывайте проекты, а лучше шлите на support@owen.ru

grv008
27.06.2012, 10:54
Пока не было времени, как получится, так сразу отпишусь, завтра буду экспериментировать.

grv008
28.06.2012, 07:58
У меня вопрос к CAPZAP. В конфигурации ПЛК создал 1 Universal Modbus Device с настройками сетевого адреса одного модуля МВ-110-16ДН (например 16), далее создаем регистр Register input module, в его параметрах ставим - Register - 51, то бишь управление по маске входов. Вопрос, а как прописать переменные, ведь их шестнадцать штук? Если я прописываю в программе маску входов var1 AT %IW6.1.0.0:WORD; - для первого входа, то как для второго, третьего и .... и шестнадцатого прописать маску входов?

kolian-1111
28.06.2012, 08:45
У меня заработали!!!

http://myforester.ru/uploads/1340862162/gallery_10672_390_46215.png

а не хватало всего то.....

grv008
28.06.2012, 08:58
Хотелось бы через Modbus законектить. По протоколу Owen и у меня все работало. Вот проектик ПЛК и МВ110-16ДН по протоколу Owen Master

grv008
28.06.2012, 18:03
У меня вопрос к CAPZAP. В конфигурации ПЛК создал 1 Universal Modbus Device с настройками сетевого адреса одного модуля МВ-110-16ДН (например 16), далее создаем регистр Register input module, в его параметрах ставим - Register - 51, то бишь управление по маске входов. Вопрос, а как прописать переменные, ведь их шестнадцать штук? Если я прописываю в программе маску входов var1 AT %IW6.1.0.0:WORD; - для первого входа, то как для второго, третьего и .... и шестнадцатого прописать маску входов? У меня вопрос к CAPZAP. В конфигурации ПЛК создал 1 Universal Modbus Device с настройками сетевого адреса одного модуля МВ-110-16ДН (например 16), далее создаем регистр Register input module, в его параметрах ставим - Register - 51, то бишь управление по маске входов. Вопрос, а как прописать переменные, ведь их шестнадцать штук? Если я прописываю в программе маску входов var1 AT %IW6.1.0.0:WORD; - для первого входа, то как для второго, третьего и .... и шестнадцатого прописать маску входов?

А если сделать, как предложил пользователь Lara197a - Вам нужно добавить не 8 бит инпут модуль, а регистр инпут модуль.
Потом обзываете переменную к примеру VXODY и используете в программе косвенную адресацию:
In_1:=VXODY.0;
.....
In_16:=VXODY.15;

- то как в программе прописать адреса для второго, третьего и .... , и десятого модуля.

grv008
29.06.2012, 02:23
Потому что именно Ваши полные ответы мне помогли в начальном познании программирования, а не пару слов, типа сделай так, это проще паренной репы - и усе будет работать. С логикой понятно, а с прописанием, вот здесь наглядный пример бы помог. Вопрос как раз по поводу как сделать из одного регистра 16-ть булевых переменных в языке LD или FBD, если можно примерчик, буду очень признателен.

Николаев Андрей
29.06.2012, 07:20
Вот это как раз просто. Есть в библиотеке Util.lib блок Pack и UnPack.
Ну и как уже обсуждалось - можно обращаться к биту в разряде через точку.
Допустим есть переменная w1 типа word. Чтобы мне получить\записать значение например третьего бита я просто пишу: w1.3 А что с этим битом делать - решать Вам. Записывать в него значение или считывать.
Язык при этом не важен

grv008
02.07.2012, 05:54
Ну хорошо, допустим присвоили для первого входа W1.0, для третьего входа W1.2, для шестнадцатого - W1.15. Это для одного модуля, а для второго, третьего модуля как прописывать?

grv008
02.07.2012, 07:21
Спасибо! Попробую так сделать

Robur
15.08.2012, 12:07
Перечитывая данную ветку и все ссылочные документы с неё многоразово. попробую обобщить (а вы, опытнейшие, прошу поправьте меня, новичка в этом)....

Для того, чтобы прочитать состояния входов модуля МВ110-16Д по Modbus нет "лёгкого" пути, как для других модулей. Поэтому:

1) В конфигурации ПЛК в элементе Modbus Master добавляем подэлемент Universal Modbus Device, в котором в свою очередь подэлемент Register input module, которому в параметрах модуля прописываем адрес регистра 51, а самому регистру присваиваем название переменной, например DI16_1 (дискретные входы 16 модуль 1, к примеру если модулей несколько то 2,3 и т.д.).

http://matrosov.info/uploads/images/another/step1.png

Таким образом после опроса всех модулей получим и некую переменную размером с WORD и содержащую по сути некоторое состояние, которое каждым своим битом описывает состояние каждого входа модуля), причём прочитав мануал (п.4.2.2 стр 15), мы понимаем, что:

http://matrosov.info/uploads/images/another/step2.png

т.е. 1-й вход (бит 0) в состоянии "замкнут"
2-й вход (бит 1) в состоянии "разомкнут"
.....
10 вход (бит 9) в состоянии "замкнут"

2) Поскольку, обозвав полученную переменную прямо в конфигураторе ПЛК, мы заявили её глобально, то использовать в дальнейшем в программах (любых) мы можем :
Желая получить состояние соответствующего входа, обращаемся к переменной через точку, т.е. ко входам №№ 1, 7 и 16 мы обращаемся соответсвенно как DI16_1.0, DI16_1.6, DI16_1.15 из любой программы, ФБ или функции напрямую.
Вероятно можно "распаковать" состояние регистра при помощи утилиты UnPack библиотеки Util.lib, но в библиотеке она BYTE размерности, а как её превратить в WORD, или значение регистра разбить на 2 составляющие BYTE средствами CoDeSys я пока не знаю (по крайней мере негеморойными методами, без сдвигов влево-вправо и т.п.), возможно кто-от из опытных опишет это действие с выкладыванием скринов.

Просьба к опытным программистам, прокомментируйте, если что не так - поправьте меня в самом начале пути ;) .

П.С. это не руководство к действию. это попытка новичка разобраться. задача - опрос концевиков клапанов, заведённых на МВ110-16Д и обработка их в ОВЕН ПЛК 100.

Robur
15.08.2012, 12:29
и ни чего там сложного нет, ознакомтесь с библиотекой на oscat.de, там те же самые преобразования будут со смещением и т.п.

Хорошо, ознакомлюсь :). А в чём, собственно плох способ чтения состояния конкретного входа через имя переменной и точку? Какие плюсы в том, чотбы распаковывать регистр и присваивать куче булевых переменных эти значения? Я пока этого не знаю (не сталкивался) и не понимаю, зачем что-то ещё делать, когда можно просто "прочитать" значение, и даже логически помнить что за параметр к какому входу физически поlключен. например к третьему входу второго модуля МВ110-16Д - просто читаем DI16_2.2...

Или есть какие-то подводные камни?

yaroslavcik
13.03.2014, 16:56
Всем привет!
Такая же проблема как у автора темы, только плк63 и мв110-16д, смотрел кучу примеров с этим модулем, сделал все так же, а входы с 9 по 16 все равно не работают в программе, возможно не правильно организована распаковка буферных данных?!
мой пример в архиве...

yaroslavcik
13.03.2014, 19:11
Нашел выход после недели мучения:D

предположения были верны - не правильно была организована распаковка данных.

Решение в архиве...

tPorte
10.03.2022, 11:50
Пожалуйста объясните как открыть данные с МВ110-16ДН с 9 по 16 входы на языке CFC !! Я уже весь форум просмотрел! Все ссылки на примеры ЗАБЛОКИРОВАНЫ. В языке CFC у меня регистр инпут модуль с регистром 51 тип WORD. Ч то мне делать дальше в программе с этой переменной WORD в языке CFC?К Как распаковать? Как достать данные каждого бита из WORD?
Пожалуйста скинте рабочий пример или объясните - очень прошу

Егор_Егор
10.03.2022, 13:14
точно также, как и с 1го по 8й
59623

kondor3000
10.03.2022, 13:19
Пожалуйста объясните как открыть данные с МВ110-16ДН с 9 по 16 входы на языке CFC !! Я уже весь форум просмотрел! Все ссылки на примеры ЗАБЛОКИРОВАНЫ. В языке CFC у меня регистр инпут модуль с регистром 51 тип WORD. Ч то мне делать дальше в программе с этой переменной WORD в языке CFC?К Как распаковать? Как достать данные каждого бита из WORD?
Пожалуйста скинте рабочий пример или объясните - очень прошу

Регистру WORD который вы прочитали дайте имя, например Mask, тогда разложить его на биты можно через точку, Mask.0 это бит 0 (b0), Mask.1 это бит 1 (b1).....Mask.15 это бит 15 (b15)
Смотри скрин 59625
Собирать маску из битов в обратном порядке.

In_Da_Cher_A
10.03.2022, 14:14
Пожалуйста объясните как открыть данные с МВ110-16ДН с 9 по 16 входы на языке CFC !! Я уже весь форум просмотрел! Все ссылки на примеры ЗАБЛОКИРОВАНЫ. В языке CFC у меня регистр инпут модуль с регистром 51 тип WORD. Ч то мне делать дальше в программе с этой переменной WORD в языке CFC?К Как распаковать? Как достать данные каждого бита из WORD?
Пожалуйста скинте рабочий пример или объясните - очень прошу

FUNCTION_BLOCK UNPACK_W
VAR_INPUT
input: WORD;
END_VAR
VAR_OUTPUT
B0: BOOL;
B1: BOOL;
B2: BOOL;
B3: BOOL;
B4: BOOL;
B5: BOOL;
B6: BOOL;
B7: BOOL;
B8: BOOL;
B9: BOOL;
B10: BOOL;
B11: BOOL;
B12: BOOL;
B13: BOOL;
B14: BOOL;
B15: BOOL;
END_VAR


B0:= input.0;
B1:= input.1;
B2:= input.2;
B3:= input.3;
B4:= input.4;
B5:=input.5;
B6:= input.6;
B7:= input.7;
B8:= input.8;
B9:= input.9;
B10:=input.10;
B11:= input.11;
B12:= input.12;
B13:= input.13;
B14:= input.14;
B15:= input.15;

tPorte
10.03.2022, 14:56
Егор_Егор, kondor3000, In_Da_Cher_A - СПАСИБО ВАМ БОЛЬШОЕ!!! :o Теперь стало понятно!! :))