TALME protokollet

Telegrammen går i half-duplex med en normal timout på ca 1 sekund för direktlina och
ca 5 sekunder för LCU. Normal överföringshastighet är mellan 5-10 telegram Q+A per sekund.

Generellt är telegrammen uppbyggda enligt: <Adr> <CC> <N> <Cod> <Data..> <Zsum> <FF>
Samt FF och FE substitueras till FE 01 respektive FE 00, detta sker efter beräkning av Zsum.
Zsum beräknas som xor av alla byten. Jag tar inte med <Zsum> <FF> nedan, men här kommer några exempel.
Telegrammet "01 40" blir efter Zsum och EOM-sub "01 40 41 FF" medan
"41 C0 07 07 01 01 80 00 FE" blir "41 C0 07 07 01 01 80 00 FE 00 FE 01 FF".

CC-byten är lite lurig men sägs bestå av Bit7..0=InfofältQ.InfofältA.0.Global:0.Multidropp.Busy.Error

Flyttal <3Float> kodas i tre byte enligt: <MantissaHi> <MantissaLo> <Exponent> där
float = Mantissa / 32768 * 2 ** Exponent, samt specialfall 0.0 = 00 00 00.
Ex. 1.0 = "40 00 01", -4.0 = "80 00 02", 0.0 = "00 00 00", 3.14 = "64 7A 02"

Heltal <2Heltal> kodas i två byte signed enligt: <Hi> <Lo>. Ex. 500 = "01 F4", -1 = "FF FF"

Logisk variabel <1Log> kodas i en byte, det oforcerade tillståndet finns i de övre 4 bitarna medan de
lägre bitarna avgör forceringen enligt: 03 = "0 Auto", F3 = "1 Auto", 01= "0 Till", 02 = "0 Från".

Direktlina DUC

Förstår inte ducen frågan så svarar den:
A=<Adr> 41 (eller 01)

är ducen upptagen så varar den:
A=<Adr> 42 (eller 02)

Ligger ducen under en LCU så sätter LCU:n Bit2 i frågans CC,
ducen svarar då, på alla frågor, med motsvarande bit satt.
T.ex. För ovanstående blir det "<Adr> 45" respektive "<Adr> 46".

Globala

ID (läs)
Q=<Adr> D0 02 00
A=<Adr> C0 07 <T> <2Prg> <3Opt> ;T={6500upg=1,6501v2,6580v2,6501v3A,6580v3A,6501v3D,6580v3D,
KLE=08,INKODARE,RCU,6505=0F,6585,RCU-AD,SLB,9000,6501v3A/AT=17,ZC=19,6711,PLB,6781=1E,6751,6791}
Under LCU kan CC byten vara D0 iställer för C0, detta gäller för DUC och PLB men ej SLB.

TID (skriv)
Q=FD 90 05 01 <H> <M> <S>
Q=<Adr> D0 05 01 <H> <M> <S> ;Sänd till speciell duc!
Inget svar!

DATUM (skriv)
Q=FD 90 06 02 <Y> <M> <D> <W> ;W={Må=1,Ti,On,To,Fr,Lö,Sö,Spec}
Q=<Adr> D0 06 02 <Y> <M> <D> <W> ;Sänd till speciell duc!
Inget svar!

PS. En notering att om data sänds till just denna enhet så blir CC=D0 istället för 90.

Larm

POLL (hämta larm)
Q=<Adr> 40
A=<Adr> C0 02 <Mess> ;Mess={OK=0,Kall,Mipcl,Varm=4,Varm114=0E,Varm115,PROM=14,RAM,
AutotestOK=1C, för PLB=32}
A=<Adr> C0 09 <01/00> <Lnr> <H> <M> <S> <Y> <M> <D>
01 för utlöst och 00 för återställt, Lnr=00-3F={IN1-FI16}

KVITT (kvittera larm)
Q=<Adr> 80 03 00 <Lnr>
Inget svar!

LARMTAB (läs)
Q=<Adr> C0 02 0B
A=<Adr> C0 09 <LARM 0-63, totalt 8 byte> ;T.ex. 80 00 ... => IN1

Övriga

