HCCU internal data
{
IData - Internal data
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
$24 00 staticmsg[0..51]
0 Version
1 Subversion
2..5 Serial as stored in PIC
6..7 Memavail Segment
8..51 Just a message
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
$24 01 runtimemsg[0..8]
0..3 Runtime in ticks, approx 55ms each
4..5 approx #RCD's
6 #tasks serving network commands
7 #tasks serving quickmap requests
8 #tasks serving unimap
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
$24 02 statisticmsg[0..21]
0..1 #MRx pack all
2..3 #MRx len fail
4..5 #MRx crc fail
6..7 #MRx code fail
8..9 #QMap req
10..11 #QMap fail
12..13 #poll done
14..15 #poll fail
16..17 #irr AN rep
18..19 #its
20..21 #recover
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
$24 03 xstatusmsg[0..8]
0..1 Masterbase adress
2 Masterstatus
3 Nettimeout
4 UMap low sweep
5 UMap high sweep
6 UMap step
7 UMap delay
8 Poll delay
9 AutoswitchOff :HCCU switch off in fail
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
$24 04 xparametermsg as xstatusmsg
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Masterstatus as :
NetOn =$80
NoMaster =$40
PollEnabled =$20
MapEnabled =$10
ISOCRC =$08
ScanEnabled =$04 new - not yet working
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Access : $24 04
InternalMessage :[0.. ] all items are hibyte first
0..1 :Seg(memavail) :WORD
2..3 :#MMURxPackets all :WORD
4..5 :#MMURxPackets lenfail :WORD
6..7 :#MMURxPackets crcfail :WORD
8..9 :#MMURxPackets codefail :WORD
10..11 :QMaps req :WORD
12..13 :Qmaps fail :WORD
14..15 :poll done :WORD
16..17 :poll fail :WORD
18..19 :irregular :WORD
20..21 :recover :WORD
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
$24 05
Multimaster :[0.. ] all items are hibyte first
0 :Nr of other masters detected
1..2 :Node Master 1
3..4 :Node Master 2
5..6 :Node Master 3
7..8 :Node Master 4
9..10 :Node Master 5
11..12 :Node Master 6
13..14 :Node Master 7
15..16 :Node Master 8
currently limited to 8 other masters, change
CONST MaxOtherMaster below
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
$24 06 IDList del, see ictask
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
change 20/jan/95 :
implemented AutoswitchOff as 9. field in MDCUXPara/MDCUXStatus
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Created :8/Feb/92
Last Update :9/dec/93
Is updated version of :
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
}
{$E-,N-}
{.$D-,L-}
UNIT IData;
INTERFACE
USES RTKernel,{$IFNDEF PC}V25Init,{$ENDIF}ANList;
CONST
SoftVersion=1; { version of this software }
SoftSub=4; { subversion of this software }
UMapLowSweep=9; { lower sweep boundary, lowest probability }
UMapHighSweep=15; { upper sweep boundary, highest probability }
UMapStepCnt=4; { nr of tries on the same probability }
UMapDelay=9; { preset delay between two umaps }
PollDelay=9; { preset delay between two polls }
ERetry=2; { preset retry on invalid }
AutoswitchOffDefault=0;{ infinite }
{$IFDEF PC }
SerialNumber=$00000001; { will be in PIC }
{$ENDIF}
JustAMessageInv='*****************************************';
MDCUXStatusBufferLen=14;
MDCUXInternalLen=20;
MaxOtherMaster=8;
MDCUMultimasterlen=MaxOtherMaster*2+1;
VAR
StaticMsg:ARRAY[0..49]OF BYTE;
RuntimeMsg:ARRAY[0..8]OF BYTE;
StatisticMsg:ARRAY[0..21]OF BYTE;
XstatusMsg:ARRAY[0..9]OF BYTE;
MDCUStatusBuffer :ARRAY[0..14]OF BYTE;
JustAMessage:STRING[41];
InternalMessage :ARRAY[0..MDCUXInternalLen-1]OF BYTE;
MultimasterMsg :ARRAY[0..MDCUMultimasterlen-1]OF BYTE;
OtherMasters:ARRAY[0..MaxOtherMaster-1]OF WORD;
NetEnabled :BOOLEAN; { wished status of network }
NetOn :BOOLEAN; { current status of network }
SeqOnCnt:BYTE; { number of task accessing the network excl.Control }
Pollon,lastseq:BYTE; { debug }
NoMaster:BOOLEAN; { set /reset by Net Control Task }
OtherMasterCnt:BYTE;
AutoswitchOff:BYTE; { changed by ICtask }
ISOCRC:BOOLEAN; { set/ reset by MRxTask - unused now }
PollEnabled,MapEnabled,ScanEnabled:BOOLEAN;{ set/ reset by ICTask }
mema:WORD; { memavail ,seg }
mmurxa,
mmurxl,
mmurxc,
mmurxd:WORD;
qmapcnt:WORD; { nr of qmaps req }
qmapfail:WORD; { nr of qmaps fail }
NRec,
irrcnt,
pollcnt,
pollfail,itscnt:WORD;
UMapLowS,UMapHighS,UMapStepC,UMapD,PollD:BYTE;
{PROCEDURE BuildXStatus(time:LONGINT;Entries:WORD);}
PROCEDURE BuildInternal;
PROCEDURE XSetMasterTimeout(t:BYTE);
PROCEDURE SetOtherMaster(N:WORD);
PROCEDURE BuildMultiMasterMsg;
PROCEDURE BuildStaticMsg;
PROCEDURE BuildRuntimeMsg(Entries:WORD;c,d,e:BYTE);
PROCEDURE BuildStatisticMsg;
PROCEDURE BuildXstatusMsg;
IMPLEMENTATION
{.$DEFINE SingleMaster}
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
PROCEDURE Init;
VAR i:BYTE;
BEGIN
MDCUStatusBuffer[0]:=0; { Init Error Code }
MDCUStatusBuffer[1]:=SoftVersion; { software version }
MDCUStatusBuffer[2]:=SoftSub; { software subversion }
MDCUStatusBuffer[3]:=$80; { handshake byte }
MDCUStatusBuffer[4]:=0; { net buffer size high }
MDCUStatusBuffer[5]:=$80; { net buffer size low }
MDCUStatusBuffer[6]:=$50; { max net packet size }
MDCUStatusBuffer[7]:=ERetry; { retries on invalid reply }
MDCUStatusBuffer[8]:=0; { sum of retries- not used here }
MDCUStatusBuffer[9]:=0; { successful polls 1 - not used here }
MDCUStatusBuffer[10]:=0; { successful polls 2+ - not used here }
MDCUStatusBuffer[11]:=$09; { Delay base = times 100ms }
MDCUStatusBuffer[12]:=0; { not used here }
MDCUStatusBuffer[13]:=0; { not used here }
MDCUStatusBuffer[14]:=0; { not used here }
{$IFDEF SingleMaster}
NetEnabled:=TRUE; { start after powerup }
{$ELSE}
NetEnabled:=FALSE; { wait after power up }
{$ENDIF}
NetOn:=FALSE;
NoMaster:=TRUE;
ISOCRC:=FALSE;
PollEnabled:=TRUE;
MapEnabled:=TRUE;
ScanEnabled:=FALSE;
{ PollEnabled:=FALSE;
MapEnabled:=FALSE;}
JustAMessage:=JustAMessageInv;
FOR i:= 1 To 41 DO JustAMessage[i]:=chr(Not ord(JustAMessage[i]));
{ BuildXStatus(0,0);}
qmapcnt:=0;qmapfail:=0;mmurxa:=0;mmurxl:=0;mmurxc:=0;mmurxd:=0;
pollcnt:=0;pollfail:=0;irrcnt:=0;SeqOnCnt:=0;itscnt:=0;Pollon:=0;NRec:=0;
{ multimastermsg }
FOR i:= 0 To MDCUMultimasterlen-1 DO MultimasterMsg[i]:=0;
FOR i:= 0 To MaxOtherMaster-1 DO OtherMasters[i]:=0;
OtherMasterCnt:=0;
UMapLowS:=UMapLowSweep;
UMapHighS:=UMapHighSweep;
UMapStepC:=UMapStepCnt;
UMapD:=UMapDelay;
PollD:=PollDelay;
lastseq:=$FF;
AutoswitchOff:=AutoswitchOffDefault; { =infinite }
END;
PROCEDURE BuildInternal;
BEGIN
InternalMessage[0]:=hi(mema); { Seg(memavail) }
InternalMessage[1]:=lo(mema);
InternalMessage[2]:=hi(mmurxa); { mmu rx all }
InternalMessage[3]:=lo(mmurxa);
InternalMessage[4]:=hi(mmurxl); { mmu rx lenfail }
InternalMessage[5]:=lo(mmurxl);
InternalMessage[6]:=hi(mmurxc); { mmu rx crcfail }
InternalMessage[7]:=lo(mmurxc);
InternalMessage[8]:=hi(mmurxd); { mmu rx codefail }
InternalMessage[9]:=lo(mmurxd);
InternalMessage[10]:=hi(qmapcnt); { QMaps req }
InternalMessage[11]:=lo(qmapcnt);
InternalMessage[12]:=hi(qmapfail); { Qmaps fail }
InternalMessage[13]:=lo(qmapfail);
InternalMessage[14]:=hi(pollcnt); { poll req }
InternalMessage[15]:=lo(pollcnt);
InternalMessage[16]:=hi(pollfail); { poll fail }
InternalMessage[17]:=lo(pollfail);
InternalMessage[18]:=hi(irrcnt); { irregular net packets }
InternalMessage[19]:=lo(irrcnt);
END;
PROCEDURE XSetMasterTimeout(t:BYTE);
BEGIN
XstatusMsg[3]:=t;
{ MDCUXStatusBuffer[11]:=t; old }
END;
{ next not yet tested }
PROCEDURE SetOtherMaster(N:WORD);
VAR i:BYTE;
BEGIN
IF (OtherMasterCnt<(MaxOtherMaster-1)) THEN
BEGIN
i:=0;
WHILE (OtherMasters[i]<>N)AND(i<(MaxOtherMaster-1)) DO Inc(i);
IF (OtherMasters[i]=0) THEN
BEGIN
Inc(OtherMasterCnt);
OtherMasters[i]:=n;
END;
END;
END;
{ next not yet tested }
PROCEDURE BuildMultiMasterMsg;
VAR i:BYTE;
BEGIN
MultimasterMsg[0]:=OtherMasterCnt;
FOR i:=0 TO MaxOtherMaster-1 DO
BEGIN
MultimasterMsg[1+2*i]:=hi(OtherMasters[i]);
MultimasterMsg[2+2*i]:=lo(OtherMasters[i]);
END;
END;
PROCEDURE BuildStaticMsg;
VAR
l:LONGINT;
b:ARRAY[1..4]OF BYTE ABSOLUTE L;
j:BYTE;
BEGIN
StaticMsg[0]:=SoftVersion;
StaticMsg[1]:=SoftSub;
L:=SerialNumber;
StaticMsg[2]:=b[4];
StaticMsg[3]:=b[3];
StaticMsg[4]:=b[2];
StaticMsg[5]:=b[1];
StaticMsg[6]:=hi(mema); { Seg(memavail) }
StaticMsg[7]:=lo(mema);
FOR j:=1 TO 41 DO StaticMsg[7+j]:=ord(JustAMessage[j]);
END;
PROCEDURE BuildRuntimeMsg(Entries:WORD;c,d,e:BYTE);
VAR
l:LONGINT;
w:ARRAY[1..2]OF WORD ABSOLUTE L;
b:ARRAY[1..4]OF BYTE ABSOLUTE L;
BEGIN
l:=RTKERNEL.Gettime;
RuntimeMsg[0]:=b[4];
RuntimeMsg[1]:=b[3];
RuntimeMsg[2]:=b[2];
RuntimeMsg[3]:=b[1];
w[1]:=Entries;
RuntimeMsg[4]:=b[2];
RuntimeMsg[5]:=b[1];
RuntimeMsg[6]:=c;
RuntimeMsg[7]:=d;
RuntimeMsg[8]:=e;
END;
PROCEDURE BuildStatisticMsg;
BEGIN
StatisticMsg[0]:=hi(mmurxa); { mmu rx all }
StatisticMsg[1]:=lo(mmurxa);
StatisticMsg[2]:=hi(mmurxl); { mmu rx lenfail }
StatisticMsg[3]:=lo(mmurxl);
StatisticMsg[4]:=hi(mmurxc); { mmu rx crcfail }
StatisticMsg[5]:=lo(mmurxc);
StatisticMsg[6]:=hi(mmurxd); { mmu rx codefail }
StatisticMsg[7]:=lo(mmurxd);
StatisticMsg[8]:=hi(qmapcnt); { QMaps req }
StatisticMsg[9]:=lo(qmapcnt);
StatisticMsg[10]:=hi(qmapfail); { Qmaps fail }
StatisticMsg[11]:=lo(qmapfail);
StatisticMsg[12]:=hi(pollcnt); { poll req }
StatisticMsg[13]:=lo(pollcnt);
StatisticMsg[14]:=hi(pollfail); { poll fail }
StatisticMsg[15]:=lo(pollfail);
StatisticMsg[16]:=hi(irrcnt); { irregular net packets }
StatisticMsg[17]:=lo(irrcnt);
StatisticMsg[18]:=hi(itscnt); { itsreq }
StatisticMsg[19]:=lo(itscnt);
StatisticMsg[20]:=hi(NRec); { recovery }
StatisticMsg[21]:=lo(NRec);
END;
PROCEDURE BuildXstatusMsg;
VAR
l:LONGINT;
w:ARRAY[1..2]OF WORD ABSOLUTE L;
b:ARRAY[1..4]OF BYTE ABSOLUTE L;
bl:BOOLEAN ABSOLUTE L;
BEGIN
XstatusMsg[0]:=hi(ANLIST.BaseAdr);
XstatusMsg[1]:=lo(ANLIST.BaseAdr);
b[1]:=0;
IF (NetOn) THEN b[1]:=b[1] or $80;
IF (NoMaster) THEN b[1]:=b[1] or $40;
IF (PollEnabled) THEN b[1]:=b[1] or $20;
IF (MapEnabled) THEN b[1]:=b[1] or $10;
IF (ISOCRC) THEN b[1]:=b[1] or $08;
IF (ScanEnabled) THEN b[1]:=b[1] or $04;
XstatusMsg[2]:=b[1];
{ XstatusMsg[3]:= set otherwise :NetTimeout }
XstatusMsg[4]:=UMapLowS;
XstatusMsg[5]:=UMapHighS;
XstatusMsg[6]:=UMapStepC;
XstatusMsg[7]:=UMapD;
XstatusMsg[8]:=PollD;
XstatusMsg[9]:=AutoswitchOff;
END;
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
BEGIN { autoinit of this unit}
Init;
END. { unit }
home
last updated 4.dec.99
Copyright (99,2000) Ing.Büro R.Tschaggelar