FUNCTION FC 19 : VOID
TITLE =
AUTHOR : NUMERIK
FAMILY : _800D
NAME : MCP_IFM
VERSION : 6.1
CODE_VERSION1
VAR_INPUT
BAGNo : BYTE ; //方式组号(面板信号传送到哪个方式组)
ChanNo : BYTE ; //通道号(面板信号传送到哪个通道)
SpindleIFNo : BYTE ; // 主轴号
END_VAR
VAR_OUTPUT
FeedHold : BOOL ; //进给保持
SpindleHold : BOOL ; //主轴停
END_VAR
VAR_TEMP
schmier : ARRAY [0 .. 15 ] OF BOOL ; //Schmierzellen fuer Flanken *
richtung : BYTE ; //方向键和快移键
richtung2 : BYTE ;
richtung3 : BYTE ; //dummy
achs_nr : BYTE ; //aktuell angewaehlte Achsnr. von MST
bb : ARRAY [0 .. 15 ] OF BOOL ; //BAG-Anwahlen
akt_db : WORD ; // Achtung, vorher Absolutzugriffe (*) !!!
max_bag : WORD ; // 方式组的个数
max_kan : WORD ; //通道的个数
max_axe : WORD ; //轴(包括进给轴和主轴)的个数
mst_ein01 : ARRAY [0 .. 15 ] OF BOOL ; //temporaere Eingaenge 0.0..1.7 * (lb12)
mst_ein23 : ARRAY [0 .. 15 ] OF BOOL ; //temporaere Eingaenge 2.0..3.7
mst_ein45 : ARRAY [0 .. 15 ] OF BOOL ; //temporaere Eingaenge 4.0..5.7
mst_ein67 : ARRAY [0 .. 15 ] OF BOOL ; //temporaere Eingaenge 6.0..7.7
mst_aus01 : ARRAY [0 .. 15 ] OF BOOL ; //temporaere Ausgaenge 0.0..1.7
mst_aus23 : ARRAY [0 .. 15 ] OF BOOL ; //temporaere Ausgaenge 2.0..3.7
mst_aus45 : ARRAY [0 .. 15 ] OF BOOL ; //temporaere Ausgaenge 4.0..5.7
mst_aus67 : ARRAY [0 .. 15 ] OF BOOL ; //temporaere Ausgaenge 6.0..7.7 *
loop_c : WORD ; //loop counter
increment : BYTE ; //INC信号
ba_inc : BYTE ; //Maschinenfunktion INC Rueckmeldung
param : INT ;
Poi_Aus : DWORD ; //Pointer Ausgaenge
MCP_db : WORD ; //Maschinensteuer DB
BAGN : BYTE ; //方式组的个数
mksaxisold : BYTE ; //Achsno old if new axis sel.
DB8Offs : DWORD ; //面板在DB8中的偏移
mkschange : BOOL ; //changed
wksold : BOOL ; //是WCS
mstt2 : BOOL ;
vskorr : BYTE ; //倍率信号
END_VAR
BEGIN
NETWORK
TITLE =
///NETZWERK Eingang
L DB7.DBW 128; //OB100中FB1的输出参数,方式组的个数
T #max_bag; //临时变量,只在此程序块(FC19)中有效
L DB7.DBW 130; //OB100中FB1的输出参数,通道的个数
T #max_kan;
L DB7.DBW 132; //OB100中FB1的输出参数,轴(包括进给轴和主轴)的个数
T #max_axe;
L #BAGNo; //FC19输入参数,方式组号
PUSH ;
AW W#16#F;
T #BAGN; //方式组的个数
POP ;
AW W#16#F0;
SET ;
JZ e001; //若此参数是B#16#0*,则表示是第一面板;若此参数是B#16#1*,则表示是第二面板
S #mstt2; //置第二面板标志,表示此FC19是处理第二面板信号的
LAR2 P#62.0; //第二面板在DB8中的偏移Offset im DB8 f. 2. MCP
LAR1 DB7.DBD 150; //第二面板的指针
JU e002;
e001: R #mstt2;
LAR2 P#0.0; //第一面板在DB8中的偏移Offset im DB8 f. 1. MCP
LAR1 DB7.DBD 146; //第二面板的指针
e002: TAR2 #DB8Offs; //将地址寄存器的值传送到临时变量
OPN DI 8;
L DIW [AR2,P#0.0];
T LW 0; //Schmierzellen (Schmier) = Flankenmerker *
L DIB [AR2,P#3.0];
T #achs_nr; //holen des alten Zustandes Achsnr.
A DIX 1.7; //First Run absolut
= #schmier[15]; //kopieren
//
L DBW [AR1,P#0.0]; //DB-Nr. der MSTT
T #MCP_db;
L DBD [AR1,P#8.0]; //输出的指针Pointer auf Ausgaenge
T #Poi_Aus;
L DBD [AR1,P#2.0]; //输入的指针Pointer auf Eingaenge
LAR1 ;
OPN DB [#MCP_db]; //aufschlagen des DB fuer MST
LAR2 P##mst_ein01; //Adresse mst_ein laden (Var_temp Datum) !!!
//AR2 wird im gesamten Baustein als Zeiger
//verwendet
L D [AR1,P#0.0]; //面板的输入IB0-IB3
T LD [AR2,P#0.0]; //存放在临时变量mst_ein01
L D [AR1,P#4.0]; //面板的输入IB4-IB7
T LD [AR2,P#4.0]; //存放在临时变量mst_ein23
LAR1 #Poi_Aus; //bereichsuebergreifende Adresse der MST Ausgaenge
L D [AR1,P#0.0]; //面板的输出QB0-QB3
T LD [AR2,P#8.0]; //存放在临时变量mst_aus01
L W [AR1,P#4.0]; //面板的输出QB4-QB5
T LW [AR2,P#12.0]; //存放在临时变量mst_aus23
A DIX 45.0; //neuer Hochlauf Mimik
JCN e100;
A #mstt2;
JC e099;
= #mst_ein45[3]; //面板X轴键
e099: = #schmier[0]; //Vorschub Halt setzen
= #schmier[1]; //Spindel Halt setzen
S DB10.DBX 57.0; //INC Anwahl in BAG Interface
e100: R #mkschange;
L B#16#0;
T #ba_inc;
T #mksaxisold; //keine MKS Achse zu deaktivieren
T #richtung;
///NETZWERK Global_ein
L LB [AR2,P#1.0]; //面板IB1
AW W#16#3F; //保留INC信号
T #increment; //存放在临时变量
//
L LB [AR2,P#3.0]; //面板IB3
AW W#16#1F; //保留倍率信号
T #vskorr; //存放在临时变量
A #schmier[7]; //First Run Merker
JC n001; //NC Bearbeitung
//
A #mst_aus23[13]; //面板上WCS_MCS LED灯亮,是WCS
= #wksold;
A #mst_ein45[12]; //面板上WCS_MCS键
FP #schmier[3];
JCN mks1;
S #mkschange;
AN #mst_aus23[13]; //面板上WCS_MCS LED灯,原来灭,点亮;原来亮,熄灭
= #mst_aus23[13];
//angewaehlte Achsnr. wird 0
L #achs_nr; //装载轴号
JU mks2;
mks1: L LW [AR2,P#4.0]; //面板输入IB4和IB5
AW W#16#EE7; //保留轴选择键
L #achs_nr; //veraendert nicht die Anzeigebits
JZ kea2;
mks2: A #wksold; //原来是工件坐标系
JC mks4;
T #mksaxisold; //alte gewaehlte Achse retten
mks4: L LD [AR2,P#10.0]; //面板输出QB2和QB3
AD DW#16#8F31FEFF; //去掉轴选择键的LED
T LD [AR2,P#10.0];
A #mkschange; //进行了WCS和MCS的切换
JC kea1;
A #mst_aus23[13];
JC wks3; //如果面板上WCS LED灯亮,转wks3
LAR1 P#8.0; //Axis table for MCP1
AN #mstt2;
JC ke90;
LAR1 P#32.0; //Axis table for MCP2
ke90: OPN DI 10; //DB for Axis Table
L DIW [AR1,P#22.0]; //maxaxis for MCP1, MCP2
OW W#16#0;
JN wks4; //if not zero
L #max_axe; //max. Anzahl Maschinenachsen
JU wks4;
kea2: L LB [AR2,P#4.0]; //面板IB4
AW W#16#E0; //保留方向键和快移键
T #richtung;
JU kea3;
wks3: L B#16#3; //max. Anzahl GEO-achsen
wks4: JL m009;
JU keae; //Accu = 0
JU m001;
JU m002;
JU m003;
JU m004;
JU m005;
JU m006;
JU m007;
JU m008;
JU m009;
m009: A #mst_ein45[10]; //面板第9轴选择键
S #mst_aus23[11]; //面板第9轴LED
L B#16#9; //轴号
JC keae;
m008: A #mst_ein45[9]; //面板第8轴选择键
S #mst_aus23[10]; //面板第8轴LED
L B#16#8; //轴号
JC keae;
m007: A #mst_ein45[1]; //面板第7轴选择键
S #mst_aus23[4]; //面板第7轴LED
L B#16#7; //轴号
JC keae;
m006: A #mst_ein45[8]; //面板第6轴选择键
S #mst_aus23[9]; //面板第6轴LED
L B#16#6; //轴号
JC keae;
m005: A #mst_ein45[13]; //面板第5轴选择键
S #mst_aus23[14]; //面板第5轴LED
L B#16#5; //轴号
JC keae;
m004: A #mst_ein45[2]; //面板第4轴选择键
S #mst_aus23[5]; //面板第4轴LED
L B#16#4; //轴号
JC keae;
m003: A #mst_ein45[14]; //面板Z轴选择键
S #mst_aus23[15]; //面板Z轴LED
L B#16#3; //轴号
JC keae;
m002: A #mst_ein45[15]; //面板Y轴选择键
S #mst_aus45[0]; //面板Y轴LED
L B#16#2; //轴号
JC keae;
m001: A #mst_ein45[3]; //面板X轴选择键
S #mst_aus23[6]; //面板X轴LED
L B#16#1; //轴号
JC keae;
kea1: L B#16#0; //轴号清零
JU ke99;
keae: A #mst_aus23[13]; //LED MKS/WKS
JC ke99;
DEC 1;
SLW 3; //Accu to Pointer
+AR1 ;
OPN DI 10; //DB for Axis Table
L DIB [AR1,P#0.0]; //Axis table for MCP1 or MCP2
ke99: T #achs_nr;
kea3: A #mst_ein45[6]; //面板负方向键
= #mst_aus23[7]; //面板负方向键LED
A #mst_ein45[7]; //面板正方向键
= #mst_aus23[8]; //面板正方向键LED
///NETZWERK NC
n001: A #schmier[15]; //First run absolut
JC e010;
OPN DI 10; //Signale von PLC an NCK
A #mst_ein23[7]; //面板钥匙开关0位置
= DIX 56.4; //DB10.dbx56.4
A #mst_ein23[14]; //面板钥匙开关1位置
= DIX 56.5; //DB10.dbx56.5
A #mst_ein23[6]; //面板钥匙开关2位置
= DIX 56.6; //DB10.dbx56.6
A #mst_ein45[4]; //面板钥匙开关3位置
= DIX 56.7; //DB10.dbx56.7
///NETZWERK BAG
e010: L B#16#1;
T #param; //als Fehlerparameter
L #max_bag; //方式组数
L #BAGN; //方式组号
OW W#16#0;
JZ KBAG; //若方式组号为0转KBAG
JC fehl;
DEC 1; //减1
L P#20.0; //20 Byte Offset
*I ;
LAR1 ; //Zeiger auf BAG
OPN DI 11; //BAG DB aufschlagen
//umverdrahten
A #mst_ein01[0]; //面板UTO方式选择键
= #bb[0]; //Automatik anwaehlen
A #mst_ein01[1]; //面板MDA方式选择键
= #bb[1]; //MDA anwaehlen
A #mst_ein01[3]; //面板JOG方式选择键
= #bb[2]; //JOG anwaehlen
A #mst_ein01[15]; //面板REPOS方式选择键
= #bb[9]; //REPOS anwaehlen
A #mst_ein01[14]; //面板REF方式选择键
= #bb[10]; //REF anwaehlen
A #mst_ein01[2]; //面板TEACH IN方式选择键
= #bb[8]; //Teach In anwaehlen
L DIW [AR1,P#0.0]; //DB11.DBB0和DB11.DBB1
AW W#16#F8F8; //屏蔽掉方式选择位
L LW 6; //上面的bb
AW W#16#707; 屏蔽掉非方式选择位
OW ; //上面两部分组合起来
T DIW [AR1,P#0.0]; //DB11.DBW0和DB11.DBB1
//
L DIW [AR1,P#6.0]; //DB11.DBB6和DB11.DBB7
T LW 6; //存放在临时变量
A #bb[0]; //AUTO方式有效
= #mst_aus01[0]; //面板AUTO方式选择键LED
A #bb[1]; //MDA方式有效
= #mst_aus01[1]; //面板MDA方式选择键LED
A #bb[2]; //JOG方式有效
= #mst_aus01[3]; //面板JOG方式选择键LED
A #bb[9]; //REPOS方式有效
= #mst_aus01[11]; //面板REPOS方式选择键LED
A #bb[10]; //REF方式有效
= #mst_aus01[10]; //面板REF方式选择键LED
A #bb[8]; //TEACH IN方式有效
= #mst_aus01[2]; //面板TEACH IN方式选择键LED
L #increment;
T DIB [AR1,P#2.0]; //DB11.DBB2
///TITLE = NETZWERK Kanal
KBAG: L B#16#2;
T #param; //als Fehlerparameter
L #max_kan; //通道数
L #ChanNo; //通道号
OW W#16#0;
JZ KKAN; //若通道号为0转KKAN
JC fehl;
INC 20; //加20
T #akt_db; //通道数据块块号
OPN DI [#akt_db]; //打开通道数据块
AN #mst_aus23[13]; //LED MCS/WCS
JC g002;
L DIB 41; //DB21.DBB41
L DIB 47; //DB21.DBB47
OW ;
L DIB 53; //DB21.DBB53
OW ;
T #ba_inc; //Maschinenfunktion lokal
g002: L B#16#3; //max. Anzahl GEO Achsen
g001: T #loop_c; //in loop counter
DEC 1;
SLW 5; //* P#4.0
LAR1 ; //jetzt ins Adressregister
L #loop_c;
L #achs_nr;
<>I ;
L B#16#0;
JC mks;
AN #mst_aus23[13]; //LED MCS/WCS
JC mks;
A #schmier[7]; //First Run Merker
JC mks;
L #richtung; //面板的方向键和快移键
mks: L DIB [AR1,P#12.0]; //DB21.DBB20,DB21.DBB16,DB21.DBB12
AW W#16#1F; //屏蔽掉方向键和快移键
OW ; //组合
T DIB [AR1,P#12.0]; //DB21.DBB20,DB21.DBB16,DB21.DBB12
L #loop_c; //Loop counter in Accu
LOOP g001; //在g001和次段间循环,循环的次数loop_c
L #vskorr; //面板的倍率
T DIB 4; //DB21.DBB4
A #mst_ein23[1]; //面板NC-Start键
= DIX 7.1; //DB21.DBX7.1
AN #mst_ein23[0]; //面板NC-Stop键
= DIX 7.3; //DB21.DBX7.0
A #mst_ein23[15]; //面板Reset键
= DIX 7.7; //DB21.DBX7.7
A DIX 35.0; //DB21.DBX35.0程序运行状态
= #mst_aus01[13]; //面板NC-Start键LED
A DIX 35.3; //DB21.DBX35.3 程序中断
O DIX 35.2; //DB21.DBX35.2 程序停止
= #mst_aus01[12]; //面板NC-Stop键LED
A #mst_ein23[13]; //面板单段选择键
FP #schmier[4];
JCN KKAN;
AN DIX 0.4;
= DIX 0.4; //DB21.DBX0.4激活单段
= #schmier[2];
KKAN: AN #schmier[7];
JC KKA1;
A #schmier[2];
= DIX 0.4;
KKA1: A DIX 0.4;
= #mst_aus23[2]; //面板单段选择键LED
///TITLE = NETZWERK Spindel
L #max_axe; //轴数
L #SpindleIFNo; //主轴号
OW W#16#0;
JZ KSPI; //主轴轴号为0转KSPI
JC KSPI;
INC 30; //主轴号加30,转换成主轴的DB块块号
T #akt_db; //转换成主轴数据块块号
OPN DI [#akt_db]; //打开主轴数据块
L LB [AR2,P#0.0]; //面板主轴倍率开关
SRW 4; //右移4位
T DIB 19; //DB3*.DBB19主轴倍率
///NETZWERK Achsen
KSPI: A #schmier[7]; //First Run Merker
JC e020;
L #mksaxisold; //alte angew. Achse
OW W#16#0;
JZ KDAX; //springe bei Nr. = 0
INC 30; //Achs-DB Nr. bilden
T #akt_db; //lokales word
OPN DI [#akt_db]; //aktueller Achs-DB
SET ;
R DIX 4.6; //minus
R DIX 4.7; //plus
JU a102;
//
KDAX: A #mst_aus23[13]; //LED MCS/WCS
JC a103; //jump to Label a104 is better
L #achs_nr;
OW W#16#0;
JZ a104;
INC 30; //Achs-DB Nr. bilden
T #akt_db; //lokales word
OPN DI [#akt_db]; //aktueller Achs-DB
L #vskorr; //面板倍率
T DIB 0; //DB3*.DBB0
L #richtung; //面板的方向键和快移键
L DIB 4; //DB3*.DBB4
AW W#16#1F; //屏蔽掉方向键和快移键
OW ; //组合
T DIB 4; //DB3*.DBB4
a102: L #ba_inc;
L DIB 65; //DB3*.DBB65
OW ;
T #ba_inc;
a103: A #mstt2; //2. MCP ?
JC a104;
L #max_axe; //this part is for compatibily only
l001: T #loop_c;
INC 30;
T #akt_db;
OPN DI [#akt_db];
L #vskorr; //Vorschubkorrekturschalter mst_ein23 byte 1
T DIB 0; //Vorschubkorrekturschalter
L #loop_c;
LOOP l001;
///NETZWERK Global_aus
a104: A #mst_ein23[3]; //面板Feed Start键
R #schmier[0]; //Vorschubsperre
AN #mst_ein23[2]; //面板Feed Stop键
S #schmier[0]; //Vorschubsperre
A #schmier[0]; //Vorschubsperre
= #FeedHold; //FC19的输出参数FeedHold
= #mst_aus01[14]; //面板Feed Stop键LED
NOT ; //LED Vorschub Halt
= #mst_aus01[15]; //面板Feed Start键LED
A #mst_ein23[5]; //面板Spindel Start键
R #schmier[1]; //Spindel Halt
AN #mst_ein23[4]; //面板Spindel Stop键
S #schmier[1]; //Spindel Halt
A #schmier[1]; //Spindel Halt
= #SpindleHold; //FC19的输出参数SpindleHold
= #mst_aus23[0]; //面板Spindel Stop键灯
NOT ; //Spindel Halt
= #mst_aus23[1]; //面板Spindel Start键灯
L #ba_inc; //Maschinenfunktion INC
AW W#16#3F; //只保留INC信号
SLW 4; //左移4位
CAW ; //高低字节交换
L LW [AR2,P#8.0]; //面板QW0
AW W#16#FFC; //屏蔽INC信号
OW ; //组合
//LED INC MSST
T LW [AR2,P#8.0]; //面板QW0
///NETZWERK Ausgang
LAR1 #Poi_Aus; //bereichsuebergreifende Adresse der MST
OPN DB [#MCP_db]; //aufschlagen des DB fuer MST
L LD [AR2,P#8.0]; //Laden des temp. Speicher mst_aus
T D [AR1,P#0.0]; //Abspeichern der AusgangsBytes 8 - 11 der MST
L LW [AR2,P#12.0];
T W [AR1,P#4.0]; //Abspeichern der Bytes 12 - 13 der MST
e020: SET ;
S #schmier[7]; //First Run
LAR2 #DB8Offs;
OPN DB 8; //Daten fuer naechsten Zyklus retten
L LW 0; //Schmierzellen (schmier) = Flankenmerker *
T DBW [AR2,P#0.0];
L #achs_nr; //retten des Zustandes Achsnr.
T DBB [AR2,P#3.0];
S DBX 1.7;
BEU ;
fehl: CALL FC 20 (
Dekade12 := 40,//40 = FC, 41 = FB, 80 = Graph
Dekade34 := 19,//Baustein Nummer des Aufrufers
Dekade56 := #param,//Parameternummer
Zusatz := 0,//fuer ZustandsGraph
kommend := TRUE);
CALL SFC 46 ;//STS, Stop der PLC-CPU
END_FUNCTION