PDA

Просмотр полной версии : МСД-100 + ПЛК63(мастер)/OwenPoolMaster



pt200
24.09.2010, 11:25
Ну штож поднимем вопрос( оставленный без ответа) еще раз.
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
недурственно былобы вообщето табличку соответствия

Илья Кареткин
27.09.2010, 16:20
Добрый день.
1) МСД перехватывает посылки Мастера в режиме Spy(в конфигураторе Slave) - исходя из описания проблемы - в контроллере так же должны быть плохие данные.
Это так? - если да, то проверьте настройки ПЛК - проблема в нём ( Увеличте период опроса).
В случае протокола Modbus - МСД сам Мастер. Сравнивать 2 этих режима недопустимо.
Рекомендую вам добиться устойчивой связи ПЛК - ТРМ, а потом безболезненно внедрить туда МСД100.
2) Опрашивать у ТРМ2хх параметры типа Int. В МСД так же тип Int.
3) Перенести МСД100 на другой интерфейс(rs232 через АС3-М) и сделать его Мастером.
А необходимую вам логику по превышению первого канала проводить в ПЛК.
4) Опишите проблему не приминительно к вашей программме. А контретно такой-то параметр у ТРМ не опрашивается.
6) спасибо за рекомендацию, учтём.

pt200
27.09.2010, 16:48
Добрый день.
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 поведение функции совсем ужасное)

Илья Кареткин
28.09.2010, 09:54
МСД - не SLAVE устройство, а SPY ему нужен не только запрос от Master, но и ответ slave!!! Именно данные из этого ответа он сохраняет.
Вам необходимо настроить SPY именно на перехват значений реальных устройств, иначе схема работать не будет!

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

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

Илья Кареткин
28.09.2010, 10:25
Не могу вам точно сказать, на каком этапе МСД отрабатывает команду на запись.
Предлагаю больше не обсуждать заведомо некоррекную схему.
p.s В любом протоколе всегда есть ответ на запись!

pt200
28.09.2010, 10:46
Ну штож поднимем вопрос( оставленный без ответа) еще раз.
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. Впринципе у меня задача сделать устройство с требуемыми функциями, а не у вас ошибки искать( тем более зарплату тестера от ОВЕНА не получаю), так что готов выслушать и какие нибудь нестандартные методы решения поставленных задач

Илья Кареткин
28.09.2010, 11:48
Повторюсь, у вас 2 варианта:
1) приборы(slave)---МСД100(SPY)---ПЛК(master) [RS-485]
2) приборы(slave)---ПЛК(master)[RS-485] +
ПЛК63(slave)---АС3М[RS-485]---МСД100 (Master) [RS-232]