LazPlan v0.7 (Beta) - Schaltplansoftware

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
Antworten
compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

LazPlan v0.7 (Beta) - Schaltplansoftware

Beitrag von compmgmt »

Hallo,

da ich eine Ausbildung zum Elektroniker mache, möchte ich mir selbst eine Schaltplansoftware schreiben. Per Drag and Drop lassen sich alle Schaltsymbole in einem 8er Raster verschieben. Leitungen können nur an Schaltsymbolen platziert werden. Um Sie frei zu verlegen (z.B. eine L, N, PE "Schiene") wird als Start- und Endpunkt der "Blinde Punkt" in der Kategorie "Leitungen" verwendet.

Plattformen
Offizielle Unterstützung:
Win32-i386
Linux-i386 (nur bis inkl. Version 0.6.2.1-1)
Linux-x86_64 (nur bis inkl. Version 0.6.2.1-1)
Eine Binärdatei für Win64-x86_64 liegt nicht explizit bei. Es kann die von Win32-i386 verwendet werden.

Download
http://www.patrick-lampke.de/index.php?page=lazplan

Liste mit geplanten Schaltsymbolen

Code: Alles auswählen

   - IC-Bausteine
      - IC-Baustein (18 bis 48 Pins; in 2er Schritten)
   - Schaltkontakte
      - Wechselschalter


Changelog
http://lazplan.patrick-lampke.de/docs/changelog.pdf

Bilder
Bild
LazPlan: Einfache Thyristorschaltung, die eine LED mit Vorwiderstand per Taster S1 ein- und Taster S0 ausschaltet.

Bild
LazPlan: Wende-Schützschaltung "Wende über Aus" mit Tast- und Schützverriegelung, sowie Selbsthaltung.

Bild
LazPlan: Netzteil 230VAC -> 24VDC mit Brückengleichrichter und Kondensator zum Glätten der Spannung.

Bild
SymEdit: Schaltsymboleditor für LazPlan

So, jetzt wünsche ich viel Spaß beim Testen und freue mich über Feedback:
http://www.patrick-lampke.de/index.php?page=lazplan

Gruß
Patrick Lampke
Zuletzt geändert von compmgmt am So 20. Mai 2018, 13:54, insgesamt 59-mal geändert.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: LazPlan - Schaltplansoftware

Beitrag von corpsman »

Also wenn ich bei deinem Link auf Herunterladen klicke, passiert nichts, warum hängst du ein 600k file nicht einfach an den Beitrag an ?

Wenn der Source Dabei ist, kann ich gern mal schaun ob es unter Linux compiliert.
--
Just try it

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: LazPlan - Schaltplansoftware

Beitrag von compmgmt »

corpsman hat geschrieben:Also wenn ich bei deinem Link auf Herunterladen klicke, passiert nichts, warum hängst du ein 600k file nicht einfach an den Beitrag an ?
Sehr merkwürdig. Ja, ich häng es ran.

corpsman hat geschrieben:Wenn der Source Dabei ist, kann ich gern mal schaun ob es unter Linux compiliert.
Ja, würde theoretisch auf Linux laufen, ich häng den Source Code an ;)

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: LazPlan - Schaltplansoftware

Beitrag von corpsman »

So getestet :

Um es mit Lazarus kompilieren zu können musste ich die Unit Lazfileutils in die uses der wlazplan.pas eintragen.
im Ordner components hast du Verzeichnisse wie "Widerstände" die ä, ö, ü sind gar nicht gut, da würde ich englische Verzeichnisnamen empfehlen.

Code: Alles auswählen

 
procedure TWnd_LazPlan.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  // ObjectPath definieren
  ObjectPath := ExtractFilePath(Application.ExeName) + 'Components/';
  // CfgPath und CfgFile definieren
  CfgPath := GetEnvironmentVariable('appdata') + '\LazPlan\';
   CfgFile := CfgPath + '
LazPlan.cfg';


Hart Kodierte Pathdelims sind nicht Plattformunabhängig besser :

