Möchte Daten von einem ESP32 via RS 232 in ein VB-Programm übertragen. Ich benutze einen Akozon PL2303HX RS-232 zu USB Adapter. Der Driver für den Adapter ist installiert und stellt brav Port 5 zur Verfügung. Der Adapter wandelt auf 5 Volt Level um und hat nur 4 Anschlüsse: +5 Volt, Gnd, Tx, Rx Ich habe Rx des Adapters mit Tx der seriellen Schnittstelle des ESP und natürlich Gnd mit Gnd verbunden. Ein Sketch sendet jede Sekunde einen String an die Serielle Schnittstelle. In VB nutze ich das Microsoft Comm Control. Ich initialisiere das Control mit "9600,N,8,1" Die Serielle Schnittstelle im Sketch enthält natürlich auch: Serial.begin(9600); Angeblich soll das MSComm-Controll auf input "lauschen" und wenn daten eintrudeln den Event "MSComm1_OnComm()" auslösen. Tut es auch aber nur einmal und zwar wenn ich den ESP resete. Der Comm-Event wird also nur einmal ausgelöst und dann nicht mehr. Er sollte aber jedesmal wenn Daten kommen, ausgelöst werden. Ich bekomme auch eben ein einziges mal Daten und die sind identisch mit der ersten Zeile, die das Arduino-Terminal ausgibt (werden also richtig übertragen). Die Daten erscheinen definitiv am Tx-Pin (geprüft mit Oszillograph). Liegt es an der Einstellung des COmm-COntroll? Welche Eingriffsmöglichkeiten habe ich da überhaupt? Hat Jemand Erfahrung mit dem MSComm-Controll? Probier schon eine Weile rum aber mir sind die Ideen ausgegangen.
:
Bearbeitet durch User
Manfred H. schrieb: > In VB nutze ich das Microsoft Comm Control. > Ich initialisiere das Control mit "9600,N,8,1" Was für ein VB benutzt Du? Unter VS2017, VB.NET, sieht es so aus.
1 | Imports System.IO.Ports |
2 | ...
|
3 | ...
|
4 | Protected COM As SerialPort |
5 | ...
|
6 | ...
|
7 | |
8 | ' Create the serial port |
9 | COM = New SerialPort(strRegComPortName, iBaudrate, FT_Parity_Str2Parity(strParity), iDatenBits, FT_StopBit_Int2StopBit(iStoppBits)) |
So wie es aussieht verwendest Du VB 6.0. Etwas aus der Steinzeit. Dafür habe ich so eben noch nicht einmal ein Beispiel gefunden. Unter Win10 dürftest Du da ein paar Probleme haben, so könnte ich mir das vorstellen. Hier ein aktuelleres Beispiel, ein Link zum heutigen VB.NET https://www.vb-paradise.de/index.php/Thread/124371-Serial-Port/ Was Du brauchst ist Visual Studio Community. Da ist VB.NET dabei. Es ist kostenlos. Es braucht aber schon mehr als 1 GB Platz auf der Festplatte. https://visualstudio.microsoft.com/de/downloads/ mfg klaus
Vielen Dank für die Antwort. Mit der "Steinzeit" hast Du leider schon recht. Aber genau das ist mein Problem. Ich habe hunderte Programme in VB6 geschrieben von denen ich noch viele benutze. Einen Versuch die alle nach .net zu portieren habe ich gleich wieder aufgegeben. Da kann ich sie auch gleich neu schreiben. Ich möchte auch nicht zwischen zwei Entwicklungsebenen ständig hin und her springen. Ich habe inzwischen das MSComm Problem ein wenig eingekreist. Die Daten werden richtig übertragen. Es wird aber eben nur einmal nach der ersten Übertragung ein Event ausgelöst. Es kommen aber immer weiter daten an. Da beim lesen des Inputs der Inputbuffer geleert wird, kann ich erkennen, wann neue daten angekommen sind. Das Problem ist nur, das Ende der Übertragung zu erkennen. Das heisst, ich muss am Ende der Daten irgend einen Character (am besten 0x04 = EOT) anfügen und die inputs solange zusammenpuzzeln bis EOT kommt. Das geht zur Not, ist aber aufwändig. Ich habe den Eindruck, dass für das Comm Modul die allererste Übertragung nicht abgeschlossen wird und deshalb kein neuer Event ausgelöst wird. Habe probiert mit EOT (0x04) am Ende der Daten aber das juckt das Comm nicht. Gibt es möglicherweise noch andere Terminierungs Characters? Oder hast Du eine Idee?
Versuch mal Folgendes, nachdem du PortOpen auf True festgelegt hast:
1 | MSComm1.RThreshold = 1 |
2 | MSComm1.SThreshold = 1 |
3 | MSComm1.InputLen = 0 |
Soweit ich gelesen habe, sind RThreshold und SThreshold standardmäßig 0 und unterbinden so das OnComm-Ereignis.
Manfred H. schrieb: > Ich habe hunderte Programme in VB6 geschrieben von denen ich > noch viele benutze. Ich hatte zur Jahrtausendwende auch manches in VB 6 geschrieben. Aber mehr Spass kam dann mit VB.Net auf. Wenn ich jetzt lese, man braucht unter VB 6 u.U. OCXe, kommt das Grauen mir wieder leicht hoch. Unter VB 6 war die serielle Schnittstelle schon vollausgereift und machte eigentlich keine Probleme. Aber, konnte man damals nicht sogar noch unter VB 6 mit Peek und Poke arbeiten? Heute ist vieles strukurierter und gekapselt, man wird sogar dazu gezwungen so zu arbeiten. Und ob VB 6 unter WIN10 noch in allem kompatibel ist bezweifle ich, bestenfalls läuft noch so manches, aber nicht alles. Meine VB 6 Literatur habe ich mit der letzten Papiersammlung entsorgt. Du findest ja auch keinen Support mehr. mfg Klaus
Manfred H. schrieb: > Das heisst, ich muss am Ende der Daten > irgend einen Character (am besten 0x04 = EOT) anfügen und die inputs > solange zusammenpuzzeln bis EOT kommt. Etwas fällt mit in der Tat noch ein. Ich habe aktuell einen Aussensensor der mir über einen ESP8266 D1 Mini über eine serielle Verbindung Daten liefert. Das Protokoll nutzt nur GND, RXD und TXD. Also echt rudimentär. Eine ähnliche Verbindung nutze ich schon seit 2012 zum Auslesen von Stromzählern. Es traten bisher keine Störungen auf. Ziel ist ein Win8.1 Rechner. Entwickelt habe ich auf WIN7 und jetzt auf WIN10. Selbst der WIN8.1 Rechner hat keine serielle Schnittstelle mehr. Es geht alles über einen USB Serial Adapter. Ich habe mich für einen Digitus Adapter entschieden, vor allem weil dort ein FTDI / FT232RL Chipsatz zum Einsatz kommt. Reichelt bietet den Adapter für ca. 11 € an. https://www.digitus.info/de/produkte/computer-und-office-zubehoer/computer-zubehoer/usb-komponenten-und-zubehoer/schnittstellen-adapter/da-70156/
1 | Der Seriell-Adapter mit einem 9-poligen D-SUB Stecker verfügt über einen FTDI / FT232RL Chipsatz für eine individuelle Konfiguration und Full-Duplex Daten-Übertragung mit bis zu 128 Mbit/s. |
Eigentlich braucht eine klassische serielle Schnittelle RS232 neben TXD und RXD, noch Signalleitungen zur Flusssteuerung, wie RTS, CTS oder DTR. Die heutigen Chipsätze sind inteligenter und erkennen die Statie auch ohne diese speziellen Steuerleitungen, zumindest im Regelfall. Vielleicht liegt es ja an Deinem Akozon PL2303HX RS-232 zu USB Adapter. Der Digitus Hersteller kommt aus Lüdenscheid. mfg Klaus
:
Bearbeitet durch User
Klaus R. schrieb: > Aber, konnte man damals nicht sogar noch > unter VB 6 mit Peek und Poke arbeiten? Um die serielle Schnittstelle anzusteuern? Ich fürchte, da bist du selbst mit der Jahrtausendwende ein paar Jahrzehnte zu spät dran...
So, das Problem ist gelöst. Dein Tip mit dem Inputbuffer Threshold war der Durchbruch. Der Event kommt jetzt und die Daten werden korrekt übertragen. Danke nochmal. Ich habe eine "Null-Modem" Verbindung und im Comm-Controll die Einstellung "No Protokoll". Damit sind allen anderen Signal (DTS, RTS usw) obsolet. ZU VB6: Wer VB6 belächelt, hat noch nie richtig damit gearbeitet. Man kann damit richtig giftige Sachen machen, speziell wenn man das API nutzt. Und wenn man richtig programmiert und compiliert, steht eine VB6-Anwendung in Sachen Performance einer C-Anwendung in nichts nach. Ich kann auch C, aber VB6 ist unschlagbar in Sachen "rapid prototyping". Ich betreibe intensive Forschung im Bereich KI. Ich habe ein neues Neuronales Netz entwickelt das quasi "omnipotent" ist. Die heute so existierenden Neuronalen Netze und speziell die CNN's (Convolutional Neural Nets) sind nur zum zuordnen ähnlicher Formen zu gebrauchen. Mein Netz kann Daten assoziativ speichern, Aussagen in der Prädikaten und Aussagelogik machen, iterative Prozesse abbliden usw. Und das alles ohne das Netz auf eine bestimmte Funktion extra einstellen zu müssen. Es kann alles gleichzeitig. Ich habe (bevor es .net gab) in VB6 Mein Netz implementiert und dazu jede Menge graphischer Analyse-Tools. Wie gesagt, den Versuch, dieses riesen Projekt nach .net zu potieren habe ich gleich wieder aufgegeben. Zum Abschluss eine ganz andere Frage: Ich noch mehrere Sachen gepostet, die sind bis jetzt noch nicht in einer Forenlist aufgetaucht. Gibt es dafür einen speziellen Grund oder mache ich was falsch? Wie kontaktiere ich einen Admin? Ich habe nämlich noch ein dringendes Problem: Da mein Neuronales Netz natürlich auch ähnliche Formen zuordnen kann, möchte ich eine neue Art der Spracherkennung implementieren. Wenn man Alexa bittet, ein Wort zu buchstabieren, dann kann sie das auch. Aber nur, wenn das Wort als Text hinterlegt ist. Gibt man ihr ein Fantasiewort, streckt Alexa die Waffen. Alexa kann also nicht einzelne Buchstaben erkennen. Die Spracherkennung von Alexa ist zwar gut genug für eine Breitenanwendung aber noch lange nicht perfekt. Sie hat immer noch Probleme mit Hintergrundgeräuschen. Ich entwickle gerade eine mobile off-line Spracherkennung, die auf meinem Neuronalen Netz basiert. Ich habe dafür den ESP32 vorgesehen. Rechenleistung und Speicher sollten genügen. Zum "aufdröseln" des Audiosignals benutze ich die Bibliothek: "fix_fft". Zur Analyse und Auswertun schicke ich Daten an meine VB-Software. Das funktioniert auch alles, aber nur auf dem Arduino Uno und noch nicht auf dem ESP32. Wenn ich den Sketch für den ESP32 compiliere, kommt die Fehlermeldung: fatal error: avr/pgmspace.h: No such file or directory Ich habe das Problem gepostet, aber der post erscheint nicht.
:
Bearbeitet durch User
> Wer VB6 belächelt, hat noch nie richtig damit gearbeitet. Stimmt. VB6 hat auch NativeCompiler, und sogar (man glaubt es nicht) Pointer, und auch ASM kann man reinbauen (ups, wer weiss das schon?) und kann immerhin das ganze WIN32API und viele Libs einbinden. Menus sind ruckzuck zusammen geklickt. > Ich kann auch C, aber VB6 ist unschlagbar in Sachen "rapid prototyping". Viele sag(t)en, sie programmieren in C, machen das aber in VB (!) und tun es dann nach C konvertieren um das dann vorzustellen.
> Heute ist vieles strukurierter und gekapselt,
Unter .Net ist quasi der ganze Sourcecode offen gelegt
MCUA schrieb: > VB6 hat auch NativeCompiler, und sogar (man glaubt es nicht) Pointer, > und auch ASM kann man reinbauen (ups, wer weiss das schon?) und kann > immerhin das ganze WIN32API und viele Libs einbinden. Naja, von VB6 aus kann man DLLs benutzen, ich nenne die mal API-Funktionen. Das ist schon sehr mächtig. Ich weiß, dass man mit VB6 und VarPtr einen Pointer auf ein Objekt bekommen kann, aber innerhalb der Sprache kann man damit nicht viel anfangen (man kann sie an eine API-Funktion übergeben, logisch). Gibt es da sonst noch was? Wie man ASM ohne API-Funktionen reinbauen will, ist mir auch nicht ganz klar. Man könnte ein Array mit dem Binärcode bauen und dann an eine DLL übergeben, oder gibt es da bessere Wege? Was den Compiler angeht, habe ich im Hinterkopf, dass VB3 schlicht den Quelltext plus einen Interpreter in die EXE packt, und spätere Versionen zu "p-Code" kompilieren, der dann in einer VM ausgeführt wird. So richtig "native Code" ist das nicht. Ich habe mit VB6 angefangen, daher interessiert mich das wirklich. So eine Umgebung hätte ich unter Linux schon gerne wieder, denn die Entwicklung damit hat wirklich Spaß gemacht. Eins meiner ersten Programme in VB6 wird immernoch täglich benutzt. :-)
Nein, Pointer u ASM nur über Umwege. (Visual)Basic ist schliesslich kein Assembler (damit hätte MS ja Leute vergrault (die noch nie eine CPU von innen gesehen haben). VB6 kann nativ die .Exe erzeugen (was allerdings nicht heissen muss dass es deswegen sehr effizient sein muss; wohl aber meist ausreichend fürn PC-Programm)
Also sind alle deine Aussagen von weiter oben mit Sternchen und kleingedruckter Fußnote zu verstehen. Deckt sich mit meinem Verständnis.
Hallo, hilft vermitlich nicht weiter, aber: meine alte LogicAnalyzer Software ist in VB6 geschrieben und redet mit einem AVR. VB6 läuft verblüffenderweise auch noch problemlos unter Win10 Pro/64 im XP Kompatibilitätsmode. Das Schlimme ist, daß ich mich da nach Jahren erstmal selber durchwühlenb müßte... Ich habe Open_Com() und MSComm_OnComm() mal in eine Textdatei kopiert und hier angehängt, vielleicht hilft es Dir ja etwas weiter. Gruß aus Berlin Michael
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.