Skriv LogiskVariabel
Q=<Adr> C0 04 <Cod> <Var> <X> ;Cod={1=Till, Från, Auto, 1, 0}
A=<Adr> 40 ;Var={1=IN,LL,HL,UT,FI,ILV,TC,TG,LF}
;LF={CLARM=1,LLARM,LOCK,OFFLINE,PWRDWN}

Läs LogiskVariabel
Q=<Adr> C0 04 06 <Var> <X>
A=<Adr> C0 02 <1Log>

Skriv FlyttalsVariabel
Q=<Adr> C0 07 07 <Var> <X> <3Float> ;Var={MV=1,SV,IFV,RV,TL,AUT}
A=<Adr> 40

Läs FlyttalsVariabel
Q=<Adr> C0 04 08 <Var> <X>
A=<Adr> C0 04 <3Float>

Skriv HeltalsVariabel
Q=<Adr> C0 06 09 <Var> <X> <2Heltal> ;Var={CNT=1,RT,TH}
A=<Adr> 40

Läs HeltalsVariabel
Q=<Adr> C0 04 0A <Var> <X>
A=<Adr> C0 03 <2Heltal>

Skriv till minnesadress
Q=<Adr> C0 <N> 0C <n> <MemHi> <MemLo> <Data max 32 byte...>
A=<Adr> 40

Läs från minnesadress
Q=<Adr> C0 05 0D <n> <MemHi> <MemLo>
A=<Adr> C0 <N> <n> <Data...>

Jämför med minnesadress
Q=<Adr> C0 <N> 0E <n> <MemHi> <MemLo> <Data max 32 byte...>
A=<Adr> C0 02 <00/01> ;00=Lika 01=Olikhet

återstart av DUC
Q=<Adr> 80 02 <Cod> ;Cod={0F=Kall, 10=Varm114, 11=Varm115}
Inget svar!

Läs TID&DATUM
Q=<Adr> C0 02 12
A=<Adr> C0 08 <W> <Y> <M> <D> <H> <M> <S>

Sätt HELG
Q=<Adr> C0 03 13 <Cod> ;Cod={00=Inte Helg, 80=Helg} (Helg=Söndag)
A=<Adr> 40

Utför AUTOTEST
Q=<Adr> 80 02 14
Inget svar! Resultat kommer vid nästa POLL.

HELGTABELL (2 telegram finns, bör utredas)
Q=<Adr> C0 <N> 21 <BlockNr> <Data...> ;BlockNr 00..xx om max 32 byte
A=<Adr> 40

Direktlina SLB

Telegrammen för skrivning och läsning av logiska, flyttal samt heltal ser nästan ut som för DUC,
dock med en extra 5:e byte ZCnr enligt: <Adr> <CC> <N> <Cod> <ZCnr> <Data..>
Svaren ser identiska ut som de för DUC.
Sedan finns motsvarande telegram för ZG, de har då andra koder, DUC-kod + 0A.
Telegram för att läsa, skriva och jämföra i minnesceller i ZC saknas, men det finns läsa och
skriva för SLB. Dock saknas <n> i dessa telegram. Koden är 16 för skriv och 17 för läs. Max 0x40 byte
Nedan beskrivs andra kommandon.

POLL (hämta larm)
Q=<Adr> 40
A=<Adr> C0 02 <Mess> ;Mess={OK=0,Kall,Varm,PROM,övriga=5-A..)
A=<Adr> C0 0B <ZcNr> <Zlarm> <01/00> <Lnr> <H> <M> <S> <Y> <M> <D>
;Zlarm={No=0,ZC-Offline,FelTemp,FelLufthast,Kallstart}
;Lnr={IN1(fönster)=0,LL1(lågtemp),HL1(högtemp),FI1(summalarm)} (ej helt verifierat)

KVITT (kvittera larm)
Q=<Adr> 80 05 00 <ZcNr> <Zlarm> <Lnr>
Inget svar!

Läs LARMTAB
Q=<Adr> C0 03 15 <BlockNr> ;BlockNr=(1=ZC1-32..8=ZC225-240)
A=<Adr> C0 12 <BlockNr> <Data...> ;Data[0]Bit7-4=ZC1.IN1..FI1
(sista blocket innehåller 8 byte information och 8 byte skräp)

åTERSTART SLB eller ZC
Q=<Adr> 80 04 18 <ZCnr> <Typ> ;ZCnr=(0=SLB), Typ=(0=Kall,Varm)
Inget svar!

