Home

News

Schnelleinstieg

Hintergrund

Doku

Bilder

Download

Forum

Kontakt

6 Anhang

6.1 Schaltpläne

Der Buskoppler

Die I/O-Applikation 1, 2

Die RS232-Applikation

6.2 Layouts

Buskoppler: Bestückungsplan, Bestückungsseite, Lötseite

I/O-Applikation: Bestückungsplan, Bestückungsseite, Lötseite

RS232-Applikation: Bestückungsplan, Bestückungsseite, Lötseite


6.3 Bauteilliste

Die meisten Bauteile sind von Reichelt beziehbar. Der CAN-Controller stammt von elpro (oder Simons).

 

6.3.1 Der Buskoppler

Nr.

Bauteil

Anzahl

Bemerkung

X4, X5

Western-Einbaubuchse

2

8-Polig ; RJ45

D1

Atmel µC AT90S8515

1

8MHz Ausführung

D3

Siemens/Infineon CAN-Controller SAE81C90

1

Standalone Full-CAN Controller

Q1

16 MHz Standard-Quarz

1

HC-18/U

D2

Phillips CAN-Leitungstreiber

1

PCA82C251

D6

LED

1

3mm

IC1

Festspannungsregler

1

7805

R2, R3

100 Ohm Widerstand

2

 

R4

330 Ohm Widerstand

1

 

R1

100 kOhm Widerstand

1

 

C1, C3, C4, C5, C6, C10, C11

100 nF Keramik-Kondensator

7

 

C2

10 pF Keramik-Kondensator

1

 

C7, C8

33 pF Keramik-Kondensator

1

 

C3

1 µF ElKo

1

35 V

C13

100 µF ElKo

1

35 V

C12

330 µF ElKo

1

35 V

X6

Schraubklemme

1

2-Polig ; RM 5mm

JP1, JP3

1x2 Stiftleiste

2

 

JP2

1x3 Stiftleiste

1

 

X2

2x5 Stiftleiste

1

 

X1

2x8 Stiftleiste

1

 

X2

2x13 Stiftleiste

1

 

6.3.2 Die I/O-Applikation

Nr.

Bauteil

Anzahl

Bemerkung

TR2

12 V Printtransformator 2VA

1

EI30-1

TR1

6 V Printtransformator 1,5VA

1

EI30-1

B1, B2

Brückengleichrichter

2

B80C1500

IC2

Festspannungsregler 5V

1

7805

IC1

Festspannungsregler 12V

1

7812

X2

Schraubklemme

1

3-Polig ; 5mm

X3-X13

Schraubklemme

11

2-Polig ; 5mm

K1-K4

Printrelais Omron G6C-1117P

4

12V ; 230V/10A

D1

LED

2

3mm

IC3, IC5

IC 74HC14

2

invert. Schmitt-Trigger

IC1

Relaistreiber IC

1

ULN 2803

IC6-IC9

Optokoppler IC

4

CNY 17

X1

2x8 Stiftleiste

1

 

D3, D7, D10, D15

Z-Diode 5,1 V

4

 

D2, D4, D5, D8, D9, D11, D14, D17

Diode 1N4148

8

 

C1, C2, C3, C9

1 µF ElKo

4

 

C5, C6, C10, C11, C14, C15

100 nF Keramik-Kondensatoren

6

 

C7, C12

470 µF ElKo

2

 

C8, C13

330 µF ElKo

2

 

R2, R3, R6, R7, R9, R10, R16, R17

47 kOhm Widerstand

8

 

R1, R5, R8, R15

560 Ohm Widerstand

4

 

R14

680 Ohm Widerstand

1

 

R4

330 Ohm Widerstand

1

 

6.3.3 Die RS232-Applikation

Nr.

Bauteil

Anzahl

Bemerkung

X3

SUB-D Stecker

1

9-polig

IC1

IC MAX232

1

 

X4, X5

Schraubklemme

2

2-Polig ; 5mm

R4

330 Ohm Widerstand

1

 

C5, C10, C11

100 nF Keramik-Kondensator

3

 

C13

100 µF ElKo

1

 

C12

330 µF ElKo

1

 

C1-C4

10 µF ElKo

4

 

IC2

Festspannungsregler

1

7805

X1, X2

2x13 Stiftleiste

2

 

D6

LED

1

3mm

 

 

6.4 Datenblätter

Komponenten:

  • Atmel Mikrokontroller AT90S8515
  • Siemens Standalone Full-CAN Controller SAE81C90/91
  • Phillips CAN-Leitungstreiber PCA82C251
  • Maxim RS232 Treiber IC MAX232
  • Optokoppler IC CNY17
  • CMOS Schmitt-Trigger (invertierend) IC 74HC14
  • Relaistreiberstufen IC ULN2803
  • Relais OMRON G6C

 


6.5 EEProm-Tabellen; SRAM-Tabellen

EEPROM-Belegung im I/O-Knoten-µController

Adresse

0

1-3

4-35

36-243

244-247

255

Verwendung

reserviert (*1)

Exemplar-nummer

MO-ID-Tabelle

vorgefertigte Telegramme

Taster/Relais-Zuordnungsabbild

Knotentyp

(Verwendung von Adresse1 als Exemplarnummer nur für Softwareversionen vor v1.10)

EEPROM-Belegung im RS232-Knoten-µController

