Seite 1 von 1

DIGITALMULTIMETER VC 840 über Serielle Schnittstelle auslese

Verfasst: 04.03.2007 12:00
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)

Re: DIGITALMULTIMETER VC 840 über Serielle Schnittstelle auslese

Verfasst: 29.12.2009 16:00
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

Re: DIGITALMULTIMETER VC 840 über Serielle Schnittstelle auslese

Verfasst: 29.12.2009 16:42
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

Re: DIGITALMULTIMETER VC 840 über Serielle Schnittstelle auslese

Verfasst: 29.12.2009 18:39
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