AGB  ·  Datenschutz  ·  Impressum  







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

OnChangeValue ?

Ein Thema von akurka · begonnen am 13. Jan 2016 · letzter Beitrag vom 18. Jan 2016
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#21

AW: OnChangeValue ?

  Alt 14. Jan 2016, 23:49
ja übrigens das fehlt noch :
Delphi-Quellcode:

  TMeineKlasse = class
    private
       fBWStellung: Integer; //Hier ist der Wert gespeichert
       fOnValueChange :TNotifyEvent;
       procedure setBWStellung(const value: Integer);
       //function getBWStellung:Integer;
    public
      //BWStellung steht für Eigenschaft von fBWStellung
      Property BWStellung :Integer read fBWStellung write SetBWStellung;
      property OnValueChange: TNotifyEvent read FOnValueChange write FOnValueChange;
    end;
   // setBWStellung :Setter ist eine Methode um in fBWStellung zu schreiben
   //fBWStellung kann nur über das propperty ändern

var
  Form2: TForm2;
  MeineKlasse: TMeineKlasse;
  fBWStellung :integer;
  ActiveImage :TImage;
  F_KeyA :boolean;
  procedure OptionFehlt;

implementation
usw.
Anton Kurka
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#22

AW: OnChangeValue ?

  Alt 15. Jan 2016, 01:47
Akurka, tut mir leid, aber ich geb's hier auf. Offenbar fehlen mir noch weitere Informationen, um dein Problem richtig zu verstehen. Es gibt hier zahlreiche berufenere Geister als mich, die dir sicher gerne weiterhelfen werden.
  Mit Zitat antworten Zitat
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#23

AW: OnChangeValue ?

  Alt 15. Jan 2016, 09:25
Hallo Perlsau
ja ok, ich meine ich habe mein Problem genügend erklärt (siehe Antwort an Dich und Dejan Vu), vollständigkeits halber zitiere ich es noch einmal :

Zitat:
------------------------------------------------
Zitat von Dejan Vu
Habe ich das jetzt so verstanden, dass STATUS.CNC.ZBETR irgendwo außerhalb gesetzt wird und man auf die Änderung dieses Speicherbereiches reagieren will? Das kann mit der Lösung von Perlsau nicht funktionieren.
Laut Variable ist das der Status irgendeiner CNC-Maschine. Und dieser Wert ändert sich dann, wenn die CNC-Maschine ihren Status ändert. In der SPS-Welt pollt man den Wert (alle paar ms) und reagiert dann auf Änderungen.
------meine Antwort-----------------------------------------
Ja das ist so, der STATUS.CNC.ZBETR ist ein Byte aus einer 16 Byte Meldung die in unregelmässigen Abständen über RS232 in einem Thread empfangen wird.
Die Meldung selber kommt relativ häufig aber der STATUS.CNC.ZBETR ändert sich nur dann, wenn der Benützer das Betriebswahlschalter wechselt.Und das kann Stunden dauern. Ausserdem gibt es ganzer Menge andere Meldungen.

Bis jetzt habe ich es mit Polling gelöst was aber nicht gerade sauber ist. Der Grund warum ich es anders machen will ist, dass bei einem BW Wechsel das aktuelle Menü komplett neu aufgebaut wird.
Sonst bleibt das Menue bestehen und es werden nur Anzeigen geändert.
Aber auch das stösst an Grenzen mit Polling.

Eigentlich suchte ich eine Komponente die auf Aenderung einer Variable
reagiert (OnChangeValue).
Dieser Komponente möchte ich dann für verschiedene Variablen
anwenden (OnChangeBWStellung, OnChangeIstwert, OnchangeAchsenWahl usw.)

Die Polling Lösung hat ein gewichtige Nachteil, es verbraucht sehr viel Rechenzeit(bei allen diesen Meldungen).

Im übrigem ist mir klar, dass wenn die neue Lösung funktioniert ich mich auch mit "kritische Region" befassen muss, das aber später,eines nach dem anderem.

Die RS232 ist sowieso nur vorläufige (alte) Lösung , im Zukunft möchte ich auf EtherCAT(oder OpenCAN) umstellen, schon deswegen möchte ich die Resourcen sparen.
Nun muss ich auch die setter Methode immer wieder aufrufen
was dem Polling eigentlich gleich kommt, ist das nicht so ?

Nun ich verstehe, dass Du genug hast Dich mit OOP Anfänger
zu plagen. Trotzdem vielen Dank für Deine Hilfe, ich habe
wieder einiges gelernt.
Gruss Anton
Anton Kurka
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#24

AW: OnChangeValue ?

  Alt 15. Jan 2016, 10:59
Lies dir mal hier den 2ten Abschnitt: Prozedurale Typen und Objekte durch.

Da geht es auch um ein TNotifyEvent und wie man eine entsprechende Prozedur definiert, erzeugt und benutzt. Oder informiere dich einmal zum Stichwort "Methodenzeiger".


Musst du eigentlich mehrere verschiedene Werte überwachen (du würdest dann für jeden ein entsprechendes Objekt von TMeineKlasse brauchen) oder geht es nur um einen Wert? Im letzteren Fall könntest du dir den ganzen Aufwasch ja sparen und mit einer Variablen + Setter + Property direkt in Form2 arbeiten.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#25

