Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese
Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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?
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?
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Muss das mit VB sein, oder kann auch C?
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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)
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)
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Musst du gucken, wenn du mehrere LPT hast, dann werden die andere Adressen als 378h haben...
- Bastelbruder
- Beiträge: 11567
- Registriert: Mi 14. Aug 2013, 18:28
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
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.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
Ich werde mal mein Glück mit dem Beispiel versuchen, hoffe das es funktioniert.
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.
Ich werde mal mein Glück mit dem Beispiel versuchen, hoffe das es funktioniert.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Habe es mal wie folgt versucht.
Bis jetzt will es noch nicht so wie ich es gerne haben möchte.
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
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Hallo,
im Purebasic benutze ich diese Funktionen so:
Das funktioniert gut, zumindest für die klassischen Schnittstellen.
MfG. Andreas
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
MfG. Andreas
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.Andreas_P hat geschrieben: eingang = Inp(WriteAdr + 1) And 16 ... Const WriteAdr = &H379
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Habe mal
in geändert, leider kein erfolg.
Code: Alles auswählen
eingang = Inp(WriteAdr + 1) And 16 ... Const WriteAdr = &H379
Code: Alles auswählen
eingang = Inp(WriteAdr + 1) And 16 ... Const WriteAdr = &H378
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Hmm, meine VB-Kenntnisse sind nach mehr als 15Jahren "Nichtnutzung" ein wenig eingerostet, aber ich würde mal einAndreas_P hat geschrieben:...leider kein erfolg.
Code: Alles auswählen
MsgBox Inp( &H379 )
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Es funtzt . 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.
Wenn der Eingan offen ist wird der Wert 126 ausgegeben.
Es wird bei allen Eingängen (J14,J12,J10,J8) der selbe Wert ausgegeben.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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:Wenn ich den Eingang J14 Kurzschließe wird der Wert 110 ausgegeben. Wenn der Eingan offen ist wird der Wert 126 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?Andreas_P hat geschrieben:Es wird bei allen Eingängen (J14,J12,J10,J8) der selbe Wert ausgegeben.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Es Lebt ! Es funktioniert !
Die Weltherrschaft rückt näher.
Hier der Code:
Wenn gewünscht, versuche ich das mal in die Wiki zu schreiben.
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
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
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
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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:
wird dann gelesen als
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:
32 = 2^5, daher könnte man auch schreiben:
falls man das Bit gerne abzählen möchte.
Code: Alles auswählen
If eingang = Inp(WriteAdr + 1) And 32 = True Then
Code: Alles auswählen
If eingang = Inp(WriteAdr + 1) And (32 = True) Then
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
Code: Alles auswählen
If eingang = (Inp(WriteAdr + 1) And (2^5)) Then
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
Aber irgentwas scheint da nicht zu stimmen. Es werden nur 50% oder 25%
auf dem Monitor ausgegeben.
Wenn ich mein Projekt bis zum Treffen fertigstellen kann, werde ich es zum
Treffen mitbringen.
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
auf dem Monitor ausgegeben.
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.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Hat jemand eine Idee?
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Bei Visual Basic gibt es eine Select...Case-Anweisung.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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?
Ist dir der Fehler in deinem Code und die Verwendung von Select klar?
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
erste ernst zunehmende Projekt das ich mit Visual Basic realisieren tue.
Und bei eigenen Projekten lernt man finde ich am meisten.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Versuchs mal so:
Dir fehlt aber irgendwie noch 0%. Aber mit zwei Bit gibts halt nur vier Zustände
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
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
Der Code ist nur ein kleiner Ausschnitt.
Insgesammt habe ich vier Status Ports 16, 32, 64, 128
der Invertiert ist.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Danke schonmal für die Hilfe.
Mit dem Code funzt es jetzt.
Kann ich die Prozentwerte auch in einen Dauerintervall von 500 ms abfragen?
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
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Die Schnittstelle sollte das problemlos können.Andreas_P hat geschrieben:Kann ich die Prozentwerte auch in einen Dauerintervall von 500 ms abfragen?
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
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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%
Dann kommt die Fehlermeldung nämlich bei jeder unbekannten Kombination.
Bei deiner Variante kommt nämlich bei Kabelbruch 100%
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Ist doch schon so oder?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
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.flogerass hat geschrieben:Dann kommt die Fehlermeldung nämlich bei jeder unbekannten Kombination.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
@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.
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.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.flogerass hat geschrieben:Ist doch schon drin. Nur eben mit der verkehrten Logik.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
->zoom
->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.
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.
->zoom
->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.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
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.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.Andreas_P hat geschrieben:Der Wasserstand vom dem Kanister wird von 4 Pollin Wassermelder Bausätze
überwacht.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Wie funktioniert das in Visual Basic? Mit Bitwackeln hatte ich noch nichtDu musst einfach alle Bits, die dich interessieren maskieren.
so viel gemacht.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Machst du doch schon.
In deinem Fall also:
Und wenn du z.B. den Zustand 0101 abfragen willst schreibst du
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.
Code: Alles auswählen
x AND (maske)
Code: Alles auswählen
Select Case (x AND (128 + 64 + 32 + 16))
Code: Alles auswählen
Case (64 + 16)
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
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.
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
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.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
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.
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.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Habe mich vorhin nochmal mit dem Code beschäftigt.
Das ist das Ergebnis, auch das Abfragen des Ports 128 funzt jetzt.
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
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
Kaum macht man's richtig, schon geht's?Andreas_P hat geschrieben:Das ist das Ergebnis, auch das Abfragen des Ports 128 funzt jetzt.
Re: Pollin PC-Relaiskarte K8IO Schalteingänge abfragen
GlückwunschAndreas_P hat geschrieben:Habe mich vorhin nochmal mit dem Code beschäftigt.
Das ist das Ergebnis, auch das Abfragen des Ports 128 funzt jetzt.