Adresse

0

1-3

4-35

255

Verwendung

reserviert (*1)

Exemplarnummer

MO-ID-Tabelle

Knotentyp


Knotentypen (Adresse FFhex)

Nummer

0

1

2

Typ

reserviert (*1)

I/O-Knoten

RS232-Knoten

(*1): Adresse 0 des EEPROMs kann bei Stromausfall während eines Schreibzugriffes überschrieben werden und wird deshalb hier nicht verwendet. (Quelle: Errata-Sheet AT90S8515)


SRAM-Belegung im RS232-Knoten-µController

Adresse

0-12

Verwendung

Telegrammabbild

 


6.6 CAN-Controller Registerinitialisierungswerte

Reihen-
folge

Registername

Registeradresse

zugewiesener

Wert

Kommentar

1

P0PDR

28h

00h

Port 0 -> Eingang

2

P1LR

2Eh

FFh

 

3

P1PDR

2Ch

FFh

Port1 -> Ausgang

4

MOD

10h

01h

Normal -> Init

5

BRPR

03h

3Fh

Baudratenteiler (5kBit/s)

6

BL1

00h

7Fh

Timing

7

BL2

01h

43h

Timing & RX Init

8

OC

02h

18h

TX Init

9

MOD

10h

00h

Init -> Normal

10

INT

11h

00h

Interruptreg. löschen

11

IMSK

0Ah

25h

globale Interruptmaske

12

RRR1

04h

00h

Empfangsinterrupts

13

RRR2

05h

00h

Empfangsinterrupts

14

RIMR1

06h

FEh

MO-Int. Maske 0-7

15

RIMR2

07h

FFh

MO-Int. Maske 8-15

 

 

6.7 Pinbelegung der Verbindungsstecker X1 und X2 zwischen Buskoppler und Applikationshardware

Belegung von X1:

Pin

Bedeutung

   

1

P00

2

P01

3

P02

4

P03

5

P04

6

P05

7

P06

8

P07

9

P10

10

P11

11

P12

12

P13

13

P14

14

P15

15

P16

16

P17

Belegung von X2:

Pin

Bedeutung

   

1

PD2/INT0

2

PD1/TxD

3

PD0/RxD

4

PC0

5

PC1

6

PC2

7

PC3

8

PC4

9

PC5

10

PC6

11

PC7

12

OC1B

13

ICP

14

PA7

15

PA6

16

PA5

17

PA4

18

PA3

19

PA2

20

PA1

21

PA0

22

unbenutzt

23

unbenutzt

24

unbenutzt

25

unbenutzt

26

unbenutzt

 

 

 

 

 

 

 

 

 

 

 

 

 

6.8 Belegung des ISP-Steckers des verwendeten Programmiergerätes von Equinox

Link zu Equinox

Pin

Bezeichnung

Bemerkung

     

1

Connect to Target Vcc

optional

2

SS

optional

3

SCK2

optional

4

MO

notwendig

5

PROG

optional

6

MI

notwendig

7

Target GND

notwendig

8

SCK1

notwendig

9

Target GND

notwendig

10

RESET

notwendig



6.9 Befehlsübersicht: PC <-> RS232-Applikation
(RS232-Befehl 1 bis 5)

Kommunikation: PC -> Knoten

Telegramm senden

Funktion:

Telegramm wird auf den CAN-Bus geschrieben.

Ein Telegramm wird dem Busknoten über die RS232-Schnittstelle zum Versenden übermittelt. Der CAN-Controller schickt dieses Telegramm über MessageObjekt 14 auf den CAN-Bus. Dazu muß der gewünschte Identifier und die zu übermittelnde Nachricht (bestehend aus 8 Datenbytes) an die RS232-Applikation gesendet werden.

Format:

Befehl:

< s id-Byte 0 id-Byte 1 (Daten)Byte 0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 >

Antwort:

< * >
(nur gültig für Softwareversion vor 232S1.10, sonst keine Antwort!)

Beschreibung:

id-Byte0 und id-Byte1 kennzeichnen den Identifier (inkl. RTR-Bit und den DLC) der zu versendenden Nachricht/Telegramm. Datenbyte0-8 stellen die Nutzdatenbytes dar, die über den CAN-Bus übermittelt werden sollen. Mit diesem Befehl wird also ein Paket übermittelt, das aus ID-Bytes und genau 8 Nutzdatenbyte besteht.

Sollen weniger Nutzdatenbyte übermittelt werden, muß der DLC (in id-Byte1) entsprechend gesetzt werden. Das Format der Übertragung von genau 8 Datenbyte zum Knoten wird dadurch nicht geändert, lediglich der Knoten schickt dann weniger Datenbyte auf den CAN-Bus.

Als Bestättigung folgt auf diesen Befehl ein Quittungstelegramm „<*>“. (Nur gültig für Softwareversion vor 232S1.10)



lokale MO-ID-Tabelle umprogrammieren

Funktion:

Die MO-ID-Tabelle im lokalen RS232-Knoten soll verändert werden.

Dem RS-232 Knoten wird mitgeteilt, welcher MO-ID Eintrag verändert werden soll. Dieser Befehl wird auch dazu benutzt, um die implementierte Telegrammüberwachung für ein bestimmtes MO einzuleiten (MO0-MO12). Dazu wird die zu überwachende/protokollierende ID in einen dafür vorgesehenen MO-ID Bereich geschrieben. (Beispiel 2 und 3)

Die Adresse des MessageObjekts-Byte0 des CAN-Controllers wird zuerst übermittelt, danach dann das dort abzulegende IdentifierByte0. Das ganze wiederholt sich für MessageObjekt-Byte1 und IdentifierByte1 (beinhaltet RTR-Bit und DLC).

Die Antwort des Knotens erfolgt in einem getrennten Datenpaket, das vom Atmel initiiert wird. (siehe Knoten -> PC, Befehl <a ...>)

Format:

Befehl:

< a adr-id-Byte0 id-Byte0 adr-id-Byte1 id-Byte1 x x x x x x >

Antwort:

< * >
(nur gültig für Softwareversion vor 232S1.10, sonst keine Antwort!)

 

Beschreibung:

Das adr-id-Byte0 spiegelt die Adresse im CAN-Controller wieder. Die folgende Tabelle zeigt die Adresse für alle MessageObjects (MO0-MO15)

 

MO0

MO1

MO2

MO3

MO4

MO5

MO6

MO7

MO8

MO9

MO10

MO11

MO12

MO13

MO
14

MO15

Byte0

40h

42h

44h

46h

48h

4Ah

4Ch

4Eh

50h

52h

54h

56h

58h

5Ah

5Ch

5Eh

Byte1

41h

43h

45h

47h

49h

4Bh

4Dh

4Fh

51h

53h

55h

57h

59h

5Bh

5Dh

5Fh

Hierbei dürfen MO13, MO14 und MO15 nicht für diese Funktion verwendet werden, sie sind für den reibungslosen Ablauf der Knotensteuerung verantwortlich. (Je nach Knotenhardware noch weitere, siehe jeweilige Hardwarebeschreibung)

Als Bestättigung folgt auf diesen Befehl ein Quittungstelegramm „<*>“. (Nur gültig für Softwareversion vor 232S1.10)

Beispiele:

In MO4 soll ID 217 eingetragen werden:

<

a

48h

1Bh

49h

22h

x

x

x

x

x

x

>

1

2

3

4

5

6

7

8

9

10

11

12

13

MO4 im RS232 Knoten soll ID 217 abhören (setzt Telegrammüberwachung für MO4 voraus):

<

a

48h

1Bh

49h

22h

x

x

x

x

x

x

>

1

2

3

4

5

6

7

8

9

10

11

12

13

MO4 soll nichts mehr abhören (= ID 0 abhören)

<

a

48h

00h

49h

00h

x

x

x

x

x

x

>

1

2

3

4

5

6

7

8

9

10

11

12

13

 


CAN-Register auslesen

Funktion:

Die Register des lokalen CAN-Controllers am RS232-Knoten sollen byteweise ausgelesen werden

Nachdem die gewünschte CAN-RegisterAdresse übermittelt wurde und das Register vom Atmel ausgelesen wurde, sendet dieser den Inhalt des Registers in einem separaten Befehl an den PC (siehe Atmel->PC, Befehl <r ...>)

Format:

Befehl:

< r CAN-RegisterAdresse x x x x x x x x x >

Antwort:

< r CAN-RegisterAdresse Daten >

 

Beschreibung:

CAN-RegisterAdresse ist die Adresse im CAN-Controller, von deren ein Byte gelesen werden soll. Die genauen Adressen lassen sich im Datenblatt des CAN-Controllers nachschlagen.

Beispiel:

Das ReceiverReadyRegister1 soll ausgelesen werden (RRR1: 04h):

<

r

04h

x

x

x

x

x

x

x

x

x

>

1

2

3

4

5

6

7

8

9

10

11

12

13

Antwort:

<

r

04h

F0h

>

1

2

3

4

5

 


CAN-Register schreiben

Funktion:

Die Register des lokalen CAN-Controllers am RS232-Knoten sollen byteweise beschrieben werden

Format:

Befehl:

< w CAN-RegisterAdresse Datenbyte x x x x x x x x >

Antwort:

< w CAN-RegisterAdresse Datenbyte x x x x x x x x >

(Echo als Bestätigung)


Beschreibung:

CAN-RegisterAdresse ist die Adresse im CAN-Controller, auf die ein Byte geschrieben werden soll. Die genauen Adressen lassen sich im Datenblatt des CAN-Controllers nachschlagen.

Datenbyte enthält das zu schreibende Byte.

Beispiel:

Das Output-Control Register soll beschrieben werden (OC: 02h):

<

w

02h

18h

x

x

x

x

x

x

x

x

>

1

2

3

4

5

6

7

8

9

10

11

12

13

 


Exemplarnummer auslesen

Funktion:

Die Exemplarnummer des RS232-Knoten wird ausgelesen. Dieser Befehl stellt die einzige Möglichkeit dar, die Exemplarnummer dieses Knotens an den PC zu übermitteln.

Format:

Befehl:

< n >

Antwort:

< n ser_byte1 ser_byte2 ser_byte3 >

 

Beschreibung:

ser_byte1 bis ser_byte3 symbolisieren die Exemplarnummer, die im EEProm an Speicherstelle 1 bis Speicherstelle 3 abgelegt ist.


Kommunikation: Knoten -> PC

Aufgrund der implementierten "Telegrammüberwachung" in der RS232-Software wird bei einem durch den Akzeptanzfilter angenommenen Telegramm, das auf MO1 bis MO12 eintreffen kann, folgende Empfangsreaktion ausgelöst.

Telegramm melden

Funktion:

Es stehen Telegramme zur Übermittlung an den angebundenen Rechner bereit, die einem gefordertem Identifier entsprechen.

Um eine Zuordnung zu ermöglichen welches Telegramm eingetroffen ist, werden auch die beiden id-Bytes an den PC übermittelt.

Format:

< a id-Byte0 id-Byte1 (Daten)Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 >

Beschreibung:

id-Byte0/id-Byte1 beinhalten den Identifier des übermittelten/zu übermittelnden Telegramms.

Datenbyte0-7 enthalten die Nutzdaten.

Beispiel:

MO4 im RS232 Knoten sollte ID 217 abhören, jetzt wird folgendes Paket vom Knoten zum PC übermittelt:

<

a

1Bh

22h

ABh

CDh

FFh

FFh

FFh

FFh

FFh

FFh

>

1

2

3

4

5

6

7

8

9

10

11

12

13

Verweise:

PC -> Knoten, Befehl <a ...>


6.10 Befehlsübersicht: Busteilnehmer <-> Busteilnehmer (Knotenbefehl 1 bis 7)

Kommunikation: Knoten -> Knoten

(Knotenfernkontrolle)

FernEEPROM lesen:

Funktion:

Es soll das EEPROM eines anderen Knoten ausgelesen werden.

Format:

Anfrage:

"1" Antwort-id-Byte0 Antwort-id-Byte1 EE-Adr.-high EE-Adr.-low

Antwort:

"1" KnotenadresseByte0 KnotenadresseByte1 EE-Adr.-high EE-Adr.-low Daten

 

Beschreibung:

Antwort-id-Byte0/1 enthalten den Identifier des Knotens/MOs auf den das gelesene EEPROM-Byte geschickt werden soll. Dies ist typischerweise MO13 der sendenden RS232-Applikation.

EE-Adr.-high/low enthalten die EEPROM-Adresse des auszulesenden Zeichens

Beispiel:

Knoten2 (als RS232-Knoten -> MO13, ID=245) möchte wissen was im EEPROM an Adresse 0003h des Knoten Nr. 1 steht. Dazu sendet er ein Telegramm an die Knotenadresse des Knoten 1 (ID=101 =0CA8h, DLC=8,RTR=0) und verpackt darin seine eigene Adresse, auf der er die Antwort erwartet (ID=245 =1EA8h, DLC=8,RTR=0).

id-Byte high

id-Byte low

Befehl

Antwort
ID-Byte0

Antwort
ID-Byte1

EE-Adr.-high

EE-Adr.-low

0Ch

A8h

„1“

1Eh

A8h

00h

03h

ID high

ID low

1

2

3

4

5

Antwort des angesprochenen Knoten:

id-Byte high Empfänger

id-Byte low Empfänger


Befehl

eigene Knotenadr. Byte0

eigene Knotenadr. Byte1

EE-Adr.-high

EE-Adr.-low

ausgelesene Daten

1Eh

A8h

„1“

0Ch

A8h

00h

03h

nn

ID high

ID low

1

2

3

4

5

6

Die Übermittlung des „Eigene-Knotenadresse-Byte0/1“ dient dazu den antwortenden Knoten zu identifizieren.

Da die eigene Knotenadresse in MO15 gespeichert ist, reicht es MO15 auszulesen und im Telegramm an Stelle 2/3 einzutragen.



FernEEPROM schreiben:

Funktion:

Es soll das EEPROM eines anderen Knoten beschrieben werden. Dabei ist der Sender dafür verantwortlich, daß im zu beschreibenden Knoten keine wichtigen Daten überschrieben werden.

Format:

Anfrage:

"2" Antwort-id-Byte0 Antwort-id-Byte1 EE-Adr.-high EE-Adr.-low Daten

Antwort:

"2" KnotenadresseByte0 KnotenadresseByte1 EE-Adr.-high EE-Adr.-low Daten

 

Beschreibung:

Antwort-id-Byte0/1 enthalten den Identifier des Knotens/MOs auf den das gelesene EEPROM-Byte geschickt werden soll. Dies ist typischerweise MO13 der sendenden RS232-Applikation.

EE-Adr.-high/low enthalten die EEPROM-Adresse des auszulesenden Zeichens

Der zu beschreibende Knoten quittiert seinerseits die Abarbeitung des Befehls, indem er das Telegramm an den Absender zurückschickt. Dabei muß er natürlich die Absende- und Zieladresse anpassen.

Beispiel:

Knoten2 (als RS232-Knoten -> MO13, ID=245) möchte das EEPROM an Adresse 0002h des Knoten Nr. 0 mit 1Ah beschreiben. Dazu sendet er ein Telegramm mit dem zu schreibenden Byte an die Knotenadresse des Knoten 0 (ID=100 =0C88h, DLC=8,RTR=0) und verpackt darin seine eigene Adresse, auf der er die Antwort erwartet (ID=245 =1EA8h, DLC=8,RTR=0).

id-Byte high Empfänger

id-Byte low Empfänger

Befehl

AntwortID-Byte0

AntwortID-Byte1

