DB aus Programm erstellen

Kiter11

Level-1
Beiträge
47
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe einen FB an den ich als IN Parameter eine Datenbaustein (Block_DB) angebe.

Ich möchte damit folgendes bewirken: Und zwar beim aufruf des FB´s soll der Nutzer frei entscheiden welchen DB er benutzen möchte (nicht den Instanz DB!! Den muss er ja eh bestimmen).

Nun möchte ich aber das das Programm automatisch einen DB mit der am IN deklarierten Nummer erzeugt (inkl DB länge).

Gibt es da einen SFC für, wenn ja welchen und was muss ich beachten?
 
Du müsstest dann "nur" noch eine Nummer INT übergeben lassen,
dann gehts mit SFC22/23/24 weiter ...

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
  1. SFC22 "Create_DB"
  2. die bausteinnummer muß als WORD übergeben werden, prüfe also vorher die kompatibilität der BLOCK_DB variablen
  3. ansonsten, eigentlich ganz unspannend:
Code:
*
      CALL "CREAT_DB" (
           LOW_LIMIT                := #wDbNumber,// Bereich der DB-Nummer
           UP_LIMIT                 := #wDbNumber,// angeben
           COUNT                    := #wDbLength,// Länge übergeben
           RET_VAL                  := #iCreateReturn,// Fehlercode
           DB_NUMBER                := #wDbNumber);// DB Nummer zur weiterbearbeitung
 
Ich habe das ganze jetzt mal ausgeführt.
OB1 ruft FC1 auf, dieser den FB1 auf. Der FB1 ruft mein Hauptprogramm FB2(Multiinstanz) auf. An den FB2 habe ich an IN1(Block_DB) den DB400 geschrieben.

Quellcode im FB2:

AUF #IN1 \\ aufruf des BLOCK_DB
L DBNO
T #DBNummer \\ DBNummer als WORD

call "creat_DB"
Low_Limit:= #DBNummer
UP_Limit:= #DBNummer
RET_Val:= #Falsche_DB_Nummer \\Stat:INT
DB_Nummer:=#DB_Nummer \\ INOUT:WORD


So "funktioniert" es erst mal. Allerdings steht im RET_VAL der Wert 32945(online)

Darüberhinaus, wann wird der DB denn erstellt?? Kriege ich den im Simatic Manager nicht zu sehen??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe das ganze jetzt mal ausgeführt.
OB1 ruft FC1 auf, dieser den FB1 auf. Der FB1 ruft mein Hauptprogramm FB2(Multiinstanz) auf. An den FB2 habe ich an IN1(Block_DB) den DB400 geschrieben.

Quellcode im FB2:

AUF #IN1 \\ aufruf des BLOCK_DB
L DBNO
T #DBNummer \\ DBNummer als WORD

call "creat_DB"
Low_Limit:= #DBNummer
UP_Limit:= #DBNummer
RET_Val:= #Falsche_DB_Nummer \\Stat:INT
DB_Nummer:=#DB_Nummer \\ INOUT:WORD


So "funktioniert" es erst mal. Allerdings steht im RET_VAL der Wert 32945(online)

Darüberhinaus, wann wird der DB denn erstellt?? Kriege ich den im Simatic Manager nicht zu sehen??

du solltest den baustein

a) nur einmal erstellen und
b) online nach dem DB gucken, also im ordner erreichbare teilnehmer ... offline ist der so erstellte baustein nämlich nicht verfügbar ... weiß grad nicht, ob man ihn runterladen kann - glaub aber nicht :confused::rolleyes:
 
Ich habe gerade festgestellt, das der Fehlercode 80B1 bedeutet, das keine DB_Nummer frei ist. Warum?? Ich habe gerade mal 10 Db´s benutzt im gesamten Projekt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
der fehler bedeutet, dass der db schon da ist
und da du versuchst zyklisch zu erstellen ist das auch ganz klar.
führe die funktion einmal für eine nummer aus und der db wird erstellt (online - in der CPU ... ) einen zweiten mit der selben nummer kannst du nicht erstellen.

einmal ausführen heißt, wenn kein db erstellt werden soll den aufruf überspringen
 
Zuletzt bearbeitet:
Den DB siehst du ausschließlich im Online-Bausteinordner.

MSB - freund und kupferstecher - hast du zufällig ne CPU zur hand und kannst mal gucken, ob man den baustein offline verfügbar machen kann?
IMHO wird da ein flag gesetzt, welches online erstellte bausteine von offline erstellten unterscheidet - anders kann ich mir nämlich nicht erklären, dass "DEL_DB" nur online erstellte löschen kann ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Morgen ja, heute hab ich kein so schwarzes Teil mehr rumliegen ...
Obgleich ich mich natürlich frage ob mich das wirklich interessiert.
Bisher war ich für mich persönlich nämlich schwer dagegen solche Siemens-Specials zu nutzen.
Ich bin was das anbelangt vermutlich eher konservativ ...

Könnte natürlich auch sein, das man den DB nur über die Erreichbaren Teilnehmer sieht.
Zu deiner Frage:
Könnte es nicht sein, das die CPU ausschließlich Bausteine aus dem RAM löschen kann,
Offline Projektierte sind ja auf jeden Fall aufer Flash-Karte.

Mfg
Manuel
 
Morgen ja, heute hab ich kein so schwarzes Teil mehr rumliegen ...
Obgleich ich mich natürlich frage ob mich das wirklich interessiert.
Bisher war ich für mich persönlich nämlich schwer dagegen solche Siemens-Specials zu nutzen.
Ich bin was das anbelangt vermutlich eher konservativ ...

es ist manchmal recht praktikabel, z.b. zum aufnehmen von temporären kurven ... da braucht man sich keine gedanken um das system machen, auf dem man es einsetzt. man erstellt einfach die entsprechenden bausteine im bereich w#16#01 ... w#16#ff und die sfc sucht sich den nächst möglichen ... nummer speichern nicht vergessen ... isn nützliches toll bei der fehlersuche :rolleyes:
die hier angestrebte funktionalität seh ich aber ähnlich konservativ wie du :rolleyes: ... vorallem, weil der DB keine struktur hat sondern einfach nur aus bytes besteht, also die onlinesicht in den meisten fällen, gerade bei real, wirklich überhaupt nichts bringt ...

Zu deiner Frage:
Könnte es nicht sein, das die CPU ausschließlich Bausteine aus dem RAM löschen kann,
Offline Projektierte sind ja auf jeden Fall aufer Flash-Karte.

ja, das könnte durchaus sinn machen! :D
 
Ich habe das jetzt spaßeshalber mit PLCSIM getestet,
da kann man jeden DB löschen (SFC23).

Allerdings steht da bei jedem DB als Ladespeicher "RAM", morgen das ganze also mal mit richtiger CPU...

Mfg
Manuel
 
hi Vl,

die erstellten DBs kannst du in dein Projekt ziehen.
halt ohne Parameter und Lokalvariablennamen.
Als Erstellsprache steht dann "CPU-DB".

Wie du sagst, sieht der richtig scheiße aus wenn du den öffnest, weil ein Array of Byte erstellt wird. angefangen bei STATO [-32768] bis ??? (je nach Länge des DBs.
Zum Beobachten von Werten taugt das nicht.

Hatte mal eine Anlage, wo die meißten DBs im OB100 erstellt wurden und dann in etlichen Schleifen mit "Maschinenparametern" gefüttert wurden.
Zu dieser Anlage gabs ein AG-Abzug als Dokumentation (nat toll :sw9: )
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das funktioniert (mit PLC-SIM) problemlos.

spannend! auch die erstellsprache ... und wenn du ihn jetzt online löschst und versuchst aus offline zu übertragen?

sorry - hab meinen firmen-laptop heut da gelassen, wo er hingehört!

btw: was bei den sachen mit plcsim funktioniert, funktioniert eigentlich auch mit realen cpus ...
 
Zurück
Oben