您好,欢迎访问三七文档
1常用函数一、基本逻辑1、NOT函数NOT函数也称反转器,反转输入信号到输出端,如果输入是高电平,输出就是低电平,反之亦然。NOT函数我们用一个真值表来说明其输入和输入的逻辑关系,表示如下:SignalInSignalOutHighLowLowHighNOT函数应用举例:自动摄像控制有时设备提供的信号与您想要的恰好相反,比如就您的控制系统而言,麦克风混音器通过设置触点闭合可以知道哪一路麦克风正在传入声音。在一个视频会议应用中,这些闭合也可以用来控制摄像头使其直接对准发言人。但是,假设当麦克风有人发言时不是提供的闭合信号,而继电器平时是闭合的,但麦克风有人发言时提供一个断开的信号触发。您可以把每个输入信号接入NOT函数,首先使电平反转输出,用输出信号在您逻辑程序中其它地方去触发摄像机的预设状态。2、OR函数当任何一个输入为高电平时,OR函数将输出高电平,看下面的图表,当“Signal_1in”或“Signal_2in”为高电平时,“Signalout”为高电平。2注意1:从真值表中可以看出,当两路输入信号都为高电平时,输出也为高电平。如果您需要在只有一路输入为高电平时,输出才为高电平,您可以用一个异或(XOR)函数。注意2:OR函数的输入端口数是可以随意增加的(取决于特定的应用),并且只有一路信号输出。就是说,一个20-Input的OR函数的任何一个输入端为高电平,输出都为高电平。OR函数举例:解除静音控制比如,典型的音量控制包括调高、调低和静音按钮。如果您想在静音时通过按调高或调低按钮就自动解除静音,您可以用一个OR函数完成此项功能。注意:要完成该例的功能还需要另外的逻辑,这在后面的章节中作介绍。33、AND函数AND函数在所有的输入都为高电平时输出为高电平。如下面的图表所示,如果“Signal_1_in”和“Signal_2_in”都为高电平时,“Signal_out”为高电平。AND函数举例:分离电源开关因为只有所有的输入端为高电平的时候,输出端才为高电平,一般不会将多个按钮的触发直接关联到AND函数的输入端,这意味着两个按钮要同时被按下才行。接到AND函数的一个或多个输入通常是锁定的电平信号,经常用来确定系统当前的某种状态。比如,由红外控制的VCR只有一个电源功能键(on/off),假设我们想将电源开和电源关的功能分开。通过电流感应设备检测VCR电源开关的状态,产生一个数字信号代表VCR当前是开或关。当信号“vcr_is_on”为高电平时,表示VCR开。用AND函数我们可以确保当VCR为开时,按下“vcr_is_off”按钮发送电源(关机)指令到VCR;当VCR是关时,“power_off”按钮按下时,我们不希望发送电源指令,因为这样可能使VCR又打开。我们用同样的逻辑去处理“vcr_power_on”按钮按下时的情况。见下面AND函数应用于完整电流感应程序的例子。AND函数举例44、Buffer函数Buffer函数可以理解为可开关的门,控制数据流通。当门开时,数据信号不做任何改变从输入端流向对应的输出端;当门关闭时,所有的输出被置低电平,并且与输入的信号无关。“门”的开关是由enable输入端所控制的,当enable为高电平时,Buffer使能(即门开),当信号为低电平时,函数不可用(即门关)。Buffer函数-High/Low5Buffer与之前讨论的函数不同,它的输入端数量不仅可以扩展(enable除外),而且每个输入有一个对应的输出,这与NOT、OR和AND函数只有一个输出端不同。而且Buffer每一对的输入输出与其它输入输出相互独立。也就是说,一个输入端的信号只与对应的输出端有关系(当函数被使能时),不会影响其它输出端。因为Buffer有时相当于复合的AND函数,每个输入端与enable端AND后决定对应输出端的状态。Buffer函数的输出端信号有一个有趣且非常实用的特点。前面我们讲到了数字信号时提到每个数字端只可有一个驱动源,但是这里有一些例外。我们知道象按钮输入这样的系统输入是一个例外,Buffer函数的输出是另一个例外。即一个信号不仅可以由一个Buffer驱动同时也可以被其它Buffer驱动或者由一个按钮(或其它系统输入)驱动。这个特点有一个深层次的逻辑关系,这将在手册后面详细讲解。Buffer举例:多设备控制对于Buffer函数一个典型的应用就是可以用一组共用的按钮实现对多个设备的控制。当对按钮有限的手持遥控设备编程时,这一用法非常有用。针对这样的设备,通常的界面是定义一组共用按钮和不同的设备源按钮,通过选择源按钮决定共用按钮控制某台设备。因为Buffer函数相当于复合的AND函数,我们经常需要产生“状态”信号。就是定义系统中某一事件状态的信号。在本例中,我们需要为每个源设备设定信号来确定某台设备是否被选中。在接下来的章节里,我们将会了解到如何产生这些信号,但现在我们简单的假设我们已有这样的信号,请看下面例程。Buffer举例6注意,在这个例子中,任一时间只能有一个Buffer是有效的。如果两个Buffer同时有效,按PLAY按钮就会发出多个命令,这是我们在这个例子中不需要的。为保证不会发生这种情况,我们强制在同一时刻只有一个状态信号为高电平。这在后面的章节将作介绍。Buffer函数举例:多事件触发对于像快思聪这样可定制程序的控制系统,其优势在于可以为用户提供自动功能以满足他们的真正需求。一个设计良好的控制系统会让用户通过尽可能少的操作完成他们想要实现的控制功能。这就需要在许多情况中用一个按钮去触发多个事件。SIMPL语言可以很容易的实现一个按钮触发多个事件(或相关的任何事件)。比如:一个标准功能为“SystemOn”的按钮需要设计为同时降下屏幕,打开投影机,并且选择某种预先设置的灯光模式,这可以通过将按钮的输出信号连接到一个继电器去降下屏幕,向投影机的红外接收端口发送“PowerOn”指令,并且向RS-232端口发送一个命令串控制灯光系统。不需要任何的逻辑编程便可完成。下面是程序图:SingleButtonPressExample单个按钮触发举例7然而,采用这种方法有一些缺点。首先,按这种方式编写的程序很难阅读,您必需全程跟踪信号直到终端才知道它触发了什么事件。采用SIMPLWindows的“ShowRoutings”指令比较容易些。第二个缺点更严重:如果您想对屏幕、投影机电源和灯光预设做单独控制怎么办呢?就以上的例子中,这三种控制功能被绑在一起而不能独立控制。即使您认为单独控制并不需要,但也许将来会需要,您就需要对之前的程序做大量的修改。我们可以通过在程序中增加逻辑来避免这种缺陷。第一种解决方法可以用OR函数将所有的事件联在一起去触发一个事件。比如,我们想通过按“systemon”按钮或“screendown”按钮去降下屏幕,我们可以用一个OR函数去实现。如下图所示,对于上例中的程序,现在采用OR函数,除实现连动以外还可实现单独控制。多个OR函数的分离控制8以上这种方式灵活了许多,但仍有缺点。首先,与之前的例子一样程序流程难以阅读,尤其是程序变得庞大时,对于每一项功能您都需要通过一个OR函数向后追踪才能知道究竟是什么事件触发了它。第二,程序增大时,可能其它地方也需要去触发某个功能。比如,也许您希望每次选择一个信号源时都降下屏幕,可以简单的增加OR函数的输入端,但最后会导致程序很乱难以调试。我们回到Buffer函数,还记得Buffer函数的输出信号可以连接到已有的由系统输入或其它Buffer函数驱动的输出信号。这样我们可以用一个或多个Buffer函数编写一个优雅的程序去处理多事件触发。下面的程序图只用一个单独的Buffer函数实现了比上面采用OR函数例子中更多的功能。Buffer您会发现在上面的例子中有两个有趣的特点。首先,在enable输入端连接有一个为“1”的信号,之前我们曾讲过这是一个一直为逻辑高电平的数字信号。在这种情况下,Buffer表示永久使能。当您不是用Buffer去控制信号流向,而是将一个信号“映射”到多个信号时就可以这样使用。第二个独特的特点就是在Buffer的输9入端同一信号被使用了多次,这样便可以通过单独一个输入信号将多个输出信号同时驱动为高电平。最后,注意由于Buffer对应的输入和输出端是独立的,我们用一个函数可实现系统开和系统关时序。但是,为了清晰起见,我们可以用两个分开的Buffer函数。二、状态逻辑1、toggle函数Toggle函数和Set/ResetLatch函数有许多相似之处。实际上,Toggle函数就是Set/ResetLatch函数增加了一个“Clock”输入端。在“Clock”端的每个上升沿都会使函数在Set和Reset两种状态下翻转。同样设有Set和Reset输入端用以以强制函数输出为指定状态(置1或置0)。Toggle函数举例:音量静音控制Toggle函数很容易实现单个按钮对静音的控制。如下图所示,静音按钮连接到“Clock”输入端。每次按按钮都会使信号“Mute_On”在高电平和低电平之间交替变化,通常该输出信号将连接到像C2N-VEQ4音量控制器中的静音继电器上。同时注意“Reset”端的用法,不管按VolumeUp还是VolumeDown按钮都可以消除静音。Toggle举例:静音控制注意:在控制自身带有静音锁定功能的设备时,不建议这样使用Toggle函数。比如说,如果您通过红外控制AV接收器,通过其自身的静音按钮,每发送一次指令,设备会在静音和解除静音之间切换。这种情况下不需要锁定的静音信号,而应该直接将静音按钮发出的信号连接到红外指令上。可能您希望用Toggle函数为触摸屏提供实际反馈,让用户了解接收器实际的状态。这里要非常注意,通常不建议提供状态反馈,除非您能确定反馈是正确的。如果您认为反馈和接收器实际状态之间可能会出现不同步,最好使用瞬时反馈。Toggle函数举例:设备电源开关在上一个例子中,仅仅用了Toggle函数的Out输出端来控制静音状态。有时需要用到Out10和Out*两个输出端,比如用RS-232控制的投影机。通常这种设备的开关机指令是分开的。下面的程序说明用Toggle函数的两个输出端去驱动开关机指令。“vproj_Power”信号的每个上升沿都会触发一条电源指令。当然要注意的是Toggle的输出端是锁定的,但RS-232指令是在驱动信号的上升沿发出,所以这不会出现问题。但是,如果投影机是由红外控制的,我们就不能这样编程了,因为相应的红外指令会不断的发送到设备。而我们可以增加另外的逻辑通过Toggle的输出端产生脉冲。这在本书的后面将会涉及到。Toggle举例:设备电源开/关三、Interlock函数Interlock函数输入端出现上升沿时会使对应的输出端锁定为高电平。另外,其它先前为高电平的输出端解除锁定变为低电平。这样,Interlock函数在任何时刻只有一个输出端为高电平,其余都为低电平(除了“setall”输入端,后面讨论)。该属性叫做breakbeforemake。事实上Toggle函数将记住最后变为高电平的输入端。这在当用户想在多个选项中间选择控制时十分方便。Interlock函数也有两个特殊的输入端“clear”和“setall”。“clear”将使先前为高电平的输出端变为低电平,“setall”使所有输出同时变为高电平,这是不只一个输出端为高的唯一场合。这在涉及一些非易失内存的特定应用时有用。Interlock举例:(音/视频)源选择反馈许多音视频系统组成一组源选择。用户可以在一系列的音视频源中选择观看和收听。典型的例子是在会议室中,可能有录像机、影碟机、幻灯机或者计算机,可以通过向矩阵或投影机发送指令选择音视频源。下面所示为使用Interlock函数实现反馈显示,提示用户当前选定的音视频源。Interlock举例:源选择反馈11注意:在这个例子中的输出信号仅仅用做反馈,并没有连接到矩阵去做源选择。这是因为Interlock的输出端是锁定的,编程时通常很少用锁定的信号去做瞬时的控制功能(像RS23
本文标题:快思聪编程常用函数
链接地址:https://www.777doc.com/doc-5079674 .html