#ifndef __PROTOCOL_H__ #define __PROTOCOL_H__ #include "comm.h" #include "datadef.h" #pragma pack(1)//设定为1字节对齐 // 和下位机的通讯协议 /* // 通讯数据包定义 一、数据包格式 1. 固定长度数据包格式 |-------------------------------------------------------------------|-----------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 B8 B9 B10 B11 B12 B13 | B14 B15 | |-------------------------------------------------------------------|-----------| | 固定序列如下 | | 参数,不同命令定义不同 | B4--B13的 | | | 数据包ID | 具体定义参考命令详细说明 | | | 'F','L','D','P' | | | 16位CRC | |-------------------------------------------------------------------|-----------| 2. 可变长度数据包格式 |---------------------------------------------------------------------------|-----------|---------------- | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |---------------------------------------------------------------------------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | B16--Bn | |---------------------------------------------------------------------------|-----------|---------------| | 固定序列如下 | | 附加 | 附加 | 参数,不同命令 | B4--B13的 | 数据内容 | | | 数据包ID | 数据 | 数据 | 定义不同,定义 | | | | 'V','L','D','P' | | 长度 | 校验字 | 参考命令详细说明 | 16位CRC | | |---------------------------------------------------------------------------|-----------|---------------| 附加数据长度取值范围为 0--1024 //------------------------------------ 二、通讯命令一览表 1. 上位机发送命令 名称 符号 代码 类型 回复 说明 读取机器信息 UCMD_GET_MC_INFO 0x0001 FLDP 有 机器信息包括机器种类,配置,控制系统版本等信息 读取机器状态 UCMD_GET_MC_STATUS 0x0002 FLDP 有 读取机器的运行状态,包括机器工作状态,常用输入状态,电机位置,工作进度,文件信息等。 读取机器参数 UCMD_GET_MC_PARAS 0x0003 FLDP 有 读取内存中机器参数列表 读取内存数据 UCMD_GET_MEM_DATA 0x0004 FLDP 有 读取机器存储器数据,包括片内SRAM,片外SRAM,NAND FLASH等的内容 读取传感信号 UCMD_GET_SENSORS 0x0005 FLDP 有 读取IO信号状态及电机位置,编码器位置等信息 读取文件信息 UCMD_GET_FILE_INFO 0x0006 FLDP 有 读取数据文件的信息 读取传输结果 UCMD_GET_TRANS_RESULT 0x0007 FLDP 有 读取文件传输的结果位图,包括数据文件和升级文件 读取传感器位图 UCMD_GET_SENSOR_BMP 0x0008 FLDP 有 读取传感器配置位图 设置机器配置 UCMD_SET_MC_CONFIG 0x0101 VLDP 无 设置机器的配置,包括信号使用的端口等信息 设置机器状态 UCMD_SET_MC_STATUS 0x0102 FLDP 无 设置机器的工作状态,包括是否允许工作,清除报警等。 设置机器参数 UCMD_SET_MC_PARAS 0x0103 VLDP 无 传输机器参数列表到下位机 设置内存数据 UCMD_SET_MEM_DATA 0x0104 FLDP 无 改变某个内存单元的数据内容 设置文件参数 UCMD_SET_FILE_PARAS 0x0105 FLDP 无 设置文件参数 设置执行进度 UCMD_SET_EXEC_PROGRESS 0x0106 FLDP 无 设置文件执行进度 设置分期密码 UCMD_SET_INSTALLMENT 0x0107 FLDP 无 设置分期密码 设置经过的时间 UCMD_SET_ELAPSED_TIME 0x0108 FLDP 无 设置经过的时间 设置默认参数 UCMD_SET_DEF_PARA 0x0109 FLDP 无 设置默认参数 手动控制命令 UCMD_ACT_BYHAND 0x0201 FLDP 无 手动控制电机转动,OUTPUT信号开关等动作 机器工作命令 UCMD_MC_WORK 0x0202 FLDP 无 控制机器的工作命令,包括启动,停止,结束,或运动到某个位置等 移动XY命令 UCMD_MOVE_TO 0x0203 FLDP 无 移动XY到坐标 启动文件传输 UCMD_START_TRANS 0x0301 VLDP 无 启动文件传输 文件传输命令 UCMD_TRANS_FILE_DATA 0x0302 VLDP 无 传输文件数据包 设置文件列表 UCMD_SET_FILE_LIST 0x0304 VLDP 无 设置文件列表 获取文件列表 UCMD_GET_FILE_LIST 0x0305 FLDP 有 获取下位机文件列表 下位机升级 UCMD_MC_UPDATE 0x0401 VLDP 无 包括升级主控,外围板控制器等 2. 下位机发送命令 名称 符号 代码 类型 回复 说明 发送机器信息 DCMD_SEND_MC_INFO 0x8001 VLDP 无 发送机器信息包括机器种类,配置,控制系统版本等信息 发送机器状态 DCMD_SEND_MC_STATUS 0x8002 VLDP 无 发送取机器的运行状态,包括机器工作状态,常用输入状态,电机位置,工作进度,文件信息等。 发送机器参数 DCMD_SEND_MC_PARAS 0x8003 VLDP 无 发送内存中机器参数列表 发送内存数据 DCMD_SEND_MEM_DATA 0x8004 VLDP 无 发送机器存储器数据,包括片内SRAM,片外SRAM,NAND FLASH等的内容 发送传感信号 DCMD_SEND_SENSORS 0x8005 VLDP 无 发送IO信号状态及电机位置,编码器位置等信息 发送文件信息 DCMD_SEND_FILE_INFO 0x8006 VLDP 无 发送数据文件的信息 发送传输结果 DCMD_SEND_TRANS_RESULT 0x8007 VLDP 无 发送文件传输的结果位图 发送传感器位图 DCMD_SEND_SENSOR_BMP 0x8008 VLDP 无 发送传感器配置位图 发送张力传感器值 DCMD_SEND_TENSION 0x8009 VLDP 无 发送张力传感器值 */ // 上位机发送命令 #define UCMD_GET_MC_INFO 0x0001 // 读取机器信息 #define UCMD_GET_MC_STATUS 0x0002 // 读取机器状态 #define UCMD_GET_MC_PARAS 0x0003 // 读取机器参数 #define UCMD_GET_SENSORS 0x0005 // 读取传感信号 #define UCMD_GET_FILE_INFO 0x0006 // 读取数据文件的信息 #define UCMD_GET_TRANS_RESULT 0x0007 // 读取传输结果 #define UCMD_GET_SENSOR_BMP 0x0008 // 读取传感器位图 #define UCMD_GET_BOARD_VER 0x000A // 读取外围板程序版本 #define UCMD_GET_LOT_DATA 0x000D // 读取物联网数据 #define UCMD_SET_MC_CONFIG 0x0101 // 设置机器配置 #define UCMD_SET_MC_STATUS 0x0102 // 设置机器状态 #define UCMD_SET_MC_PARAS 0x0103 // 设置机器参数 #define UCMD_SET_MEM_DATA 0x0104 // 设置内存数据 #define UCMD_SET_FILE_PARAS 0x0105 // 设置文件参数 #define UCMD_SET_EXEC_PROGRESS 0x0106 // 设置执行进度 #define UCMD_SET_INSTALLMENT 0x0107 // 设置分期密码 #define UCMD_SET_ELAPSED_TIME 0x0108 // 设置经过的时间 #define UCMD_SET_DEF_PARA 0x0109 // 设置默认参数 #define UCMD_SET_HCPSDEF_PARA 0x010E // 设置HCPS默认参数 #define UCMD_SET_FILE_EXDATA 0x010F // 设置文件扩展数据 #define UCMD_SET_HEADDEF_PARA 0x010A // 设置机头板默认参数 #define UCMD_SET_HEAD_PARA 0x010B // 设置机头板参数 #define UCMD_SET_HCPS_PARA 0x010C // 设置勾剪扣换控制板参数 #define UCMD_SET_MVANGDEF_PARA 0x010D // 设置动框角度默认参数 #define UCMD_GET_HEAD_PARA 0x000B // 读取机头板参数 #define UCMD_GET_HCPS_PARA 0x000C // 读取勾剪扣换控制板参数 #define UCMD_ACT_BYHAND 0x0201 // 手动控制命令 #define UCMD_MC_WORK 0x0202 // 机器工作命令 #define UCMD_MOVE_TO 0x0203 // 移动XY到坐标 #define UCMD_MOVE_OFST 0x0205 // XY移动偏移量 #define UCMD_START_TRANS 0x0301 // 启动文件传输 #define UCMD_TRANS_FILE_DATA 0x0302 // 文件传输命令 //#define UCMD_TRANS_FILE_DATA 0x0303 // 文件失效命令 #define UCMD_SET_FILE_LIST 0x0304 // 设置文件列表 #define UCMD_GET_FILE_LIST 0x0305 // 获取下位机文件列表 #define UCMD_MC_UPDATE 0x0401 // 下位机升级 #define UCMD_BOARD_UPDATE 0x0402 // 外围板升级 #define UCMD_TRA_BOARD 0x0501 // 遍历命令 // 下位机发送命令 #define DCMD_REQUEST_DAT 0x8000 // 请求文件数据 #define DCMD_SEND_MC_INFO 0x8001 // 发送机器信息 #define DCMD_SEND_MC_STATUS 0x8002 // 发送机器状态 #define DCMD_SEND_MC_PARAS 0x8003 // 发送机器参数 #define DCMD_SEND_SENSORS 0x8005 // 发送传感信号 #define DCMD_SEND_FILE_INFO 0x8006 // 发送文件信息 #define DCMD_SEND_TRANS_RESULT 0x8007 // 发送传输结果 #define DCMD_SEND_SENSOR_BMP 0x8008 // 发送传感器位图 #define DCMD_SEND_DEBUG_INFO 0x8010 // 调试信息发送 #define DCMD_SEND_BOARDVER 0x800A // 发送外围板程序版本 #define DCMD_SEND_HEADPARA 0x800B // 发送机头板参数 #define DCMD_SEND_HCPSPARA 0x800C // 发送勾剪扣换控制板参数 #define DCMD_SEND_LOTDATA 0x800D // 发送物联网数据 #define DCMD_SEND_TRANS_RESULT2 0x800E // 发送传输结果2 // 三、命令详解 /* 工作流程 1. 上位机发送 UCMD_GET_MC_INFO 命令, 命令格式如下: |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|-----------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | |-------------------|-------------------|-------------------|-------------------------------|-----------| | 固定序列如下 | 数据包ID | 命令切换标志字 | 保留 | B4--B13的 | | |-------------------|-------------------|-------------------------------| | | 'F','L','D','P' | UCMD_GET_MC_INFO | 可能是随机数 | | 16位CRC | |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| 2. 下位机收到后,回复 DCMD_SEND_MC_INFO 命令, 格式定义如下 |-----------------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------|-----------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |-------------------------------------------------------------------------------------------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | B16--Bn | |-------------------------------------------------------------------------------------------|-----------|---------------| | 固定序列如下 | | 附加 | 附加 | 和上位机命令 | | B4--B13的 | 机器信息结构 | | | DCMD_SEND_MC_INFO | 数据 | 数据 | 相同的 | 保留 | | | | 'V','L','D','P' | | 长度 | 校验字 | 命令切换标志字 | | 16位CRC | | |-------------------------------------------------------------------------------------------|-----------|---------------| |-----------------------------------------------------------------------------------------------------------------------| 3. 上位机收到下位机的回复命令后,通过比对 命令标志切换字 , 可以确认是否是刚刚发送命令的回复(对于连续发送命令有用),根据情况确定是否重新发送命令。 注意: 对于没有时序要求的数据包,可以不在意 命令标志切换字。 */ // 机器信息结构定义 typedef struct { // 0 char mBoardVerStr[16]; // 主板(n1)板卡版本 char exBoardVerStr[16]; // 扩展板(n1-1)板卡版本 char softwareVerStr[32]; // 软件版本 char buildInfoStr[32]; // 编译日期信息 char boardId[32]; // 板卡ID char installment[32]; // 最后一次的分期密码字符串 // 160 char rev1[512-160]; // 512 u32 localIP; // 板卡IP地址 u32 submask; // 子网掩码 u32 gateIP; // 网关IP // 524 u8 rev2[1024-524]; } __attribute__ ((packed)) MCInfo; typedef struct { char debugInfoStr[1024]; // 调试信息 } __attribute__ ((packed)) DebugInfo; // 调试信息 typedef struct { // 0 char mBoardVerStr[16]; // 主板(n1)板卡版本 // 4 char exBoardVerStr[16]; // 扩展板(n1-1)板卡版本 // 8 char softwareVerStr[32]; // 软件版本 // 16 char boardId[32]; // 板卡ID // 24 char installment[32]; // 最后一次的分期密码字符串 // 32 u32 rev10[32]; // 64 u32 errorCode; // 报警信息 s32 workableTimer; // 可工作时间计数器,剩余时间计数(分钟为单位) u32 bootTimer; // 开机时间(单位分钟) u32 workTimer; // 工作时间(单位分钟) u32 workRpm; // 工作转速 u32 curOutCounter; // 当前产量计数,由界面记录 u32 totalOutCounter; // 累计产量计数 u32 expectedOutput; // 产量预设 u32 spindleZeroSta; // 主轴零位状态 // bit0:绣花主轴 // bit1:冲孔主轴 // bit2:缝纫主轴 u32 spindleAngle; // 主轴角度 s32 motosPos[6]; // 电机坐标 // 80 u32 sensorSignal[8]; // 传感器信号 // 88 u32 machinecfg; //机器配置 //勾线模式 bit0 0:单独勾线;1:集中勾线 //锁头模式 bit1 0:电机锁头;1电磁铁锁头 //89 u32 sewHeadNumbers;//缝纫机头个数 //90 u32 embHeadNumbers; //绣花机头个数 //91 u32 embneedleNumbers;//绣花机针个数 //92 u32 punchHeadNumbers;//冲孔机头个数 //93 u32 punchneedleNumbers;//冲孔机针个数 //94 u32 sensonNumbers;//传感器信号总数 u32 rev20[128-95]; // 128 u32 rev30[192-128]; //192 u32 rev40[256-192]; } __attribute__ ((packed)) McLotData; // 主控物联网数据 #define BOARD_VER_LEN 32 // 外围板程序版本长度 #define MAX_SUPPORT_N5 128 #define MAX_SUPPORT_N6 2 #define MAX_SUPPORT_D86 1 #define PARA_NUM 256 //动框角度参数 #define MAX_HOR 12 // 横,下标2最大值,针步 #define MAX_VER 21 // 竖,下标1最大值,转速 typedef struct { char softwareVerStr[BOARD_VER_LEN]; // 机头板程序版本 u32 paraBuf[PARA_NUM]; //机头板参数 u8 nodeType; // 节点类型 }__attribute__ ((packed)) HeadInfo; typedef struct { char softwareVerStr[BOARD_VER_LEN]; // 勾剪扣换控制板程序版本 u32 paraBuf[PARA_NUM]; //换色板参数 }__attribute__ ((packed)) HcpsInfo; typedef struct { char softwareVerStr[BOARD_VER_LEN]; // D86程序版本 u32 paraBuf[PARA_NUM]; //换色板参数 }__attribute__ ((packed)) D86Info; typedef struct { HeadInfo headInfo[MAX_SUPPORT_N5]; //最大支持32个机头 HcpsInfo hcpsInfo[MAX_SUPPORT_N6]; //最大支持2个N6 D86Info d86Info[MAX_SUPPORT_D86]; //1 }__attribute__ ((packed)) ExBoardInfo; /* 流程 1. 上位机发送命令 UCMD_SET_MC_CONFIG, 命令结构定义如下: |---------------------------------------------------------------------------------------------------------------| |-----------------------------------------------------------------------------------|-----------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |-----------------------------------------------------------------------------------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | B16--Bn | |-----------------------------------------------------------------------------------|-----------|---------------| | 固定序列如下 | | 附加 | 附加数据 | | B4--B13的 | 机器信息结构 | | | UCMD_SET_MC_CONFIG | 数据 | 校验字或 | 保留 | | | | 'V','L','D','P' | | 长度 | 字段ID | | 16位CRC | | |-----------------------------------------------------------------------------------|-----------|---------------| |---------------------------------------------------------------------------------------------------------------| 附加数据结构定义和MCInfo相同。不过前面512字节是只读的信息,不能改变。 2. 下位机收到命令后,设置相关配置。 */ // 读取机器状态 /* 工作流程 1. 上位机发送 UCMD_GET_MC_STATUS 命令, 命令格式如下: |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|-----------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | |-------------------|---------------------|-----------------|-------------------------------|-----------| | 固定序列如下 | 数据包ID | 命令切换标志字 | 保留 | B4--B13的 | | |---------------------|-----------------|-------------------------------| | | 'F','L','D','P' | UCMD_GET_MC_STATUS | 可能是随机数 | | 16位CRC | |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| 2. 下位机收到后,回复 DCMD_SEND_MC_STATUS 命令, 格式定义如下 |-----------------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------|-----------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |-------------------------------------------------------------------------------------------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | B16--Bn | |-------------------------------------------------------------------------------------------|-----------|---------------| | 固定序列如下 | | 附加 | 附加 | 和上位机命令 | | B4--B13的 | 机器状态结构 | | | DCMD_SEND_MC_STATUS | 数据 | 数据 | 相同的 | 保留 | | | | 'V','L','D','P' | | 长度 | 校验字 | 命令切换标志字 | | 16位CRC | | |-------------------------------------------------------------------------------------------|-----------|---------------| |-----------------------------------------------------------------------------------------------------------------------| 3. 上位机收到下位机的回复命令后,通过比对 命令标志切换字 , 可以确认是否是刚刚发送命令的回复(对于连续发送命令有用),根据情况确定是否重新发送命令。 注意: 1. 对于没有时序要求的数据包,可以不在意 命令标志切换字。 2. 下位机会在状态发生变化的时候主动发送 DCMD_SEND_MC_STATUS 命令 */ // 机器状态数据结构定义 typedef struct { // 0 u32 workStatus; // 工作状态位图 // .0 允许时限。=0,使用时限已到,不允许下位机工作;=1,允许下位机工作; // .1 允许状态。=0,界面钳制,不允许下位机工作;=1,允许下位机工作; // .2 机器状态。=0,手动工作状态; =1,自动工作状态 // .3 钥匙状态。=0,关闭状态; =1,打开状态 // .4 文件接收标志。= 0,初始状态。= 1,收到了文件 // .5 参数接收标志。= 0,初始状态。= 1,收到了参数 // .6 正在忙标志。= 0,空闲(可以接收文件和参数)。= 1,工作中(不会接收文件和参数) // .7 上料状态。=0,手动上料状态; =1,自动上料状态 // .8 参数更新标志。 =1,下位机更新了参数 // .9 模拟工作标志。=1, 处于模拟工作状态 // .10 允许扫描条码状态。=1, 允许 // .11 允许拍照状态。=1, 允许 // .12 正在工作标志 // .13 传感信号扫描中标志 // .14 相机校准模式中标志 // .15 // .16 // .17 // .18 // .19 取模板框状态 // .20 放模板框状态 // .21 匹绣, 0:退出匹绣,主轴归零 1:进入匹绣,扎针,允许移框 // .22 断线检测, 0:退出断线检测状态, 1:进入断线检测状态 // 1 u32 errorCode; // 错误代码 u32 fileIdx; // 文件序号 u32 dataIdx; // 数据索引 u32 runSpeed; // 运动速度 主轴转速 u32 runAction; // 执行动作代码 * u32 runSteps; // 当前执行步骤 * u32 outCounter; // 产量计数 // 8 s32 xPos; // x电机当前坐标 s32 yPos; // y电机当前坐标 u32 workNoseHead; //当前工作机头(平绣或毛巾或缠绕) u32 tempdat1[2]; // 自定义状态1 s32 embSpindleAngle; // 平绣主轴角度 u32 traverseState; // 机头板遍历状态 毛巾上 毛巾下 u32 workTimer; // 工作时长 u32 showSta; // bit0是平绣ZP主轴是否在位,0是在位,1是不在位 u32 UThreadBkSta; // 面线断线状态,每一位对应一个机头 u32 DThreadBkSta; // 底线断线状态,每一位对应一个机头 u32 tempdat2; // 自定义状态2 平绣缠绕 // 20 s32 btrdPics; // 底线片数计数 s32 btrdLength; // 底线长度计数 // 22 u32 colorIdx; // 色序编码 s32 needleIdx; // 针位号 // 24 u32 potval; //电位器值(或提升电机异常机头,或剪刀异常机头,ZP MP异常机头) u32 tempdat3; // 提升电机档位值或松紧线位置 // 26 //u32 laserIntensity; // 激光强度 u32 iterationsNum; // 反复绣,当前反复次数 // 27 s32 workableTimer; // 可工作时间计数器(分钟) u32 embNeedleNum; // 刺绣针数 //29 u32 UThreadBkSta1[32-29]; u32 tempdat4[8]; u32 tempdat5[8]; u32 tempdat6[8]; u32 tempdat7[8]; } __attribute__ ((packed)) MCStatus; //机器状态 #define WORK_STA_ENTIME 0x00000001 // 允许时限 #define WORK_STA_ENSTATE 0x00000002 // 允许状态 #define WORK_STA_WKAUTO 0x00000004 // 工作状态,手动自动 #define WORK_STA_KEYEN 0x00000008 // 钥匙开关状态 #define WORK_STA_FILEOK 0x00000010 // 文件接收标志。= 0,初始状态。= 1,收到了文件 #define WORK_STA_PARAOK 0x00000020 // 参数接收标志。= 0,初始状态。= 1,收到了参数 #define WORK_STA_BUSY 0x00000040 // 正在忙标志。= 0,空闲(可以接收文件和参数)。= 1,忙中(不会接收文件和参数) #define WORK_STA_FEED 0x00000080 // 上料状态。=0,手动上料状态; =1,自动上料状态 #define WORK_STA_NEW_PARA 0x00000100 // 参数更新标志。 =1,下位机更新了参数。上位机需要读取下位机的参数文件并更新 #define WORK_STA_SIMULATE 0x00000200 // 模拟工作标志。 =1,机器处于模拟工作 #define WORK_STA_EN_SCAN 0x00000400 // 扫码允许。 =1,允许扫码状态 #define WORK_STA_EN_PHOTO 0x00000800 // 拍照允许。 =1,允许拍照状态 #define WORK_STA_WORKING 0x00001000 // 工作标志。= 1,工作中 //错误代码 #define ERR_NONE 0x0000 // 没有错误 #define ERR_NO_AIR 0x0002 // 气压不足 #define ERR_NOT_SAFE 0x0003 // 安全区域介入 #define ERR_EXPIRATION 0x0004 // 使用时限已到 #define ERR_DRIVER 0x0005 // 驱动器报警 #define ERR_FILL_DATA 0x0006 // 填充数据错误 #define ERR_NOT_ALLOWED 0x0007 // 不允许工作状态 #define ERR_CTRL_ERR 0x0008 // 控制错误 #define ERR_FPGA_ERR 0x0009 // 运动控制芯片版本错误 #define ERR_BUTTON_NOUP 0x000A // 等待按钮抬起超时 #define ERR_FPGA_RESET 0x000B // FPGA复位错误 #define ERR_NO_READY 0x000C // 外设未就绪 #define ERR_NO_SEND_ERR 0x000D // 传输数据错误 #define ERR_EDTION_ERR 0x000E // 程序版本错误 #define ERR_WORK_DONE 0x000F // 完成产量 #define ERR_LMT_POSITIVE 0x0010 // 正向限位 #define ERR_LMT_NEGATIVE 0x0011 // 反向限位 #define ERR_RUN_ALM 0x0012 // 运动报警 #define ERR_RUN_LIMIT 0x0013 // 运动限位 #define ERR_RUN_EMS 0x0014 // 运动急停 #define ERR_MV_PARA 0x0015 // 运动参数错误 #define ERR_MC_PARA 0x0016 // 机器参数错误 #define ERR_IN_PARA 0x0017 // 输入参数错误 #define ERR_NOT_WORKSTA 0x001A // 不能工作状态 #define ERR_NOT_MOVESTA 0x001B // 禁止移框状态 #define ERR_MTZ_RIGHT 0x001F // 归零成功 #define ERR_MTZ_ERROR 0x0020 // 归零错误 #define ERR_COOR_SYSTM 0x0021 // 坐标系统错误 #define ERR_OUT_RANGE 0x0022 // 目标位置越界 #define ERR_X_LIT_POSI 0x0023 // X正向限位 #define ERR_X_LIT_NEGA 0x0024 // X反向限位 #define ERR_Y_LIT_POSI 0x0025 // Y正向限位 #define ERR_Y_LIT_NEGA 0x0026 // Y反向限位 #define ERR_FEED_MANUAL 0x0027 // 进料处于手动状态 #define ERR_MC_MANUAL 0x0028 // 机器处于手动状态 #define ERR_KEY_SW_OFF 0x0029 // 机器钥匙开关关闭 #define ERR_LIGHTCURTAINS1 0x002C // 光幕介入 #define ERR_AIR_POWER 0x002E // 气压不足 #define ERR_NO_MATERIEL 0x0031 // 缺料报警 #define ERR_CUTFRAME 0x0032 // 边框切割错误 #define ERR_MC_AUTO 0x0033 // 机器处于自动状态 #define ERR_NOT_AT_OFFSET 0x0035 // 不在偏移点 #define ERR_FEED_AUTO 0x0037 // 进料处于自动状态 #define ERR_NO_DATA 0x0040 // 无数据 #define ERR_DATA_ERROR 0x0041 // 数据错误 #define ERR_GRAPH_OUT_RANGE 0x0042 // 图形超出范围 #define ERR_MS_NOT_ZERO 0x0050 // 主轴不在零位 #define ERR_CUTTER_NOT_POS 0x0054 // 剪刀不在回位 #define ERR_UPER_TBREAK 0x0058 // 面线断线 #define ERR_BOBBIN_TBREAK 0x0059 // 底线断线 #define ERR_SEND_N1CMD_TIMOUT 0x005B // 发送主轴命令超时 #define ERR_SEND_N1CMD_FAIL 0x005C // 发送主轴命令失败 #define ERR_TRANS_TIMEOUT 0x005D // 执行命令超时 #define ERR_LIFT_TIMEOUT 0x005F // 机头升降超时 #define ERR_HEAD_NOT_SAFE 0x0060 // 机头不在安全区域 #define ERR_HD1_ND_NOT_ZERO 0x0061 // 机头1针不在零位 #define ERR_HD1_CUTTER_NOT_POS 0x0071 // 机头1剪刀不在回位 #define ERR_XY_NOT_WP 0x0085 // XY不在工作位置 #define ERR_TO_ZERO_TIMOUT 0x008E // 等待运动结束超时 #define ERR_MOVE_POS_ERR 0x008F // 移动位置错误 #define ERR_FOOT_POS 0x0093 // 压脚位置错误 #define ERR_FOOT_OUT_RANGE 0x0094 // 压脚电机位置越界 #define ERR_NOTIN_SAFE_AREA 0x009E // 机头不在安全区域 #define ERR_EMB_NOT_ZERO 0x009F // 绣花主轴不在零位 #define ERR_EMB_SWND_TIMOUT 0x00A0 // 平绣换色超时 #define ERR_EMB_ND_ERR 0x00A6 // 平绣针位错误 #define ERR_NODE_ERR 0x00AC // 节点错误 #define ERR_BUS_ERR 0x00AD // 总线错误 #define ERR_ND_NUM_ERR 0x00AE // 针位数量错误 #define ERR_CAN_TIMEOUT 0x00AF // CAN通讯超时 #define ERR_EMB_HOOK_NOT_ZERO 0x00B0 // 平绣勾刀未回位 #define ERR_EMB_CUT_NOT_ZERO 0x00B1 // 平绣剪刀未回位 #define ERR_EMB_SPINDLE_RATIO 0x00B2 // 平绣主轴齿轮比错误 #define ERR_TOWEL_NOT_ZERO 0x00B3 // 毛巾主轴不在零位 #define ERR_CHENM_NOT_ZERO 0x00B4 // 毛巾M轴不在零位 #define ERR_CHENR_NOT_ZERO 0x00B5 // 毛巾打环轴不在零位 #define ERR_CHEN_ND_ERR 0x00B6 // 毛巾针位错误 #define ERR_CHEN_ELA_TIMEOUT 0x00B7 // 松紧线电机运动超时 #define ERR_CHEN_ELA_POS 0x00B8 // 松紧线电机位置错误 #define ERR_CHEN_SWND_TIMOUT 0x00B9 // 毛巾换色超时 #define ERR_CHEN_CUT_NOT_ZERO 0x00BA // 毛巾剪刀未回位 #define ERR_CHEN_CUT_TIMEOUT 0x00BB // 毛巾剪刀运动超时 #define ERR_CHEN_HOIST_TIMOUT 0x00BC // 提升电机运动超时 #define ERR_CHEN_HOIST_POS 0x00BD // 毛巾提升电机位置错误 #define ERR_CHEN_SPINDLE_RATIO 0x00BE // 毛巾主轴齿轮比错误 #define ERR_COIL_NOT_ZERO 0x00BF // 缠绕主轴不在零位 #define ERR_COIL_M_NOT_ZERO 0x00C0 // 缠绕M轴不在零位 #define ERR_AUTO_SET_START 0x00C1 // 自动定起绣点失败 #define ERR_X_DRIVER 0x00C2 // X驱动器报警 #define ERR_Y_DRIVER 0x00C3 // Y驱动器报警 #define ERR_RING_COOR_SYSTM 0x00C4 // 打环轴坐标系统错误 #define ERR_TEMP_ALARM 0x00C8 // 温度报警 #define ERR_SCBE_ALM 0x00D1 // 散珠报警 #define ERR_SCBE_NO_MATERIAL 0x00D2 // 跟踪绳绣报警 #define ERR_HEAD_NUM 0x00D3 // 机头个数错误 #define ERR_READ_HEAD_PARA 0x00D4 // 读取机头板参数错误 #define ERR_READ_HCPS_PARA 0x00D5 // 读取换色板参数错误 #define ERR_WORK_HEAD 0x00D6 // 工作机头错误 #define ERR_CHANGE_SHUT 0x00D7 // 换梭异常 #define ERR_CHANGE_BOBBIN 0x00F0 // 更换梭芯 #define ERR_CHANGE_BOBBIN_A 0x00F1 // 更换梭芯A #define ERR_CHANGE_BOBBIN_B 0x00F2 // 更换梭芯B #define ERR_CHANGE_BOBBIN_STA 0x00F3 // 机器处于更换梭芯状态 #define ERR_CMK_SAFE 0x02F5 // 安全输入报警 #define ERR_INSTALLMENT_OK 0x0300 // 密码设置成功 #define ERR_INSTALLMENT_FAIL 0x0301 // 密码设置失败 #define ERR_ROT_COOR_SYSTM 0x00CB // 毛巾M轴坐标系统错误 #define ERR_MS_COOR_SYSTM 0x00CF // 平绣主轴坐标系统错误 #define ERR_CCMS_COOR_SYSTM 0x00D8 // 毛巾主轴坐标系统错误 #define ERR_CTMS_COOR_SYSTM 0x00DA // 缠绕主轴坐标系统错误 #define ERR_ZP_SIGNAL 0x00DB // ZP信号异常 #define ERR_MP_SIGNAL 0x00DC // MP信号异常 //机器状态判断 #define STA_NORMAL_STOP 0x0100 // 正常停止 #define STA_MTZ_SUCCESS 0x0101 // 归零成功 #define STA_WORK_PAUSE 0x0102 // 工作暂停 #define STA_WORK_OVER 0x0103 // 工作结束 #define STA_WORK_FINISH 0x0104 // 工作完成 #define STA_WORK_DONE 0x0105 // 完成产量 #define STA_EXEC_SUCCESS 0x0106 // 执行成功 #define STA_EXEC_FAILED 0x0107 // 执行失败 #define STA_WAIT_FILE 0x0108 // 等待文件 #define STA_CHANGE_BOBBIN 0x0109 // 更换梭芯 #define STA_PROCESS_FINISH 0x010A // 执行完成 #define STA_PROCESS_RUNNING 0x010B // 执行过程中 #define STA_FEED_CMPT 0x0110 // 送料完成 #define STA_EMB_CHNGCL_STOP 0x0111 // 换色停止 #define STA_ADJ_THREAD_STOP 0x0112 // 线迹调整停止 #define STA_MEND_FINISH 0x0113 // 补绣完成 #define STA_EMB_PATCH_STOP 0x0150 // 贴布绣停止 #define STA_EMB_FRAME_FINISH 0x0151 // 边框刺绣完成 #define STA_LINE_TBREAK 0x0152 // 断线停止 #define STA_AUTO_SOFTLIMIT 0x0153 // 自动定软限位完成 #define STA_EMB_SPINDLERATIO 0x0154 // 平绣主轴齿轮比正常 #define STA_CHEN_SPINDLERATIO 0x0155 // 毛巾主轴齿轮比正常 // 设置机器状态 /* 工作流程 1. 上位机发送命令 UCMD_SET_MC_STATUS, 命令结构定义如下: |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|-----------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | |-------------------|--------------------|------------------|-----------|-------------------|-----------| | 固定序列如下 | 数据包ID | 状态码 | 参数 | 保留 | B4--B13的 | | |--------------------|------------------|-----------|-------------------| | | 'F','L','D','P' | UCMD_SET_MC_STATUS | | | | 16位CRC | |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| 2. 下位机收到命令后,根据状态码设置相关状态。 */ // 状态码定义如下-设置 #define MC_STA_CLENA_ERR 0x0000 // 清除错误 #define MC_STA_EN_WORK 0x0001 // 允许工作(状态) #define MC_STA_DIS_WORK 0x0002 // 禁止工作(状态) #define MC_STA_EN_TIME 0x0003 // 允许工作(时间) #define MC_STA_DIS_TIME 0x0004 // 禁止工作(时间) #define MC_CLEAN_COUNT 0x0005 // 产量计数清零 #define MC_STA_MANUAL 0x0006 // 手动工作状态 #define MC_STA_AUTO 0x0007 // 自动工作状态 #define MC_FILE_SWITCH 0x0008 // 文件切换 #define MC_INVALID_FILE 0x0009 // 文件失效命令 #define MC_CLEAN_PARA_REF 0x000A // 清除刷新参数标志 #define MC_SET_TO_NORMAL 0x000B // 设置为正常工作状态 #define MC_SET_TO_SIMULATE 0x000C // 设置为模拟工作状态 #define MC_SET_ERR_STA 0x000D // 设置为错误状态(报错) #define MC_CLEAN_FIDX 0x000F // 索引复位 #define MC_CLEAN_BOBBIN 0x0010 // 底线计数复位 #define MC_SET_ENTRY_SCAN_SENSOR 0x0011 // 设置为 进入 扫描传感器状态 #define MC_SET_EXIT_SCAN_SENSOR 0x0012 // 设置为 退出 扫描传感器状态 #define MC_SET_ENTER_TEST_OUTPUT 0x0013 // 设置为 进入 测试输出状态 #define MC_SET_EXIT_TEST_OUTPUT 0x0014 // 设置为 退出 测试输出状态 #define MC_STA_EXIT_TRA 0x0023 // 退出遍历状态 #define MC_STA_EXIT_THREADBK 0x0024 // 退出断线测试 /* 读取参数工作流程 1. 上位机发送 UCMD_GET_MC_PARAS 命令, 命令格式如下: |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|-----------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | |-------------------|---------------------|-----------------|-------------------------------|-----------| | 固定序列如下 | 数据包ID | 参数类型 | 保留 | B4--B13的 | | |---------------------|-----------------|-------------------------------| | | 'F','L','D','P' | UCMD_GET_MC_PARAS | | | 16位CRC | |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| 2. 下位机收到后,回复 DCMD_SEND_MC_PARAS 命令, 格式定义如下 |-----------------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------|-----------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |-------------------------------------------------------------------------------------------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | B16--Bn | |-------------------------------------------------------------------------------------------|-----------|---------------| | 固定序列如下 | | 附加 | 附加 | 和上位机命令 | | B4--B13的 | 参数结构 | | | DCMD_SEND_MC_PARAS | 数据 | 数据 | 相同的 | 保留 | | | | 'V','L','D','P' | | 长度 | 校验字 | 参数类型 | | 16位CRC | | |-------------------------------------------------------------------------------------------|-----------|---------------| |-----------------------------------------------------------------------------------------------------------------------| 3. 上位机收到下位机的回复命令后,验证参数类型是否相同。 */ typedef struct { u32 buf[PARA_NUM]; } __attribute__ ((packed)) ParaStruct; //动框角度参数结构体 typedef struct { // 行按照转速100--2100,每100转一个档; 列按照1mm--12mm每个mm一个档 u16 xMvStAng[MAX_VER][MAX_HOR]; u16 yMvStAng[MAX_VER][MAX_HOR]; u16 enFlag; // 参数有效标志 u16 rev[0x200-MAX_VER*MAX_HOR*2-1]; // 预留 } __attribute__ ((packed)) EmbMvAng; // 参数类型定义 #define SEW_MCPARA_MACH 0 // 缝纫机器参数 #define SEW_MCPARA_WORK 1 // 缝纫工作参数 #define SEW_MCPARA_DEF_MC 2 // 出厂默认机器配置参数(读取有效) #define SEW_MCPARA_DEF_WK 3 // 出厂默认机器工作参数(读取有效) #define SEW_REVMCPARA_MACH 0x07 // 预留机器配置参数 #define SEW_REVMCPARA_WORK 0x08 // 预留机器工作参数 #define EX_SW_ND_DATA 0x01// 扩展色序设定 #define CHENILLE_HIGH_DATA 0x02 // 毛巾高度数据 #define EMB_SEPTUM_DATA 0x04 // 隔头绣数据 #define EMB_PATCH_DATA_COLOR 0x05 // 贴布绣数据,按色 #define EMB_MVSTANG_PARA 0x06 // 起始动框角度 #define EMB_PATCH_DATA_IDX 0x09 // 贴布绣数据,按针 // 设置机器参数 /* 工作流程 1. 上位机发送命令 UCMD_SET_MC_STATUS, 命令结构定义如下: |---------------------------------------------------------------------------------------------------------------| |---------------------------------------------------------------------------------------|-----------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |---------------------------------------------------------------------------|-----------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | B16--Bn | |---------------------------------------------------------------|-----------|-----------|-----------|---------------| | 固定序列如下 | | 附加 | 附加数据 | | | B4--B13的 | 机器参数结构 | | | UCMD_SET_MC_STATUS | 数据 | 校验字 | 参数类型 | 保留 | | | | 'V','L','D','P' | | 长度 | | | | 16位CRC | | |---------------------------------------------------------------|-----------|-----------|-----------|---------------| |-------------------------------------------------------------------------------------------------------------------| 2. 下位机收到命令后,根据参数类型,设置相关的参数。 */ // 读取传感信号 /* 读取传感器信号位图的工作流程 1. 上位机发送 UCMD_GET_SENSOR_BMP 命令, 命令格式如下: |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|-----------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | |-------------------|---------------------|-----------------|-------------------------------|-----------| | 固定序列如下 | 数据包ID | 保留 | 保留 | B4--B13的 | | |---------------------|-----------------|-------------------------------| | | 'F','L','D','P' | UCMD_GET_SENSOR_BMP | | | 16位CRC | |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| 2. 下位机收到后,根据当前机器的信号配置,返回 DCMD_SEND_SENSOR_BMP 命令, 格式定义如下 |-----------------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------|-----------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |-------------------------------------------------------------------------------------------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | B16--Bn | |-------------------------------------------------------------------------------------------|-----------|---------------| | 固定序列如下 | | 附加 | 附加 | | B4--B13的 | 信号结构 | | | DCMD_SEND_SENSOR_BMP| 数据 | 数据 | 保留 | | | | 'V','L','D','P' | | 长度 | 校验字 | | 16位CRC | | |-------------------------------------------------------------------------------------------|-----------|---------------| |-----------------------------------------------------------------------------------------------------------------------| 3. 上位机收到下位机的回复命令后,根据信号配置情况,配置需要显示的信号名称 这个过程只需要开机读取一次即可(下位机开机后不会再变化)。 */ /* 读取传感器信号的工作流程 1. 上位机发送 UCMD_GET_SENSORS 命令, 命令格式如下: |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|-----------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | |-------------------|---------------------|-----------------|-------------------------------|-----------| | 固定序列如下 | 数据包ID | 回复形式 | 保留 | B4--B13的 | | |---------------------|-----------------|-------------------------------| | | 'F','L','D','P' | UCMD_GET_SENSORS | | | 16位CRC | |-------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------| 2. 下位机收到后,根据回复形式,单次或多次回复 DCMD_SEND_MC_PARAS 命令, 格式定义如下 |-----------------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------|-----------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |-------------------------------------------------------------------------------------------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | B16--Bn | |-------------------------------------------------------------------------------------------|-----------|---------------| | 固定序列如下 | | 附加 | 附加 | | B4--B13的 | 信号结构 | | | DCMD_SEND_SENSORS | 数据 | 数据 | 保留 | | | | 'V','L','D','P' | | 长度 | 校验字 | | 16位CRC | | |-------------------------------------------------------------------------------------------|-----------|---------------| |-----------------------------------------------------------------------------------------------------------------------| 3. 上位机收到下位机的回复命令后,根据信号刷新显示 */ // 回复形式定义 #define REV_TYPE_ONCE 0 // 单次回复;下位机收到命令后发送一次回复数据 #define REV_TYPE_BEGIN 1 // 多次回复;下位机收到命令后,会主动开始发送回复数据,直到被其他命令打断。 // 传感信号位定义,传感器信号位图和传感器信号的位定义相同 typedef struct { // 0 u8 bitmap[1024]; } __attribute__ ((packed)) SensorsBitmap; /* 发送文件工作流程 1. 上位机发送 UCMD_START_TRANS 命令, 命令格式如下: 读取参数工作流程 1. 上位机发送 UCMD_START_TRANS 命令, 命令格式如下: |-----------------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------|-----------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |-----------------------------------------------------------------------|-------|-----------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 | B11 | B12 B13 | B14 B15 | B16--Bn | |---------------------------------------------------------------|-------|-------|-----------|-----------|---------------| | 固定序列如下 | | 附加 | 附加数据 | | | | B4--B13的 | 文件 | | | UCMD_START_TRANS | 数据 | 校验字 | 文件 | 文件 | 文件ID | | 控制结构 | | 'V','L','D','P' | | 长度 | | 类型 | IDX | | 16位CRC | | |---------------------------------------------------|-----------|-------|-------|-----------|-----------|---------------| |-----------------------------------------------------------------------------------------------------------------------| (1) 文件类型在下面有定义,一般分为数据文件和升级文件 (2) 文件IDX是传输多个数据文件时的索引号 (3) 文件ID是文件传输中的标识,在此次传输中,可以作为该文件的代号 (4) 文件传输控制结构是文件头,标识了文件的所有属性,参考 DataFileHead 结构 2. 下位机收到后,准备好接收数据 3. 上位机发送 UCMD_GET_TRANS_RESULT 命令, 命令格式如下: |---------------------------------------------------------------------------------------------------------| |---------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|-------------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | |-------------------|-----------------------|-------------------|-----------------------------|-----------| | 固定序列如下 | 数据包ID | 文件ID | 保留 | B4--B13的 | | |-----------------------|-------------------|-----------------------------| | | 'F','L','D','P' | UCMD_GET_TRANS_RESULT | 启动传输命令中的ID | | 16位CRC | |---------------------------------------------------------------------------------------------------------| |---------------------------------------------------------------------------------------------------------| 4. 下位机收到 UCMD_GET_TRANS_RESULT 后回复 DCMD_SEND_TRANS_RESULT 命令,命令格式如下 |---------------------------------------------------------------------------------------------------------------------------| |----------------------------------------------------------------------------------------------|------------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |----------------------------------------------------------------------------------------------|------------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 | B13 | B14 B15 | B16--Bn | |----------------------------------------------------------------------------------------------|------------|---------------| | 固定序列如下 | | 附加 | 附加 | | 传输 | 传输 | B4--B13的 | 结果位图 | | | DCMD_SEND_TRANS_RESULT | 数据 | 数据 | 文件ID | 有效 | 结果 | | | | 'V','L','D','P' | | 长度 | 校验字 | | 标志 | | 16位CRC | | |----------------------------------------------------------------------------------------------|------------|---------------| |---------------------------------------------------------------------------------------------------------------------------| (1) 文件ID是 标识 那一个文件的传输命令,返回当前文件传输控制中的ID (2) 传输有效标志 标识 是否收到过启动文件传输的命令。 (3) 传输结果 标识 文件传输处于的阶段 (4) 结果位图 标识 传输文件块的完整性,每个位表示一个数据包 5. 上位机收到 DCMD_SEND_TRANS_RESULT 命令后,根据 传输有效标志 和 传输结果来决定下一步的动作。 (1) 如果收到 TRANS_NOT_BEG, 说明下位机没有收到 UCMD_START_TRANS 命令,上位机需要重新发送 UCMD_START_TRANS 命令。 (2) 如果收到 TRANS_READY, 说明下位机已经正确接收到 UCMD_START_TRANS 命令,可以开始传输文件内容。 (3) 如果收到 TRANS_DOING, 说明下位机已经开始接收 UCMD_TRANS_FILE_DATA 命令,但是还没有完成数据的接收。 (4) 如果收到 TRANS_DONE, 说明下位机 已经 接收完成文件的所有数据。 6. 上位机在确认下位机能够接收文件数据后,通过发送UCMD_TRANS_FILE_DATA来发送文件内容。可以按照文件包的顺序发送,也可以乱序发送。 7. 上位机在发送完所有数据包后,需要发送UCMD_GET_TRANS_RESULT 命令来查询下位机的接收情况。也可以在传输过程中发送该命令查询传输结果 8. 上位机收到 DCMD_SEND_TRANS_RESULT 命令后, (1) 如果收到 TRANS_DONE, 并且位图中所有的数据包标志位都正确,说明下位机 已经 接收完成文件的所有数据。 (2) 如果收到 TRANS_DOING, 说明在传输数据的过程中有数据包丢失的情况,接收结果位图中标识了有那些数据包没有接收到,上位机需要把没有收到的数据包重新传输。 9. 重复步骤 6--8, 直到发送成功。 */ // 传输文件类型 #define FILE_TYPE_DAT 0x00 // 数据文件 #define FILE_TYPE_PGM 0x02 // 升级文件 #define FILE_TYPE_BOARD 0x03 // 外围板文件 #define FILE_TYPE_FRAME 0x04 // 边框刺绣文件 // 文件控制结构 // 文件传输控制结构 #define LEN_RSV_BMP 1024 // 位图大小 #define MAX_FILE_SIZE (1024*1024*16) // 最大文件字节数 按位图大小设定 typedef struct { int transphase; int filetransing; int waitcount; u8 transActive; // 传输结构有效 u8 transflag; // 接收进度标志 = 0, 接收未开始; = 1, 正在接收; = 2,接收完成。 u8 fileType; // 文件类型 u8 fileIdx; // 为文件编号,最多支持16个文件 u16 fileId; // 文件ID u16 packetSize; // 包的大小 u32 packetNum; // 包的个数 DataDs16FileHead * pFileHead; AppFileHead * pAppHead; BoardFileHead * pBoardHead; u8 * pDatBuff; u16 lenBmp; // 位图有效长度 u8 rsvBitmap[LEN_RSV_BMP]; // 文件接收进度标志位图 }FileTransCtrl; // 传输有效标志定义 #define TRANS_NONE 0x00 // 无效 #define TRANS_ACTIVE 0x5A // 有效 // 传输结果代码定义 #define TRANS_NOT_BEG 0x00 // 没有收到启动命令 #define TRANS_READY 0x01 // 准备好接收 #define TRANS_DOING 0x02 // 正在接收 #define TRANS_DONE 0x03 // 接收完成 #define TRANS_REQUEST 0x04// 请求传输模式 /* 发送文件参数工作流程 1. 上位机发送 UCMD_SET_FILE_PARAS 命令,定义如下 |---------------------------------------------------------------------------------------------------------------------------| |-----------------------------------------------------------------------------------------------|-----------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |---------------------------------------------------------------------------|-------|-----------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 | B11 | B12 B13 | B14 B15 | B16--Bn | |-------------------------------------------------------|-----------|-------|-------|-----------|-----------|---------------| | 固定序列如下 | | 附加 | 附加数据 | | | | B4--B13的 | 文件参数 | | | UCMD_SET_FILE_PARAS | 数据 | 校验字 | 文件 | 文件 | 文件ID | | 结构 | | 'V','L','D','P' | | 长度 | | 类型 | IDX | | 16位CRC | | |--------------------------------------------|----------|-----------|-------|-------|-----------|-----------|---------------| |---------------------------------------------------------------------------------------------------------------------------| (1) 文件类型为数据文件,暂时不支持别的选项 (2) 文件IDX是文件的索引号(根据之前文件传输中的文件的IDX) (3) 文件ID是文件的代号(根据之前文件传输中的文件的代号) (4) 文件执行控制结构 参考 DataFilePara 结构 2. 下位机收到命令后,按照 DataFilePara 结构中的参数设置文件相关参数。 */ // 设置执行进度 /* 设置执行进度工作流程 1. 上位机发送 UCMD_SET_EXEC_PROGRESS 命令,定义如下 |---------------------------------------------------------------------------------------------------------------------------| |-----------------------------------------------------------------------------------------------|-----------|---------------| | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | |---------------------------------------------------------------------------|-------|-----------|-----------|---------------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 | B11 | B12 B13 | B14 B15 | B16--Bn | |-------------------------------------------------------|-----------|-------|-------|-----------|-----------|---------------| | 固定序列如下 | | 附加 | 附加数据 | | | | B4--B13的 | 文件执行 | | | UCMD_SET_EXEC_PROGRESS | 数据 | 校验字 | 文件 | 文件 | 文件ID | | 控制结构 | | 'V','L','D','P' | | 长度 | | 类型 | IDX | | 16位CRC | | |--------------------------------------------|----------|-----------|-------|-------|-----------|-----------|---------------| |---------------------------------------------------------------------------------------------------------------------------| (1) 文件类型为数据文件,暂时不支持别的选项 (2) 文件IDX是文件的索引号(根据之前文件传输中的文件的IDX) (3) 文件ID是文件的代号(根据之前文件传输中的文件的代号) (4) 文件执行控制结构 参考 FileExecPara 结构 2. 下位机收到命令后,按照 FileExecPara 结构中的参数设置,改变下位机的执行流程。 */ /* 设置默认参数工作流程 1. 上位机发送 UCMD_SET_DEF_PARA 命令,定义如下 |-------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|-----------------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | |-------------------|-----------------------|-------------------|---------------------------------|-----------| | 固定序列如下 | 数据包ID | 保留 | 控制参数1 | 控制参数2 | 控制参数3 | B4--B13的 | | |-----------------------|-------------------|---------------------------------| | | 'F','L','D','P' | UCMD_SET_DEF_PARA | | | | | 16位CRC | |-------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------------| 2. 下位机收到命令后,按照 恢复下位机参数为默认的参数。 */ // 手动控制命令 /* 手动控制工作流程 1. 上位机发送命令 UCMD_ACT_BYHAND 定义如下 |-------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|-----------------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | |-------------------|-----------------------|-------------------|---------------------------------|-----------| | 固定序列如下 | 数据包ID | 控制动作代码 | 控制参数1 | 控制参数2 | 控制参数3 | B4--B13的 | | |-----------------------|-------------------|---------------------------------| | | 'F','L','D','P' | UCMD_ACT_BYHAND | | | | | 16位CRC | |-------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------------| 控制动作代码 以及参数1,2,3 见下面定义 2. 下位机收到该命令后,执行相应的动作 */ // 控制动作定义 #define MOTO_TO_ZERO 0x0001 // 电机归零(辅助调试的功能,无安全保护和逻辑关系) #define MOVE_BY_HAND 0x0002 // 电机手动移动(辅助调试的功能,无安全保护和逻辑关系) #define OUTPUT_CTRL 0x0003 // 输出控制(辅助调试的功能,无安全保护和逻辑关系) #define MOTO_EN_CTRL 0x0004 // 电机使能控制(辅助调试的功能,无安全保护和逻辑关系) #define MANUAL_ACTION 0x0005 // 手动动作功能(日常使用功能,有安全保护和逻辑时序关系) #define TEST_OUTPUT 0x0006 // 测试输出OUTPUT端口(obj输出端口 1~26:主板output1~26 101~356:扩展板output1~256) #define TEST_THREADBK 0x0007 // 测试断线检测 #define TEST_LOCK 0x0008 // 测试锁头电机 #define TEST_HOOK 0x0009 // 测试勾刀电机 #define TEST_EMB_FOOT 0x0105 // 测试独立压脚 // 归零和手动移动和电机使能的 控制参数1 定义 #define MT_LX 0x0001 // X向移动电机 #define MT_LY 0x0002 // Y向移动电机 #define MT_LM 0x0003 // 主轴电机 #define MT_LF 0x0007 // 压脚电机 #define MT_LEM 0x0020 // 平绣主轴 #define MT_LTM 0x0021 // 毛巾主轴 #define MT_LTMM 0x0022 // 毛巾M轴 #define MT_LRM 0x0023 // 毛巾打环轴 #define MT_LCM2 0x0010 // 缠绕主轴 #define MT_LCMM 0x0011 // 缠绕M轴 #define MT_LCF 0x0012 // 缠绕压脚 #define MT_LCZ 0x0013 // 缠绕锯齿 #define EMB_ENTER_CLOTH 0x0029 // 进入匹绣 #define EMB_EXIT_CLOTH 0x002A // 退出匹绣 #define XY_AUTO_SOFTLIMIT 0x002B // 自动定软限位 #define CHECK_N5_CANBUS 0x002C // N5A总线检测 #define MT_ECM 0x0040 // 换色电机 #define MT_LFF 0x0041 // 平绣压脚电机 #define OT_EMB_FOOT 0x0048 // 平绣压脚 #define LEFT_SEQUIN_PUSH 0x0071 // 左亮片拨片 #define LEFT_SEQUIN_CHANGE_COLOR 0x0073 // 左亮片换色 #define RIGHT_SEQUIN_PUSH 0x0076 // 右亮片拨片 #define RIGHT_SEQUIN_CHANGE_COLOR 0x0078 // 右亮片换色 #define MT_SC1 0x0081 // 左亮片换色电机 #define MT_SC2 0x0082 // 右亮片换色电机 // 手动移动的 控制参数2 定义 #define MT_MOVE_DIR_STOP 0x0000 // 停止转动 #define MT_MOVE_DIR_POSI 0x0001 // 正向移动(x向右,y向上,升降向上) #define MT_MOVE_DIR_NEGA 0x0002 // 反向移动(x向左,y向下,升降向下) // 电机使能的 控制参数2 定义 #define MT_SERVO_ON 0x0001 // 电机使能开 #define MT_SERVO_OFF 0x0002 // 电机使能关 // 通用输出控制参数1代码定义 #define OT_LOOSE_THREAD 0x0001 // 松紧线 #define OT_DCUT_THREAD 0x0004 // 下剪刀剪线 #define OT_OIL_R 0x00EB // 加油2 #define OT_FRAME 0x0005 // 气框 #define OT_OIL 0x0006 // 加油 #define OT_EMB_CUT 0x0040 // 平绣剪刀 #define OT_CHEN_CUT 0x0020 // 毛巾剪刀 #define OT_CHEN_DUST 0x0021// 毛巾除尘1 #define OT_CHEN_DUST2 0x0024 // 毛巾除尘2 #define OT_CHEN_DUST3 0x0025 // 毛巾除尘3 #define OT_CHEN_OIL 0x0022 // 毛巾加油 #define OT_CHEN_RELAX 0x0023 // 毛巾剪刀放松(二代叫顶线) #define CHENILLE_CUT_ZERO 0x0048 // 毛巾剪刀找零 #define OT_EMB_PUSH 0x0041 // 平绣扣线 #define OT_EMB_CLIP 0x0042 // 平绣夹面线 #define OT_EMB_OIL 0x0043 // 平绣加油 #define OT_EMB_HOOK 0x0044 // 平绣勾刀 #define OT_EMB_LOCK 0x0045// 平绣锁头 #define OT_TEST_HOOK 0x0046 // 勾刀测试 #define OT_LASER_LIGHT 0x0047 // 激光定位灯 #define OT_LASER_CTRL 0x00F0 // 激光控制 #define OT_LASER_BLOW 0x00F1 // 激光吹气 #define OT_COIL_LOCK 0x0010 // 缠绕锁头 #define OT_COIL_CUT 0x0011 // 缠绕剪刀 #define OT_COIL_PUSH 0x0012 // 缠绕扣线 #define OT_COIL_OIL 0x0013 // 缠绕加油 #define OT_COIL_FOOT 0x0014 // 缠绕压脚 #define OT_COIL_ZIGZAG 0x0015 // 缠绕锯齿 //绣花机带亮片 #define OT_LEFT_SEQUIN_CUT 0x0071 // 左亮片切片 #define OT_LEFT_SEQUIN_LIFT 0x0072 // 左亮片升降 #define OT_RIGHT_SEQUIN_CUT 0x0073 // 右亮片切片 #define OT_RIGHT_SEQUIN_LIFT 0x0074 // 右亮片升降 #define OT_LEFT_BEAD_LIFT 0x0075 // 左散珠升降 #define OT_RIGHT_BEAD_LIFT 0x0076 // 右散珠升降 #define OT_BEAD_FEED 0x0077 // 散珠上料 #define OT_TRACKROPE_LIFT 0x0079 // 跟踪绳绣升降 // 绣花机上下料机构 #define OT_FEED_CLIP 0x0091 // 限位夹紧块 #define OT_FEED_MOTO1 0x0092 // 进料电机1 #define OT_FEED_MOTO2 0x0093 // 进料电机2 #define OT_FEED_MOTO3 0x0094 // 进料电机3 #define OT_FEED_MOTO4 0x0095 // 进料电机4 #define OT_FEED_MOTO5 0x0096 // 进料电机5 #define OT_FEED_MOTO6 0x0097 // 进料电机6 #define OT_RETU_MOTO1 0x0098 // 退料电机1 #define OT_RETU_MOTO2 0x0099 // 退料电机2 #define OT_RETU_MOTO3 0x009A// 退料电机3 #define OT_RETU_MOTO4 0x009B // 退料电机4 #define OT_RETU_MOTO5 0x009C// 退料电机5 #define OT_RETU_MOTO6 0x009D// 退料电机6 // 绣花机带简易毛巾功能 #define OT_EASYCHENILLE_LIFT 0x0078 //简易毛巾升降 // 报警状态输出控制 #define OT_ALM_RED_LIGHT 0x0020 // 报警红灯 #define OT_ALM_GREEN_LIGHT 0x0021 // 报警绿灯 #define OT_ALM_YELLO_LIGHT 0x0022 // 报警黄灯 #define OT_ALM_BEE 0x0023 // 报警蜂鸣器 // 输出参数2 #define OT_STOP 0x0000 // 停止 #define UP_OPEN_ON 0x0001 // 上升、打开、放松、伸出 #define DOWN_CLOSE_OFF 0x0002 // 下降、关闭、加紧、收回 #define OT_ACTION 0x0003 // 动作 // 手动动作功能的 代码(控制参数1) 定义 #define XY_MOVE_STOP 0x0000 // XY停止 #define SET_WORK_AREA 0x0001 // 设置可工作区域 手动控制功能,para2是机头 para3选X- X+ Y- Y+,分别对应1234 #define COIL_CUT_THREAD 0x0002 // 缠绕剪线,主轴动作,剪线 #define COIL_CUT_ONOFF 0x0003 // 缠绕剪刀开合,只剪刀开合动作,也叫做下剪线 #define COIL_SPINDLE_TO_ANGLE 0x0004 // 缠绕主轴去指定角度 #define COIL_MS_JOG 0x0005 // 缠绕点动 #define COIL_M_TO_ANGLE 0x0006 // 缠绕M轴去指定角度 #define SEW_LOCLIP_TRD 0x0015 // 松紧线(根据状态松线或紧线) #define XY_MOVE_LEFT 0x0016 // X左移 #define XY_MOVE_RIGHT 0x0017 // X右移 #define XY_MOVE_FRONT 0x0018 // Y前移 #define XY_MOVE_BACK 0x0019 // Y后移 #define RESET_REPEAT_NUM 0x001A//重置反复次数 #define EMB_MS_JOG 0x0020// 平绣点动 #define EMB_SW_COLOR 0x0021 // 平绣换色 #define EMB_MS_RUN 0x0022// 平绣主轴研车 #define EMB_CUT_THREAD 0x0023 // 平绣剪线 #define EMB_CUT_ONOFF 0x0024 // 平绣剪刀开合 #define EMB_HOOK_THREAD 0x0025 // 平绣勾线 #define EMB_SPINDLE_TO_ANGLE 0x0026 // 平绣主轴去指定角度 #define EMB_TEST_LOCKMOTO 0x0027 // 平绣锁头电机测试 #define EMB_NEEDLE_POS 0x0028 // 针杆定位 #define TRACE_OFST 0x002D // 线迹偏移 #define RESET_TRAOFST 0x002E // 线迹偏移数据复位 #define CLEAN_CURTRAOFST 0x002F // 清除当前索引的线迹偏移数据 #define CHANGE_WORK_HEAD 0x0037 // 切换机头(para==1缝纫,para==2冲孔;para==3绣花) #define AUTO_SET_RANGE 0x0038 // 自动定工作范围 #define ALL_MOVE_STOP 0x0040 // 移动停止 #define CHENILLE_HOIST_CTRL 0x0040 // 毛巾提升电机控制 #define CHENILLE_CUT_THREAD 0x0041 // 毛巾剪线 #define CHENILLE_ELASTIC_CTRL 0x0042 // 毛巾松紧线控制 #define CHENILLE_SW_COLOR 0x0043 // 毛巾换色 #define CHENILLE_CUT_ONOFF 0x0044 // 毛巾剪刀开合 #define CHENILLE_MS_JOG 0x0045 // 毛巾点动 #define CHENILLE_SPINDLE_TO_ANGLE 0x0046 // 毛巾主轴去指定角度 #define CHENILLE_M_TO_ANGLE 0x0047 // 毛巾M轴去指定角度 #define CHENILLE_LINE_UP 0x0049 // 毛巾拉线 #define CHENILLE_SW_DEBUG 0x004A// 毛巾换色调试 #define TEST_ADC_POTVAL 0x0102 // 测试电位器 #define TEST_EMB_SPINDLE_RATIO 0x0103 // 测试平绣主轴齿轮比 #define TEST_CHEN_SPINDLE_RATIO 0x0104// 测试毛巾主轴齿轮比 #define TEST_EMB_FOOT 0x0105 // 测试独立压脚 #define TEST_FLAT_ECD_WIDTH 0x0106 // 测试平绣主轴编码器宽度 // 机器工作命令 /* 工作命令执行流程 1. 上位机发送命令 UCMD_MC_WORK 定义如下 |--------------------------------------------------------------------------------------------------------| |--------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|-------------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 | B12 B13 | B14 B15 | |-------------------|-----------------------|-------------------|-----------------------------|-----------| | 固定序列如下 | 数据包ID | 工作控制功能 | 控制参数1 | 控制参数2 | B4--B13的 | | |-----------------------|-------------------|------------------------------| | | 'F','L','D','P' | UCMD_MC_WORK | | | | 16位CRC | |---------------------------------------------------------------------------------------------------------| |---------------------------------------------------------------------------------------------------------| 工作控制功能代码 以及参数1,2见下面定义 2. 下位机收到该命令后,执行相应的动作 */ // 工作控制功能 #define WORK_START 0x0001 // 启动工作 #define WORK_PAUSE 0x0002 // 暂停工作 #define WORK_FINISH 0x0003 // 结束工作(流程复位) #define WORK_FIND_ZERO 0x0004 // 自动找零 #define WORK_GOTO_START 0x0005 // 回起点 #define WORK_GOTO_ANCHOR 0x0006 // 回定位点 #define WORK_GOTO_OFFSET 0x0007 // 回偏移点 #define WORK_CHECK_FRAME 0x0008 // 边框检查 #define WORK_CUT_FRAME 0x0009 // 边框切割 #define WORK_FAST_JUMP 0x000B // 快速进退 #define WORK_GOTO_WKPOS 0x000C // 回工作点 #define WORK_GOTO_FEEDT 0x000D // 回穿线点 #define WORK_GOTO_FINISH 0x0011 // 回结束点 #define WORK_GOTO_ZERO 0x0012 // 回零点(框架归零) #define WORK_MS_JOG 0x0013 // 主轴点动 #define WORK_FIX_MVFRAME 0x0017 // 定量移框 #define RESET_REPEAT_NUM 0x001A // 重置反复次数 #define WORK_RPM_CHG 0x0020 // 速度改变 #define WORK_FILE_IDX_CHG 0x0021 // 文件序号改变 #define WORK_SIMULATION_FRAME 0x0026 // 空走边框 #define WORK_GOTO_FEED 0x0027 // 回上料点 #define WORK_SET_OFFSET 0x0028 // 定偏移点 #define WORK_SET_FEED 0x0029 // 定上料点 #define WORK_ACT_OIL 0x0050 // 工作中加油 #define RESET_SHUT_COUNTER 0x0067 // 梭盘计数复位 #define AUTO_CHANGE_ONE_SHUT 0x0060 // 自动换一个梭 /* 移动到位置 命令 执行流程 1. 上位机发送命令 UCMD_MOVE_TO 定义如下 |----------------------------------------------------------------------------------------------| |---------------------------------------------------------------------------------- -----------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|---------------------------------------------------------------|----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 B8 B9 | B10 B11 B12 B13 | B14 B15 | |-------------------|-----------------------|-------------------|-------------------|----------| | 固定序列如下 | 数据包ID | 坐标X | 坐标Y | B4--B13的 | | |-----------------------|-------------------|-------------------| 16位CRC | | 'F','L','D','P' | UCMD_MOVE_TO | | | | |----------------------------------------------------------------------------------------------| |----------------------------------------------------------------------------------------------| 2. 下位机收到该命令后,移动 XY 到响应坐标位置 */ // 下位机升级 /* 移动到位置 命令 执行流程 1. 上位机发送升级文件到下位机,参考文件发送的流程。 2. 如果升级文件发送成功,那么接下来上位机发送 UCMD_MC_UPDATE 命令,定义如下 |----------------------------------------------------------------------------------------------------------| |----------------------------------------------------------------------------------------------------------| | 数据识别序列 | 数据内容 | 校验字 | |-------------------|--------------------------------------------------------------------------|-----------| | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | |-------------------|-----------------------|-------------------|------------------------------|-----------| | 固定序列如下 | 数据包ID | 升级对象 | 升级文件ID | 升级文件校验 | B4--B13的 | | |-----------------------|-------------------|------------------------------| 16位CRC | | 'F','L','D','P' | UCMD_MC_UPDATE | | | | | |----------------------------------------------------------------------------------------------------------| |----------------------------------------------------------------------------------------------------------| (1) 升级对象,选择要升级的板卡,暂时只支持主板升级 (2) 升级文件ID,步骤1中发送的升级文件的ID (3) 升级文件校验,步骤1中发送的升级文件的校验值(CRC32) 3. 下位机收到该命令后,检测升级文件是否正确,如果正确那么开始执行升级步骤,升级完成后会自动重启。 */ // 命令结构定义 typedef union { DataPacket packet; struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 toggle; u8 rev[6]; u16 crc; } __attribute__ ((packed)) getMcInfo; // UCMD_GET_MC_INFO 读取机器信息 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 toggle; u8 rev[6]; u16 crc; } __attribute__ ((packed)) getMcStatus; // UCMD_GET_MC_STATUS 读取机器状态 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 paraType; u16 paraId; u8 rev[4]; u16 crc; } __attribute__ ((packed)) getMcParas; // UCMD_GET_MC_PARAS 读取机器参数 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 fromObj; u32 begAddr; u16 rdSize; u16 crc; } __attribute__ ((packed)) getMemData; // UCMD_GET_MEM_DATA 读取内存数据 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 backType; u8 rev[6]; u16 crc; } __attribute__ ((packed)) getSensors; // UCMD_GET_SENSORS 读取传感信号 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u8 fileType; u8 fileIdx; u8 rev[6]; u16 crc; } __attribute__ ((packed)) getFileInfo; // UCMD_GET_FILE_INFO 读取文件信息 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 fileId; u8 rev[6]; u16 crc; } __attribute__ ((packed)) getTransResult; // UCMD_GET_TRANS_RESULT 读取传输结果 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u8 rev[8]; u16 crc; } __attribute__ ((packed)) getSensorBmp; // UCMD_GET_SENSOR_BMP 读取传感信号 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u16 cfgItem; u8 rev[2]; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) setMcConfig; // UCMD_SET_MC_CONFIG 设置机器配置 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 staCode; u16 para; u8 rev[4]; u16 crc; } __attribute__ ((packed)) setMcStatus; // UCMD_SET_MC_STATUS 设置机器状态 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u16 paraType; u16 paraId; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) setParas; // UCMD_SET_MC_PARAS 设置下位机参数 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u8 setObj; u8 setWord; u32 setAddr; u16 setData; u16 crc; } __attribute__ ((packed)) setMemData; // UCMD_SET_MEM_DATA 设置内存数据 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 fileType; u8 fileIdx; u16 fileId; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) setFileParas; // UCMD_SET_FILE_PARAS 设置文件参数 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 fileType; u8 fileIdx; u16 fileId; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) setExecProgress; // UCMD_SET_EXEC_PROGRESS 设置进度命令 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 rev[4]; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) setInstallment; // UCMD_SET_INSTALLMENT 设置分期密码 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u8 type; u32 time; u8 rev[3]; u16 crc; } __attribute__ ((packed)) setElapsedTime; // UCMD_SET_ELAPSED_TIME 设置经过的时间 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u8 id; u8 nodeType; u8 rev[6]; u16 crc; } __attribute__ ((packed)) setDefParas; // UCMD_SET_DEF_PARA 设置默认参数 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 actCode; u16 para1; u16 para2; u16 para3; u16 crc; } __attribute__ ((packed)) actByhand; // UCMD_ACT_BYHAND 手动动作功能 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 workCode; u32 para1; u16 para2; u16 crc; } __attribute__ ((packed)) mcWork; // UCMD_MC_WORK 机器工作命令 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; s32 posx; s32 posy; u16 crc; } __attribute__ ((packed)) moveFrameTo; // UCMD_MOVE_TO 移动框架到位置命令 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 fileType; u8 fileIdx; u16 fileId; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) startTrans; // UCMD_START_TRANS 启动文件传输 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u16 pktIdx; u16 fileId; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) transFileData; // UCMD_TRANS_FILE_DATA 文件数据传输 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u32 fileIdxMap; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) setFilesList; // UCMD_SET_FILE_LIST 设置文件列表 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u8 rev[8]; u16 crc; } __attribute__ ((packed)) getFilesList; // UCMD_GET_FILE_LIST 读取文件列表 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 upObj; u16 upFileID; u32 checksum; u16 crc; } __attribute__ ((packed)) mcUpdate; // UCMD_MC_UPDATE 系统升级 //---------------------------------- // 下位机发送命令 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u8 fileType; u8 fileIdx; u16 fileId; u32 datBlockIdx; // 数据包索引(每个包1024字节) u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) dRequestDatBlock; // DCMD_REQUEST_DAT 请求文件数据 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u16 toggle; u8 rev[2]; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) dSendMcInfo; // DCMD_SEND_MC_INFO 发送机器信息 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 rev[4]; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) sendDebugInfo; // 发送调试信息 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u16 toggle; u8 rev[2]; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) dSendMcStatus; // DCMD_SEND_MC_STATUS 发送机器状态 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u16 paraType; u16 paraId; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) dSendMcParas; // DCMD_SEND_MC_PARAS 发送机器参数 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u32 begAddr; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) dSendMemData; // DCMD_SEND_MEM_DATA 发送内存数据 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 rev[4]; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) dSendSensors; // DCMD_SEND_SENSORS 发送传感信号 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 fileType; u8 fileIdx; u8 rev[2]; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) dSendFileInfo; // DCMD_SEND_FILE_INFO 发送文件信息 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u16 fileId; u8 active; u8 result; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) dSendTransResult; // DCMD_SEND_TRANS_RESULT 发送传输结果 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 rev[4]; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) dSendSensorBmp; // DCMD_SEND_SENSOR_BMP 发送传输结果 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 fileType; u8 fileIdx; u16 fileId; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) setMacKey; // setMacKey struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u8 protocolType; // 协议类型 u8 nodeType; // 遍历节点类型 u8 traNum; // 遍历个数 u8 nodeId; // 遍历起始节点ID u8 rev[4]; u16 crc; } __attribute__ ((packed)) traverse; // 遍历命令 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u8 rev[8]; u16 crc; } __attribute__ ((packed)) rdBoardVer; // 读取外围板程序版本 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u8 protocolType; // 协议类型 u8 nodeId; // 节点ID u8 nodeType; //用于区分缠绕毛巾平绣 u8 rev[5]; u16 crc; } __attribute__ ((packed)) updateBoard; // 升级外围板 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 protocolType; u8 nodeId; //节点ID u8 nodeType; //节点类型 -rq u8 rev; u16 crc; u32 ver[8]; u8 exData[MAX_EXDP_LEN-32]; } __attribute__ ((packed)) sendBoardVer; // 发送外围板程序版本 struct { u8 sync[DP_SYNC_LEN]; u16 cmdCode; u16 exLen; u16 exCrc; u8 nodeId; u8 nodeType; // 节点类型 u8 rev[2]; u16 crc; u8 exData[MAX_EXDP_LEN]; } __attribute__ ((packed)) boardPara; // 发送外围板非易失性参数 }OperPacket; #pragma pack(1)//设定为1字节对齐 #endif