Hallo Smartie,
meiner meinung nach solltest du einen FB machen der eine Achse,
komplett verwaltet (ähnlich den FC von mir) den du nur noch über
die Schinttstelle die Aufträge zuteilst. Wie z.b. Tippen, Referenzieren,
Positonieren und was dir noch so einfällt.
Ich glaube nicht das die Schnittstelle so fett wird wie du befürchtest.
Diesen FB kannst du dann wieder als Instanz in den Kopf eines FB's ziehen.
In diesem FB werden dann die Aufträge an den Achs_FB zugeteilt.
So hast du später alles schön zusammen und mußt nicht immer wieder
schauen wer löst jetzt gerade irgendeine Betriebsart aus oder welche
Betriebsart ist gerade Aktiv.
Der Kopf für dein Achsbaustein könnte so aussehen als Beispiel.
Code:
FUNCTION_BLOCK "MX Achse"
TITLE =
VERSION : 0.1
VAR_INPUT
IO_Adresse : WORD ;
Start : BOOL ;
Stop : BOOL ;
Tippen_plus : BOOL ;
Tippen_minus : BOOL ;
Ref : BOOL ;
Endlage_plus : BOOL ;
Endlage_minus : BOOL ;
Soll_Pos : DINT ;
Soll_Geschw : DINT ;
END_VAR
VAR_OUTPUT
Ist_Position : DINT ;
Ist_Geschw : DINT ;
END_VAR
VAR
PI : STRUCT
Motor_steht : BOOL ; //Statuswort : Motor steht
Antrieb_betriebsbereit : BOOL ; //Statuswort : Antrieb ist betriebsbereit
Antrieb_referenziert : BOOL ; //Statuswort : Antrieb ist referenziert
Reserve_1 : BOOL ; //Statuswort : Reserve
Bremse_offen : BOOL ; //Statuswort : Bremse ist offen (falls vorhanden)
Fehler_FU : BOOL ; //Statuswort : Fehler Frequenzumrichter
Warnung_FU : BOOL ; //Statuswort : Warnung Frequenzumrichter
Fehler_IEC : BOOL ; //Statuswort : Fehler MotionController
Kommunikation_aufgebaut : BOOL ; //Statuswort : Kommunikation (PLC <> MX) aufgebaut
FU_freigegeben : BOOL ; //Statuswort : Frequenzumrichter freigegeben
Synchron : BOOL ; //Statuswort : Synchron (zur Interpolierten Lageregelung)
Sicherer_Halt : BOOL ; //Statuswort : Sicherer Halt
Betriebsart_24V : BOOL ; //Statuswort : Betriebsart 24V (400V Versorgung fehlt)
Prozessdaten_nicht_breit : BOOL ; //Statuswort : Prozessdaten nicht bereit
Reserve : BOOL ; //Statuswort : Reserve
SW_Endschalter_belegt : BOOL ; //Statuswort : Software-Endschalter belegt
AM_Referenzieren : BOOL ; //Angewählter AxisMode : Referenzieren
AM_Drehzahlregelung : BOOL ; //Angewählter AxisMode : Drehzahlregelung
AM_Pos_Abs : BOOL ; //Angewählter AxisMode : Positionieren Absolut
AM_Pos_Rel : BOOL ; //Angewählter AxisMode : Positionieren Relativ
AM_Tippen : BOOL ; //Angewählter AxisMode : Tippen
AM_Kurvenscheibe : BOOL ; //Angewählter AxisMode : Kurvenscheibe
AM_Synchronlauf : BOOL ; //Angewählter AxisMode : Synchronlauf
AM_Reserve : BOOL ; //Angewählter AxisMode : Reserve
AM_Referenzieren_fertig : BOOL ; //AxisMode : Referenzieren fertig
AM_Drehzahl_erreicht : BOOL ; //AxisMode : Drehzahl erreicht
AM_Pos_Abs_inP : BOOL ; //AxisMode : Positioneren Absolut - In Position
AM_Pos_Rel_inP : BOOL ; //AxisMode : Positioneren Relativ - In Position
AM_Tippen_Sollgeschw_err : BOOL ; //AxisMode : Tippen - Sollgeschwindigkeit erreicht
AM_Reserve_1 : BOOL ; //AxisMode : Reserve
AM_Reserve_2 : BOOL ; //AxisMode : Reserve
AM_Reserve_3 : BOOL ; //AxisMode : Reserve
AM_Referenzieren_stop : BOOL ; //AxisMode : Referenzieren gestoppt
AM_Drehzahlregelung_stop : BOOL ; //AxisMode : Drehzahlregelung gestoppt
AM_Pos_Abs_stop : BOOL ; //AxisMode : Positionieren Absolut gestoppt
AM_Pos_Rel_stop : BOOL ; //AxisMode : Positionieren Relativ gestoppt
AM_Tippen_stop : BOOL ; //AxisMode : Tippen gestoppt
AM_Kurvenscheibe_stop : BOOL ; //AxisMode : Kurvenscheibe gestoppt
AM_Synchronlauf_stop : BOOL ; //AxisMode : Synchronlauf gestoppt
AM_Reserve_4 : BOOL ; //AxisMode : Reserve
Akt_AM_Referenzieren : BOOL ; //Axis Mode : Referenzieren - Aktiv
Akt_AM_Drehzahlregelung : BOOL ; //Axis Mode : Drehzahlregelung - Aktiv
Akt_AM_Pos_Abs : BOOL ; //Axis Mode : Positionieren Absolut - Aktiv
Akt_AM_Pos_Rel : BOOL ; //Axis Mode : Positionieren Relativ - Aktiv
Akt_AM_Tippen : BOOL ; //Axis Mode : Tippen - Aktiv
Akt_AM_Kurvenscheibe : BOOL ; //Axis Mode : Kurvenscheibe - Aktiv
Akt_AM_Synchronlauf : BOOL ; //Axis Mode : Synchronlauf - Aktiv
Akt_AM_Reserve_1 : BOOL ; //Axis Mode : Reserve
Umrichterstatus : WORD ; //Umrichterstatus
Ist_Geschwindigkeit : WORD ; //Ist-Geschwindigkeit
Ist_Drehzahl : WORD ; //Ist-Drehzahl
Ist_Position_Anwender : DWORD ; //Ist-Position in Anwendereinheit
Ist_Position_Modulo : DWORD ; //Ist-Position in Modulo
IEC_Fehlernummer : WORD ; //IEC Fehlernummer
IEC_Subfehlernummer : WORD ; //IEC Subfehlernummer
FU_Fehlernummer : WORD ; //Frequenzumrichter Fehlernummer
FU_Subfehlernummer : WORD ; //Frequenzumrichter Subfehlernummer
Ist_Drehmoment : WORD ; //Ist-Drehmoment
END_STRUCT ;
PO : STRUCT
Reglersperre : BOOL ; //Reglersperre
Freigabe_Schnellstop : BOOL ; //Freigabe/Schnellstop
Freigabe_Halt : BOOL ; //Freigabe/Halt
Reserve_1 : BOOL ; //Reserve
Bremse_oeffnen : BOOL ; //Bremse öffnen (falls vorhanden)
Reserve_2 : BOOL ; //Reserve
Reset : BOOL ; //Reset
Reserve_3 : BOOL ; //Reserve
Reserve_4 : BOOL ; //Reserve
Tippen_Pos : BOOL ; //Tippen Positiv
Tippen_Neg : BOOL ; //Tippen Negativ
Reserve_5 : BOOL ; //Reserve
Reserve_6 : BOOL ; //Reserve
Reserve_7 : BOOL ; //Reserve
Reserve_8 : BOOL ; //Reserve
SW_Endschalter_AUS : BOOL ; //Software-Endschalter deaktivieren
AM_Referenzieren : BOOL ; //Axis Mode : Referenzieren
AM_Drehzahlregelung : BOOL ; //Axis Mode : Drehzahlregelung
AM_Pos_Abs : BOOL ; //Axis Mode : Positionieren Absolut
AM_Pos_Rel : BOOL ; //Axis Mode : Positionieren Relativ
AM_Tippen : BOOL ; //Axis Mode : Tippen
AM_Kurvenscheibe : BOOL ; //Axis Mode : Kurvenscheibe
AM_Synchronlauf : BOOL ; //Axis Mode : Synchronlauf
AM_Reserve : BOOL ; //Axis Mode : Reserve
STRT_Referenzieren : BOOL ; //Axis Mode : START - Referenzieren
STRT_Drehzahlregelung : BOOL ; //Axis Mode : START - Drehzahlregelung
STRT_Pos_Abs : BOOL ; //Axis Mode : START - Positionieren Absolut
STRT_Pos_Rel : BOOL ; //Axis Mode : START - Positionieren Relativ
STRT_Reserve_1 : BOOL ; //Axis Mode : START - Reserve
STRT_Kurvenscheibe : BOOL ; //Axis Mode : START - Kurvenscheibe
STRT_Synchronlauf : BOOL ; //Axis Mode : START - Synchronlauf
STRT_Reserve_2 : BOOL ; //Axis Mode : START - Reserve
Tippen_V_Soll : WORD ; //Tippen - Sollgeschwindigkeit
Tippen_Acc_Dec : WORD ; //Tippen - Beschleunigung / Verzögerung
DZR_V_Soll : WORD ; //Drehzahlregelung - Sollgeschwindigkeit
DZR_Acc_Dec : WORD ; //Drehzahlregelung - Beschleunigung / Verzögerung
Pos_Abs_V_Soll : WORD ; //Positionieren Absolut - Sollgeschwindigkeit
Pos_Abs_Acc_Dec : WORD ; //Positionieren Absolut - Beschleunigung / Verzögerung
Pos_Abs_Zielposition : DWORD ; //Positionieren Absolut - Zielposition
Pos_Rel_V_Soll : WORD ; //Positionieren Relativ - Sollgeschwindigkeit
Pos_Rel_Acc_Dec : WORD ; //Positionieren Relativ - Beschleunigung / Verzögerung
Pos_Rel_Distanz : DWORD ; //Positionieren Relativ - Distanz
Alle_BA_Ruck : WORD ; //Alle Betriebsarten : Ruck
END_STRUCT ;
END_VAR
BEGIN
NETWORK
TITLE =
END_FUNCTION_BLOCK
Schön wäre auch zu wissen was deine Achsen machen sollen,
soll es eine einfach point to point positonierung sein oder
sollen die Achsen eine Tabelle abfahren usw.
nur nicht aufgeben, hier werden Sie geholfen