Datenbank und Daten einlesen über RS232

Für Fragen von Einsteigern und Programmieranfängern...
l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Datenbank und Daten einlesen über RS232

Beitrag von l0lhaxx »

Hallo zusammen,
ich bin absoluter Neuling beim programmieren mit Lazarus (Pascale). Ich habe bereits etwas Erfahrung in C-Programmierung aber Lazerus überfordert mich etwas.
Ich möchte ein "einfaches" Programm schreiben, das aus einer Datenbank Werte übernimmt und mit einem Wert den ich über die RS232 Schnittstelle einlesen möchte (Digitalwaage) vergleicht.
Das Ergebnis soll dann in einer zweiten Datenbank gespeichert und falls gewollt ausgedruckt werden.
Ich habe jedoch keine Ahnung wie ich das jetzt ordentlich programmiere. habe mit sdfDateaSet etwas rumprobiert, komme da aber gar nicht drauf wie das funktioniert (auch schon diverse Forumeinträge und Tutorials angeschaut).

Kann mir jemand verraten....
...wie ich am einfachsten eine solchen Datenbank erstelle?
...Wie ich Werte über eine Schnittstelle (RS232) einlesen kann?

(Mir reichen auch schon verweise auf Tutorial oder Ähnliches)

Als "Anfänger" bin ich über jeden Tipp oder Beispiel Programm dankbar.

Vielen Dank vorab !


l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Re: Datenbank und Daten einlesen über RS232

Beitrag von l0lhaxx »

ja ich weiß.... 8)
Danke für die Links, ist aber schon extrem weit ausgeholt für jemanden wie mich :)
Zur Initialisierung der Datenbank sdflaz wird leider gar nichts aufgeführt. Wie funktioniert das, bzw. wo kann ich das nachlesen?
Das gleiche beim Thema RS232. Tausende Befehle aber nichts wo man mal ansetzten könnte, wie z.B. das Ansprechen und Empfangen.

Benutzeravatar
theo
Beiträge: 10858
Registriert: Mo 11. Sep 2006, 19:01

Re: Datenbank und Daten einlesen über RS232

Beitrag von theo »

Musst halt googeln.
Zu Synaser gibt es hier was: http://wiki.freepascal.org/Hardware_Access#Synaser
sdflaz habe ich noch nie verwendet. Wie liegen die Daten denn vor, bzw. was muss die "Datenbank" können?

Mathias
Beiträge: 6900
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Datenbank und Daten einlesen über RS232

Beitrag von Mathias »

Das gleiche beim Thema RS232. Tausende Befehle aber nichts wo man mal ansetzten könnte, wie z.B. das Ansprechen und Empfangen.
Ich würde zuerst mit einem einfachen Programm mit der RS232 probieren, bevor ich alles mit einer Datenbank verknüpfe.

Synaser würde ich auch verwenden.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6764
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Datenbank und Daten einlesen über RS232

Beitrag von af0815 »

Datenbank:
Verzeichnis \lazarus\examples\database\sqldbtutorial3

Code: Alles auswählen

SQLdb Tutorial3
===============
 
This directory has the accompanying code for
http://wiki.lazarus.freepascal.org/SQLdb_Tutorial3
 
