Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Martin K Gast
|
Verfasst am: 01.11.2004, 19:52 Titel: LPT Relaiskarte schaltet gelegentlich unkontrolliert unter Q |
|
|
Ich habe ein etwas vertracktes Problem mit einer Parallelportrelaiskarte, die wie weitere Karten mit einem Quickbasic Programm angesteuert wird. Völlige Standardkarte mit 8 Relais: Wird einfach durch das Senden eines Byte geschaltet und funktioniert auch im Dauereinsatz seit Jahren. Die Ausgabesequenz:
OPEN "lpt1:" FOR OUTPUT AS #3
PRINT #3, CHR$(outbyte(3));
CLOSE #3
Ich schicke jede Sekunde das Byte auf die Karte, unabhängig davon, ob eine Änderung das Schaltzustands erfolgen soll oder nicht.
Nun kommt es gelegentlich vor, daß die Karte für genau 1 Sekunde unkontrolliert die Ausgänge umschaltet. Also müsste ja irgendetwas in meinem Programm outbyte(3) verändern. Ich bekomme das aber nicht zu Gesicht. Selbst wenn ich mir direkt unter die PRINT-Zeile eine weitere Zeile einfüge, um mir das Byte zusätzlich auf den Bildschirm zu schreiben, passiert da nichts unkontrolliertes: Die Ausgabe auf den Schirm bleibt sauber - genau das Byte, das sein soll. Nachdem ich dann dem Parallelport misstraute, habe ich gestern die Karte auf einen anderen LPT-Port geklemmt - das Problem wanderte analog auch auf diesen Port. So langsam zweifel ich, wo ich noch suchen soll. Ich habe mir auch die Ausgabebytes in eine Datei protokollieren lassen - das unkontrollierte Umschalten taucht dort nicht auf, obwohl die Karte während der protokollierten Zeit wieder für 1 Sekunde schwachsinnige schaltete. Hat irgendjemand einen Tipp, in welche Richtung ich suchen soll??? |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 01.11.2004, 20:09 Titel: |
|
|
Hallo
Unter was für einem Betriebssystem passiert das denn und wechseln bei den Störungen alle 8 Bit ? |
|
Nach oben |
|
 |
Kai Bareis

Anmeldungsdatum: 10.09.2004 Beiträge: 545 Wohnort: Baden Würtemberg
|
Verfasst am: 01.11.2004, 20:34 Titel: |
|
|
Wen du Windows neben her laufen hast kann das schon sein.
Versuche doch auch mal deine Ansteuerung durch
OUT 888, x
(für x 0 bis 255 einsetzen ist eigentlich mit deiner PRINT routine kompatiebel) _________________ MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht! |
|
Nach oben |
|
 |
Martin K Gast
|
Verfasst am: 01.11.2004, 20:49 Titel: Kein Windows - Betriebssystem ist MS-DOS 5 |
|
|
Der LPT1: Port ist auf &H3BC - ich habs gestern auch mal über
OUT &H3BC, outbyte(3)
probiert, aber darauf reagiert die Karte nicht. Dezimal wäre &H3BC die Zahl 956 - wieso 888?
Zur Frage nach dem Schalten der 8 Bit: Nein, es kein simples Bitwackeln.
Wie schauts denn über DOS aus, gibt es einen DOS-Befehl, der mit LPT-Anweisungen in eine Datei umleitet? Wenn ich das Problembyte von meinem Programm nicht angezeigt bekomme, müsste ich es doch wenigstens über die DOS-Ebene mitbekommen. Gibts da einen Befehl zur Umleitung? |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 01.11.2004, 20:57 Titel: Re: Kein Windows - Betriebssystem ist MS-DOS 5 |
|
|
Martin K hat Folgendes geschrieben: | Der LPT1: Port ist auf &H3BC - ich habs gestern auch mal über
OUT &H3BC, outbyte(3)
probiert, aber darauf reagiert die Karte nicht. Dezimal wäre &H3BC die Zahl 956 - wieso 888? |
In einem Buch habe ich gefunden, dass bei Herculeskarten der LPT1 956, aber sonst die 888 als Standardadresse hat. |
|
Nach oben |
|
 |
Martin K Gast
|
Verfasst am: 01.11.2004, 22:04 Titel: 888 ists nicht |
|
|
habs eben getestet, auf der Adresse 888 (&H378) passiert garnix. Die Adressen müssten übrigens schon stimmen, in dem Rechner sind 3 Parallelports, die per Jumper feste Adressen zugewiesen bekommen haben.
Auf LPT1: mit &H3BC hängt seit gestern die Relaiskarte, war vorher frei.
Auf LPT2: mit &H378 lief bis gestern die Relaiskarte
Auf LPT3: mit &H278 hängt die CSI7001 Schnittstellenkarte von ELV (8 Relais, 8 Optokoppler)
Dann sind weitere Adressen belegt:
Auf der &H300: hängt die alte CSI7000 von ELV mit ner eigenen Schnittstellenkarte (nochmal 8 Relais, 8 Optokoppler)
Auf der &H210 und &H214 wursteln 2 Optokopplerkarten von bmc mit ner eigenen Schnittstelle.
Wie gesagt, es läuft alles tadellos im Dauerbetrieb, nur bei zwei ganz bestimmten Schaltzuständen der Relaiskarte auf LPT1: gibt es reproduzierbar zwischendurch eben diese Einsekündigen Sinnlosschaltungen nur auf dieser Karte. Und ich krieg den Fehler momentan noch nicht mal ein einer Protokolldatei zu fassen. |
|
Nach oben |
|
 |
