Вход

Просмотр полной версии : owen_io+МВ110-16Д r.Cou работает а r.Cn нет



Anton_V_A
29.07.2019, 16:11
Приветствую.

В связке МВ110-16Д с компьютером через АС4 пытаюсь получить состояние входа (0-разомкнуто, 1 - замкнуто).

Пишу в Delphi:
resp:=ReadUInt(23,0,'r.Cn',Cn,-1); (23 - адрес 8-го входа (16 - базовый))
Возвращается ошибка -104 (ERR_NERR (-104) прибор вернул код сетевой ошибки nErr)

Если делаю аналогично, но запрашиваю счетчик этого же входа, то получаю правильный ответ и нулевую ошибку.
resp:=ReadUInt(23,0,'r.Cou',Cn,-1); (23 - адрес 8-го входа (16 - базовый адрес))

В чем я ошибаюсь и как правильно получить текущее состояние входа?

Anton_V_A
29.07.2019, 18:52
... дополнение

Сейчас получилось прочитать состояние входа но только для одного, самого первого (базовый адрес 16):
resp:=ReadUInt(16,0,'r.Cn',Cn,-1);
Возвращает Cn=1 при замкнутом контакте и Cn=0 при разомкнутом.
Если вместо адреса 16 ставить 17..31 - то выдает ошибку -104.

kon48
29.07.2019, 18:52
Приветствую.

В связке МВ110-16Д с компьютером через АС4 пытаюсь получить состояние входа (0-разомкнуто, 1 - замкнуто).

Пишу в Delphi:
resp:=ReadUInt(23,0,'r.Cn',Cn,-1); (23 - адрес 8-го входа (16 - базовый))
Возвращается ошибка -104 (ERR_NERR (-104) прибор вернул код сетевой ошибки nErr)

Если делаю аналогично, но запрашиваю счетчик этого же входа, то получаю правильный ответ и нулевую ошибку.
resp:=ReadUInt(23,0,'r.Cou',Cn,-1); (23 - адрес 8-го входа (16 - базовый адрес))

В чем я ошибаюсь и как правильно получить текущее состояние входа?

Следует строку resp:=ReadUInt(23,0,'r.Cn',Cn,-1);
заменить на resp:=ReadUInt(23,0,'r.Cn ',Cn,-1); т.е. поставить пробел в наименовании параметра. В библиотеке принят синтаксис написания параметра из четырех знаков не считая точки.
Николай Митюхин

Anton_V_A
29.07.2019, 18:58
поставить пробел в наименовании параметра. В библиотеке принят синтаксис написания параметра из четырех знаков не считая точки.
Попробовал, но не получилось.
16-й адрес работает и с пробелом и без него. Остальные адреса выдают ошибку -104.

kon48
30.07.2019, 02:35
Возможно параметр индексируемый тогда надо задать правильно индекс.
Николай Митюхин

Anton_V_A
30.07.2019, 02:59
Вроде нет индекса...
43800

kon48
30.07.2019, 07:31
Попробуйте через конфигуратор выполнить задуманное. С сожалению сам проверить не могу. Нет прибора.
Конфигуратор имеется для прибора МВ110-32ДН.
Николай Митюхин

Anton_V_A
30.07.2019, 10:55
В конфигураторе можно увидеть или сбросить только значение счетчиков на каждом входе. Это аналог команды r.Cou. Она у меня тоже работает.

В итоге разобрался.
Оказывается по запросу r.Cn в базовый адрес прибора выдается битовая маска, содержащая состояния всех входов. Т.е. если замкнут только первый вход, то ответ будет 1. Если второй - то 2, если третий - то 4, если первый и третий - то 5 (1+4) и т.д.

Огромное спасибо за помощь!

kon48
30.07.2019, 11:00
Anton_V_AЗа полезную информацию спасибо.
Николай Митюхин