/*==================================================================================================
IPOS-Quelldatei
Erstellt am 25.11.05 Helmut_von_der_Reparatur
Ansteuerung Antrieb durch die SPS/Application (DP-Prozessausgangsdaten)
--------------------------------------------------------------------------
Wenn bei den Sollwerten Geschwindigkeit oder Rampe eine "0" vorgegeben wird
fährt der Antrieb mit Wert aus den Parametern.
1. Wort = Steuerwort
2/3. Wort = Zielposition
4. Wort = Soll-Geschwindigkeit
5. Wort = Hochlaufzeit
6. Wort = Tieflaufzeit
7. Wort = IPOS-Ausgänge
Belegung Steuerwort
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | Reglersperre /Freigabe
| | | | | | | | | | | | | | Freigabe /Schnellstop
| | | | | | | | | | | | | Freigabe /Halt
| | | | | | | | | | | | reserviert
| | | | | | | | | | | reserviert
| | | | | | | | | | reserviert
| | | | | | | | | Reset
| | | | | | | | reserviert
| | | | | | | Referenzieren
| | | | | | Automatik
| | | | | Tippen plus
| | | | Tippen minus
| | | reserviert
| | reserviert
| reserviert
reserviert
Belegung IPOS-Ausgänge
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | DO0
| | | | | | | | | | | | | | DO1
---- reserviert ----
Rückmeldung Antrieb an die SPS/Application (DP-Prozesseingangsdaten)
--------------------------------------------------------------------------
1. Wort = Statuswort
2/3. Wort = Ist-Position
4. Wort = Ist-Geschwindigkeit
5. Wort = frei
6. Wort = Geräteauslastung
7. Wort = IPOS-Eingänge
Belegung Statuswort
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | Motor-Dreht
| | | | | | | | | | | | | | Umrichter Betriebsbereit
| | | | | | | | | | | | | Antrieb referenziert
| | | | | | | | | | | | Zielposition erreicht
| | | | | | | | | | | Bremse geöffnet
| | | | | | | | | | Fehler
| | | | | | | | | Endschalter rechts
| | | | | | | | Endschalter links
Umrichterstatus / Fehler-Code
Belegung IPOS-Eingänge
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | DI0
| | | | | | | | | | | | | | DI1
| | | | | | | | | | | | | DI2
| | | | | | | | | | | | DI3
---- reserviert ----
==================================================================================================*/
#include <const.h>
#include <io.h>
#pragma initials 90 127
#pragma globals 210 300
#pragma var 301 400
//----- Movilink - Profil -----
MOVCOM mc;
MCPDATA mcd;
MCPARADATA mcpara;
MOVLNK ml;
MLDATA mld;
GSPODATA10 DP_OUT;
SSPIDATA10 DP_IN;
//----- Algemeine Variablen -----
#define Betriebsart H0
#define Rueckgabe_betriebsart H1
#define Statuswort H2
#define Schnellstop_Rampe H3
#define Soll_Speed H7
#define START _BitSet(mcd.PO1, 2)
#define STOP _BitClear(mcd.PO1, 2)
long Freigabe, Servicebetrieb, Schmier_T1, Schmier_T2;
//----- Variablen Skalierung -----
#define Faktor_Position H10
#define Divisor_Position H11
#define Faktor_Speed H12
#define Divisor_Speed H13
//----- Variablen Status -----
#define Linkslauf H20
#define Rechtslauf H21
#define IST_Speed H22
#define Motor_dreht_SET _BitSet(Statuswort, 0)
#define Motor_dreht_RESET _BitClear(Statuswort, 0)
#define Motor_dreht (Statuswort & 0x1)
#define Bereit_SET _BitSet(Statuswort, 1)
#define Bereit_RESET _BitClear(Statuswort, 1)
#define Bereit (Statuswort & 0x2)
#define Bremse_SET _BitSet(Statuswort, 4)
#define Bremse_RESET _BitClear(Statuswort, 4)
#define Bremse (Statuswort & 0x10)
long H511_speicher, H511_differenz;
//----- Variablen Endlagen -----
#define SW_endschalter_links H25
#define SW_endschalter_rechts H26
#define HW_endschalter_links_aktiv H27
#define HW_endschalter_rechts_aktiv H28
#define Endschalter_links ((InputLevel >> 2) & 1)
#define Endlage_links_SET _BitSet(Statuswort, 7)
#define Endlage_links_RESET _BitClear(Statuswort, 7)
#define Endlage_links (Statuswort & 0x80)
#define Endschalter_rechts ((InputLevel >> 3) & 1)
#define Endlage_rechts_SET _BitSet(Statuswort, 6)
#define Endlage_rechts_RESET _BitClear(Statuswort, 6)
#define Endlage_rechts (Statuswort & 0x40)
long SW_endschalter_aktiv, SW_Endlage_links, SW_Endlage_rechts,
SW_endschalter_links_MM, SW_endschalter_rechts_MM,
HW_Endlage_links, HW_Endlage_rechts;
//----- Variablen Tippen -----
#define Tippen_links_Speed H30
#define Tippen_links_Rampe_auf H31
#define Tippen_links_Rampe_ab H32
#define Tippen_rechts_Speed H33
#define Tippen_rechts_Rampe_auf H34
#define Tippen_rechts_Rampe_ab H35
//----- Automatik -----
#define Auto_Speed H41
#define Auto_Rampe_auf H42
#define Auto_Rampe_ab H43
#define Pos_erreicht_SET _BitSet(Statuswort, 3)
#define Pos_erreicht_RESET _BitClear(Statuswort, 3)
#define Pos_erreicht (Statuswort & 0x8)
long Auto_Schmier;
//----- Zielregelung -----
#define Reg_Fenster H51
#define Reg_Divisor_Rampe_min H52
#define Reg_Divisor_Rampe_max H53
#define Reg_Faktor_Rampe H54
#define Reg_Divisor_Rampe H55
#define Reg_Mindestdrehzahl H56
#define Reg_Lose H57
#define Verz_Ziel H58
long Reg_Schmier, Reg_Differenz, Reg_Speed, Reg_Lose_fahren,
Reg_Lose_gefahren;
//----- Referenzieren -----
#define Referenziert_SET _BitSet(Statuswort, 2)
#define Referenziert_RESET _BitClear(Statuswort, 2)
#define Referenziert (Statuswort & 0x4)
//----- Position Speicher -----
#define Start_Pos_Speicher H90
long Start_Pos_Schmier;
MOVLNK Start_Pos;
//----- Störung -----
#define Sammelstoerung_SET _BitSet(Statuswort, 5)
#define Sammelstoerung_RESET _BitClear(Statuswort, 5)
#define Sammelstoerung (Statuswort & 0x20)
#define MM_OVER_CURRENT 1
#define MM_DC_LINK 7
#define MM_THERM_OV_OUT 11
#define MM_THERM_OV_MOT 84
#define MM_THERM_OV_BRAKE 85
#define MQX_IPOS_ILLOP 10
#define MQX_SYSTEM_FAULT 91
#define FEHLER_RESET (DP_OUT.PO1 & 0b1000000)
#define STOERUNG_MM (mcd.PI1 & 0b100000)
#define TIMEOUT_MOVIMOT 0x05000002
long MQX_Fehler, Fehler;
//----- Betriebsarten -----
#define Referenzieren 1
#define Automatik 2
#define Hand_rechts 4
#define Hand_links 8
/*=============================================
Funktion Task2
===============================================*/
Funktion_Task2()
{
//----- Bei Servicebetrieb = "0", Feldbussignale an MQX -----
if(!Servicebetrieb)
_GetSys(DP_OUT, GS_PODATA );
_SetSys(SS_PIDATA, DP_IN );
//----- Freigabe ----
_BitMove(mcd.PO1, 6, DP_OUT.PO1, 6);
if((DP_OUT.PO1 & 0x6) == 6)
{
_BitSet (mcd.PO1, 1);
Freigabe = 1;
}
else
{
_BitClear (mcd.PO1, 1);
mcd.PO3 = Schnellstop_Rampe;
Freigabe = 0;
}
//----- Rueckmeldungen an die SPS -----
if(Sammelstoerung)
Schmier_T2 = Fehler << 8;
else
Schmier_T2 = Rueckgabe_betriebsart << 8;
DP_IN.PI1 = Schmier_T2 | Statuswort;
Schmier_T2 = ActPos_Mot * Divisor_Position / Faktor_Position;
DP_IN.PI2 = Schmier_T2 >> 16;
DP_IN.PI3 = Schmier_T2 & 0xFFFF;
DP_IN.PI4 = IST_Speed;
DP_IN.PI6 = mcd.PI2;
DP_IN.PI7 = H483;
//----- Steuersignale an den MQX -----
// StdOutpIPOS = DP_OUT.PO6;
H481 = DP_OUT.PO7;
//----- Betriebsart auswählen -----
Betriebsart = (DP_OUT.PO1 & 0xFF00) >> 8;
//----- Allgemeine Verwaltung -----
Funktion_Status();
Funktion_Endlage();
Funktion_Start_Pos();
Fehlerauswertung();
}