Martin K Gast
|
Verfasst am: 06.11.2004, 19:58 Titel: Also es ist wohl ein Hardwareproblem |
|
|
nachdem ich in meinem Programm keinen Fehler gefunden habe, hab ich ein Miniprogramm geschrieben, was nichts anderes macht als einmal pro Sekunde immer das selbe Byte auf den LPT-Port zu schreiben, und hier passiert es genauso, daß diese Fehlschaltungen vorkommen. Ich habe jetzt mein Steuerprogramm so modifiziert, daß nur noch dann eine LPT-Ausgabe erfolgt, wenn die Relais im Schaltzustand verändert werden sollen. Damit habe ich jetzt die Wahrscheinlichkeit der Fehlschaltung auf ein Bruchteil reduziert, aber eine echte Lösung ist das nicht.
Hat irgendjemand einen blassen Dunst, warum die LPT-Schnittstelle solche Geschichten macht? |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 06.11.2004, 21:04 Titel: |
|
|
Kann es sein, dass deine Stromversorgung beim Anschluss der dritten Platine Schlappmacht und die Relais nicht mehr halten kann ? Hast du mal über kreuz getestet wenn das möglich ist ? Also die Platine gegen eine an einer anderen Schnittstelle getauscht ? Für mich hört sich das sehr nach einem Hardwareproblem an. Wenn sich im Ausgabeprotokoll das du dir für den Port erstellt hast nichts aufgezeichnet wird, dann hat die Schaltung ne Macke oder es liegt wirklich an der Stromversorgung. |
|
Nach oben |
|
 |
Bernini

Anmeldungsdatum: 13.11.2004 Beiträge: 14
|
Verfasst am: 13.07.2005, 13:00 Titel: |
|
|
Hallo.
gibts irgendwo ein demoprogramm für eine Relaiskartenansteuerung?
danke
bernini |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 13.07.2005, 14:23 Titel: |
|
|
Ich denke, da brauchst du kein großes Programm für, sende einfach 2 ^ die Nummer des zu schaltenden Relais an den Parallelport.
Nur die Adresse musst du dann noch rausfinden. Probier's mal mit 888.
Wenn's nicht klappen sollte (und du WinXP hast), benutze die Forensuche, das Thema wurde schon einige
Male behandelt.
jb |
|
Nach oben |
|
 |
Bernini

Anmeldungsdatum: 13.11.2004 Beiträge: 14
|
Verfasst am: 13.07.2005, 17:23 Titel: |
|
|
hallo.
erstmals danke.
noch ne frage:
kann ich die datei dann auch so ansteuern: relais.exe /1on /2off /7on ?
fg bernini |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 13.07.2005, 17:44 Titel: |
|
|
Dann müsstest du die Kommandozeile mit Hilfe von COMMAND$ auslesen.
Also ungefähr so:
Code: |
c$ = COMMAND$ ' Kommandozeile auslesen
FOR i = 0 TO 7 STEP 1
IF INSTR(c$, RTRIM$(LTRIM$(STR$(i))) + "on") THEN Status = Status AND 2 ^ i
IF INSTR(c$, RTRIM$(LTRIM$(STR$(i))) + "off") THEN Status = Status XOR 2 ^ i
NEXT i
OUT Adresse, Status
|
Adresse ist, wie ich schon sagte, üblicherweise 888, wenn's aber nicht klappt, siehe oben.
jb |
|
Nach oben |
|
 |
Bernini

