Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Mir ist bewust das PC Themen hier nicht gerne gesehen sind, aber es hat was
mit Basteln zu tun. Sollte dieses Thema hier unpassend sein dann einfach löschen.

Habe mir für ein Projekt 3 der der PC-Relaiskarten K8IO von Pollin besorgt.
Das Schalten der Relais mit Visual Basic funktioniert. Da die Karten aber
auch je vier Schalteingänge haben, möchte ich ich diese auch per Visual Basic
abfragen.

Wie gehe ich da am besten vor?
Henning
Beiträge: 1589
Registriert: So 11. Aug 2013, 23:38

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Henning »

Muss das mit VB sein, oder kann auch C?
Benutzeravatar
Hightech
Beiträge: 11502
Registriert: So 11. Aug 2013, 18:37

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Hightech »

Man muss das IO-Register auf &H378 in eine Variable laden, dann kann man die weiterverarbeiten.
Geht mit der inpout32.dll.
(Kann auch &H379 sein, das Input Register)
Siehe hier:
http://www.vb-paradise.de/index.php/Thr ... -auslesen/

Man muss dazu wissen, der LPT hat 8 Digital Out und 5 Digital in.
Aber die Digital out kann man im Prinzip auch als Digital In nutzen, wenn man den LPT in den EPP Modus bekommt, der Teiber für VB muss das halt
mitmachen.
Sonst gehen als Input nur die 5 Status-Digital-In ($H379)
Henning
Beiträge: 1589
Registriert: So 11. Aug 2013, 23:38

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Henning »

Musst du gucken, wenn du mehrere LPT hast, dann werden die andere Adressen als 378h haben...
Benutzeravatar
Bastelbruder
Beiträge: 11567
Registriert: Mi 14. Aug 2013, 18:28

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Bastelbruder »

