| 
				
					|  | 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 |  |  
		|  |  
		| Sebastian Administrator
 
  
 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.
  _________________
 
   Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
 |  |  
		| Nach oben |  |  
		|  |  
		| 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 |  |  
		|  |  
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 30.12.2017, 11:09    Titel: |   |  
				| 
 |  
				| Hmmm... 	  | eeg-grimm hat Folgendes geschrieben: |  	  | Am IC steht CN480661 Das IC ist von der Firma FTDI mit der Bezeichnung FT232RL
 | 
 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 |  |  
		|  |  
		| 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 |  |  
		|  |  
		| 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 |  |  
		|  |  
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 31.12.2017, 20:11    Titel: |   |  
				| 
 |  
				| 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. 	  | Steini63 hat Folgendes geschrieben: |  	  | ...dass die Spannungen 0V (statt -12V) und 5V (statt 12V) betragen; TTL-Pegel eben. | 
   
 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 |  |  
		|  |  
		| 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 |  |  
		|  |  
		| 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 |  |  
		|  |  
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 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 |  |  
		|  |  
		| 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 |  |  
		|  |  
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 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 |  |  
		|  |  
		| 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 |  |  
		|  |  
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 13.11.2018, 23:36    Titel: |   |  
				| 
 |  
				| 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). 	  | 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. | 
 
 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 |  |  
		|  |  
		| eeg-grimm 
 
 
 Anmeldungsdatum: 19.04.2006
 Beiträge: 52
 Wohnort: Herzogenaurach
 
 |  |  
		| Nach oben |  |  
		|  |  
		| 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 |  |  
		|  |  
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 14.11.2018, 21:59    Titel: |   |  
				| 
 |  
				| 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. 	  | eeg-grimm hat Folgendes geschrieben: |  	  | ich bin beeindruckt, das man das machen kann ohne das man die beiden Platine zur Verfügung hat. | 
 
 
 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. 	  | Zitat: |  	  | Machst du das mit den programmieren Hauptberuflich oder nur nebenbei? | 
 
 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 |  |  
		|  |  
		| 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 |  |  
		|  |  
		|  |  
  
	| 
 
 | 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.
 
 |  |