![Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht](misc/logos/logo.png) |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 29.12.2017, 20:07 Titel: |
|
|
Hallo dreael,
Windows-Gerätemanager unter "Anschlüsse" bei mir „Hardware“
Bei „Ressourcen“ kommt auch beim Gerätemanager bei COM1.
E/A-Bereich 03F8-03FF
IRQ 04
Bei COM4 gibt es „Ressourcen“ gar nicht.
######
Hallo grindstone,
das mit dem Programm von Sebastian hab ich ja mit COM4 schon ausprobiert und das hat ja auch geklappt.
Die Eingänge CDS, DSR, RING (RI) und RLSD (DCD) kann man geschmeidig abfragen.
Für das EIN und AUS schalten von RTS und DTR ist ja noch etwas an „Veränderungen“ nötig.
Zumindest geht das LED an RTS zu GND est mal AUS nach Programmstart und nach Programm Ende wieder EIN, also schaltet das IC auf dem USB Pegelwandler zu TTL den RTS.
Jetzt braucht am noch eine „Eingabe“ für RTS und auch für DTR, EIN oder AUS.
Gruß
Code: |
' Programm von Sebastian 29.12.2017, 12:23
' Testet dem USB zu COM4 ZU TTL Umsetzer und ist auch OK
' Die Eingänge CDS, DSR, RING (RI) und RLSD (DCD) kann man abfragen.
' Ausgabe am Monitor
' 1 = Verbindung zu GND
' 0 = keine Verbindung zu GND
#Include Once "windows.bi"
Dim hCom As handle
Dim PortNr As String = "COM4" ' COM1, COM2, COM3 oder COM4
Dim modemStat As Dword
'Serielle Schnittstelle öffnen:
hCom = CreateFile(PortNr, GENERIC_READ Or GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)
Print "Handle = "; hCom
'Fehlerbehandlung, falls Öffnen fehlschlägt:
If hCom = INVALID_HANDLE_VALUE Then
Print "Fehler beim Oeffnen von "; PortNr
Sleep
End
Else
Print PortNr; " geoeffnet"
Endif
'Alle Ausgangsleitungen auf positive Spannung setzen:
EscapeCommFunction(hCom, SETRTS) 'RTS +12V
EscapeCommFunction(hCom, SETDTR) 'DTR +12V
EscapeCommFunction(hCom, SETBREAK) 'TxD +12V (Break)
Print
Print
Print "Ende mit [Esc]"
Print "Verbindung zu GND = 1 keine Verbindung zu GND = 0"
'Eingangsleitungen per Polling abfragen:
Do
GetCommModemStatus(hCom, @modemStat)
Locate 8,1
If modemStat And MS_CTS_ON Then Print "CTS (USB=CTS 8) = 1" Else Print "CTS (USB=CTS 8) = 0"
If modemStat And MS_DSR_ON Then Print "DSR (USB=RSD 6) = 1" Else Print "DSR (USB=RSD 6) = 0"
If modemStat And MS_RING_ON Then Print "RING (USB=R1 9) = 1" Else Print "RING (USB=R1 9) = 0"
If modemStat And MS_RLSD_ON Then Print "RLSD (USB=DCD 1) = 1" Else Print "RLSD (USB=DCD 1) = 0"
Sleep 5
Loop Until Inkey = Chr(27)
'Alle Ausgangsleitungen auf negative Spannung zurücksetzen:
EscapeCommFunction(hCom, CLRRTS) 'RTS -12V
EscapeCommFunction(hCom, CLRDTR) 'DTR -12V
EscapeCommFunction(hCom, CLRBREAK) 'TxD -12V
'Serielle Schnittstelle schließen:
CloseHandle(hCom) |
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Sebastian Administrator
![](images/avatars/563932275488e4d20c5ee9.jpg)
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 29.12.2017, 20:26 Titel: |
|
|
Hehe, da muss ich den Ruhm aber ein bisschen abtreten. Das Code-Beispiel zum Auslesen/Setzen der Statusleitungen im FreeBASIC-Portal ist nicht von mir. Ich habe es dir nur verlinkt. Der Autor ist jemand anderes (Steini). Steht im Portal auch so angegeben.
Zitat: | Bei COM4 gibt es „Ressourcen“ gar nicht. |
Das klingt für mich einleuchtend. Wie sollte ein Knoten bzw. Busteilnehmer, der am USB hängt, auch eine x86-I/O-Bus-Port-Basisadresse haben. ![neutral](images/smiles/icon_neutral.gif) _________________
Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 29.12.2017, 20:47 Titel: |
|
|
Zitat: | Frage 1 von grindstone : Gibt es zu dem Adapter irgendeine Dokumentation, wo solche Details beschrieben sind? |
Am IC steht CN480661
Das IC ist von der Firma FTDI mit der Bezeichnung FT232RL
Auf der Rückseite von der Platine steht YP-05 da findet man auch einige Sachen und Bilder.
Ehrlich gesagt wenn man das bei google überfliegt was da so alles bei FT232RL angezeigt wir ist man verwirrender als vorher.
Zitat: | Frage 2 von grindstone : Gehört zu dem Adapter ein Treiber, den du zusätzlich installieren musstest? |
Treiber ist keiner nötig, so hab ich das von den Chinesen verstanden.
############
Hallo Sebastian,
da steht was von Autor: Steini63.
O.K.
Nur gefunden hätte ich das nicht ohne deine Hilfe, Danke.
Gruß |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1208 Wohnort: Ruhrpott
|
Verfasst am: 30.12.2017, 11:09 Titel: |
|
|
eeg-grimm hat Folgendes geschrieben: | Am IC steht CN480661
Das IC ist von der Firma FTDI mit der Bezeichnung FT232RL | Hmmm...
http://www.rudiswiki.de/wiki/FTDIWildWest
Nach dem Datenblatt des FT232RL müsste sich der USB - Adapter direkt (ohne Pegelwandler / Inverter) an das Messmodul anschliessen lassen.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 31.12.2017, 11:31 Titel: |
|
|
Hallo grindstone,
den USB - Adapter schließe ich direkt (ohne Pegelwandler an) an das Stromzählermodul PZEM-004T und das auslesen der z.B. Spannung geht ja einwandfrei, mit dem Programm von Sebastian (16.12.2017, 01:30) mit COM1 und auch mit USB=COM4.
Die Anfrage wegen RTS und auch für DTR als Ausgang schalten mit FreeBASIC hab ich ja nur gestellt weil ich eine Verbindung zur Außenwelt brauch um was EIN und AUS zu schalten.
Bei erreichen oder unterschreiten von Messwerten soll ja was geschalten werden.
#
Mit dem Eingebauten COM1 geht ja die Messung mit dem PZEM-004T und auch das schalten von RTS und DTR, alles mit FreeBASIC.
Bei Verwendung vom FreeBASIC und USB (COM4) geht das PZEM-004
aber nicht das schalten von RTS, DTR.
Nur mit dem „Spezialprogramm“ von Sebastian 29.12.2017, 12:23 zeigt RTS, DTR zumindest eine Reaktion.
Die Eingänge CDS, DSR, RING (RI) und RLSD (DCD) kann man abfragen an der USB Platine.
#
volta, hat am 19.12.2017, 16:39 (Seite 1) noch ein Programm eingestellt für:
Volt, Anper, Watt und kWh
Ist mir aber mir noch nicht klar wie das komplette Programm dann aussieht um V, A, W und kWh zu bekommen von Stromzählermodul PZEM-004T.
Gruß |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 31.12.2017, 15:48 Titel: Statusleitungen per WinAPI schalten |
|
|
eeg-grimm hat Folgendes geschrieben: |
Bei Verwendung vom FreeBASIC und USB (COM4) geht das PZEM-004
aber nicht das schalten von RTS, DTR.
|
Doch, das machen doch die folgenden Zeilen:
Code: | 'Alle Ausgangsleitungen auf positive Spannung setzen:
EscapeCommFunction(hCom, SETRTS) 'RTS +12V
EscapeCommFunction(hCom, SETDTR) 'DTR +12V
|
Code: | 'Alle Ausgangsleitungen auf negative Spannung zurücksetzen:
EscapeCommFunction(hCom, CLRRTS) 'RTS -12V
EscapeCommFunction(hCom, CLRDTR) 'DTR -12V
|
Das kannst du beliebig oft im Programm durchführen, so lange der entsprechende COM-Port geöffnet ist. Der Unterschied beim TTL USB-seriell Wandler ist, dass die Spannungen 0V (statt -12V) und 5V (statt 12V) betragen; TTL-Pegel eben. _________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1208 Wohnort: Ruhrpott
|
Verfasst am: 31.12.2017, 20:11 Titel: |
|
|
Steini63 hat Folgendes geschrieben: | ...dass die Spannungen 0V (statt -12V) und 5V (statt 12V) betragen; TTL-Pegel eben. | Achtung: Das gilt nur für die Steuerleitungen (DTR und RTS). Bei TxD und RxD ist es umgekehrt: L - Pegel (0V / TTL) entspricht +12V / RS232, H - Pegel (5V / TTL) entspricht -12V / RS232. Entschuldigung, wenn ich hier etwas besserwisserisch erscheine, aber hinter genau diesem Fehler (oder besser: Irrtum) habe ich einmal fast 2 Wochen hergesucht.
Allerdings lassen sich beim FT232R die TTL - Pegel bei Bedarf invertieren (siehe Datenblatt, Seite 35).
Gruß und guten Rutsch
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 01.01.2018, 12:34 Titel: |
|
|
Hallo,
erst ein gesundes neues Jahr.
Der Kopf brummmmmmt noch aber alle Finger sind noch dran.
######
grindstone schreibt:
Entschuldigung, wenn ich hier etwas besserwisserisch erscheine
Das ist nicht besserwisserisch, mein wissen ist nicht besser, meine Fragen sind ja auch manchmal etwas komisch, verwirrend.
Hab ja nur Basiswissen bei QBasic, so für den Hausgebrauch und da bin ich für jeden Tipp dankbar.
Deshalb auch nur Basic = Basiswissen.
Auch auf der Internetseite von Steini63 hol ich mir seit Jahren immer wieder mal den einen oder anderen Tipp.
Ich bin ja noch nicht in der Hochgeschwindigkeit-Datenverarbeitung angekommen aber nur mit COM am PC ist ja auch ein Auslaufmodell.
Die Ausgänge RTS und DTR sind genau umgedreht bei der Spannungsausgaben an der USB Platine.
„EscapeCommFunction(hCom, SETRTS) 'RTS +12V“
RTS +12V = L (RTS mit einem LED verbunden mit GND LED=AUS)
„EscapeCommFunction(hCom, SETDTR) 'DTR +12V“
DTR +12V = L (DTR mit einem LED verbunden mit GND LED=AUS)
„EscapeCommFunction(hCom, CLRRTS) 'RTS -12V“
RTS -12V = +5V H (RTS mit einem LED verbunden mit GND, LED=EIN )
„EscapeCommFunction(hCom, CLRDTR) 'DTR -12V“
DTR -12V = +5V H (DTR mit einem LED verbunden mit GND LED=EIN)
Ich hab ja jetzt zwei Leitungen die H und L Signale liefern über einem I2C-Bus mit einem IC PCF8574 dann verschiedene Sachen EIN und AUS schalten.
Gruß |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 12.11.2018, 08:48 Titel: |
|
|
Hallo Sebastian,
ich mach zurzeit mal was mit deinem Programm vom 16.12.2017, 01:30
Diese Zeile habe ich geändert
Dim KommandoA As String = Chr( &HB0, &HC0, &HA8, &H01, &H01, &H00 )
NEU
Dim KommandoA As String = Chr( &HB0, &HC0, &HA8, &H01, &H01, &H1A )
Nun habe ich da einen super Modernen Laptop der vermutlich 10 mal schneller als mein Windows XP Rechner und da müsste man nach dem Senden und Empfangen eine klein Pause machen.
Es kommt mir so vor als ob die Leertaste etwas „prellt“ also irgendwie manchmal 2 mal sendet und aber die Rückmeldung vom PZEM-004T Modul noch nicht da ist.
Ich hab jetzt mit „Sleep“ einige Sachen ausprobiert, nur dann ist das beenden vom Programm mit der Taste „Esc“ irgendwie ein Glücksspiel.
Können Sie einen Tipp geben wie ich nach dem drücken der Leertaste nur 1 mal die Anfrage sende, also eine kleine Zeitverzögerung bis zur nächsten Leertastenabfrage.
. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1208 Wohnort: Ruhrpott
|
Verfasst am: 12.11.2018, 10:11 Titel: |
|
|
Hallo eeg-grimm.
Das 'Sleep 1' in der Schleife ist nicht fürs Timing, sondern dient dazu, Ressourcen zu schonen, indem es den Rest der dem Programm vom Betriebssystem zugeteilten Zeitscheibe (bei WinXP ca. 15 ms) freigibt. Ohne dieses Sleep würde die Schleife eine Prozessor(kern)auslastung von 100% verursachen.
Das Timing (wenn man es so nennen will) der Schleife erfolgt durch Abfragen der Länge des Empfangspuffers. Hier kann es zu Problemen kommen, wenn die Übertagung langsamer ist als die Wiederholdauer der Schleife. Abhilfe schafft ein Warten auf das Ende der Datenübertragung: Code: | Dim As String Tastatur="", Datenpuffer=""
Dim As Integer puffervor, zaehler
Do
' Hat das angeschlossene Geraet inzwischen Daten gesendet?
If Loc( 1 ) > 0 Then
If LOC(1) > puffervor Then 'wartet, bis der Datenpuffer nicht mehr größer wird
puffervor = LOC(1) 'Füllstand des Datenpuffers merken
zaehler = 0
Else
If zaehler >= 10 Then 'seit 10 Schleifendurchläufen keine neuen Daten
Datenpuffer = Space( Loc( 1 ) )
Get #1, , Datenpuffer
Print "Daten empfangen! Hex-Ansicht: ";
Color 10
Print getHexString( Datenpuffer )
Color 7
puffervor = 0
zaehler = 0
Else
zaehler += 1
EndIf
EndIf
End If
' Hat der Benutzer eine Taste gedrueckt?
Tastatur = Inkey
If( Tastatur = Chr(32) ) Then 'Leertaste
Print "Sende Daten! Hex-Ansicht: ";
Color 12
Print getHexString( KommandoA )
Color 7
Put #1, , KommandoA
End If
Sleep 1
Loop Until Tastatur = Chr(27) 'Escape |
Eventuell muß der Vergleichswert für "zaehler" angepasst werden.
Oder (@Sebastian) hast du eine bessere Idee?
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 12.11.2018, 19:37 Titel: |
|
|
Danke grindstone,
das ist jetzt wesentlich besser mit der Leertaste und das „prellen“ ist verschwunden, nur wenn man auf der Leertaste bleibt, macht das auch nichts, werden nur immer wieder
Sende Daten! Hex-Ansicht: B0 C0 A8 01 01 00 1A
Sende Daten! Hex-Ansicht: B0 C0 A8 01 01 00 1A
Sende Daten! Hex-Ansicht: B0 C0 A8 01 01 00 1A
gesendet an das PZEM-004T Modul.
Code: |
' Code-Schnipsel ohne Funktionsgarantie. Verwendung nur auf eigene Gefahr!
Declare Function getHexString( Daten As String ) As String
' TODO: Hier Parameter einstellen:
' COM1 = RS232 COM4 = USB
Const COMPortParameter = "COM4:9600,N,8,1,ME,CS0,DS0,RS"
' Kommandos hinterlegen:
Dim KommandoA As String = Chr( &HB0, &HC0, &HA8, &H01, &H01, &H00, &H1A )
' COM-Port oeffnen:
Print "Versuche COM-Port zu oeffnen: "; COMPortParameter
If ( Open Com ( COMPortParameter For Binary As #1 ) <> 0 ) Then
Print "Der COM-Port konnte leider nicht geoeffnet werden."
GetKey
End 1
End If
Print
Print "COM-Port geoeffnet."
Print "Bitte [Leertaste] druecken zum Senden des Befehls und [Esc] zum Beenden."
Print
Dim As String Tastatur="", Datenpuffer=""
Dim As Integer puffervor, zaehler
Do
' Hat das angeschlossene Geraet inzwischen Daten gesendet?
If Loc( 1 ) > 0 Then
If LOC(1) > puffervor Then 'wartet, bis der Datenpuffer nicht mehr größer wird
puffervor = LOC(1) 'Füllstand des Datenpuffers merken
zaehler = 0
Else
If zaehler >= 10 Then 'seit 10 Schleifendurchläufen keine neuen Daten
Datenpuffer = Space( Loc( 1 ) )
Get #1, , Datenpuffer
Print "Daten empfangen! Hex-Ansicht: ";
Color 10
Print getHexString( Datenpuffer )
Color 7
puffervor = 0
zaehler = 0
Else
zaehler += 1
EndIf
EndIf
End If
' Hat der Benutzer eine Taste gedrueckt?
Tastatur = Inkey
If( Tastatur = Chr(32) ) Then 'Leertaste
Print "Sende Daten! Hex-Ansicht: ";
Color 12
Print getHexString( KommandoA )
Color 7
Put #1, , KommandoA
End If
Sleep 3
Loop Until Tastatur = Chr(27) 'Escape
Print
Print "Schliesse Schnittstelle..."
' Schnittstelle schliessen:
Close #1
Print "Programm beendet."
GetKey
End 0
' String mit irgendwelchen Daten in Hex-Form ausgeben, um auch nicht-druckbare
' Zeichen einfach lesen zu koennen.
Function getHexString( Daten As String ) As String
Dim Laenge As Integer = Len( Daten )
If( Laenge < 1 ) Then
Return ""
End If
Dim HexAusgabe As String = ""
For i As Integer = 1 To Laenge
HexAusgabe &= Hex( Asc( Mid( Daten, i, 1 ) ), 2 ) & " "
Next i
Return HexAusgabe
End Function |
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1208 Wohnort: Ruhrpott
|
Verfasst am: 12.11.2018, 23:16 Titel: |
|
|
Da ist kein Prellen. Die Antwort des Moduls wurde vorher lediglich in mehrere Teile zerlegt.
Liefert das Modul denn sinnvolle Messwerte?
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 13.11.2018, 08:59 Titel: |
|
|
Zitat: | Da ist kein Prellen. Die Antwort des Moduls wurde vorher lediglich in mehrere Teile zerlegt. |
Hallo grindstone,
das kann auch sein, nur das manchmal eben mehr als die 7 Hex und manchmal weniger als die 7 Hex ausgegeben wurden bei ungeschickter Betätigung der Leertaste hat mich zu den Vermutung geführt das da das Programm eine mehrfach EIN/AUS von der Leertaste erkannt hat.
Zitat: | Liefert das Modul denn sinnvolle Messwerte? |
Angezeigt werden 7 Hex Zahlen in grün ist erst mal die Netzspannung z.B.
A0 00 E6 04 00 00 8A (Ausgabe in grün als Hex)
160 0 230 4 0 0 138 (230,4V)
Jetzt muss ich erst mal die Messwerte von Hex in Dezimalzahlen umwandeln.
Mir ist aber noch nicht ganz klar ob das jetzt 230,4V sind oder 230,04V die da anliegen und ausgegeben werden.
Vermutlich, zu 99% ist die 4. Hex Zahl die erste Kommastelle, da nur 00 bis 09 ausgegeben wurden.
Das umwandeln der Hex in einen sinnvolle Messwert ist auch noch nicht erledigt, da hab ich etwas mit VALIT und VAL herumgemacht aber das ist aber nichts geworden.
Auch ist das mit der 7. Hex Zahl nicht so schlüssig, das soll ja sowas wie eine Prüfsumme, Checksumme sein, wenn ich das richtig verstanden habe beim Messmodul PZEM004T mit dem IC-SD3004 .
Da sollte man erst mal prüfen ob die Prüfsumme Okay ist, das klar ist ob die empfangenen Werte vom PZEM004T, IC-SD3004 überhaupt Sinn machen.
. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1208 Wohnort: Ruhrpott
|
Verfasst am: 13.11.2018, 23:36 Titel: |
|
|
Zitat: | das kann auch sein, nur das manchmal eben mehr als die 7 Hex und manchmal weniger als die 7 Hex ausgegeben wurden bei ungeschickter Betätigung der Leertaste hat mich zu den Vermutung geführt das da das Programm eine mehrfach EIN/AUS von der Leertaste erkannt hat. | Ich denke eher, daß die verfrühte Abfrage die Kommunikation durcheinanderbringt. Man sollte eventuell dafür sorgen, daß das Programm nach einer Abfrage wartet, bis das Modul geantwortet hat (mit Timeout, damit sich es sich bei einer missglückten Antwort nicht aufhängt).
Schau mal, ob das hier funktioniert: Code: | ' Code-Schnipsel ohne Funktionsgarantie. Verwendung nur auf eigene Gefahr!
Declare Function getHexString( Daten As String ) As String
Declare Function pruefsumme(t As String) As String
' TODO: Hier Parameter einstellen:
' COM1 = RS232 COM4 = USB
Const COMPortParameter = "COM4:9600,N,8,1,ME,CS0,DS0,RS"
' Kommandos hinterlegen:
Dim KommandoA As String = Chr( &HB0, &HC0, &HA8, &H01, &H01, &H00, &H1A )
' COM-Port oeffnen:
Print "Versuche COM-Port zu oeffnen: "; COMPortParameter
If ( Open Com ( COMPortParameter For Binary As #1 ) <> 0 ) Then
Print "Der COM-Port konnte leider nicht geoeffnet werden."
GetKey
End 1
End If
Print
Print "COM-Port geoeffnet."
Print "Bitte [Leertaste] druecken zum Senden des Befehls und [Esc] zum Beenden."
Print
Dim As String Tastatur="", Datenpuffer=""
Dim As Integer puffervor, zaehler
Do
' Hat das angeschlossene Geraet inzwischen Daten gesendet?
If Loc( 1 ) > 0 Then
If LOC(1) > puffervor Then 'wartet, bis der Datenpuffer nicht mehr größer wird
puffervor = LOC(1) 'Füllstand des Datenpuffers merken
zaehler = 0
Else
If zaehler >= 10 Then 'seit 10 Schleifendurchläufen keine neuen Daten
Datenpuffer = Space( Loc( 1 ) )
Get #1, , Datenpuffer
Print "Daten empfangen! Hex-Ansicht: ";
Color 10
Print getHexString( Datenpuffer )
If pruefsumme(Left(Datenpuffer, 6)) = Mid(Datenpuffer, 7, 1) Then
Select Case Left(Datenpuffer, 1)
Case Chr(&HA0) 'Spannung
Print "Spannung"; Datenpuffer[1] * 256 + Datenpuffer[2] + (Datenpuffer[3] / 10);" Volt"
Case Chr(&HA1) 'Strom
Print "Strom"; Datenpuffer[1] * 256 + Datenpuffer[2] + (Datenpuffer[3] / 100);" Ampere"
Case Chr(&HA2) 'Leistung
Print "Leistung"; Datenpuffer[1] * 256 + Datenpuffer[2];" Watt"
Case Chr(&HA3) 'Energie
Print "Leistung"; Datenpuffer[1] * 256^2 + Datenpuffer[2] * 256 + Datenpuffer[3];" Wh"
Case Chr(&HA4) 'Moduladresse
Print "Moduladresse";
If Datenpuffer[1] Or Datenpuffer[2] Or Datenpuffer[3] Or Datenpuffer[4] = 0 Then
Print " OK"
Else
Print " FEHLER"
EndIf
Case Chr(&HA5) 'Alarmschwelle
Print "Alarmschwelle";
If Datenpuffer[1] Or Datenpuffer[2] Or Datenpuffer[3] Or Datenpuffer[4] = 0 Then
Print " OK"
Else
Print " FEHLER"
EndIf
End Select
Else
Print "Prüfsummenfehler"
EndIf
Color 7
puffervor = 0
zaehler = 0
Else
zaehler += 1
EndIf
EndIf
End If
' Hat der Benutzer eine Taste gedrueckt?
Tastatur = Inkey
If( Tastatur = Chr(32) ) Then 'Leertaste
Print "Sende Daten! Hex-Ansicht: ";
Color 12
Print getHexString( KommandoA )
Color 7
Put #1, , KommandoA
End If
Sleep 3
Loop Until Tastatur = Chr(27) 'Escape
Print
Print "Schliesse Schnittstelle..."
' Schnittstelle schliessen:
Close #1
Print "Programm beendet."
GetKey
End 0
' String mit irgendwelchen Daten in Hex-Form ausgeben, um auch nicht-druckbare
' Zeichen einfach lesen zu koennen.
Function getHexString( Daten As String ) As String
Dim Laenge As Integer = Len( Daten )
If( Laenge < 1 ) Then
Return ""
End If
Dim HexAusgabe As String = ""
For i As Integer = 1 To Laenge
HexAusgabe &= Hex( Asc( Mid( Daten, i, 1 ) ), 2 ) & " "
Next i
Return HexAusgabe
End Function
Function pruefsumme(t As String) As String
Dim As Integer summe
If Len(t) < 6 Then
Return "FEHLER"
EndIf
For x As Integer = 0 To 5
summe += t[x]
Next
Return Chr(summe And &HFF)
End Function |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 14.11.2018, 18:32 Titel: |
|
|
Hallo grindstone,
ich bin beeindruckt, das man das machen kann ohne das man die beiden Platine zur Verfügung hat.
https://www.bilder-upload.eu/bild-7df8a9-1542215413.png.html
Machst du das mit den programmieren Hauptberuflich oder nur nebenbei?
Ich hab ja vor 25 Jahren mal mit GW-Basic angefangen und da war die Welt noch in Ordnung, schön durchnummerierte Zeilen und immer mit GOTO gesprungen, dann Q-Basic und in den vergangen 10 Jahren nichts mehr gemacht. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1208 Wohnort: Ruhrpott
|
Verfasst am: 14.11.2018, 21:59 Titel: |
|
|
eeg-grimm hat Folgendes geschrieben: | ich bin beeindruckt, das man das machen kann ohne das man die beiden Platine zur Verfügung hat. | Na ja, daß das Modul auf die Anfrage reagiert -also zumindest im Prinzip arbeitet-, geht ja aus deinem Beitrag hervor, und das Übertragungsprotokoll ist in dem Link am Anfang dieses Threads ausreichend genau beschrieben.
Zitat: | Machst du das mit den programmieren Hauptberuflich oder nur nebenbei? | Ist nur ein Hobby, allerdings schon seit Anfang der 80er. Zuerst ein programmierbarer Taschenrechner (TI59), dann C64, dann PC. Abgesehen vom Programmeschreiben haben es mir selbstgebaute oder umgebaute Peripheriegeräte angetan.
Sind das auf dem Screenshot echte Messwerte?
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
eeg-grimm
Anmeldungsdatum: 19.04.2006 Beiträge: 52 Wohnort: Herzogenaurach
|
Verfasst am: 15.11.2018, 08:38 Titel: |
|
|
Zitat: | Sind das auf dem Screenshot echte Messwerte? |
JA
Genau so ist die Bildschirmausgabe wenn man das Modul an 230V AC anschließt, Stromwandler ist nicht, noch nicht angeschossen.
Die angezeigte Spannung stimmt auch.
Am Ende der Veranstaltung sollen ja auch die Watt usw. angezeigt werden.
. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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.
|
|