AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

NrComm Lib

Ein Thema von freddygloves · begonnen am 14. Aug 2011 · letzter Beitrag vom 17. Aug 2011
Antwort Antwort
Seite 1 von 2  1 2      
freddygloves

Registriert seit: 14. Aug 2011
Ort: Tettnang
7 Beiträge
 
Delphi XE Architect
 
#1

NrComm Lib

  Alt 14. Aug 2011, 02:10
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
Oli
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#2

AW: NrComm Lib

  Alt 14. Aug 2011, 09:02
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
freddygloves

Registriert seit: 14. Aug 2011
Ort: Tettnang
7 Beiträge
 
Delphi XE Architect
 
#3

AW: NrComm Lib

  Alt 14. Aug 2011, 13:09
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
Oli
  Mit Zitat antworten Zitat
freddygloves

Registriert seit: 14. Aug 2011
Ort: Tettnang
7 Beiträge
 
Delphi XE Architect
 
#4

AW: NrComm Lib

  Alt 15. Aug 2011, 09:34
Ok SuFu,

hmmm probiere es mal mit dem hier
könnte vielleicht Abhilfe schaffen.
Berichte mal heute noch einen Erfolg oder Misserfolg

http://www.delphipraxis.net/113249-a...hex-werte.html
Oli
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#5

AW: NrComm Lib

  Alt 15. Aug 2011, 09:47
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
freddygloves

Registriert seit: 14. Aug 2011
Ort: Tettnang
7 Beiträge
 
Delphi XE Architect
 
#6

AW: NrComm Lib

  Alt 16. Aug 2011, 07:14
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...
Oli
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: NrComm Lib

  Alt 16. Aug 2011, 07:58
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

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.

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:
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.
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
freddygloves

Registriert seit: 14. Aug 2011
Ort: Tettnang
7 Beiträge
 
Delphi XE Architect
 
#8

AW: NrComm Lib

  Alt 16. Aug 2011, 09:12
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...
Oli
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#9

AW: NrComm Lib

  Alt 16. Aug 2011, 10:27
Welchen Typ hat denn ApdComPort1.Output ?


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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
freddygloves

Registriert seit: 14. Aug 2011
Ort: Tettnang
7 Beiträge
 
Delphi XE Architect
 
#10

AW: NrComm Lib

  Alt 16. Aug 2011, 21:41
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

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
Aber ich glaub ich schreib die Trotzdem mal anwegen der Lizensverlängerung. Wir Schwaben sagen immer "Oim gschenkta Gaul, schaut ma id ins Maul"
Danke für den Tipp.
Oli
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz