TSMaster-C小程序使用

打开同星的TSMaster,推荐用32版本的,比64更稳定。同星的TSMaster的C小程序支持用户嵌入代码来控制CAN报文的收发逻辑。便于开发。

点击设计里面的C小程序。

比如我现在想用小程序来实现继电器0先开后关开1s关1s,然后继电器1开1s关1s...如此往复到继电器39

定义全局变量

c 复制代码
if(flag)
{
   flag = 0;
   CAN_Data[0] = relay_ch;
   CAN_Data[1] = 0x0;       
   {
   // [1] CAN 0x240D BOB_BOX_SET_ONE_RELAY_STATE_REQ 控制单个继电器
   TCAN f0 = {0,0x5,2,0,0x240D,0,{0}};
   memcpy(f0.FData, CAN_Data, 8);
   com.transmit_can_async(&f0);
   app.wait(0, "");
   }
   relay_ch++;
   if(relay_ch == 40)
   relay_ch = 0;
   
}
else
{
   flag = 1;
   CAN_Data[0] = relay_ch;
   CAN_Data[1] = 0x1; 
   {
   // [1] CAN 0x240D BOB_BOX_SET_ONE_RELAY_STATE_REQ 控制单个继电器
   TCAN f0 = {0,0x5,2,0,0x240D,0,{0}};
   memcpy(f0.FData, CAN_Data, 8);
   com.transmit_can_async(&f0);
   app.wait(0, "");
   }
}

可以直接报文转化为C脚本

也可以根据帮助手册手写。

TCAN类型是什么?可以在TSMaster.h里面看到。

c 复制代码
// CAN frame type ================================================
typedef struct _TCAN{
    u8 FIdxChn;
    u8 FProperties;
    u8 FDLC;
    u8 FReserved;
    s32 FIdentifier;
    s64 FTimeUs;
    u8  FData[8];
    // is_tx -----------------------------------------------------
    bool get_is_tx(void)
    { 
        return (FProperties & MASK_CANProp_DIR_TX) != 0;
    }
    void set_is_tx(const bool value)
    {
        if (value) {
            FProperties = FProperties | MASK_CANProp_DIR_TX;
        } else {
            FProperties = FProperties & (~MASK_CANProp_DIR_TX);
        }
    }
    __declspec(property(get = get_is_tx, put = set_is_tx)) bool is_tx;
    // is_data ----------------------------------------------------
    bool get_is_data(void)
    { 
        return (FProperties & MASK_CANProp_REMOTE) == 0;
    }
    void set_is_data(const bool value)
    {
        if (value) {
            FProperties = FProperties & (~MASK_CANProp_REMOTE);
        } else {
            FProperties = FProperties | MASK_CANProp_REMOTE;
        }
    }
    __declspec(property(get = get_is_data, put = set_is_data)) bool is_data;
    // is_std -----------------------------------------------------
    bool get_is_std(void)
    { 
        return (FProperties & MASK_CANProp_EXTEND) == 0;
    }
    void set_is_std(const bool value)
    {
        if (value) {
            FProperties = FProperties & (~MASK_CANProp_EXTEND);
        } else {
            FProperties = FProperties | MASK_CANProp_EXTEND;
        }
    }
    __declspec(property(get = get_is_std, put = set_is_std)) bool is_std;
    // is_err ----------------------------------------------------
    bool get_is_err(void)
    { 
        return (FProperties & MASK_CANProp_ERROR) != 0;
    }
    void set_is_err(const bool value)
    {
        if (value) {
            FProperties = FProperties | MASK_CANProp_ERROR;
        } else {
            FProperties = FProperties & (~MASK_CANProp_ERROR);
        }
    }
    __declspec(property(get = get_is_err, put = set_is_err)) bool is_err;
    // load data bytes -------------------------------------------
    void load_data(u8* a) {
        for (u32 i = 0; i < 8; i++) {
            FData[i] = *a++;
        }
    }
    void set_data(const u8 d0, const u8 d1, const u8 d2, const u8 d3, const u8 d4, const u8 d5, const u8 d6, const u8 d7){
        FData[0] = d0;
        FData[1] = d1;
        FData[2] = d2;
        FData[3] = d3;
        FData[4] = d4;
        FData[5] = d5;
        FData[6] = d6;
        FData[7] = d7;
    }
    // initialize with standard identifier -----------------------
    void init_w_std_id(s32 AId, s32 ADLC) {
        FIdxChn = 0;
        FIdentifier = AId;
        FDLC = ADLC;
        FReserved = 0;
        FProperties = 0;
        is_tx = false;
        is_std = true;
        is_data = true;
        *(u64*)(&FData[0]) = 0;
        FTimeUs = 0;
    }
    // initialize with extended identifier -----------------------
    void init_w_ext_id(s32 AId, s32 ADLC) {
        FIdxChn = 0;
        FIdentifier = AId;
        FDLC = ADLC;
        FReserved = 0;
        FProperties = 0;
        is_tx = false;
        is_std = false;
        is_data = true;
        *(u64*)(&FData[0]) = 0;
        FTimeUs = 0;
    }
} TCAN, *PCAN;