Please see that article for instructions and requirements.
(You'll need database clients and a sample database; see the article)
Macht natürlich Sinn vorher http://wiki.lazarus.freepascal.org/SQLdb_Tutorial0 , http://wiki.lazarus.freepascal.org/SQLdb_Tutorial1 und http://wiki.lazarus.freepascal.org/SQLdb_Tutorial2 zu machen :D

Wennst das Tutorial machst und fragen hast, bitte einen Verweis welches Tutorial und eine genauere Beschreibung des Fehlers/Problems.

Kannst afür ein paar Grundlagen in meine LazInfos/LazSnippets (auf Sourceforge) reisehen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Re: Datenbank und Daten einlesen über RS232

Beitrag von l0lhaxx »

Hallöchen,

danke hat mir sehr geholfen!

Kann mir jemand sagen wie ich jetzt meine eigene "Datebank" erstellen kann. Dazu kann ich doch das Tool "Datebank-Sekstop" nutzen? Der Schritt ist aber leider nicht erläutert!

Danke vorab!


l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Re: Datenbank und Daten einlesen über RS232

Beitrag von l0lhaxx »

Hi,
SQL nutze ich.
Danke für die Links. Schau mir nachher gleich mal alles an!

Noch ein paar Fragen zum einlesen eines RS232 Wertes. Ich möchte nur einen Zahlenwert einer Digitalwaage einlesen und in eine Variable schreiben. Wie mache ich das? Hab jetzt mal so angefangen, bekomme aber immer den Error "Identifier not found". Mit welchem Kommando lese ich den einen Wert dann ein, sobald die Schnittstelle konfiguriert ist?

Danke!!


Code: Alles auswählen

var
  Form1: TForm1;
   ser: TBlockSerial;   
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 ser:=TBlockSerial.Create;
 ser.Connect('COM1');
 ser.config(2400, 8, 'N', SB1andHalf, False, False);
end;
Zuletzt geändert von Lori am Mi 16. Dez 2015, 17:26, insgesamt 1-mal geändert.
Grund: Highlighter

magnetron
Beiträge: 44
Registriert: Di 4. Nov 2014, 14:04

Re: Datenbank und Daten einlesen über RS232

Beitrag von magnetron »

Hallo,

schau mal den Thread SCPI to COM an, könnte als Beispiel interessant sein:
http://www.lazarusforum.de/viewtopic.php?f=18&t=9187

Code: Alles auswählen

ser.Connect('COM1');
ser.config(2400, 8, 'N', SB1andHalf, False, False);
Natürlich muss das Gerät dann an COM1 hängen und alle Parameter der RS232 müssen so konfiguriert sein, wie das Gerät es haben will.
Also Baudrate, Stopbits, Xon/Xoff etc. steht in der Gerätedoku.

Dann spricht das Gerät irgendeine Sprache, die Du auch der Gerätedoku entnehmen musst.
Konkret erwarten die meisten Geräte irgendeine "Frage" (siehe Gerätedoku), die Du z.B. via Ser.Sendstring oder ähnlich dorthin sendest.
Danach kannst Du die Antwort bei der Schnittstelle abholen.
Meistens muss alles pingelig genau nach Handbuch gehen, inclusive Endezeichen (je nach Gerät) usw. sonst kommt meist gar keine Antwort.
Grüße, Stefan

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6764
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Datenbank und Daten einlesen über RS232

Beitrag von af0815 »

l0lhaxx hat geschrieben:Noch ein paar Fragen zum einlesen eines RS232 Wertes. Ich möchte nur einen Zahlenwert einer Digitalwaage einlesen und in eine Variable schreiben. Wie mache ich das?
Ich würde mal mit einem Terminalprogramm anfangen (Nicht Lazarus). Damit man festellen kann wie genau die Kommunikation mit der Waage funktioniert.
A) Was für ein Protokoll (XON/XOFF, Hardware, keines), Geschwindigkeit, Bits (Daten und Stoppbit), etc. (Ist durch das Beispiel im Post vorher erledigt).
B) Muss ich etwas senden, damit ich ein Ergebnis von der Waage erhalte, oder sendet die von selbst, oder muss man eine Taste auf der Waage drücken ?!
C) Kann ich das ganze mit einem Terminalprogramm mir ansehen und nachvollziehen ?!

Mit (A,) B und C wird klarer wie die Kommunikation funktioniert und wie man dir am besten helfen kann.

Ich gehe davon aus, das du Synaser verwendest.

Ein Beispiel für dich ist hier http://www.turbocontrol.com/simpleserial.htm . Im Download sind die Sourcen dabei, halt nur die Pas Dateien entpacken, die du als Beispiel benötigts (DlpTempGSim.pas und DlpTempG.pas). Es sind in dem Paket die ganzen .ppu, .o Dateien dabei, auch ein Kompiler und und,.. das ist alles unnützer Ballast. Pack also nur die beiden Dateien aus und schau dir die mal an.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10858
Registriert: Mo 11. Sep 2006, 19:01

Re: Datenbank und Daten einlesen über RS232

Beitrag von theo »

l0lhaxx hat geschrieben: SQL nutze ich.
SQL ist eine Datenbanksprache und kein Datenbanksystem.
Ich hatte dich aber nach dem System gefragt.

l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Re: Datenbank und Daten einlesen über RS232

Beitrag von l0lhaxx »

Hallo,
danke für die zahlreichen Antworten.
magnetron hat geschrieben:Mit (A,) B und C wird klarer wie die Kommunikation funktioniert und wie man dir am besten helfen kann.