Mir sind in letzter Zeit mehrfach LPT1-Adressen um E800h begegnet. Das passiert immer dann wenn man eine PCI-Multi-I/O-Karte in einen "modernen" Blechtrottel reinsteckt. Da funktionieren die uralten legacy-Adressen nicht mehr inclusive aller Programme die selbige hardcoded ansprechen.:(
Benutzeravatar
eJunkie
Beiträge: 756
Registriert: Mi 14. Aug 2013, 20:05

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von eJunkie »

Ach Leute, das war schon vor 2 Dekaden unschön mit Hardwareports rumzuspielen. Mit heutigen Adapterkarten dürfte das auch Glückssache sein.

Der richtige Weg ist OpenFile (mit "LPT1" als Dateinamen) und DeviceIOControl.

Die dazugehörigen Funktionen sind IOCTL_PP_WRITE_DATA, IOCTL_PP_WRITE_CONTROL und IOCTL_PP_READ_STATUS.

Könnte sein das die in den Headern heutzutage gar nicht deklariert sind, Werte weiß ich jetzt nicht. Bei VB (warum eigentlich diese schreckliche "Sprache"?) muss man mit Sicherheit die Werte für die Konstanten erst mal in Erfahrung bringen.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Danke für die vielen Tipps.
Ich hatte erst vor die Steuerungssoftware für mein Projekt in QBasic zu schreiben.
Da aber die Bildschirmausgabe auf einen 10 Zoll Widescreen bescheiden ausschaut,
habe ich die Software mit Visual Basic angefangen zu Programmieren.

Mit C und C++ habe null Erfahrung, aber das würde mich auch mal Interessieren.
Habe bis jetzt noch nichts Einsteiger freundliches über C und C++ gefunden.

Mit der LPT Port PCI Karte habe ich auch zu kämpfen gehabt, dachte das die drei
LPT Ports über die Standard Adressen ansprechen kann. Habe einen Tag damit zu
tun gehabt die Portadressen unter Windows herauszufinden. Ich erreiche die drei
LPT Ports unter dem Adressen $H3BC, 24832, 25344. :o

Ich werde mal mein Glück mit dem Beispiel versuchen, hoffe das es funktioniert.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Habe es mal wie folgt versucht.

Code: Alles auswählen

Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" _
(ByVal PortAddress As Integer) As Integer
Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" _
(ByVal PortAddress As Integer, ByVal Value As Integer)

Private Sub Command1_Click()
Out &H378, 0
Out &H378, 255
eingang = Inp(WriteAdr + 1) And 16
MsgBox eingang
End Sub

Private Sub Command2_Click()
Out &H378, 0
Out &H378, 255
eingang = Inp(WriteAdr + 1) And 32
MsgBox eingang

End Sub

Private Sub Command3_Click()
Out &H378, 0
Out &H378, 255
eingang = Inp(WriteAdr + 1) And 64
MsgBox eingang

End Sub

Private Sub Command4_Click()
Out &H378, 0
Out &H378, 255
eingang = Inp(WriteAdr + 1) And 128
MsgBox eingang

End Sub

Private Sub Form_Load()
Const WriteAdr = &H379
Out &H378, 0
End Sub
Bis jetzt will es noch nicht so wie ich es gerne haben möchte.
andreas6
Beiträge: 4165
Registriert: So 11. Aug 2013, 15:09

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von andreas6 »

Hallo,

im Purebasic benutze ich diese Funktionen so:

Code: Alles auswählen

Procedure portout(adr,dat) ; ausgabe auf ioport
  ;
  If inpout32ok=1
    CallFunction(inpoutdll,"Out32",adr,dat)
  EndIf
  ;
EndProcedure
;
Procedure portin(adr) ; eingabe von ioport
  ;
  Protected dat.l
  If inpout32ok=1
    dat=CallFunction(inpoutdll,"Inp32",adr)
  EndIf
  ;
  ProcedureReturn dat
EndProcedure
Das funktioniert gut, zumindest für die klassischen Schnittstellen.

MfG. Andreas
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von xoexlepox »

Andreas_P hat geschrieben: eingang = Inp(WriteAdr + 1) And 16 ... Const WriteAdr = &H379
Fall du damit Pin 15 (Status "Error") auslesen möchtest, liest du m.E. eine Adresse zu hoch. Denn laut meiner Unterlagen: 378 = Daten, 379 = Status. Du liest jedoch von "&H379 + 1". Das Register gibt es zwar, aber dort stehen andere Statusbits drin.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Habe mal

Code: Alles auswählen

eingang = Inp(WriteAdr + 1) And 16 ... Const WriteAdr = &H379
in geändert, leider kein erfolg.

Code: Alles auswählen

eingang = Inp(WriteAdr + 1) And 16 ... Const WriteAdr = &H378
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von xoexlepox »

Andreas_P hat geschrieben:...leider kein erfolg.
Hmm, meine VB-Kenntnisse sind nach mehr als 15Jahren "Nichtnutzung" ein wenig eingerostet, aber ich würde mal ein

Code: Alles auswählen

MsgBox Inp( &H379 )
versuchen. Die dabei angezeigte Zahl müsste sich beim Kurzschliessen von J8,J10,J12 oder J14 (sind anscheinend mit Pullups versehen) verändern.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Es funtzt :D. Danke ! Wenn ich den Eingang J14 Kurzschließe wird der Wert 110 ausgegeben.
Wenn der Eingan offen ist wird der Wert 126 ausgegeben.
Es wird bei allen Eingängen (J14,J12,J10,J8) der selbe Wert ausgegeben.
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von xoexlepox »

Andreas_P hat geschrieben:Wenn ich den Eingang J14 Kurzschließe wird der Wert 110 ausgegeben. Wenn der Eingan offen ist wird der Wert 126 ausgegeben.
Das ist die (erwartete) Änderung um 16 ("Select", Bit4). Jedoch der Wert 126 irritiert mich. Danach ist Bit7 ("Busy", 128, J10) immer null...Eigentlich sollten die Werte 254 und 238 sein. J12 sollte Bit5 ("Paper", 32) und J8 Bit6 ("Ack", 64) beeinflussen.
Andreas_P hat geschrieben:Es wird bei allen Eingängen (J14,J12,J10,J8) der selbe Wert ausgegeben.
Das wird ja immer seltsamer :?: Mess doch mal das Anschlusskabel durch. Sind die Pins 10, 11, 12, und 13 durchverbunden und nicht miteinander (oder Masse) verbunden?
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Es Lebt ! Es funktioniert ! :D :D :D
Die Weltherrschaft rückt näher.

Hier der Code:

Code: Alles auswählen

Option Explicit
Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" _
(ByVal PortAddress As Integer) As Integer
Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" _
(ByVal PortAddress As Integer, ByVal Value As Integer)
Const WriteAdr = &H378
Dim eingang

Private Sub Command1_Click()
Out WriteAdr, 1

End Sub

Private Sub Command2_Click()
eingang = Inp(WriteAdr + 1) And 32
MsgBox eingang
End Sub

Private Sub Command3_Click()
eingang = Inp(WriteAdr + 1) And 16
MsgBox eingang
End Sub

Private Sub Command4_Click()
eingang = Inp(WriteAdr + 1) And 64
MsgBox eingang
End Sub

Private Sub Command5_Click()
eingang = Inp(WriteAdr + 1) And 128
MsgBox eingang
End Sub
Wenn gewünscht, versuche ich das mal in die Wiki zu schreiben.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Habe da noch ne Frage zu Visual Basic Programmierung.
Es geht um die Weichware von einen Bastel Projekt.
Das Abfragen der Statusports funzt soweit.
Aber ich möchte die MsgBox gegen eine Programmverzweigung ersetzen.
Ich habe es so versucht, aber es funktioniert noch nicht so wie gewünscht. :?

Code: Alles auswählen

Option Explicit
Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" _
(ByVal PortAddress As Integer) As Integer
Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" _
(ByVal PortAddress As Integer, ByVal Value As Integer)
Const WriteAdr = 25344
Dim eingang

Private Sub Command1_Click()
Out WriteAdr, 1
End Sub

Private Sub Command2_Click()
If eingang = Inp(WriteAdr + 1) And 32 = True Then
Form1.Show
Else
Form2.Show
End If
End Sub

 
Benutzeravatar
Sunset
Beiträge: 1517
Registriert: Fr 6. Dez 2013, 15:19

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Sunset »

Ich programmiere zwar nicht mit Visual Basic, aber vielleicht ist es ein Versuch, zum besseren Verständnis in der Abfrage ein paar Klammern zu setzen:

Code: Alles auswählen

If eingang = Inp(WriteAdr + 1) And 32 = True Then
wird dann gelesen als

Code: Alles auswählen

If eingang = Inp(WriteAdr + 1) And (32 = True) Then
Mir ist der Ausdruck "32 = True" nicht ganz klar, was willst Du damit erreichen? Wenn "0 = False" ist, dann ist alles ungleich 0 immer True, also muss dieser Ausdruck immer wahr sein. Damit ist der 2. Teil der AND Verknüpfung immer TRUE, es ändert sich niemals der Wert und damit kann man das AND und den nachfolgenden Ausdruck auch nur als TRUE schreiben oder sogar schlicht weglassen.

Möglicherweise möchtest Du ja auf ein bestimmtest Bit testen, dann sähe die Abfrage so aus:

Code: Alles auswählen

If eingang = (Inp(WriteAdr + 1) And 32) Then
32 = 2^5, daher könnte man auch schreiben:

Code: Alles auswählen

If eingang = (Inp(WriteAdr + 1) And (2^5)) Then
falls man das Bit gerne abzählen möchte.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Danke erst mal , hat mir schon etwas weiter geholfen. :)
Habe eine Frage zu Visual Basic.
Ich versuche den Wasserstand von einem Kanister mit der LPT Schnitstelle abzufragen. Die Abfrage
vom Wasserstand erfolgt in 25% Schritten und soll als Wert auf dem Monitor ausgegeben werden.

