TheBadFrog
Level-1
- Beiträge
- 12
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo Gemeinde,
ich habe folgende Aufgabe.
Erstellen eins Handlingbausteins für eine serielle Schnittstelle.
Aufbau ist grob beschriebn so:
S7 greift über Profibus auf einen Profibusteilnehmer auf dem das serielle Modul arbeitet.
E/A Breite 10 Byte
2 Byte Control/Status und 8 Byte Nutzdaten
Scheibe ähnelt der Beckhoff Serial Scheibe (teilweise)
Um die Daten konsistent zu erhalten, habe ich SFC 14 und 15 verwendet.
Die gewählten Sende und Empfangs DB´s habe als UDT deklariert, so kann ich die einzelnen Bytes/Bits direkt,sybolisch ansprechen TA,TR,.... ansprechen.
Leider ist es nun so, dass mir die Scheibe beim Empfangen leider nicht die 8 Bytes Nutzdaten am Stück sendet!
(Ich muss also die Daten aus dem Empfangs DB des SFC holen und umkopieren und zu einem Paket zusammenbauen!)
Sondern meist 1 Byte und dann die Reslichen, bzw. mannachmal auch in 3 Anläufen.
Habe schon einige Ansätze versucht, aber bisher nichts brauchbares.
Ablauf dachte ich mir so
Datenlänge ist vorgegeben auf 10 Byte (bzw.auf max 10Byte variabel) (0-9, wobei die Nutzdaten in Byte 2-9 liegen, Byte 0 enthält Handshake Bits, Byte 1 die Längenangaben der gesendeten bzw. empfangenen Bytes....)
Abfage der empfangen Bytes (Länge) (sind in Byte 1)
Diese entwede in einen anderen DB umkopieren oder in einem Arry über Pointer ablegen
Ist die empfangen Byteanzahl kleiner als 8, muss man von der Scheibe neue Daten anfordern (Handshake)
Diese wieder wegschreiben (mit Pointer in akt. Stelle im Array hochzählen)
Ist die Anzahl des 1. einlesens und des 2. einlesens =8 ok,
sonst nochmals einlesen...........
Allg. Frage an die Praktiker, mein Baustein soll ja dem Anwender der Scheibe die Nutzdatenbyte zur Verfügung stellen, reicht es hier diese in einem Array zu hinterlegen bzw. einem DB (für einen Zyklus der SPS, oder soll bzw. muss ich diese Puffern? z.B. in einem DB 50 Bytes in einem Ringpuffer hinterlegen?
Dann müsste der Anwender aber wieder mein DB auswerten?
Gruß TheBadFrog
ich habe folgende Aufgabe.
Erstellen eins Handlingbausteins für eine serielle Schnittstelle.
Aufbau ist grob beschriebn so:
S7 greift über Profibus auf einen Profibusteilnehmer auf dem das serielle Modul arbeitet.
E/A Breite 10 Byte
2 Byte Control/Status und 8 Byte Nutzdaten
Scheibe ähnelt der Beckhoff Serial Scheibe (teilweise)
Um die Daten konsistent zu erhalten, habe ich SFC 14 und 15 verwendet.
Die gewählten Sende und Empfangs DB´s habe als UDT deklariert, so kann ich die einzelnen Bytes/Bits direkt,sybolisch ansprechen TA,TR,.... ansprechen.
Leider ist es nun so, dass mir die Scheibe beim Empfangen leider nicht die 8 Bytes Nutzdaten am Stück sendet!
(Ich muss also die Daten aus dem Empfangs DB des SFC holen und umkopieren und zu einem Paket zusammenbauen!)
Sondern meist 1 Byte und dann die Reslichen, bzw. mannachmal auch in 3 Anläufen.
Habe schon einige Ansätze versucht, aber bisher nichts brauchbares.
Ablauf dachte ich mir so
Datenlänge ist vorgegeben auf 10 Byte (bzw.auf max 10Byte variabel) (0-9, wobei die Nutzdaten in Byte 2-9 liegen, Byte 0 enthält Handshake Bits, Byte 1 die Längenangaben der gesendeten bzw. empfangenen Bytes....)
Abfage der empfangen Bytes (Länge) (sind in Byte 1)
Diese entwede in einen anderen DB umkopieren oder in einem Arry über Pointer ablegen
Ist die empfangen Byteanzahl kleiner als 8, muss man von der Scheibe neue Daten anfordern (Handshake)
Diese wieder wegschreiben (mit Pointer in akt. Stelle im Array hochzählen)
Ist die Anzahl des 1. einlesens und des 2. einlesens =8 ok,
sonst nochmals einlesen...........
Allg. Frage an die Praktiker, mein Baustein soll ja dem Anwender der Scheibe die Nutzdatenbyte zur Verfügung stellen, reicht es hier diese in einem Array zu hinterlegen bzw. einem DB (für einen Zyklus der SPS, oder soll bzw. muss ich diese Puffern? z.B. in einem DB 50 Bytes in einem Ringpuffer hinterlegen?
Dann müsste der Anwender aber wieder mein DB auswerten?
Gruß TheBadFrog