Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: МСД200 Slave ModBus RTU 0x10 не пишет все регистры

  1. #1

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

    День добрый!

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

Название:	1380039864-clip-60kb.png 
Просмотров:	622 
Размер:	79.1 Кб 
ID:	10227
    красное все т.к. когда делал скриншот прибор не был подключен.

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

    PHP код:
    (*таймер разрещающий отправку раз в 10 секстартует заново после получения cmpl*)
    ***
    (*
    присвоение значений переменным для архивации*)
    ***
    (*
    Запаковка в буфер данныхвсего 128 байтов*)
    Buffer[1] := INT_TO_BYTE(m_temp_suct_1);
    Buffer[0] := INT_TO_BYTESHR(m_temp_suct_1,8));
    Buffer[3] := INT_TO_BYTE(m_temp_suct_2);
    Buffer[2] := INT_TO_BYTESHR(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:=FALSEcmpl:=FALSEEND_IF 
    В итоге пишутся только первые 10 регистров. Если изменить кол-во регистров для записи до 10 и ниже то записывается столько сколько надо. А все что больше 10-ти не пишется. Если изменить начальный регистр на отличный от 0, то все равно записываются регистры начиная с 0-го.
    Как записать все 64 регистра за раз? Про способ настроить по другому не надо, интересует именно этот.

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

Название:	1380043878-clip-6kb.png 
Просмотров:	452 
Размер:	8.8 Кб 
ID:	10228

    Хотя пару раз проскакивало и вот такое:
    Нажмите на изображение для увеличения. 

Название:	1380044128-clip-16kb.png 
Просмотров:	561 
Размер:	23.3 Кб 
ID:	10229

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

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

    Прошивка 1.30, конфигуратор 1.0.52.1094 (последние)
    Последний раз редактировалось Туман; 24.09.2013 в 23:48.

  2. #2

    По умолчанию

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

Название:	1380051038-clip-29kb.png 
Просмотров:	783 
Размер:	44.8 Кб 
ID:	10232

    Конфигурация МСД200:
    Нажмите на изображение для увеличения. 

Название:	1380051189-clip-101kb.png 
Просмотров:	551 
Размер:	122.2 Кб 
ID:	10233

    И... откуда эта порнография?:
    RTU
    Нажмите на изображение для увеличения. 

Название:	1380051268-clip-17kb.png 
Просмотров:	741 
Размер:	23.7 Кб 
ID:	10234

    ASCII
    Нажмите на изображение для увеличения. 

Название:	1380052050-clip-15kb.png 
Просмотров:	582 
Размер:	22.7 Кб 
ID:	10235

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

Название:	1380056730-clip-45kb.png 
Просмотров:	623 
Размер:	64.1 Кб 
ID:	10236

    Нажмите на изображение для увеличения. 

Название:	1380056933-clip-87kb.png 
Просмотров:	505 
Размер:	107.0 Кб 
ID:	10237

    и результат еще хуже:
    ASCII
    Нажмите на изображение для увеличения. 

Название:	1380057002-clip-15kb.png 
Просмотров:	448 
Размер:	22.1 Кб 
ID:	10238

    RTU в принципе аналогичен тому что выше был:
    Нажмите на изображение для увеличения. 

Название:	1380057339-clip-15kb.png 
Просмотров:	500 
Размер:	22.5 Кб 
ID:	10239

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

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

Название:	1380057506-clip-21kb.png 
Просмотров:	512 
Размер:	29.6 Кб 
ID:	10240

    Если ПЛК слэйв то сохраняет нормально:
    Нажмите на изображение для увеличения. 

Название:	1380058750-clip-38kb.png 
Просмотров:	609 
Размер:	43.6 Кб 
ID:	10241

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

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

    Записал регистры в конфигураторе в 16-ой системе. Все заработало, через ModBus.lib тоже.
    Последний раз редактировалось Туман; 25.09.2013 в 02:55.

  3. #3

    По умолчанию

    И всего выше сказанного можно сделать вывод: ПЛК (Мастер) + МСД (Подчиненный) - не работает как надо? У меня стоит такая же задача - хотелось бы все-таки узнать - отказаться от этой идеи и искать другое оборудование или все-таки использовать эту связку.
    Овен почему-то молчит (попросил пример - а в ответ тишина): http://www.owen.ru/forum/showthread....572#post119572
    Последний раз редактировалось CEkip; 25.09.2013 в 05:49.

  4. #4

    По умолчанию

    Цитата Сообщение от CEkip Посмотреть сообщение
    И всего выше сказанного можно сделать вывод: ПЛК (Мастер) + МСД (Подчиненный) - не работает как надо? У меня стоит такая же задача - хотелось бы все-таки узнать - отказаться от этой идеи и искать другое оборудование или все-таки использовать эту связку.
    Овен почему-то молчит (попросил пример - а в ответ тишина): http://www.owen.ru/forum/showthread....572#post119572
    Почему не работает? Написал ж в конце, что все заработало. Главное просто адресацию в МСД200 вводить в 16-ой системе.
    А пример кода в первом посту. Проверить настройки связи и все будет работать. И если отправлять данные с помощью Modbus.lib то даже если ПЛК мастер все ровно пишется в файл. А вот если через конфигурацию, то лесенка.

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

  5. #5

    По умолчанию

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

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

  6. #6

    По умолчанию

    Цитата Сообщение от Туман Посмотреть сообщение
    и пока непонятно что делать с "календарем". любое число от 1.1 до 30/31.12 превращается в дату. Конечно можно умножить на 10 и запомнить что оно на самом деле меньше, но это все равно лажа какая-то.
    Тут проблема Экселя. Он автоматом заменяет числа на дату. Если откроете любым другим текстовым редактором, например блокнотом, то там все нормально будет.

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

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

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

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

  7. #7

    По умолчанию

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

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

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

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

    Про время: Есть функция корректировка часов. Используйте её.
    Насчет даты спасибо, вопрос снят. Хотя тоже способ решения вызывает вопросы.

    А вот с временем проблема. Максимальную корректировку можно внести на 10 000 сек в сутки.А у меня отстают на 100 000 сек в сутки...
    UPD. Что-то я напутал насчет 100 000 явно, но прибор уже стоит на объекте и сохраняет. И помню что не хватало максимальной корректировки
    Последний раз редактировалось Туман; 26.09.2013 в 20:44.

  8. #8

    По умолчанию

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

  9. #9

    По умолчанию

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

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

Название:	Безымянный.png 
Просмотров:	523 
Размер:	75.2 Кб 
ID:	10310

  10. #10

    По умолчанию

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

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Адресация регистров Modbus-RTU, ПЛК(Slave)
    от Лёша в разделе ПЛК1хх
    Ответов: 15
    Последнее сообщение: 03.07.2019, 08:02
  2. Modbus (Master) не отображается в память Modbus (Slave)
    от ghoch в разделе Помощь Разработчикам
    Ответов: 3
    Последнее сообщение: 07.05.2018, 09:40
  3. Ответов: 4
    Последнее сообщение: 15.07.2013, 18:32
  4. Возможность работы с МСД200 в режиме Slave
    от SergeyN в разделе Эксплуатация
    Ответов: 3
    Последнее сообщение: 30.01.2013, 11:01
  5. ПЛК-150 (Master) + две СП-270 (Slave) по Modbus RTU
    от Boris3B в разделе ПЛК1хх
    Ответов: 17
    Последнее сообщение: 11.11.2010, 16:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •