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

Ergebnis 1 bis 6 von 6

Thema: Datenverteiler

  1. #1
    Registriert seit
    15.12.2009
    Beiträge
    35
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Ich versuche momentan einen Datenverteiler zu programmieren. Habe schon ein paar Versuche gemacht, aber das gefällt mir alles nicht da es nicht sehr professionel ist was ich bisher da zusammen gestrickt habe.
    Vieleicht habt ihr eine gute Lösung.
    Ich will paraktisch eine 3 Byte Behlsfolge an die COM Schnittstelle der SPS versenden. Den COM Baustein habe ich in meiner LIB.
    Der COM Baustein um die Schnittelle anzusprechen darf im Programm nur einmal aufgerufen werden es hat auch nur ein "IN" Beinchen wo ich nacheinander Werte reinschreiben kann.Sobald der Wert an "IN" versendet wurde gibt der Baustein mir eine OUT wieder (daten versendet).

    Deshalb benötige ich sowas wie einen Datenverteiler der jedes mal eine neuen wert an das Beinchen des Bausteines schreibt.
    Das erste Byte enthält z.B eine Behlsziffer sagen wir mal ein 2 das zweite Byte enthält eine adresse sagen wir mal eine 10 das dritte Byte enthält einen wert von 0 bis 255. Ich will diese 3 Parameter immer nacheinader and die COM Schnittstelle schicken. Wobei die drei Werte sich natürlich ändern.

    Wie würdet Ihr sowas sauber programmieren ??

    Grüße
    Paulo
    Zitieren Zitieren Datenverteiler  

  2. #2
    Registriert seit
    06.01.2005
    Ort
    im schönen Lipperland
    Beiträge
    4.472
    Danke
    498
    Erhielt 1.143 Danke für 736 Beiträge

    Standard

    Ich würd das ganze mit einer Schrittkette lösen.

    An den IN deines Bausteins schreibst du eine Variable die du dann in Abhangigkeit deiner Schrittkette mit dem passenden Wert beschreibst. Bekommst du von deinem Baustein die Rückmeldung "Daten versendet" gehts weiter zum nächsten Schritt.
    Früher gab es Peitschen .... heute Terminkalender

  3. Folgender Benutzer sagt Danke zu Lipperlandstern für den nützlichen Beitrag:

    paulo78 (31.03.2010)

  4. #3
    Registriert seit
    05.03.2007
    Ort
    Lindlar
    Beiträge
    112
    Danke
    19
    Erhielt 20 Danke für 18 Beiträge

    Standard

    Du könntest auch relativ simpel eine Sprungleiste einsetzen und mit jedem OUT-Impuls deines Sende-Bausteins zählst du eine Variable hoch.
    An den jeweiligen Sprungmarken transferierst du dann den entsprechenden Wert an den Sende-Baustein.

    Gruß
    Matthias
    IF Time < '09:00:00' THEN
    SELECT finger from right hand where ID=3
    END IF

  5. #4
    Registriert seit
    15.12.2009
    Beiträge
    35
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Panzerknacker,

    Das hört sich gut an, könntest du das vieleicht ein bischen genauer erläutern.

    Gruß

  6. #5
    Registriert seit
    05.03.2007
    Ort
    Lindlar
    Beiträge
    112
    Danke
    19
    Erhielt 20 Danke für 18 Beiträge

    Standard

    Hallo, es könnte in etwa so aussehen:
    Code:
          U     "DB_SendBuffer".FC_Out
          FP    "DB_SendBuffer".HM_FP_cnt
          SPBN  cnt
          L     "DB_SendBuffer".cnt
          L     1
          +I    
          T     "DB_SendBuffer".cnt
    cnt:  NOP   0
    
          L     "DB_SendBuffer".cnt         // aktueller Zähler
          SPL   X0
          SPA   X0                          // cnt 0 - Fehler
          SPA   X1                          // cnt 1 - 1. Sende Wert
          SPA   X2                          // cnt 2 - 2. Sende Wert
          SPA   X3                          // cnt 3 - 3. Sende Wert
          SPA   X4                          // cnt 4 - 4. Sende Wert
          SPA   X5                          // cnt 5 - 5. Sende Wert
          SPA   X6                          // cnt 6 - 6. Sende Wert
          SPA   X7                          // cnt 7 - 7. Sende Wert
          SPA   X8                          // cnt 8 - 8. Sende Wert
    X0:   NOP   0                           // hier Fehlerauswertung
          SPA   ERR
    
    X1:   L     "DB_SendBuffer".Wert[1]
          SPA   SND
    X2:   L     "DB_SendBuffer".Wert[2]
          SPA   SND
    X3:   L     "DB_SendBuffer".Wert[3]
          SPA   SND
    X4:   L     "DB_SendBuffer".Wert[4]
          SPA   SND
    X5:   L     "DB_SendBuffer".Wert[5]
          SPA   SND
    X6:   L     "DB_SendBuffer".Wert[6]
          SPA   SND
    X7:   L     "DB_SendBuffer".Wert[7]
          SPA   SND
    X8:   L     0
          T     "DB_SendBuffer".cnt
          L     "DB_SendBuffer".Wert[8]
          SPA   SND
    
    SND:  T     "DB_SendBuffer".SendWert
          SET   
          R     "DB_SendBuffer".Err
    
    // hier könnte dein FC-Aufruf zum senden stehen - muss aber nicht
    
          SPA   END
    
    ERR:  NOP   0
          SET   
          S     "DB_SendBuffer".Err
          L     1
          T     "DB_SendBuffer".cnt
    
    END:  NOP   0
    Alle Angaben ohne Gewähr - ungetestet und ohne großartige Sicherheitsabfragen.

    Gruß
    Matthias
    Geändert von Panzerknacker (27.03.2010 um 18:54 Uhr)
    IF Time < '09:00:00' THEN
    SELECT finger from right hand where ID=3
    END IF

  7. Folgender Benutzer sagt Danke zu Panzerknacker für den nützlichen Beitrag:

    paulo78 (31.03.2010)

  8. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ist das nicht eine typische Aufgabe für einen Ringpuffer?
    Wikipedia - Warteschlange & Ringpuffer

    Immer, wenn Du was senden willst, wirfst Du die 3 Zeichen sofort in den Ringpuffer hintendran (enter).
    Der Sendebaustein überwacht den Ringpuffer, und wenn der nicht leer ist, dann holt er 1 Zeichen raus
    (leave) und versendet es.
    Dazu mußt Du im Ringpuffer einen In-Pointer und einen Out-Pointer verwalten.

    Wenn Du allerdings nach jeder gesendeten 3-Zeichen-Folge auf eine Antwort des Empfängers warten
    mußt, dann wird es etwas komplizierter.

    Gruß
    Harald
    Zitieren Zitieren Ringpuffer  

  9. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    paulo78 (31.03.2010)

Lesezeichen

Berechtigungen

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