#ifndef __plan_H #define __plan_H #include "weight.h" /* * 铲车协议示例 旧: 显示: 7E 15 02 F1 7E 45 C7 EB C8 A1 BC C6 BB AE 20 20 20 20 20 20 20 30 A0 1号键: 7E 05 01 14 01 03 63 2号键: 7E 05 01 14 02 04 61 新: 显示: 7E 15 01 A1 7E 45 C7 EB C8 A1 BC C6 BB AE 20 20 20 20 20 20 20 30 F1 1号键: 7E 05 01 A2 01 01 D7 2号键: 7E 05 01 A2 02 00 D7 * * 数据需要insert 0x7D and follow it with the byte to be escaped XOR’d with 0x20: ? 0x7E – Frame Delimiter ? 0x7D – Escape ? 0x11 – XON ? 0x13 – XOFF Example - Raw serial data frame (before escaping interfering bytes): ? 0x7E 0x00 0x02 0x23 0x11 0xCB 0x11 needs to be escaped which results in the following frame: ? 0x7E 0x00 0x02 0x23 0x7D 0x31 0xCB Note: In the above example, the length of the raw data (excluding the checksum) is 0x0002 and the checksum of the non-escaped da ta (excluding frame delimiter and length) is calculated as:? 0xFF - (0x23 + 0x11) = (0xFF - 0x34) = 0xCB. * ---------------------------------------上传协议------------------------------------------------------------------------------ * key0 协议(上报实时重量):0x7E 0x0A 0x01 0xF0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 1位起始位 + 1位长度 + 1位源地址 + 1位命令 + 28位重量(四段) + 1帧编号 + 1校验 * key1 协议(上报1号按键):0x7E 0x0B 0x01 0xF1 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x01 1位起始位 + 1位长度 + 1位源地址 + 1位命令 + 7位重量 + 1位任务顺序号 + 1帧编号 + 1校验 * key2 协议(上报2号按键):0x7E 0x0B 0x01 0xF2 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x01 1位起始位 + 1位长度 + 1位源地址 + 1位命令 + 7位重量 + 1上次接收顺序号 + 1帧上次inorout + 1帧编号 + 1校验 * key5 协议(上报5号按键):0x7E 0x0B 0x01 0xF5 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x01 1位起始位 + 1位长度 + 1位源地址 + 1位命令 + 7位重量 + 1上次接收顺序号 + 1帧上次inorout + 1帧编号 + 1校验 * key8 协议(取时间):0x7E 0x02 0x01 0xF8 1位起始位 + 1位长度 + 1位源地址 + 1位命令 + 1帧编号 + 1校验 * ---------------------------------------设置协议------------------------------------------------------------------ * key17 协议(设置WeightConst_SBType):0x7E 0x0C 0xFF 0x17 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x00 0x00 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 8位地址 + 1位帧编号 + 1校验 * * key16 协议(设置无线API模式):0x7E 0x05 0xFF 0x16 0x01 0x00 0x00 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位api + 1位帧编号 + 1校验 * key18 协议(设置时间):0x7E 0x09 0xFF 0x18 0x00 0x00 0x00 0x00 0x00 0x00 0x00 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 5位时间 + 1位上次上传的帧编号 + 1校验 * * key19 协议(设置地址):0x7E 0x05 0x01 0x19 0x01 0x00 0x00 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位帧编号 + 1校验 * * key1A 协议(设置提取类型地址):0x7E 0x05 0x01 0x1A 0x01 0x00 0x00 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位帧编号 + 1校验 * key1B 协议(设置网络地址):0x7E 0x05 0x01 0x1A 0x01 0x00 0x00 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位帧编号 + 1校验 * * ---------------------------------------铲车协议--------------------------------------------------------------------------------------- * key14 协议(无线按键): 7E 05 01 A2 02 01 64 二号键 7E 05 01 A2 01 01 65 一号键 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位上次上传的帧编号 + 1校验 * keyF4 协议(回复无线按键): 7E 05 01 A3 02 01 85 二号键 7E 05 01 A3 01 01 86 一号键 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位上次上传的帧编号 + 1校验 * keyF1 协议(铲车显示): 7E 15 01 A1 7E 45 C7 EB C8 A1 BC C6 BB AE 20 20 20 20 32 35 33 33 63 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 18位内容 + 1校验 * ---------------------------------------下载协议--------------------------------------------------------------------------------------- * * key10 协议(回复实时重量):0x7E 0x04 0x01 0x10 0x00 0x01 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位上次上传的帧编号 + 1校验 * key11 协议(回复1号按键): 0x7E 0x04 0x01 0x11 0x00 0x01 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位上次上传的帧编号 + 1校验 * key12 协议(回复2号按键): 0x7E 0x19 0x01 0x12 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 23位 ////////////////// F0 7E 20 05 F0 51 76 A8 EF 01 CA 00 51 76 A9 02 00 80 00 51 76 A9 11 FF F2 00 51 76 A9 20 FF F2 00 28 36 key10 Output:7E 04 05 10 28 40 F1/F2/f3 7E 0F 03 F3 51 74 C3 14 8A D0 00 00 00 01 00 0B 7A key11 Output:7E 04 03 11 0B 5E F4/f5 7E 0F 01 F4 51 74 BD 2E 00 00 00 00 00 00 00 01 CC 7E 0F 01 F5 51 74 BD 2F 00 00 00 00 00 01 00 02 C8 Key12 Output:7E 0D 01 12 D2 BB 31 33 A0 0F 20 08 01 11 87 key15 Output:7E 1A 01 15 BA C3 DC D9 DE A3 B2 DD 20 20 20 20 20 20 20 20 01 8F 08 0C 80 01 11 D9 F8 7E 04 01 F8 00 84 18 Output:7E 08 01 18 51 74 BB E5 01 FA 16/17/19/1a/1b 0x7E 0x05 0x01 0x19 0x01 0x00 0x00 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位帧编号 + 1校验 */ ////////////////// /* * ---------------------------------------铲车协议--------------------------------------------------------------------------------------- * key14 协议(无线按键): 7E 05 01 A2 02 01 64 二号键 7E 05 01 A2 01 01 65 一号键 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位上次上传的帧编号 + 1校验 * keyF4 协议(回复无线按键): 7E 05 01 A3 02 01 85 二号键 7E 05 01 A3 01 01 86 一号键 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 1位上次上传的帧编号 + 1校验 * keyF1 协议(铲车显示): 7E 15 01 A1 7E 45 C7 EB C8 A1 BC C6 BB AE 20 20 20 20 32 35 33 33 63 1位起始位 + 1位长度 + 1位目标地址 + 1位命令 + 18位内容 + 1校验 */ union frameinit_t { struct { uint8_t frameHead;//帧头 uint8_t frameLen;//数据长度Number of bytes between length and checksum fields. uint8_t addr;//器件ID uint8_t frameType;//帧类型,Transmit Request }__attribute__((packed)) data; uint8_t Buffer[4]; }; //计划结构 union plan_comp_t { struct { uint16_t sumweight:16; // 总重 uint8_t reget:1; // =0 第一次,=1 重取 uint8_t shifts:2; // 班次 uint8_t reserved:1; // 保留 uint8_t swpos:4; // 总重量小数位数,=0 无小数点,=1 1位小数,=2 2位小数,=3 3位小数 uint8_t incount:8; // 上料数 uint8_t outcount:8; // 发料数 uint8_t frameid:4; // 本协议帧编号 uint8_t frameid_l:4; //对应回复的id }__attribute__((packed)) data; uint8_t Buffer[6]; }; //配方复合标志的结构 union pf_comp_t { struct { uint8_t az_pos:2; // 跳转域绝对值小数位数,=0 无小数点,=1 1位小数,=2 2位小数,=3 3位小数 uint8_t autosecond:2; // =0 不进行自动判断,=1 合理阶段停留3秒,=2 合理停留6秒,=3 合理停留9秒 uint8_t tw_pos:2; // 目标重量小数位数,=0 无小数点,=1 1位小数,=2 2位小数,=3 3位小数 uint8_t tW_minus:1; // 目标重量的正负,=0 正数 bit6=1 负数 uint8_t addorout:1; // 加投料说明,=0 加料 bit7=1 投料 uint8_t autozone:8; // 跳转域 uint8_t firstReget:1; // 本计划是重取计划的第一个料或舍 uint8_t isMix:1; // 是否混合料 uint8_t JMP:1; //是否一旦超过设置重量,就自动跳转 uint8_t delaytime:4; uint8_t needBegin:1; // uint8_t pfsort:8; // 操作ID 操作ID就是一个计划中的每一步的唯一标识,不同计划的操作ID可以相同,同一计划中的ID不可以相同 // 有效范围是0-200,如果=0xFE,则本计划结束,如果=0xFF,则当天计划结束 uint8_t frameid:4; // 本协议帧编号 uint8_t frameid_l:4; // 对应0x16帧编号 }__attribute__((packed)) data; uint8_t Buffer[5]; }; //按键重量的结构 union TimeConst_t { struct datetime_t data; uint8_t Buffer[4]; }; extern union frameinit_t dataframehead; extern union plan_comp_t plan_comp; extern union pf_comp_t pf_comp; extern unsigned char WeightConst_product[40]; extern uint8_t WeightConst_feed[40]; //原料名称 extern unsigned char WeightConst_Nextfeed[40]; //临时表 extern signed short WeightConst_NextWeightTarget; //目标重量 extern signed short WeightConst_WeightTarget; //目标重量 extern signed short WeightConst_WeightTargetTemp; extern unsigned char CompleteTarget_order; //已完成的顺序 extern unsigned char XbeeConst_lastinorout; extern signed short WeightConst_WeightTargetAllowMin; //目标重量的允许跳转范围 extern short WeightConst_WeightTargetAllowMax; //目标重量的允许跳转范围 extern unsigned char WeightConst_PlantempList[40]; //计划临时表 extern unsigned char WeightConst_PlanLastList[40]; //计划临时表 extern unsigned char XbeeConst_FrameNum; extern unsigned short WeightConst_DELAYTIME; extern unsigned char WeightConst_WeightHaveBegin; //已经确认开始 extern unsigned char WeightConst_Product_JS; extern unsigned char WeightConst_Stop; extern unsigned short WeightConst_DELAYON; extern unsigned char XbeeConst_CanSend; extern unsigned char XbeeConst_lastsort; extern unsigned char WeightConst_Product_Run; //开始运行 extern unsigned short WeightConst_Product_Run_time; //开始运行时间 extern unsigned char WeightConst_Run; //整体开始运行 extern unsigned char getPlaning; extern unsigned char WeightConst_AutoSingleNSecondPoint; extern rt_sem_t pop_product_sem; extern rt_sem_t setTIME_lock; extern rt_sem_t delay_key_sem; extern unsigned char delayKeying; extern void setTIME_thread(void); extern void sendgetTime(void); extern void SendWifi_thread(void); extern void sendkey1(int BtnType, int remote); extern void sendkey2(int BtnType); extern void setWeightConst_initProduct(void); extern void getTargetWeight(void); extern void pop_product_thread(void); extern void delay_key_thread(void); extern void setSendFrame_t(unsigned char Broadcast,unsigned char Radius,unsigned char TO); extern void Planback(void); extern union TimeConst_t TimeConst; #endif