åTERSTART ZG
Q=<Adr> 80 04 19 <ZGnr> <Typ> ;Typ=(0=Kall,Varm)
Inget svar!

+ diverse
ZCT(R=1B/W=1A), SysSLB(R=1D/W=1C), RVIS(R=1E), GVIS(R=20/W=1F), RKON(R=21), GKON(R=22),
RPRO(R=24/W=23), GPRO(R=26/W=25), SLBS(R=27), GUST(R=28), ZGET(R=29), ZPUT(W=2A).

Direktlina PLB

Telegrammen för skrivning och läsning av logiska, flyttal samt heltal ser nästan ut som för DUC,
dock skiljer 'ramen' sig något. Duc telegrammet bakas in i ett PLB telegram med Kod 60,61 och 62.
Q=<PLBfysAdr> <CC> <N> 60 <DucNr> <CC2> <n> <Data...>
A=<PLBfysAdr> <CC> <N> <DucNr> <CC3> <n> <Data...>
Använder man istället Kod 61 så avses ZC och med Kod 62 avses ZG.
<CC2> är ducens normala CC orat med 0C, dvs C0 blir CC.
<CC3> är återigen samma som ducens normala CC, alltså inte orat här!
En DUC under PLB har samma telegram som en DUC på direktlina förutom POLL och KVITT som saknas.
En ZC/ZG har förutom läsning och skrivning av variabler ävan omstart (KALL, VARM114 och VARM115) samt
för ZC finns även ID och AUTOTEST med. Alltså saknas bl.a. POLL, KVITT, LARMTAB, MEM, TID och HELG.
OBS! Vid Read MEM/TCS för duc 6711 ger ducen ett N som är ett för stort, PLB:ns N är dock korrekt!
Nedan beskrivs övriga telegram som är direkt till PLB:n.

POLL (hämta larm)
Q=<Adr> 40
A=<Adr> C0 05 02 <DucNr> <zTyp> <Mess> ;Mess={Varm=4,IOtestOK?=32..), zTyp=(2=DUC,PLB)
A=<Adr> C0 05 02 00 03 00 ;Specialfall för vid OK! (Mess=00)
A=<Adr> C0 0E 01 <DucNr> <zTyp> <2SeqNr> <00/01> <Lnr> <6.Tid&Dat> ;DUC/ZC larm
A=<Adr> C0 07 03 <UnitNr> <zTyp> <VarTyp> <Var> <Forc> ;Forcering av variabel under PLB
;zTyp=(1=ZC,2=Duc,3=PLB),VarTyp=(1=Float,2=Dig), Var=seTA7Prog, Force=(Till=1,Från,Auto,Manuell)
A=<Adr> C0 1A 04 <UnitNr> <zTyp> <00=UT,01=IN> <15.Username> <6.Tid&Dat> ;In&utloggning

KVITT (kvittera larm) (Endast larm som sätts 01, kvitteras? Ej verifierat, men gäller ej LCU!)
Q=<Adr> C4 04 0A <2SeqNr>
Inget svar!

LARMTAB ALLA ZC (Paket switching på svaret)
Q1=<Adr> C0 02 12
A1=<Adr> C0 <80|N=A3> <bNstart=00> <bNtot> <Data...normalt 20 st>
Q2=<Adr> C0 <80|N=83> 12 <bN=01>
A2=<Adr> C0 <80|N=A2> <bN=01> <Data...normalt 20 st>
;Data: BitFieldZC 1E byte = {Enhet1=Byt0.Bit0}, 1:a LARMTAB (2 byte), 2:a ...
;LARMTAB Bit 15-0 = {IN1-5,LL1-3,HL1-3,FI1-4,Reserv}
Om inga zonregulatorer finns definierade ges följande svar:
A1=<Adr> C0 1F 00 ... (dvs ingen Paket switching eller bStart eller bNtot)

Read ID samt Write TID och DAT enligt TA65xx

UPDA PLB (Paket switching på frågan)
Q1=<Adr> C0 <80|N=A3> 03 <bNstart=00> <bNtot> <Data...normalt 1F st>
Q2=<Adr> C0 <80|N=A2> 03 <bN> <Data...normalt 1F st>
A=<Adr> C0 82 <bN> ;Om bN<bNtot
A=<Adr> 40 ;Om bN=bNtot

