步骤一:
新建一个子程序。在子程序属性里面编好子程序名称和块编号(子程序号),如图2所示。这里要求不严格,主要是编程者自己容易分辨就好。当然如果是要做成库,zuihao把块编号设置大些,以便于调用时不会冲突。
图2 设置块属性
第二步:
如图3所示,打开变量表。
图3 变量表
第三步:
向变量表填入需要的输入输出参数,如图4所示。
图4 设置参数
变量表的各个列的意思是:
地址:变量对应L区的juedui地址。这个地址由系统分配,不能由编程者输入。每增加一个变量或者插入一行,地址自动改变。并且如果编程当前正在用符号名编程的时候,增删行导致的地址变更,不会影响编程关系。如果正在用地址编程,而你又增删过行,那么程序地址将会混乱。
符号:这个是变量的名字。如果正在用地址编程的时候,此时修改名字,不会影响已写好的程序。如果正在用符号编程,此时修改名字,那么程序符号立即红色报错,程序已找不到这个名字了。
变量类型:无法修改。输入参数填写在IN行。输入/输出参数填写在IN_OUT行。输出参数填写在OUT行。临时变量在Zui后TEMP。填写完毕会自动增加新行。
IN类型表示子程序运行的数据来源,就像上述例子的4个加数。
OUT类型表示经过子程序的运算,得到的结果。输出在这个位置。
IN/OUT类型,组合两种类型,先输入给子程序再运算得到结果输出到相同的位置。
TEMP类型,这个类型既不输入也不输出,仅仅在子程序中充当过渡用的中间变量。
数据类型:这个参数是一个点位还是一个字节还是一个浮点数等等的性质。这个下拉选择将会影响地址栏的分配跨度。因为不同的类型占用不同的位长。
注释:给自己看的一些关于本行变量的备忘信息。
到此,一个带参数的子程序就已经完成了。并没开始编写子程序的内容,你已经可以观察一下由主程序调用这个子程序的样子。如图5所示。
图5 子程序调用
网络1是当子程序没有填写变量表的时候的样子,它不带任何参数。网络2是刚才建立了变量表的求和子程序。此时的子程序未确定任何实质性的参数地址。点击每个问号地方,按照题目要求左侧输入VW0;VW2;VW4;VW6,右侧输入VW100,调用基本就完成了。
子程序输入输出参数的排序会按照你刚才填写变量表的先后顺序布置。在实际程序中,你zuihao在向子程序编程之前先确认一下这个外观效果,每一个输入输出参数是否能够按照使用的习惯排列所有参数。例如我们表达一个长方体的尺寸的时候通常都说“长宽高”,没有人会说“高长宽”的次序的。这个就是习惯。当参数很多的时候,尽量按照有关习惯填写变量表的顺序。可以用插入删除行的方法编辑次序。
第四步:对子程序编程
子程序内的加法过程的编程在此就省略了。其实就是图1的子程序。只是将全部的MW改写成LW就可以了。
好了,一个带参数的子程序就完整建立完毕了。它将会出现在指令树里面项目的程序块里面。它因为本身就是一个子程序,也是显示为一个子程序。
后面的内容更精彩。可能不是你想象的那回事哦~
一份程序中建立多个子程序,每个子程序完成相对比较独立的功能。而子程序也是围绕主程序的要求,并且还根据主程序给出的条件完成这个要求。此时主程序和子程序之间或者说子程序和它下级的子程序之间,就必然有一些数据的交流。下面将介绍一下这种参数的传递。
再提一下变量表,子程序里面的变量表,这是Zui重要的上下级程序之间数据传递的方式,但不是唯一的方式。主程序把将要给子程序的数值摆放在一个或一片约定的全局地址,子程序读取这些全局的地址……这种做法作为传递参数,Zui简单这里不讨论这样的传递方式。
现在随便做一个子程序,观察一下在主程序中调用时候的外观。
图1
图2
如图1所示是在主程序里面调用SBR_0的情况,还有一个常见的计数器指令。如图2所示是SBR_0中变量表所填入的变量设置。
图1中一个标注SBR_0的指令块跟计数器指令外观很相似。各自的接口和参数都不同。它们都有触点接口和数据接口。现在看看子程序的调用,主程序通过什么渠道把参数传递到子程序。
SBR_0左边上方开始有两个连接着开关触点的接口。