社交|第三章 逻辑函数编程 (5)( 二 )





单个输入模式:
Analog Initialize的第二种模式是第一种的延伸 。 它有一个数字输入和多个模拟输出 。 除此之外 , 函数的运作基本上都一样 , 除了当数字输入出现上升沿时 , 每一个模拟输出都被赋予相应的参数值 。
这种模式在您有多个模拟量需要赋值时有用 。 当然在这种情况下 , 每一组值都需要一个Analog Initialize 。
例如 , 我们修改上个例子 。 我们需要改变五台而不是一台电视的频道 , 而且每台电视的频道都不相同(例如在运动吧里面) 。 我们可以添加有一个输入端、五个模拟输出端的Analog Initialize函数 , 并且复制所需的数量(每个预设频道复制一次) , 更改每个函数的数字输入和参数值 , 其余的五个模拟输出保持相同 。 另外 , 这种形式的Analog Initialize还用于初始化一组程序运行时不需要改变的模拟信号 , 这在当它和其它需要模拟信号作为输入的函数组合时有用(比如Analog Sum) 。 此时只需在数字输入端简单地置”1” , 这样 , 当系统上电时 , 所有的模拟输出将被赋予相应的参数值 。

Analog Preset函数

Analog Preset可以将模拟信号指定为某一特定的值 , 并让其从当前值平滑地变化到设定值 , 变化时间由
“Time”参数决定 。 注意模拟信号实际的变化速率取决于时间参数和变化总量 。
该函数只有一个数字输入 , 但可以有若干个模拟输出 。 每一个输出都有相应的目标值 。 在输入’input’的上
升沿 , 每个输出都开始向其目标值变化 。 这种单个输入 , 多个输出的特性使它可以用来创建”场景” , 模拟输出
可以代表灯光区域 , 音量大小等 。
Analog Preset的运作类似于“单入多出”模式的Analog Initialize 。 尽管Analog Initialize可以用于需要模
拟量的任何应用 , 比如音量、灯光控制 , 但是并不总是最合适的 。
其中存在的问题就是 , 当Analog Initialize被上升沿触发时 , 它的模拟输出立即变成参数指定值 。 在需要
平滑过渡而不是跳变的情况下 , 得使用Analog Preset 。
它们两者的唯一区别就是Analog Preset有’ramp_time’参数 。 这一参数指明了从数字输入变高开始到模拟
输出达到他们指定值之间的时间 。 在此过程中模拟输出的变化是线性的 。
下面的例子告诉您怎样使用Analog Preset来创建灯光场景 。


请注意 , 这种实现方法用户将不能调整灯光场景的设置 。 灯光亮度被”硬编码”在程序中 , 每次改变预设值都要重新编辑和编译程序 。 要在系统运行时改变预设值 , 而不需要重新修改程序 , 我们需要将Analog RAM和Analog Variable Preset函数组合使用 , 这不在基础教程中讨论 , 请参阅SIMPL Windows的帮助文档获取更多的信息 。
Serial/Analog One-Shot
有些时候 , 我们不仅要知道模拟信号的值 , 还需要知道它们的值是否改变了 。 这正是Serial/Analog
One-Shot的功能 。 它除了是由模拟或串量输入端”rx$”的变化触发而不是由数字输入端的跳变触发之外 , 其它
特性和数字逻辑章节中讨论的One-Shot系列函数相似 。
当检测到输入有变化时 , 函数就将其数字输出端变高并保持’pulse_time’参数指定的时间 。 它可再次触发 ,
即当函数输出是仍然为高时 , 只要输入再次变化 , 将重新计时 。 直到输入停止变化足够长的时间 , 输出才会保
持高电平“Pulse_Time”时间 。 模拟输入的任何改变以及串量数据的每一次更新 , 都会触发Serial/Analog
One-Shot 。
作为例子 , 我们可以用Serial/Analog One-Shot函数实现当音量变化时 , 产生闪烁反馈 。 这里我们必须确
定不要将脉冲时间参数设得太短 , 否则函数的输出可能在音量正在被调节时都会很快变低 。