eigenen Motorbaustein Movitrac B

S_Liner

Level-2
Beiträge
365
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, ich habe mir mal versucht einen Motorbaustein selber zu schreiben.
Es wäre echt klasse wenn da mal jemand drüber gucken könnte um mir zu sagen ob der funktionieren könnte.

Ich baue bei uns eine Anlage um und versuche jetzt schon eiiges vorzubereiten. Wenn ich das in den nächsten 2 Wochen laden muss, wäre es gut wenn bis dahin grobe Fehler schon ausgebügelt werden können.

Vielen Dank im Vorraus
 

Anhänge

  • Motorbaustein.pdf
    137,1 KB · Aufrufe: 78
Hallo zusammen, vielen Dank für euere anzworten.. Ich suche da jetzt wirklich etwas kritik um zu sehen was gut und schlecht ist.. Ich möchte nicht immer vorgefertigte Sachen nehmen und probiere es auch mal gern um mich etwas weiter zu entwickeln.

Aber warum ist die Übergabe als word nicht so schön? Und wie wäre es besser?
Gruß
 
weil du dann nicht was fertig gekapseltes für den fu hast.
relevante bit dem fb einzeln übergeben.
schau dir einfach mal den baustein aus dem link von mir an. als anregung
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Entschuldige bitte die dumme frage, aber worin liegt der Nachteil es "verkapselt" an den FU zu übergeben?
Dein Baustein sieht schon professionell aus, keine frage, aber ich habe es mir ja nicht aus den Fingern gezogen. In unserer Firma machen es viele Maschinenhersteller so. Und so richtige Probleme sind mir nicht bekannt.

Gruß
 
Servus,

S_Liner, ich arbeite auch lieber mit den einzelnen Bits, zu mindestens mit den Relevanten. z.B. In deinem Baustein gibst du dem SEW eine Freigabe (Natürlich auch Drehzahl etc.) und der Antrieb läuft los. Ist die Freigabe FALSE stoppt er. Aber wie? Du unterscheidest nicht zwischen Halt oder Schnellstop. Bei dir wird es immer ein Schnellstop sein.

Da man bei einem Word (z.B. Stautswort 1) erst mal nur eine 16Bit Wurst sieht, kann man als SEW Neuling auf den ersten Blick schwer was mit anfange. Finde es da schon eleganter das Word auseinander zu ziehen und die relevanten Bits mit Bezeichnung nach außen zu bringen. So wie es Volker in seinem Beispiel auch gemacht hat. So erkennst du auf den ersten Blick, wofür jedes Bit im Statuswort, aber auch im Steuerwort steht.


Aber wenn ihr doch schon immer so gearbeitet habt, scheint es ja ein Standard von euch zu sein und ist auch OK.

Grüße TomTom
 
Vielen dank für deine Antwort. Klingt wirklich logisch. Leider muss ich zugeben das ich den Baustein von Volker nicht ganz verstehe. Und eigentlich will ich keinen schnellstopp machen, da die motoren recht langsam stoppen sollen.

Könntest du es mir vielleicht nochmal etwas genauer erklären wie ich das word auseinanderziehe und vor allem, wie ich einen Halt statt schnellstopp hinbekomme?

Gruß
 
ich nehme jetzt mal meinen baustein als beispiel.

IN: Halt : Bool

STAT: an_FU : Struct
Halt : BOOL //befindet sich in der srtuct an_FU

Im Programm

U Halt
= an_FU.Halt

am ende wird mit der sfc15 die komplette struct an_FU (inkl Sollwerte) an den FU übergeben.

das gleich passiert beim einlesen des statuswortes.
hier wird mit der sfc14 die info vom fu geholt und in die struct von_fu kopiert.

wie das steuer/statuswort aussieht findest du im handbuch kommunikation. siehe mein link
 
Zuletzt bearbeitet:
Ok, also ich habe das jetzt mal mit deinem Baustein gemacht. Nach einigem hin und her habe ich ihn doch verstanden und muss zugeben, dass er auf dauer eigentlich plausibler und einfacher zu verstehen ist als das was ich da gemacht habe. Nun habe ich aber noch 2,3 Fragen zu.


  • du hast da 2 Netzwerke wo du neinmal set & save und clr & save schreibst, wozu dient das? Muss ich das machen?
  • In deinem Eingang hast du Linkslauf angebeben, wenn diese "0" ist dreht er rechts ja?
  • Die Adresse stelle ich doch am Umrichter P816 ein, soll ich dann diese Adresse an den Eingang Adresse schreiben? Denn in der Hardwarekonfig sehe ich doch nur mein Gateway was die Adresse 20 hat.

Sorry wenn da wieder dumme fragen bei sind.

Gruß
 
Zuletzt bearbeitet:
mit save beeinflusst du das BIE-BIT des bausteins. das ist der ENO am Baustein.

mit set setzt du das vke auf true
mit clr auf false.

d.h.
set
save
=> ENO = true.
hängst du nun an dein eno ein = m0.0 dran wäre dieses true

und nein man muss das nicht machen. kommt drauf an ob man am eno was dranhägen will was nur bedingt ausgeführt werden soll.
 
Hallo Volker, also ich habe deinen Baustein heute reingeladen... Er funktioniert nicht. Er kann es nicht in das Struct schreiben..
Wenn ich bei Record beispielsweise db100.dbx0.0 Byte 6 schreibe, dann geht es...

Kann man in deinem Baustein irgendwas anpassen das er doch ncoht funktioniert?

Gruß
 
hmm. ich habe den baustein an 300er cpu's im einsatz. programmiert mit s7-classic.
was für eine cpu hast du und mit was projektiert?
was geht nicht? das schreiben des steuerwortes oder das lesen des statuswortes?
was für einen wert hast du am retval (sfc14/15)? 0 wäre alles ok. 8xxx hex ist ein fehler
zeig mal einen screeshot von deiner hw config
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, die genaue Hex-Zahl habe ich jetzt nicht da, aber es war auf alle Fälle 8xxx. Er springt direkt bei der Exit Sprungmarke beim lesen, also sfc14.
Wenn ich am Record es so abändere das er es liest un den sfc 15 so lasse wie du es hast, schreibt er den selben Fehler dann auch bei sfc 15...Konfig_1.JPGKonfig_2.JPGKonfig_2.JPG
 
ok.
die sfc14/15 kann nur daten konsitent lesen wenn das mit der hw-config übereinanderpasst.
du hast 8 x 3 pd projektiert. möglicherweise funktionieren die sfc dann nicht (oder du müsstest 8 x 3pd = 24 verwenden aber dafür ist der fb nicht gemacht)
ich habe das nur mit 1 x 3pd im einsatz.

hast du denn mehrere antriebe? probier mal nur 1 x 3pd


ansonsten probiere mal folgenndes (nicht getestet und auf die schnelle hingetippt)

netzwerk 4
Code:
[COLOR=#b22222]//auskommentieren
[/COLOR]//      CALL  SFC   14                    //konsistente Daten eines DP-Normslaves lesen
//       LADDR  :=#t_adr                  //Peripherieadresse => Hardwarekonfig.
//       RET_VAL:=#retval                 //<> 0 => ein Fehler ist während der Bearbeitung aufgetreten
//       RECORD :=#von_FU                 //Zielbereich für die gelesenen Nutzdaten.
//      L     #retval
//      L     0
//      L     #retval
//      <>I   
//      SPB   exit

[COLOR=#ff0000]//zufügen[/COLOR]
      L     #t_adr                      //pointer auf anfangsadresse erzeugen
      SLD   3
      LAR1  

      L     PEW [AR1,P#0.0]             //zsw
      T     #test_sw                    //ist ein word im temp-bereich
      CALL  SFC   20
       SRCBLK :=#test_sw
       RET_VAL:=#retval
       DSTBLK :=#von_FU.ZSW
      L     PEW [AR1,P#2.0]             //anfangsadresse + 2
      T     #von_FU.Istwert_1
      L     PEW [AR1,P#4.0]             //anfangsadresse + 4
      T     #von_FU.Istwert_2
netzwerk 7
Code:
[COLOR=#b22222]//auskommentieren
[/COLOR]//      CALL  SFC   15                    //Daten konsistent auf einen DP-Normslave schreiben
//       LADDR  :=#t_adr                  //Peripherieadresse => Hardwarekonfig.
//       RECORD :=#an_FU                  //Quellbereich für die zu schreibenden Nutzdaten
//       RET_VAL:=#retval                 //<> 0 => ein Fehler ist während der Bearbeitung aufgetreten
//      L     #retval
//      L     0
//      L     #retval
//      <>I   
//      SPB   exit

[COLOR=#ff0000]//zufügen[/COLOR]
      L     #t_adr                      //pointer auf anfangsadresse erzeugen
      SLD   3
      LAR1  

      CALL  SFC   20
       SRCBLK :=#an_FU.STW
       RET_VAL:=#retval
       DSTBLK :=#test_sw
      L     #test_sw
      T     PAW [AR1,P#0.0]             //steuerwort
      L     #an_FU.Sollwert_1
      T     PAW [AR1,P#2.0]             //anfangsadresse + 2
      L     #an_FU.Sollwert_2
      T     PAW [AR1,P#4.0]             //anfangsadresse + 4
man könnte auch einen kompletten any-zeiger für den gesamten bereich bauen um das mit jeweils einem aufruf des sfc20 zu lesen/schreiben. aber das war mir auf die schnelle zu aufwendig. dazu kannst du dir aber mal das anschauen. Any-Zeiger für Datentypen
 
was mir noch einfällt.
hast du den instanz-db in die cpu geladen? den idb evtl mal neu erzeugen.
was ich im post 19 geschrieben habe ist eigentlich unlogisch da du ja schreibst wenn du db100.dbx0.0 Byte 6 an den sfc schreibst geht es.
 
Zurück
Oben