Forum: PC-Programmierung USB-Experimente in PASCAL


von Manfred M. (manfred474)


Lesenswert?

Moin zusammen,

ich bin seit 10 Minuten in eurem Forum angemeldet. Sehr ergiebig und 
informativ! Und dann komme ich auch schon mit meinem Problem:

Ich wollte endlich mal verstehen, wie diese ganze Geschichte USB <--> 
Seriell wirklich funktioniert. Habe mir also mutig das Franzis Lernpaket 
"Experimente mit USB" bestellt. Klappt ja soweit auch alles ganz gut, 
die Beispielprogramme tun, was sie sollen (na ja, jedenfalls alle die, 
die LEDs blinken lassen). Nun würde ich natürlich gern mit diesen 
Programmen auch "spielen", um dabei was zu lernen (mal 'n Parameter 
ändern, 'ne weitete LED hinzunehmen usw.) Aber: Die Programme sind in VB 
geschrieben. Problem: VB hab ich nicht! Dass man das braucht, wird von 
Franzis schlicht verschwiegen, ja, es findet sich nicht einmal ein 
winziger Hinweis darauf, welche Version man braucht (bzw. ab welcher 
Version ...). - Ok, vielleicht bin ich des Lesens nicht mächtig und hab 
einen solchen Hinweis nur nicht gefunden?

Immerhin findet sich im Haudbuch (auf CD) in einem bedeutungsschwangeren 
Nebensatz der Hinweis, dass all die Programme auch "leicht nach z.B. 
Pascal übertragbar" seien. Puh, na immerhin was ... (Pascal ist für mich 
so was wie 'ne Muttersprache.) Aber ok. Nur leicht übertragbar?

Ich mach's kurz: Hat irgendjemand von euch ein - und sei es auch nur 
winzig kleines - Musterprogramm in Pascal? Eine blinkende LED oder 
irgendsowas, woraus die Grundstruktur eines passenden Programms 
ersichtlich wird? Mein ewiger Dank steht schon in den Startlöchern und 
wartet nur noch auf einem Empfänger ...

Moin moin,
Manfred

: Verschoben durch User
von c-hater (Gast)


Lesenswert?

Manfred M. schrieb:

> Aber: Die Programme sind in VB
> geschrieben. Problem: VB hab ich nicht! Dass man das braucht, wird von
> Franzis schlicht verschwiegen, ja, es findet sich nicht einmal ein
> winziger Hinweis darauf, welche Version man braucht (bzw. ab welcher
> Version ...)
[...]
> Immerhin findet sich im Haudbuch (auf CD) in einem bedeutungsschwangeren
> Nebensatz der Hinweis, dass all die Programme auch "leicht nach z.B.
> Pascal übertragbar" seien.

Wenn das so ist, dürfte die genaue VB-Version keine grosse Rolle 
spielen. Sprich: es wird sicher deutlich einfacher sein, ggf. auf eine 
andere Version von VB zu portieren als nach Pascal.

Im übrigen: in den Projektdateien (heissen *.vbproj, sind im Kern 
menschenlesbare XML-Dateien) steht die VB-Version quasi im Klartext 
drin, genauso wie die Version des benutzten .Net-Framework, letztere ist 
direkt ablesbar, erstere muss allerdings mit Hilfe von Google noch in 
die offizielle Produktbezeichnung "umgerechnet" werden.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

c-hater schrieb:
> Im übrigen: in den Projektdateien (heissen *.vbproj, sind im Kern
> menschenlesbare XML-Dateien) steht die VB-Version quasi im Klartext
> drin, genauso wie die Version des benutzten .Net-Framework, letztere ist

 Das wird wohl am ehesten VB6 sein bei so einer alten Gurke. Ist aber
 ganz leicht festzustellen - da gab es .vbp als Projektdatei.

 Wenn der TO eine Blink-LED.bas anhängt, besteht die Möglichkeit,
 dass eine gute Seele diese zu Blink-LED.pas übersetzt...

von Pandur S. (jetztnicht)


Lesenswert?

Naja, das Ganze soll auf einem Controller laufen und nicht nicht auf dem 
PC, der LED Teil zumindest.
Auf dem PC ist Delphi als Pascal Nachfolger eine gute Wahl. Mit einer 
Serial Port Library ist man dabei. Die Schwierigkeit ist eher diese zu 
installieren, wie die Commands rueber zu senden. Dafuer gibt's dann ein 
paar Beispiele im Help der Library.

von Noch einer (Gast)


Lesenswert?

Erste Schwierigkeit dürfte wohl sein: Du musst auf dem PC das 
Mikrocontroller-Programm kompilieren und über die USB-Schnittstelle auf 
dem Mikrocontroller übertragen.

Dafür gibt es keinen Standard. Das macht jeder Hersteller 
unterschiedlich. Aus dem VB-Programm rekonstruieren, wie Franzis das 
macht? Als Einsteigerübung viel zu umfangreich.

Mein Tipp - verbuche das Ding als Fehlkauf. Kaufe einen Arduino mit 
USB-CDC. Dann brauchst du dich nicht um die PC-Seite kümmern. Einfach 
IDE installieren und Mikrocontroller-Programme aus den unzähligen 
Tutorials umbauen.

Ausserdem findest du hier unzählige Leute, die dir bei Detailfragen 
weiterhelfen können.

von Pandur S. (jetztnicht)


Lesenswert?

Soweit ich mich erinnere kann man eine einfache Version von VB 
herunterladen. Also nimm mal diese. VB ist einfach zum Erlernen.

von Manfred K. (mkch)


Lesenswert?

Hallo,
es gibt auch "PureBasic" (http://www.purebasic.com/). Müsste kostenfrei 
sein.
Gruß Manfred

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das wäre dann VB.net, und das ist Bestandteil des kostenlosen Visual 
Studio "Community Edition":

https://www.visualstudio.com/de/vs/community/

von c-hater (Gast)


Lesenswert?

Marc V. schrieb:

>  Das wird wohl am ehesten VB6 sein bei so einer alten Gurke.

Scheint so. Bei Amazon kann man den überteuerten Dreck tatsächlich noch 
kaufen und eine der Kundenbewertungen, die ansonsten durchaus kompetent 
klang, sagte explizit aus, dass es sich um VB6-Gammel handelt. Wird also 
wohl wirklich so sein...

> Ist aber
>  ganz leicht festzustellen - da gab es .vbp als Projektdatei.

Genau. Und es gibt (zumindest theoretisch) sogar einen "Upgrade-Pfad" zu 
VB.net in einer neuzeitlichen Version. Notfalls muss man halt etliche 
Male VisualStudio Express VB in den unterschiedlichen Versionen der 
Reihe nach runterladen. Und jedesmal alle Projekte dieses Francis-Werkes 
importieren und konvertieren lassen. Dabei können schonmal ein paar Tage 
in's Land gehen, der VS-Installer war nie dafür berühmt, sorgsam mit der 
Zeit der Entwickler umzugehen...

Und inwiefern das überhaupt problemlos ablaufen würde, entzieht sich 
meiner Kenntnis, da ich nie die Quelltexte dieses Francis-Werkes gesehen 
habe. Vermutlich wird das Teil im Wesentlichen auf der Verwendung von 
mscomm.ocx basieren. Keine Ahnung, inwiefern der Konverter von VS2005 
das selbstständig auf System.IO.Ports.SerialPort abbilden kann. Der 
erste Schritt von VB6 auf VS2005 dürfte also der eigentliche Knackpunkt 
sein, danach würde es vermutlich einigermassen entspannt weitergehen.

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

Mach einen grossen Bogen um das unsägliche VB Gefrickel.

Besorge Dir für Pascal/Delphi eine serielle Komponente und gut ist.
Die gibt es als Freeware oder auch gegen Kohle.

Achte darauf, dass die Komponente einen zusätzlichen 
DataProcessor/Command-Interpreter besitzt. Das erleichtert den Empfang 
von Daten.
Installieren und nach 10 Minuten läuft alles.

von c-hater (Gast)


Lesenswert?

Albert M. schrieb:

> Mach einen grossen Bogen um das unsägliche VB Gefrickel.

Du hast keine Ahnung. In der .net-Inkarnation ist VB eine vollwertige 
objektorientierte Programmiersprache und im Gegensatz zu Delphi eine mit 
Zukunft. Da ich selber mehr als ein Jahrzehnt lang Delphi programmiert 
habe, und mit Programmieren meine Brötchen verdiene, kann ich das 
einschätzen.

> Besorge Dir für Pascal/Delphi eine serielle Komponente und gut ist.

Bei VB ist die schon immer im Lieferumfang. Bei VB6 halt als 
ActiveX-Komponente mscomm.ocx, bei VB.net in Form von 
System.IO.Ports.SerialPort.

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

c-hater schrieb:
> Du hast keine Ahnung.

Da solltest Du mal besser die Füsse still halten.

c-hater schrieb:
> ActiveX-Komponente mscomm.ocx, bei VB.net in Form von
> System.IO.Ports.SerialPort.

Genau die net Abhängigkeiten sind das Unsägliche.
Wenn Du das toll findest, bitte.

von c-hater (Gast)


Lesenswert?

Albert M. schrieb:

> Genau die net Abhängigkeiten sind das Unsägliche.

Inwiefern? Die machen im Falle des SerialPort genau das, was auch alle 
einschlägigen Delphi-Komponenten machen. Nämlich das prozedurale 
Win32-Comm-API zu einer OO-Kompenente aufzubereiten.

Also ich sehe hier hier irgendwie keinerlei substanziellen Unterschied. 
Ausser, dass man bei VB.net halt nicht gezwungen ist, erst noch nach 
einer passenden Komponente zu suchen. Die ist einfach da. Naja, immerhin 
eine Zeile "imports ..." kostet es natürlich...

von Manfred M. (manfred474)


Lesenswert?

Haaaaallloo, Leude,

erst mal vielen Dank für die vielen Antworten! Aber bitte, lasst jetzt 
den Glaubenskrieg nicht eskalieren, das war wirklich nicht mein 
Anliegen. Mir ging's wirklich  n u r  um die Frage: Hat schon mal jemand 
ein VB-Programm (zur Einbindung einer Ansteuerung des FTDI232R) in 
Pascal übersetzt, und zwar erfolgreich? Und wenn sich solch jemand 
fände, wäre ich für ein kleines "Musterle" dankbar.

Der Tip "Betrachte es einfach als Fehlkauf" ist leider nicht so 
konstruktiv (die Versuchung war mir auch schon gekommen, aber da bin ich 
auch trotzig.) Der Tip "Kauf dir'n Arduino, da kannste viel einfacher 
viel mehr mit machen" kommt zu spät - ich hab mittlerweile fünf davon.

Nein, mein Anliegen war wirklich einfach - siehe oben. Nur: im 
Zusammenhang mit Arduino hat mich dieses FTDI-Ding schon mächtig 
geärgert, und da hab ich mir gesagt, jetzt lern ich dich genauer kennen 
und dann rück ich dir auf den Pelz.

Mittlerweile bin ich da aber - glaube ich - auf einem ganz guten Weg: 
Ich weiss jetzt, wie ich die FTD2XX.dll in FreePascal/Lazarus einbinde, 
und ich kann seit heute auch das Device öffnen/schließen und z.B. die 
DTR-Leitung auf HI oder LO legen. Klingt noch nicht gewaltig, aber der 
Weg scheint richtig, und ich bin wohl von VB damit abgenabelt!

Also, danke noch mal an alle!
Manfred

von Bernd K. (prof7bit)


Lesenswert?

Manfred M. schrieb:
> Ich weiss jetzt, wie ich die FTD2XX.dll in FreePascal/Lazarus einbinde,

FPC kommt seit 3.x auch für Windows in der Standardbibliothek schon mit 
ner eigenen Serial Unit daher, das ist ein relativ dünner Wrapper um die 
Betriebssystem-API mit Funktionen wie SerOpen() SerSetParams() SerRead() 
SerWrite() die funktionieren mit allen seriellen Schnittstellen, nicht 
nur mit FTDI: 
https://github.com/graemeg/freepascal/blob/master/packages/rtl-extra/src/win/serial.pp

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Manfred M. schrieb:
> Ich weiss jetzt, wie ich die FTD2XX.dll in FreePascal/Lazarus einbinde,
> und ich kann seit heute auch das Device öffnen/schließen und z.B. die
> DTR-Leitung auf HI oder LO legen.

Um die Handshake-Leitungen auf irgendwelche Pegel zu legen, braucht man 
keine FTD2xx.dll, da das die stinknormale API für serielle 
Schnittstellen abbildet. Der Vorteil davon, diese API zu nutzen, ist 
der, daß das mit jeder USB-UART und aber auch jeder "echten" 
seriellen Schnittstelle funktioniert.

Dennoch:
Beispiele, wie man diese DLL aus Delphi heraus nutzt, finden sich hier:
http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/Delphi.htm

Das sollte sich nach FreePascal/Lazarus portieren lassen.

von c-hater (Gast)


Lesenswert?

Rufus Τ. F. schrieb:

> Um die Handshake-Leitungen auf irgendwelche Pegel zu legen, braucht man
> keine FTD2xx.dll, da das die stinknormale API für serielle
> Schnittstellen abbildet. Der Vorteil davon, diese API zu nutzen, ist
> der, daß das mit jeder USB-UART und aber auch jeder "echten"
> seriellen Schnittstelle funktioniert.

So ist es. Die FTDI-DLLs benötigt man nur dann, wenn man die 
Funktionalität der FTDI-Chips nutzen möchte, die über die einer 
"normalen" UART hinausgeht, also z.B. die zusätzlichen IOs einiger 
FTDI-Chips.

Wichtig: man darf Zugriffe über's normale COMM-API und über die FTDI-DLL 
nicht mischen.

Wenn man sich also für die Verwendung der FTDI-DLLs entscheidet, muss 
man auch die normale UART-Funktionalität über die entsprechenden 
Funktionen der FTDI-DLL nutzen. Das ist aber ziemlich leicht umzusetzen, 
da sie alle Namen haben, die sehr stark denen der entsprechenden 
Funktionen des COMM-API ähneln.

von W.S. (Gast)


Lesenswert?

Manfred M. schrieb:
> Hat schon mal jemand
> ein VB-Programm (zur Einbindung einer Ansteuerung des FTDI232R) in
> Pascal übersetzt, und zwar erfolgreich? Und wenn sich solch jemand
> fände, wäre ich für ein kleines "Musterle" dankbar.

naja, ein VB-Programm nach Pascal.. Nun VB nach Delphi hatte ich vor 
gefühlten 20 Jahren getan. Aber das ist sicherlich gar nicht dein 
Anliegen.

Die "Geschichte USB in Serial" ist eine ganz andere Kiste. Die besteht 
eigentlich NUR aus dem, was man in einen Mikrocontroller hineinpackt. 
Der Rest, also wie das Ganze vom PC aus zu benutzen ist, ist sehr 
einfach und sehr generell zu beantworten: Man benutzt zumeist die 
üblichen Standard-Schnittstellen des Betriebssystems. Also CreateFile 
auf einen COM-Port angewendet - mal grob gesagt. Sowas ist völlig 
unabhängig von der Programmiersprache, in der die Anwendung geschrieben 
ist. (Linuxer können hier ja mal die Linux-Version dazu posten). Hier 
mal das nackte Prinzip:
1
  if nPort>=10
2
  then  sCom := '\\.\COM' + IntToStr(nPort)
3
  else  sCom := 'COM' + IntToStr(nPort);
4
    hPort := CreateFile(PChar(sCom),
5
                        GENERIC_READ or GENERIC_WRITE,
6
                        0,
7
                        nil,
8
                        OPEN_EXISTING,
9
                        FILE_ATTRIBUTE_NORMAL,
10
                        LongInt(0));
Das ist völlig hardwareunabhängig, es ist anwendbar auf echte und 
virtuelle COM-Ports.

Eine Ausnahme machen die FTDI-Chips: Die kann man sowohl als COM-Port 
ansprechen, als auch über die "FTD2XX"-Version ansprechen. Die nötigen 
Quellen für eigentlich alles (Delphi, VB, C++ usw) finden sich bei 
Ftdichip.

W.S.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Falls es noch interessiert. Delphi 10.1 Starter [1] derzeit kostenlos 
(früher 385€). Dazu die Komponente ComPort Library version: 4.11f [2] 
installiert, und man hat in 5 min ein Terminal mit Quellcode zum Testen 
der seriellen Schnittstelle.

[1] 
https://www.embarcadero.com/de/products/delphi/starter/promotional-download
[2] https://sourceforge.net/p/comport/discussion/261327/thread/f4cfe7af/

von Dirk E. (drbinsl)


Lesenswert?

@Joe G. (feinmechaniker)

Vielen Dank für die Info! Download läuft bereits ;)

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
Noch kein Account? Hier anmelden.