PDA

Просмотр полной версии : Регистры МВ 110-8ДФ



Певел
27.10.2011, 22:06
Доброго времени суток.
Пишу программу для рабты с блоком ввода МВ 110-8ДФ, и вот что получается:
Отправляю сообщение: 10 10 00 41 00 01 00 00 00 С9
Получаю ответ: 10 10 00 40 00 01 03 5C
Всё вродебы ничего. Просто обнулил регистр с адресом 0040
Далее анлогично обнуляю остальные регистры.
Сообщения: 10 10 00 41 00 01 00 00 3D 09, 10 10 00 42 00 01 00 00 79 09 и тд.
Ответы соответственно: 10 10 00 41 00 01 52 9C, 10 10 00 42 00 01 A2 9C и тд.

После этого считываю значение всех восьми регистров: 10 03 00 40 00 08 46 99
И получаю ответ: 10 03 10 0000 003D 0079 0044 00F1 00CC 0088 00B5 79 C7
Непонятно. Получается что обнуляется только первый регистр, а остальные заполнены какимито числами не имеющими между собой никакой явной последовательности.

И ещё вопрос, что обозначает чисо 16 после команды в ответном фрэйме? Это количествобайт в регистрах? Для чего эта цифра?

capzap
27.10.2011, 23:24
Вы же можете набрать команду 10 03 00 41 00 01 CRC, тем самым отдельно проверить каждый регистр
третий байт должен показывать количество байт "полезной нагрузки" сообщения без CRC

Певел
28.10.2011, 13:07
Попробовал... Дело в том что в регистры в место нолей записываются какие-то числа. И как их не прочитай все одно и тоже. Эти же числа выводит и программа конфигуратор. Зато сам конфигуратор регистры обнуляет очень даже хорошо, и при запросе из моей программы я получаю нули. Баг... Конфигуратор связывается с блоком по другому протоколу, а по модбасу всё работает не так как надо.
Кстати у меня тут стоит ещё МУ110-8Р. В нем тоже чтото не так. Записываю битовую маску выходов 00, блок отвечает что всё нормально и включает 2, 4, 5, 8 реле. Непонятно...

capzap
28.10.2011, 13:25
попробуйте записать 6 функцией (Preset Single Register), если опять не пойдет, попробуйте скачать эмулятор слейва и на нем сперва потренироваться, возможно Вы не угадали с передачей байт (BE или LE)

Кирилл Валюнин
28.10.2011, 13:52
По 8ДФ
Запись в 41ый регистр 0
Request
00:07 [10][10][00][41][00][01][02][00]
08:0F [00][69][11]
Response
00:07 [10][10][00][41][00][01][52][9C]

Считываем 8м регситров (с 40го)
00:07 [10][03][00][40][00][08][46][99]

Response
00:07 [10][03][10][00][00][00][00][00]
08:0F [00][00][00][00][00][00][00][00]
10:17 [00][00][00][1D][66]

все пустые

Записываем в 41 регистр 6
Request
00:07 [10][10][00][41][00][01][02][00]
08:0F [06][E9][13]
Response
00:07 [10][10][00][41][00][01][52][9C]

Считываем 8м регистров (с 40 го)
Request
00:07 [10][03][00][40][00][08][46][99]

Response
00:07 [10][03][10][00][00][00][06][00]
08:0F [00][00][00][00][00][00][00][00]
10:17 [00][00][00][14][A0]

6 ка на своем месте; ничего постороннего нет

Кирилл Валюнин
28.10.2011, 13:55
по 8Р выложите команду, которой пишете битову маску, пожалуйста

capzap
28.10.2011, 14:14
странно конечно что модули себя так ведут
10 10 00 41 00 01 00 00 00 С9и правильный
[10][10][00][41][00][01][02][00][00][69][11]
насколко я знаю
1. Если Slave принимает корректный запрос и может его нормально обработать, то возвращает нормальный ответ.
2. Если Slave не принимает какого-либо значения, никакого ответа не отправляется. Master диагностирует ошибку по тайм-ауту.
3. Если Slave принимает запрос, но обнаруживает ошибку (parity, LRC, or CRC), никакого ответа не отправляется. Master диагностирует ошибку по тайм-ауту.
4. Если Slave принимает запрос, но не может его обработать (обращение к несуществующему регистру и т. д.), отправляется ответ содержащий в себе данные об ошибке.

я поэтому и не всматривался в запросы, ответы то были

Певел
29.10.2011, 19:41
Благодарю за ответы. Действительно всё работает. Сбило столку то что блок не выдал сообщения об ошибке. И ещё то что стандарт я читал очень давно, и всего я просто не помню, а большинство производителей не используют байт количества полезной нагрузки. Если честно вообще в первый раз увидел его, хотя работал со многими блоками и ввода-вывода и релейной защиты и прочей автоматики.

Певел
29.10.2011, 19:42
С битовой маской история таже.