Date

Rev

Status

Author

Last Change

 

2009-01-05

0.1

Draft

Michael Gries

Initial Draft (Feasibility Study)

 

2009-02-27

1.0

Release

Michael Gries

Implementation Step 1 - Analysis

 

2009-03-03

2.0

Release

Michael Gries

Implementation Step 2 - Prototyping

 

2009-04-09

3.0

Release

Michael Gries

Implementation Step 3 - VRC-Monitor

 

2010-01-04

3.1

Draft

Michael Gries

Zubehör Ölverbrauchsmesser

 

2010-01-01

4.0

Release

Michael Gries

Impl. Step 4 – Connected to TC65T

 

2010-01-04

4.1

Draft

Michael Gries

update – not yet released

 

Source Document

AF104 VRC Monitor.doc

 

 

Preface

 

This document is part of the AF104 sub-project VRC Monitor.

 

 

 

VRC 410

 

 

 

Table of Contents

1.      Introduction.. 4

1.1.       Purpose. 4

1.2.       Scope. 4

1.3.       References. 4

1.4.       Verwendete Literatur 4

1.5.       Verwendete Messgeräte und Hilfsmittel 4

1.6.       Roles and Responsibilities. 4

1.7.       Milestones / History. 5

1.8.       Implementation Steps. 5

1.9.       Service and Maintanance. 5

2.      Analyse. 6

2.1.       Reverse Engineering. 6

2.2.       iroVIT Klemme 7-8-9 Schnittstelle. 6

2.3.       RS232 Interface. 8

2.3.1.        Signalisierungsart und elektrische Parameter 8

2.3.2.        Tabelle Holdoff-Zeiten VRC410 Signal 14

2.3.3.        Ermittung der mittleren Hold-off Zeiten.. 15

3.      Datenlogger. 15

4.      Datenanalyse. 15

4.1.       Installation.. 15

4.1.1.        DCF77 Funkuhr Funktionalität 15

4.2.       VRC-Monitor 16

4.2.1.        Listing – VRC Monitorprogramm... 16

4.2.2.        Hardcopy – VRC Monitorprogramm... 16

4.3.       Pegelkonverter 16

4.4.       VRC-Konverter 16

5.      Zubehör. 17

5.1.       Ölverbrauchsmesser 17

5.1.1.        Zielsetzung. 17

5.1.2.        Machbarkeitsanalyse. 17

5.1.3.        Inbetriebnahme. 19

5.1.4.        Installation.. 20

Heizöl Extra Leicht (EL)           Quelle: Wikipedia. 22

6.      Anhang.. 24

6.1.       Datenblätter (Bauteile für RS232 Konverter) 24

6.1.1.        µA 741 P.. 24

6.1.2.        C-Control Pro – Atmel Mega128. 25

6.2.       Simulation Pegelkonverter 26

6.2.1.        Stromlaufplan - Pegelkonverter 26

6.2.2.        Bestückungsplan - Pegelkonverter 27

6.3.       RS-232 Schnittstellenwandler 29

6.3.1.        Stromlauf 30

6.3.2.        Bestückungsplan.. 31

6.3.3.        Stückliste. 33

6.3.4.        Netzliste. 34

6.3.5.        Blockschaltbild / Anschlussbelegung. 36

6.3.6.        C-Control Pro Mega Series (Mega 128) 38

6.3.7.        VRC-Monitor Trace. 55

6.3.8.        VRC-Monitor Trace 2009-12-15. 56

6.4.       Datenpräsentation auf Server 59

6.4.1.        Projectboard. 60

6.5.       Bootcable für VRC-Konverter 64

6.5.1.        Stromlauf - Bootcable. 64

6.5.2.        Bestückungsplan - Bootcable. 64

 

 


1.              Introduction

Hypercom internal project of the Global Quality Management department for monitoring serial applications like the VRC 410 device which is used for monitoring and controlling.

1.1.         Purpose

This document covers integration of the 7-8-9 interface of the VRC 410 into the AF104 project.

1.2.         Scope

Used for internal testing and quality assurance purposes only. No commercial application.

 

1.3.         References

[R1]            Vaillant System iroVIT Öl-Heizkessel

[R2]            Vaillant Bedienungs- und Montageanleitung VRC 410

 


 

1.4.         Verwendete Literatur

[L1]             Das kleine Werkbuch Elektronik, Dieter Nührmann, 1994, 2004, Franzis Verlag ISBN 978-3772371745

[L2]             tbd

 

 

1.5.         Verwendete Messgeräte und Hilfsmittel

[M1]            Oszilloskop – Tektronic TDS3012B o.ä.

[M2]            Laptop mit mind. 1x RS232 Schnittstelle

[M3]            Schaltungseditor und Simulator (z.B. Target 3001, Version 14, Freeware Version, Stand 2008)

[M4]            Experimentierboard (Steckbrett für Schaltungstest – Prototyping)

[M5]            RS-232 Monitoring Software (SerialSniffer - Freeware)

[M6]            C-Control Mega128 Projectboard

[M7]            RS232-Schnittstellentester

 

 

 

1.6.         Roles and Responsibilities

Only these responsibilities of a given role is described which relates to this project.

 

Role
(Stakeholder)

Responsibility

Person

Project Manager

Integration into AF104 TC65

Michael Gries

Hardware Support

Cabling, spare parts, RS232-Konverter

Klaus Bachmann

Analog Converter

design Op µA741 for level shifting into RS232 req.

Bernd Poroffscheck

Protokolltester

RS-232 Monitoring (SerialSniffer)

Thomas Grundler

 

 

 

 


1.7.         Milestones / History

Date

Item

Remarks

2009-01-01

Projektstart VRC Monitor

Analyse / Machbarkeitsstudie

 

 

 

2009-04-05

Langzeitaufzeichnung (Laptop)

Verschiedene Dateiformate auf Festplatte

2009-03

Pegelkonverter (Modul-Hutschiene)

Eigenbau

2009-03

Analyse Betriebsparameter

Aussentemp./ Vorlauftemp./ Speichertemp. / Heizkurve / Heizbetrieb – Warmwasser - Pumpennachlauf

2009-05-16

Installation RS232 Konv. Hutschiene

 

2009-06-14

Installation DCF-Empfänger

Umbau bisherige Elektro-Installation AF104 von 2-Draht Außenfühler auf 3-Draht für 5V DCF Digitalsignal

2009-12-30

Installation Öl Messer

Zubehör

2010-01-01

Anbindung an TC65Terminal

Erste Status-Abfrage per SMS

 

 

1.8.         Implementation Steps

#

Function

Item

Remark

section

Date

0

Literaturbeschaffung

 ---

Internet Recherge

 

2009-01-03

1

Analyse - Physical Layer

 

 

 

 

2

Simulation RS232 Konverter

 

 

 

 

3

Versuchsaufbau

 

 

 

 

4

Messdatenerfassung

 

 

 

 

5

Analyse Messdaten

 

 

 

 

6

Hardware RS232 Konverter

 

 

 

 

7

Aufzeichnung Betriebsdaten

 

 

 

 

 

 

 

 

 

 

 

 

1.9.         Service and Maintanance

See below

 

 

No.

Task

Due date

Date impl.

 

 

2008-00-00

2008-00-00

 

 

 

 

 

 

 

 

 


 

2.              Analyse

 

 

 

2.1.         Reverse Engineering

Geplant ist zunächst nur eine passive Abfrage der vorhandenen Regelparameter.

Die vorhandene Anlage ist von der Firma  Vaillant  Type  icoVIT (Baujahr 2005) mit witterungsgeführter Regeleinheit VRC-410s.

Die V

 

 

 

 

 

 

 

2.2.         iroVIT Klemme 7-8-9 Schnittstelle

 

Das Installationshandbuch / Internetrecherche ergab keine Zuordnung der 3 Klemmen zu einer Signalart bzw. Signalzuordnung. Lediglich die Kennzeichnung, dass es sich um eine 24V Gleichspannungsschnittstelle handelt. Auswertung mittels Spannungsmesser ergab sowohl für Klemme 7 als auch Klemme 8 eine Spannungsdifferenz von ca. 22V gegen Klemme 9 = Signalground. Messungen gegen Signalground der iroVIT-Steuerplatine bestätigten die Annahme.


2.3.         RS232 Interface

Allgemeines Datenformat

 

 

 

2.3.1.      Signalisierungsart und elektrische Parameter

 

 

 

 

 

 

 

 

 

Ausgemessene Bitlänge = 416µs. Das ergibt 2400Bd. Start/Stop Format ist 8bit ohne partity +1Stopbit. D.h. die Gesamtlänge eines Bytes beträgt 4,16ms

 

Pro Intervall werden immer 8 Datagramme übertragen.

 

 

Für das 1. Datagramm werden 6Byte übertragen  (Übertragungszeit 25ms)

Für Darstellung am Oszilloskop wird eine horizontale Auflösung von 4ms gewählt.

 

Hinweis:

zum Auslesen der einzelnen Bits die Lupenfunktion (Sektion: Horizontal) verwenden.

Ggf. Cursor zur Orientierung setzen (8bit * 417µs  = 33ms reine Nutzdaten). Wenn die z.B. die Nutzdatenzeit eingestellt wird können im Cursor-Modus = “Modus gekoppelt“ beide Cursor im festen Abstand weiter verschoben werden.

 

Hinweis 2:

Die Funktionsbeschreibung der einzelnen Datenbytes wurden erst nach und nach je nach Analysestand ermittelt und in der folgenden Ausstellung hinzugefügt. Zum Zeitpunkt der Erstanalyse mittels Oszilloskop war die Bedeutung dieser Datenbytes noch nicht bekannt.

 

1.    Datagramm

 

01100000 = 60 => 06

01000000 = 40 => 02

00000000 = 00 => 00

11000000 = C0 => 03

01110111 = 77 => EE

00011001 = 1A => 98

 

Zum Triggern des zweiten Datagramm wird demnach eine Holdoff-Zeit von >25ms benötigt.

 

2.    Datagramm

 

00100001 = 21 => 84

00000000 = 00 => 00

01000000 = 40 => 02

00001001 = 0A => 90

 

Zum Triggern des 3. Datagramms wird eine Holdoff-Zeit von größer 25+17 ms = 42ms benötigt

(siehe Tabelle unten).  
Die Zeit zwischen dem 1. und 2. Datagramm beträgt im ausgemessenen Beispiel 40 ms.

 

 

3.    Datagramm (6 Byte)

 

01100000 = 60 => 06

01000000 = 40 => 02

00000000 = 00 => 00

11000000 = C0 => 03

01001111 = 4F => E2

00100001 = 21 => 84

 

Anm.: Datagramm 3 zeigt Ähnlichkeiten im Format. Es könnte sich um die Anwort in Gegenrichtung handeln. Vergleiche auch Datagramm 2 mit Datagramm 8.

 

4.    Datagramm (26 Byte)

 

01011001 = 5A => 9A

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

00000000 = 00 => 00

01001001 = 6A => 92

 

01010101 = 55 => AA

00000000 = 00 => 00 \

10001000 = 88 => 11 | Aussentemperatur

00000000 = 00 => 00

11000000 = C0 => 03 \

01110101 = 75 => A7 | Wassertemperatur

00000000 = 00 => 00

10100000 = A0 => 05 \

01110001 = 71 => 87 | Kesseltemperatur

00000000 = 00 => 00

11110101 = F5 => AF

 

Anm.: zum Analysezeitpunkt per Osziloskop-Auswertung konnten nur Änderungen im Datagramm 4 festgesteellt werden (ab Kennbyte AA).

 

 

5.    Datagramm (12 Byte)

 

00110000 = 30 => 0C

01000000 = 40 => 02

00000000 = 00 => 00

11000000 = C0 => 03

10001111 = 8F => F1

10100000 = A0 => 05

00000101 = 05 => A0

00000000 = 00 => 00

Ggf Datagramm 5a ?  Da ein zusätzliches Stoppsignal vorhanden.

10000000 = 80 => 01

00000000 = 00 => 00

00000000 = 00 => 00

11110010 = F2 => 4F

 

6.    Datagramm (3 Byte)

 

11000001 = C1 => 83

00000000 = 00 => 00

11111000 = F8 => 1F

 

7.    Datagramm (6 Byte)

 

01100000 = 60 => 06

00000000 = 00 => 00

00000000 = 00 => 00

Ggf  7a wegen zusätzlichem Stoppbit

00000000 = 00 => 00

00010000 = 10 => 08

00010110 = 16 => 68

 

8.    Datagramm (4Byte)

 

00100001 = 21 => 84

00000000 = 00 => 00

10000000 = 80 => 01 Sommer-/Winterbetrieb

11000100 = C4 => 23

 

2.3.2.      Tabelle Holdoff-Zeiten VRC410 Signal

Achtung: ggf. muss noch die Zeit zwischen den Datagramme ermittelt werden und zu der jeweiligen Holdoff-sum zeit hinzuaddiert werden.

 

 

Zur weiteren Analyse:

·         Adapter (Pegelkonverter) zur Anpassung an serielle Schnittstelle.

·         Aufzeichnung der Binärdaten und Sortierung in die 8 einzelnen Datagramme (Excel oder separat erstelltes Java-Programm. Ggf. Auswertung einzelner Datagramme mit der Histogramm-Funktion des Hexeditor: HxD - Freeware Hex-Editor und Disk-Editor

·         Analyse welche Datagramme wann ihre Inhalte ändern.

 

 

2.3.3.      Ermittung der mittleren Hold-off Zeiten

Die Ermittlung der mitteren Hold-off Zeiten erweist sich in so fern als schwierig, da ein deut

 

 

3.              Datenlogger

Der Projektumfang sieht vor die Datagramme des VRC 410 entweder über

 

·                       Monitorprogramm am Laptop (SerialSniffer) oder

·                       Speziell entwickeltes Java-Terminalprogramm (VRCMonitor)

·                       Im TC65 Terminal des AF104 Projektes

Aufzeichnen zu können.

 

4.              Datenanalyse

Bislang wurden von den 67 Bytes der Gesamtzahl der Datagramm-Bytes folgende Parameter identifiziert:

 

#

Function

Data-gram No.

Format
(byte)

Range

(Byte position)

Remarks

 

Betriebsstatus

D4

2 byte

19 – 20

0-kein Heizbedarf
1-Heizbetrieb
1023-Warmwasser

 

DCF77 Status

D4

1 byte

22

 

 

DCF77 Sekunden

D4

1 byte

23

 

 

DCF77 Minuten

D4

1 byte

24

 

 

DCF77 Stunden

D4

1 byte

25

 

 

DCF77 Wochentag

D4

1 byte

26

 

 

DCF77 Tag

D4

1 byte

27

 

 

DCF77 Monat

D4

1 byte

28

 

 

DCF77 Jahr

D4

1 byte

29

 

 

Aussentemperatur

D4

2 byte

33 – 34

- 40 … +80°C

 

Vorlauftemperatur

D4

2 byte

36 – 37

+50 … +82°C

 

Speichertemperatur

D4

2 byte

39 – 40

 

 

Kesseltemperatur

D4

2 byte

 

 

 

Heizkurventemp.- Sollwert

D4

2 byte

48 - 49

+40 … +82°C

 

 

 

 

 

 

 

X-Parameter

D5

1 byte

53

unbekannt

 

 

 

 

 

 

 

Sommer-Winterbetrieb

D8

1 byte

66

0-Sommer / 1-Winter

 

 

 

 

 

 

 

 

4.1.         Installation

4.1.1.      DCF77 Funkuhr Funktionalität

Zur Nutzung der eigenen Funkuhr Funktionalität der ironVIT – Anlage sind Änderungen in der vorhandenen Verkabelung notwendig. …

 

4.2.         VRC-Monitor

Speziell für die VRC-Datagramm-Analyse entwickeltes Java-Programm auf Laptop zur Bestimmung sich ändernder Bytewerte, Zuordnung zu entsprechenden Betriebsparametern. Speicherung der Rohdaten. Umwandlung der Daten zur Darstellung in einer grafischen Form.

 

Das Programm wurde bewusst in Java (SE) geschrieben um somit eine leichte Portierung in das TC65 Terminal (Java ME, IMP-NG, CLDC 1.1) zu gewährleisten

 

4.2.1.      Listing – VRC Monitorprogramm

 

4.2.2.      Hardcopy – VRC Monitorprogramm

 

 

 

 

4.3.         Pegelkonverter

 

Der Pegelkonverter dient zur Umsetzung der gepulsten Gleichspannung in ein RS-232 kompatibles Format. Er soll ermöglichen, dass direkt ein Termialprogramm mit Auswertelogik angeschlossen werden kann.

 

4.4.         VRC-Konverter

 

Zur Aufzeichnung der VRC Rohdaten im TC65Terminal steht am TC65 nur eine serielle Schnittstelle von 19200 oder max. 115200 bit/s zur Verfügung. Da das VRC nur ca. alle 10 Sekunden eine Datensequenz von 67 Byte mit einer Datenrate von 2400 bit/s übertragen bekommt ist ein einfacher Schnittstellenumsetzer ohne großen Puffer (in Empfangsrichtung) ausreichend.

Die theor. Nettodatenrate beträgt: 67*8bit / 2400 bit/s

 

 

 


5.              Zubehör

 

5.1.         Ölverbrauchsmesser

5.1.1.      Zielsetzung

Anzeige zur direkten Ablesung der Gesamtverbrauch an Heizöl pro Ablseszeitraum. Aänlich dem Wasser- und Stromzählers soll hier eien Möglichkeit geschaffen werden, den Heizölverbrauch auf  ähnliche Weise ermitteln und erfassen zu können.

Hintergrund:

Vorhandenes mobiles, manuelles Erfassungssytem (Apple iPhone) mit ersprechender Erfassungssoftware (App: pVerbrauch – osXwerk.de) und zentrale Ablage im Web (google docs)

5.1.2.      Machbarkeitsanalyse

Die Voltcraft ÖL-Verbrauchsanzeige (Bestell-Nr. 12 09 90 über www.conrad.de , Preis 12/2009: 19,95 EUR) ist ein spezieller Betriebsstundenzähler, der die ermittelten Brennerbetriebsstunden wahlweise auch in Kilogramm oder Litern anzeigen kann.

 

Bei Öl-Heizanlagen ist der Brennstoffverbrauch direkt proportional zur Laufzeit der Förderpunpe. D.h. der Öldurchsatz ist konstant und hängt nur vom verwendeten Brenner ab. Der Verbrauchswert (in kg/h) ist am Typenschild des Brenners angegeben.

 

 

Bild von Conrad einfügen

            

 

 

Auszug aus Original-Installationsanleitung iroVIT, Seite 16, Tabelle4.3 Belegung des Brennersteckers:

X9 Pin

Funktion

Signal-Richtung

Kenn-zeichnung

Bemerkungen

1

Brenneransteuerung

T2

 

2

Betriebsbereitschaft Brenner

T1

 

3

Betriebsrückmeldung Brenner

B4

 

4

Störmeldung Brenner

S3

 

5

Phase über STB an Brenner
(Brenner-Versorgung)

L

 

6

Nullleiter
(Brenner-Versorgung)

N

 

7

Schutzleiter
(Brenner-Versorgung)

PE

 

 

 

5.1.3.      Inbetriebnahme

a)     Einsetzen der Lithium-Batterie 3V (Typ 2032); Typ. Stromaufnahme 2,5µA.
Angegebene Batterielebensdauer 5 Jahre

b)    Programmierung des Brennerdurchsatzes: (s. Auszug aus Bedienungsanleitung des Ölverbrauchsmessers). Einstellung im Bereich 1,45 .. 3,00 kg/h möglich. Abstufungen im Bereich von 0,05 kg/h (50 g/h) möglich. Angaben lt. Brenner-Typenschild 2,14 kg/h. Gewählte Einstellung: 2,15 kg/h

c)     Rückstellfunktion aktivieren/deaktivieren

d)    Mode auswählen: Es kann mittels der Mode-Taste zwischen Betriebsstunden (Anzeige H), Verbrauch in Kilogramm (Anzeige KG) oder Verbrauch in Litern (Anzeige L) ausgewählt werden. Die Umschaltung des Anzeigemodus kann zu beliegbigen Zeiten erfolgen.

 

 

 

 

 

 

 

Einbaumaße des Displays (Snap-in Fassung):  69 x 33 mm.

 

5.1.4.      Installation

Als Installationsort kann der  betriebsfertige Ölverbrauchsmesser direkt in die Nähe der Steuerungseinheit des iroVIT Brenners montiert werden oder separat in die Hutschieneneinheit des VCR-Monitors. Der Hutschienen-Montage wurde der Vorzug gegeben, da es zum einem besser auf Sichthöhe des Ablesepersonals liegt und zum anderen keine bauliche Veränderung am iroVIT Bedienungseinheit verursacht. Nachteil: Die Einbautiefe des Ölverbrauchsmessers von 74 mm bedeutet einen Umbau des CE-Zertifizierten Komplettgerätes indas nur 71mm tiefe Hutschienengehäuse und damit den Wegfall der CE-Zulassung. Im Privatbereich jedoch zulässig. Insbesondere werden CE relevente Teile wie EMV zwar verändert, jedoch hier außerhalb der rReichweite z.B. des DCF77-Empfängers oder der iroVIT Steuerung.

 

 

 

 

 

   Heizöl Extra Leicht (EL)                                          Quelle: Wikipedia

Heizöl

Andere Namen

HEL, IGO (Industrial Gasoil)

Kurzbeschreibung

Brennstoff für den privaten Gebrauch; farblose bis gelbliche Flüssigkeit mit charakteristischem Mineralölgeruch [1]

CAS-Nummer

68476-30-2

Eigenschaften

Aggregatzustand

flüssig

Kinematische Viskosität

6,0 mm2/s (20 °C) max[2]

Dichte

0,820–0,860 kg/l (15 °C) [1]

Heizwert

36,0 MJ/l = 42,6 MJ/kg (bei 0,845 kg/l) [2]

Brennwert

38.4 MJ/l = 45,4 MJ/kg (bei 0,845 kg/l) [2]

Siedebereich

170–390 °C [1]

Flammpunkt

>55 °C [2]

Zündtemperatur

220 °C [1]

Temperaturklasse

T3 [1]

Kohlendioxidemissionen bei Verbrennung

2,65 kg/l

Sicherheitshinweise

Gefahrstoffkennzeichnung [1]

UN-Nummer

1202

Gefahrnummer

30

DIN 51603-1 differenziert zwischen zwei Heizöl EL-Sorten: Heizöl EL (abgekürzt: HEL) und Heizöl EL schwefelarm. Die Bezeichnung "EL" steht für "extra leicht(flüssig)". ’’Heizöl EL’’ unterscheidet sich vom ’’Heizöl EL schwefelarm’’ durch seinen maximal zulässigen Schwefelanteil. Laut einem Entwurf für DIN 51603 Teil 1 darf Heizöl EL seit 1. Januar 2008 einen Schwefelanteil von maximal 1.000 mg/kg aufweisen, Heizöl EL schwefelarm maximal 50 mg/kg. Markenhersteller unterscheiden noch nach Art der Additivierung, so dass zurzeit folgende Qualitäten angeboten werden:

 


6.              Anhang

 

6.1.         Datenblätter (Bauteile für RS232 Konverter)

 

6.1.1.      µA 741 P

 

6.1.2.      C-Control Pro – Atmel Mega128

 

6.2.         Simulation Pegelkonverter

 

 

 

 

 

6.2.1.      Stromlaufplan - Pegelkonverter

 

 

 

 

6.2.2.      Bestückungsplan - Pegelkonverter


 

 

6.3.         RS-232 Schnittstellenwandler

Anforderungen an den Schnittstellenwandler:

·         2 Schnittstellen RS-232 für Bitraten zwischen 2400 bis 115200 bit/s

·         Geringe Stromaufnahme

·         Hutschienen-Gehäuse

·         Optional Speicherung von Betriebsparametern (Betriebsdauer Brenner, Ölverbrauch, etc.)

6.3.1.      Stromlauf

 

6.3.2.      Bestückungsplan

 

 

 


 

6.3.3.      Stückliste

; Stückliste=D:\C-Control\VRC.2009-06-15\VRC-CCM128-2xRS232.2009-06-07.T3001

; Datum=15.Juni.2009  18:12

 

; Variante=AllVars

 

; Autor=Michael Gries

 

;

 

 

 

Pos

Name

Wert

Gehäuse

1

C1

100µF

C_ELKO_RM5,08_DM7

2

C2

10µF

C_ELKO_RM2,54_DM6

3

C3

100NF

2,54X5,08_RM2,54

4

C4

100NF

2,54X5,08_RM2,54

5

C5

100NF

2,54X5,08_RM2,54

6

D1

Yellow

LED_5MM_GELB

7

D2

1N4007

D_RM12,7_DM3

8

IC1

MAX233CPP

DIL20

9

K1

R5,08

ANSCHLUSSKLEMME_2

10

K2

R5,08

ANSCHLUSSKLEMME_2

11

K4

R5,08

ANSCHLUSSKLEMME_3

12

K5

R5,08

ANSCHLUSSKLEMME_3

13

K6

R5,08

ANSCHLUSSKLEMME_3

14

K7

R5,08

ANSCHLUSSKLEMME_3

15

R1

390

0207

16

S1

Boot

TASTER_TAKTSCHALTER

17

S2

Reset

TASTER_TAKTSCHALTER

18

T1

AN78M05

TO220

19

U1

C-Control_Mega128

C-CONTROL_MEGA128

20

UX1

K2X08_B

2X08_BUCHSE

21

UX2

K2X08_B

2X08_BUCHSE

22

UX3

K2X08_B

2X08_BUCHSE

23

UX4

K2X08_B

2X08_BUCHSE

24

X1

SUB-D_9Pol_S

SUB-D_9POL_STIFT_STEHEND

25

X2

SUB-D_9Pol_B

SUB-D_9POL_BUCHSE_STEHEND

26

XX1

K2X05_B

2X05_BUCHSE

27

XX2

K2X05_B

2X05_BUCHSE

28

Z1

Logo

LOGO

 


 

6.3.4.      Netzliste

!PADS-POWERPCB-V3.0-MILS! DESIGN DATABASE ASCII FILE 2.0

*PART*

C1     C_ELKO_RM5,08_DM7

C2     C_ELKO_RM2,54_DM6

C3     2,54X5,08_RM2,54

C4     2,54X5,08_RM2,54

C5     2,54X5,08_RM2,54

D1     LED_5MM_GELB

D2     D_RM12,7_DM3

IC1    DIL20

K1     ANSCHLUSSKLEMME_2

K2     ANSCHLUSSKLEMME_2

K4     ANSCHLUSSKLEMME_3

K5     ANSCHLUSSKLEMME_3

K6     ANSCHLUSSKLEMME_3

K7     ANSCHLUSSKLEMME_3

R1     0207

S1     TASTER_TAKTSCHALTER

S2     TASTER_TAKTSCHALTER

T1     TO220

U1     C-CONTROL_MEGA128

UX1    2X08_BUCHSE

UX2    2X08_BUCHSE

UX3    2X08_BUCHSE

UX4    2X08_BUCHSE

X1     SUB-D_9POL_STIFT_STEHEND

X2     SUB-D_9POL_BUCHSE_STEHEND

XX1    2X05_BUCHSE

XX2    2X05_BUCHSE

Z1     LOGO

 


*NET*

*SIGNAL* GND

XX2.5 IC1.6 IC1.9 UX4.12 K1.2 K4.3 K5.3 T1.2 C1.2 S1.1 S2.1 C2.2 C3.1 C4.1 C5.1 XX1.5 X2.5 X1.5 K2.1

*SIGNAL* V-

IC1.17 IC1.12 K5.1 XX1.7 X1.7

*SIGNAL* V+

IC1.14 K5.2 XX1.4 X1.4

*SIGNAL* +5V

R1.2 IC1.7 UX4.10 T1.3 C2.1 C4.2 C5.2 K2.2

*SIGNAL* RESET

UX2.3 S2.2 X2.9 K6.2

*SIGNAL* PE1

IC1.1 UX1.15

*SIGNAL* PG3

UX2.5 D1.2

*SIGNAL* T2OUT

XX2.2 IC1.18 K4.1 X2.2

*SIGNAL* R2IN

XX2.3 IC1.19 K4.2 X2.3

*SIGNAL* R1IN

IC1.4 K7.1 XX1.2 X1.2

*SIGNAL* R2OUT

IC1.20 UX1.16

*SIGNAL* Vin

T1.1 C1.1 C3.2 D2.2

*SIGNAL* VDD

K1.1 D2.1

*SIGNAL* C2-

IC1.10 IC1.16

*SIGNAL* C2+

IC1.11 IC1.15

*SIGNAL* LED

R1.1 D1.1

*SIGNAL* R1OUT

IC1.3 UX2.11

*SIGNAL* Boot

UX1.12 S1.2 X2.1 K6.1

*SIGNAL* Mode

UX2.14 K6.3

*END*

 

 


 

 

Netzteil Hutschiene

 

Als Spannungsversorgung der Hutschienen-Module kommt ebenfalls ein Hutschienen-Modul als Netzteil zur Anwendung. Passend zum verwendeten Hutschienen-Gehäusedesign ist unter www.conrad.de ein entsprechendes Netzteil zur C-Control Familie verfügbar. Betriebsparameter 230V, +12V Sekundär, 125mA Dauerbelastungsstrom. Der Prototyp des RS-232 Konverters benötigt ca. 50mA. Es besteht somit noch genügend Reserve für Erweiterungen zur Verfügung.

 

6.3.5.      Blockschaltbild / Anschlussbelegung

 

 

 

 

 

 

 

 

 

 

 


6.3.6.      C-Control Pro Mega Series (Mega 128)

 

Programmierung ab 19.04.2009. Verwendete IDE Version 1.77.

Ab 14.05.2009 steht neue IDE Version 2.0 zur Verfügung. Neue Library-Funktion Clock

Umstellung ab 24.05.2009. Vorteile: Schnellere Übertragung, da Interpreter nur dann erneut mit Übertragen wird, wenn eine neuere Version verwendet wurde.

6.3.6.1.  Listings

/*

File: VRC.cc

Creation: 2009-04-19

Version: 9.12.27 (change #DEFINE VERSION below)

Author: Michael Gries (c)2009

IDE-Lib: 2.01 (27.06.2009)

*/

/*

Version history:

2009-04-19 Erstellung

2009-06-14 X-Parameter hinzu

2009-12-13 Versionsangabe im Zeitstempel

*/

// Generic Preprozessor: http://nothingisreal.com/gpp/gpp.html

//------------------------------------------------------------------------------

// Hauptprogramm

//

/*

Verwendete Module (in config entsprechender Reihenfolge):

VRC.cc Hauptprogramm

Serial.cc 2xRS232 (Kommandointerpreter von TC65 Terminal)

Datagram.cc Datagramm-Anylsyse von iroVIT-Signal

Ports.cc Def. benutzter Mega128 Prots der C-Control Pro

Clock.cc internes Zeitmanagement

EEPROM.cc internes EEProm handling

Debug.cc Diagnoseprozeduren

DirectAccess.cc direkter Zugriff auf die Register des MEGA128

String_Lib.cc (explicit), d.h. nicht als Interpreter Lib eingebunden

ascii.ch (include Datei), ascii Zeichen

*/

