Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

LPT Relaiskarte schaltet gelegentlich unkontrolliert unter Q
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Martin K
Gast





BeitragVerfasst am: 01.11.2004, 19:52    Titel: LPT Relaiskarte schaltet gelegentlich unkontrolliert unter Q Antworten mit Zitat

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

BeitragVerfasst am: 01.11.2004, 20:09    Titel: Antworten mit Zitat

Hallo

Unter was für einem Betriebssystem passiert das denn und wechseln bei den Störungen alle 8 Bit ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kai Bareis



Anmeldungsdatum: 10.09.2004
Beiträge: 545
Wohnort: Baden Würtemberg

BeitragVerfasst am: 01.11.2004, 20:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Martin K
Gast





BeitragVerfasst am: 01.11.2004, 20:49    Titel: Kein Windows - Betriebssystem ist MS-DOS 5 Antworten mit Zitat

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

BeitragVerfasst am: 01.11.2004, 20:57    Titel: Re: Kein Windows - Betriebssystem ist MS-DOS 5 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin K
Gast





BeitragVerfasst am: 01.11.2004, 22:04    Titel: 888 ists nicht Antworten mit Zitat

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





BeitragVerfasst am: 06.11.2004, 19:58    Titel: Also es ist wohl ein Hardwareproblem Antworten mit Zitat

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

BeitragVerfasst am: 06.11.2004, 21:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Bernini



Anmeldungsdatum: 13.11.2004
Beiträge: 14

BeitragVerfasst am: 13.07.2005, 13:00    Titel: Antworten mit Zitat

Hallo.

gibts irgendwo ein demoprogramm für eine Relaiskartenansteuerung?

danke

bernini
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 13.07.2005, 14:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Bernini



Anmeldungsdatum: 13.11.2004
Beiträge: 14

BeitragVerfasst am: 13.07.2005, 17:23    Titel: Antworten mit Zitat

hallo.

erstmals danke.

noch ne frage:

kann ich die datei dann auch so ansteuern: relais.exe /1on /2off /7on ?

fg bernini
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 13.07.2005, 17:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Bernini



Anmeldungsdatum: 13.11.2004
Beiträge: 14

BeitragVerfasst am: 13.07.2005, 20:27    Titel: Antworten mit Zitat

hallo.

ich habe schon lange nicht mehr "programmiert" (und das ist noch eine übertreibung lächeln )

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 14.07.2005, 14:21    Titel: Antworten mit Zitat

Also, XOR und AND sind Operatoren, die bitweise fungieren.

Schau die zum Beispiel die Zahl 7 im Binärcode an:
Code:
0111


Und dann die Zahl 2:
Code:
0010


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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 14.07.2005, 20:36    Titel: Antworten mit Zitat

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. lächeln

/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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Bernini



Anmeldungsdatum: 13.11.2004
Beiträge: 14

BeitragVerfasst am: 15.07.2005, 13:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 15.07.2005, 16:13    Titel: Antworten mit Zitat

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 lächeln

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 16.07.2005, 02:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Bernini



Anmeldungsdatum: 13.11.2004
Beiträge: 14

BeitragVerfasst am: 16.07.2005, 12:40    Titel: Antworten mit Zitat

hallo.

Ich wollte mir selber keine basteln also habe ich mir eine bei Ebay bestellt:
http://cgi.ebay.at/ws/eBayISAPI.dll?ViewItem&category=10662&item=5772586034&rd=1&ssPageName=WD1V
(Ich hoffe ich darf den link hier posten.)

sieht gut auch. vorallem ziemlich einfach.

hier ist die PDF dazu.
http://gwr-elektronik.de/doku/Beschreibung%20Relaikarte%20RK8-1210V1.pdf
leider kein schaltplan und auch keine angabe über die verwendeten bauteile. aber die seite 6 stimmt mich optimistisch das es geht.

Es war auch ein verweis auf das Programm Z-ParSwitch. Aber damit ändern sich jedesmal alle zustände und nicht nur diese die ich ändern will.
das hat mich dann auf qb gebracht und wenn das dann irgendwie mit XP auch noch klappt bin ich mehr als zufrieden. lächeln

fg Bernini
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 16.07.2005, 12:49    Titel: Antworten mit Zitat

Das kommt mir irgendwie ganzschön teuer vor. Naja.. wir bauen unsere S88 immer selber lächeln (für unsere Anlage)
Aber ansonsten zwinkern
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz