编程|第三章 逻辑函数编程 (2)( 二 )




然而 , 采用这种方法有一些缺点 。 首先 , 按这种方式编写的程序很难阅读 , 您必需全程跟踪信号直到终端
才知道它触发了什么事件 。 采用SIMPL Windows的“Show Routings”指令比较容易些 。 第二个缺点更严重:如果您想对屏幕、投影机电源和灯光预设做单独控制怎么办呢?就以上的例子中 , 这三种控制功能被绑在一起而不能独立控制 。 即使您认为单独控制并不需要 , 但也许将来会需要 , 您就需要对之前的程序做大量的修改 。 我们可以通过在程序中增加逻辑来避免这种缺陷 。 第一种解决方法可以用OR函数将所有的事件联在一起去触发一个事件 。 比如 , 我们想通过按“system on”按钮或“screen down”按钮去降下屏幕 , 我们可以用一个OR函数去实现 。 如下图所示 , 对于上例中的程序 , 现在采用OR函数 , 除实现连动以外还可实现单独控制 。

以上这种方式灵活了许多 , 但仍有缺点 。 首先 , 与之前的例子一样程序流程难以阅读 , 尤其是程序变得庞大时 , 对于每一项功能您都需要通过一个OR函数向后追踪才能知道究竟是什么事件触发了它 。 第二 , 程序增大时 , 可能其它地方也需要去触发某个功能 。 比如 , 也许您希望每次选择一个信号源时都降下屏幕 , 可以简单的增加OR函数的输入端 , 但最后会导致程序很乱难以调试 。 我们回到Buffer函数 , 还记得Buffer函数的输出信号可以连接到已有的由系统输入或其它Buffer函数驱动的输出信号 。 这样我们可以用一个或多个Buffer函数编写一个优雅的程序去处理多事件触发 。 下面的程序图只用一个单独的Buffer函数实现了比上面采用OR函数例子中更多的功能 。


首先 , 在enable输入端连接有一个为“1”的信号 , 之前我们曾讲过这是一个一直为逻辑高电平的数字信号 。 在这种情况下 , Buffer表示永久使能 。 当您不是用Buffer去控制信号流向 , 而是将一个信号“映射”到多个信号时就可以这样使用 。 第二个独特的特点就是在Buffer的输入端同一信号被使用了多次 , 这样便可以通过单独一个输入信号将多个输出信号同时驱动为高电平 。 最后 , 注意由于Buffer对应的输入和输出端是独立的 , 我们用一个函数可实现系统开和系统关时序 。 但是 , 为了清晰起见 , 我们可以用两个分开的Buffer函数 。