Показано с 1 по 10 из 11

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

Древовидный режим

Туман МСД200 Slave ModBus RTU 0x10... 24.09.2013, 20:00
Пантелеев Дмитрий Тут проблема Экселя. Он... 25.09.2013, 15:52
Пантелеев Дмитрий Корректировка работает так:... 27.09.2013, 08:15
Пантелеев Дмитрий Я так понимаю у Вас МСД... 02.10.2013, 08:08
Туман не совсем так. По кол-ву... 06.10.2013, 12:23
Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  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 
Просмотров:	638 
Размер:	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 
Просмотров:	463 
Размер:	8.8 Кб 
ID:	10228

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

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

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

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

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

Похожие темы

  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, 17:32
  4. Возможность работы с МСД200 в режиме Slave
    от SergeyN в разделе Эксплуатация
    Ответов: 3
    Последнее сообщение: 30.01.2013, 10:01
  5. ПЛК-150 (Master) + две СП-270 (Slave) по Modbus RTU
    от Boris3B в разделе ПЛК1хх
    Ответов: 17
    Последнее сообщение: 11.11.2010, 16:14

Ваши права

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