Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Get Int, Get Float Problem

  1. #11
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Snoopy123123 Beitrag anzeigen
    Dachte auch schon daran mehre Komponenten auf die Form zu ziehen und die Verbindungen alle mit mit nem Knopf oder mit OnCreate einmal aufbauen und nur mit dem schliessen der Form wieder abbaue. Dann würde ich mir auch das ständige ändern der IP Adressen während der Laufzeit ersparen. Trotzdem verstehe ich nicht warum mit noDave.getint(0) nicht das DW0 aus dem DB 9 geladen wird und stattdessen ne Null drinn steht. Im Simatic Manager sehe ich das ganz sicher keine Null drinn steht.
    Probier mal das Beispiel aus (ich glaub da ist ne Exe dabei). Am Code siehst du dann auch, was los ist. Kann es sein, daß du im DB eine DINT hast und eine Int auslesen willst? Dann würde glaube ich auch eine Null auftauchen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  2. #12
    Snoopy123123 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.08.2006
    Beiträge
    125
    Danke
    15
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Habs jetzt nochmal versucht. Eigene Komponente nur für diese IP Adresse angelegt. Verbindung aufgebaut. Verbindung Steht auch ohne Fehler.

    begin
    if Dave.Active then
    begin
    Dave.DBNumber:= 9;

    label10.Caption:= IntToStr(Dave.GetInt(0));


    end
    else
    end;

    Dave.GetInt gibt mir aber ne knallharte Null zurück. Im DB steht auch nur ein INT und kein DINT ! Werde mir auf jedenfall die Demo.exe nochmal anschauen, aber soweit ich die ganzen Variablen aufrufe versteh wird das doch da genau so gemacht.

  3. #13
    Registriert seit
    27.11.2005
    Ort
    im Osten
    Beiträge
    1.183
    Danke
    141
    Erhielt 271 Danke für 248 Beiträge

    Standard

    Blöde Frage: Im DB steht aber auch ein Wert der ungleich null ist, oder ???


    Da ich mich nicht mit Delphi und schon garnicht mit der Delhicomponente auskenne, muss ich doch mal fragen ob man da garkein "read"-befehl benötigt ? wie bekommt man den dann immer aktuelle Werte ?


    EDIT: Extra für unseren Hochadel (von der Reparatur) der mich dazu zwingt

    Draußen ist es ganz schön kalt, soll das der Frühling sein ? ich glaub es kaum
    Aber nicht verzagen es wird bald wärmer !
    Geändert von MW (26.03.2009 um 22:01 Uhr)
    Es ist nicht schwierig, mit noch nicht erreichten Zielen zu Leben; schwierig ist, ohne Ziele zu Leben !
    (Günther Kraftschik)

  4. Folgender Benutzer sagt Danke zu MW für den nützlichen Beitrag:

    rostiger Nagel (26.03.2009)

  5. #14
    Snoopy123123 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.08.2006
    Beiträge
    125
    Danke
    15
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Tja ich kenn mich leider auch nicht damit aus, deshalb diese Krämpfe.

    Da ja Delphi eventorientiert arbeitet habe ich ein Timer mit dem OnTimer Event der jede Sekunde die Procedure abarbeitet.

    Eigentlcih dachte ich das GetInt die Werte liest (sprich der REad Befehl von dem du sprichst) Ist das nicht so ?

  6. #15
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Ich hab mit noch mal die Komponente angesehen. Hast du das richtige Protokoll gewählt? Da gibt es doch schon ein Interval in der Komponente. Port muß 102 sein bei einem Siemens-CP, Protocol "daveProtoISOTCP". Du hast Ereignisse, OnConnect und OnRead, programmier dafür mal eine Routine und laß dir etwas anzeigen (zähl was hoch) damit du siehst, ob da was passiert. Auch ein Breakpoint in den Routinen zeigt dir das. Im Beispiel zur Komponente wird das GetInt im OnRead-Ereignis ausgeführt, also immer, wenn Daten von der SPS gelesen wurden. Noch mal, schau dir das Beispiel an.

    Auch Area (daveDB) und BufLen müssen richtig belegt werden!
    Geändert von Ralle (26.03.2009 um 22:20 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #16
    Snoopy123123 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.08.2006
    Beiträge
    125
    Danke
    15
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Das Protokoll ist richtig, habe vergessen zu erwähnen das andere Funktionen wie dave.writebit oder dave.getdbsize funktioieren. Das bedeutet ja das die Kommunikation stehen muss.

    Aber BufLen habe ich nicht belegt. Wann wird OnRead ausgeführt ? Zur Zeit nutze ich dieses Event nicht. Hatte alles mit dem TTimer Event gemacht. Wird on Read über die dave.interval Zeit Zyklisch ausgeführt ? Wie muss BufKen der Komponente belegt werden, bin mir schon ziemlich sicher das da mein Problem liegt !

    Danke für eure Hilfe

  8. #17
    Snoopy123123 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.08.2006
    Beiträge
    125
    Danke
    15
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo,

    so ich habs jetzt am laufen. Es ist tatsächlich so das man den den Interval Timer der Komponente Setzen mussen und die Variablen über das OnRead event der Komponente auslesen muss.

    Danke für deinen Hinweis Ralle.

    Viele Grüsse

  9. #18
    Snoopy123123 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.08.2006
    Beiträge
    125
    Danke
    15
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Da die get bit funktion nun funktionert stosse ich schon wieder auf mein nächstes Problem

    Den ersten Datensatz möchte ich aus dem DB 9 auslesen. Dann möchte ich noch Daten aus dem DB 65 auslesen. Wie macht man das richtig.

    Ich dachte ich könnte das in meine DaveOnRead Ereignis machen aber der will nicht wirklcih so wie ich will.


    procedure TForm3.NoDaveRead(Sender: TObject);


    begin


    NoDave.DBNumber:= 9;
    NoDave.BufLen:= 68;

    label5.caption:= IntToStr(NoDave.getint(0));
    .
    .
    .

    //Dann Umschalten auf DB 65
    NoDave.DBNumber:= 65;
    NoDave.BufLen:= 54;

    label44.Caption:= IntToStr(NoDave.GetInt(0));

    end;


    Was genau mache ich hier falsch ?

  10. #19
    Registriert seit
    22.02.2007
    Ort
    Sponheim
    Beiträge
    190
    Danke
    3
    Erhielt 10 Danke für 9 Beiträge

    Standard

    Hi,

    du musst die Bytes auch erst von der Steuerung in den Buffer einlesen.

    Code:
    NoDave.ReadBytes();
    Wie kann es sein, dass am Ende des Geldes noch Monat übrig ist?
    Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück!
    engbarth.es

  11. #20
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich denke, du kannst den DB nicht im OnRead-Ereignis umstellen und dann gleich Daten daraus lesen wollen. Denn das Ereigniss feuert ja in dem Moment, wo die Komponente die Daten gelesen hat, aber halt aus dem "alten" DB! Also außerhalb umstellen oder vielleicht beim Verlassen von OnRead und dann, wenn OnRead feuert in der OnRead-Procedure als erstes den eingestellten DB ermittlen und danach die entsprechenden Lesefunktionen aufrufen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. REAL to Float
    Von Mutabor im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 24.10.2011, 16:27
  2. Float in Real wandeln - SCL
    Von Gerri im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 23.07.2010, 15:29
  3. UINT to Float
    Von Raydien im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 19.01.2010, 09:17
  4. 4 Byte (float) auf Real?
    Von klauserl im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 07.02.2008, 21:36
  5. libnodave - Float auf SPS schreiben
    Von seeba im Forum Hochsprachen - OPC
    Antworten: 16
    Letzter Beitrag: 15.11.2005, 23:30

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •