当前位置:文档之家› 威纶通配方宏指令

威纶通配方宏指令

/**********************************************************行号刷新——number**********************************************************/macro_command main()short index,array[10]//数组array[10]是存放行号的数组bool OFF=false,ON=trueGetData(index, "本机触摸屏", LW, 9000, 1)//a用于提取索引寄存器的当前值array[0]=1+index/70//索引寄存器的值以700的倍数递增,即以当前页面中占用地址总数为基数array[1]=array[0]+1array[2]=array[1]+1array[3]=array[2]+1array[4]=array[3]+1array[5]=array[4]+1array[6]=array[5]+1array[7]=array[6]+1array[8]=array[7]+1array[9]=array[8]+1SetData(array[0], "本机触摸屏", RW, 7800, 10) //RW7800~RW7809中存放行号SetData(OFF, "本机触摸屏", LB, 4, 1) //清零宏指令触发位end macro_command/**********************************************************新增——add**********************************************************/macro_command main()short name[5],temp[5],data[65]short i,var=0,CurtLine=0,index=0,NextLine=0bool OFF=false,flag=falseGetData(CurtLine, "本机触摸屏", RW, 8000, 1)//获取RW8000的值,即保存的行数GetData(name[0], "本机触摸屏", LW, 0, 5)//获取LW0的值,即输入的配方名GetData(data[0], "Panasonic FP", DT, 32700, 65)//获取当前HMI的数据输入值//判断数据表是否填满,若未填满,则判断是否有重名if CurtLine==100 thenflag=trueSetData(flag, "本机触摸屏", LB, 22, 1)else//判断是否有重名for i=0 to 99 step 1GetData(temp[0], "本机触摸屏", RW, var, 5)//遍历每一行的配方名if name[0]==temp[0] and name[1]==temp[1] and name[2]==temp[2] and name[3]==temp[3] and name[4]==temp[4]thenflag=trueSetData(flag, "本机触摸屏", LB, 21, 1)//若有重名则跳出“警告”框,提示该配方已存在elsevar=var+70//否则开始查询下一行end ifnext i//遍历所有行未找到匹配值,就将配方名和数据保存在数据表中if flag==false thenvar=0var=70*CurtLine//当前行的索引量SetData(name[0], "本机触摸屏", RW, var, 5)//将LW0中的配方名保存至新地址RW(0+var)中SetData(data[0], "本机触摸屏", RW, 5+var, 65)//将DT32700中连续的65个数据保存在RW(5+var)65个连续的地址中//下面程序是实现数据表行数增加if CurtLine<100 thenNextLine=CurtLine+1index=(NextLine/10)*700SetData(NextLine, "本机触摸屏", RW, 8000, 1)SetData(index, "本机触摸屏", LW, 9000, 1)flag=trueSetData(flag, "本机触摸屏", LB, 4, 1)end ifend ifend ifFILL(name[0], 0, 5)SetData(name[0], "本机触摸屏", LW, 0, 5)//清空LW0的值,即清空输入的配方名SetData(OFF, "本机触摸屏", LB, 0, 1)//清零宏指令触发位end macro_command/**********************************************************调用——aquire**********************************************************/macro_command main()short name[5],temp[5]//定义两个数组,name[5]用于获取输入配方名,temp[5]用于获取某一行的配方名short i,index,var=0,Data[65]//数组b[80]用于获取某一行的存储数据bool ON=true,OFF,flag=falseGetData(name[0], "本机触摸屏", LW, 0, 5)//获取输入的配方名//下面程序用于查找与输入的配方名匹配的数据,并将数据下载至PLC中for i=0 to 99 step 1?GetData(temp[0], "本机触摸屏", RW, var, 5)//查询存储的配方名if name[0]==temp[0] and name[1]==temp[1] and name[2]==temp[2] and name[3]==temp[3] and name[4]==temp[4]thenflag=trueGetData(Data[0], "本机触摸屏", RW, 5+var, 65)//获取匹配行的存储数据SetData(Data[0], "Panasonic FP", DT, 32700, 65)//将查找到的数据传给下位机elsevar=var+70 //下一个配方名地址end ifnext iif flag==false thenSetData(ON, "本机触摸屏", LB, 20, 1)end ifFILL(name[0], 0, 5)SetData(name[0], "本机触摸屏", LW, 0, 5)//清空LW0的值,即清空输入的配方名SetData(OFF, "本机触摸屏", LB, 1, 1)//清零宏指令触发位end macro_command/**********************************************************删除——del**********************************************************/macro_command main()short i=0,j=0,var=0shortMaxLine=0,CurtLine=0,MoveTime=0,index=0,CurtAddress=0,NextAddress=0short c[70],name[5],clear[70],check[5]bool zero=0,ON=true,OFF,flag=false//获取相应操作数FILL(clear[0],0,70)GetData(MaxLine, "本机触摸屏", RW, 8000, 1)//获取数据表大小GetData(name[0], "本机触摸屏", LW, 0, 5)//获取LW0的值,即要删除的配方名//查找要删除的记录,并将其删除for i=0 to MaxLine step 1?GetData(check[0], "本机触摸屏", RW, var, 5)//查找匹配的配方名if name[0]==check[0] and name[1]==check[1] and name[2]==check[2] and name[3]==check[3] and name[4]==check[4]thenflag=true//找到后置位标志位CurtLine=i//记录匹配配方名所在行CurtAddress=var//记录匹配配方名的地址MoveTime=MaxLine-CurtLine-1//要移动的次数//下面程序执行数据覆盖操作for j=1 to MoveTime step 1NextAddress=CurtAddress+70//记录下一条数据位置GetData(c[0], "本机触摸屏", RW, NextAddress, 70)//下一条数据记录覆盖当前记录SetData(c[0], "本机触摸屏", RW, CurtAddress, 70)CurtAddress=NextAddress//移动一次后下一地址变为当前地址next j//进行下一次数据覆盖//最后一行清零SetData(clear[0], "本机触摸屏", RW, CurtAddress, 70)//所有数据覆盖后,当前地址已经是最后一行起始地址//下面程序实现数据表行数减少MaxLine=MaxLine-1index=(CurtAddress/700)*700SetData(MaxLine, "本机触摸屏", RW, 8000, 1)SetData(index, "本机触摸屏", LW, 9000, 1)SetData(ON, "本机触摸屏", LB, 4, 1)elsevar=var+70end ifnext i?//若找不到匹配的配方记录,则报警提示if flag==false thenSetData(ON, "本机触摸屏", LB, 20, 1)end ifFILL(name[0], 0, 5)SetData(name[0], "本机触摸屏", LW, 0, 5)//清空LW0的值,即清空输入的配方名SetData(zero, "本机触摸屏", LB, 3, 1)end macro_command/**********************************************************首页——MinPage**********************************************************/macro_command main()short indexbool ON=trueGetData(index, "本机触摸屏", LW, 9000, 1)//a用于提取索引寄存器的当前值if index==0 thenSetData(ON, "本机触摸屏", LB, 23, 1)end ifSetData(ON, "本机触摸屏", LB, 4, 1)end macro_command/**********************************************************尾页——MaxPage**********************************************************/macro_command main()short indexbool ON=trueGetData(index, "本机触摸屏", LW, 9000, 1)if index==6300 thenSetData(ON, "本机触摸屏", LB, 24, 1)end ifSetData(ON, "本机触摸屏", LB, 4, 1)end macro_command/**********************************************************行号初始化——Initial**********************************************************/macro_command main()short array[10]={1,2,3,4,5,6,7,8,9,10}bool OFF=falseSetData(array[0], "本机触摸屏", RW, 7800, 10)SetData(OFF, "本机触摸屏", LB, 9000, 1)end macro_command。

相关主题