威纶通配方——宏指令
- 格式:doc
- 大小:54.50 KB
- 文档页数:9
威纶通宏指令for威纶通宏指令for是一种用于控制微控制器和单片机的高级语言。
它是一种结构化的编程语言,可以帮助开发者快速、高效地编写程序。
宏指令for是一种循环结构,用于重复执行一段代码。
它的语法形式为:for (初始化; 条件; 更新) { 循环体 }。
其中,初始化表达式用于初始化循环变量;条件表达式用于判断是否继续执行循环;更新表达式用于更新循环变量的值。
使用威纶通宏指令for,可以实现各种循环操作。
例如,可以使用for循环来遍历数组或列表中的元素,对每个元素执行相同的操作。
下面是一个简单的例子:for (int i = 0; i < 10; i++) {// 执行循环体操作printf("当前循环次数:%d\n", i);}上述代码中,初始化表达式将循环变量i初始化为0;条件表达式判断i是否小于10;更新表达式将i的值增加1。
循环体中的代码将打印出当前循环次数。
当i的值等于10时,条件表达式为假,循环结束。
除了遍历数组或列表,宏指令for还可以用于执行固定次数的循环操作。
例如,可以使用for循环来实现倒计时功能:for (int i = 10; i > 0; i--) {// 执行循环体操作printf("倒计时:%d\n", i);}上述代码中,初始化表达式将循环变量i初始化为10;条件表达式判断i是否大于0;更新表达式将i的值减少1。
循环体中的代码将打印出当前倒计时的值。
当i的值等于0时,条件表达式为假,循环结束。
除了基本的循环功能,宏指令for还支持嵌套循环。
嵌套循环是指在一个循环内部再嵌套另一个循环。
这种结构可以用于处理复杂的问题,例如生成九九乘法表:for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {// 执行循环体操作printf("%d × %d = %d\t", j, i, j * i);}printf("\n");}上述代码中,外层循环控制行数,内层循环控制列数。
威纶通触摸屏如何编写和调用宏指令进行逻辑判断
如下图所示,新建一个测试项目,添加触摸屏和PLC,这里以三菱FX系列PLC进行举例说明,
如下图所示,点击工程文件—宏指令,
如下图所示,进入宏指令设置界面,点击“新增”即可新建一个宏指令,
如下图所示,进入宏指令程序编辑,
如下图所示,定义2个变量a,b,其中a的值从PLC的D0寄存器获取,点击“函数”,选择Getdata函数,变量选择a,读取地址选择D0,具体语法见下图,
将变量b的值输出,如下图所示,点击“函数”,选择Setdata函数,变量选择b,写入地址选择D100,具体语法见下图,
如下图所示,选择该宏指令的执行方式为:周期执行,每隔500ms执行一次,点击“保存&编译”,提示“0 errors“表明无语法错误,
退出返回到窗口中,添加一个数值元件,读取/写入地址为D0,如下图所示,
再添加一个数值元件,如下图所示,读取地址为D100,
我们开启离线仿真,测试宏指令的执行效果:
如下图所示,D0的值为0时,D100显示为111;
D0的值为1或其他值时,D100显示为222;
以上,就是在威纶通触摸屏中利用宏指令进行简单的逻辑判断,感兴趣的小伙伴可以自己打开软件自己尝试一下。
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 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=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=0short MaxLine=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 1GetData(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。
威纶通宏指令数据类型:解析与实践威纶通宏指令是一种常用于编写嵌入式系统的指令集。
其中数据类型是指令集中最基础的概念之一。
在本文中,我们将深入探讨威纶通宏指令中的数据类型,包括其定义、使用方法以及在实际项目中的应用。
一、数据类型的定义与分类数据类型是指用于表示数据的一种属性。
在威纶通宏指令中,数据类型主要分为以下几类:1. 整型(integer):用于表示整数型的数据。
2. 浮点型(float):用于表示带小数点的数据。
3. 字符型(char):用于表示单个字符。
4. 布尔型(boolean):用于表示逻辑值,只有两个取值:真(true)和假(false)。
二、数据类型的使用方法在威纶通宏指令中,数据类型可以用于变量声明的时候指定类型,也可以在函数参数、返回值和局部变量中使用。
以下是一些数据类型的使用方法示例:1. 整型变量声明:int a = 1;2. 浮点型变量声明:float b = 2.0;3. 字符型变量声明:char c = 'A';4. 布尔型变量声明:boolean d = true;三、数据类型在实际项目中的应用在实际工作中,我们常常需要使用各种数据类型来进行数据的存储和处理。
下面是一些常见的应用场景:1. 温度传感器数据处理:对于温度传感器采集到的数据,常常需要使用浮点型数据类型来存储,便于进行精确的数字运算和处理。
2. 汽车控制系统的实现:在汽车控制系统中,需要使用布尔型数据类型来表示开关状态,比如发动机是否启动、灯光是否开启等。
3. 数组的使用:在嵌入式系统中,经常需要使用数组来存储一组相关的数据,比如传感器采集到的一组温度数据。
综上所述,威纶通宏指令的数据类型是编写嵌入式系统必不可少的基础知识。
通过本文的介绍,相信读者对数据类型的定义、使用方法及应用场景有了更深入的了解和认识。
威纶通宏指令赋值-概述说明以及解释1.引言1.1 概述威纶通(Verilog-A)是一种硬件描述语言,常用于模拟和设计集成电路。
它是IEEE标准1364-2005中定义的一种增强型Verilog语言,主要用于模拟连续行为的电子电路。
威纶通具有强大的建模能力,可以对各种电路和系统进行描述和分析,例如模拟信号处理、电源管理、射频模拟和传感器接口等。
使用威纶通语言,我们可以通过编写数学表达式来描述电路中的信号传输和行为。
宏指令(Macro Instructions)是一种在程序设计中广泛应用的概念,它允许我们定义一系列操作的命令,以便在需要时可以进行重复使用。
在威纶通中,宏指令允许我们创建一些复杂的原子操作,并将其作为单个指令来使用,简化了代码的编写和维护过程。
赋值操作是一种常见的程序设计中的基本操作,用于将值分配给变量或寄存器。
在威纶通中,赋值操作的重要性不言而喻,它可以用于在电路模拟过程中改变信号的值,实现不同的功能和行为。
本文将对威纶通、宏指令和赋值这三个关键概念进行详细介绍,并探讨它们在电路设计和模拟中的重要性。
同时,我们还将讨论它们在未来发展中的潜力和前景。
通过深入研究这些概念,我们可以更好地理解威纶通语言的特点和优势,为电路设计和模拟提供更高效和可靠的方法。
1.2文章结构1.2 文章结构在本篇长文中,我们将以"威纶通宏指令赋值"为主题,探讨威纶通、宏指令以及赋值的概念、功能特点、使用方法、意义与应用,以及实现方式与技巧。
在第一章的引言部分,我们将对整篇文章进行概述,介绍威纶通、宏指令和赋值的基本概念,并给出文章的目的。
接着,在第二章的正文部分,我们将详细介绍威纶通的背景和特点,包括其简介和功能特点。
然后,我们将深入讨论宏指令的定义与作用,以及它的使用方法。
最后,我们将探究赋值的意义与应用,以及实现方式与技巧。
在第三章的结论部分,我们将总结威纶通、宏指令和赋值在编程中的重要性,并展望它们在未来的发展前景。
第三十章 宏指令说明 (2)30.1宏指令的结构 (2)30.2宏指令的语法 (4)30.2.1 常量和变量 (4)30.2.2运算符 (7)30.3语句 (10)30.3.1定义语句 (10)30.3.2赋值语句 (11)30.3.3逻辑运算语句 (11)30.3.4 循环语句 (13)30.3.4其他控制命令 (15)30.4 子函数 (16)30.5内置函数功能 (17)30.5.1 数学运算函数 (18)30.5.2 数据转换函数 (24)30.5.3 数据操作函数 (29)30.5.4 位状态转换 (34)30.5.5 通讯有关的函数 (37)30.6 怎样建立和执行宏指令 (52)30.6.1 怎样建立一个宏指令 (52)30.6.2 执行宏指令 (57)30.7 使用宏指令时的注意事项 (58)30.8 使用自由协议去控制一个设备 (59)30.9 编译错误提示信息 (67)30.10 宏指令范例程序 (78)第三十章宏指令说明宏指令提供了应用程序之外附加的你所需要的功能。
在MT8000人机界面运行时,宏指令可以自动的执行这些命令。
它可以担负执行譬如复杂的运算、字符串处理,和使用者与工程之间的交流等功能。
本章主要介绍宏指令的语法、如何使用和编程方法等功能。
希望通过本章的说明,能够使各位能够快速的掌握EB8000软件提供的强大的宏指令功能。
30.1宏指令的结构宏指令是由各种语句组成的。
这些语句包含常数、变量和各种运算符。
这些语句放置在特定的顺序位置以执行后达到一个希望的执行结果。
宏指令的结构一般为以下格式:全局变量声明-----------------------------------可选Sub Function Block Declarations(子函数声明) -----------------------------------可选局部变量声明End Sub(结束子函数)macro_command main() [主函数] ------------------------------------必须局部变量声明[各式语句]end macro_command [结束主函数] ------------------------------------必须一个宏指令必须有一个且只有一个主函数,用来开始宏指令的执行。
威纶通宏指令详细讲解本文主要介绍了威纶通宏指令的基本概念、应用场景以及使用方法,通过实例进行了详细的讲解。
下面是本店铺为大家精心编写的3篇《威纶通宏指令详细讲解》,供大家借鉴与参考,希望对大家有所帮助。
《威纶通宏指令详细讲解》篇1一、威纶通宏指令概述威纶通宏指令是威纶通触摸屏编程软件的一种功能,它可以通过一系列简单的操作实现复杂的控制逻辑。
宏指令可以用于控制 PLC、驱动器等各种设备,使得触摸屏的控制更加高效、灵活。
二、威纶通宏指令应用场景威纶通宏指令适用于以下几种应用场景:1. 控制 PLC:通过宏指令,触摸屏可以实现对 PLC 的控制,例如启动、停止、复位等操作。
2. 控制驱动器:通过宏指令,触摸屏可以实现对驱动器的控制,例如速度、温度、湿度等参数的设置。
3. 数据采集:通过宏指令,触摸屏可以实现对传感器、仪表等设备的数据采集,例如温度、湿度、压力等参数的采集。
三、威纶通宏指令使用方法威纶通宏指令的使用方法可以分为以下几个步骤:1. 创建宏指令:在威纶通触摸屏编程软件中,创建一个新的宏指令,并为其命名。
2. 编写宏指令代码:在宏指令的代码编辑器中,编写宏指令的代码,包括操作类型、操作参数等。
3. 调用宏指令:在触摸屏的程序中,调用宏指令,实现对设备的控制或数据采集。
4. 设置宏指令触发条件:在触摸屏的程序中,设置宏指令的触发条件,例如时间、事件等。
四、威纶通宏指令实例以下以一个简单的实例来说明威纶通宏指令的使用方法。
假设有一个 PLC 需要控制启停,可以通过以下步骤实现:1. 创建宏指令:在威纶通触摸屏编程软件中,创建一个名为“启停 PLC”的宏指令。
2. 编写宏指令代码:在宏指令的代码编辑器中,编写以下代码: ```macrocommand main()short index, array10/bool OFF, ON/GetData(index, touchscreen, LW, 9000, 1)/array01 index/array1 array01 array2 array11 array3 array21 array4 array31 array5 array41 array6 array51 array7 array61 array8 array71 array9 array81/SetData(array0, touchscreen, RW, 7800, 10)/SetData(OFF, touchscreen, LB, 4, 1)/endmacrocommand```这段代码中,使用了 GetData 函数提取触摸屏的行号,并将其存储在 array10 数组中。
威纶通触屏宏指令判断范例大家好,今天咱们来聊聊一个非常实用又有点“硬核”的话题——威纶通触屏宏指令判断。
说实话,这个话题一开始听起来有点晦涩,对不对?就像你听到“微积分”三个字时,脑袋瞬间冒出一堆问号,心里暗叫:“这是什么鬼?”其实呢,它并没有想象中的那么复杂,只要稍微捋清楚几个关键点,别说是触屏宏指令判断,整个控制系统你都能摸得滚瓜烂熟,指哪儿打哪儿!不过说实话,刚开始学的时候我也有点“晕乎乎”的,脑袋一片空白,觉得这简直是对智商的挑战。
但慢慢来,关键就在于了解原理,接着操作,肯定没问题。
好啦,咱们先说说什么是威纶通触屏宏指令吧。
简单来说,它就是一种可以在威纶通触摸屏上进行操作的指令,让你控制机器的行为,比如显示某个界面、触发某个动作,或者切换状态。
那它和普通的控制指令有啥不同呢?嗯,普通的控制指令一般就一个简单的命令,执行完就好了;但触屏宏指令则更智能一些,能根据不同的输入判断不同的输出。
你可以理解为它就像是一个“聪明的开关”,不再死板地执行某个动作,而是能根据具体情况做出判断,保证系统按照预期的方式运行。
举个例子,你要设计一个操作界面,里面有个按钮,按下去之后,触屏需要做出反应。
那如果按下去的时候,它就直接跳转到另一个界面,这是普通的指令对吧?但如果你用了宏指令,那就不只是跳转那简单了,它可以根据不同的条件判断决定跳转哪个界面。
比如,按下按钮后,如果机器状态是“停止”,它跳到一个“启动”界面;如果是“运行”,它就跳到“暂停”界面。
这样一来,界面不仅仅是死板地切换,它能根据实际的情况灵活变化,操作起来更加贴心、智能。
宏指令的判断条件是怎么写的呢?其实也并不复杂,你只需要设置好相应的判断条件,然后就可以使用宏指令来执行相应的操作。
这就像是一个人遇到路口,需要做决策,路口上有两个方向,他根据天气、时间、心情等因素,选择自己认为最合适的路走。
简单来说,就是一个“判断题”加“选择题”,然后触屏系统会根据设定的条件,给你一个准确的答复。
威纶通宏指令时间间隔-概述说明以及解释1.引言1.1 概述在威纶通(Vivante)的图形处理器中,宏指令是一种非常重要的机制,它可以对图形渲染过程进行优化。
与传统的图形处理方式相比,使用宏指令可以极大地提高图形渲染的效率和质量。
而在宏指令使用过程中,时间间隔的设置对其性能和效果也有着至关重要的影响。
本文将针对威纶通宏指令的时间间隔进行探讨和研究。
首先,我们将从概述宏指令的定义和作用开始,介绍宏指令在图形渲染中的重要性。
随后,重点讨论宏指令的使用方法,包括指令的编写和调用方式。
在此基础上,我们将重点探讨宏指令的时间间隔设置,分析其在图形渲染过程中的影响因素和优化方法。
宏指令的时间间隔是指在执行多个宏指令之间所需等待的时间。
这个时间间隔的设置会直接影响到图形渲染的效果和性能。
在本文的结论部分,我们将通过实验和案例分析,总结出威纶通宏指令时间间隔的最佳实践和应用场景。
只有在正确理解和合理设置宏指令的时间间隔后,才能发挥图形处理器的最大性能和效果。
通过本文的研究和分析,读者将能够深入了解威纶通宏指令时间间隔的原理和影响,并且学会如何优化和适配不同应用场景下的宏指令时间间隔设置。
最终,我们希望本文能为读者提供一种指导和参考,帮助他们在图形渲染领域取得更好的成果和性能。
1.2文章结构文章结构部分的内容如下所示:2. 正文本节将详细讨论威纶通宏指令时间间隔的相关内容。
首先,我们将介绍威纶通宏指令的定义,深入了解其基本概念和特点。
随后,我们将探讨威纶通宏指令的作用,明确其在计算机系统中的重要性和价值。
接着,我们将介绍威纶通宏指令的使用方法,给出一些常见的示例和操作步骤,以便读者能够更好地理解和应用这一技术。
最后,在本节的最后一部分,我们将重点讨论威纶通宏指令的时间间隔设置,深入探究其对计算机系统性能的影响以及如何进行优化和调整。
3. 结论在结论部分,我们将对本文所讨论的内容进行总结和归纳。
首先,我们将讨论威纶通宏指令时间间隔的影响因素,包括硬件特性、软件要求等。
/**********************************************************行号刷新——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//否则开始查询下一行endifnext 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 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=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 1GetData(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。