Code: Alles auswählen

Private Sub Form_Load()
Out &H378, 0
Out 24832, 0
Out 25344, 0
If eingang = (Inp(WriteAdr + 1) And 64) Then
Label1.Caption = "100%"
Else
Label1.Caption = " 75%"
End If
If eingang = (Inp(WriteAdr + 1) And 32) Then
Label1.Caption = " 50%"
Else
Label1.Caption = " 25%"
End If
End Sub
Aber irgentwas scheint da nicht zu stimmen. Es werden nur 50% oder 25%
auf dem Monitor ausgegeben. :o

Wenn ich mein Projekt bis zum Treffen fertigstellen kann, werde ich es zum
Treffen mitbringen.
Zuletzt geändert von Andreas_P am Mo 23. Jun 2014, 19:21, insgesamt 2-mal geändert.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Hat jemand eine Idee?
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von flogerass »

Du überschreibst mit deiner zweiten Abfrage grundsätzlich und immer das Ergebnis deiner ersten Abfrage. In C würde ich sowas mit Switch/Case machen. Ob es dafür eine Entsprechung in VB gibt weiß ich nicht.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Bei Visual Basic gibt es eine Select...Case-Anweisung.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von flogerass »

Ahhh! Jetzt weiß ich warum mir das Select immer wieder beim C programmieren dazwischen rutscht. Das hab ich tatsächlich schonmal in VB verwendet.
Ist dir der Fehler in deinem Code und die Verwendung von Select klar?
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Nein. Habe zwar schon etwas mit Visual Basic gespielt, aber das ist das
erste ernst zunehmende Projekt das ich mit Visual Basic realisieren tue.
Und bei eigenen Projekten lernt man finde ich am meisten.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von flogerass »

