Guten Tag miteinander Ich würde gerne wissen, wie ich meine Messdaten, welche über eine USB-Schnittstelle mit PuTTy problemlos dargestellt werden können, auch direkt in Excel augelistet werden können, d.h. nachwievor die neuen Werte in neue Zeilen gepusht werden könen? Nach stundenlangem gegoogle bin ich immer wieder auf verschiedenste xls-files gestossen, wobei leider keines dabei gewesen ist, welches diese Aufgabe übernimmt. Im programmieren bin ich leider nicht der Beste, als dass ich es selbst coden könnte;) An der USB Schnittstelle liegen folgende Daten an: Sens1:,Sens2:,Sens3:,Sens4:,Sens5:,Sens6 13,14,13,14,14,11 13,13,12,13,14,12 Im Excel-Sheet sollte dann die Darstellung wiefolgt aussehen: Sens1:|Sens2:|Sens3:|Sens4:|Sens5:|Sens6 ______|______|______|______|______|_____ 13 |14 |13 |14 |14 |11 ______|______|______|______|______|_____ 13 |13 |12 |13 |14 |12 ______|______|______|______|______|_____ Schon im Vorraus besten Dank für Eure Hilfe!
Rico H. schrieb: > Ich würde gerne wissen, wie ich meine Messdaten, welche über eine > USB-Schnittstelle mit PuTTy problemlos dargestellt werden können, auch > direkt in Excel augelistet werden können, d.h. nachwievor die neuen > Werte in neue Zeilen gepusht werden könen? Indem du eine Bibliothek besorgst und installierst, die es Excel erlaubt, auf die serielle Schnittstelle zuzugreifen (von sich aus kann Excel das nicht) und ein VBA-Programm schreibst, was dann diese Bibliothek benutzt.
c-hater schrieb: > Indem du eine Bibliothek besorgst und installierst, die es Excel > erlaubt, auf die serielle Schnittstelle zuzugreifen (von sich aus kann > Excel das nicht) und ein VBA-Programm schreibst, was dann diese > Bibliothek benutzt. Du meinst sowas?: Private Sub connect() 'Call this procedure to open the serial port '---------------Excel-specific part of code---------------- Dim sh As Shape Dim Reader As StrokeReader 'Go to Tools->References and add the reference to StrokeReader ActiveX 'This will insert the ActiveX into the current document Set sh = ActiveSheet.Shapes.AddOLEObject("STROKESCRIBE.StrokeReaderCtrl.1") Set Reader = sh.OLEFormat.Object.Object '---------------Common code for Excel and Word---------------- 'The shape name must match to CommEvent handler procedure name, see below sh.Name = "Reader" Reader.Port = 9 'Connect to COM9 --- Please specify YOUR port number here Reader.Connected = True 'Check the port is available If Reader.Error Then MsgBox Reader.ErrorDescription 'Or show the error description Exit Sub End If Reader.BaudRate = 9600 'Data transfer speed Reader.DataMode = Text 'Incoming data will be reported as a text string Reader.Send "123ABCD" 'How to transmit some data to serial port 'Shorten pins 2 and 3 of the serial port connector to receive this data back 'by the CommEvent handler procedure End Sub 'Simple serial port event handler. 'Expects only incoming data notifications and ignores all other notification types Private Sub Reader_CommEvent(ByVal Evt As StrokeReaderLib.Event, _ ByVal data As Variant) If Evt = EVT_DATA Then MsgBox data End If End Sub
Rico H. schrieb: > Du meinst sowas?: [...] Ja. Nun wäre bloß noch zu klären, woher dieser "StrokeReader" stammt. Im Lieferumfang von Excel ist er nicht, soweit ich weiß. Ich benutze für solche Zwecke immer mscomm.ocx, welches aus VB6 stammt und leider keine Freeware ist. Es gibt aber meines Wissens nach eine in Delphi geschriebene Freeware, die ein sehr ähnliches ActiveX-Control bereitstellt. Der Name dieser Lösung fällt mir jetzt allerdings um's Verrecken nicht ein. Ich glaube mich aber erinnern zu können, daß das Ding auf SourceForge gehostet wird.
c-hater schrieb: > mscomm.ocx, welches aus VB6 stammt Hmmm, VB6 kann aber auch mit Elexs.dll von Burkhard Kainka umgehen, das auf COM-Schnittstellen zugreifen kann. Ob's auch über USB geht, weiß ich nicht. Es ist aber zumindest schonmal Freeware. http://www.elexs.de/elexs2/elexsdll.htm Ich habe sie vor Jahren einmal hier verwendet: http://www.hanneslux.de/mobast/index.html ...
Viele Leute mit gleichen Problemen, wenige mit guten Lösungen : Hier im Forum : Beitrag "Daten von COM port in Excel einlesen" Weitere unter der Suchfunktion : "RSAPI", "Daten über COM" usw. Website von M. Schwimmer http://michael-schwimmer.de/xlMain.htm Thema 72: Datenübertragung mit der seriellen Schnittstelle Thema 117: Serielle Schnittstelle #2 (Office 2010) Elektronik-Labor, B. Kainka, Elexs, AK Modulbus: Verwendung RSAPI.dll Buchtip "MSR mit Word und Excel" http://www.b-kainka.de/buch2.htm FAQ zu "MSR mit Word und Excel" http://www.b-kainka.de/msrwefaq.htm Programmier-Beispiel VBA-RSAPI für Interface "Serai 812" http://www.elexs.de/modulbus/technik/serai.html Office Forum http://www.office-loesung.de/ , Suche: RSAPI USB Excel Daten von Schnittstelle holen und in Office einbinden http://www.office-loesung.de/ftopic21028_0_0_asc.php USB Com-Port, RS232, Daten auslesen und direkt in Excel einbinden http://www.office-loesung.de/ftopic452544_0_0_asc.php http://www.office-loesung.de/ftopic58639_0_0_asc.php http://www.office-loesung.de/ftopic328007_0_0_asc.php Am Ende der Threads gibt es oft noch Links zu ähnlichen Beiträgen. Datenerfassung per Schnittstelle, z.B. im Menü Standardprogramme (Extract!, Serikey! u.a.) http://www.serielleschnittstelle.de/ Software zur Datenerfassung, USB, RS232 u.a., Einbindung in Excel u.a. http://www.tec-it.com/de/software/data-acquisition/Default.aspx
So, hab nun folgendes gefunden. Zum Einen die benötigte Bibliothek für Excel und zum Andern ein Beispielcode um die Schnittstelle zu überprüfen und die Daten zu loggen. Jetzt hab ich noch das Problem, dass die Daten in HEX ausgegeben werden, gibt es hier jemanden, der Ahnung von VB-Codes hat?? Beim Ersten hinschauen sind mir folgende Zeilen des Codes ins Auge gestochen: If lDataLenth >= 1 Then 'bytes to Hex string For l = 0 To lDataLenth - 1 s = s & Right("0" & Hex(buffer(l)), 2) Next l 'show information in the panel lIndex = lIndex + 1 lblIndex5.Caption = lblIndex4.Caption lblIndex4.Caption = lblIndex3.Caption lblIndex3.Caption = lblIndex2.Caption lblIndex2.Caption = lblIndex1.Caption lblIndex1.Caption = CStr(lIndex) lblInBuffer5.Caption = lblInBuffer4.Caption lblInBuffer4.Caption = lblInBuffer3.Caption lblInBuffer3.Caption = lblInBuffer2.Caption lblInBuffer2.Caption = lblInBuffer1.Caption lblInBuffer1.Caption = Format(s, "!&&" & ReCopyStr(31, " &&")) 'show data in the Excel file lMinLenth = Val(cboDataLenth.Text) lMinLenth = IIf(lMinLenth >= 1, lMinLenth, 1) If lDataLenth >= lMinLenth Then lCount = lCount + 1 'input data counter If lCount = 1 Then sngBegin = sngNow 'get the begin time(when first data income) If BAUDRATE_IN_FIRST_DATA Then stData.Cells(2, 5 + (lDataLenth \ 2)) = LVal(Right(s, 2) & "00") 'get baudrate value End If End If lRow = lCount + 1 'Row number If lRow = 65536 Then bStopFlag = True 'auto stop when sheet is full stData.Cells(lRow, 1) = (sngNow - sngBegin) stData.Cells(lRow, 2) = s If lDataLenth >= 2 Then stData.Cells(lRow, 5) = LVal(Mid(s, 1, 4)) If lDataLenth >= 4 Then stData.Cells(lRow, 6) = LVal(Mid(s, 5, 4)) If lDataLenth >= 6 Then stData.Cells(lRow, 7) = LVal(Mid(s, 9, 4)) If lDataLenth >= 8 Then stData.Cells(lRow, 8) = LVal(Mid(s, 13, 4)) If lDataLenth >= 10 Then stData.Cells(lRow, 9) = LVal(Mid(s, 17, 4)) If lDataLenth >= 12 Then stData.Cells(lRow, 10) = LVal(Mid(s, 21, 4)) If lDataLenth >= 14 Then stData.Cells(lRow, 11) = LVal(Mid(s, 25, 4)) If lDataLenth >= 16 Then stData.Cells(lRow, 12) = LVal(Mid(s, 29, 4)) If lDataLenth >= 18 Then stData.Cells(lRow, 13) = LVal(Mid(s, 33, 4)) If lDataLenth >= 20 Then stData.Cells(lRow, 14) = LVal(Mid(s, 37, 4)) If lDataLenth >= 22 Then stData.Cells(lRow, 15) = LVal(Mid(s, 41, 4)) If lDataLenth >= 24 Then stData.Cells(lRow, 16) = LVal(Mid(s, 45, 4)) End If End If Ist es möglich die Daten Dezimal darzustellen? Wenn ja, wie? Besten Dank im vorraus
Ich mache dass normalerweise immer mit CSV-Dateien. Ich speichere die Daten einfach als Tabulator getrenntem Text Man kann aber auch die Beistriche als Trennzeichen verwenden. Wenn man diese CSV-Datei mit Excel öffnet, werden die Texte richtig interpretiert und in das Tabellenblat eingefügt, wo man sie weiterverarbeiten kann. Wenn ich die Daten ins laufende Excel "live" einlesen will verwende ich VBA und greife auf die Windows API zu. Da kann man dann auf die serielle Schnittstelle(Hardware- / Software RS232) zugreifen ohne irgendetwas installieren zu müssen. Die Befehle stehen hier: http://msdn.microsoft.com/en-us/library/Aa363194 Also einfach zuerst mit CreateFile den Handle zur Schnittstelle erstellen, dann mit SetCommState und SetCommTimeouts konfigurieren und zum Schluss mit ReadFile und WriteFile Daten senden und lesen. Und am Ende, wenn man die Schnittstelle nicht mehr benötigt wird der Handle mit CloseHandle geschlossen. Die API-Befehle muss man dem VBA aber noch bekannt geben bevor man sie verwendet. CreateFile: http://www.vbarchiv.net/api/api_createfile.html SetCommState: http://www.activevb.de/rubriken/apikatalog/deklarationen/setcommstate.html SetCommTimeouts http://www.activevb.de/rubriken/apikatalog/deklarationen/setcommtimeouts.html Den Aufbau der Structe findet man im VBA.
Rico H. schrieb:
> Ist es möglich die Daten Dezimal darzustellen?
Ich kann es jetzt leider nicht ausprobieren, aber ich denke, daß es in
VBasic für Excel die Funktion Val(...) zur Umwandlung
String->Dezimalzahl gibt, wobei Dezimalzahl dann eben eine Zahl und
keine Zeichenkette ist.
Das ist in der Tabellenzelle i.d.R. egal. Funktion LVal(...) kenne ich
nicht, sie macht wohl String->Hexzahl, wobei ich nicht sicher bin, ob
man das so in eine Zelle schreiben kann. Muß leider weg, bis später.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.