DIGITALMULTIMETER VC 840 über Serielle Schnittstelle auslese

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

DIGITALMULTIMETER VC 840 über Serielle Schnittstelle auslese

Beitrag von legion »

Hallo Leute !

Hab mal probiert das DIGITALMULTIMETER VC 840 von Conrad Elektronik über die serielle Schnittstelle auszulesen.
Vielleicht kann es wer brauchen ?

Lg.
Legion

Bild

Code: Alles auswählen

#Zahl0 = "1111101"
#Zahl1 = "0000101"
#Zahl2 = "1011011"
#Zahl3 = "0011111"
#Zahl4 = "0100111"
#Zahl5 = "0111110"
#Zahl6 = "1111110"
#Zahl7 = "0010101"
#Zahl8 = "1111111"
#Zahl9 = "0111111"
;-------------------------------------------------------------------------------------------------------------
Global HCom
Global *MyBuffer2 = AllocateMemory(255)
Global ByteString.s = "1234567890ABCD"
Global MessZyklus = 250
Global ErsteZahlvonRecht.s,ZweiteZahlvonRechts .s,DritteZahlvonRechts.s,VierteZahlvonRechts.s
;-------------------------------------------------------------------------------------------------------------
Procedure ReadDataCom()
 ComRead(Hcom,*MyBuffer2,ComInputBufferCount(Hcom))
 ByteString = PeekS(*MyBuffer2)
EndProcedure
;-------------------------------------------------------------------------------------------------------------
Procedure.s ZahlenDecodieren()
  Protected Result.s
  ReciveBytes.s = ""
  BinData.s = ""
  For u = 0 To 13
   ReciveBytes = ReciveBytes + Right("00" + Hex(PeekB(@ByteString + u)),2)+ " "
   BinData = BinData + Right("0000" + Bin(PeekB(@ByteString + u)),4)
  Next u
  If Mid(BinData, 30, 7) = #Zahl0 : ErsteZahlvonRecht = "0" : EndIf
  If Mid(BinData, 30, 7) = #Zahl1 : ErsteZahlvonRecht = "1" : EndIf
  If Mid(BinData, 30, 7) = #Zahl2 : ErsteZahlvonRecht = "2" : EndIf
  If Mid(BinData, 30, 7) = #Zahl3 : ErsteZahlvonRecht = "3" : EndIf
  If Mid(BinData, 30, 7) = #Zahl4 : ErsteZahlvonRecht = "4" : EndIf
  If Mid(BinData, 30, 7) = #Zahl5 : ErsteZahlvonRecht = "5" : EndIf
  If Mid(BinData, 30, 7) = #Zahl6 : ErsteZahlvonRecht = "6" : EndIf
  If Mid(BinData, 30, 7) = #Zahl7 : ErsteZahlvonRecht = "7" : EndIf
  If Mid(BinData, 30, 7) = #Zahl8 : ErsteZahlvonRecht = "8" : EndIf
  If Mid(BinData, 30, 7) = #Zahl9 : ErsteZahlvonRecht = "9" : EndIf
  
  If Mid(BinData, 22, 7) = #Zahl0 : ZweiteZahlvonRechts = "0" : EndIf
  If Mid(BinData, 22, 7) = #Zahl1 : ZweiteZahlvonRechts = "1" : EndIf
  If Mid(BinData, 22, 7) = #Zahl2 : ZweiteZahlvonRechts = "2" : EndIf
  If Mid(BinData, 22, 7) = #Zahl3 : ZweiteZahlvonRechts = "3" : EndIf
  If Mid(BinData, 22, 7) = #Zahl4 : ZweiteZahlvonRechts = "4" : EndIf
  If Mid(BinData, 22, 7) = #Zahl5 : ZweiteZahlvonRechts = "5" : EndIf
  If Mid(BinData, 22, 7) = #Zahl6 : ZweiteZahlvonRechts = "6" : EndIf
  If Mid(BinData, 22, 7) = #Zahl7 : ZweiteZahlvonRechts = "7" : EndIf
  If Mid(BinData, 22, 7) = #Zahl8 : ZweiteZahlvonRechts = "8" : EndIf
  If Mid(BinData, 22, 7) = #Zahl9 : ZweiteZahlvonRechts = "9" : EndIf
  
  If Mid(BinData, 14, 7) = #Zahl0 : DritteZahlvonRechts = "0" : EndIf
  If Mid(BinData, 14, 7) = #Zahl1 : DritteZahlvonRechts = "1" : EndIf
  If Mid(BinData, 14, 7) = #Zahl2 : DritteZahlvonRechts = "2" : EndIf
  If Mid(BinData, 14, 7) = #Zahl3 : DritteZahlvonRechts = "3" : EndIf
  If Mid(BinData, 14, 7) = #Zahl4 : DritteZahlvonRechts = "4" : EndIf
  If Mid(BinData, 14, 7) = #Zahl5 : DritteZahlvonRechts = "5" : EndIf
  If Mid(BinData, 14, 7) = #Zahl6 : DritteZahlvonRechts = "6" : EndIf
  If Mid(BinData, 14, 7) = #Zahl7 : DritteZahlvonRechts = "7" : EndIf
  If Mid(BinData, 14, 7) = #Zahl8 : DritteZahlvonRechts = "8" : EndIf
  If Mid(BinData, 14, 7) = #Zahl9 : DritteZahlvonRechts = "9" : EndIf
  
  If Mid(BinData, 6, 7) = #Zahl0 : VierteZahlvonRechts = "0" : EndIf
  If Mid(BinData, 6, 7) = #Zahl1 : VierteZahlvonRechts = "1" : EndIf
  If Mid(BinData, 6, 7) = #Zahl2 : VierteZahlvonRechts = "2" : EndIf
  If Mid(BinData, 6, 7) = #Zahl3 : VierteZahlvonRechts = "3" : EndIf
  If Mid(BinData, 6, 7) = #Zahl4 : VierteZahlvonRechts = "4" : EndIf
  If Mid(BinData, 6, 7) = #Zahl5 : VierteZahlvonRechts = "5" : EndIf
  If Mid(BinData, 6, 7) = #Zahl6 : VierteZahlvonRechts = "6" : EndIf
  If Mid(BinData, 6, 7) = #Zahl7 : VierteZahlvonRechts = "7" : EndIf
  If Mid(BinData, 6, 7) = #Zahl8 : VierteZahlvonRechts = "8" : EndIf
  If Mid(BinData, 6, 7) = #Zahl9 : VierteZahlvonRechts = "9" : EndIf
