Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   NrComm Lib (https://www.delphipraxis.net/162236-nrcomm-lib.html)

freddygloves 14. Aug 2011 01:10

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

himitsu 14. Aug 2011 08:02

AW: NrComm Lib
 
Hier im Forum suchenAsyncPro, Hier im Forum suchenTComPort, oder auch direkt an die WinAPI (MSDN-Library durchsuchenCreateFile+MSDN-Library durchsuchenReadFile/MSDN-Library durchsuchenWriteFile) uvm.
Da gibt es Mehreres, was man verwenden könnte.

Welche Delphi-Version nutzt du denn und wie sahen deine bisherigen NrCommLib-Versuche aus?

freddygloves 14. Aug 2011 12:09

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:
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.
Den Microcontrollercode brauch ich glaub ned posten.
Haben wir in der Schule damals geschrieben und hat mitem Terminal auch so funktioniert.

Grüße freddygloves

freddygloves 15. Aug 2011 08:34

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

http://www.delphipraxis.net/113249-a...hex-werte.html

himitsu 15. Aug 2011 08:47

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.

freddygloves 16. Aug 2011 06:14

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:
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;
Habe da ein wenig rum versucht mal mit Ansi und ohne und so weiter...

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:
...
WHILE(RI==0);
zeichen=SBUF; //Speichern des Bufferinhalt in char zeichen
RI=0;
Port0=zeichen; //Inhalt Variable zeichen an Port0 ausgeben
Also müsste doch nun auf Empfangseite in der Variable zeichen dementsprechend der Hexwert 80hex für 128dez stehen.

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...

ChrisE 16. Aug 2011 06:58

AW: NrComm Lib
 
Zitat:

Zitat von freddygloves (Beitrag 1117102)
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.

Das wäre auf jedenfall das erste, dass du testen solltest. Ich würde auch immer zur Validierung ein Programm empfehlen, dass sicher Funktioniert. Ich bevorzuge in Fällen der RS-232-Kommunikation z.B. HTerm

Zitat:

Zitat von freddygloves (Beitrag 1117102)
Für mein Verständnis
habe es bisher so versucht
Delphi-Quellcode:
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;
Habe da ein wenig rum versucht mal mit Ansi und ohne und so weiter...

Bei deisne Tests kann ja schon einiges neben raus gehen. Versuche die Probleme die du hast zu teilen. Um mit dem COM-Port vertraut zu werden, sollte sich an den "anderen" veränderbaren so wenig wie möglich ändern (Char / Bytefolge / Ansi / Unicode - gedöhns). Schick doch Hard-Coded ein Byte / eine Bytefolge rüber. z.B.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
const
  THE_SIGN: AnsiChar = #$80;//= 128dez = '€';
begin
  ApdComPort1.Output:= EURO_SIGN;
end;
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.

Zitat:

Zitat von freddygloves (Beitrag 1117102)
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...

Wenn du viel zu übertragen hast, macht das doch kaum noch einen Unterschied zu einem Byte :-) Kannst du eins - kannst du viele. Also das eine sauber lernen wie es geht, dann kannst du auch viele Übertragen.

Gruß, Chris

BTW:
Zitat:

Zitat von freddygloves (Beitrag 1116771)
Also ich verwende Delphi XE Architect bei mir zuhause und im Unternehmen haben wir Delphi XE Professional.

WOW - nicht schlecht. Das war mal ne Stange Geld.

freddygloves 16. Aug 2011 08:12

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...

himitsu 16. Aug 2011 09:27

AW: NrComm Lib
 
Welchen Typ hat denn
Delphi-Quellcode:
ApdComPort1.Output
?


Zitat:

Zitat von freddygloves (Beitrag 1117118)
Der Architect ist ne Trial und begrenzt...

Hatte ich mir schon gedacht, also dann wünsch ich dir mal, daß du alles in den 30 Tagen fertigbekommst.

(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)

freddygloves 16. Aug 2011 20:41

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 Monitorhttp://www.heise.de/software/downloa..._monitor/26030

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:
//var counter:integer=0;
procedure TForm1.Button1Click(Sender: TObject);
var myInt:integer;
begin
    //inc(counter);
    myInt:=StrToInt(Edit1.Text);
    ApdComPort1.Output:=AnsiChar(myInt);
end;
Und fürs Empfangen sieht er so aus:
Delphi-Quellcode:
procedure TForm1.EmpfangenClick(Sender: TObject);
var C:AnsiChar;
begin
  C := ApdComPort1.GetChar;
  Edit2.Text:=IntToStr(Ord(C));
end;
Das ganze funktioniert ja schon mal bin jetzt mal happy und lass es für heute gut sein.

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.
Seite 1 von 2  1 2      

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