Externer Schalter soll zählen
- Ironsmurf
- Beiträge: 111
- Registriert: 04.01.2006 12:57
- Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86) - Wohnort: Deutschland
Externer Schalter soll zählen
Hallo zusammen
Ich habe mir ein elektrisches CD-Regal gekauft, das über eine Relais-Karte angesteuert wird, das funktioniert auch tadellos, nun möchte ich aber die Position jeder einzelnen CD ermitteln.
Folgende Gedanken habe ich mir bis jetzt gemacht.
Ein angebrachter Schalter löst einen Kontakt aus wenn die CD vorbei fährt,
Die Variable Rack01 zählt 1 + 1 = 2 / usw.
wenn jetzt die CD YXZ Nr 99 gesucht wird, muss das CD-Regal nur solange weiterfahren bis der Zähler auf 99 steht und die Relais-Karte schaltet das Rack wieder aus. Position erreicht CD kann entnommen werden.
In der Theorie ganz OK, aber wie kann ich günstig externe Schalter abfragen ohne gleich ein Interface kaufen zu müssen, der Gedanke einen Joystick abzufragen lag nach lesen des Forums auf der Hand, meine Soundkarte hat auch noch solch einen Anschluß. Die Frage wieviele Schalter lassen sich auf diese Weise abfragen, ich benötige ca 20 solcher Abfragen, allerdings brauche ich nur die Werte Null oder Eins.
Vielen Dank im voraus für eure Mühle
Ich habe mir ein elektrisches CD-Regal gekauft, das über eine Relais-Karte angesteuert wird, das funktioniert auch tadellos, nun möchte ich aber die Position jeder einzelnen CD ermitteln.
Folgende Gedanken habe ich mir bis jetzt gemacht.
Ein angebrachter Schalter löst einen Kontakt aus wenn die CD vorbei fährt,
Die Variable Rack01 zählt 1 + 1 = 2 / usw.
wenn jetzt die CD YXZ Nr 99 gesucht wird, muss das CD-Regal nur solange weiterfahren bis der Zähler auf 99 steht und die Relais-Karte schaltet das Rack wieder aus. Position erreicht CD kann entnommen werden.
In der Theorie ganz OK, aber wie kann ich günstig externe Schalter abfragen ohne gleich ein Interface kaufen zu müssen, der Gedanke einen Joystick abzufragen lag nach lesen des Forums auf der Hand, meine Soundkarte hat auch noch solch einen Anschluß. Die Frage wieviele Schalter lassen sich auf diese Weise abfragen, ich benötige ca 20 solcher Abfragen, allerdings brauche ich nur die Werte Null oder Eins.
Vielen Dank im voraus für eure Mühle
Es kommt immer auf die Sichtweise des Betrachters an.
-
Kekskiller
- Beiträge: 752
- Registriert: 14.09.2004 21:39
- Kontaktdaten:
Also ich als Elektronik-Anti-Experte würde sagen, dass du doch eigentlich nur jede Leitung des Schalters zu einer Bitreihe zusammenfassen brauchst. Jeder Schalter hat dann ein Bit, also kannst du dann z.b. über nen Parallelen Port das ganze als Bit-Reihe einlesen. Nur hab ich grad irgendwie nicht wirklich im Kopf, ob da 20 Bits auf den Port passen.
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Theoretisch könntest du 7 Minikontaktschalter unterbringen, die dann über der jeweiligen Bitstellung über Schaltnocken an den einzelnen CD-Fächern geschaltet werden. Damit kanns du max. 127 Fächer festlegen.
Das achte Bit müsstest du für die Relaisekarte haben um dann mittels Optokopplers parallel zum Handtaster den Antrieb im CD-Regal anzusteuern.
Somit könnte man ohne logische Schaltung direkt an LPT dieses erledigen.
Für die Schalterspannungen der 7 Schalter könntest du z.B. die 5V Steuerspannung aus den USB, aber auch direkt aus der LPT entnehmen.
Damit meine ich, 8 Datenleitungen für die 7 Schalter und einen für die Motoransteuerung und ein Signal für die Stromversorgung, z.B. aus dem
Controllregister.
Man könnte aber auf der Antriebswelle z.b. einen Nocken befestigen, und dort in der Nähe 2 Schalter anbringen. Der PC könnte dann die jeweiligen Impulse der Schalter zählen lassen, wenn sich jeweils ein Fach in der betreffenden Postion befindet. Damit das ganze nicht relativ irgendwo ausgewertet wird, müsste man noch einen 3. Schalter anbringen und am 1. Fach den passenden Schaltnocken anbringen. Somit lässt sich das CD-Fach auf das erste Fach fahren und gleichzeitig nullen, wenn dieser Schalter abgefragt wird. Übrigens die zwei Schalter für die Motorwelle aus dem Grund, damit man in beiden Richtungen verfahren und dieses vom PC ermitteln kann.
Bleibt dann nur noch die Ansteuerung deiner Relaiskarte übrig, was
soweit ich weis, mit dem Joystickport nicht möglich ist. Denn dieser ist nur für das Empfangen für digitale als auch analoge Signale zuständig.
Also wenn man das Steuern will sollte man schon auf LPT gehen oder aber
mittels Schieberegister RS232 nutzen.
Natürlich geht das auch mit zusätzlichen Logikbausteinen
.
MfG Falko
Das achte Bit müsstest du für die Relaisekarte haben um dann mittels Optokopplers parallel zum Handtaster den Antrieb im CD-Regal anzusteuern.
Somit könnte man ohne logische Schaltung direkt an LPT dieses erledigen.
Für die Schalterspannungen der 7 Schalter könntest du z.B. die 5V Steuerspannung aus den USB, aber auch direkt aus der LPT entnehmen.
Damit meine ich, 8 Datenleitungen für die 7 Schalter und einen für die Motoransteuerung und ein Signal für die Stromversorgung, z.B. aus dem
Controllregister.
Man könnte aber auf der Antriebswelle z.b. einen Nocken befestigen, und dort in der Nähe 2 Schalter anbringen. Der PC könnte dann die jeweiligen Impulse der Schalter zählen lassen, wenn sich jeweils ein Fach in der betreffenden Postion befindet. Damit das ganze nicht relativ irgendwo ausgewertet wird, müsste man noch einen 3. Schalter anbringen und am 1. Fach den passenden Schaltnocken anbringen. Somit lässt sich das CD-Fach auf das erste Fach fahren und gleichzeitig nullen, wenn dieser Schalter abgefragt wird. Übrigens die zwei Schalter für die Motorwelle aus dem Grund, damit man in beiden Richtungen verfahren und dieses vom PC ermitteln kann.
Bleibt dann nur noch die Ansteuerung deiner Relaiskarte übrig, was
soweit ich weis, mit dem Joystickport nicht möglich ist. Denn dieser ist nur für das Empfangen für digitale als auch analoge Signale zuständig.
Also wenn man das Steuern will sollte man schon auf LPT gehen oder aber
mittels Schieberegister RS232 nutzen.
Natürlich geht das auch mit zusätzlichen Logikbausteinen
MfG Falko
- Ironsmurf
- Beiträge: 111
- Registriert: 04.01.2006 12:57
- Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86) - Wohnort: Deutschland
Die Relaiskarte ist schon da und ich brauche wirklich nur die Abfrage eines Tasters, da ich nicht so technisch begabt bin, wollte ich es mir einfach machen, der Taster löst den Impuls aus, den wiederum das Programm in einer Variablen mitzählt, wenn die Variable den Wert 99 hat, wird sie auf null zurück gesetzt, auch soll der Ständer nur in einer richtung fahren können und vor bendigung des Programmes eine Null Stellung ein nehmen, eben Position Null
Es kommt immer auf die Sichtweise des Betrachters an.
- sharkpeter
- Beiträge: 474
- Registriert: 29.08.2004 16:18
- Wohnort: Dresden
- Kontaktdaten:
Ähm, Kopfkratz.
Ich nehme meine CD noch mit der Hand aus dem Rack.
Bin ich schon alt?
Aber im Ernst:
Stell doch mal ein Foto ein, damit man sich das vorstellen kann.
Ansonsten hat Falko ja schon jede Menge geschrieben. Ich würde es auch so
machen, das ich die Fächer codieren und das dann entsprechend weiterleiten
würde.
Gruß Jens
Ich nehme meine CD noch mit der Hand aus dem Rack.
Aber im Ernst:
Stell doch mal ein Foto ein, damit man sich das vorstellen kann.
Ansonsten hat Falko ja schon jede Menge geschrieben. Ich würde es auch so
machen, das ich die Fächer codieren und das dann entsprechend weiterleiten
würde.
Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64
Nichts wissen macht nichts, sich dumm stellen aber schon.
Nichts wissen macht nichts, sich dumm stellen aber schon.
-
Kekskiller
- Beiträge: 752
- Registriert: 14.09.2004 21:39
- Kontaktdaten:
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Wieso am Thema vorbei?
Man kann doch die DATENLEITUNGEN prüfen ob sie gesetzt oder nicht gesetzt sind, welches die 7 Schalter entweder auf An bzw. Aus schalten.
Ob Binär oder Dezimal abgefragt wird, ist egal. Der PC versteht intern sowieso nur Binärcodes.
Aussehen täten diese 7 Schalterstellungen wie folgt.
Eigendlich sehr simpel.
Und mit der IO32.DLL lässt sich das 8Bit des Datenregisters direkt setzen bzw. löschen, das dann den Motor über die Relaiskarte schalten soll. Die anderen Datenbits vom Datenregisters werden währenddessen nur abgefragt, welchen Zustand sie haben. Das kann man mittels Bin oder aber auch direkt dezimal machen.
Aber wie Jens schon sagte, wie sieht sowas aus und wie wird die Relaise-Karte gesteuert? Damit meine ich, ob ein Auf/Ab-Schalter manuell den Antrieb steuert, bis man das entsprechende Fach anhält, oder man nur kurz wie ein Taster tippt so das Fach automatsich in die nächste Position fährt. Eine Beschreibung von dem elektronischen CD-Rack wäre interessant zu sehen, wie er im Handbetrieb läuft
MfG Falko
Man kann doch die DATENLEITUNGEN prüfen ob sie gesetzt oder nicht gesetzt sind, welches die 7 Schalter entweder auf An bzw. Aus schalten.
Ob Binär oder Dezimal abgefragt wird, ist egal. Der PC versteht intern sowieso nur Binärcodes.
Aussehen täten diese 7 Schalterstellungen wie folgt.
Code: Alles auswählen
For i=1 To 99
Debug Str(i)+" : " + RSet(Bin(i),7,"0")
Next iUnd mit der IO32.DLL lässt sich das 8Bit des Datenregisters direkt setzen bzw. löschen, das dann den Motor über die Relaiskarte schalten soll. Die anderen Datenbits vom Datenregisters werden währenddessen nur abgefragt, welchen Zustand sie haben. Das kann man mittels Bin oder aber auch direkt dezimal machen.
Aber wie Jens schon sagte, wie sieht sowas aus und wie wird die Relaise-Karte gesteuert? Damit meine ich, ob ein Auf/Ab-Schalter manuell den Antrieb steuert, bis man das entsprechende Fach anhält, oder man nur kurz wie ein Taster tippt so das Fach automatsich in die nächste Position fährt. Eine Beschreibung von dem elektronischen CD-Rack wäre interessant zu sehen, wie er im Handbetrieb läuft
MfG Falko
- Ironsmurf
- Beiträge: 111
- Registriert: 04.01.2006 12:57
- Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86) - Wohnort: Deutschland
Ich versuche es noch neu zu formulieren, also ich habe eine externe Relaiskarte von AK-Modul Bus Computer Gmbh, die Serial gesteuert wird.
Die Karte ist fertig aufgebaut und sofort einsatzbereit. Die Software wird über eine Batch automatisch geladen und bleibt im Hintergrund stehen.
Dank Kiffi habe ich einen Einzeiler in mein Programm integrieren können, so das sie direkt über PureBasic gesteuert werden kann.
;PLAY / XYZ Film
If String ("00000") And RE6 = 1 : RunProgram ("T:\XYZ Film.avi") : EndIf
If String ("00000") And RE6 = 0 : RunProgram ("SETRelay", "/device:InterfaceA /on:6", "", 2)
Gosub startmovie : RunProgram ("T:\XYZ Film.avi") : RE6 = 1 : EndIf
startmovie:
PrintN ("")
ConsoleColor (15,0)
Print_s("Festplatte wird gestartet - Dies wird einige Sekunden dauern")
Delay (5000)
PrintN("")
Print_s ("Der Film wird nun gestartet - Viel Vergnügen ! ! !")
Delay (5000)
Return
Ist RE6 = 0 dann Relais startet Stromversorgung, Platte initialisiert sich, dauert max. 10 Sekunden bei 300 GB und Filmdatei startet Player dazu.
Ist RE6 = 1 dann starte Film gleich, weil die Platte bereits an ist.
Die Platte ist sortenrein heißt ( nur Filme drauf ) so erscheinen keine weiternen Menüs von Windows.
Alle Filme habe ich in CD-Hüllen archiviert und mir diesen Ständer bei PEARL gekauft Artikel Nr. PE3060
Er wird über ein Netzteil mit Strom versorgt und hat einen Drehschalter für beide Laufrichtungen.
Der Gedanke ist nun anahnd eines Zahlencodes den Film nicht nur auf dem
Rechner zu starten, sondern auch gleich passend dazu die richtige DVD zu bekommen, sprich das Regal wird über Relais eingeschaltet und fährt in die richtige Postion und AHA die DVD steht oben und kann entnommen werden
PS: Warum alles mit Relaiskarte, damit alle Verbraucher vom Netz genommen werden kommen, somit auch keine Stand-By Verbraucher mehr. Der CLOSE Befehl in meinem Programm nimmt alle Verbraucher direkt vom Netz ( alle Moni´s, alle USB-Platten usw. ), im Moment leider nur 8, aber die Karte ist Kaskadierungsfähig, so das einem weiternen Ausbau nichts im Wege steht.
Ich habe die Karte in einer Kiste eingebaut, diese ist mit 10 Steckdosen bestückt, 8 für die Relais, 1 für die Stromversorgung der Relaiskarte und 1 als Reserve, wenn mal eine zusätzliche Steckdose gebraucht wird, hat sich auch schon als nützlich erwiesen.
Danke für Zeit
Die Karte ist fertig aufgebaut und sofort einsatzbereit. Die Software wird über eine Batch automatisch geladen und bleibt im Hintergrund stehen.
Dank Kiffi habe ich einen Einzeiler in mein Programm integrieren können, so das sie direkt über PureBasic gesteuert werden kann.
Code: Alles auswählen
RunProgram ("SETRelay", "/device:InterfaceA /off:1", "", 2) : Delay (500)
RunProgram ("SETRelay", "/device:InterfaceA /off:2", "", 2) : Delay (500)
RunProgram ("SETRelay", "/device:InterfaceA /off:3", "", 2) : Delay (500)
RunProgram ("SETRelay", "/device:InterfaceA /off:4", "", 2) : Delay (500)
RunProgram ("SETRelay", "/device:InterfaceA /off:5", "", 2) : Delay (500)
RunProgram ("SETRelay", "/device:InterfaceA /off:6", "", 2) : Delay (500)
RunProgram ("SETRelay", "/device:InterfaceA /off:7", "", 2) : Delay (500)
RunProgram ("SETRelay", "/device:InterfaceA /off:8", "", 2) : Delay (500)
Gebe ich also in mein Konsolen Programm ein
"Lampe1" geht meine Schreibtischlampe an.
Suche ich einen Film gebe ich den Suchbegriff ein - Ergebnis ist
"00000 * XYZ Film"
wird geprüft ob die USB Festplatte an ist oder nicht.
If String ("00000") And RE6 = 1 : RunProgram ("T:\XYZ Film.avi") : EndIf
If String ("00000") And RE6 = 0 : RunProgram ("SETRelay", "/device:InterfaceA /on:6", "", 2)
Gosub startmovie : RunProgram ("T:\XYZ Film.avi") : RE6 = 1 : EndIf
startmovie:
PrintN ("")
ConsoleColor (15,0)
Print_s("Festplatte wird gestartet - Dies wird einige Sekunden dauern")
Delay (5000)
PrintN("")
Print_s ("Der Film wird nun gestartet - Viel Vergnügen ! ! !")
Delay (5000)
Return
Ist RE6 = 0 dann Relais startet Stromversorgung, Platte initialisiert sich, dauert max. 10 Sekunden bei 300 GB und Filmdatei startet Player dazu.
Ist RE6 = 1 dann starte Film gleich, weil die Platte bereits an ist.
Die Platte ist sortenrein heißt ( nur Filme drauf ) so erscheinen keine weiternen Menüs von Windows.
Alle Filme habe ich in CD-Hüllen archiviert und mir diesen Ständer bei PEARL gekauft Artikel Nr. PE3060
Er wird über ein Netzteil mit Strom versorgt und hat einen Drehschalter für beide Laufrichtungen.
Der Gedanke ist nun anahnd eines Zahlencodes den Film nicht nur auf dem
Rechner zu starten, sondern auch gleich passend dazu die richtige DVD zu bekommen, sprich das Regal wird über Relais eingeschaltet und fährt in die richtige Postion und AHA die DVD steht oben und kann entnommen werden
PS: Warum alles mit Relaiskarte, damit alle Verbraucher vom Netz genommen werden kommen, somit auch keine Stand-By Verbraucher mehr. Der CLOSE Befehl in meinem Programm nimmt alle Verbraucher direkt vom Netz ( alle Moni´s, alle USB-Platten usw. ), im Moment leider nur 8, aber die Karte ist Kaskadierungsfähig, so das einem weiternen Ausbau nichts im Wege steht.
Ich habe die Karte in einer Kiste eingebaut, diese ist mit 10 Steckdosen bestückt, 8 für die Relais, 1 für die Stromversorgung der Relaiskarte und 1 als Reserve, wenn mal eine zusätzliche Steckdose gebraucht wird, hat sich auch schon als nützlich erwiesen.
Danke für Zeit
Es kommt immer auf die Sichtweise des Betrachters an.
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Eine Frage habe ich noch dazu. Zeigen Blinken die LED's so wie die DVD's
z.B. oben an einer bestimmten Stellung vorbei sausen?
Wenn ja, hast du quasi schon einen Geber für den Joystick, wobei man
dort ein kleines Relais benutzen kann, welches den Kontakt für den
Joystick abgibt.
Mit zwei Relaise, könntest du dann die Drehrichtung bestimmen und anhand der LEDs (Wenn eine DVD vorbeirauscht) die Position per PC hoch
oder runterzählen.
Eine weitere Frage habe ich noch zu deinem Runprogramm in PB. Ist bei
dem Programm zu deiner Relaiskarte keine DLL dabei? Dann könnte man
das evt. direkt ohne Umwege über PB steuern, ohne ein zweites
Programm starten und diesem Parameter übergen zu müssen.
Gruß Falko
z.B. oben an einer bestimmten Stellung vorbei sausen?
Wenn ja, hast du quasi schon einen Geber für den Joystick, wobei man
dort ein kleines Relais benutzen kann, welches den Kontakt für den
Joystick abgibt.
Mit zwei Relaise, könntest du dann die Drehrichtung bestimmen und anhand der LEDs (Wenn eine DVD vorbeirauscht) die Position per PC hoch
oder runterzählen.
Eine weitere Frage habe ich noch zu deinem Runprogramm in PB. Ist bei
dem Programm zu deiner Relaiskarte keine DLL dabei? Dann könnte man
das evt. direkt ohne Umwege über PB steuern, ohne ein zweites
Programm starten und diesem Parameter übergen zu müssen.
Gruß Falko
- Ironsmurf
- Beiträge: 111
- Registriert: 04.01.2006 12:57
- Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86) - Wohnort: Deutschland
Die Zeile mit RunProgram schaltet das Relais über eine Batch, so war es gedacht, die reichliche software der Relaiskarte hat verschiedene Möglichkeiten, auch für Programmiersprachen, die genialste davon ist eben eine Batch zu scheiben, somit kann man die Karte von jeder Programmiersprache aus anstreuern.
Durch einen Zufall habe ich entdeckt, das die Batch garnicht gebraucht wird, das heißt der Treiber der Karte schaltet dank des Einzeilers von Kiffi die Relais auch ohne Batch.
Durch einen Zufall habe ich entdeckt, das die Batch garnicht gebraucht wird, das heißt der Treiber der Karte schaltet dank des Einzeilers von Kiffi die Relais auch ohne Batch.
Es kommt immer auf die Sichtweise des Betrachters an.