Versuchs mal so:

Code: Alles auswählen

Private Sub Form_Load()
Out &H378, 0
Out 24832, 0
Out 25344, 0
Select Case (Inp(WriteAdr + 1) And (64+32))
Case (64+32)
    Label1.Caption = "100%"
Case (64)
    Label1.Caption = "75%"
Case (32)
    Label1.Caption = "50%"
Case Else
    Label1.Caption = "25%"
End Select
End Sub
Dir fehlt aber irgendwie noch 0%. Aber mit zwei Bit gibts halt nur vier Zustände
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Danke. Werde ich Morgen mal Ausprobieren.
Der Code ist nur ein kleiner Ausschnitt.
Insgesammt habe ich vier Status Ports 16, 32, 64, 128
der Invertiert ist.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Danke schonmal für die Hilfe. :)
Mit dem Code funzt es jetzt.

Code: Alles auswählen

Private Sub Form_Load()
Out &H378, 0
Out 24832, 0
Out 25344, 0
Select Case (Inp(WriteAdr + 1) And (64 + 32 + 16))
Case (64 + 32 + 16)
 'Kabel Blau Schwarz, Gelb Blau, Grün Gelb offen
 Label1.Caption = "KEIN WASSER !"
 Label4.Caption = "DAU SCHUTZ ! PROGRAMM ANGEHALTEN! WASSERMANGEL!"
Case (64 + 32)
  'Kabel Blau Grün kurzgeschlossen
 Label1.Caption = "33,3%"
 Label4.Caption = "Bitte bei nächster Gelegenheit Wasser nachfüllen !"
Case (64)
 'Kabel Gelb Blau, Grün Blau kurzgeschlossen
  Label1.Caption = "66,6%"
Case Else
 'Kabel Blau Schwarz, Gelb Blau, Grün Gelb kurzgeschlossen
 Label1.Caption = "100%"
End Select
End Sub
Kann ich die Prozentwerte auch in einen Dauerintervall von 500 ms abfragen?
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von xoexlepox »

Andreas_P hat geschrieben:Kann ich die Prozentwerte auch in einen Dauerintervall von 500 ms abfragen?
Die Schnittstelle sollte das problemlos können.

Um das Programm zu verschönern, solltest du "Label4.Caption" in den beiden unkritischen Fällen mit " " beschreiben, denn sonst bleibt der Text auch nach dem Auffüllen von Wasser stehen ;)
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von flogerass »

Eventuell sollte man die Logik umdrehen. Also 0 = 100% und else = Wassermangel!
Dann kommt die Fehlermeldung nämlich bei jeder unbekannten Kombination.
Bei deiner Variante kommt nämlich bei Kabelbruch 100%
Hörbi
Beiträge: 78
Registriert: Mo 12. Aug 2013, 13:22
Wohnort: Abensberg

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Hörbi »

Andreas_P hat geschrieben: Private Sub Form_Load()
Out &H378, 0
Out 24832, 0
Out 25344, 0
Select Case (Inp(WriteAdr + 1) And (64 + 32 + 16))
Case (64 + 32 + 16)
'Kabel Blau Schwarz, Gelb Blau, Grün Gelb offen
Label1.Caption = "KEIN WASSER !"
Label4.Caption = "DAU SCHUTZ ! PROGRAMM ANGEHALTEN! WASSERMANGEL!"
Case (64 + 32)
'Kabel Blau Grün kurzgeschlossen
Label1.Caption = "33,3%"
Label4.Caption = "Bitte bei nächster Gelegenheit Wasser nachfüllen !"
Case (64)
'Kabel Gelb Blau, Grün Blau kurzgeschlossen
Label1.Caption = "66,6%"
Case Else
'Kabel Blau Schwarz, Gelb Blau, Grün Gelb kurzgeschlossen
Label1.Caption = "100%"

End Select
End Sub
Ist doch schon so oder?
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von xoexlepox »

