介绍
您可以自定义功能函数,新增功能函数.原理很简单,通过专家模式的regFuntion
函数可以自定义自己的用户函数.
regFuntion函数
在专家模式下,通过函数 regFuntion(name,code)
进行注册默认模式下的功能函数,
其中name是函数名,code是专家模式的逻辑代码
入门例子
regFuntion("myPrint",[[print(self.s1)]]);
在专家模式运行上面指令后,以后您的默认引擎就多了一个函数: myPrint
您执行 myPrint("hello");
的时候,实际上就是运行了 print("hello");
函数参数
专家模式下,可以通过下面方式访问参数:
数字参数 self.d1 self.d2 self.d3
字符参数:self.s1 self.s2 self.s3
实际应用
用来扩展自己的默认模式引擎的 功能函数 ,可以自行定义一套完整的编程函数语言.
一次注册永久使用
在中控上只需要注册一次函数名,以后就可以在默认模式一直用。 也就是说只需要运行一次 regFuntion
注意: 避免在自己写的程序中调用regFuntion,否则会导致死循环
.
更多例子
------------注册例子1-------------
--code=[[printhex(self.s1);]]
--regFuntion("printhex",code);
------------注册例子2-------------
--code=[[bus.send(1,0xff,self.d1,{tonumber(self.d2),tonumber(self.d3)})]];
--regFuntion("bus.sp4.send",code);
-----------注册例子3--------------
--使用独立线程调用 _bus_sp4.tsk 程序
--regFuntion("bus.sp4.send","_bus_sp4.tsk?k=%d2&v=%d3&id=%d1");
------------uptime.check()----------
--code=[[SaveAINT(199,math.ceil((tonumber(GetUCI("PowerTime","system"))/3600)))]]
--regFuntion("uptime.check",code);
-----------------------bus.sp4----------------------
regFuntion("bus.sp4.send",[[bus.send(1,0xff,self.d1,{tonumber(self.d2),tonumber(self.d3)})]]);
regFuntion("bus.sp4.setID",[[require "sys.bus" bus.sp4.setID(tonumber(self.d1),tonumber(self.d2));]]);
regFuntion("bus.sp4.setGroup",[[require "sys.bus" bus.sp4.setGroup(tonumber(self.d1),tonumber(self.d2));]]);
regFuntion("bus.sp4.setDelay",[[require "sys.bus" bus.sp4.setDelay(tonumber(self.d1),tonumber(self.d2));]]);
regFuntion("bus.sp4.check",[[require "sys.bus" bus.sp4.check(tonumber(self.d1))]]);
regFuntion("bus.sp4.restore",[[require "sys.bus" bus.sp4.restore(tonumber(self.d1))]]);
--------------------relay.set----------------------
regFuntion("relay.set",[[relay.set(self.d1,self.d2);]]);
------------bus.sp4.rs485.set-------------
regFuntion("bus.sp4.rs485.set",[[require "sys.bus" bus.sp4.rs485.set(tonumber(self.d1),tonumber(self.d2));]]);
------------bus.sp4.rs485.send /sendhex /setID /setGroup /check / restore-------------
regFuntion("bus.sp4.rs485.send",[[require "sys.bus" bus.sp4.rs485.send(tonumber(self.d1),self.s1);]]);
regFuntion("bus.sp4.rs485.sendhex",[[require "sys.bus" bus.sp4.rs485.sendhex(tonumber(self.d1),self.s1);]]);
-----------默认模式调用------------------
--printhex("PWR"); --显示PWR的16进
--bus.sp4.send(0xff,2,0) --总线上所有sp4的第二路关闭
regFuntion("rs485.open",[[rs485.open();]]);
regFuntion("rs485.set",[[rs485.set(tonumber(self.d1),8,'n',1);]]);
regFuntion("rs485.send",[[rs485.send(self.s1);]]);
regFuntion("rs485.sendhex",[[rs485.sendhex(self.s1);]]);
regFuntion("rs485.close",[[rs485.close();]]);
--------------pjlink---------------------
regFuntion("pjlink.off",[[import "sys.pjlink"; if(self.s2 and #self.s2>0) then pjlink.pass=self.s2 end;pjlink.off(self.s1) ; ]]);
regFuntion("pjlink.on",[[import "sys.pjlink"; if(self.s2 and #self.s2>0) then pjlink.pass=self.s2 end;pjlink.on(self.s1) ; ]]);
--------------pc-------------------------
regFuntion("pc.on",[[import "sys.pc"; pc.on(self.s1) ; ]]);
regFuntion("pc.off",[[import "sys.pc"; pc.off(self.s1) ; ]]);
regFuntion("pc.setVol",[[ pc.setVol(self.s1,self.s2) ; ]]);
-------------osc-------------------
regFuntion("osc.send",[[import "sys.osc"; local v=self.s3 if (not v) then v=tonumber(self.d2) end ; osc.send(self.s1,self.d1,self.s2,v);]]);
---让中控支持SimPlayer播放器的控制
regFuntion("player.open",[[udp.send(self.s1,6600,self.s2);]]);
regFuntion("player.pause",[[udp.send(self.s1,6600,"pause");]]);
regFuntion("player.play",[[udp.send(self.s1,6600,"play");]]);
regFuntion("player.stop",[[udp.send(self.s1,6600,"stop");]]);
regFuntion("player.setVol",[[udp.send(self.s1,6600,"vol=" .. self.s2);]]);
regFuntion("player.loop",[[udp.send(self.s1,6600,"loop="..tostring(self.s2=="1" or self.s2==1));]]);
regFuntion("player.test",[[udp.send(self.s1,6600,"666"); sleep(1); udp.send("255.255.255.255",6600,"666"); ]]);
regFuntion("player.send",[[udp.send(self.s1,6600,self.s2);]]);
regFuntion("touch.disable",[[touch.disable(self.s1);]]);
regFuntion("touch.enable",[[touch.enable(self.s1);]]);
regFuntion("touch.speak",[[touch.speak(self.s1);]]);
regFuntion("touch.open",[[touch.open(self.s1);]]);
beep(50);
最后一次更新于2023-12-05
0 条评论