Der Kontakt Bb6 Pin 34 und der Kontakt Bb6 Pin 33 soll mit Kontakt Ba6 Pin16 verbunden werden.
Bezüglich Signalfluss stellen Kontakt Bb6 Pin 34 und der Kontakt Bb6 Pin 33 einen Ausgang dar.
An dem Eingang Kontakt Ba6 Pin16 kann aber nur ein Drahtende und damit nur ein Ausgangspin angeschlossen werden. Außerdem wirken die beiden Ausgangskontakte von Bb6 zusammen mit dem Eingang von Ba6 Pin16 wir ein Oder. Deshalb muss dieses Oder zusätzlich simuliert werden.
Dafür wurde ein zusätzlicher Oder-Bauteiltyp, mit der Bezeichnung E_DOder, erstellt. Mit diesem E_DOder-Typ kann in der Bauteiliste ein DOder-Bauteil angelegt werden.
Beispiel der DOder-Anwendung:
Das DOder hat den Namen E_DOderA6 bekommen.
damit:
{E_Bb6,Ro34,E_DOderA6,1}, // Kontakt Bb6 Pin34 an Eingang DOder Pin1
{E_Bb6,Rs33,E_DOderA6,2}, // Kontakt Bb6 Pin33 an Eingang DOder Pin2
{E_DOderA6,0,E_Ba6,Rs16}, // Ausgang DOder Pin0 an Kontakt Ba6 Pin16
Anschlusspins des DOders:
Pin 0 = Oderausgang
Pin 1…5 = Odereingänge 1…5
Durch das Einfügen des DOders wird nur eine Drahtverbindung und damit nur eine Anweisung mehr benötigt.
Im Umgekehrten Fall, wenn der Signalfluss von einem Kontakt auf die Eingänge beider Kontakte aufgeteilt werden soll, wird kein DOder benötigt.
Bauteiltypen festlegen
Oben wurden die Namen der im Schaltschrank eingebauten Bauteile festgelegt. Nun muss noch zu jeden Bauteil der Bauteiltyp definiert werden. Für die Zuordnung gibt es eine Zuordnungsliste „BTTYPEINTRAGLISTE“. Hier wird zu jeden Bauteiltyp der Name des 1. und letzten Bauteils aus der Bauteilliste angegeben. Diese Zuordnung funktioniert nur so lange, wie die Bauteile in der Bauteilliste zum gleiche Bauteiltyp in einer Reihen stehen. Wenn das nicht durchgängig gegeben ist kann eine 2. und 3. Bauteiltyp-Zuordnung eingetragen werden. Unten ist ein Beispiel angegeben. Man kann am unteren Beispiel erkennen, dass im Allgemeinen mit nur sehr wenigen Einträgen auskommt.
// Bauteiltyp wird entsprechend dieser Liste in die Bauteilliste Eingetragen
//=======================================================
BTTYPEINTRAGLISTE BtTypEintragliste[BtTypEintraglisteMax] =
{
// Relais 6 Wechser
{E_RelL2W6,E_Rel6anf,E_RelW6end}, // bischer wurden nur Relais mit 6 Wechsler eingesetzt.
{E_SignalH,E_SigH,E_SigH}, // ein fiktives Bauteil welches Signal = High liefert
{E_SignalL,E_SigL,E_SigL}, // ein fiktives Bauteil welches Signal = Low liefert
// Draht-Oder-Verknüpfung
{E_DOder,E_DOderanf,E_DOderend}, // ein fiktives Bauteil für eine Oderverbindung
// Taktgeber
{E_StufenR40,E_Spiel,E_Spiel},// erzeugt 5*40mSek-Takte für ein Spiel
// Drehwähler
{E_DrehW_10,E_DdA,E_DdA}, // Drehwähler mit 10 Schaltschritte
usw bis………………………
{E_DrehW_21,E_WdA,E_WdA}, // Drehwähler mit 21 Schaltschritte
// Speicherrrelais
{E_RelL2W6,Ca01,Ca022+64}, // Speicherrelias
{E_RelL2W6,Cc01,Cc05+64}, // Relais des Adderessdecodierers
{E_DOder,DOderS1,DOderS22+64}, // erforderkiche Oderanweisungen
{BtTypEintraglisteEnde,0,0} // Ende der BtTypzuweisungsliste
};
Oben sind die Anweisungen aufgeführt, die zur Eintragung aller bisher verwendeten Bauteiltypen erforderlich sind.
Beispiel für die Eintragung der Relais mit 6 Wechsler: {E_RelL2W6,E_Rel6anf,E_RelW6end},
E_RelL2W6 gibt den einzutragenden Bauteityp an
E_Rel6anf gibt den Anfang des Eintrages in der Bauteilliste an
In der Bauteilliste wurde hierfür ein fiktives Bauteil für die Anfangskennung eingefügt
E_RelW6end gibt das Ende des Eintrages in der Bauteilliste an
In der Bauteilliste wurde hierfür ein fiktives Bauteil für die Endekennung eingefügt
Durch diese Anweisung in der Bauteilliste werden vom Simulationsprogram ca. 500 mal der Relaistyp „E_RelL2W6“ eingetragen.
// Liste der vorhandenen BauteilTypen. Nur parametrieren, wenn neuer BauteilTyp erstellt wurde !!
//=================================================================================
enum {
E_BauteilTypAnf, // Nr = 0 nicht verwenden
E_SignalL, E_SignalH, // liefert Signal = 0 bzw. Signal = 1
E_DOder, // Oder-Verbindung, wird als zusätzliches Bt benötigt
E_RelL1W6, // Relais mit 1 Rel.Spule und 6 Wechsler ( Anzahl parametrierbar)
E_RelL2W6 // Relais mit 2 Rel.Spulen und 6 Wechsler ( Anzahl parametrierbar)
E_RelL1S6 // Relais mit 1 Rel.Spule und 6 Schließer ( Anzahl parametrierbar)
E_RelL2S6 // Relais mit 2 Rel.Spulen und 6 Schließer ( Anzahl parametrierbar)
E_RelL1O6 // Relais mit 1 Rel.Spule und 6 Öffner ( Anzahl parametrierbar)
E_RelL2O6 // Relais mit 2 Rel.Spulen und 6 Öffner ( Anzahl parametrierbar)
E_DrehW_10, // DrehWähler mit 10 Schritte
E_DrehW_14, // DrehWähler mit 14 Schritte
E_DrehW_17, // DrehWähler mit 17 Schritte
E_DrehW_21, // DrehWähler mit 21 Schritte ( bis 29 Schritte parametrierbar)
E_StufenR40, // erzeugt 5*40mSek-Takte für ein Spiel
E_TaktR40, // erzeugt einen 40mSek-Takt ( Takt paramertierbar)
E_BauteilTypEnde // Kennung Listenende
};
// Kontakt-Nummerierung der verwendeten Bauteile entsprechend den Zuse-Schaltplänen
//*****************************************************************************************************
// Relais mit 6 Wechsler
//-------------------------
#define Rl1 0 // Relaisspule 1
#define Rl2 1 // Relaisspule 2
#define Ro11 4 // Öffner
#define Rk12 2 // Mitte W1
#define Rs13 3 // Schließer
#define Ro14 7 // Öffner
#define Rk15 5 // Mitte W2
#define Rs16 6 // Schließer
#define Ro21 10 // Öffner
#define Rk22 8 // Mitte W3
#define Rs23 9 // Schließer
#define Ro24 13 // Öffner
#define Rk25 11 // Mitte W4
#define Rs26 12 // Schließer
#define Ro31 16 // Öffner
#define Rk32 14 // Mitte W5
#define Rs33 15 // Schließer
#define Ro34 19 // Öffner
#define Rk35 17 // Mitte W6
#define Rs36 18 // Schließer
// Drehwähler
//-----------------
// Für die Schaltstufen des Drehwählers werden wie im Schaltplan nur die Stufen-Nr. angegeben.
// weiterhin gibt es die Kontakte für:
#define DWl1 31 // Erregerspule, nur bei Schalterebene A wirksam
#define DWk1 30 // Verteilerkontakt (Eingang), für alle Schalterebenen A...F
// DrahtOder
//-----------------
// Anschlusspins des DOders:
// 0 = Oderausgang
// 1…5 = Odereingänge 1…5
// Stützpunkte für Taktkombinationen innerhalb eines Spiels
//---------------------------------------------------------
#define SP_I E_Spiel,1
#define SP_II E_Spiel,2
#define SP_III E_Spiel,3
#define SP_IV E_Spiel,4
#define SP_V E_Spiel,5
#define SP_I_II E_DOder_I_II,0
#define SP_I_II_III E_DOder_I_II_III,0
#define SP_II_III E_DOder_II_III,0
#define SP_IV_V E_DOder_IV_V,0
#define SP_III_IV_V E_DOder_III_IV_V,0
#define SP_V_I_II E_DOder_V_I_II,0
Im Schaltplan wird dabei für SP_I_II_III nur I_II_II angegeben.
// Stützpunkte mit Pegel = 1
//-----------------------------
#define SP_G E_SigH,0 //
#define SP_G1 E_SigH,0
#define SP_G2 E_SigH,0
#define SP_G3 E_SigH,0
#define SP_G4 E_SigH,0
#define SP_G5 E_SigH,0
#define SP_G6 E_SigH,0
#define SP_G7 E_SigH,0
#define SP_G8 E_SigH,0
#define SP_G9 E_SigH,0
Im Schaltplan wird dabei für SP_G1 nur G1 angegeben.
SimulationsProgramm
Wird in Teil 2 fortgeführt.
Das Simulationsprogramm hat folgende Aufgaben:
- Die oben beschriebene Parametrierung wird optimiert für die Anwendung der Simulation aufbereitet.
- Die zu Bauteile werden zyklisch im 0.2mSek-Takt entsprechend einer Abarbeitungsliste, den Bauteiltaten, der Bauteilverdrahtung und den jeweils aktuellen Bauteilstatus simuliert.
- Für die Testphase gibt es eine Ein-, Ausgabe-Konsole.
- Protokolldaten werden in eine Datei abgespeichert oder in einem Protokollfenster angezeigt.
- Das Einlesen des Rechenprogramms wird nicht wie beim Original nicht vom Lochstreifen sondern aus einer Textdatei eingelesen.
- Die endgültige Ein-, Ausgabe-Oberfläche wird weitgehend gleich der Bedienoberfläche des Originals sein.
Bedienoberfläche
Wird in Teil 2 fortgeführt.
Projektfortschritt
26. 4.2015 Konzepterstellung
1. 4.2015 Beginn der Z3-Simulations-Programms
15. 4.2015 Beginn der Mantissen-Addition
20. 4.2015 Umstellung auf vereinfachte Parametereingabe
24. 4.2015 Exponenten-Addition fertig
8. 5.2015 Große Wechselstraße fertig
14. 5.2015 einfache Konsolenbedienung fertig
24. 5.2015 Bauteil-Kontaktnummernbezeichnung entsprechen Zuse Schaltplänen umgestellt
27. 5.2015 Implementierung des Speicherwerks einschließlich der Adressdekodierung (nicht getestet)
Resümee
- Mit dem oben beschriebenen Verfahren ist man in der Lage die von Konrad Zuse bereitgestellten Schaltbilder der Zuse Z3 für die Simulation, durch Erstellung von Listen, aufzubereiten.
- Das Simulationsprogramm wandelt die oben erstellten Listen in eine für die Simulation geeignete Form um.
- Bisher wurden alle Relais parametriert und die Verdrahtung für die
o Mantissen-Addition, Exponenten-Addition entsprechen Schaltbild 3/004 teilweise 3/002 und 3005
o Große Weichenstraße entsprechend Schaltbild 3/003, sowie für den
o Datenspeicher mit Adressdecodierer entsprechend Schaltbild 3/010, 3/011 und 3/013
realisiert.
- Alle Funktionen bis auf den Speicher sind getestet.
- Im Simulationspragramm sind bereits alle Simulationsroutinen realisiert die für das Rechenwerk und den Speicher erforderlich sind, zB. auch der Drehwähler .
- Für den Test wurde eine Eingabefunktion in C sowie eine ausführliche Testprotokollierung erstellt.
- Die Realisierung der Binär/Dezimal-Kodierung zur Eingabe und Anzeige werden erst realisiert, wenn alle anderen Funktionen getestet sind.
- Mit diesem Simulationskonzept kann das Schalten (Knacken) aller Relais mittels Analog- oder Digitalausgabe am Lautsprecher hörbar gemacht werden.
Ich würde mich sehr freuen, wenn sich jemand bei der Fertigstellung der Verdrahtung oder an der Erstellung einer „originalen“ Z3-Ein-/ Ausgabe-Konsole beteiligen würde.