flogerass hat geschrieben:Dann kommt die Fehlermeldung nämlich bei jeder unbekannten Kombination.
Das ist keine schlechte Idee, denn es werden ja nur wenige der theoretisch möglichen Bitkombinationen verwendet (bzw. sind vom Interface her "sinnvoll"). Gab es bei VB nicht sowas wie ein "case else" (bei C wäre es "default")? Das könnte man dann für "Hier ist irgendwas faul, bitte Verkabelung checken" verwenden.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von flogerass »

@Hörbi:
Im aktuellen Fall gibt es nur einen Fehler wenn alle Kabel getrennt sind. Wenn z.B. Leitung 64 (Edith hat grad nen Knoten im Hirn. Kann auch Leitung 16 sein.) abgerissen ist dann kommt eigentlich immer 100% außer wenn wirklich leer ist.

@xoexlepox:
Ist doch schon drin. Nur eben mit der verkehrten Logik.
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von xoexlepox »

flogerass hat geschrieben:Ist doch schon drin. Nur eben mit der verkehrten Logik.
Stimmt! Sorry, hatte ich übersehen. Nur (wie du schon schreibst) mit einer "ungünstigen" Logik. Besser: Den möglichen (aber korrekten) Fall "alle kurzgeschlossen" in einem eigenen case behandeln, aber alles andere in eine Fehlerbehandlung laufen lassen.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Wie Verkehrte Logik?
Ok, ich sehe ich muss mal mein Projekt näher beschreiben.
Das Projekt ist mein Beitrag zu der Challenge 2014 Frondienstleistung.
Wenn es mal fertig ist soll es mal ein Automat sein der Pulver Suppe
zubereitet.

Bild->zoom
Bild->zoom

Der Wasserstand vom dem Kanister wird von 4 Pollin Wassermelder Bausätze
überwacht. Die Wassermelder sind mit den Eingängen der Statusports einer
Relaiskarte verbunden.

Mit dem Port 128 habe ich noch Probleme diesen zwecks
Wasserstand abzufragen weil dieser invertiert ist.
Zuletzt geändert von Andreas_P am Di 24. Jun 2014, 22:00, insgesamt 1-mal geändert.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von flogerass »

Die Idee ist einfach, dass du alle Erlaubten Fälle definierst und mit dem "Else" alle Fälle mit einer Fehlermeldung abfängst, die nicht zulässig sind.

Mit dem Invertierten Port gibts eigentlich auch kein Problem. Du musst einfach alle Bits, die dich interessieren maskieren. Dann machst du für jeden erlaubten Zustand ein Case und in das Else kommt eine Fehlermeldung.
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von xoexlepox »

Andreas_P hat geschrieben:Der Wasserstand vom dem Kanister wird von 4 Pollin Wassermelder Bausätze
überwacht.
Das meinte ich mit "sinnvollen Werten vom Interface": Wenn der unterste Melder im Kanister meint "Kein Wasser mehr", und ein höherer Melder meint "Noch alles ok", dann ist da definitiv "etwas faul" ;) -> Nur "sinngebende" Bitkombinationen abhandeln, alles Andere muss ein Fehler sein.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Du musst einfach alle Bits, die dich interessieren maskieren.
Wie funktioniert das in Visual Basic? Mit Bitwackeln hatte ich noch nicht
so viel gemacht.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von flogerass »

Machst du doch schon.

Code: Alles auswählen

x AND (maske)
In deinem Fall also:

Code: Alles auswählen

Select Case (x AND (128 + 64 + 32 + 16))
Und wenn du z.B. den Zustand 0101 abfragen willst schreibst du

Code: Alles auswählen

Case (64 + 16)
Das lässt sich beliebig erweitern. Und wierum die Logik ist, ist der Abfrage egal. Wenn sie invertiert ist musst du halt eine Null anstatt einer Eins denken.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Ok so ist das.
War heute Nachmittag am Code Basteln.
Funzt soweit wie ich ich mir das vorgestellt habe.
Danke für die Hilfe dabei, ohne hätte ich das nicht so
realisieren können. :)

Code: Alles auswählen

Private Sub Timer2_Timer()
Status.Caption = "                     "
Select Case (Inp(WriteAdr + 1) And (64 + 32 + 16))
Case (64 + 32 + 16)
 'Kabel Blau Schwarz, Gelb Blau, Grün Gelb offen
 Level.Caption = "KEIN WASSER !"
 Status.Caption = "DAU SCHUTZ ! PROGRAMM ANGEHALTEN! WASSERMANGEL!"
