/*******************************************************************************************
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: 476
文章评论