siemens sps zu hardware kommunizieren mit Rs422/485

Du hast einfach JSEngineerings code 1-zu-1 reinkopiert ?? obwohl das er schreint "C-ähnlich". Es ist nur einen übergeordnete Beispiel wie man es machen konnte. Die Implementierung benötigt etwas mehr.
Wenn man dein Code anschaut, dann denke ich dass deine Benutzername "SPS Engineering" etwas irreführend ist.
Bei "Engineering" versteht man dass man einen Tiefen technischen Kenntniss zu den Gebiet hat.
 
Du hast einfach JSEngineerings code 1-zu-1 reinkopiert ?? obwohl das er schreint "C-ähnlich". Es ist nur einen übergeordnete Beispiel wie man es machen konnte. Die Implementierung benötigt etwas mehr.
Wenn man dein Code anschaut, dann denke ich dass deine Benutzername "SPS Engineering" etwas irreführend ist.
Bei "Engineering" versteht man dass man einen Tiefen technischen Kenntniss zu den Gebiet hat.
Meine Kommentare sind nicht zur Schönheit da... da gehören Deine Bausteine hin... und wenn Du schon meinen Code 1:1 kopierst, ohne Deine Bausteine einzufügen, dann mußt Du zumindest eine Verbindung per Steuer-Variablen zu Deinem Code herstellen.
Fertigen Code kannst Du hier in den seltensten Fällen erwarten.
 
Hier habe ich die code in scl geschrieben das hier markiert ist counter obwohl 1 gesetzt ist , springt der nicht zum 1 anweisung. kann jemand mir helfen damit . Hier will ich in schrittkette laufen. Danke.
 

Anhänge

  • counter.JPG
    counter.JPG
    145,8 KB · Aufrufe: 22
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann es sein, dass Du den Counter in jedem Zyklus mit 0 initialisierst?
entweder über eine Anweisung vor/nach dem Case oder ist Counter eventuell eine TEMP Variable?

Mehr Code wäre hier hilfreich.
counter habe ich oben in Temp als int definiert. aber wenn bedingung erfüllt ist muss es unten zum 1 springen aber geht nicht unten. Hat jemand lösung. danke
 

Anhänge

  • counter2.JPG
    counter2.JPG
    77 KB · Aufrufe: 8
  • counter.JPG
    counter.JPG
    95,4 KB · Aufrufe: 8
Temp-Variablen speichern ihren Wert nur bis der Baustein verlassen wird. Im nächsten Zyklus steht da wieder 0 drin. Verschiebe die Variable mal in den Static Bereich.
 
Ich kann nicht das einsetzen ,weil der send.Done und RCV.ndr geht niemals zu TRUE. Deswegen kann ich nicht machen.
Bist Du sicher? DONE und NDR werden nur für einen Zyklus aktiv, das kann man fast nie beobachten. Du könntest einen Zähler mit DONE und NDR verschalten, dann siehst Du ob sich der Zählerstand ändert.

Wenn DONE und NDR wirklich niemals TRUE werden, dann funktioniert das Senden schon gar nicht. Entweder wird der Code gar nicht ausgeführt oder gar kein Sendeauftrag aktiviert (REQ) oder das Send liefert einen ERROR + STATUS, was auch nur einen Zyklus aktiv ist. Direkt nach dem Send-Baustein solltest Du den Error-STATUS irgendwohin sichern/speichern, um den Wert sehen zu können.
Code:
"SEND_PTP_DB"(...
              DONE => "SEND_PTP_DB".DONE,
              ERROR => "SEND_PTP_DB".ERROR,
              ...
             );

//für Beobachten ERROR-STATUS speichern
IF "SEND_PTP_DB".ERROR THEN
    #static_Last_SEND_ERRSTATUS := "SEND_PTP_DB".STATUS;
    #static_ERROR_counter := #static_ERROR_counter + 1;
END_IF;

//für Beobachten erfolgreiche Sendeaufträge mitzählen
IF "SEND_PTP_DB".DONE THEN
    #static_DONE_counter := #static_DONE_counter + 1;
END_IF;

Übrigens: das Speichern der FB-Instanz-Ausgänge in die selbe Instanz (auf sich selbst kopieren wie z.B. DONE => "SEND_PTP_DB".DONE) ist nicht nötig, kann man aber machen um die Werte einfacher beobachten zu können. Was bei Werten, die nur einen Zyklus lang anliegen, aber nicht viel bringt.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dein "IEC_Timer_0_DB".TON(IN := TRUE, ...) wird nicht funktionieren, wenn der Timer nicht auch irgendwo mal mit IN := FALSE aufgerufen wird.
Merke: Timer niemals nur bedingt/manchmal aufrufen, sondern unbedingt immer.
Merke: TON benötigen an IN einen FALSE/TRUE-Übergang zum Starten (der TON muß auch das FALSE an IN mal "sehen")

Harald
 
Hier habe ich mein program funktioniert gut und läuft in schrittkette . erst gibt erste kamera temperatur 001 dann gibt andere kamera temperatur 002
aber jetzt problem ist das der antwort kriege ich langsamer. habe ich auch ein alarm eingesetzt wenn mehr 30 grad ist blinkt led es blinkt led und gibt temperatur aber langsamer. danach habe ich clock bisschen höher gemacht mit 5Hz aber kriege ich antwort vertauscht mit platz in receive buffer. der schickt nicht in schrittkette . hat jemand ahnung damit.
 

Anhänge

  • sk.txt
    5 KB · Aufrufe: 5
Ich würde die ganzen Timer und Blinker aus der Schrittkette raus nehmen, die benötigst du da eigentlich nicht.
Statt dessen die Flanken für das Request selber über die Schrittfolge erzeugen.
Und dann die Schrittkette mit einem Blinker oder Timer zyklisch anstoßen.
 
Zurück
Oben