AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ablauf für Fräsmaschine programmieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ablauf für Fräsmaschine programmieren

Ein Thema von 100nF · begonnen am 26. Sep 2008 · letzter Beitrag vom 21. Nov 2008
 
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#26

Re: Ablauf für Fräsmaschine programmieren

  Alt 5. Okt 2008, 14:09
Zitat von urbanbruhin:
Zitat:
Zum G-Code-Fifo: Es ist viel einfacher, du verschiebst nur den Pointer.
Also beim ersten Befüllen wird ganz normal "von unten nach oben" aufgefüllt. Und sobald das Array voll ist, wird wieder das erste Byte überschrieben und sozusagen von vorne begonnen? mit Pointer meinst du einfach eine Varieble die sich merkt, welcher Befehl gerade ausgeführt wird?
Der FiFo besteht aus einem Array und ein paar Zusatzinformationen. Du hast zwei Zeigervariablen, die auf das nächste zu lesende/schreibende Byte zeigen. Schreibst du jetzt eine G-Code-Struktur, wird der Schreibzeiger am Ende auf den nächsten freien Platz zeigen, ist er am Ende des Arrays, wird er wieder auf den Anfang gesetzt. Liest du aus dem Fifo, wird der Schreibzeiger weitergeschoben.
RN-Wissen: Fifo mit avr-gcc
Bei Interesse kann ich auch einmal meine Fifo-Implementierung anhängen.

Zitat von urbanbruhin:
Hmm in Delphi hab ich das noch nicht richtig hingekriegt...
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  b1, b2, b3, b4, b5, bn, bx: byte;
  i: integer;
begin
  b1 := ord(strtoint(edit2.text));
  b2 := ord(strtoint(label13.caption));
  b3 := ord(strtoint(edit4.text));
  b4 := ord(strtoint(edit6.text));
  b5 := ord(strtoint(edit3.text));

  for i := 1 to length(edit5.Text) do
    if I = 1 then
      bn := ord(edit5.text[i])
    else
      bn := bn + ord(edit5.text[i]);

  bx := ((b1+b2+b3+b4+b5+bn)*(-1));

  label14.caption := inttostr(bx);
end;
Schlussendlich krieg ich gar keine negative Zahl?! Aber das liegt vermutlich daran dass ein Byte kein Vorzeichen enthält oder? Und per RS232 kann man doch eh nur 0 bis 255 verschicken oder nicht?
Die Checksummenberechnung sieht ohne das ganze "Gemüse" außenrum so aus:

Delphi-Quellcode:
type TPayload = array of byte;
const STARTBYTE = $0F;
const STOPBYTE = $F0;
const MIN_MESSAGE_SIZE = 6;

function Build_Checksum(command : byte, payload : TPayload) : byte;
  var i : byte;
  begin
  result := STARTBYTE+2*command+MIN_MESSAGE_SIZE+sizeof(payload); //erster Header, bestehend aus startbyte, command und message size (berechnet aus MIN_MESSAGE_SIZE und der Payload-Größe), sowie einem Teil des zweiten Headers, nämlich dem wiederholten command)
  for i := 0 to high(payload) do //payload aufaddieren
    result := result+payload[i];
  result := (not result) + 1; //zweierkomplement bilden
  end;
Zitat von urbanbruhin:
EDIT2: Bei einem Werkzeugwechsel wird ja eine Benutzereingabe verlangt, dass das Programm weiterläuft. Machst du diese Hardwaremässig (Taster) oder am PC mit einem Button? Ich tendiere da vorläufig eher zu einem Button, später werde ich das aber vermutlich Hardwaremässig noch realisieren. Ich habe nämlich vor, einen alten PC ohne Bildschirm usw. zu verwenden, wo ich dann einfach einen USB-Stick mit dem Programm reinstecken kann und der PC das automatisch ausliest und die Fräse startet. Aber vorläufig mach ich das mal mit meinem eigenen PC...
So weit bin ich noch nicht. Im Moment mache ich mir Gedanken zur Umsetzung der Schnittstelle Command_Decode=>G-Code-Präprozessor->Motion_Control, unter Berücksichtigung des gewünschten Funktionsumfanges (Anfahrrampen etc.)
Geplant ist, dass sowohl über die Software, als auch über einen Schalter bestätigt werden kann.
Geplant ist ferner, dass der PC anzeigt, wo die Fräse gerade ist (oder glaubt zu sein), was sie bereits abgefahren hat und was noch bevorsteht.

@jokerfacehro:
Log erfolgt, wie oben geschrieben, durch Rückmeldung an den PC, welche Schritte gerade erledigt werden.
Havarie gibt es in verschiedenen Formen: Not-Aus, Endschalter (beides vorgesehen, letzteres auch für Referenzfahrt) und Watchdog-Reset (wird vermutlich auch eingebaut). Letzterer springt ein, wenn die Firmware nicht regelmäßig einen Timer zurücksetzt, und soll so diverse "Abstürze" der Firmware (Stackpointer gekillt o.ä.) durch Reset neutralisieren und schlimmeres vermeiden.

mfG
Markus
Markus
  Mit Zitat antworten Zitat
 


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 04:42 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