Anmeldungsdatum: 13.11.2004 Beiträge: 14
|
Verfasst am: 13.07.2005, 20:27 Titel: |
|
|
hallo.
ich habe schon lange nicht mehr "programmiert" (und das ist noch eine übertreibung )
aber das meiste habe verstanden.
was ich nicht verstanden habe ist das:
Status = Status AND 2 ^ i
Status = Status XOR 2 ^ i
wie darf ich das ergebnis verstehen?
kann ich auch irgendwie auslesen was gerade anliegt? Ich möchte versuchen das sich nur die ändern die ich mit meiner eingabe ändere. Also das 0, 3, 4,... gleich bleibt.
geniale lösung. wirklich.
danke. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 14.07.2005, 14:21 Titel: |
|
|
Also, XOR und AND sind Operatoren, die bitweise fungieren.
Schau die zum Beispiel die Zahl 7 im Binärcode an:
Und dann die Zahl 2:
Wenn du sie durch ein AND verknüpfst, passiert das hier:
Code: |
0111
and 0010
--------------
0010
|
Das heißt, es kommt 2 raus, da das 2. Bit in der ersten und in der zweiten Zahl vorkommt.
Bei XOR sähe das so aus:
Code: |
0111
xor 0010
--------------
0101
|
Da kommt 5 raus. XOR 'vergleicht' die einzelnen Bits. Wenn sie gleich sind, setzt es 0, andernfalls 1.
Zum Thema auslesen was gerade anliegt:
Du schreibst einfach das hier:
Code: |
FOR i = 1 TO 7
IF Status AND 2 ^ i THEN PRINT "Pin Nr. " + RTRIM$(LTRIM$(STR$(i))) + " aktiv"
NEXT i
|
So, ich hoffe, ich konnnte die Thematik halbwegs verständlich rüberbringen...
jb |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 14.07.2005, 20:36 Titel: |
|
|
Das Programm, das ich vorhin postete, hatte noch kleine Fehler!
Hier ist das Programm, das Obiges korrekt meistert:
Code: |
SCREEN 0
CLS
c$ = COMMAND$ ' Kommandozeile auslesen
FOR i = 0 TO 7 STEP 1
' Die Pins schalten
IF INSTR(c$, RTRIM$(LTRIM$(STR$(i + 1))) + "on") THEN Status = Status OR 2 ^ i
IF INSTR(c$, RTRIM$(LTRIM$(STR$(i + 1))) + "off") THEN Status = Status AND (NOT(2 ^ i))
' Anzeigen, welche Pins an oder aus sind:
IF Status AND 2 ^ i THEN s$ = "AN" ELSE s$ = "AUS"
PRINT "Pin Nr. " + RTRIM$(LTRIM$(STR$(i + 1))) + ": " + s$
NEXT i
OUT Adresse, Status
END
|
Jetzt sind keine Fehler mehr drin, und eine Anzeige gibt's auch.
/EDIT: Die Pin-Nummern sind jetzt nicht mehr 0-7, sondern 1-8, so ist's ja auch viel logischer...
Übrigens: Mein Fehler war, dass ich beim Einschalten eines Pins anstelle des OR-Operatos den AND-Operator verwendete.
Hier noch mal eine Beschreibung zu OR:
Wieder die Zahlen 7 und 2:
Code: |
0111
or 0010
--------------
0111
|
Hier kommt 7 raus, da das entsprechende ein Bit auf 1 gesetzt wird, wenn es in der ersten oder der
zweiten Zahl auf 1 gesetzt ist.
jb
Zuletzt bearbeitet von jb am 17.07.2005, 10:55, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Bernini

Anmeldungsdatum: 13.11.2004 Beiträge: 14
|
Verfasst am: 15.07.2005, 13:41 Titel: |
|
|
hallo.
Ich bekomme die Karte nächste woche und freue mich schon richtig drauf.
ich habe mich auch schon mit der inp funktion gespielt.
kann es sein das ich damit nicht nur einlesen kann sondern auch den aktuellen stand feststellen kann?
zb wenn ich "10001011" ausgebe mit out das ich dann wieder das selbe rein bekomme?
dann könnte ich sogar nur die ändern die sich wirklich ändern und muss nicht alle neu setzten.
macht es einen unterschied ob ich "/1on" oder "/1ON" eingebe?
fg bernini |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 15.07.2005, 16:13 Titel: |
|
|
Bernini hat Folgendes geschrieben: |
macht es einen unterschied ob ich "/1on" oder "/1ON" eingebe?
|
Bisher schon.
Ersetze diese Zeile
Code: |
c$ = COMMAND$ ' Kommandozeile auslesen
|
durch diese:
Code: |
c$ = LCASE$(COMMAND$) ' Kommandozeile auslesen
|
Dadurch wird die Kommandozeile in Kleinbuchstaben umgewandelt, d.h. es ist egal, ob du
/1ON oder /1on schreibst.
Bernini hat Folgendes geschrieben: |
ich habe mich auch schon mit der inp funktion gespielt.
kann es sein das ich damit nicht nur einlesen kann sondern auch den aktuellen stand feststellen kann?
zb wenn ich "10001011" ausgebe mit out das ich dann wieder das selbe rein bekomme?
dann könnte ich sogar nur die ändern die sich wirklich ändern und muss nicht alle neu setzten.
|
Wenn du nicht willst, dass der vorherige Zustand überschrieben wird, dann schreibe am Anfang des Programms noch
Code: |
Status = INP(Adresse)
|
Und bevor du hier zu euphorisch wirst; es kann sehr wohl sein, dass das Ansprechen des Parallelports unter Windows XP
so nicht klappt.
Wenn das der Fall sein sollte, melde dich
jb |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 16.07.2005, 02:41 Titel: |
|
|
Hallo
Bernini hat Folgendes geschrieben: | gibts irgendwo ein demoprogramm für eine Relaiskartenansteuerung?
...
Ich bekomme die Karte nächste woche und freue mich schon richtig drauf. |
Was ist das überhaupt für eine Karte? Es gibt da die verschiedensten Methoden der Ansteuerung.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Bernini

Anmeldungsdatum: 13.11.2004 Beiträge: 14
|
|
Nach oben |
|
 |
Mecki Igel

Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
|
Nach oben |
|
 |
|