EE-Adr.-high

EE-Adr.-low

zu schreibende Daten

0Ch

88h

„2“

1Eh

A8h

00h

02h

1Ah

ID high

ID low

1

2

3

4

5

6

Antwort des angesprochenen Knoten:

id-Byte high

id-Byte low

Befehl

eigene Knotenadr. Byte0

eigene Knotenadr. Byte1

EE-Adr.-high

EE-Adr.-low

geschriebene Daten

1Eh

A8h

„2“

0Ch

88h

00h

02h

1Ah

ID high

ID low

1

2

3

4

5

6

Die Übermittlung des „Eigene-Knotenadresse-Byte0/1“ dient dazu den antwortenden Knoten zu identifizieren.

Da die eigene Knotenadresse in MO15 gespeichert ist, reicht es MO15 auszulesen und im Telegramm an Stelle 2/3 einzutragen.



FernCANRegister lesen: (bis Softwareversion 2.x; Kompatibilität bis v3.x)

Funktion:

Es soll ein Register des CAN-Controllers eines anderen Knoten ausgelesen werden.

Format:

Anfrage:

"3" Antwort-id-Byte0 Antwort-id-Byte1 CANRegisterAdresse

Antwort:

"3" KnotenadresseByte0 KnotenadresseByte1 CANRegisterAdresse Daten

 

Beschreibung:

Antwort-id-Byte0/1 enthalten den Identifier des Knotens/MOs auf den das gelesene CANRegister-Byte geschickt werden soll. Dies ist typischerweise MO13 der sendenden RS232-Applikation.

CANRegisterAdresse enthält die Hardwareadresse des auszulesenden CANRegisters.

Der auszulesende Knoten quittiert seinerseits die Abarbeitung des Befehls, indem er das Telegramm inkl. dem ausgelesenen Byte an den Absender zurückschickt. Dabei muß er natürlich die Absende- und Zieladresse anpassen.

Beispiel:

Knoten2 (als RS232-Knoten -> MO13, ID=245) möchte das CANRegister P0PR an Adresse 29h des Knoten Nr. 0 auslesen. Dazu sendet er ein Telegramm mit dem zu lesenden Byte an die Knotenadresse des Knoten 0 (ID=100 =0C88h, DLC=8,RTR=0) und verpackt darin seine eigene Adresse, auf der er die Antwort erwartet (ID=245 =1EA8h, DLC=8,RTR=0).

id-Byte high Empfänger

id-Byte low Empfänger

Befehl

AntwortID-Byte0

AntwortID-Byte1

CANRegisterAdresse

0Ch

88h

„3“

1Eh

A8h

29h

ID high

ID low

1

2

3

4

Antwort des angesprochenen Knoten:

id-Byte high

id-Byte low

Befehl

eigene Knotenadr. Byte0

eigene Knotenadr. Byte1

CANRegisterAdresse

Daten

1Eh

A8h

„3“

0Ch

88h

29h

AAh

ID high

ID low

1

2

3

4

5

Die Übermittlung des „Eigene-Knotenadresse-Byte0/1“ dient dazu den antwortenden Knoten zu identifizieren.

Da die eigene Knotenadresse in MO15 gespeichert ist, reicht es MO15 auszulesen und im Telegramm an Stelle 2/3 einzutragen.

 


FernCANRegister schreiben: (bis Softwareversion 2.x)

Funktion:

Es soll ein Register des CAN-Controllers eines anderen Knoten beschrieben werden.

Format:

Anfrage:

"4" Antwort-id-Byte0 Antwort-id-Byte1 CANRegisterAdresse Daten

Antwort:

"4" KnotenadresseByte0 KnotenadresseByte1 CANRegisterAdresse Daten

 

Beschreibung:

Antwort-id-Byte0/1 enthalten den Identifier des Knotens/MOs auf den die Antwort des ausführenden Knotens geschickt werden soll. Dies ist typischerweise MO13 der sendenden RS232-Applikation.

CANRegisterAdresse enthält die Hardwareadresse des zu beschreibenden CANRegisters.

Der auszulesende Knoten quittiert seinerseits die Abarbeitung des Befehls, indem er das Telegramm an den Absender zurückschickt. Dabei muß er natürlich die Absende- und Zieladresse anpassen.

Beispiel:

Knoten2 (als RS232-Knoten -> MO13, ID=245) möchte das CANRegister P1LR an Adresse 2Eh des Knoten Nr. 0 auslesen. Dazu sendet er ein Telegramm mit dem zu schreibenden Byte an die Knotenadresse des Knoten 0 (ID=100 =0C88h, DLC=8,RTR=0) und verpackt darin seine eigene Adresse, auf der er die Antwort erwartet (ID=245 =1EA8h, DLC=8,RTR=0).

id-Byte high Empfänger

id-Byte low Empfänger

Befehl

AntwortID-Byte0

AntwortID-Byte1

CANRegisterAdresse

Daten

0Ch

88h

„4“

1Eh

A8h

2Eh

AAh

ID high

ID low

1

2

3

4

5

Antwort des angesprochenen Knoten:

id-Byte high

id-Byte low

Befehl

eigene Knotenadr. Byte0

Eigene Knotenadr. Byte1

CANRegisterAdresse

Daten

1Eh

A8h

„4“

0Ch

88h

2Eh

AAh

ID high

ID low

1

2

3

4

5

Die Übermittlung des „Eigene-Knotenadresse-Byte0/1“ dient dazu den antwortenden Knoten zu identifizieren.

Da die eigene Knotenadresse in MO15 gespeichert ist, reicht es MO15 auszulesen und im Telegramm an Stelle 2/3 einzutragen.


FernAtmelRegister lesen:                                                                    (nur SoftwareVersion 1.0)

Funktion:

Es soll ein Register des Atmel-µControllers eines anderen Knoten ausgelesen werden.

Format:

Anfrage:

"5" Antwort-id-Byte0 Antwort-id-Byte1 AtmelRegisterAdresse

Antwort:

"5" KnotenadresseByte0 KnotenadresseByte1 AtmelRegisterAdresse Daten

 

Beschreibung:

Antwort-id-Byte0/1 enthalten den Identifier des Knotens/MOs auf den das gelesene AtmelRegister-Byte geschickt werden soll. Dies ist typischerweise MO13 der sendenden RS232-Applikation.

AtmelRegisterAdresse enthält die absolute Hardwareadresse (20h-5Fh) des auszulesenden AtmelRegisters.

Der auszulesende Knoten quittiert seinerseits die Abarbeitung des Befehls, indem er das Telegramm inkl. dem ausgelesenen Byte an den Absender zurückschickt. Dabei muß er natürlich die Absende- und Zieladresse anpassen.

Beispiel:

Knoten2 (als RS232-Knoten -> MO13, ID=245) möchte das AtmelRegister DDRA an Adresse 3Ah des Knoten Nr. 0 auslesen. Dazu sendet er ein Telegramm mit dem zu lesenden Byte an die Knotenadresse des Knoten 0 (ID=100 =0C88h, DLC=8,RTR=0) und verpackt darin seine eigene Adresse, auf der er die Antwort erwartet (ID=245 =1EA8h, DLC=8,RTR=0).

id-Byte high Empfänger

id-Byte low Empfänger

Befehl

AntwortID-Byte0

AntwortID-Byte1

AtmelRegisterAdresse

0Ch

88h

„5“

1Eh

A8h

3Ah

ID high

ID low

1

2

3

4

Antwort des angesprochenen Knoten:

id-Byte high

id-Byte low

Befehl

eigene Knotenadr. Byte0

eigene Knotenadr. Byte1

AtmelRegisterAdresse

Daten

1Eh

A8h

„5“

0Ch

88h

3Ah

BBh

ID high

ID low

1

2

3

4

5

Die Übermittlung des „Eigene-Knotenadresse-Byte0/1“ dient dazu den antwortenden Knoten zu identifizieren.

Da die eigene Knotenadresse in MO15 gespeichert ist, reicht es MO15 auszulesen und im Telegramm an Stelle 2/3 einzutragen.

 


FernAtmelRegister schreiben:                                                  (nur SoftwareVersion 1.0)

Funktion:

Es soll ein Register des Atmel-µControllers eines anderen Knoten beschrieben werden.

Format:

Anfrage:

"6" Antwort-id-Byte0 Antwort-id-Byte1 AtmelRegisterAdresse Daten

Antwort:

"6" KnotenadresseByte0 KnotenadresseByte1 AtmelRegisterAdresse Daten

 

Beschreibung:

Antwort-id-Byte0/1 enthalten den Identifier des Knotens/MOs auf den die Antwort des ausführenden Knotens geschickt werden soll. Dies ist typischerweise MO13 der sendenden RS232-Applikation.

AtmelRegisterAdresse enthält die absolute Hardwareadresse (20h-5Fh) des zu beschreibenden AtmelRegisters.

Der auszulesende Knoten quittiert seinerseits die Abarbeitung des Befehls, indem er das Telegramm an den Absender zurückschickt. Dabei muß er natürlich die Absende- und Zieladresse anpassen.

Beispiel:

Knoten2 (als RS232-Knoten -> MO13, ID=245) möchte das AtmelRegister DDRA an Adresse 3Ah des Knoten Nr. 0 auslesen. Dazu sendet er ein Telegramm mit dem zu schreibenden Byte an die Knotenadresse des Knoten 0 (ID=100 =0C88h, DLC=8,RTR=0) und verpackt darin seine eigene Adresse, auf der er die Antwort erwartet (ID=245 =1EA8h, DLC=8,RTR=0).

id-Byte high Empfänger

id-Byte low Empfänger

Befehl

AntwortID-Byte0

AntwortID-Byte1

CANRegisterAdresse

Daten

0Ch

88h

„6“

1Eh

A8h

3Ah

AAh

ID high

ID low

1

2

3

4

5

Antwort des angesprochenen Knoten:

id-Byte high

id-Byte low

Befehl

eigene Knotenadr. Byte0

Eigene Knotenadr. Byte1

CANRegisterAdresse

Daten

1Eh

A8h

„6“

0Ch

88h

3Ah

AAh

ID high

ID low

1

2

3

4

5

Die Übermittlung des „Eigene-Knotenadresse-Byte0/1“ dient dazu den antwortenden Knoten zu identifizieren.

Da die eigene Knotenadresse in MO15 gespeichert ist, reicht es MO15 auszulesen und im Telegramm an Stelle 2/3 einzutragen

 

 

KnotenInfo lesen:                                                                               (ab Softwareversion 1.10)

Funktion:

Hardware/Software spezifische Daten sollen aus dem Knoten gelesen werden

Diese Daten werden bei der Programmierung als Konstanten in den Quellcode aufgenommen.

Format:

Anfrage:

"7" Antwort-id-Byte0 Antwort-id-Byte1 InfoIndex

Antwort:

"7" KnotenadresseByte0 KnotenadresseByte1 InfoIndex Datenbyte0 Datenbyte1 Datenbyte2 Datenbyte3

 

Beschreibung:

Antwort-id-Byte0/1 enthalten den Identifier des Knotens/MOs auf den das gelesene CANRegister-Byte geschickt werden soll. Dies ist typischerweise MO13 der sendenden RS232-Applikation.

InfoIndex enthält den Index der auszulesenden InfoKonstante. Diese Konstanten werden bei der Programmierung des Knotens im Programmcode hinterlegt und können somit zur Laufzeit nicht verändert werden. Die 4 übermittelten Datenbytes sind ASCII-kodiert für Zeichenketten und binär codiert für Werte. Sie repräsentieren Hardware/Software-abhängige Konstanten/Größen.

Der auszulesende Knoten quittiert seinerseits die Abarbeitung des Befehls, indem er das Telegramm inkl. den ausgelesenen Bytes an den Absender zurückschickt. Dabei muß er natürlich die Absende- und Zieladresse anpassen.

KnotenInfo (Index):

Index

Beschreibung/Bezeichnung

Länge

0

SoftwareTyp, (z.B. „RelS“)

4 Bytes (ASCII)

1 SoftwareVersionskennung, (z.B. „1.10“) 4 Bytes (ASCII)

2

externe EEPromGröße (max. 65536 Bytes)

2 Bytes (Integer)

3 Uptime abfragen (Zeit seit Systemstart bzw. letztem Reset) 4 Bytes (Format)
4 Knotentemperatur abfragen (LM75) (nur v2.xx) 2 Bytes (Format)
     
(kann die Knotenfirmware auf die Anfrage keine Antwort geben (Index unbekannt), so sendet sie 4x 0xFF).

 

Formate für KnotenInfoLesenBefehle

Uptime abfragen
Byte 0: Minuten seit Systemstart bzw. letztem Reset
Byte 1: Stunden
Byte 2: Tage (Highbyte)
Byte 3: Tage (Lowbyte)

 

 

EmpfangsObjektLesen:                                                                               (ab Softwareversion 3.x)

Funktion:

Belegung der EmpfangsObjekte auslesen (=empfangbare CAN-IDs).

Format:

Anfrage:

"8" Antwort-id-Byte0 Antwort-id-Byte1 EmpfMO-Nr. (typisch 0-15)

Antwort:

"8" KnotenadresseByte0 KnotenadresseByte1 EmpfMO-Nr. CanId Highbyte CanId Lowbyte

Anmerkung: Wird der Übergabeparameter EmpfMO-Nr. mit 0xFF übergeben, so liefert die Antwort die Anzahl der zur Verfügung stehenden EmpfangsMessageObjekte (im Lowbyte).

 

EmpfangsObjektSchreiben:                                                                               (ab Softwareversion 3.x)

Funktion:

EmpfangsObjekte mit CanIds belegen/beschreiben.

Format:

Anfrage:

"9" Antwort-id-Byte0 Antwort-id-Byte1 EmpfMO-Nr. (typisch 0-15) CanId Highbyte CanId Lowbyte

Antwort:

"9" Antwort-id-Byte0 Antwort-id-Byte1 EmpfMO-Nr. (typisch 0-15) CanId Highbyte CanId Lowbyte Fehlernummer

Fehlernummer:
0: kein Fehler
1: EmpfMO-Nr. zu groß (Knoten hat weniger EmpfMOs wie der übergebene Parameter)
2: (reserviert)

 


6.11 Telegrammformate und Speicherorganisation für die ZeitschaltuhrApplikation ZSUr

Telegrammformat für extEEPromSchreiben:

CAN-ID Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
KNr, MO12 Antwort
IDB0
Antwort
IDB1
AdrHigh AdrLow Daten0 Daten1 Daten2 Daten3
260 (KNr3, MO12) 0x1E 0xA8 0x00 0x08 0xA1 0xA2 0xA3 0xA4

die Antwort des Zeitschaltknotens darauf sieht so aus:

CAN-ID Byte0 Byte1 Byte2 Byte3 Byte4
AntwortID Absende
IDB0
Absende
IDB1
AdrHigh AdrLow Fehlernummer
0x1E, 0xA8 -> ID:245 0x20 0x88 0x00 0x08 0x00 (kein Fehler)

Wobei Byte0/1 (AbsendeIDB0/1) nicht die Knotenadresse, sondern das gewählte MO bedeuten


 

Telegrammformat für extEEPromLesen:

CAN-ID Byte0 Byte1 Byte2 Byte3
KNr, MO11 Antwort
IDB0
Antwort
IDB1
AdrHigh AdrLow
259 (KNr3, MO11) 0x1E 0xA8 0x00 0x08

die Antwort des Zeitschaltknotens darauf sieht so aus:

