Step 7 FUP-Baustein (Canopen) verlangt Datentyp Array "Anfänger"

Xplosion

Level-1
Beiträge
202
Reaktionspunkte
1
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Zuletzt bearbeitet:
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" ... :cool:

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 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.
 
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.
 
Zurück
Oben