/*

Signature Bytes

All Atmel microcontrollers have a three-byte signature code

which identifies the device. This code can be read in both serial and

parallel mode, also when the device is locked.

The three bytes reside in a separate address space.

For the ATmega128 the signature bytes are:

1. $000: $1E (indicates manufactured by Atmel)

2. $001: $97 (indicates 128KB Flash memory)

3. $002: $02 (indicates ATmega128 device when $001 is $97)

*/

#include ascii.ch // ASCII Steuerzeichen

#define PRJ "VRC"

#define PROJECT "VRC-Monitor"

#define VERSION "9.12.27"

#define AUTHOR "Michael Gries"

#define COPYRIGHT "(c)2009"

#define LIBRARY "2.01 (27.06.2009)"

#define TRACE false

char buffer0[255];

char buffer1[255];

char message[255];

char filename[128];

char function[128];

void main(void)

{

int sz;

int inv; inv=1;

word wsz;

byte bsz;

word ws0;

byte bs0;

unsigned char value[5];

int count;

byte mode;

/*

Initialisierungen

*/

Ports_InitVRC();

Clock_InitVRC();

DebugMode=0; // Debug mode deactivated - press 'D' for activation

TraceMode=1; // Trace mode activated - press 'T' for deactivation

ATempMin=0x0555;

ATempMax=0x0016;

KTempMin=0x0666;

KTempMax=0x0022;

WTempMin=0x0777;

WTempMax=0x0011;

Brenner=0x0000; BrennerDauer=0x0000;

mode = Ports_GetMode();

int baud; baud=mode;

message="\r\nMode: ";

Str_WriteInt(baud,message,STR_APPEND);

Serial_WriteText(0,message); // Text über RS232 ausgeben

char sline[8];

filename=__FILE__;

function=__FUNCTION__;

char nachricht[100]; nachricht=PROJECT; sline=__LINE__; //an dieser Stelle

//debug(__LINE__,__FILE__,"Test");

//EEPROM_Init();

//resetEEPROM(); // auskommentieren nach Produktstionsstart

Serial_InitVRC(baud);

//prnBetriebsstunden();

float bs;

/* Test EEProm

bs = EEPROM_GetBetriebsstunden(); bs=bs+0.16;

EEPROM_SetBetriebsstunden(bs);

*/

Debug(sline,function,nachricht);

char para2[10]; Str_WriteWord(SR_BD19200,10,para2,0,6);

Str_Copy(nachricht,para2,0); sline=__LINE__;

Debug(sline,function,nachricht);

/*

message="\r\nWait 2 seconds ...\r\n";

Serial_WriteText(0,message); // Text über RS232 ausgeben

AbsDelay(1000); // 1 Sek. Wartezeit

// Abfrage wieviel Zeichen empfangen wurden

count=Serial_IRQ_Info(0,RS232_FIFO_RECV);

// Die Anzahl der Zeichen wird als Meldung ausgegeben

Msg_WriteWord(count);

Serial_WriteHex(0,count);

message=" Zeichen im IRQ-Modus empfangen\r\n\n";

Msg_WriteText(message);

Serial_WriteText(0,message);

*/

Debug_Info();

AbsDelay(1000); // 1 Sek. Wartezeit

Debug_ModeDeactivate();

while(true) // Endlosschleife

{

Serial_HandleVRCdata(); // periodische Daten von der iroVIT-Anlage

Serial_HandleCommands(); // Statusabfragen vom PC oder TC65T

} // end while

}

 

/*

File: Serial.cc

Creation: 2009-05-22

Version: 9.12.26

Author: Michael Gries (c)2009

*/

/*

Version history:

2009-05-22 Erstellung

2009-12-26 Bug beseitigt wenn erstes Zeichen FF

*/

void Serial_InitVRC(int baud)

{

// Serial 0 (to PC or TC65Terminal)

#define TC65T PC

#define PC 0

if(baud==1)

{

Serial_Init_IRQ(0,buffer0,100,100,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD19200);

}else

{

Serial_Init_IRQ(0,buffer0,100,100,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD115200);

}

// Serial 1 (from iroVIT-VRC interface)

#define VRC 1

Serial_Init_IRQ(VRC,buffer1,100,100,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD2400);

}

void Serial_HandleCommands(void)

{

word w; w=Serial_ReadExt(PC); // read TC65T Command-buffer

if(!(w==0x100))

{

switch(w)

{

case '?':

case 'h':

case 'H': Debug_Help(); break;

case 'd': Debug_ModeDeactivate(); break;

case 'D': Debug_ModeActivate(); break;

case 'a': EEPROM_PrintAussentempMin(); break;

case 'A': EEPROM_PrintAussentempMax(); break;

case 'b':

case 'B': EEPROM_PrintBetriebsstunden(); break;

case 'c': Clock_PrintTimestamp(); break;

case 'i': Debug_Info(); break;

case 'k': EEPROM_PrintKesseltempMin(); break;

case 'K': EEPROM_PrintKesseltempMax(); break;

case 'w': EEPROM_PrintWassertempMin(); break;

case 'W': EEPROM_PrintWassertempMax(); break;

case 't': Debug_TraceModeActivate(); break;

case 'T': Debug_TraceModeDeactivate(); break;

case '~': Datagram_SMSdata(); break;

case ESC:

case TAB: Serial_WriteNewLine(); break;

case SP: Serial_WriteMarkLine(); break;

case 0x30: Serial_Write(0,'0'); break;

case 0x31: Serial_Write(0,'1'); break;

case 0x32: Serial_Write(0,'2'); break;

case 0x33: Serial_Write(0,'3'); break;

case 0x34: Serial_Write(0,'4'); break;

case 0x35: Serial_Write(0,'5'); break;

case 0x36: Serial_Write(0,'6'); break;

case 0x37: Serial_Write(0,'7'); break;

case 0x38: Serial_Write(0,'8'); break;

case 0x39: Serial_Write(0,'9'); break;

//default: Serial_Write(0,w); // for test purposes only

}

}

}

void Serial_HandleVRCdata(void)

{

char Text1[40]; // Array deklariert

char ausgabe[40];

int sz;

int inv; inv=1;

word wsz; byte bsz;

unsigned char value[5];

int dCount;

wsz=Serial_ReadExt(VRC); // Puffer auslesen

if(!(wsz==0x100)) //0x100 == Puffer leer

{

Ports_SetLED();

bsz=wsz;

datagram[pos++]=bsz;

if((pos==1) && (bsz==0xFF)) // bekannter Übertragungsfehler

{

Serial_ErrorFF();

Ports_ResetLED();

pos=0;

}

//datagram[count]=wsz;

message="#";

//Str_Copy(datagram,message,STR_APPEND);

//count=count+1;

if(DebugMode)

{

Str_WriteWord(wsz,16,value,0,2); //formatiert ausgeben

Serial_WriteText(PC,value);

Serial_Write(PC,' '); Serial_Write(0,' ');

// Formatierung nach Datagram-Grenzen (Nr. 1-3,4,5-6,7-8

if((pos==16)||(pos==31)||(pos==42)||(pos==57))

{

Serial_WriteNewLine();

}

} else

{

if(TraceMode)

{

Serial_Write(0,bsz);

}

}

if((wsz==0x22 || wsz==0x23) && (pos>60))

{

Ports_ResetLED();

if(DebugMode)

{

Serial_WriteNewLine();

//wsz=sizeof(datagram)*SIZE;

message="Anzahl Datagram-Bytes: ";

Serial_WriteText(0,message);

Serial_WriteInt(0,pos);

Serial_WriteNewLine();

AbsDelay(300);

//clearDatagram();

//setDatagram();

//Serial_WriteText(0,datagram);

//Datagram_Debug();

}

Datagram_Analyse();

if(DebugMode)

{

Datagram_Print();

AbsDelay(200);

Serial_WriteMarkLine();

Serial_WriteNewLine();

}

pos=0;

}

} // end serial 1 read

}

void Serial_WriteHex(byte ser, word value)

{

char sValue[10];

Str_WriteWord(value,16,sValue,0,4);

Serial_WriteText(ser,sValue);

}

void Serial_WriteInt(byte ser, word value)

{

char sValue[10];

Str_WriteWord(value,10,sValue,0,1);

Serial_WriteText(ser,sValue);

}

void Serial_WriteNewLine(void)

{

Serial_Write(0,LF); Serial_Write(0,CR);

}

void Serial_WriteMarkLine(void)

{

#define TERMINALSIZE 80

Serial_WriteNewLine();

Clock_UpdateTimestamp(); // into global variable sTimestamp[]

char cAuthor[40]; cAuthor=" ";

Str_Copy(cAuthor,COPYRIGHT,STR_APPEND);

Str_Copy(cAuthor,", ",STR_APPEND);

Str_Copy(cAuthor,AUTHOR,STR_APPEND);

Str_Copy(cAuthor," ",STR_APPEND);

unsigned int a; a=Str_Len(cAuthor);

char cVersion[20]; cVersion=" ";

Str_Copy(cVersion,PRJ,STR_APPEND);

Str_Copy(cVersion," ",STR_APPEND);

Str_Copy(cVersion,VERSION,STR_APPEND);

Str_Copy(cVersion," ---",STR_APPEND);

unsigned int v; v=Str_Len(cVersion);

message="--- ";

Str_Copy(message,sTimestamp,STR_APPEND);

unsigned int t; t=Str_Len(message);

unsigned int f; f=TERMINALSIZE-t-v-a-3;

char cLine[255]; Str_Fill(cLine,'-',f);

Str_Copy(message,"---",STR_APPEND);

Str_Copy(message,cAuthor,STR_APPEND);

Str_Copy(message,cLine,STR_APPEND);

Str_Copy(message,cVersion,STR_APPEND);

Serial_WriteText(0,message);

Serial_WriteNewLine();

}

void Serial_ErrorFF(void)

{

Serial_WriteNewLine();

Serial_WriteText(PC,"Bus Error 0xFF at ");

Clock_UpdateTimestamp(); // into global variable sTimestamp[]

Serial_WriteText(PC,sTimestamp);

Serial_WriteNewLine();

// Abfrage wieviel Zeichen empfangen wurden

word cntBuffer;

cntBuffer=Serial_IRQ_Info(VRC,RS232_FIFO_RECV);

AbsDelay(100);

Serial_WriteText(PC,"No of received characters: ");

Serial_WriteInt(PC,cntBuffer);

Serial_WriteNewLine();

while(false) // endlosschleife

{

Serial_Write(PC,'.');

AbsDelay(60000);

}

}

 

/*

File: Datagram.cc

Creation: 2009-05-24

Version: 9.12.27

Author: Michael Gries (c)2009

*/

/*

Version history:

9.5.24 Datagram analysis added

9.6.6 Char parameterInfo[] added -> Parameter interpretaion

9.6.14 X-Parameter added (veränderlicher unbekannter Parameter)

9.6.16 Wochentag encoding added

9.6.21 Wassertemp Min/Max added

9.12.13 bug fix negative temperature

9.12.27 Datagram_SMSdata() hinzu

*/

#define SIZE 67

#define posSTATUS 18 // Position Heizstatus

#define posDCF 21 // DCF77 Status

#define posSEK 22 // Sekunden (BCD)

#define posMIN 23 // Minute (BCD)

#define posSTD 24 // Stunde (BCD)

#define posWO 25 // Wochentag (0-6 = M0-S0)

#define posTAG 26 // Tag (BCD)

#define posMON 27 // Monat (BCD)

#define posJAH 28 // Jahr (BCD-zweistellig)

#define posAT 32 // Position Aussentemp

#define posWT 35 // Position Wassertemp

#define posKT 38 // Position Kesseltemp

#define posHK 47 // Position Heizkurve

#define posXPara 52 // Position unbekannter Parameter

#define posWB 64 // Position Winterbetrieb

byte datagram[SIZE];

char parameterInfo[60];

char datavalueInfo[60];

char SMSdata[255];

unsigned int pos;

word Status;

word Brenner; word BrennerLast; word BrennerDauer;

byte DCFstatus;

byte Sek; byte Min; byte Std;

byte Tag; byte Monat; byte Jahr;

byte Wochentag; char WOT[3];

word ATemp; word ATempMin; word ATempMax;

word WTemp; word WTempMin; word WTempMax;

word KTemp; word KTempMin; word KTempMax;

word HKurve;

word Betriebsart;

word XPara;

void Datagram_Clear(void)

{

for(pos=0;pos<SIZE;pos++) datagram[pos]=0;

}

void Datagram_Set(void)

{

for(pos=0;pos<SIZE;pos++) datagram[pos]=0x23; // '#'

}

void Datagram_Debug(void)

{

word w; char s[5];

for(pos=0;pos<SIZE;pos++)

{

w=datagram[pos];

Str_WriteWord(w,16,s,0,2);

Serial_WriteText(0,s);

AbsDelay(10); // wichtig: Verzögerung TODO: tuning

}

}

void Datagram_Analyse(void)

{

Status= Datagram_Word(posSTATUS);

DCFstatus= Datagram_Byte(posDCF);

Sek= Datagram_Byte(posSEK);

Min= Datagram_Byte(posMIN);

Std= Datagram_Byte(posSTD);

Wochentag= Datagram_Byte(posWO);

Tag= Datagram_Byte(posTAG);

Monat= Datagram_Byte(posMON);

Jahr= Datagram_Byte(posJAH);

ATemp= Datagram_Word(posAT);

WTemp= Datagram_Word(posWT);

KTemp= Datagram_Word(posKT);

HKurve= Datagram_Word(posHK);

XPara= Datagram_Word(posXPara);

Betriebsart= Datagram_Word(posWB);

Datagram_TestATemp();

Datagram_TestKTemp();

Datagram_TestWTemp();

Datagram_TestBetriebsstunden();

}

void Datagram_Print(void)

{

AbsDelay(500); // wichtig: Verzögerung TODO: tuning

message="\r\nVRC-Status : ";

Serial_WriteText(0,message);

Serial_WriteHex(0,Status);

Datagram_InfoStatus();

Serial_WriteText(0,parameterInfo);

message="\r\nBrenndauer : ";

Serial_WriteText(0,message);

Serial_WriteHex(0,BrennerDauer);

Datagram_InfoBrennerDauer();

Serial_WriteText(0,parameterInfo);

message="\r\nDCF-Status : ";

Serial_WriteText(0,message);

Serial_WriteHex(0,DCFstatus);

Datagram_InfoDCF();

Serial_WriteText(0,parameterInfo);

AbsDelay(500); // wichtig: Verzögerung TODO: tuning

message="\r\nDCF77 Zeit : ";

Serial_WriteText(0,message);

Datagram_InfoWochentag();

Str_Printf(message,"20%02d-%02d-%02d %s %02d:%02d:%02d ",

Jahr,Monat,Tag,WOT,Std,Min,Sek);

Serial_WriteText(0,message);

Clock_SetDCF77();

message="\r\nAussentemp.: ";

Serial_WriteText(0,message);

Serial_WriteHex(0,ATemp);

Datagram_InfoTemp(ATemp);

Serial_WriteText(0,parameterInfo);

message="\r\nWassertemp.: ";

Serial_WriteText(0,message);

Serial_WriteHex(0,WTemp);

Datagram_InfoTemp(WTemp);

Serial_WriteText(0,parameterInfo);

message="\r\nKesseltemp.: ";

Serial_WriteText(0,message);

Serial_WriteHex(0,KTemp);

Datagram_InfoTemp(KTemp);

Serial_WriteText(0,parameterInfo);

message="\r\nHeiz-Kurve : ";

Serial_WriteText(0,message);

Serial_WriteHex(0,HKurve);

Datagram_InfoTemp(HKurve);

Serial_WriteText(0,parameterInfo);

message="\r\nX-Parameter: ";

Serial_WriteText(0,message);

Serial_WriteHex(0,XPara);

//Datagram_InfoTemp(XPara);

//Serial_WriteText(0,parameterInfo);

AbsDelay(500); // wichtig: Verzögerung TODO: tuning

message="\r\nBetriebsart: ";

Serial_WriteText(0,message);

Serial_WriteHex(0,Betriebsart);

Datagram_InfoBetriebsart();

Serial_WriteText(0,parameterInfo);

Serial_WriteNewLine();

Serial_WriteNewLine();

}

word Datagram_Word(unsigned int ind)

{

word wh; word wl;

wh=datagram[ind]; wh=wh<<8;

wl=datagram[ind+1];

return wh+wl;

}

byte Datagram_Byte(unsigned int ind)

{ // 9.6.7

byte b;

b=datagram[ind];

return b;

}

void Datagram_InfoBetriebsart(void)

{ // 9.6.6

parameterInfo=" ";

switch(Betriebsart)

{

case 0x00: parameterInfo=" = Sommerbetrieb"; break;

case 0x01: parameterInfo=" = Winterbetrieb"; break;

}

}

void Datagram_InfoStatus(void)

{ // 9.6.6

parameterInfo=" ";

switch(Status)

{

case 0x0000: parameterInfo=" = Bereitschaft";break;

case 0x0001: parameterInfo=" = Heizbetrieb"; break;

case 0x0002: parameterInfo=" = Warmwasser"; break;

case 0x0400: parameterInfo=" = Warmwasser (Pumpenachlauf)"; break;

case 0x0402: parameterInfo=" = Warmwasser (und Pumpe)"; break;

}

}

void Datagram_InfoBrennerDauer(void)

{ // 9.6.6

parameterInfo=" ";

if(BrennerDauer)

{

parameterInfo=" = Brenner aktiv";

} else

{

parameterInfo=" = Brenner aus";

}

}

void Datagram_InfoDCF(void)

{ // 9.6.6

parameterInfo=" ";

switch(DCFstatus)

{

case 0x00: parameterInfo=" = kein Empfang"; break;

case 0x01: parameterInfo=" = Empfang"; break;

case 0x02: parameterInfo=" = Synchonisierung"; break;

case 0x03: parameterInfo=" = Signal gueltig"; break;

}

}

void Datagram_InfoWochentag(void)

{ // 9.6.16

WOT="--";

switch(Wochentag)

{

case 0x00: WOT="Mo"; break;

case 0x01: WOT="Di"; break;

case 0x02: WOT="Mi"; break;

case 0x03: WOT="Do"; break;

case 0x04: WOT="Fr"; break;

case 0x05: WOT="Sa"; break;

case 0x06: WOT="So"; break;

}

}

void Datagram_InfoTemp(word temp)

{ // 9.6.6

#define DIVIDER 16

#define OFFSET 0.0

int g; g=temp; // due to 16bit value signed

float f; f=g;

f=f/DIVIDER+OFFSET;

Str_Printf(parameterInfo," (%03.1f`C)",f);

Str_Printf(datavalueInfo,"%03.1f°C \r\n",f);

// note: char '`' instead of '°' due to valid ascii range 0..128

}

void Datagram_TestATemp(void)

{ // 9.6.7

#define DIVIDER 16

#define OFFSET 0.0

/*

Serial_WriteHex(0,ATemp);

Serial_WriteHex(0,ATempMin);

Serial_WriteHex(0,ATempMax);

*/

float f; f=ATemp; f=f/DIVIDER+OFFSET;

if(ATemp<ATempMin)

{

EEPROM_SetAussentempMin(f);

ATempMin=ATemp;

}

if(ATemp>ATempMax)

{

EEPROM_SetAussentempMax(f);

ATempMax=ATemp;

}

}

void Datagram_TestKTemp(void)

{ // 9.6.7

#define DIVIDER 16

#define OFFSET 0.0

/*

Serial_WriteHex(0,KTemp);

Serial_WriteHex(0,KTempMin);

Serial_WriteHex(0,KTempMax);

*/

float f; f=KTemp; f=f/DIVIDER+OFFSET;

if(KTemp<KTempMin)

{

EEPROM_SetKesseltempMin(f);

KTempMin=KTemp;

}

if(KTemp>KTempMax)

{

EEPROM_SetKesseltempMax(f);

KTempMax=KTemp;

}

}

void Datagram_TestWTemp(void)

{ // 9.6.21

#define DIVIDER 16

#define OFFSET 0.0

/*

Serial_WriteHex(0,WTemp);

Serial_WriteHex(0,WTempMin);

Serial_WriteHex(0,WTempMax);

*/

float f; f=WTemp; f=f/DIVIDER+OFFSET;

if(WTemp<WTempMin)

{

EEPROM_SetWassertempMin(f);

WTempMin=WTemp;

}

if(WTemp>WTempMax)

{

EEPROM_SetWassertempMax(f);

WTempMax=WTemp;

}

}

void Datagram_TestBetriebsstunden(void)