Code: Alles auswählen

 
procedure TWnd_LazPlan.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  // ObjectPath definieren
  ObjectPath := ExtractFilePath(Application.ExeName) + 'Components'+PathDelim;
  // CfgPath und CfgFile definieren
  CfgPath :=  IncludeTrailingPathDelimiter(GetEnvironmentVariable('appdata')) + 'LazPlan'+PathDelim;
   CfgFile := CfgPath + 'LazPlan.cfg';     
 


Dann kommt noch 2 mal die Meldung das das Verzeichnis "/lazplan/" nicht erstellt werden kann, ich denke mal das liegt an GetEnvironmentVariable('appdata'), bin mir aber nicht sicher.

Ansonsten kann man es starten und "nutzen" siehe Screenshot.

So viel zum Thema Linux ;)

Viel Spass beim weiter entwickeln.
Dateianhänge
Screenshoot.jpeg
--
Just try it

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: LazPlan - Schaltplansoftware

Beitrag von compmgmt »

corpsman hat geschrieben:Um es mit Lazarus kompilieren zu können musste ich die Unit Lazfileutils in die uses der wlazplan.pas eintragen.
im Ordner components hast du Verzeichnisse wie "Widerstände" die ä, ö, ü sind gar nicht gut, da würde ich englische Verzeichnisnamen empfehlen.
Jo, das lässt sich ja leicht ändern.

corpsman hat geschrieben:Hart Kodierte Pathdelims sind nicht Plattformunabhängig besser :

Code: Alles auswählen

 
procedure TWnd_LazPlan.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  // ObjectPath definieren
  ObjectPath := ExtractFilePath(Application.ExeName) + 'Components'+PathDelim;
  // CfgPath und CfgFile definieren
  CfgPath :=  IncludeTrailingPathDelimiter(GetEnvironmentVariable('appdata')) + 'LazPlan'+PathDelim;
   CfgFile := CfgPath + 'LazPlan.cfg';     
 
Ja, Windows kann sowohl "/" als auch "\", aber mit PathDelim wäre es definitiv eleganter und sauberer.

corpsman hat geschrieben:Dann kommt noch 2 mal die Meldung das das Verzeichnis "/lazplan/" nicht erstellt werden kann, ich denke mal das liegt an GetEnvironmentVariable('appdata'), bin mir aber nicht sicher.
Ja, da kann man ja einfach mit einem ifdef schalter "Home" statt "appdata" unter Linux nehmen.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

itjump
Beiträge: 179
Registriert: Do 13. Okt 2016, 18:35
Wohnort: Winnenden

Re: LazPlan - Schaltplansoftware

Beitrag von itjump »

compmgmt hat geschrieben:Ja, da kann man ja einfach mit einem ifdef schalter "Home" statt "appdata" unter Linux nehmen.


Vorsicht:, die Schreibweise ist äußerst wichtig, da Linux Case Sensitive. Normal schreibt man es als Umgebungsvariable so: $HOME aber es kann auch sein, das beim Programmieren das "$"-Zeichen nicht geschrieben wird, aber die groß - klein Schreibung ist sehr wichtig.

LG
ITjump

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: LazPlan - Schaltplansoftware

Beitrag von compmgmt »

itjump hat geschrieben:
compmgmt hat geschrieben:Ja, da kann man ja einfach mit einem ifdef schalter "Home" statt "appdata" unter Linux nehmen.


Vorsicht:, die Schreibweise ist äußerst wichtig, da Linux Case Sensitive. Normal schreibt man es als Umgebungsvariable so: $HOME aber es kann auch sein, das beim Programmieren das "$"-Zeichen nicht geschrieben wird, aber die groß - klein Schreibung ist sehr wichtig.

LG
ITjump
Der Variablenprä- und suffix wird weggelassen (unter Linux "$", unter Windows "%"). Und ja, "HOME" schreibt man komplett in groß. Hatte ich ja schon mal gefragt ;)
viewtopic.php?f=16&t=10182

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: LazPlan - Schaltplansoftware

Beitrag von siro »

