沈阳机床集团沈一希斯事业部 (辽宁 110142) 石洁芳
沈阳机床成套设备有限责任公司 (辽宁 110142) 孙 波
在随系统带的toolbox光盘里面有HHU的源程序。使用时先找到源文件的压缩文件HHU.exe,点击该文件,源文件会展开到一个文件目录里面,然后打开STEP7,选择相应的STEP7 程序,在源文件目录下(sources)选择插入源代码,把刚才展开的源代码插入到这个目录即可。打开源代码后,根据机床的实际情况作些相应的调整,汇编生成程序的功能块。
在PLC程序中,以下功能块是用来控制HHU的。FC68:HHU的处理程序,必须根据情况填写参数并在OB1里在调用FC119或FC124的前面调用FC68。DB68 :(在S7符号表中的符号是“_db68”)HHU的输入和输出缓冲区,在源代码里需要根据机床的实际情况进行重新修改,然后再汇编。DB69:FB2的暂存数据块。FC119&FC124:是修改过的FC19&FC24。
(1)DB68块的调整。在DB68 的源文件hhu2_db68.awl中可调整HHU和MCP (FC119/FC124) 上机械轴的顺序。MachaxNames:(“X1 Z1 Z11 X2 Z2 Z22 SP1 SP2....”),定义在HHU上显示的字符串包含了机床各轴的名字。xconf_ch1..10:(“1, 2, 3, -7”),(“4, 5, 6, -8”),定义每个通道使用的机床轴的分配(与机床数据 20070 相同)。如果是旋转轴,在数字前面加上负号。mode_grp:(1, 1, 402,402, 403, 403, 0, 0, 0, 0),通过最低位把相应的通道赋值给相应的方式组,倒数第3位定义MCP的寻址00x:FC119/MCP1;10x:FC119/MCP2;20x: FC124/MCP1;40x: FC124/MCP2。NameOfChan1..10:(CHAN1,CHAN2,HilfsKan,Lad.Rechts,Lad.Links,NameChan6,NameChan7,NameChan8,N a m e C h a n9,N a m e C h a n10)。输入每个通道的名称(最多10个字符)。d i s p2:(N C_ALARM!!!!!!!!reset w.Rap.OVR),当HHU 不生效时,屏幕上面显示内容。
(2)F C68的输入输出定义。B H G_o n_condition:HHU生效的条件,比如通过这个参数可以防止在不适当的时候(程序运行时)激活手轮HHU。BHG_stop:等同于FB1里的参数BHGstop,如果为1的话,HHU与NCU的通信中断,这时可以从硬件上断开HHU。HW_to_mmc:等同于FB1的HWheelMMC,如果为1的话,当HHU 不生效时,可以通过MMC来选择第一个手轮。Inch:选择米制/英寸制,如果为1的话,则表示为英寸制。BHG_activ:表示手轮已经激活(一般用来触发一个PLC的用户提示信息)。chan_nr:选择的通道号(当HHU生效的时候选择的通道号或者是HHU 不生效时外部选择的通道号)。BAG_nr:所选择通道对应的方式组(根据DB68中的设定)。
(3)调用FC119/124 的参数。FC119(FC19)用于标准机床面板,FC124(FC24)用于窄机床面板。参数与调用FC19的参数基本相同, 但增加以下两个参数PoiXconf :DB68指向中变量xconf_ch1的起始地址。Mcp2 :是否有第2操作面板,false:mcp1//true:mcp2。注意:如果给Mcp2填写的参数不同于DB68.mode_grp分配通道时指定的面板,那么MCP将通讯不上(MCP上的LED灯闪烁)。
(4)PLC程序。按上面所列方法把相应版本的HH™U 源程序文件拷贝到用户的STEP7 程序中的源程序目录里,打开DB68 的源程序,根据机床的配置修改相应的参数,其中灰色部分是经常需要修改的地方。再打开hhu2_fc119, hhu2_fc68,编译生成新的FC119和FC68。
DATA_BLOCK _DB68
STRUCT
bits: array [0..5] of byte;
d i s p 1: s t r i n g[3 2]:= ‘N a m e O f C h a n AUTOgeoX+1234.567 disp2: string[32]:=‘SMTCL-SCHIESS HTC1601000sub’; disp3: string[32]:=‘ ax01 ax02 ax03 ax04 ax05 ax06’; disp4: string[32]:=‘ ax07 ax08 ax09 ax10 ax11 ax12’; disp5: string[32]:=‘BAG:__ Chan:__ ’; MachaxNames: string[128]:= ‘X1 Z1 Z11 X2 Z2 Z22 SP1 SP2 AX9AX10AX11ax12ax13ax14ax15ax16ax17ax18ax19ax20ax 21ax22ax23ax24ax25ax26ax27ax28ax29ax30ax31ax32’; xconf_ch1: array [0..11] of int:= 1, 2, 3, -7; xconf_ch2: array [0..11] of int:= 4, 5, 6, -8; xconf_ch3: array [0..11] of int:=0; xconf_ch4: array [0..11] of int:=0; xconf_ch5: array [0..11] of int:=0; xconf_ch6: array [0..11] of int:=0; xconf_ch7: array [0..11] of int:=0; xconf_ch8: array [0..11] of int:=0; xconf_ch9: array [0..11] of int:=0; xconf_ch10: array [0..11] of int:=0; mode_grp: array [0..9] of int:= 1, 1, 402, 402, 403, 403, 0, 0,0, 0; NameOfChan1: string[10]:= ‘CHAN1’; NameOfChan2: string[10]:= ‘CHAN2’; NameOfChan3: string[10]:= ‘HilfsKan’; NameOfChan4: string[10]:= ‘Lad.Rechts’; NameOfChan5: string[10]:= ‘Lad.Links’; NameOfChan6: string[10]:= ‘NameChan6’; NameOfChan7: string[10]:= ‘NameChan7’; NameOfChan8: string[10]:= ‘NameChan8’; NameOfChan9: string[10]:= ‘NameChan9’; NameOfChan10:string[10]:= ‘NameChan10’; IncDisp:string[24]:=‘,..1,001,010,1001,0010,0’; disp6: string[32]:=‘NC_ALARM!!!!!!!!reset w.Rap.OVR’; disp7: string[32]; state_fb2: word; block_66: string[66]; hhu_out: array [0..19] of byte; hhu_in: array [0..7] of byte; hhu_st_out: array [0..3] of byte; hhu_st_in: array [0..3] of byte; disp_nr: byte; save_ch_nr: byte; save_mst01: dword; save_INC: byte:=b#16#1; act_pos_geo: 0.000000e+000; mst_aus23ret: dword; chan_ret: array [0..1] of word; aux_srw: word; cmdContrPos; STRUCT SYNTAX_ID : BYTE := B#16#82; bereich_u_einheit :byte := B#16#41; spalte :word := W#16#0; zeile :word := W#16#0; bausteintyp :byte := B#16#73; ZEILENANZAHL : BYTE := B#16#1; typ :byte := B#16#F; laenge :byte := B#16#8; END_STRUCT; C1_SPARP_block0_4; STRUCT SYNTAX_ID : BYTE := B#16#82; bereich_u_einheit :byte := B#16#41; spalte :word := W#16#0; zeile :word := W#16#0; bausteintyp :byte := B#16#73; ZEILENANZAHL : BYTE := B#16#1; typ :byte := B#16#F; laenge :byte := B#16#8; END_STRUCT; C1_SPARP_progName1_3; STRUCT SYNTAX_ID : BYTE := B#16#82; bereich_u_einheit :byte := B#16#41; spalte :word := W#16#3; zeile :word := W#16#1; bausteintyp :byte := B#16#7D; ZEILENANZAHL : BYTE := B#16#1; typ :byte := B#16#13; laenge :byte := B#16#20; END_STRUCT ; END_STRUCT ; BEGIN END_DATA_BLOCK OB100的修改(程序): CALL FB 1 , DB7 IN0 :=1 //MCPNum IN1 :=P#I 0.0 //MCP1In IN2 :=P#Q 0.0 //MCP1Out IN3 :=P#Q 8.0 //MCP1StatSend IN4 :=P#Q 12.0 //MCP1StatRec IN5 :=6 //MCP1BusAdr IN6 :=S5T#700MS //MCP1Timeout IN7 :=S5T#200MS //MCP1Cycl IN8 := // IN9 := // IN10 := // IN11 := // IN12 := // IN13 := // IN14 := // IN15 := // IN16 :=FALSE // IN17 := // IN18 := // IN19 := // IN20 := // IN21 := // IN22 := // IN23 :=2 //BHG IN24 :=P#DB68.DBX 870.0(“_DB68”.hhu_in) //BHGIn IN25 :=P#DB68.DBX 850.0(“_DB68”.hhu_out) //BHGOut IN26 :=P#DB68.DBX 878.0(“_DB68”.hhu_st_out) //BHGStatSend IN27 :=P#DB68.DBX 882.0(“_DB68”.hhu_st_in) //BHGStatRec IN28 := // IN29 := // IN30 := // IN31 :=S5T#80MS //BHGCycl IN32 :=2 //BHGRecGDNo IN33 :=2 //BHGRecGBZNo IN34 :=1 //BHGRecObjNo IN35 :=2 //BHGSendGDNo IN36 :=1 //BHGSendGBZNo IN37 :=1 //BHGSendObjNo IN38 :=FALSE //BHGMPI IN39 := // IN40 := // IN41 :=S5T#200MS //NCCyclTimeout IN42 :=S5T#50S //NCRunupTimeout IN43 := // IN44 :=TRUE //NCKomm IN45 := // IN46 :=FALSE //HWheelMMC IN47 := // IN48 := // IN49 := // IN50 := // IN51 := // IN52 := // OUT53:= // OUT54:= // OUT55:= // OUT56:= // OUT57:= // OUT58:= // OUT59:= // OUT60:= // 修改OB1,用如下的程序段代替原来的FC19: L DB19.DBB 8(“MMC”.A_MCPChan) OW W#16#0 JN M006 L 1 T DB19.DBB 8(“MMC”.A_MCPChan) M006: L 2 T MB 380 CALL FC 68 IN0 :=DB100.DBX1.0 //BHG_on_condition IN1 :=I33.7 //BHG_stop IN2 :=FALSE //HW_to_mmc IN3 :=DB10.DBX107.7(“NC”.E_SystemInchDim) //inch OUT4:=DB2.DBX187.6(“ALMSG_DB”.A7000xx[63])//BHG_activ IO5 :=DB19.DBB8(“MMC”.A_MCPChan) //chan_nr IO6 :=MB381 //BAG_nr A DB2.DBX 187.6(“ALMSG_DB”.A7000xx[63]) JC M002 L DB19.DBB 22(“MMC”.E_Chan) OW W#16#0 JN M003 L 1 M003: T DB19.DBB 8(“MMC”.A_MCPChan) M002: CALL FC 119 IN0 :=P#DB68.DBX 306.0(“_DB68”.xconf_ch1) //PoiXconf IN1 :=DB19.DBB8(“MMC”.A_MCPChan) //ChanNo IN2 :=B#16#7 //SpindleIFNo IN3 :=FALSE //Mcp2 OUT4:=M206.0(“ALMSG_DB”.C1.FDD_5100xx[8]) //FeedHold OUT5:=M206.1(“ALMSG_DB”._5FdStop6005xx[8]) //SpindleHold CALL FC 119 IN0 :=P#DB68.DBX 306.0(“_DB68”.xconf_ch1) //PoiXconf IN1 :=DB19.DBB8(“MMC”.A_MCPChan) //ChanNo IN2 :=B#16#8 //SpindleIFNo IN3 :=FALSE //Mcp2 OUT4:=M206.0(“ALMSG_DB”.C1.FDD_5100xx[8])//FeedHold OUT5:=M206.1(“ALMSG_DB”._5FdStop6005xx[8])//SpindleHold 手持单元在数控机床加工中应用非常普遍,尤其是由于结构原因选择了固定操纵台控制方式的,手持单元的作用就更加突出。手持单元操作灵活,功能明确,既可以实现手动对刀,也可以做自动加工的手动调整,作用不可小视。本台机床调试完毕后,两个HHU就可以同时工作而且相互不干扰。极大方便了操作者,对于大型机床来说双HHU具有非常大的便利性,值得广泛应用。4. 结语