Ich gehe davon aus, das du Synaser verwendest.
ich hätte vielleicht erwähnen müssen das ich das bereits probiert habe und es funktioniert (Mit Profilab Expert). Boudrate kann ich an der Waage ändern. 2400Boud ist der Standardwert.
Die Wage schickt ständig den aktuellen Wert raus. Es handelt sich dabei um einen 8-Bit ASCII Code. 1 Startbit, 8 Datenbits, 1 Stopbits und kein Paritätsbit. Ich brauche also keine Anforderung senden sondern nur den aktuellen Wert in eine Variable schreiben.

Synaser?! Sorry aber damit kann ich nichts anfangen, wie gesagt ich bin neu auf diesem Gebiet! :(
theo hat geschrieben:
l0lhaxx hat geschrieben: SQL nutze ich.
SQL ist eine Datenbanksprache und kein Datenbanksystem.
Ich hatte dich aber nach dem System gefragt.
Kann sein :) Ich habe bis jetzt nur das Tutorial gemacht, aber da hat man ja schon eine fertige Datenbank (Employee.fdb). Ich möchte mir jetzt selbst so eine Datei erstellen.
Sorry für die Unwissenheit!

Und schon mal ein dickes Danke für die Unterstützung!!!!

l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Re: Datenbank und Daten einlesen über RS232

Beitrag von l0lhaxx »

Hallo,
kann mir jemand sagen was ich falsch gemacht habe? Fehlercode ist das Synaser nicht gefunden werden kann. Habe aber die aktuelle Version (40) in das Lazerusverzeichnis kopiert.

unit1.pas(8,78) Fatal: Kann Unit Synaser nicht finden verwendet von Unit1.

außerdem würde ich gerne wissen wie ich den aktuellen Wert jetzt auf ein TEdit schreibe.

Danke!


Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Anzeige_Aktueller_Wert: TEdit;
    procedure Anzeige_Aktueller_WertChange(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  ser:TBlockSerial;
 
implementation
 
{$R *.lfm}
{$MODE DELPHI}
{ TForm1 }
 
Program Einwaagesoftware;
 
begin
  ser:=TBlockserial.Create;
  try
    ser.RaiseExcept:=True;
    ser.LinuxLock := false;
    ser.Connect('COM1');
    ser.Config(19200,8,'N',0,false,false);
    repeat
    while (ser.WaitingData > 0) do
       begin
       rxb:= ser.RecvByte(1000);
       dump(rxb);
       end;
Sleep(10);
until false;
  finally
    ser.Free;
  end;
end.
Zuletzt geändert von Lori am Mo 21. Dez 2015, 17:34, insgesamt 1-mal geändert.
Grund: Highlighter

Benutzeravatar
Maik81SE
Beiträge: 327
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.4 FPC 3.2.2)
CPU-Target: x86-64; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Datenbank und Daten einlesen über RS232

Beitrag von Maik81SE »

l0lhaxx hat geschrieben:Hallo,
kann mir jemand sagen was ich falsch gemacht habe? Fehlercode ist das Synaser nicht gefunden werden kann. Habe aber die aktuelle Version (40) in das Lazerusverzeichnis kopiert.

unit1.pas(8,78) Fatal: Kann Unit Synaser nicht finden verwendet von Unit1.

außerdem würde ich gerne wissen wie ich den aktuellen Wert jetzt auf ein TEdit schreibe.

Danke!


Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Anzeige_Aktueller_Wert: TEdit;
    procedure Anzeige_Aktueller_WertChange(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  ser:TBlockSerial;
 
implementation
 
{$R *.lfm}
{$MODE DELPHI}
{ TForm1 }
 
Program Einwaagesoftware;
 
begin
  ser:=TBlockserial.Create;
  try
    ser.RaiseExcept:=True;
    ser.LinuxLock := false;
    ser.Connect('COM1');
    ser.Config(19200,8,'N',0,false,false);
    repeat
    while (ser.WaitingData > 0) do
       begin
       rxb:= ser.RecvByte(1000);
       dump(rxb);
       end;
Sleep(10);
until false;
  finally
    ser.Free;
  end;
end.
ich erst mal bitten wir darum, das du "Highlighter" verwendest, damit wir es auch lesen können ;)
Dann vermisse ich in diesen Zeilen auch die Einbindung der entsprechenden Unit. o.O

Was das angeht ;)
Werte in "TEdit" schreiben,
Wenn du dahin nur einen Lesezugriff haben willst würde ich ein TLabel nutzten und sagen.

Code: Alles auswählen

Ziel.Caption=Quelle;

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.4 FPC 3.2.2);

Antworten