CAN-ID Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
AntwortID Absende
IDB0
Absende
IDB1
AdrHigh AdrLow Daten0 Daten1 Daten2 Daten3
0x1E, 0xA8 -> ID:245 0x20 0x68 0x00 0x08 z.B 0xA1 z.B. 0xA2 z.B. 0xA3 z.B. 0xA4

Wobei Byte0/1 (AbsendeIDB0/1) nicht die Knotenadresse, sondern das gewählte MO bedeuten


 

Telegrammformat für extEEPromLöschen:

CAN-ID Byte0 Byte1 Byte2 Byte3
KNr, MO10 Antwort
IDB0
Antwort
IDB1
0xAA (zur Sicherheit) 0xAA (zur Sicherheit)
258 (KNr3, MO10) 0x1E 0xA8 0xAA 0xAA

Antwort des Knotens:

CAN-ID Byte0 Byte1 Byte2
AntwortID AbsendeIDB0 AbsendeIDB1 0x00 (Bestätigung)
0x1E, 0xA8 -> ID:245 0x20 0x48 0x00

Byte2 enthält immer 0x00 und bestätigt damit den Eingang des Löschen-Befehls. Das extEEProm wird erst im Anschluß gelöscht, um Timeouts zu vermeiden.


Telegrammformat für KnotenRücksetzen:

CAN-ID Byte0 Byte1
KNr, MO8 0xAA (zur Sicherheit) 0xAA (zur Sicherheit)
256 (KNr3, MO8) 0xAA 0xAA

(Uhrzeit bleibt erhalten, nur die "erstenTelegramme" werden neu besetzt, "kurzTelegramme" werden nicht zurückgesetzt)

Der Knoten gibt keine Antwort auf das KnotenRücksetzen-Kommando.


 

Datenformat für die "kurzTelegramme":

CAN-ID Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
KNr, MO9 Sekunden
High
Sekunden
Low
IDB0 IDB1 Daten0 Daten1 Daten2 Daten3
257 (KNr3, MO9) 0x07 0x08 0x20 0x28 0x02 0x00 0x00 0x00

(Relais3 an Knoten 50 (IDB0/1: 0x20, 0x28) soll in 30min (=1800s =0x0708s) umschalten (D0=0x02)

Ein Antworttelegramm des ZSUr-Knotens wird nicht verschickt.


 

Aufbau/Zusammensetzung/Lage der Telegramme im extEEProm:

Byte0: Jahr
Byte1: WTag/Monat (Wochentag<<4 | Monat) (Wochentag: 1-7 (7:Sonntag))
Byte2: Tag
Byte3: Stunde
Byte4: Minute
Byte5: Sekunde
Byte6: IDB0 (HighByte)
Byte7: IDB1 (LowByte)
Byte8: DatenByte0
Byte9: DatenByte1
Byte10: DatenByte2
Byte11: DatenByte3
Byte12: DatenByte4
Byte13: DatenByte5
Byte14: DatenByte6
Byte15: DatenByte7

Byte 16: Byte0 des 2.Telegrammes...


Belegung des extEEProms:

0x0000-0x00FF kurzTelegramme max. 16 Stück 256 Bytes
0x0100-0x0EFF taeglicheTelegramme max. 224 Stück 3584 Bytes
0x0F00-0x19FF woechentlicheTelegramme max. 176 Stück 2816 Bytes
0x1A00-0x1FFF EinmalTelegramme max. 96 Stück 1536 Bytes


6.12 Telegrammformate für die Kommunikation mit dem TemperaturSensor LM75 (lm75.c)

Datenformat für LM75-Kommandos

TemperaturSenden (Anfrage):

Beispiel: PC (RS232-Applikation, KNr.3) möchte wissen welche Temperatur an Sensor 1 (ParamterByte0 = 1) herrscht. Dazu schickt er folgendes Telegramm an Sensor (besser: SensorAnsammlung, bzw. "SensorBus") mit der CAN-ID 841 (der an Knoten 40 angeschlossen ist und auf MO1 reagiert)

CAN-ID Byte0 Byte1 Byte2 Byte3
KNr, MOn BefehlsByte
Antwort
IDB0
Antwort
IDB1
ParameterByte0
841 (KNr40, MO1) 0x00 (=TempSenden) 0x1E 0xA8 0x01


Antwort des befragten Sensors (bzw. "SensorBusses", da ja mehrere Sensoren angeschlossen sein können, die über die SlaveNr unterschieden werden):

CAN-ID Byte0 Byte1 Byte2 Byte3 Byte4 Byte5
AntwortID Befehlsbyte
(Echo)
Absende
IDB0
Absende
IDB1
ParameterByte0
(Echo)
Temperatur
HighByte
Temperatur
LowByte
0x1E, 0xA8 -> ID:245 0x00 0x69 0x28 0x01 z.B 0x00 z.B. 0x39

AbsendeIDB0/1: Hier wird die SensorID verschickt, nicht die KnotenID (oder Knotenbasisadresse)!
TemperaturHigh/LowByte liegt als Zweierkomplement vor (wie vom LM75 geliefert) und muß noch von der anfragenden Routine evtl. umgerechnet werden. (Hier 0x0039 bedeutet: 19.5°C, siehe Datenblatt).

Steht im BefehlsByte der Wert 0x00 (für TemperaturSenden), dann gilt enthält das Parameterbyte die SlaveNr. des anzusprechenden Sensors (0-7).