AMX编程软件介绍+语法说明+实例x2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AMX编程软件介绍+语法说明+实例x2 新建主机程序设计文件简介
通过NetLinx Studio 新建程序
选择New
选择Source File,其它的为模块及包含文件设计,我们暂不管它。
Workspace Wizard是一个工程项目管理,可以把整个项目所涉及的文件管理起来,方便您查找,单独的Source File文件也是可以用的,我们先选择Source File
是否创建新文件,选择Yes
选择,主机的标准模版,网络型主机则选择NetLinx Standard Template
输入文件名
选择要保存的路径,按下一步。
点击完成,创建出新文件。
把蓝色的字给收起来,总体上我们可以看出分如下几块:
PROGRAME_NAME为文件
DEFINE_DEVICE为定义要控制设计的控制接口 DEFINE_CONSTANT为定义常量DEFINE_TYPE为定义类型文件
DEFINE_VARIABLE为定义变量
DEFINE_LATCHING为定义锁住键
DEFINE_MUTUALLY_EXCLUSIVE为定义互锁
DEFINE_START定义启动时需要执行的程序
DEFINE_EVENT为定义事件语句
DEFINE_PROGRAME为定义实时的程序语句
所有的程序必须放在固定的定义下,如变量必须放在DEFINE_VARIABLE下,事件语句必须放在DEFINE_EVENT
如何设置连接并设置固定IP 如何实现NetLinx Studio软件与中控主机的第一次连接:
我们可以通过如下几种方式来进行连接:
1. TCP/IP
2. COM
3. Moderom
4. USB
由于设备的出厂IP地址是设置为DHCP的,所以刚开始我们无法用网络来连接,如果您可以用分配IP的式给中控主机分配一个IP,就可以用刚络连上主机,再对主机进行固定IP设置,就可以直接用网络进行连接,因为通过串口或其它方式,在遇到大文件时传输得太慢,或者可能因为传输文件太大而导致传输失败。
所以一般我们通常是通过串口对主机进行IP设置,再用网络实现传输,那么我们如何实现设置呢,如下图:
在软件的Settings??》Master Communication Settings
No Active System Default Setting是设置软件的连接,Terminal Settings 为设置软件自带的超级终端的连接。
所以我们选择前者,点击??》Communication Settings
NetLinx Master为网络型中控主机,如果不是网络型中控主机则选择Axcess Master??》Serial
如果对上面显示的NetLinx- COM1,38400,8,N,1,N不符合您的设置要求,按Edit Settings进入设置修改
根据您电脑的串口选择Com Port,自带串口的默认为COM1,USB转串口的则为
安装产生的端口号,Baud Rate默认的为38400,N,8,1,(主机后面编程端口8
位拨码开关为前5个向下,后3个为向下,具体的看设备具体的设置) 最后一直选
择OK完成。
完成设置之后,您可以在状态栏下面看到如下:
如下显示为:NetLinx-COM1,38400,8,N,1,是不是您想要的设置,如果不
是刚表示您设置的有问题,请重新设置。
如果设置是正确,我们可以检测一下是否能连接上,涮新一下在线列表如下图:
点击OnLine Tree
点击右键Refresh System涮新在线更表
所有系统里面的设置都会显示出来,而且状态栏也相应的变绿。
以上现像足可以表示您的软件已经连中控主机连接上了,如果还是连接不上,可能您的电脑串口存在被其它程序占用的可能,或者您的连接线有问题。
(连接线为23交叉的连接线)。
接下来我们就可以对中控进行IP地址的修改,点击如下图:
点击进入:
选择Get IP Information可以获取到主机的IP信息,如下图可以对主机进行设
置:
设置完之后,选择Set IP Information提示成功,如下图:
点确定,最后重启中控主机,设置完成。
如何定义控制设备接口程序我们控制每个设备都有对应的设备接口
如:控制灯光窗帘,有相应的继电器接口,控制矩阵有相应的232串口,控制DVD则有相应的红外接口
要控制这些设备,需要相应的连线的同时,我们也必须清楚,在AMX系统编程里面我们要往哪里发送命令,才能对应的控制到这些设备上来。
在AMX系统里面主要涉及到3个号,即所谓的D:P:S
D:DEVICE就是每个设备的设备号;P:PORT即端口号,每个设备可能又会分为好几个端口,如NI3100有17个端口,包括7个串口,1个继电品口,8个红外口,1个I/O口,NI2100则有9个端口;S:SYSTEM即系统号,我们可以大致上这么说,每台主机可以当成一个系统。
以NI3100主机为例:
设备号:
默认设备号为5001;(可以通过软件进行修改,如NetLinx Studio) 端口号: 固定死的,1-7为串号,8为继电器口,9-16为红外口,17为I/O口(在设备的后面版有标记为Port几)
系统号:
默认为1;(可以通过软件进行修改,如NetLinx Studio,也可以为“0”表示为本系统,程序所上传的系统)
从上可知我们定义一个串口来控制矩阵,一个继电器口控制灯光,一个触摸屏进行控制。
如下程序:
DEFINE_DEVICE下定义为
AVSWITCH = 5001:1:1
RELAY = 5001:8:1
TP = 10001:1:1
AVSWITCH为自己取的一个名字,目的是来代替5001:1:1,代表的是第一个串口,RELAY 也是自己取的名字,目的也是来代替5001:8:1,代表的是继电器接口。
TP代表的是触摸屏。
它们的同一特点都是遵循D:P:S这样的一个规则来的。
这里面有没有空格都无所谓,有空格只是让几行代码看起来比较对齐。
如果一台主机的情况下,都可以写成5001:1:0,5001:8:0,10001:1:0,因为0代表的是本系统(上面所提到的)。
我们在接下来的程序设计的按钮事件里面可能会出现如下语句:
BUTTON_ENENT[TP,1]
{
PUSH:ON[RELAY,1]
}
上面这小段程序的意思是,触发1号通道按钮的时候,打开断电器第1路。
我们同样也是可以这么写的:
BUTTON_ENENT[10001:1:1,1]
{
PUSH:ON[5001:8:1,1]
}
上面两段程序执行的效果是一样的,可定我们定义设备接口其实可以这么理解为,用自己定义的名字来代替现有的设备端口,这样也有一个好处,如果你改接口了,只要改定义设备的定义,也不需要全部修改程序里面的设备接口,而且您通过自己命名的名字,程序的可读性也比较好。
我们刚才说到的D:P:S的定义规则,那么我们如何来知道,每个设备的D,每个设备的P,每个设备的S呢,
D就是每个设备的设备号,主要分为两种,一种是在硬件上就可以直接设置的,如触摸屏,在触摸屏的设置菜单上就可以设置了,护展盒,有8位拨码开关,通
过二进制算法,算出地址,另一种是直接在软件上就可以设置设备的设备号,每个设备都是有一个默认的设备号。
P就是设备的端口号,大部分都是相对固定的,中控主机都有在后面标明着,触摸屏则可以自己设置。
S就是系统号,通过软件来设置,在一个系统的情况下,一例写0,代表本系统,肯定没错。
所有的设备系统号都是跟着所连接的主机定义的。
还有一个更快捷的方法,把整个系统连接起来,通过编程软件涮新一下在线列表,所有的设备号,系统号都会在在线列表里面显示出来。
这样您定义设备的时候就一目了然了。
AMX源文件的设置
通常我们编译程序文件的时候会生成2个文件,一个是TKN,一个是TKO,但有些人多生成了一个SRC文件
这个SRC文件是怎么来的呢?
SRC文件就是程序在电脑上运行的,可编程的文件
TKN文件是AMX主机上面运行的机器执行文件
TKO文件主要是用来做模块程序间的调用
TKO的主要用途是当一个程序分为好几块程序来写的时候,如果是用到
define_module来调用另一个文件的时候,可以直接来调用TKO文件,而不需要给别人源文件程序,也可做到,自己的程序不让别人看到代码照样能运行.
从程序的编程角度上来讲,我们知道AMX主机和其它各个品牌中控的最大优势是能可上传也能够下载程序,
如果我们想从一台NI的主机上下载程序,如果原来的人编程人员没有上传SRC 文件的话,我们是下载不了它的源文件的,下载下来的只是一个空文件,那么以前的那个编程人员就太坏了,不把源程序上传到上面,但这是软件的默认方式,可见AMX 厂家更坏,当然还有更更坏的,把源文件上传了,把文件设置了一长串的密码,虽然你下载下来了,程序还是需要密码才能打开.
以下是关于对编译设置的步骤:
从软件的设置属性
在NetLinx Compiler文件的编程进行设置
Compile With Debug In代表着,可以在程序里面执行Debug,可以设置断点程序,让程序一步步执行
Compile With Source代表着可以编程程序的时候生成SRC文件 Compile With Password Protec代表着生成的SRC文件,需要设置的密码才能打开如何实现程序下载在设置好NetLinx Studio软件与主机连接的情况下,步骤
如下:
选择Receive接收
选择ADD,添加程序
选择要下载的文件类型,如中控主机的程序,选择SRC文件,再选择ADD添加文件
选择保存路径,填好文件名,再按保存
输入设备号,端口号,系统号
主机为:0:1:0 (任何主机都一样)
触摸屏为:10001:1:0 (假设触摸屏的设备号是10001) 红外文件
为:5001:9:0(假设主机为NI3100,从第一个红外端抽红外程序) 可见本例应为0:1:0
再点OK确定
看到下面列表多了E\Project\Working\Sunkai...这个就是刚设置好保存的文件信息,Mapping为0:1:0,点击OK确定
下面新增出现即将要保存的文件信息,连接主机的IP为192.168.1.21
再点击Receive进行程序下载
如下图所示为下载程序的信息,下图为下载失败,如果下载成功则会打勾!
下载完成后,到保存的目录下打开程序,如果是主机程序,是SRC格式,打开的方式可以用NetLinx Studio来打开
也可以把SRC后缀后改成RAR后缀名,直接用压缩包的格式打开.
如何对继电器操作程序编写
我们要实现的是把下触摸屏或面板的按钮就实现继电器的开关动作下面是定义的一个控制面板和NI2100设备上的继电器接口进行控制,如下图:
下面定义了一个自定义变量供下面的方法三使用:
下图功能为:按下按钮11打开继电器3,如果继电器3接的是灯光的控制,则打开灯光,如果是某设置的电源刚是控制设备的电源开,按下按钮12则是关闭,按下按钮13的功能为,按一下开,再按一下关,一直循环下去。
有如下三种方法,如下图:
下面功能为继电器时间顺序的开关,注意Wait后面的大括号一定要添加,它是表示一个命令的集合,如果不添加程序只跟着一个语句,ON[RELAY,3]和[RELAY,5]会马上打开,10是1秒,它是以0。
1秒为单位的,所有的时间都是从刚按下按钮的时候算起的,所以第2秒应该是Wait 20,而不是紧接着Wait 10
下面是触摸屏或按钮状态跟着程序走,看到按钮状态,相应的也就知道了继电器的开关状态
如何实现矩阵程序编程实例
实现8X8矩阵的自由切换,先选择输入源,再选择输出源,可以一次性选择多个输出源,如下图:
输入:上一排,通道号为51至58
输出:下一排,通道号为61至68
在程序中,道先定义要控制的设备端口,需要一个串口,和一个触摸屏,如下图:
接下来定义,在程序中需要的变量,一个为记录输入源的vInput,一个为记录输出源的vOutput,一个为记录状态的,vStatus数组,如下图:
接下来就实现如何执行的程序,如下图:
命令是以AMX Autopatch矩阵为例,如第1路到第2的切换
为:‘CL0I1O2T’,我们只要通过变量切换1和2的值就可以实现矩阵的自由切换,vStatus为记录输入源到输出源的状态,所馈到触摸屏上。
上面的这一步骤已经可以实现程序的运行了,接下来是实现如何在触摸屏上看到矩阵的切换状态,按输入1的时候我要看到相应的输入出1输出到了哪几路来,如下图:
这样上面的程序就完成了。
相关程序下载:Switch.rar
如何实现调光调音控制以调光为例,下图为调光的控制界面,包含有4个按钮设置灯光亮度的固定值分别为100%、60%、30%、0%,1个接条显示并调节灯光的亮度。
触摸屏的设备号为128 调光模块设备号为16
4个按钮的通道号为41、42、43、44
1个拉条的LEVEL号为1 灯光接到调光模块的第6路我们来看一下程序是如何实现首先定义设备接口
定以记录当前灯光亮度的变量
按钮程序如下:
以BUTTON44为例
SEND_COMMAND MC,"‘P6L0T0’"为控制调光模块的命令,注释的为写法不一样,任取一种.
P6为调光模块的第6路
L0为控制灯光的亮度最暗,0-100为灯光亮度的值,0最暗,100最亮
T0为产生渐变的时候,0为无渐变时间,如果为T5的话就为渐变5秒
SEND_LEVEL TP,1,0为控制拉条的显示值
1为拉条的LEVEL号,0为拉条的显示值,显示值为0-255,0最小,255最大LIGHT_VALUE为定义的变量来记录前拉条的显示值
拉动拉条控制的程序如下:
拉动拉条时,LEEVEL.VALUE的值是跟着变化的,所以取出当前的值进而调节灯光的亮度
*100/255是把拉条的值从0-255转到0-100之间才能符合 itoa为把整型转成字符型
对应的反馈如下:
当值为100的时候41有反馈
当值为60的时候42有反馈
当值为30的时候43有反馈
当值为0的时候44有反馈
相关程序如下:Level.rar
如何应用Debug 在调试过程中的用法如果我们要实时知道程序中自己定义的变量的值是如何变化的,我们可以通过Debugging来实时检测变量的值,如果变量的值和你程序执行的不一样,说明您的程序可能有误。
在NetLinx Studio软件里点击如下图:
点击确定。
如上图点击右键。
添加程变量列表里的变量
点击OK。
显示如上所示,X的变量就在列表里面实时的显,在这里我们就可以实时知道变量的值,如果有用到一些需要读取设备状态信息的值时,如DIS,您就可以知道
设备每根话筒给中控的代码是多少。
根据话筒给的代码就可以知道是哪一根话筒给
过来的信息。
如何上传主机程序
这边我们以NI-3100为例来实现如何上传主机程序.
我们通过主机的编程软件来实现和主机的通信进而实现主机程序的上传和下载.
在建立软件与主机之间的通信之后,我们才可以上传程序.
程序的上传必须编译,因为主机里面运行的是编译生成的文件,而不是我们电脑
里面运行的文件,选择NetLinx的编译,编译还会帮你查找错误,如果有错误,编译之
后是生不成新的文件的.选择传程序的按钮,如下图:
点击添加按钮ADD,选择要添加的类型,如下图:
选择Other选择要找的类型文件,如下图
选择要添加文件的类型,主机程序为TKN文件,再选择添加,如下图:
选择文件所在的目录,如下图:
选择文件,如下图:
填写设备号,Device Number传主机程序时为0,Port Number为1,System为0,再点OK,如下图:
再点OK,如下图:
再点OK,如下图:
再选择Send 发送
传输状态如上图,X为传输失败,打勾为传输正确.
如保实现触摸屏与主机编程通信触摸屏与主机之间的通信其实原理性的东西是相对比较简单,在触摸屏的按钮上都有一个可设置的通道号,如下图:
如上图所示:Channel Port为1,Channel Code 为2,假高触摸屏的设备号为10001,则这个按钮产生的事件为BUTTON_EVENT[10001:1:0,2]2就是Channel Code通道号,每个按钮都可以定义通不同的通道号,对应的执行不同的命令语句,如果两个按钮通道号相同,则执行相同的命令语句。
如图:
如上图为两个按钮事件,一个表示灯开,一个表示灯关。
PUSH表示为当触摸按钮的时候产生什么事件,程序写着ON[RELAY,1]则执行ON[RELAY,1],程序写着OFF[RELAY,1]刚执行OFF[RELAY,1],不同的按钮执行的程序是不一样的,但同样是由BUTTON_ENENT组成的事件语句,所以触摸屏与主机间的通信其它就是由很多个按钮事件组合成的程序。
AMX语法功能说明
特别符号
{ } 大括号多条命令集的结合
[ ] 中括号设备,通道号[DEVICE,CHANNEL];
数组的定义,如:INTEGER VOL[NUMBER];
SYSTEM_CALL系统调用,如:SYSTEM_CALL[1]
'COSX' (45)
( ) 小括号 IF条件语句;定义互锁语句
(* *) 或/* */注释对程序的必要说明,在程序中不起任何作用
// 注释单句注释
运算符号
符号功能符号功能
+ 加号 < 小于—减号 > 大于 * 乘号 = 等于 / 除号 <= 小于等于 % 模数>= 大于等于 && 逻辑与 AND 逻辑与 || 逻辑或 OR 逻辑或 ^^ 逻辑异或 XOR 逻辑异或 ! 逻辑非 NOT 逻辑非 & 位逻辑与 BAND 位逻辑与 | 位逻辑或 BOR 位逻辑或 ^ 位逻辑异或 BXOR 位逻辑异或 ~ 位逻辑非 BNOT 位逻辑非 << 位左移LSHIFT 位左移 >> 位右移 RSHIFT 位右移
常用关键字
ON[DEVICE,CHANNEL] // 开
OFF[DEVICE,CHANNEL] // 关
PULSE[DEVICE,CHANNEL] // 发送脉冲
TO [DEVICE,CHANNEL] // 按住多长时间执行多长
SEND_COMMAND DEV, '<command string>'
SEND_STRING DEV, '<string>'
事件处理:
BUTTON_EVENT
这个关键字规定了一个按钮事件的处理。
它包括按下、释放、持续三个事
件,在一个指定的设备通道上,这三个事件与按下和释放按钮是紧密相连的,按
钮事件包含一个可选择的反馈信息处理,它在事件处理完成之后立即运行。
在任
何时候主线运行了,这个反馈信息处理也被执行。
定义格式如下:
BUTTON_EVENT [<device>,<channel>]
{
PUSH:
{
/* 当按钮按下去时执行的动作 */
}
RELEASE:
{
/* 当按钮松手时执行的动作 */
}
HOLD [<time>,[REPEAT]]:
{
/* 当按钮按住时过了多长时间/或每隔多长时间重复执行的动作 */
}
}
Example:
BUTTON_EVENT[TP,1]
{
PUSH: /* 按下触摸屏第一个通道时执行的动作 */
{
ON[RELAY,1]
}
}
BUTTON_EVENT特性描述表:
Property Name Type Description Button.Input Device + Channel DEVCHAN Button.Input.Channel Channel INTEGER
Button.Input.Device Device DEV
Button.Input.Device.Number Device number INTEGER
Button.Input.Device.Port Device port INTEGER
Button.Input.Device.System System number INTEGER
LONG Button.Holdtime Current hold time
in .10 second
increments.
Note:Button.Holdtime
returns are in 1ms
increments.
DEV Button.SourceDev Source device of
button event Button.SourceDev.Number Source device number INTEGER Button.SourceDev.Port Source device port INTEGER
Button.SourceDev.System Source device system. INTEGER
DATA_EVENT
这个关键字规定了一个数据事件的处理。
在一个系统中,触发信息传到主机或者
设备的时候,可分为五种类型:
1、设备接收到数据字符串 (RS-232 device)
2、设备从主机接收到 SEND_COMMAND 命令
3、主机检测到设备在线
4、主机检测到设备不在线
5、被控设备发生错误信息
这些事件仅仅与一个设备相连。
定义格式如下:
DATA_EVENT [<device>]
{
COMMAND:
{
/* 设备从主机接收到 SEND_COMMAND 命令 */
}
STRING:
{
/* 设备接收到数据字符串 (RS-232 device) */
}
ONLINE:
{
/* 主机检测到设备在线 */
}
OFFLINE:
{
/* 主机检测到设备不在线 */
}
ONERROR:
{
/* 被控设备发生错误信息 */
}
}
Example:
DATA_EVENT[PROJECT]
{
ONLINE:
{
SEND_COMMAND PROJECT, 'SET_BAUD 19200,N,8,1' }
}
DATA_EVENT特性描述表:
Property Name Type Description
Data.Device Device DEV
Data.Device.Number Device number INTEGER Data.Device.Port Device port INTEGER Data.Device.System System number INTEGER Data.Number Event number LONG
CHAR Array Data.Text Text associated with the
event
LEVEL_EVENT
这个关键字规定了一个拉条事件的处理。
在一个指定的设备上,一个拉条的变化作为一个结果被接收,也就是拉条值的改变引发的事件。
定义格式如下: LEVEL_EVENT [<device>,<level>]
{
/* 当拉条发生变化时产生的语句 */
}
Example:
LEVEL_EVENT [ TP, 1 ]
{
IF (LEVEL.VALUE >= COOL_POINT)
{
ON[RELAY,FAN]
}
ELSE IF (LEVEL.VALUE <= HEAT_POINT)
{
OFF[RELAY,FAN]
}
}
注释:LEVEL.VALUE表示拉条改变的值。
它可以代替一个需要创建的拉条作为一个临时设备。
LEVEL_EVENT特性描述表:
Property Name Type Description
DEVLEV Level.Input Device + Level that
caused the event to
occur
DEV Level.Input.Device Device
INTEGER Level.Input.Device.Number Device number
INTEGER Level.Input.Device.Port Device port
INTEGER Level.Input.Device.System System number
INTEGER Level.Input.Level Level number
DEV Level.SourceDev Source Device of Level
Event
INTEGER Level.SourceDev.Number Source Device Number
INTEGER Level.SourceDev.Port Source Device Port
INTEGER Level.SourceDev.System Source Device System
Numeric Level.Value Level value 附加:拉条的介绍
基本上AMX的触摸屏都具有拉条显示,和拉条控制
Level Values
13580
Level 2Level 1 00255255
如:可以用来反应当前灯光的亮度和音量的大小
Creating Levels创建读取写入拉条的值
读取的值
要读取拉条的设备读取拉条数据的变量
CREATE_LEVEL device, level number, variable
要读取拉条的通道号
写入
要写入拉条的设备要写入拉条的值
SEND_LEVEL TP, 1, VOL_LEVEL
要写入拉条的通道号
DEFINE_CONNECT_LEVEL
这个关键字规定了拉条的联结。
定义格式如下:
DEFINE_CONNECT_LEVEL /* 设备与拉条相关联 */ (device 1,level number 1,device 2,level number 2,...etc.)
Example:
DEFINE_CONNECT_LEVEL
(TP ,1, VOL,1,VOL, 2) // 触摸屏按钮拉条,与音量盒第一路和第二路相关联
COMBINE_LEVELS(VIRTUAL1,1,TP1,1,TP2,1,TP3,1) // 建立关联
UNCOMBINE_LEVELS(VIRTUAL1,1) // 取消关联
CHANNEL_EVENT
这个关键字规定了一个通道事件的处理。
在一个指定的设备通道上,一个输出发生改变时,这个处理类型就被调用。
定义格式如下:
CHANNEL_EVENT[DEVICE,CHANNEL]
{
ON:
{
/* 通道打开的事件处理 */
}
OFF:
{
/* 关闭通道的事件处理 */
}
}
CHANNEL_EVENT特性描述表:
Property Name Type Description
DEV Channel.Device Device
INTEGER Channel.Device.Number Device number
INTEGER Channel.Device.Port Device port
INTEGER Channel.Device.System System number
INTEGER Channel.Channel Device channel
DEV Channel.SourceDev Source Device of Channel
Event
INTEGER Channel.SourceDev.Number Source Device Number
INTEGER Channel.SourceDev.Port Source Device Port
INTEGER Channel.SourceDev.System Source Device System
TIMELINE_EVENT
当一个时间线的内置时间相当于在时间数组里指定时间的某一个时,这些事件被生成。
定义格式如下:
TIMELINE_EVENT[timelineID]
Example:
Define_Device
dvPanel = 128:1:0
DEFINE_VARIABLE
LONG TimeArray[100]
DEFINE_CONSTANT
TL1 = 1
TL2 = 2
DEFINE_EVENT
TIMELINE_EVENT[TL1] /* 捕获所有TL1 的时间线 */ {
switch(Timeline.Sequence) /* 按先后顺序找到相对应的时间 */ {
case 1:
{
SEND_COMMAND dvPanel, "'TEXT1-1 1'"
}
case 2:
{
SEND_COMMAND dvPanel, "'TEXT1-1 2'"
}
case 3:
{
SEND_COMMAND dvPanel, "'TEXT1-1 3'"
}
case 4:
{
SEND_COMMAND dvPanel, "'TEXT1-1 4'"
}
case 5:
{
SEND_COMMAND dvPanel, "'TEXT1-1 5'"
}
}
}
TIMELINE_EVENT[TL2] /* 捕获所有TL2 的时间线 */ {
switch(Timeline.Sequence) /* 按先后顺序找到相对应的时间 */ {
case 1:
{
SEND_COMMAND dvPanel, "'TEXT2-2 1'"
}
case 2:
{
SEND_COMMAND dvPanel, "'TEXT2-2 2'"
}
case 3:
{
SEND_COMMAND dvPanel, "'TEXT2-2 3'"
}
case 4:
{
SEND_COMMAND dvPanel, "'TEXT2-2 4'"
}
case 5:
{
SEND_COMMAND dvPanel, "'TEXT2-2 5'"
}
}
}
DEFINE_PROGRAM
PUSH[dvPanel,1]
{
TimeArray[1] = 1000
TimeArray[2] = 2000
TimeArray[3] = 3000
TimeArray[4] = 4000
TimeArray[5] = 5000
TIMELINE_CREATE(TL1,TimeArray,5,TIMELINE_ABSOLUTE, TIMELINE_REPEAT) }
PUSH[dvPanel,2]
{
TimeArray[1] = 1000
TimeArray[2] = 1000
TimeArray[3] = 1000
TimeArray[4] = 1000
TimeArray[5] = 1000
TIMELINE_CREATE(TL2,TimeArray,5,TIMELINE_RELATIVE, TIMELINE_ONCE) } 继电器控制
ON[RELAY,1] /* 打开继电器1 */
OFF[RELAY,1] /* 关闭继电器1 */
BUTTON_EVENT[TP,1]
{
PUSH: /* 按下触摸屏第一个通道时执行的动作 */
{
ON[RELAY,1]
}
}
红外控制
PULSE[DVD,1] /* 正常发出 PLAY 红外码 */ TO[DVD,6] /* 发出 SCAN-FFWD 向前扫瞄红外码 */ BUTTON_EVENT[TP,11]
{
PUSH: /* 按下触摸屏第一个通道时DVD播放 */
{
PULSE[DVD,1]
}
}
串口控制
SEND_COMMAND SWITCHER, ?SET BAUD 9600,N,8,1?
/* 设置串口的波特率为9600,奇偶校验位无,数据位8,停止位1 */
SEND_COMMAND SWITCHER, ?SET BAUD 9600,N,8,1 485 ENABLE?
/* 启有485的模式,关闭422模式, 如485 DISABLE为关闭485模式启用422模式 */
SEND_STRING SWITCHER, ”$AB,$CC,$AD,$5B”
SEND_STRING SWITCHER, “?CL0I1O2T…,$0D”
SEND_STRING SWITCHER, “?CL0I1O2T (13)
注释: 发出 AB,CC,AD,5B 的16进制码,所有16进制码以“$” 所开始,所有 SEND_STRING 的内容使用双引号“ “ 作开始及终止,ASCII 字符串以单引号… ? 括起来,16进制码以 $ 作开头 */
模拟量控制
SEND_COMMAND D:P:S, ? P2L100T2?
BUTTON_EVENT[TP, 12]
{
PUSH: /* 按下触摸屏第12通道时设置灯光的亮度 */
{
SEND_COMMAND D:P:S, ? P2L100T2?
}
}
互锁
在定义了互锁的通道号中,在同一时间内只能有一个通道号打开
打开新的通道时,当前的通道号会被先关闭.
DEFINE_MUTUALLY_EXCLUSIVE
([RELAY,1],[RELAY,2])
([RELAY,3],[RELAY,4],[RELAY,5])
([RELAY,3].. . [RELAY,5])
注释:继电器1和继电器2两者同一时间内只能打开一个,同样的原理继电器
3、4、5三者也只能打开一个,下面两句定义的继电器3、4、5是等值的。
*/
反馈
DEFINE_PROGRAM
这个程序段规定了主线代码。
这段代码不断地被执行(处理输入的数据和提供设
备反馈信息)。
能够实时反应出设备的状态。
如灯的开关。
DEFINE_PROGRAM
[TP,1] = [RELAY,1]
/* 当继电器1开的时候,通道号为1的按钮也跟着开,反之为关 */
DEFINE_PROGRAM
[TP,1] = (POWERONOFF=1)
/* 当变量POWERONOFF=1时候,通道号为1的按钮也跟着开,反之为关*/ &在程序执行过程中的反馈
ON[TP,1]
OFF[TP,1]
/* 在程序执行过程中打开通道号为1的按钮,或关闭通道号为1的按钮 */ 变量与等待。