HäMTA PLB (Paket switching på svaret)
Q1=<Adr> C0 02 02
A1=<Adr> C0 <80|N=A3> <bNstart=00> <bNtot> <Data...normalt 20 st>
Q2=<Adr> C0 <80|N=83> 02 <bN=01>
A2=<Adr> C0 <80|N=A2> <bN=01> <Data...normalt 20 st>

AUTOTEST PLB
Q=<Adr> C4 02 0B
Inget svar!

AUTOTEST PLB-ZC
Q=<Adr> C4 06 61 <ZC-adr> C4 02 14
Inget svar!

STATUS ALL (Paket switching på svaret)
Q1=<Adr> C0 02 0C
A1=<Adr> C0 <80|N=A3> <bNstart=00> <bNtot=01> <Data...normalt 20 st>
Q2=<Adr> C0 <80|N=83> 0C <bN=01>
A2=<Adr> C0 <80|N=9E> <bN=01> <Data...normalt 1C st>
;Data: Byte-0 Bit-0={Enhet1 DEF i PLB}, Bit1={Enhet1 ONLINE}

DUC/ZC STATUS UNDER PLB
Q=<Adr> CO 03 0D <PeerAdr>
A=<Adr> C0 04 <OnLine> <Lin> <Typ> ;OnLine={OFF=0,ON}, Lin={1..8}, Typ={1=ZC,DUC,PLB}

OMSTART PLB
Q=<Adr> C4 02 <Cod> ;Cod={Kall=0F,Varm114,Varm115} De två sistnämnda ger samma resultat!
Inget svar!

OMSTART PLB-XXX
Q=<Adr> C4 06 6x <EnhAdr> C4 02 <Cod> ;Cod={Kall=0F(Rensa RAM&EEPROM),Varm114(Rensa RAM),Varm115}
Inget svar! (PS. den första CC skall enligt PLBdoc vara C0?)

LäS&SKRIV PMOD
Q=<Adr> CO <N> 60 <Duc> CC <n> <R/W> <Tab> <x> [<Data>] ;Read=23/Write=24
A=<Adr> C0 <N> <Duc> [C0 <n> <Data>, 40] ;Första för Read och 40 för Write
PASSWORD: Tab=1E, x=01-0A, Data=27 st 00-byte dvs vid tomm PASSWORD.
MV: Tab=01, x=01-08, Data=<GTYP> <10h*FF> <GRäNS> <SIGNALTYP{RESISTANS=0,SPäNNING,STRöM_I,STRöM_E,Digin}> <x>

+ Diverse Z[C,G]T, [R,G]PRO, [R,G]KON, SAVE, REZC, PLB[T,S], UPDA, UPLO, mm

LCU

Adressfältet är på 2 byte när en LCU är inblandad och adresserna är
de logiska till skilnad från på direktlina då fysiska adresser används.
DUC = 00 <LogAdr>
RCU = 28 <LogAdr>
LCU = 38 00
SLB = 40 <LogAdr>
PLB = 48 <LogAdr>

Telegram till DUC, SLB och PLB är annars lika, dock får man inte skicka POLL.

Globala

TID (skriv)
Q=3B FD 90 05 01 <H> <M> <S>
Q=<2UnitAdr> D0 05 01 <H> <M> <S> ;Sänd till speciell duc!
Inget svar!

DATUM (skriv)
Q=3B FD 90 06 02 <Y> <M> <D> <W> ;W={Må=1,Ti,On,To,Fr,Lö,Sö,Spec}
Q=<2UnitAdr> D0 06 02 <Y> <M> <D> <W> ;Sänd till speciell duc!
Inget svar!

Larm