Hallo compmgmt,
ich hab dein Programm grad mal runtergeladen und ausprobiert. Lief auf Anhieb unter Windows, jedoch nur die .exe Datei.
Ohne Anleitung, kam ich sofort zurecht. Funktioniert doch recht ordentlich.
Mit einem Doppeltklick auf das Listenelement könnte man die Taste "Schaltsymbol erstellen" direkt aufrufen, das lässt sich dann einfacher handhaben.
Mir gefällt es, einfach weiter machen.

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: LazPlan - Schaltplansoftware

Beitrag von compmgmt »

siro hat geschrieben:Hallo compmgmt,
ich hab dein Programm grad mal runtergeladen und ausprobiert. Lief auf Anhieb unter Windows, jedoch nur die .exe Datei.
Ohne Anleitung, kam ich sofort zurecht. Funktioniert doch recht ordentlich.
Mit einem Doppeltklick auf das Listenelement könnte man die Taste "Schaltsymbol erstellen" direkt aufrufen, das lässt sich dann einfacher handhaben.
Mir gefällt es, einfach weiter machen.

Siro
Vielen Dank für das Feedback :D

Gute Idee, hab ich direkt eingebaut. Zusätzlich ist mir dann auch noch die Idee gekommen, dass man gleiches mit der Beschriftung machen könnte, nur eben per Enter-Taste.


@corpsman Die entsprechenden Stellen sind jetzt geändert und es sollte unter Linux funktionieren:

Code: Alles auswählen

// CfgPath und CfgFile definieren
  {$ifdef mswindows}
    CfgPath := IncludeTrailingPathDelimiter(GetEnvironmentVariable('appdata')) + 'LazPlan' + PathDelim;
  {$else}
    CfgPath := IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOME')) + '.LazPlan' + PathDelim;
  {$endif}

LG
compmgmt

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: LazPlan v0.0.0.1 - Schaltplansoftware

Beitrag von shokwave »

Sorry wenn ich mich einmische, aber wie wäre es mit

Code: Alles auswählen

//Pfad für Einstellungen ermitteln
CfgPath :=  GetAppConfigDir(False);
//Pfad wenn nicht vorhanden anlegen
if not DirectoryExists(CfgPath) then
  ForceDirectories(CfgPath);
mfg Ingo

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: LazPlan v0.0.0.1 - Schaltplansoftware

Beitrag von compmgmt »

shokwave hat geschrieben:Sorry wenn ich mich einmische, aber wie wäre es mit

Code: Alles auswählen

//Pfad für Einstellungen ermitteln
CfgPath :=  GetAppConfigDir(False);
//Pfad wenn nicht vorhanden anlegen
if not DirectoryExists(CfgPath) then
  ForceDirectories(CfgPath);

Wäre genau so möglich, ja.

EDIT: Wenn man die Binärdatei umbennen würde, würde sich auch der Pfad ändern. Daher eher ungeeignet.
Zuletzt geändert von compmgmt am Fr 21. Jul 2017, 14:04, insgesamt 1-mal geändert.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: LazPlan v0.0.0.1 - Schaltplansoftware

Beitrag von wp_xyz »

So wie ich ich das sehe, setzt dein Programm den Schaltplan aus Bitmaps zusammen. Das ist ok, soweit du nur an einem sauber gezeichneten Schaltplan interessiert bist. Allerdings verschenkst du viele Möglichkeiten. Z.B. könntest du aus dem Schaltplan eine Netzliste für SPICE zusammenstellen; damit könntest du die Funktion der Schaltung simulieren und würdest sehen, ob und wie sie funktioniert, ohne irgendetwas löten zu müssen (https://de.wikipedia.org/wiki/SPICE_(Software)). Dazu musst du alle Knoten (= Verbindungspunkte) durchnummerieren und die elektischen Eigenschaften des Bauelements zwischen jeweils zwei (oder drei, oder mehr - je nach Bauelement) angeben, z.B. "R1 1 2 1k" - d.h. "zwischen den Punkten 1 und 2 liegt das Bauteil R1; das "R" bedeutet, dass es sich um einen Widerstand handelt, und dieser hat den Wert 1kOhm). Eine relativ umfangreiche kostenlose Version von SPICE ist LTSpice: http://www.linear.com/designtools/software/ (allerdings mit Fokus auf den Bauelementen von Linear Technolgies (LT)). Nach dem laden der SPICE-Datei (es gibt viele Beispiele) klickst du auf Run, bekommst den Schaltplan und kannst mit einer Art Tastkopf die einzelnen Knoten der Schaltung anklicken und siehst den Verlauf der Spannung.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: LazPlan v0.0.0.1 - Schaltplansoftware

Beitrag von mse »

wp_xyz hat geschrieben:Allerdings verschenkst du viele Möglichkeiten. Z.B. könntest du aus dem Schaltplan eine Netzliste für SPICE zusammenstellen; damit könntest du die Funktion der Schaltung simulieren und würdest sehen, ob und wie sie funktioniert, ohne irgendetwas löten zu müssen (https://de.wikipedia.org/wiki/SPICE_(Software)).

In diesem Zusammenhang kann man auch Ngspice erwähnen:
https://de.wikipedia.org/wiki/Ngspice
Das letzte Release ist zwar schon eine Weile her, die Git-Version wird laufend weiterentwickelt. Der letzte master-commit ist von 2017-07-18.
Für Ngspice es die in Free Pascal geschriebene Oberfläche MSEspice:
https://sourceforge.net/projects/mseuniverse/

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: LazPlan v0.0.0.1 - Schaltplansoftware

Beitrag von siro »

Grad nochmal das aktuelle heruntergeladen.

Den Doppelklick hast Du nun eingeführt.

Code: Alles auswählen

procedure TWnd_LazPlan.LB_ObjectsDblClick(Sender: TObject);
begin
   Btn_CreateObjectClick(Btn_CreateObject);
end;
 
 
Da brauchst aber nur schreiben:

Btn_CreateObjectClick(self);

Man übergibt eigentlich fast immer den Sender, also den Auslöser des Ereignisses.
Self steht dann für deine ListBox LB_Objects
Das wird aber bei Dir eh nicht ausgewertet und ist somit egal.

Compiliert bekomme ich es, aber wenn ich das Programm starte bekomme ich eine Fehlermeldung:
List index (-1) out of bounds
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: LazPlan v0.0.0.1 - Schaltplansoftware

Beitrag von compmgmt »

wp_xyz hat geschrieben:So wie ich ich das sehe, setzt dein Programm den Schaltplan aus Bitmaps zusammen. Das ist ok, soweit du nur an einem sauber gezeichneten Schaltplan interessiert bist. Allerdings verschenkst du viele Möglichkeiten. Z.B. könntest du aus dem Schaltplan eine Netzliste für SPICE zusammenstellen; damit könntest du die Funktion der Schaltung simulieren und würdest sehen, ob und wie sie funktioniert, ohne irgendetwas löten zu müssen (https://de.wikipedia.org/wiki/SPICE_(Software)). Dazu musst du alle Knoten (= Verbindungspunkte) durchnummerieren und die elektischen Eigenschaften des Bauelements zwischen jeweils zwei (oder drei, oder mehr - je nach Bauelement) angeben, z.B. "R1 1 2 1k" - d.h. "zwischen den Punkten 1 und 2 liegt das Bauteil R1; das "R" bedeutet, dass es sich um einen Widerstand handelt, und dieser hat den Wert 1kOhm). Eine relativ umfangreiche kostenlose Version von SPICE ist LTSpice: http://www.linear.com/designtools/software/ (allerdings mit Fokus auf den Bauelementen von Linear Technolgies (LT)). Nach dem laden der SPICE-Datei (es gibt viele Beispiele) klickst du auf Run, bekommst den Schaltplan und kannst mit einer Art Tastkopf die einzelnen Knoten der Schaltung anklicken und siehst den Verlauf der Spannung.
Ist mir durchaus bewusst. Sowas hatte ich evtl später vor, aber vorerst mache ich das ganze mit Bitmaps

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Antworten