PDA

Просмотр полной версии : МСД200 Slave ModBus RTU 0x10 не пишет все регистры



Туман
24.09.2013, 21:00
День добрый!

Пытаюсь архивировать данные с помощью МДС200. ПЛК110-60 - Master, МСД200 - Slave. Протокол - ModBus RTU. Использую все 64 канала, типы данных везде одинаковые Int16 Big-endian. Адресация первого 0х0000, второго 0х0001 и т.д. до 0х063.
10227
красное все т.к. когда делал скриншот прибор не был подключен.

Для отправки данных использую ModBus.lib



(*таймер разрещающий отправку раз в 10 сек, стартует заново после получения cmpl*)
***
(*присвоение значений переменным для архивации*)
***
(*Запаковка в буфер данных, всего 128 байтов*)
Buffer[1] := INT_TO_BYTE(m_temp_suct_1);
Buffer[0] := INT_TO_BYTE( SHR(m_temp_suct_1,8));
Buffer[3] := INT_TO_BYTE(m_temp_suct_2);
Buffer[2] := INT_TO_BYTE( SHR(m_temp_suct_2,8));
***
(*Работа с передачей данных*)
(*Устанавливаем настройки COM-порта*)
IF port_opened=0 THEN
Settings.Port:=com_num; (*номер COM-порта*)
Settings.dwBaudRate:=115200; (*скорость*)
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=1;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF

(*Открываем COM-порт*)
COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
(*Если COM-порт открыт, то переходим к приему и передачи данных *)
IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF

IF port_opened=2 THEN (*Удачно проинициализировали*)