{ // 9.6.21

#define DIVIDER 60 //hex value in seconds -> set to minutes

#define OFFSET 0.0

Brenner = Status & 0x000F; // !=0 wenn aktiv

if(!Brenner && BrennerLast) // Wechsel auf Brenner aus

{

float f; f=BrennerDauer; f=f/DIVIDER+OFFSET;

float b;

b = EEPROM_GetBetriebsstunden();

b = b + f;

EEPROM_SetBetriebsstunden(b);

BrennerDauer=0;

}

if(Brenner && !BrennerLast) // Wechsel auf Brenner an

{

BrennerDauer=0;

}

if (Brenner && BrennerLast) // Brenner noch aktiv

{

BrennerDauer = BrennerDauer + 0x000A;

}

BrennerLast = Brenner;

}

void Datagram_SMSdata(void)

{ // 9.12.27

#define SMSMAXLENGTH 160

SMSdata="Status Heizung:\r\n";

Str_Copy(SMSdata,"Aussentemperatur: ",STR_APPEND);

Datagram_InfoTemp(ATemp);

Str_Copy(SMSdata,datavalueInfo,STR_APPEND);

Str_Copy(SMSdata,"Wassertemperatur: ",STR_APPEND);

Datagram_InfoTemp(WTemp);

Str_Copy(SMSdata,datavalueInfo,STR_APPEND);

Str_Copy(SMSdata,"Kesseltemperatur: ",STR_APPEND);

Datagram_InfoTemp(KTemp);

Str_Copy(SMSdata,datavalueInfo,STR_APPEND);

word l; l=Str_Len(SMSdata);

if(l>SMSMAXLENGTH)

{

Serial_WriteText(PC,"Maximum number of SMS characters exceeded");

}else

{

Serial_WriteText(PC,SMSdata);

}

}

 

/*

File: Ports.cc

Creation: 2009-05-03

Version: 9.6.6

Author: Michael Gries (c)2009

*/

/*

Version history:

9.5.3 LED feature added

9.5.23 Mode feature added

9.6.6 pre-processor define statements added:

concatenated: e.g. MODE -> PD5 -> 29(MEGA128)

*/

#define MODE PD5 // Mode (0=19k2 oder 1=115k2)

#define LED PG3 // LED (Datagram Empfang)

#ifdef MEGA128

#define PD5 29 // Mode (0=19k2 oder 1=115k2)

#define PG3 51 // LED (Datagram Empfang)

#endif

void Ports_InitVRC (void)

{

Port_DataDirBit(MODE,PORT_IN); // Mode

Port_WriteBit (MODE,1); // Mode (Pull-up aktivieren)

Port_DataDirBit(LED,PORT_OUT); // LED

}

byte Ports_GetMode(void)

{

return Port_ReadBit(MODE); // Betriebsart lesen

}

void Ports_SetLED(void)

{

Port_WriteBit(LED,PORT_ON); // LED an (active low)

}

void Ports_ResetLED(void)

{

Port_WriteBit(LED,PORT_OFF); // LED aus (active high)

}

 

/*

File: Clock.cc

Creation: 2009-05-24

Version: 9.5.24

Author: Michael Gries (c)2009

*/

// Interpreter Funktionen ab IDE 2.00 (14.05.2009):

// Clock_GetVal();

// Clock_SetDate();

// Clock_SetTime();

char sTimestamp[30]; // Format: "YYYY-MM-DD hh.mm.ss "

void Clock_InitVRC(void)

{ // 9.5.24

Clock_SetDate(24,05,09);

Clock_SetTime(21,34,55,0);

}

void Clock_UpdateTimestamp(void)

{

byte Y; byte M; byte D;

byte h; byte m; byte s;

Y=Clock_GetVal(CLOCK_YEAR);

M=Clock_GetVal(CLOCK_MON);

D=Clock_GetVal(CLOCK_DAY);

h=Clock_GetVal(CLOCK_HOUR);

m=Clock_GetVal(CLOCK_MIN);

s=Clock_GetVal(CLOCK_SEC);

sTimestamp="no clock";

Str_Printf(sTimestamp,"20%02d-%02d-%02d %02d:%02d:%02d ",Y,M,D,h,m,s);

}

void Clock_PrintTimestamp(void)

{

Clock_UpdateTimestamp(); // into global variable sTimestamp[]

Serial_WriteText(0,sTimestamp);

}

void Clock_SetDCF77(void)

{

if(DCFstatus==3)

{

Clock_SetDate(Tag,Monat,Jahr);

Clock_SetTime(Std,Min,Sek,0);

}

}

 

/*

File: EEPROM.cc

Creation: 2009-04-19

Version: 9.6.14

Author: Michael Gries (c)2009

*/

/*

Version history:

9.4.19 Betriebstunden added

9.5.22 Aussen-/Kesseltemperatur added

9.6.14 Warmwassertemperatur added

*/

// EEPROM: Datenspeicherung im internen EEPROM

// erforderliche Library: IntFunc_Lib.cc

// Globale Parameter

// Datenaufzeichnung alle 10 Sekunden

// *6[==min]*60[==h]*24[==d] = 8640 Datensätze pro Tag -> Speichergröße: word

#define adrBetriebsstunden 0x1000 // Datentyp float

#define adrAussentempMin 0x1010 // Datentyp float

#define adrAussentempMax 0x1020 // Datentyp float

#define adrWassertempMin 0x1030 // Datentyp float

#define adrWassertempMax 0x1040 // Datentyp float

#define adrKesseltempMin 0x1050 // Datentyp float

#define adrKesseltempMax 0x1060 // Datentyp float

word Datensatz;

float fBetriebsstunden; // max 65535[h] = 2730[D] = 91[M] = 7[Y]

float fAussentempMin; // -40.0 ... +80.0 °C

float fAussentempMax; // -40.0 ... +80.0 °C

float fWassertempMin; // +10.0 ... +70.0 °C

float fWassertempMax; // +10.0 ... +70.0 °C

float fKesseltempMin; // +32.0 ... +95.0 °C

float fKesseltempMax; // +32.0 ... +95.0 °C

void EEPROM_Init(void)

{

//adrBetriebsstunden=0x1000;

float fData;

char sData[80];

fData = EEPROM_GetBetriebsstunden();

fData = fData/10;

Str_WriteFloat(fData,1,sData,0);

char sUnit[8]; sUnit = " [h]";

Str_Copy(sData,sUnit,STR_APPEND);

Debug_Println(adrBetriebsstunden,sData);

}

void EEPROM_Reset(void)

{

EEPROM_SetBetriebsstunden(0.0);

EEPROM_SetAussentempMin(0.0);

EEPROM_SetAussentempMax(0.5);

EEPROM_SetWassertempMin(0.0);

EEPROM_SetWassertempMax(0.5);

EEPROM_SetKesseltempMin(0.0);

EEPROM_SetKesseltempMax(0.5);

}

void EEPROM_SetBetriebsstunden(float value)

{

EEPROM_WriteFloat(adrBetriebsstunden,value);

}

float EEPROM_GetBetriebsstunden(void)

{

fBetriebsstunden=EEPROM_ReadFloat(adrBetriebsstunden);

return fBetriebsstunden;

}

void EEPROM_PrintBetriebsstunden(void)

{

#define DIVIDER 60 // in minutes -> set in hours

#define OFFSET 0.0

float fData; fData = EEPROM_GetBetriebsstunden();

fData = fData/DIVIDER+OFFSET;

char sData[80]; sData="Betriebsstunden: ";

Str_WriteFloat(fData,3,sData,STR_APPEND);

char sUnit[8]; sUnit = " [h]";

Str_Copy(sData,sUnit,STR_APPEND);

//println(adrBetriebsstunden,sData);

Debug_Send(adrBetriebsstunden,sData);

}

void EEPROM_SetAussentempMin(float value)

{

EEPROM_WriteFloat(adrAussentempMin,value);

}

void EEPROM_SetAussentempMax(float value)

{

EEPROM_WriteFloat(adrAussentempMax,value);

}

float EEPROM_GetAussentempMin(void)

{

fAussentempMin=EEPROM_ReadFloat(adrAussentempMin);

return fAussentempMin;

}

float EEPROM_GetAussentempMax(void)

{

fAussentempMax=EEPROM_ReadFloat(adrAussentempMax);

return fAussentempMax;

}

void EEPROM_PrintAussentempMin(void)

{

float fData; fData = EEPROM_GetAussentempMin();

char sData[30]; sData="AussentempMin: ";

Str_WriteFloat(fData,1,sData,STR_APPEND);

char sUnit[8]; sUnit = " [`C]";

Str_Copy(sData,sUnit,STR_APPEND);

//println(adrAussentempMin,sData);

Debug_Send(adrAussentempMin,sData);

}

void EEPROM_PrintAussentempMax(void)

{

float fData; fData = EEPROM_GetAussentempMax();

char sData[30]; sData="AussentempMax: ";

Str_WriteFloat(fData,1,sData,STR_APPEND);

char sUnit[8]; sUnit = " [`C]";

Str_Copy(sData,sUnit,STR_APPEND);

//println(adrAussentempMax,sData);

Debug_Send(adrAussentempMax,sData);

}

void EEPROM_SetWassertempMin(float value)

{

EEPROM_WriteFloat(adrWassertempMin,value);

}

void EEPROM_SetWassertempMax(float value)

{

EEPROM_WriteFloat(adrWassertempMax,value);

}

float EEPROM_GetWassertempMin(void)

{

fWassertempMin=EEPROM_ReadFloat(adrWassertempMin);

return fWassertempMin;

}

float EEPROM_GetWassertempMax(void)

{

fWassertempMax=EEPROM_ReadFloat(adrWassertempMax);

return fWassertempMax;

}

void EEPROM_PrintWassertempMin(void)

{

float fData; fData = EEPROM_GetWassertempMin();

char sData[20]; sData="WassertempMin: ";

Str_WriteFloat(fData,1,sData,STR_APPEND);

char sUnit[8]; sUnit = " [`C]";

Str_Copy(sData,sUnit,STR_APPEND);

//println(adrWassertempMin,sData);

Debug_Send(adrWassertempMin,sData);

}

void EEPROM_PrintWassertempMax(void)

{

float fData; fData = EEPROM_GetWassertempMax();

char sData[20]; sData="WassertempMax: ";

Str_WriteFloat(fData,1,sData,STR_APPEND);

char sUnit[8]; sUnit = " [`C]";

Str_Copy(sData,sUnit,STR_APPEND);

//println(adrWassertempMax,sData);

Debug_Send(adrWassertempMax,sData);

}

void EEPROM_SetKesseltempMin(float value)

{

EEPROM_WriteFloat(adrKesseltempMin,value);

}

void EEPROM_SetKesseltempMax(float value)

