首页 理论教育 PAC编程基础教程:从常规动作到Add-On指令的实例

PAC编程基础教程:从常规动作到Add-On指令的实例

时间:2023-10-26 理论教育 版权反馈
【摘要】:对重复使用的执行动作,运用Add_On指令来完成也是十分成功的。我们同样可以借用前面编写过的关于闪烁的实例来作为Add-On指令的逻辑处理。图15-21 创建一个名为FLASH的Add-On指令创建过程是相似的,这里略去。图15-23 在Local Tags页面设置本地标签图15-24 闪烁点的梯级逻辑图15-25 Add-On类别项中增添了FLASH指令现在,我们来修改一下,令梯级条件不成立时固定在复位状态0。运行程序,检查FLASH指令执行结果,问题得到了解决。首先,创建产生正弦波的名为SINE_WAVE的Add_On指令,如图15-32所示。

PAC编程基础教程:从常规动作到Add-On指令的实例

对重复使用的执行动作,运用Add_On指令来完成也是十分成功的。下面我们再尝试建一条Add-On指令,指令的要求是:当这条指令调用时,有一个输出点闪烁,其闪烁频率可更改。我们同样可以借用前面编写过的关于闪烁的实例来作为Add-On指令的逻辑处理。

再创建一个名为FLASH的Add-On指令,如图15-21所示。

978-7-111-36030-8-Chapter15-27.jpg

图15-21 创建一个名为FLASH的Add-On指令

创建过程是相似的,这里略去。

进入Parameters页面设置外部参数,如图15-22所示。外部参数建立了闪烁频率的双整字输入参数以及闪烁的布尔量输出参数,都勾选在外部显示。

978-7-111-36030-8-Chapter15-28.jpg

图15-22 在Parameters页面设置外部参数

进入Local Tags页面设置本地标签,如图15-23所示,本地标签即为指令的内部数据,多为指令执行的中间结果,在指令执行时,受到保护不会被修改。本例中是一个计时器结构数据,这个计时器控制了时间,即闪烁的频率,当这个计时器的预置值被修改时,输出点的闪烁频率也被修改。预置值的默认值为400。

进入Logic例程编写梯级逻辑,令指令的输出点完成闪烁的功能,如图15-24所示。

除了跟我们在第7章比较指令的运用中编写的实例一样,令输出点闪烁之外,还添加了一个MOV指令的梯级传递外部的数据,跟随外部更改的闪烁频率参数。

进入普通的例程进行编写,可以看到指令集的Add-On类别项中又增添了新的成员(FLASH指令),如图15-25所示。

在普通例程中引用的FLASH指令,如图15-26所示。

让程序运行起来,测试FLASH指令执行的过程,发现有问题。当梯级条件给定,灯将按照预定的频率闪烁,并可以修改闪烁的频率;当梯级条件不成立时,输出却停留在不确定的状态。

改变梯级条件,令其成立或不成立,反复测试几次,发现停止FLASH指令执行之后,有时灯是亮着的,有时灯是熄灭的。显然,当梯级条件消失的时候,取决于当时计时器的累加值处于什么阶段,闪烁的输出会不确定在1或是0的状态。

978-7-111-36030-8-Chapter15-29.jpg

图15-23 在Local Tags页面设置本地标签

978-7-111-36030-8-Chapter15-30.jpg

图15-24 闪烁点的梯级逻辑

978-7-111-36030-8-Chapter15-31.jpg

图15-25 Add-On类别项中增添了FLASH指令

现在,我们来修改一下,令梯级条件不成立时固定在复位状态0。

进入Scan Modes页面,如图15-27所示的画面,这是定义预扫描、后扫描以及梯级条件为假时所进行的相关处理,将按照事先编辑的逻辑执行。

点击“EnableInFalse routine”的978-7-111-36030-8-Chapter15-32.jpg,进入如图15-28所示的画面,这里将指定梯级条件不成立时执行的逻辑。同样的,可以是梯形图、功能块和语句结构编程。

978-7-111-36030-8-Chapter15-33.jpg

图15-26 在例程中编写调用FLASH指令的梯级逻辑

978-7-111-36030-8-Chapter15-34.jpg

图15-27 Scan Modes页面

978-7-111-36030-8-Chapter15-35.jpg(www.xing528.com)

图15-28 创建梯级条件不使能的执行例程

点击978-7-111-36030-8-Chapter15-36.jpg,产生了梯级条件使能为假时应该执行的例程的定义画面,如图15-29所示。

978-7-111-36030-8-Chapter15-37.jpg

图15-29 梯级条件使能为假时应该执行的例程的定义画面

与此同时,FLASH指令也增加了新的结构EnableInFalse,如图15-30所示。

978-7-111-36030-8-Chapter15-38.jpg

图15-30 FLASH指令增加梯级不使能执行例程

点击978-7-111-36030-8-Chapter15-39.jpg,或点击978-7-111-36030-8-Chapter15-40.jpg,进入在EnableInFalse的例程,并在例程中编写梯级逻辑,如图15-31所示。

978-7-111-36030-8-Chapter15-41.jpg

图15-31 复位闪烁点的梯级逻辑

这是在梯级条件不成立的时候,EnableInFalse例程所要执行的动作。它将解锁这个位,无论指令停止调用时它处在什么样的状态,最后总会令这个位复位为零。运行程序,检查FLASH指令执行结果,问题得到了解决。

重复的动作由某些难以理解的梯级逻辑组成,一个完整的独立功能均可以采用用户自定义指令解决。下面,我们再尝试将产生正弦波的梯级逻辑整合为正弦波指令。首先,创建产生正弦波的名为SINE_WAVE的Add_On指令,如图15-32所示。

978-7-111-36030-8-Chapter15-42.jpg

图15-32 创建SINE_WAVE指令

创建指令参数,如图15-33所示,输入参数Period带入周期时间,单位为秒,默认值为5;输入参数Max作为正弦波的幅值,默认值为10;输出参数则带出正弦波变化值。

978-7-111-36030-8-Chapter15-43.jpg

图15-33 创建指令参数

创建本地标签,如图15-34所示,这是正弦波计算过程所需要用到的几个中间结果数据,这些数据无需对外。

978-7-111-36030-8-Chapter15-44.jpg

图15-34 创建本地标签

像第6章算术逻辑运算指令的编程中关于正弦波的运算一样,编辑有关的梯级逻辑,如图15-35所示,周期时间秒的单位通过乘法指令MUL换算成毫秒的单位。

在例程中编写指令调用,如图15-36所示,当梯级条件成立时,连绵不断的正弦波输出,通过标签Sine_Wave1.Out_SineWave送出。

这个指令所产生的正弦波可以提供一个模拟信号,通过改变周期值的大小来调试模拟硬件电路的高通滤波回路或低通滤波回路。

978-7-111-36030-8-Chapter15-45.jpg

图15-35 正弦波产生的梯级逻辑

978-7-111-36030-8-Chapter15-46.jpg

图15-36 在例程中编写调用SINE—WAVE指令的梯级逻辑

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