Case (64 + 32)
  'Kabel Blau Grün kurzgeschlossen
 Level.Caption = "33,3%"
 Status.Caption = "Bitte bei nächster Gelegenheit Wasser nachfüllen !"
Case (64)
 'Kabel Gelb Blau, Grün Blau kurzgeschlossen
  Level.Caption = "66,6%"
  Status.Caption = "                     "
Case (32)
 'Kabel Blau Schwarz, Grün Blau kurzgeschlossen
  Level.Caption = "ERROR32"
  Status.Caption = "FEHLER WASSERMELDER !"
Case (16)
 'Kabel Blau Schwarz, Grün Blau kurzgeschlossen
  Level.Caption = "ERROR16"
  Status.Caption = "FEHLER WASSERMELDER !"
Case (16 + 64)
 'Kabel Blau Gelb kurzgeschlossen
  Level.Caption = "ERROR80"
  Status.Caption = "FEHLER WASSERMELDER !"
Case (16 + 32)
 'Kabel Blau Gelb kurzgeschlossen
  Level.Caption = "ERROR48"
  Status.Caption = "FEHLER WASSERMELDER !"
Case Else
 'Kabel Blau Schwarz, Gelb Blau, Grün Gelb kurzgeschlossen
 Level.Caption = "100%"
End Select
End Sub
Das Abfragen des Port 128 ist mir noch nicht geglückt.
Welchen Wert muss ich für den Port angeben 0 oder 128?
Oder kann ich per Code die invertierung des Ports 128 umdrehen?

Als nächstes werde ich versuchen auf diese Art drei Lichttaster
mit ins Programm einzubinden um damit die Position des Bechers
zu überwachen.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von flogerass »

Du hast das Prinzip der Fehlerabfrage noch nicht verstanden. Der ERROR kommt in das Else! Die 100% fragst du über ein definiertes Bitmuster ab.
Was soll denn die 128 machen? In deinem aktuellen Code wird sie ja totgeschwiegen.
Prinzipiell musst du für jedes gesetzte Bit seinen Wert dazuaddieren, wie du es bei 16, 32 und 64 ja schon machst. Bei der 128 musst du eben 128 addieren wenn das Bit auf 0 sein soll.
Benutzeravatar
Andreas_P
Beiträge: 1400
Registriert: Mo 12. Aug 2013, 11:35
Wohnort: Lohr am Main
Kontaktdaten:

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von Andreas_P »

Habe mich vorhin nochmal mit dem Code beschäftigt.
Das ist das Ergebnis, auch das Abfragen des Ports 128 funzt jetzt.

Code: Alles auswählen

Private Sub Timer2_Timer()
Status.Caption = "                     "
Select Case (Inp(WriteAdr + 1) And (64 + 32 + 16 + 128))
Case (64 + 32 + 16)
 'Kabel Blau Schwarz, Gelb Blau, Grün Gelb offen
 Level.Caption = "KEIN WASSER !"
 Status.Caption = "DAU SCHUTZ ! PROGRAMM ANGEHALTEN! WASSERMANGEL!"
Case (64 + 32)
  'Kabel Blau Grün kurzgeschlossen
 Level.Caption = "25%"
 Status.Caption = "Bitte bei nächster Gelegenheit Wasser nachfüllen !"
Case (64)
 'Kabel Gelb Blau, Grün Blau kurzgeschlossen
  Level.Caption = "50%"
  Status.Caption = "                     "
Case (0)
 'Kabel Blau Gelb kurzgeschlossen
  Level.Caption = "75%"
  Status.Caption = ""
Case (128)
  Level.Caption = "100%"
  Status.Caption = ""
Case Else
 Level.Caption = "ERROR"
 Status.Caption = "FEHLER WASSERMELDER !"
End Select
End Sub
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von xoexlepox »

Andreas_P hat geschrieben:Das ist das Ergebnis, auch das Abfragen des Ports 128 funzt jetzt.
Kaum macht man's richtig, schon geht's? ;)
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen

Beitrag von flogerass »

Andreas_P hat geschrieben:Habe mich vorhin nochmal mit dem Code beschäftigt.
Das ist das Ergebnis, auch das Abfragen des Ports 128 funzt jetzt.
Glückwunsch :!: :)
Antworten