介绍

您可以自定义功能函数,新增功能函数.原理很简单,通过专家模式的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);