{

EEPROM_WriteFloat(adrKesseltempMax,value);

}

float EEPROM_GetKesseltempMin(void)

{

fKesseltempMin=EEPROM_ReadFloat(adrKesseltempMin);

return fKesseltempMin;

}

float EEPROM_GetKesseltempMax(void)

{

fKesseltempMax=EEPROM_ReadFloat(adrKesseltempMax);

return fKesseltempMax;

}

void EEPROM_PrintKesseltempMin(void)

{

float fData; fData = EEPROM_GetKesseltempMin();

char sData[20]; sData="KesseltempMin: ";

Str_WriteFloat(fData,1,sData,STR_APPEND);

char sUnit[8]; sUnit = " [`C]";

Str_Copy(sData,sUnit,STR_APPEND);

//println(adrKesseltempMin,sData);

Debug_Send(adrKesseltempMin,sData);

}

void EEPROM_PrintKesseltempMax(void)

{

float fData; fData = EEPROM_GetKesseltempMax();

char sData[20]; sData="KesseltempMax: ";

Str_WriteFloat(fData,1,sData,STR_APPEND);

char sUnit[8]; sUnit = " [`C]";

Str_Copy(sData,sUnit,STR_APPEND);

//println(adrKesseltempMax,sData);

Debug_Send(adrKesseltempMax,sData);

}

void EEPROM_WriteTimestamp(unsigned int adr)

{

EEPROM_Write(adr+4+1,Jahr);

EEPROM_Write(adr+4+2,Monat);

EEPROM_Write(adr+4+3,Tag);

EEPROM_Write(adr+4+4,Std);

EEPROM_Write(adr+4+5,Min);

EEPROM_Write(adr+4+6,Sek);

}

 

/*

File: Debug.cc

Creation: 2009-04-19

Version: 9.12.26

Author: Michael Gries (c)2009

*/

/*

Version history:

2009-04-19 Erstellung

2009-05-21 Debug_help() hinzu

2009-12-26 Debug_info() hinzu

*/

#ifdef MEGA128

#pragma Warning "Counter Funktionen nicht bei Timer0 und Mega128"

#endif

//#ifdef __DEBUG__

#pragma Message __DATE__

#pragma Message __TIME__

int DebugMode;

int TraceMode;

void Debug_ModeActivate(void)

{

DebugMode=1;

message="\r\nDebug mode activated ! - for deactivation press 'd'\r\n";

Serial_WriteText(0,message);

}

void Debug_ModeDeactivate(void)

{

message="\r\nDebug mode deactivated ! - for activation press 'D'\r\n";

Serial_WriteText(0,message);

DebugMode=0;

}

void Debug_TraceModeActivate(void)

{

TraceMode=1;

message="\r\nTrace mode activated ! - for deactivation press 'T'\r\n";

Serial_WriteText(0,message);

}

void Debug_TraceModeDeactivate(void)

{

message="\r\nTrace mode deactivated ! - for activation press 't'\r\n";

Serial_WriteText(0,message);

TraceMode=0;

}

void Debug(char sLine[], char sFunction[], char sMessage[])

{

char txt[81];

//Str_Fill(txt,' ',80);

Str_Copy(txt,sLine,0);

AbsDelay(1000);

Msg_WriteText(txt); // Zeilennummer ausgeben

Msg_WriteChar('-');

//Str_Copy(txt,sFunction,STR_APPEND);

Str_Copy(txt,sFunction,0);

Msg_WriteText(txt); // Funktionsnamenausgeben

Msg_WriteChar(':'); Msg_WriteChar(' ');

//Str_Copy(txt,sMessage,12);

Str_Copy(txt,sMessage,0);

Msg_WriteText(txt); // Nachricht ausgeben

Msg_WriteChar(13); // LF

AbsDelay(1000);

}

void Debug_Print(word adr, byte data)

{

Msg_WriteHex(adr); // Ausgabe der Adresse

Msg_WriteChar(':'); // Ausgabe: :

Msg_WriteHex(data); // Ausgabe des Adressinhaltes

Msg_WriteChar(0x20); // Ausgabe: Leerzeichen

}

void Debug_Println(word adr, char data[])

{

char mem[15]; mem="EEPROM-0x";

Msg_WriteText(mem); // Ausgabe des Adressinhaltes

Msg_WriteHex(adr); // Ausgabe der Adresse

Msg_WriteChar(':'); // Ausgabe: :

Msg_WriteChar(' '); // CR

Msg_WriteText(data); // Ausgabe des Adressinhaltes

Msg_WriteChar(0x20); // Ausgabe: Leerzeichen

Msg_WriteChar('\r'); // CR

Msg_WriteChar('\n'); // LF

}

void Debug_Send(word adr, char data[])

{

Serial_Write(0,CR); // CR

Serial_Write(0,LF); // LF

char mem[15]; mem="EEPROM-0x";

Serial_WriteText(0,mem); // Ausgabe des Adressinhaltes

Serial_WriteHex(0,adr); // Ausgabe der Adresse

Serial_Write(0,':'); // Ausgabe: :

Serial_Write(0,' '); // CR

Serial_WriteText(0,data); // Ausgabe des Adressinhaltes

Serial_Write(0,0x20); // Ausgabe: Leerzeichen

//Serial_Write(0,'\r'); // CR

}

void Debug_Help(void)

{

Serial_WriteNewLine();

message="Helpmenue \r\n";

Serial_WriteText(0,message);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

message="i - program info \r\n";

Serial_WriteText(0,message);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

message="D - debug mode activation \r\n";

Serial_WriteText(0,message);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

message="d - debug mode deactivation (default)\r\n";

Serial_WriteText(0,message);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

message="T - trace mode deactivation \r\n";

Serial_WriteText(0,message);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

message="t - trace mode activation (default) \r\n";

Serial_WriteText(0,message);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

message="a - Aussentemperatur min \r\n";

Serial_WriteText(0,message);

message="A - Aussentemperatur max \r\n";

Serial_WriteText(0,message);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

message="k - Kesseltemperatur min \r\n";

Serial_WriteText(0,message);

message="K - Kesseltemperatur max \r\n";

Serial_WriteText(0,message);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

message="w - Wassertemperatur min \r\n";

Serial_WriteText(0,message);

message="W - Wassertemperatur max \r\n";

Serial_WriteText(0,message);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

message="b - Betriebsstunden \r\n";

Serial_WriteText(0,message);

Serial_WriteNewLine();

}

void Debug_Info(void)

{ //9.12.26

Serial_WriteNewLine();

Serial_WriteText(PC,PROJECT); Serial_WriteText(PC," version: ");

Serial_WriteText(PC,VERSION); Serial_WriteText(PC,CRLF);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

Serial_WriteText(PC,"Compilation: "); Serial_WriteText(PC,__DATE__);

Serial_WriteText(PC,"_");

Serial_WriteText(PC,__TIME__); Serial_WriteText(PC,CRLF);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

Serial_WriteText(PC,"Directory: ");

Serial_WriteText(PC,filename); Serial_WriteText(PC,CRLF);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

Serial_WriteText(PC,"Library: ");

Serial_WriteText(PC,LIBRARY); Serial_WriteText(PC,CRLF);

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

byte bFreq;

bFreq=DirectAccess_Frequency();

//MEGA128 14,7456MHz

#define OSC 14.7456

char cValue[20];

Str_Printf(cValue,"%2.4f MHz\r\n",OSC);

Serial_WriteText(PC,"Frequency: "); Serial_WriteText(PC,cValue);

Serial_WriteNewLine();

AbsDelay(100); // wichtig: Verzögerung TODO: tuning

Serial_WriteText(PC,COPYRIGHT); Serial_WriteText(PC,", ");

Serial_WriteText(PC,AUTHOR); Serial_WriteText(PC,CRLF);

}

 

/*

File: DirectAccess.cc

Creation: 2009-12-26

Version: 9.12.26

Author: Michael Gries (c)2009

*/

/*

Interpreter Funktionen ab IDE 2.0:

byte DirAcc_Read(byte register);

void DirAcc_Write(byte register, byte val);

for register details see section

'Register Summary' in ATmega128_datasheet.pdf

*/

#define OSCCAL 0x6F

byte DirectAccess_Frequency(void)

{ // 9.12.26

byte bReg;

bReg = DirAcc_Read(OSCCAL);

return(bReg);

}

 

 

 

/**************************************************************************

String Library

***************************************************************************/

//-------------------------------------------------------------------------

void Str_Fill(char dest[],char c,word len)

{

word i;

for(i=0;i<len;i++) dest[i]=c;

}

//-------------------------------------------------------------------------

int Str_SubStr(char source[],char search[])

{

int i,j,len;

char s,c,v;

s=search[0];

i=0;

do

{

c=source[i];

if(c==s)

{

j=1;

do

{

v=search[j];

} while(v && v==source[i+j++]);

if(!v) return(i);

}

i++;

} while(c);

return(-1);

}

//-------------------------------------------------------------------------

byte Str_Isalpha(char c)

{

return((c>='a' && c<='z') || (c>='A' && c<='Z'));

}

//-------------------------------------------------------------------------

byte Str_Isalnum(char c)

{

return((c>='0' && c<='9') || Str_Isalpha(c));

}

 

/*

File: ascii.ch

Creation: 2009-05-22

Version: 9.5.23

Author: Michael Gries (c)2009

*/

// C-Control Pro (Mega128) C-Compact definition file

#define NUL 0x00

#define TAB 0x09

#define CR '\r'

#define LF '\n'

#define CAN 0x18

#define ESC 0x1B

#define SP 0x20

#define DEL 0x7F

#define CRLF "\r\n"

///

6.3.7.      VRC-Monitor Trace

--- 2009-05-24 21:37:52 --------------------------------------------------------

                                                                               

06  02  00  03  EE  98  84  00  02  20  06  02  00  03  F2  84  9A  00  00  00 

00  00  00  00  00  00  00  00  00  00  92  AA  01  10  00  03  99  00  03  B2 

00  0D  0C  02  00  03  F1  03  22  00  01  00  00  67  83  00  1F  06  00  00 

00  08  68  84  00  01  23                                                      

Anzahl Datagram-Bytes: 67                                                      

                                                                               

VRC-Status : 0000                                                               

Aussentemp.: 0110 (17.0°C)                                                     

Wassertemp.: 0399 (57.6°C)                                                     

Kesseltemp.: 03B2 (59.1°C)                                                     

Heiz-Kurve : 0322 (50.1°C)                                                     

Betriebsart: 0001 = Winterbetrieb                                              

                                                                               

                                                                                

