![]() |
NrComm Lib
Hallo,
bin noch neu hier. Ich soll im Rahmen meiner Technikerarbeit einen Frequenzumrichter ansteuern. Das Ganze soll über eine RS232-Verbindung geschehen. Der Programmierer bei uns verwendet die NrComm Lib von Deepsoftware. Daher, dass ich ein Newb in Delphi bin dachte ich mir, versuche ich es erstmal eine Bidirektionale Verbindung vom Laptop auf einen meiner Microcontroller herzustellen, bevor ich mich an den FU ranwage, da dieser ein komplexeres Bus-Protokoll verwendet. Nicht einmal das bekomme ich hin. Bei der NrComm Lib ist ein CHM-File dabei. Super stehen eben die Methoden und Events drin. Aber eben nicht direkt wie das alles anzuwenden ist. Meine bisherige Vorgehensweise: 1) VCL-Anwendung mit 2 Buttons (senden/empfangen) zwei Editfelder (1 für das Zeichen welches gesendet werden soll / 1 für das empfangene Zeichen) Jetzt weiß ich nur nicht genau wie ich weiter machen muss. Auf der Deepsoftware seite sind 3 Beispiele für das OnAfterReceive Event. Brauch ich das Überhaupt zum empfangen ? Habe in dem CHM File gesehen, dass es da ja auch Prozedeuren für gibt. z.B myNrComm1.readAll(); Hat jemand von euch dazu ein kleines Beispiel ? Oder Tipps wie ich da ran gehen kann. Oder soll ich die AsyncPro verwendet, da gibts wenigstens ein Manual dazu. Welche Lib ist denn einfacher zum anwenden. Wie schon gesagt, werde vorraussichtlich Delphi das nächste halbe Jahr für meine Projektarbeit verwenden und dann wahrscheinlich nie wieder... Grüße freddygloves |
AW: NrComm Lib
![]() ![]() ![]() ![]() ![]() Da gibt es Mehreres, was man verwenden könnte. Welche Delphi-Version nutzt du denn und wie sahen deine bisherigen NrCommLib-Versuche aus? |
AW: NrComm Lib
Also ich verwende Delphi XE Architect bei mir zuhause und im Unternehmen haben wir Delphi XE Professional.
Habe daheim jetzt mal folgenden Versuchsaufbau gemacht. Laptop --> Microcontroller (Ein Zeichen Senden) Das empfangene Zeichen soll durch einen Port der an 8 LEDs angeschlossen ist visualisiert werden Microcontroller --> Laptop (Soll das selbe Zeichen wieder zurück senden) Habe jetzt mal hierfür AsyncPro genommen. Aber irgendwas stimmt nicht von der Wertigkeit der Zeichen. Habe mir mal eine ANSI-Tabelle geschnappt und versucht zum Beispiel das Zeichen mit dem Wert 128 zu senden müsste ja theoretisch das MSB meines Ports leuchten. Das tut es aber nicht und mein Microcontroller sendet ebenso den falschen character zurück, auf jeden Fall mal nicht das was ich zu senden versuche. Beispiel ich sende den Character "2" und empfange wieder ein kleines "f"... Hier mal mein "Quälcode", in der Manual steht zwar noch was von Trigger events. Wollte das ganze aber erstmal so leicht wie möglich realisieren. Delphi:
Delphi-Quellcode:
Den Microcontrollercode brauch ich glaub ned posten.
unit RS232_Test_Async;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OoMisc, AdPort; type TForm1 = class(TForm) ApdComPort1: TApdComPort; Button1: TButton; Edit1: TEdit; Edit2: TEdit; Empfangen: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure EmpfangenClick(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ApdComPort1.Output:= Edit1.Text[1]; end; procedure TForm1.Button2Click(Sender: TObject); begin Edit2.Text:=#$22; end; procedure TForm1.EmpfangenClick(Sender: TObject); //var C:AnsiChar; begin //C := ApdComPort1.GetChar; Edit2.Text:=Edit2.Text+ApdComPort1.GetChar; end; end. Haben wir in der Schule damals geschrieben und hat mitem Terminal auch so funktioniert. Grüße freddygloves |
AW: NrComm Lib
Ok SuFu,
hmmm probiere es mal mit dem hier könnte vielleicht Abhilfe schaffen. Berichte mal heute noch einen Erfolg oder Misserfolg :-D ![]() |
AW: NrComm Lib
Wo du vorallem aufpassen mußt, ist daß die Komponenten Unicodekompatibel sind. (im XE ist ein Char 2 Byte groß)
In deinem Fall wäre es also gut, wenn die Komponenten fest auf ANSI gesetzt sind und dann mußt du noch bei der Zuweisung von Unicodestrings an ANSI aufpassen, daß bei der Konvertierung nichts verloren geht / verändert wird. |
AW: NrComm Lib
Hallo,
muss zwar nochmal meine Com-Port Konfig seitens Delphi sowie seitens meines Atmels bzw. dessen Programms abchecken. Weil irgendwie tut das nicht so wie ich will. Für mein Verständnis habe es bisher so versucht
Delphi-Quellcode:
Habe da ein wenig rum versucht mal mit Ansi und ohne und so weiter...
procedure TForm1.Button1Click(Sender: TObject);
var decVal:AnsiString; c_output:AnsiChar; begin decVal:=Edit1.Text; c_output:=AnsiChar(StrToInt(decValue)); ApdComPort1.Output:= c_output; end; Wie schon gesagt für mein Verständnis: Ich lese nun den Wert 128 ein --> entspricht laut Ansi Tabelle '€' das bedeutet von seitens meines Laptop müssten die 8 Datenbits doch so aussehen. 1000 0000bin = 128dez = '€' Auszug aus meinem C51-Code ohne Interrupts bisher noch
Code:
Also müsste doch nun auf Empfangseite in der Variable zeichen dementsprechend der Hexwert 80hex für 128dez stehen.
...
WHILE(RI==0); zeichen=SBUF; //Speichern des Bufferinhalt in char zeichen RI=0; Port0=zeichen; //Inhalt Variable zeichen an Port0 ausgeben Ich bin mir nicht ganz sicher ob für meine Aufgabe die AsyncPro bzw. NrComm die richtige Wahl sind. Ich habe später ein haufen Byte-Commands die übertragen werden müssen und ich tue mir schon bei einem schwer... |
AW: NrComm Lib
Zitat:
![]() Zitat:
Delphi-Quellcode:
Sprich, mach eines nach dem anderen. Wenn du es mal schaffst ein Hard-Kodiertest Zeichen zu senden, dann kann du dir als nächstes Überlegen, wie du unterschiedliche Zeichen(folgen) sendest.
procedure TForm1.Button2Click(Sender: TObject);
const THE_SIGN: AnsiChar = #$80;//= 128dez = '€'; begin ApdComPort1.Output:= EURO_SIGN; end; Zitat:
Gruß, Chris BTW: Zitat:
|
AW: NrComm Lib
Ok,
muss des ganze nommel probieren. Einen hard codierten Wert habe ich schonmal ausprobiert. Aber wie schon gesagt. Jetzt erstmal schauen ob die Settings stimmen. Baudrate, No-Parity etc... für den Versuch. Werde da mal weiter berichten... BTW: Der Architect ist ne Trial und begrenzt... Aber das Lapi vom Geschäft kann ich dann später weiterverwenden und da ist das Proffesional drauf. Habe es nur bei mir auf em Laptop mal installiert, weil unter XP die USB-RS232 Konverter laufen und der Treiber für Win 7 sprich "Geschäftslaptop" noch nicht drauf ist... |
AW: NrComm Lib
Welchen Typ hat denn
Delphi-Quellcode:
?
ApdComPort1.Output
Zitat:
(PS: eine Mail an germany.info@embarcadero.com und eventuell verlängern die einem die Trial, ansonsten kannst'e ja privat immernoch für ~150€ die "XE Starter"-Version nehmen, also das Upgrade) |
AW: NrComm Lib
Manchmal ist es leichter als man denkt.
Ok 1. Problem war mal ne falsche Baudrate seitens meines Laptop. Klar Microcontroller geht von 9600 Baud aus Laptop hämmert mit 19200 auf den guten ein :oops: Zu der Frage ApdComPort1.Output will einen AnsiChar haben. im Endeffekt funzt des jetzt viel leichter. Danke mit dem Tipp so wenig wie möglich zu casten bzw. umzuwandeln. Hab hier noch ein cooles Tool anstelle von HTerm (konnte da nur Zeichen generieren und mal gucken was so mein Microcontroller macht aber trotzdem Danke war auch schon hilfreich). Und zwar nämlich den Free Serial Port Monitor ![]() Hat mir auf jeden Fall geholfen um mal zu sehen was da so hin und her geschickt wurde... Naja auf jeden Fall mein Code fürs Senden sieht jetzt so aus:
Delphi-Quellcode:
Und fürs Empfangen sieht er so aus:
//var counter:integer=0;
procedure TForm1.Button1Click(Sender: TObject); var myInt:integer; begin //inc(counter); myInt:=StrToInt(Edit1.Text); ApdComPort1.Output:=AnsiChar(myInt); end;
Delphi-Quellcode:
Das ganze funktioniert ja schon mal bin jetzt mal happy und lass es für heute gut sein.
procedure TForm1.EmpfangenClick(Sender: TObject);
var C:AnsiChar; begin C := ApdComPort1.GetChar; Edit2.Text:=IntToStr(Ord(C)); end; BTW: Um meine Lizens brauch ich mir keine Sorgen machen wie schon gesagt, unser Unternehmen stellt mir auch noch einen Laptop für meine Technikerarbeit, da ist Delphi XE Professional drauf. Ich habe bis Mai 2012 Zeit die ganze Sache zu programmieren. Aber ich dachte ich fang jetzt mal mit Üben an, um vertraut mit Delphi zu werden, bin immerhin Elektroniker und kein ITler bzw. Programmierer. Wobei man heute echt alles als Elektroniker können sollte :lol: Aber ich glaub ich schreib die Trotzdem mal anwegen der Lizensverlängerung. Wir Schwaben sagen immer "Oim gschenkta Gaul, schaut ma id ins Maul" :thumb: Danke für den Tipp. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz