EmbHMI/machine/comm/protocol.h
2024-02-06 14:27:07 +08:00

1911 lines
89 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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片外SRAMNAND 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片外SRAMNAND 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 |
|-------------------------------------------------------------------------------------------------------------|
|-------------------------------------------------------------------------------------------------------------|
控制动作代码 以及参数123 见下面定义
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_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 |
|---------------------------------------------------------------------------------------------------------|
|---------------------------------------------------------------------------------------------------------|
工作控制功能代码 以及参数12见下面定义
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