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

Ergebnis 1 bis 9 von 9

Thema: FUP-Baustein (Canopen) verlangt Datentyp Array "Anfänger"

  1. #1
    Registriert seit
    22.10.2010
    Beiträge
    188
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe eine S7-kompatible CPU mit CANopen-Schnittstelle und einer Bibliothek für diese Zusatzfunktionen.
    Möchte gerne ein SDO oder PDO verschicken. Feste Werte kann ich natürlich problemlos direkt im dazugehörigen DB eingeben.

    Allerdings müssten die Daten von einen HMI-Display verschickt werden.
    Mit dem Display in einen DB zu schreiben ist natürlich kein Problem.

    Aber der Canopen-Baustein verlangt am Eingang "Data" einen Array-Typ.

    Ein Array in einen DB anlegen hab ich auch schon gemacht. Nur müsste ich jetzt wissen, wie ich den FUP-Baustein mitteile, dass er das Array aus dem DB lesen soll.


    Könnt ihr mir da eine Hilfestellung geben?

    Danke
    Zitieren Zitieren FUP-Baustein (Canopen) verlangt Datentyp Array "Anfänger"  

  2. #2
    Registriert seit
    16.06.2004
    Beiträge
    60
    Danke
    3
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hallo,

    mit #dieser_pointer
    absolut z.B: P#DB100.DBX0.0 BYTE 10

    mfg, jb

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Er verlangt ein ARRAY OF ... was? Der übergebene Pointer P#.... muß auf ein genau so deklariertes Array zeigen. (der Pointer wird dann mit dem symbolischen Name des Arrays im Editor angezeigt)

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #4
    Xplosion ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.10.2010
    Beiträge
    188
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Also wenn ich am FUP-Baustein beim Eingang Namens "Data" was eingebe, erscheint immer die Meldung: Erwarteter Datentyp: INOUT: Array / Sdo-Data

    Im zugehörigen DB-Baustein ist in der Zeile 12 folgendes deklariert:

    Adresse: 10.0
    Deklaration: in_out
    Name: DATA
    Typ: Array
    Anfangswert: "leer"
    Aktualwert: P#P 0.0

    Kann unter Aktualwert nichts anderes eingeben.

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Nochmal meine Frage: wie ist das Array genau deklariert? als ARRAY [x .. y] OF <typ>

    Öffne den FB und schau Dir die Deklaration von DATA im Bausteinkopf an.
    Oder öffne den Instanz-DB mit dem normalen DB-Editor.
    Oder schalte in DB-Param die Ansicht auf die Deklarationssicht um.
    Oder erzeuge aus dem FB oder dem DB eine AWL-Quelle.
    --> dann kannst Du die genaue Deklaration des Arrays sehen.

    Es gibt kein Array, was "einfach nur Array" ist, ein Array besteht aus x Elementen eines Datentyps,
    z.B.: DATA : ARRAY [0..49] OF BYTE

    GENAUSO wie die Deklaration des IN_OUT-Parameters DATA muß die Deklaration des Arrays sein, was Du als Aktualparameter angeben willst.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Xplosion ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.10.2010
    Beiträge
    188
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke für die Hilfe.

    Der FB ist eigentlich ein SFB
    Im Instanz-DB sehe ich auch nur Array
    In der Deklarationsansicht sehe ich Array [1..6] aber ohne of ....
    In einer weitern Zeile nach dem Array steht aber BYTE
    Das Array beginnt bei 10.0
    in der nächsten Zeile steht eine 1* und in der übernächsten erst die Adresse 16.0
    Die Zeile nach dem Array scheint dann wohl noch zum Array zu gehören und deklariert das Byte
    Wie man aus einem DB eine AWL-Quelle erzeugt weiß ich noch nicht.
    Geändert von Xplosion (26.06.2013 um 21:56 Uhr)

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Zitat Zitat von Xplosion Beitrag anzeigen
    Der FB ist eigentlich ein SFB
    Dann sollte es eine Hilfe bzw. Baustein-Beschreibung zu diesem nicht näher bezeichneten SFB geben. Markiere den Baustein und drücke F1 oder schau in das Systemhandbuch Deiner nicht näher bezeichneten "S7-kompatiblen CPU" ...

    Im Instanz-DB sehe ich auch nur Array
    In der Deklarationsansicht sehe ich Array [1..6] aber ohne of ....
    In einer weitern Zeile nach dem Array steht aber BYTE
    Das Array beginnt bei 10.0
    in der nächsten Zeile steht eine 1* und in der übernächsten erst die Adresse 16.0
    Die Zeile nach dem Array scheint dann wohl noch zum Array zu gehören und deklariert das Byte
    Richtig, Array-Deklarationen im Baustein-Kopf oder im DB-Editor bestehen immer aus 2 Zeilen.
    Dein SFB verlangt also ein ARRAY [1..6] OF BYTE (so würde man es in einer AWL-Quelle in einer Zeile schreiben)
    Deklariere in einem DB genau so ein ARRAY [1..6] OF BYTE, das kannst Du dann an den IN_OUT-Parameter dranschreiben.
    Beispiel:
    Code:
    DB12 "myDB"
    -----------
    10.0 | myArray | ARRAY[1..6] |
    *1.0 |         | BYTE        |
    
    
    im Programmcode
    ---------------
    CALL SFBxx, DBxyz
     DATA:="myDB".myArray   // P#DB12.DBX10.0 BYTE 6
    Ich habe vergessen wo man nachlesen kann wie man Arrays deklariert, doch das sollte auch irgendwo in der Step7-Hilfe zu finden sein.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #8
    Xplosion ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.10.2010
    Beiträge
    188
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Es handelt sich um eine Insevis-SPS (CPU 315).

    Gründe: deutlich günstiger, CANopen-Schnittstelle Onboard.


    Hab bis jetzt nur mit Siemens Logo gearbeitet und versuche mich jetzt an der Insevis S7

    Momentan versuche ich mit Hilfe von Büchern in die S7-Programmiersprache einzuarbeiten

    Bis jetzt hab ich aber das Gefühl, dass alles nur unendlich kompliziert ist.....


    Mir fehlen so ganz grundlegende Sachen wie z.b:

    Ein 32Bit-Zähler, der mit Drehgebersignalen zurecht kommt (Richtung) und Abschaltung ab einen bestimmten Zählwert.
    Analogrampe

    Bin wohl doch noch zu sehr an der Siemens Logo festgefahren.

    Ich glaube, bei der S7 muss man sich wohl alles mehr oder weniger selber zusammenbasteln.
    Hab schon eine Analogrampe aus "normalen" Bausteinen zusammegebastelt. Es funktioniert zwar, aber es ist halt doch sehr aufwendig und unübersichtlich.

    Zum 32Bit-Zähler:

    Versuche gerade, einen Wert in einem MD immer um +1 zu erhöhen. So kann ich mir den Zähler selbst bauen.
    Mit einen Vergleicher könnte ich dann einen Abschaltwert realisieren.

    Aber wie gesagt, ich find das echt enorm aufwendig.
    Innerhalb kürzester Zeit habe ich jede Menge FB FC OB DB usw. Das wird ja jetzt schon unübersichtlich.

  9. #9
    Xplosion ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.10.2010
    Beiträge
    188
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nochmal wegen dem Array:

    Hab jetzt im OB1 unter TEMP ein Array 1..6 of Byte deklariert mit dem Namen "SDO"

    Danach lade ich im OB1 einen Hex-Wert und übertrage ihn ins Array ( z.b. t #sdo[1])
    Nach dem Laden wird der Baustein aufgerufen, der das SDO senden soll.

    Das SDO, was verschickt wird, kann ich über einen CAN-BUS-Adapter beobachten. Aber dort, wo dann statt 00 ein hex-Wert drinstehen sollte, bleibt trotzdem alles auf 00

    Mache ich noch irgendwas falsch?

    Im "SDO-Senden"-Baustein ist das Array an der Stelle 10.0 Array[1..6] of BYTE mit dem Namen DATA deklariert.
    IM OB1 habe ich an der Stelle 20.0 ein Array[1..6] of BYTE mit dem Namen SDO deklariert.

Ähnliche Themen

  1. WinCC flexible, Datentyp "TIME"
    Von Onkel Dagobert im Forum HMI
    Antworten: 1
    Letzter Beitrag: 03.07.2017, 13:28
  2. ANY Pointer. Wenn ist DatenTyp NICHT "Byte" ?
    Von JesperMP im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 05.03.2009, 23:11
  3. Probleme mit dem Datentyp "Real"
    Von Johannes F im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 15.01.2008, 22:34
  4. SCL-DB-Zugriff "Ungültiger Datentyp"
    Von kiestumpe im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 25.05.2007, 17:57
  5. Datentyp "ANY" in SCL zerlegen
    Von hubert im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 28.02.2006, 09:42

Lesezeichen

Berechtigungen

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