AW: OnChangeValue ?

  Alt 15. Jan 2016, 11:27
Nun muss ich auch die setter Methode immer wieder aufrufen
was dem Polling eigentlich gleich kommt, ist das nicht so ?
Klar...

Du möchtest einen Event... Aber wo soll der den her kommen? Wer soll den auslösen?

Wie pollst Du den? Du Fragst doch sicherlich etwas ab... Oder? Gibt es einen Trigger der RS232 Routine, nach dem Motto "Neue Daten da"? Das wäre eine Event... Auf den kannst Du reagieren, dann den Wert abfragen und gut ist. Kein Pollen mehr...

Mavarik
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: OnChangeValue ?

  Alt 15. Jan 2016, 12:04
So wäre das im Ansatz richtig:
Delphi-Quellcode:
procedure TForm2.MenueCreate(Sender: TObject);
begin
  keypreview := True;
  ActiveImage := Image1;
  Self.ClientWidth := 512;
  Self.ClientHeight := 256;
  Self.Image1.Width := 511;
  Self.Image1.Height := 255;
  F_obereAchsen := False;
  F_KeyA := False;
  MeineKlasse := TMeineKlasse.Create;
  MeineKlasse.OnvalueChange := Self.OnValueChange;
end;
Nun müsstest du uns nur noch die Stelle zeigen, wo du das machst:

Delphi-Quellcode:
MeineKlasse.BWStellung := ... // Die Zuweisung des neuen Wertes
// Das musst du ja irgendwie durch Pollen im Timer oder Thread umgesetzt haben?!
  Mit Zitat antworten Zitat
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#27

AW: OnChangeValue ?

  Alt 15. Jan 2016, 12:07
Hallo Jumpy
Besten Dank für Dein Tipp.
Ja nach der ersten Durchsicht ist es genau das was mir fehlt.
Habe es augedrückt und werde es genau studieren.

Zu Deiner Frage:

Ja es sind mehrere Werte aus den Meldungen die von der CNC über RS232
kommen. Die Wichtigste ist die Status.CNC Meldung(16 Byte,Array) und daraus das ZBETR(BetriebswahlSchalterStellung=BWStellung= 1 Byte).

Aber es soll aber auch bei der IstWertMeldung
( Anzahl Bytes variert,je nach Anzahl Achsen,pro Achse 24bit)
festgestellt werden ob sich irgend ein Istwert(24bit =>Integer) verändert hat.
Jetzt mache ich es mit Polling und Vergleich AltWert <> NeuWert und nur wenn eine Aenderung da ist, wird es Angezeigt.
Ziemlich umständlich und ein Resourcen Fresser.

Im grossen Ganzen sind es (je nach Betriebswahl) 2 bis 4 unterschiedliche Meldungen die permanent überwacht werden müssen.

Andrererseits muss ich sagen, dass die bisherige Lösung eigentlich nicht schlecht läuft.
Eleganter wäre natürlich eine Lösung wie bei
Tasten z.Bsp. OnKeyPress, darum meine Idee mit OnChangeValue.

Nur wenn sich ein Wert ändert wird entsprechender Erreigniss ausgelöst und der Wert Angezeigt.
Ob es dann weniger Rechenzeit braucht kann ich nicht beurteilen, aber ich will es probieren und testen.
Gruss Anton
Anton Kurka
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#28

AW: OnChangeValue ?

  Alt 15. Jan 2016, 12:10
Eleganter wäre natürlich eine Lösung wie bei
Tasten z.Bsp. OnKeyPress, darum meine Idee mit OnChangeValue.

Nur wenn sich ein Wert ändert wird entsprechender Erreigniss ausgelöst und der Wert Angezeigt.
Ob es dann weniger Rechenzeit braucht kann ich nicht beurteilen, aber ich will es probieren und testen.
Gruss Anton
Hast Du eigentlich meine Antwort gelesen?
  Mit Zitat antworten Zitat
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#29

AW: OnChangeValue ?

  Alt 15. Jan 2016, 12:22
Hallo TiGü
Besten Dank, das " MeineKlasse.OnvalueChange := Self.OnValueChange;"
hat gefehlt.

Ja mit der Polling, dass ist genau das Problem, das mache ich jetzt schon:
Zitat:
Delphi-Quellcode:
MeineKlasse.BWStellung := ... // Die Zuweisung des neuen Wertes
// Das musst du ja irgendwie durch Pollen im Timer oder Thread umgesetzt haben?!
siehe meine vorherige Antwort an Jumpy und an Perlsau.

Wird es punkto Rechenzeit überhaupt etwas bringen mit dem setter, wenn ich den Wert der Variable pollen muss ??
Gruss Anton
Anton Kurka
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#30

AW: OnChangeValue ?

  Alt 15. Jan 2016, 13:12
Wird es punkto Rechenzeit überhaupt etwas bringen mit dem setter, wenn ich den Wert der Variable pollen muss ??
Gruss Anton
Hast Du eigentlich meine Antwort gelesen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      

 

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 19:28 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