send2_modbus(
Enable:= enabl, (* разрешение работы блока *)
Mode:=MB_RTU , (*режим передачи*)
DevAddr:=16 , (*адрес*)
FirstAddr:= 0, (*номер регистра*)
Quantity:= 64, (*количество записываемых регистров*)
ComHandle:=Settings.Port ,(*номер сом-порта*)
TimeOut:=TimeOut , (*таймаут T#50ms*)
Buffer:=Buffer , (* буфер данных *)
Complete=>cmpl , (* скопировать признак завершения операции *)
Exception=>err , (* скопировать регистр ошибок *)
RegCnt=> DataSize); (*кол-во считанных байтов *)

END_IF

IF cmpl THEN enabl:=FALSE; cmpl:=FALSE; END_IF


В итоге пишутся только первые 10 регистров. Если изменить кол-во регистров для записи до 10 и ниже то записывается столько сколько надо. А все что больше 10-ти не пишется. Если изменить начальный регистр на отличный от 0, то все равно записываются регистры начиная с 0-го.
Как записать все 64 регистра за раз? Про способ настроить по другому не надо, интересует именно этот.

При этом если, видимо, была проблема со связью то в файле везде записываются "0", а так тупо записывает только 10 регистров:
10228

Хотя пару раз проскакивало и вот такое:
10229

И да, на скрине видны даты. 06.июнь это 6.6. На запись в регистр отправлялось значение "66", положение десятичной точки "-1". В итоге я получил календарь. Пытался решить открыв файл на флэшке, выбрав все ячейки и сменив формат на "Числовой". Не прокатило. Как решить этот вопрос?

Так же вопрос с внутренними часами. За 5 часов с момента последней синхронизации отстали на 1 час 20 минут. Это слишком много как-то. Как решить этот вопрос?

Прошивка 1.30, конфигуратор 1.0.52.1094 (последние)

Туман
24.09.2013, 23:39
Написал тестовую программу с ПЛК слэйв. Все переменный INT, 64 штуки, каждая переменная равна своему номеру порядковому, от 1 до 64:
10232

Конфигурация МСД200:
10233

И... откуда эта порнография?:
RTU
10234

ASCII
10235

ПЛК мастер, опрос через конфигурацию, значения аналогичным образом:
10236

10237

и результат еще хуже:
ASCII
10238

RTU в принципе аналогичен тому что выше был:
10239

На ОВЕНе настроить МСД200 мастером мне вообще не удалось. Что надо писать в Hash в ПЛК? в МСД read? Есть где-нибудь пример настройки ПЛК + МСД200 (Мастер) на ОВЕНе?

И почему таким макаром сохряняются данные в архив если ПЛК мастер, и опрос через конфигурацию:
10240

Если ПЛК слэйв то сохраняет нормально:
10241

UPD: бл*;%. Вот с какого перепугу программист должен вносить адреса со стороны интерфейса, предназначенного как бы для удобства, в 16-ой системе исчисления, и при этом нигде это явно не указано?
Или читать адреса в 16-ой системе в инструкции к прибору, а потом вручную перевоодить их в 10-ую, т.к. в Codesys в адрес регистра значение вписывается в 10-ой?
Ей богу, если посчиттать сколько тратиться человекочасов на разборку каких-то новых моментов, которые ни разу интуитивно не понятны и вообще толком не описаны у ОВЕНа, то ненароком задумаешься а стоит ли оно того.

Почему в конфигураторе нету кнопки для авт. вычисления адресов с учетом типа данных? Почему нельзя сменить целиком протокол или выделить как табличку? Что мешает сделать что бы при нажатии на ячейку курсор становился не в начало, а в конец и/или выделял все значение для более удобной замены?

Записал регистры в конфигураторе в 16-ой системе. Все заработало, через ModBus.lib тоже.

CEkip
25.09.2013, 03:52
И всего выше сказанного можно сделать вывод: ПЛК (Мастер) + МСД (Подчиненный) - не работает как надо? У меня стоит такая же задача - хотелось бы все-таки узнать - отказаться от этой идеи и искать другое оборудование или все-таки использовать эту связку.
Овен почему-то молчит (попросил пример - а в ответ тишина): http://www.owen.ru/forum/showthread.php?t=10638&page=16&p=119572#post119572

Туман
25.09.2013, 11:43
И всего выше сказанного можно сделать вывод: ПЛК (Мастер) + МСД (Подчиненный) - не работает как надо? У меня стоит такая же задача - хотелось бы все-таки узнать - отказаться от этой идеи и искать другое оборудование или все-таки использовать эту связку.
Овен почему-то молчит (попросил пример - а в ответ тишина): http://www.owen.ru/forum/showthread.php?t=10638&page=16&p=119572#post119572

Почему не работает? Написал ж в конце, что все заработало. Главное просто адресацию в МСД200 вводить в 16-ой системе.
А пример кода в первом посту. Проверить настройки связи и все будет работать. И если отправлять данные с помощью Modbus.lib то даже если ПЛК мастер все ровно пишется в файл. А вот если через конфигурацию, то лесенка.

и пока непонятно что делать с "календарем". любое число от 1.1 до 30/31.12 превращается в дату. Конечно можно умножить на 10 и запомнить что оно на самом деле меньше, но это все равно лажа какая-то.

CEkip
25.09.2013, 12:41
Почему не работает? Написал ж в конце, что все заработало. Главное просто адресацию в МСД200 вводить в 16-ой системе.
А пример кода в первом посту. Проверить настройки связи и все будет работать. И если отправлять данные с помощью Modbus.lib то даже если ПЛК мастер все ровно пишется в файл. А вот если через конфигурацию, то лесенка.

и пока непонятно что делать с "календарем". любое число от 1.1 до 30/31.12 превращается в дату. Конечно можно умножить на 10 и запомнить что оно на самом деле меньше, но это все равно лажа какая-то.

спасибо. это уже кое-что. получим оборудование будем тестировать.

Пантелеев Дмитрий
25.09.2013, 16:52
и пока непонятно что делать с "календарем". любое число от 1.1 до 30/31.12 превращается в дату. Конечно можно умножить на 10 и запомнить что оно на самом деле меньше, но это все равно лажа какая-то.

Тут проблема Экселя. Он автоматом заменяет числа на дату. Если откроете любым другим текстовым редактором, например блокнотом, то там все нормально будет.

Вот вариант решения

Пуск - Настройка - Панель управления - Язык и стандарты - вкладка Дата - Разделитель компонентов даты: выбрать "/" - OK.

и при выгрузке данных в Эксель замена чисел на дату не происходит

Про время: Есть функция корректировка часов. Используйте её.

Туман
26.09.2013, 19:31
Тут проблема Экселя. Он автоматом заменяет числа на дату. Если откроете любым другим текстовым редактором, например блокнотом, то там все нормально будет.

Вот вариант решения

Пуск - Настройка - Панель управления - Язык и стандарты - вкладка Дата - Разделитель компонентов даты: выбрать "/" - OK.

и при выгрузке данных в Эксель замена чисел на дату не происходит

Про время: Есть функция корректировка часов. Используйте её.

Насчет даты спасибо, вопрос снят. Хотя тоже способ решения вызывает вопросы.

А вот с временем проблема. Максимальную корректировку можно внести на 10 000 сек в сутки.А у меня отстают на 100 000 сек в сутки...
UPD. Что-то я напутал насчет 100 000 явно, но прибор уже стоит на объекте и сохраняет. И помню что не хватало максимальной корректировки

Пантелеев Дмитрий
27.09.2013, 09:15
Корректировка работает так:
Записали один раз - прибор запомнил и обнулил это значение. Посчитали на сколько отстает-опережает и записали еще раз. И так до полного совпадения времени.

Туман
01.10.2013, 21:44
Корректировка работает так:
Записали один раз - прибор запомнил и обнулил это значение. Посчитали на сколько отстает-опережает и записали еще раз. И так до полного совпадения времени.

Спасибо.

МСД200 вроде как нормально работает на объекте. Но вот странность при отображении данных на флэшке:
10310

Пантелеев Дмитрий
02.10.2013, 09:08
Я так понимаю у Вас МСД создает несколько файлов за сутки? Пришлите конфигурацию МСД мне на почту. d.panteleev@owen.ru

Туман
06.10.2013, 13:23
Я так понимаю у Вас МСД создает несколько файлов за сутки? Пришлите конфигурацию МСД мне на почту. d.panteleev@owen.ru

не совсем так. По кол-ву свободного/занятого места видно что файл все равно один. Но папок куча, копируется, если все выделить, тоже только одна, т.к. папки и содержимое на 100% идентичные по названию

Конфигурацию отправил