VMx

vmx.im
啥都学一点的填坑人
  1. 首页
  2. 填坑
  3. 正文

最近学习crestron的simpl+简单的宏组件代码

2021年1月25日 1137点热度 2人点赞 0条评论
/*******************************************************************************************
Compiler Directives
(Uncomment and declare compiler directives as needed)
*******************************************************************************************/
// #ENABLE_DYNAMIC
// #SYMBOL_NAME ""
// #HINT ""
// #DEFINE_CONSTANT
// #CATEGORY ""
// #PRINT_TO_TRACE
// #DIGITAL_EXPAND
// #ANALOG_SERIAL_EXPAND
// #OUTPUT_SHIFT
// #HELP_PDF_FILE ""
#DEFAULT_VOLATILE
#ENABLE_STACK_CHECKING
#ENABLE_TRACE
// #ENCODING_ASCII
// #ENCODING_UTF16
// #ENCODING_INHERIT_FROM_PARENT
// #ENCODING_INHERIT_FROM_PROGRAM
/*
#HELP_BEGIN
(add additional lines of help lines)
#HELP_END
*/

/*******************************************************************************************
Include Libraries
(Uncomment and include additional libraries as needed)
*******************************************************************************************/
// #CRESTRON_LIBRARY ""
// #USER_LIBRARY ""

/*******************************************************************************************
DIGITAL, ANALOG and SERIAL INPUTS and OUTPUTS
(Uncomment and declare inputs and outputs as needed)
定义好输入量(DIGITAL为开关按下的值,为0/1, ANALOG_INPUT为一些数字表示的量,如温度、模式值等,STRING一般为控制字符(16进制控制码)和设备返回字符串(主动查询设备的返回码或操作一个动作后返回的结果码)。这为宏的左边输入量,在此定义一个数字量power_in,一个From_Str$的接收设备返回码的字符串量
*******************************************************************************************/
DIGITAL_INPUT power_in;
STRING_INPUT From_Str$[255];
//DIGITAL_INPUT
// ANALOG_INPUT
// STRING_INPUT
// BUFFER_INPUT
//OUT为右边的输出量,一般为指向程序的其它输入量或直接输出到控制设备。定义一个输出到设备的string量和digital的返回量
DIGITAL_OUTPUT power_fb;
STRING_OUTPUT TO_str$;
//DIGITAL_OUTPUT
// ANALOG_OUTPUT
// STRING_OUTPUT
// BUFFER_OUTPUT
STRING name$[255],code$[255];
INTEGER strindex,id_no,id_val;
/*******************************************************************************************
Functions
定义一个函数,如果需要多次调用建议把代码做成函数
*******************************************************************************************/
//取CRC码函数
String_Function ProcessString(string StringA)
{
    String StringB[30];
    integer CRC, char, i, j, xflg;
    CRC = 0xFFFF;
    for(i=1 to len(StringA))
    {
        char = byte(StringA,i);
        for(j=1 to 8)
        {
            xflg = (CRC ^ char) & 0x0001;
            CRC = (CRC >> 1);
            if(xflg <> 0)
            CRC = CRC ^ 0xA001;
            char = char >> 1;
        }
    }
    StringB = StringA + chr(low(CRC)) + chr(high(CRC));
    return (StringB);
}

Function SayHello(string hello_name)
{
    print("Hello World! %s",hello_name);
}

/*******************************************************************************************
Event Handlers
事件定义 string analog为CHANGE,digital为PUSH
*******************************************************************************************/
//定义按钮power_in按下的事件
PUSH power_in
{
    name$="Bir";
    SayHello(name$);
}
CHANGE From_Str$
{
    //如:从from_str串口返回的数据的16进如下:"\x3C\x20\x00\x34\x00\x01\x00\x31",第1位"\x3c"是地址位,第8位"\x31"是我们需要的数据值,”x20\x00\x34\x00“为字符串的特征码。
    strindex = Find ("\x20\x00\x34\x00",From_Str$);
    if (strindex<>0)
    {
        id_no = byte(mid(From_Str$, (strindex - 1), 1), 1);
        //特征码向前取一位,并截取一位,byte返回字符的整数10进制值
        id_val = byte(mid(From_Str$, (strindex + 6), 1), 1);
        //特征码(如上,他的值是2)向后第6位,并截取一位,byte返回字符的整数10进制值
        //取出ID和值就可以进行相应的处理,比如向另一个设备写值。为了演示id_no和id_val经过两次互转,你可以直接进行操作。
        code$ = "\xFE\x05\x00" + chr(id_no) + "\x00\x00"+chr(id_val);
        //一般写码都需要CRC的校验码,这里就直接直接调用crc函数
        TO_str$ = ProcessString(code$);
        power_fb = 1;
        /*有时候在做类似多个stepper操作的时候会出现第一次操作后就不能再进行操作,此时需要先复位下0再操作。当fin_in输入时fin_out[10]都输出,间隔为0.6s:
        PUSH fin_in,fin_on
        {
        if(fin_in=1)
        {
        for (i=1 to 10){
        wait(10);
        fin_out[i]=0;
        wait(50);
        fin_out[i]=1;
        }
        }
        }

        */
        }
}
/*******************************************************************************************
Main()
对一些值进行初始化,如果有的话,比如,我先定义默认的值是0,或温度的值是20度
*******************************************************************************************/
/*
Function Main()
{
    power_in=0;
    set_temp=20;

}*/
Post Views: 533
标签: crestron simpl+ 宏编程 快思聪 示例
最后更新:2021年4月1日

huifei

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 vmx.im. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang