Показано с 1 по 8 из 8

Тема: МСД-100 + ПЛК63(мастер)/OwenPoolMaster

  1. #1
    Пользователь
    Регистрация
    01.12.2007
    Адрес
    Воронеж
    Сообщений
    201

    По умолчанию МСД-100 + ПЛК63(мастер)/OwenPoolMaster

    Ну штож поднимем вопрос( оставленный без ответа) еще раз.
    1) почему OwenPoolMaster на скорости 115200 глючит круто( обновляет выходные переменные сразу во всех каналах, и ошибок связи примерно 50%, из них 39х примерно половина, остальные таймаут. Модбас на этих же проводах и скорости летает без вопросов, да еще и со сканом = 30 мс.)

    2)Как МСД заставить в лог писать числа в целочисленном формате без запятой и степени( ставил тип регистра int, ULong)

    3) как мсд заставить в режиме спая "опрашивать" 4 канала, но писать их(
    все 4 канала) на карту только по событию( изменение) в первом канале.

    4) Посылаю в МСД во таким вот "кодом"
    Код:
    	ScanParams: ARRAY[0..8] OF OwenPool :=
          ( every := T#500ms, IsRead := TRUE, EncodeType := OW_FL24, Addr := 40, AddrLen := A8BIT, Name := 'SP', Index := 0, TimeOut := T#100ms),       (*MB110: PIPE*)
          ( every := T#5s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 30, AddrLen := A8BIT, Name := 'PV', Index := 16#FFFF, TimeOut := T#100ms),  (*TRM: TANK2*)
          ( every := T#5s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 31, AddrLen := A8BIT, Name := 'PV', Index := 16#FFFF, TimeOut := T#100ms),  (*TRM: TANK3*)
          ( every := T#5s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 30, AddrLen := A8BIT, Name := 'SP', Index := 0, TimeOut := T#100ms),                (*TRM: TANK2*)
          ( every := T#5s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 31, AddrLen := A8BIT, Name := 'SP', Index := 0, TimeOut := T#100ms),                (*TRM: TANK3*)
    
          ( every := T#500ms, IsRead := FALSE, EncodeType := OW_SINT2, Addr := 99, AddrLen := A8BIT, Name := 'T2', Index := 0, TimeOut := T#50ms),        (*MSD-100: T2 = 0x436C*)
          ( every := T#500ms, IsRead := FALSE, EncodeType := OW_SINT2, Addr := 99, AddrLen := A8BIT, Name := 'T3', Index := 0, TimeOut := T#50ms),        (*MSD-100: T3 = 0x679B*)
          ( every := T#500ms, IsRead := FALSE, EncodeType := OW_SINT2, Addr := 99, AddrLen := A8BIT, Name := 'C', Index := 0, TimeOut := T#50ms),          (*MSD-100: C = 0xE4EE*)
          ( every := T#100ms, IsRead := FALSE, EncodeType := OW_SINT2, Addr := 99, AddrLen := A8BIT, Name := 'Type', Index := 0, TimeOut := T#50ms);    (*MSD-100: Type = 0xC777*) 
    
    IF( EVENT <> EVENT_NONE)THEN
      ScanParams[ 5].ValDInt := tank2.Temperature.val.val;       (*MSD-100: T2 = 0x436C*)
      ScanParams[ 6].ValDInt := tank3.Temperature.val.val;       (*MSD-100: T3 = 0x679B*)
      ScanParams[ 7].ValDInt := 111;                                               (*MSD-100: C = 0xE4EE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)
      ScanParams[ 8].ValDInt := EVENT;                                         (*MSD-100: Type = 0xC777*)
      PoolType := 8;
      EVENT := EVENT_NONE;
      RETURN;
    END_IF
    
    (*Если COM-порт открыт, то переходим к приему и передачи данных *)
    IF( NOT COM_SERVICE1.ready)THEN
    (*Устанавливаем настройки COM-порта*)
    		Settings.Port:= 0;               (*COM0 – RS485, COM1 – RS232, COM2 – ?? ???., COM3 - ?? ???., COM4 – RS232-Debug*)
    		Settings.dwBaudRate:=9600;    (*скорость*)
    		Settings.byParity:=0;
    		Settings.dwTimeout:=0;
    		Settings.byStopBits:=0;
    		Settings.dwBufferSize:=0;
    		Settings.dwScan:=0;
    
           COM_SERVICE1( Enable:= TRUE, Settings:=Settings , Task:=OPEN_TSK );
           RETURN;
    END_IF
    (**********************************************************************************************************************************************)
    CASE( PoolType)OF
      0:
        OWPool(
          ENABLE := TRUE,
          Count :=  5,(*( SIZEOF( ScanParams)/SIZEOF( ScanParams[ 0])),*)
          Pool := ADR( ScanParams[ 0]),
          IsListen := FALSE,
          ComHandle := Settings.Port);
    
      8..14:
        OWPool(
          ENABLE := TRUE,
          Count :=  3,
          Pool := ADR( ScanParams[ 5]),
          IsListen := FALSE,
          ComHandle := Settings.Port);
        IF( ScanParams[ 5].Complete)THEN PoolType := PoolType OR 1;END_IF
        IF( ScanParams[ 6].Complete)THEN PoolType := PoolType OR 2;END_IF
        IF( ScanParams[ 7].Complete)THEN PoolType := PoolType OR 4;END_IF
        RETURN;
    
      15:
        OWPool(
          ENABLE := TRUE,
          Count :=  1,
          Pool := ADR( ScanParams[ 8]),
          IsListen := FALSE,
          ComHandle := Settings.Port);
        IF( ScanParams[ 8].Complete)THEN PoolType := 0;END_IF
        RETURN;
    
    ELSE
        task_Main_ERROR( info := 'упс...task_Comm_RS_485_1');
        RETURN;
    
    END_CASE;
    Почему частично нормальным( запятая никчему) принимается только ScanParams[ 8]. А 5,6,7 - какаято галиматья( раз принимается , значит и передается )

    5) И какого конфигуратор МСД-100 вечно орет( когда на горячую работаешь) что не удалось записать регистр, но настройку вроде применяет, а вроде и нет.
    Если конфигуриш в оффлайнее, а потом подключаешся, много раз орет что не удалось записать регистр.


    6) Если я передаю тип OW_SINT2, какой должен стоять в МСД-100
    недурственно былобы вообщето табличку соответствия
    Последний раз редактировалось pt200; 24.09.2010 в 14:29.

  2. #2

    По умолчанию

    Добрый день.
    1) МСД перехватывает посылки Мастера в режиме Spy(в конфигураторе Slave) - исходя из описания проблемы - в контроллере так же должны быть плохие данные.
    Это так? - если да, то проверьте настройки ПЛК - проблема в нём ( Увеличте период опроса).
    В случае протокола Modbus - МСД сам Мастер. Сравнивать 2 этих режима недопустимо.
    Рекомендую вам добиться устойчивой связи ПЛК - ТРМ, а потом безболезненно внедрить туда МСД100.
    2) Опрашивать у ТРМ2хх параметры типа Int. В МСД так же тип Int.
    3) Перенести МСД100 на другой интерфейс(rs232 через АС3-М) и сделать его Мастером.
    А необходимую вам логику по превышению первого канала проводить в ПЛК.
    4) Опишите проблему не приминительно к вашей программме. А контретно такой-то параметр у ТРМ не опрашивается.
    6) спасибо за рекомендацию, учтём.
    "ОВЕН"
    тел.: (495) 221-60-64 доб. 1224
    e-mail: i.karetkin@owen.ru

  3. #3
    Пользователь
    Регистрация
    01.12.2007
    Адрес
    Воронеж
    Сообщений
    201

    По умолчанию

    Цитата Сообщение от Илья Кареткин Посмотреть сообщение
    Добрый день.
    1) МСД перехватывает посылки Мастера в режиме Spy(в конфигураторе Slave) - исходя из описания проблемы - в контроллере так же должны быть плохие данные.
    Это так? - если да, то проверьте настройки ПЛК - проблема в нём ( Увеличте период опроса).
    В случае протокола Modbus - МСД сам Мастер. Сравнивать 2 этих режима недопустимо.
    Рекомендую вам добиться устойчивой связи ПЛК - ТРМ, а потом безболезненно внедрить туда МСД100.
    2) Опрашивать у ТРМ2хх параметры типа Int. В МСД так же тип Int.
    3) Перенести МСД100 на другой интерфейс(rs232 через АС3-М) и сделать его Мастером.
    А необходимую вам логику по превышению первого канала проводить в ПЛК.
    4) Опишите проблему не приминительно к вашей программме. А контретно такой-то параметр у ТРМ не опрашивается.
    6) спасибо за рекомендацию, учтём.
    К ПЛК63:RS485( мастер) подключенны два ТРМ201( слейвы), МВ110(слейв) и МСД-100( шпион)
    Протокол ОВЕН( изза МСД) функция OwenPoolMaster.
    ПЛК опрашиват ТРМы, МВ100 чегото там думает и изредка "желает" чтобы несколько ЦЕЛОЧИСЛЕННЫХ значений помещались в "лог"( вот тут то МСД и вступает в игру. Мастер посылает данные несуществующему устройству, а МСД должен их перехватиь).


    P.S. В ПЛК все чудно передается в OwenPoolMaster, а чего она там чудит или МСД-100 это я уже не знаю. Сильно вероятно что проделки OwenPoolMaster( т.к. 115200 поведение функции совсем ужасное)

  4. #4

    По умолчанию

    МСД - не SLAVE устройство, а SPY ему нужен не только запрос от Master, но и ответ slave!!! Именно данные из этого ответа он сохраняет.
    Вам необходимо настроить SPY именно на перехват значений реальных устройств, иначе схема работать не будет!
    "ОВЕН"
    тел.: (495) 221-60-64 доб. 1224
    e-mail: i.karetkin@owen.ru

  5. #5
    Пользователь
    Регистрация
    01.12.2007
    Адрес
    Воронеж
    Сообщений
    201

    По умолчанию

    тогда почему он перехватывает уставку, которую я посылаю несуществующему устройству( правда в большинстве случаев какуюто муру, но всеже)?

    P.s. и что, у вас устройство по протоколу овен на уставку отвечает теми же данными( уставкой для мастера )?

  6. #6

    По умолчанию

    Не могу вам точно сказать, на каком этапе МСД отрабатывает команду на запись.
    Предлагаю больше не обсуждать заведомо некоррекную схему.
    p.s В любом протоколе всегда есть ответ на запись!
    "ОВЕН"
    тел.: (495) 221-60-64 доб. 1224
    e-mail: i.karetkin@owen.ru

  7. #7
    Пользователь
    Регистрация
    01.12.2007
    Адрес
    Воронеж
    Сообщений
    201

    По умолчанию

    Цитата Сообщение от pt200 Посмотреть сообщение
    Ну штож поднимем вопрос( оставленный без ответа) еще раз.
    1) почему OwenPoolMaster на скорости 115200 глючит круто( обновляет выходные переменные сразу во всех каналах, и ошибок связи примерно 50%, из них 39х примерно половина, остальные таймаут. Модбас на этих же проводах и скорости летает без вопросов, да еще и со сканом = 30 мс.)

    2)Как МСД заставить в лог писать числа в целочисленном формате без запятой и степени( ставил тип регистра int, ULong)

    3) как мсд заставить в режиме спая "опрашивать" 4 канала, но писать их(
    все 4 канала) на карту только по событию( изменение) в первом канале.

    4) Посылаю в МСД во таким вот "кодом"
    Код:
    	ScanParams: ARRAY[0..8] OF OwenPool :=
          ( every := T#500ms, IsRead := TRUE, EncodeType := OW_FL24, Addr := 40, AddrLen := A8BIT, Name := 'SP', Index := 0, TimeOut := T#100ms),       (*MB110: PIPE*)
          ( every := T#5s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 30, AddrLen := A8BIT, Name := 'PV', Index := 16#FFFF, TimeOut := T#100ms),  (*TRM: TANK2*)
          ( every := T#5s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 31, AddrLen := A8BIT, Name := 'PV', Index := 16#FFFF, TimeOut := T#100ms),  (*TRM: TANK3*)
          ( every := T#5s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 30, AddrLen := A8BIT, Name := 'SP', Index := 0, TimeOut := T#100ms),                (*TRM: TANK2*)
          ( every := T#5s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 31, AddrLen := A8BIT, Name := 'SP', Index := 0, TimeOut := T#100ms),                (*TRM: TANK3*)
    
          ( every := T#500ms, IsRead := FALSE, EncodeType := OW_SINT2, Addr := 99, AddrLen := A8BIT, Name := 'T2', Index := 0, TimeOut := T#50ms),        (*MSD-100: T2 = 0x436C*)
          ( every := T#500ms, IsRead := FALSE, EncodeType := OW_SINT2, Addr := 99, AddrLen := A8BIT, Name := 'T3', Index := 0, TimeOut := T#50ms),        (*MSD-100: T3 = 0x679B*)
          ( every := T#500ms, IsRead := FALSE, EncodeType := OW_SINT2, Addr := 99, AddrLen := A8BIT, Name := 'C', Index := 0, TimeOut := T#50ms),          (*MSD-100: C = 0xE4EE*)
          ( every := T#100ms, IsRead := FALSE, EncodeType := OW_SINT2, Addr := 99, AddrLen := A8BIT, Name := 'Type', Index := 0, TimeOut := T#50ms);    (*MSD-100: Type = 0xC777*) 
    
    IF( EVENT <> EVENT_NONE)THEN
      ScanParams[ 5].ValDInt := tank2.Temperature.val.val;       (*MSD-100: T2 = 0x436C*)
      ScanParams[ 6].ValDInt := tank3.Temperature.val.val;       (*MSD-100: T3 = 0x679B*)
      ScanParams[ 7].ValDInt := 111;                                               (*MSD-100: C = 0xE4EE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)
      ScanParams[ 8].ValDInt := EVENT;                                         (*MSD-100: Type = 0xC777*)
      PoolType := 8;
      EVENT := EVENT_NONE;
      RETURN;
    END_IF
    
    (*Если COM-порт открыт, то переходим к приему и передачи данных *)
    IF( NOT COM_SERVICE1.ready)THEN
    (*Устанавливаем настройки COM-порта*)
    		Settings.Port:= 0;               (*COM0 – RS485, COM1 – RS232, COM2 – ?? ???., COM3 - ?? ???., COM4 – RS232-Debug*)
    		Settings.dwBaudRate:=9600;    (*скорость*)
    		Settings.byParity:=0;
    		Settings.dwTimeout:=0;
    		Settings.byStopBits:=0;
    		Settings.dwBufferSize:=0;
    		Settings.dwScan:=0;
    
           COM_SERVICE1( Enable:= TRUE, Settings:=Settings , Task:=OPEN_TSK );
           RETURN;
    END_IF
    (**********************************************************************************************************************************************)
    CASE( PoolType)OF
      0:
        OWPool(
          ENABLE := TRUE,
          Count :=  5,(*( SIZEOF( ScanParams)/SIZEOF( ScanParams[ 0])),*)
          Pool := ADR( ScanParams[ 0]),
          IsListen := FALSE,
          ComHandle := Settings.Port);
    
      8..14:
        OWPool(
          ENABLE := TRUE,
          Count :=  3,
          Pool := ADR( ScanParams[ 5]),
          IsListen := FALSE,
          ComHandle := Settings.Port);
        IF( ScanParams[ 5].Complete)THEN PoolType := PoolType OR 1;END_IF
        IF( ScanParams[ 6].Complete)THEN PoolType := PoolType OR 2;END_IF
        IF( ScanParams[ 7].Complete)THEN PoolType := PoolType OR 4;END_IF
        RETURN;
    
      15:
        OWPool(
          ENABLE := TRUE,
          Count :=  1,
          Pool := ADR( ScanParams[ 8]),
          IsListen := FALSE,
          ComHandle := Settings.Port);
        IF( ScanParams[ 8].Complete)THEN PoolType := 0;END_IF
        RETURN;
    
    ELSE
        task_Main_ERROR( info := 'упс...task_Comm_RS_485_1');
        RETURN;
    
    END_CASE;
    Почему частично нормальным( запятая никчему) принимается только ScanParams[ 8]. А 5,6,7 - какаято галиматья( раз принимается , значит и передается )

    5) И какого конфигуратор МСД-100 вечно орет( когда на горячую работаешь) что не удалось записать регистр, но настройку вроде применяет, а вроде и нет.
    Если конфигуриш в оффлайнее, а потом подключаешся, много раз орет что не удалось записать регистр.


    6) Если я передаю тип OW_SINT2, какой должен стоять в МСД-100
    недурственно былобы вообщето табличку соответствия
    Короче, из вот ентого списка вскользь "пробежались" только по части 4го пункта, да и то я могу пойти на принцип, поставить реальное устройство, засыпать его уставками и проверить что будет ловить МСД( есть подозрение, что тоже самое) !

    P.S. Впринципе у меня задача сделать устройство с требуемыми функциями, а не у вас ошибки искать( тем более зарплату тестера от ОВЕНА не получаю), так что готов выслушать и какие нибудь нестандартные методы решения поставленных задач
    Последний раз редактировалось pt200; 28.09.2010 в 10:50.

  8. #8

    По умолчанию

    Повторюсь, у вас 2 варианта:
    1) приборы(slave)---МСД100(SPY)---ПЛК(master) [RS-485]
    2) приборы(slave)---ПЛК(master)[RS-485] +
    ПЛК63(slave)---АС3М[RS-485]---МСД100 (Master) [RS-232]
    Последний раз редактировалось Илья Кареткин; 28.09.2010 в 12:24.
    "ОВЕН"
    тел.: (495) 221-60-64 доб. 1224
    e-mail: i.karetkin@owen.ru

Ваши права

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