;-------------------------------------------------------------------------------------------------------------  
  ;Trennzeichen decodieren
  If Mid(BinData, 13, 1) = "1" : Tausendertrennzeichen.s = "."
  Else 
  Tausendertrennzeichen.s = "" 
  EndIf
  If Mid(BinData, 21, 1) = "1" : Hundertertrennzeichen.s = "."
  Else 
  Hundertertrennzeichen = "" 
  EndIf  
  If Mid(BinData, 29, 1) = "1" : Zehnertrennzeichen.s = "."
  Else 
  Zehnertrennzeichen = "" 
  EndIf   
;-------------------------------------------------------------------------------------------------------------  
  If Mid(BinData, 5, 1) = "1" : Minuszeichen.s = "-"
  Else   
  Minuszeichen = ""
  EndIf
;-------------------------------------------------------------------------------------------------------------  
  Result.s = Minuszeichen+VierteZahlvonRechts+Tausendertrennzeichen+DritteZahlvonRechts+Hundertertrennzeichen+ZweiteZahlvonRechts+Zehnertrennzeichen+ErsteZahlvonRecht
 
  ProcedureReturn Result
EndProcedure

HCom = ComOpen("Com2: baud=2400 parity=N data=8 stop=1",0,255,255)
StartTimer(MyTimer1,MessZyklus,@ReadDataCom())
For i= 1 To 100     
Debug ValD(ZahlenDecodieren())
Delay(250)
Next i

EndTimer(MyTimer1)
ComClose(hCom)
FreeMemory(*MyBuffer2)
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
bbakte
Beiträge: 5
Registriert: 21.12.2008 01:13
Wohnort: (bei) Münster in Westfalen

Re: DIGITALMULTIMETER VC 840 über Serielle Schnittstelle auslese

Beitrag von bbakte »

Vom System her OK aber der Compiler gibt zu den Zeilen:
19, 99, 100, 106 und 107 die fuer mich unverständliche Meldung "ComRead() ist keine Funktion, Array, Makro oder LinkedList" aus.

Ein VC 840 besitze ich, die Funktion könnte ich nutzen aber leider geht Dein Source-Code bei mir nicht.

Herzliche Grüße

bbakte

PB 4.31 - XP SP3
PB 4.5 Voll. - WIN7 (64Bit) -
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: DIGITALMULTIMETER VC 840 über Serielle Schnittstelle auslese

Beitrag von ts-soft »

@bbakte

Der Sourcecode ist fast 3 Jahre alt. Leider fehlt auch der Hinweis das 2 UserLibs erforderlich sind,
ist wohl untergegangen, weil wohl nicht soviele Leute dieses Meßinstrument besitzen.

Wenn Du Dir selber helfen möchtest, dann mußte Dir nur die erforderlich Userlib für
die serielle Schnittstelle auf PureArea.net laden, wegen der Funktionsbeschreibung
und diese Befehle dann auf die jetzt verfügbaren nativen Funktonen (lib SerialPort)
umschreiben. Die alte lib ist wahrscheinlich die MVCOM lib.

Desweiteren nutzt der Source den Timer aus PBOSL, diesen Code kannste auch
ersetzen, durch diesen: http://www.purebasic.fr/german/viewtopi ... 05#p110805

Mangels Testmöglichkeiten und eigenem Interesse kann ich Dir aber keinen fertigen
Code präsentieren. Vielleicht antwortet legion ja auch noch.

Gruß
Thomas
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Re: DIGITALMULTIMETER VC 840 über Serielle Schnittstelle auslese

Beitrag von legion »

Hallo!

TS-Soft hat bereits alles richtig erkannt. :wink:
Die MVCOM-Lib war die Version 12.
Fals die Lib nicht mehr zum Laden geht, ich hab sie noch
auf meiner Platte.

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Antworten