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
недурственно былобы вообщето табличку соответствия
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
недурственно былобы вообщето табличку соответствия