--- 2009-05-24 21:38:03 --------------------------------------------------------

                                                                               

06  02  00  03  EE  98  84  00  02  20  06  02  00  03  F2  84  9A  00  00  00 

00  00  00  00  00  00  00  00  00  00  92  AA  01  10  00  03  99  00  03  B2 

00  0D  0C  02  00  03  F1  03  22  00  01  00  00  67  83  00  1F  06  00  00 

00  08  68  84  00  01  23                                                      

Anzahl Datagram-Bytes: 67                                                      

                                                                               

VRC-Status : 0000                                                               

Aussentemp.: 0110 (17.0°C)                                                     

Wassertemp.: 0399 (57.6°C)                                                     

Kesseltemp.: 03B2 (59.1°C)                                                      

Heiz-Kurve : 0322 (50.1°C)                                                     

Betriebsart: 0001 = Winterbetrieb                                              

                                                                               

 

 

 

 

--- 2009-06-15 23:46:19 --------------------------------------------------------

                                                                               

06  02  00  03  EE  98  84  00  02  20  06  02  00  03  F2  84                 

9A  00  00  00  00  03  1D  2E  17  00  0F  06  09  00  92                     

AA  00  C8  00  03  B6  00  03  9D  00  06                                     

0C  02  00  03  F1  00  A0  01  00  00  00  E3  83  00  1F                     

06  00  00  00  08  68  84  00  00  22                                         

Anzahl Datagram-Bytes: 67                                                      

                                                                               

VRC-Status : 0000 = Bereitschaft                                                

DCF-Status : 0003 = Signal gültig                                              

DCF77 Zeit : 2009-06-15 23:46:29                                               

Aussentemp.: 00C8 (12.5°C)                                                      

Wassertemp.: 03B6 (59.4°C)                                                     

Kesseltemp.: 039D (57.8°C)                                                     

Heiz-Kurve : 00A0 (10.0°C)                                                      

X-Parameter: 00E3 (10.0°C)                                                     

Betriebsart: 0000 = Sommerbetrieb                                              

                                                                                

                                                                               

--- 2009-06-15 23:46:30 --------------------------------------------------------

                                                                               

06  02  00  03  EE  98  84  00  02  20  06  02  00  03  F2  84                 

9A  00  00  00  00  03  28  2E  17  00  0F  06  09  00  92                     

AA  00  C8  00  03  B6  00  03  9D  00  FA                                     

0C  02  00  03  F1  00  A0  01  00  00  00  E3  83  00  1F                     

06  00  00  00  08  68  84  00  00  22                                         

Anzahl Datagram-Bytes: 67                                                      

                                                                                

VRC-Status : 0000 = Bereitschaft                                               

DCF-Status : 0003 = Signal gültig                                              

DCF77 Zeit : 2009-06-15 23:46:40                                                

Aussentemp.: 00C8 (12.5°C)                                                     

Wassertemp.: 03B6 (59.4°C)                                                     

Kesseltemp.: 039D (57.8°C)                                                      

Heiz-Kurve : 00A0 (10.0°C)                                                     

X-Parameter: 00E3 (10.0°C)                                                     

Betriebsart: 0000 = Sommerbetrieb                                               

                                                                               

                                                                               

--- 2009-06-15 23:46:41 --------------------------------------------------------



6.3.8.      VRC-Monitor Trace 2009-12-15

--- 2009-12-15 21:51:46 ---------------------------------------- VRC 9.12.13 ---

 

 

VRC-Konverter: Helpmenue

D - debug mode activation

d - debug mode deactivation

a - Aussentemperatur min/max

k - Kesseltemperatur min/max

w - Wassertemperatur min/max

b - Betriebsstunden

a - Aussentemperatur

 

--- 2009-12-15 21:51:49 ---------------------------------------- VRC 9.12.13 ---

--- 2009-12-15 21:53:12 ---------------------------------------- VRC 9.12.13 ---

 

 

EEPROM-0x1050: KesseltempMin: 69.2 [¦C]

EEPROM-0x1060: KesseltempMax: 81.9 [¦C]

--- 2009-12-15 21:53:13 ---------------------------------------- VRC 9.12.13 ---

 

EEPROM-0x1030: WassertempMin: 57.6 [¦C]

EEPROM-0x1040: WassertempMax: 57.6 [¦C]

--- 2009-12-15 21:53:15 ---------------------------------------- VRC 9.12.13 ---

 

EEPROM-0x1000: Betriebsstunden: 2335.4 [h]


--- 2009-12-15 21:53:19 ---------------------------------------- VRC 9.12.13 ---

 

06  02  00  03  EE  98  84  00  02  20  06  02  00  03  F2  84

9A  00  00  00  00  03  15  35  15  01  0F  0C  09  00  92

AA  FF  F2  00  03  99  00  04  48  00  8E

0C  02  00  03  F1  04  B8  00  01  00  00  F6  83  00  1F

06  00  00  00  08  68  84  00  01  23

Anzahl Datagram-Bytes: 67

 

VRC-Status : 0000 = Bereitschaft

Brenndauer : 0000 = Brenner aus

DCF-Status : 0003 = Signal gueltig

DCF77 Zeit : 2009-12-15 Di 21:53:21

Aussentep.: FFF2 (-0.9`C)

Wassertemp.: 0399 (57.6`C)

Kesseltemp.: 0448 (68.5`C)

Heiz-Kurve : 04B8 (75.5`C)

X-Parameter: 00F6

Betriebsart: 0001 = Winterbetrieb   
                                               

                                                                                

6.4.         Datenpräsentation auf Server

Die vom TC65 Terminal empfangenen und im TC65-Verzeichnis ‚Storage’  gespeicherten Rohdaten  werden in ein Javascript-Array Format umgeschrieben und an einen html-Server übertragen. Diese Javascript-Datei wird über eine html-include Funktion in das entprechende Javascript basierende html-Diagrammseite mit eingebunden.

 

Vorgesehene Diagramm-Darstellungen:

·         Heizöl-Verbrauch [l] über Zeit [a]

·         Betriebsparameter [°C] über Zeit [d]

 

Entwurfsbeispiele siehe Abbildungen  x und y

 

 

 

 

 

 

 

 

 

 

6.4.1.      Projectboard

Als preisgünstigen Einstieg wird das folgende Projectboard  für die Prototypen-Erstellung angeboten. Conrad-Artikelnummer: 197313 -xx (Preis 03/2009: 14,95€)

Als Vorbereitung für die Entwicklung des VRC-Konverters wurde das Projectboard um folgende Funktionen erweitert:

 

Der Schaltplan, sowie der Bestückungsplan des Kaufteils sind in den folgenden beiden Abbildungen dargestellt.

 

 

 

 

 

 

 

 

 

 

6.5.         Bootcable für VRC-Konverter

Der VRC-Konverter kann über die zweite RS-232 Schnittstelle mit neuer Software geladen werden. Damit dies auch von „entfernter“ Stelle (bis ca. 10m) mittels Laptop möglich ist wurde ein spezielles Bootcable entwickelt, dass direkt zwischen Verbindungskabel und Laptop zwischengeschaltet wird. Es besitzt in den Stecker integrierte Schalter zum Rücksetzen (Reset) und Booten (Boot) des C-Control Mega128 Bausteins.

 

Hinweis:

Auf eine erweiterte Bootlogik wie im Projectboard ersichtlich wurde aufgrund der leichten Integrierbarkeit in den SUB-D Stecker verzichtet. Zum Booten müssen daher die beiden Knöpfe derart gedrückt werden, dass das Bootsignal etwas länger ansteht als das Reset-Signal. Die Praxis hat gezeigt, dass dies ohne weiteres leicht zu bewerkstelligen ist.

 

6.5.1.      Stromlauf - Bootcable

 

6.5.2.      Bestückungsplan - Bootcable

 

 

Foto:

 

 

 

 

 


 

 

Logfile SerialSniffer V1.40

More information can be found at : http://www.flache.de/Download/Shareware

created : 01.03.2009 21:11:18 by Abt. S2S

Remember to use a non-proportional characterset to view correctly !

 

01.03.2009 21:11:25:432

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B6 00 05 12 00 EF 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B6 00 05 12 00 EF 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 03 B6 00 05 0F 00 4C 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 03 B6 00 05 0F 00 4C 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B6 00 05 0F 00 D5 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B6 00 05 0F 00 D5 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B6 00 05 0D 00 D1 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B0 00 05 0D 00 B1 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 03 5D 00 05 0D 00 66 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 01 00 05 0A 00 1B 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 02 DE 00 04 E8 00 3E 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 02 BD 00 04 7A 00 65 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 02 A4 00 04 1E 00 24 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 02 8D 00 03 E0 00 7F 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 02 7A 00 03 B9 00 A3 0C 02 00 03 F1 05 A0 00 01 01 00 4D 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 02 67 00 03 A2 00 5C 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 02 58 00 03 94 00 EB 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 02 4C 00 03 8B 00 53 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 02 3D 00 03 86 00 16 0C 02 00 03 F1 05 A0 00 01 01 00 4D 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 02 30 00 03 84 00 5B 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 02 22 00 03 82 00 F7 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 02 18 00 03 84 00 E9 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 02 0B 00 03 87 00 C6 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 02 02 00 03 8E 00 44 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 01 F7 00 03 97 00 58 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 67 00 02 1F 00 03 A2 00 D5 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 02 85 00 03 AD 00 23 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 02 D1 00 03 B9 00 36 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 05 00 03 C6 00 1D 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 2C 00 03 D2 00 97 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 48 00 03 E2 00 E1 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 5F 00 03 EF 00 92 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 6F 00 03 FC 00 9F 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 7F 00 04 0B 00 6D 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 8B 00 04 1A 00 88 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 92 00 04 2A 00 61 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 02 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 99 00 04 38 00 F5 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 A0 00 04 46 00 6D 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 A7 00 04 55 00 3B 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 A7 00 04 62 00 55 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 AE 00 04 6D 00 DB 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 AE 00 04 75 00 EB 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 AE 00 04 7E 00 FD 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 AE 00 04 82 00 1C 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B6 00 04 87 00 8F 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B6 00 04 89 00 93 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B6 00 04 8B 00 97 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B6 00 04 8B 00 97 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23

06 02 00 03 EE 98 84 00 02 20 06 02 00 03 F2 84 9A 00 04 00 00 00 00 00 00 00 00 00 00 00 92 AA 00 64 00 03 B6 00 04 8B 00 97 0C 02 00 03 F1 05 A0 00 01 00 00 4F 83 00 1F 06 00 00 00 08 68 84 00 01 23