POLL (hämta larm)
Q=38 00 40
A=38 00 40 ;OK! Inget larm
A=38 00 C0 06 03 01 <2UnitNr> <Mess> ;Mess
A=38 00 C0 08 03 01 <2UnitNr> <Znr> <zTyp> <Mess> ;Mess från enhet under PLB!
A=38 00 C0 <N> 04 <2UnitNr> <Kom...> ;Kommando från RCU
A=38 00 C0 <N> 05 <2UnitNr> <2UnitNr> <Kom...> ;DUC Kommando från RCU
A=38 00 C0 0F 01 01 <2UnitNr> <00/01> <Lnr> 00 00 <H> <M> <S> <Y> <M> <D> ;Larm från DUC
;OBS! Lnr=5F vid 01=Offline och 00=Online! för DUC, PLB, SLB och RCU (Kvitteras!)
A=38 00 C0 11 07 01 <2UnitNr> <ZCnr> <Zlarm> <00/01> <Lnr> <2SekvNr> <H> <M> <S> <Y> <M> <D>
;Larm från SLB <Lnr> 0-3 (ej helt verifierat)
A=38 00 C0 11 08 01 <2UnitNr> <DUCnr> <zTyp> <2SekvNr> <00/01> <Lnr> <H> <M> <S> <Y> <M> <D>
;Larm från enhet (zTyp:1=ZC,2=Duc,3=PLB) under PLB <Lnr> = DUC <Lnr>
A=38 00 C0 0A 09 01 <2UnitNr> <Znr> <zTyp> <VarTyp> <Var> <Forc> ;Forcering av variabel under PLB
;VarTyp=(1=Float,2=Dig), Var=seTA7Prog, Force=(Till=1,Från,Auto,Manuell)
A=38 00 C0 ?? ?? 01 <2UnitNr> <Znr> <zTyp> <In/Out> <15Username> <TidDat...> ;In/Urlogging under PLB
A=7B FD C0 02 xx ;xx=01 för Timeout och xx=02 Offline, kommer även efter t.ex. kallstart.

KVITT (kvittera DUC larm)
Q=38 00 80 05 00 <2UnitNr> <Lnr>
Inget svar!

KVITT (kvittera PLB larm)
Q=38 00 80 06 06 <2UnitNr> <2SekvNr>
Inget svar!

KVITT (kvittera SLB larm)
Q=38 00 80 07 04 <2UnitNr> <ZCnr> <Zlarm> <Lnr>
Inget svar!

Övriga

Kallstart av LCU
Q=38 00 C0 03 01 00
A=38 01 C0 02 00

Läs från LCU parametarfil
Q=38 00 C0 04 02 <BlockNr> <n> ;BlockNr=00-FF
A=38 00 C0 <N> <BlockNr> <Data...max 80 Byte>

Skriv till LCU parametarfil
Q=38 00 C0 <N> 03 <BlockNr> <Data...max 80 Byte normalt 57>
A=38 00 40
Under tiden svarar LCU BUSSY på alla DHC telegram.
OBS! Sista blocket måste vara mindre än de övriga!

Utför LINJETEST (för LCU PROMv3.72 men ej för v3.60)
Q=38 00 C0 03 05 <Cod> ;Cod={00=Start sänd 25 första, 01=Nästa}
A=38 00 C0 <N> [<UnitTyp> <FysAdr> <Lin>] * Max 25
A=38 00 40 ;Om alla enhetar rapporterats

Uftör OFFLINETEST (för LCU PROMv3.72 men ej för v3.60)
Q=38 00 C0 03 07 00 ;Sista byten kan vara 00-03 alla ger samma svar!
A=38 00 C0 22 00 <Data0..Data31> ; Data0.Bit7=Duc1 .. Data31.Bit0=Duc256, 1=Offline
Q=38 00 C0 03 07 04 ; OBS! endast definierade enheter ger OFFLINE!
A=38 00 C0 1E 04 <Data0..Data27> ; Data0.Bit7=SLB1, Data2.Bit7=PLB1, Data27.Bit7=RCU1(..4)

Direktlina EPOQ (TA6711) via PT kontakt

Om man kopplar in en ducslinga på en TA6711 via dess PT (PortabelTerminal) kontakt så kan man kommunicera med den och andra enheter på EPOQ nätet på ett TALME liknande sätt. Kommunikationen skiljer sig på följande sätt: RS232 1200 baude. 2 adresser vid Q <00> + <Dest> vid A <Dest> <00 eller adressen på den 6711 som vi kopplat in oss på>. CC skall oras med 0C. Fel i N i A för MEM enligt PLB ovan. Jag har tolkar det så att eftersom vi inte loggar in på den underliggande duc som vi vill kommunicera med så svarar ducen vi kopplat in oss på med ett fel. Felet består i att ett annars korrekt svar saknar "AddEOM". Allt ovanstående kan fixas via Filter=1 i TCPloger.exe