PunchHMI/machine/comm/protocol.h
2024-03-01 14:00:47 +08:00

1931 lines
89 KiB
C
Raw Permalink 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_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_HEADDEF_PARA 0x010A // 设置机头板默认参数
#define UCMD_SET_HEAD_PARA 0x010B // 设置机头板参数
#define UCMD_SET_MVANGDEF_PARA 0x010D // 设置动框角度默认参数
#define UCMD_GET_HEAD_PARA 0x000B // 读取机头板参数
#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_BOARDVER 0x800A // 发送外围板程序版本
#define DCMD_SEND_HEADPARA 0x800B // 发送机头板参数
#define DCMD_SEND_LOTDATA 0x800D // 发送物联网数据
#define DCMD_SEND_DEBUG_INFO 0x8010 // 调试信息发送
// 三、命令详解
/*
工作流程
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; // 主轴零位状态
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 48
#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
{
HeadInfo headInfo[MAX_SUPPORT_N5]; //最大支持32个机头
}__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 调试输出中标志. = 0初始状态。= 1上位机正在测试输出信号,不响应程序内输出控制
// .16 等待标志. = 0初始状态。= 1等待外设就绪
// .17 换梭标志0初始状态1换梭中
// .18 软件遍历功能标志. =1,不允许遍历
// .19 取模板框状态
// .20 放模板框状态
// .21 匹绣, 0:退出匹绣,主轴归零 1:进入匹绣,扎针,允许移框
// .22 断线检测, 0退出断线检测状态 1进入断线检测状态
// .23 喷墨主板文件有效标志, 0:无效, 1:有效
// 1
u32 errorCode; // 错误代码
s32 fileIdx; // 文件序号
u32 dataIdx; // 数据索引
u32 runSpeed; // 运动速度
u32 runAction; // 执行动作代码 *
u32 runSteps; // 当前执行步骤 *
u32 outCounter; // 产量计数
// 8
s32 xPos; // x电机当前坐标
s32 yPos; // y电机当前坐标
u32 tempdat1[3]; // 自定义状态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 msAnlge; // 主轴角度
u32 potVal; // 电位器值
// 26
u32 laserIntensity; // 激光强度(距离传感器值(脚垫包边机))
// 27
s32 workableTimer; // 可工作时间计数器(分钟)
// 28
u32 embNeedleNum; // 刺绣针数
// 29
u32 workTimeRecord; // 单片工作时间
u32 tempdat3[32-30];
} __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 // XY坐标系统错误
#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_SPT_NCE 0x002B // 小台板未关闭
#define ERR_LIGHTCURTAINS1 0x002C // 光幕1介入
#define ERR_LIGHTCURTAINS2 0x002D // 光幕2介入
#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_HK_NOT_ZERO 0x0051 // 旋梭不在零位
#define ERR_MS_NOT_SYNC 0x0052 // 针梭不同步
#define ERR_RO_NOT_SYNC 0x0053 // 旋转不同步
#define ERR_CUTTER_NOT_POS 0x0054 // 剪刀不在回位
#define ERR_UPER_TBREAK 0x0058 // 面线断线
#define ERR_BOBBIN_TBREAK 0x0059 // 底线断线
#define ERR_NEEDLE_NOT_HIGH 0x005A // 机针不在高位
#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_PUNCH_NOT_ZERO 0x0080 // 冲孔主轴不在零位
#define ERR_R_LIT_POSI 0x0081 // 旋转正向限位
#define ERR_R_LIT_NEGA 0x0082 // 旋转反向限位
#define ERR_PUNCH2_NOT_ZERO 0x0083 // 冲孔2主轴不在零位
#define ERR_CUTTER_NOT_ZERO 0x0084 // 裁刀主轴不在零位
#define ERR_XY_NOT_WP 0x0085 // XY不在工作位置
#define ERR_HEAD_NOT_POS 0x0086 // 机头不到位
#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_LIFT_OUT_RANGE 0x0095 // 机头升降位置越界
#define ERR_ROT_OUT_RANGE 0x0096 // 旋转位置越界
#define ERR_ROT_ECD_ERROR 0x0097 // 旋转编码器错误
#define ERR_LIFT_ULIMIT 0x0098 // 机头升降上限位
#define ERR_LIFT_DLIMIT 0x0099 // 机头升降下限位
#define ERR_LIFT_SYNC_ERR 0x009A // 机头升降同步错误
#define ERR_IN_NO_MAT 0x009B // 进料无物料
#define ERR_IN_MAT_ERR 0x009C // 进料物料检测异常
#define ERR_OUT_MAT_ERR 0x009D // 出料物料检测异常
#define ERR_NOTIN_SAFE_AREA 0x009E // 机头不在安全区域
#define ERR_EMB_NOT_ZERO 0x009F // 绣花主轴不在零位
#define ERR_EMB_SWND_TIMOUT 0x00A0 // 平绣换色超时
#define ERR_PUNCH_SWND_TIMOUT 0x00A1 // 冲孔换色超时
#define ERR_HD1W_LIT_POSI 0x00A2 // 机头1摆针正向限位
#define ERR_HD1W_LIT_NEGA 0x00A3 // 机头1摆针反向限位
#define ERR_HD2W_LIT_POSI 0x00A4 // 机头2摆针正向限位
#define ERR_HD2W_LIT_NEGA 0x00A5 // 机头2摆针反向限位
#define ERR_EMB_ND_ERR 0x00A6 // 平绣针位错误
#define ERR_PUNCH_ND_ERR 0x00A7 // 冲孔针位错误
#define ERR_UPER_TBREAK_A 0x00A8 // 机头A面线断线
#define ERR_UPER_TBREAK_B 0x00A9 // 机头B面线断线
#define ERR_HEAD_NOT_AT_GAP_A 0x00AA // 机头A面线断线
#define ERR_HEAD_NOT_AT_GAP_B 0x00AB // 机头B面线断线
#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_SCBE_ALM 0x00D1 // 散珠报警
#define ERR_SCBE_NO_MATERIAL 0x00D2 // 散珠缺料
#define ERR_HEAD_NUM 0x00D3 // 机头个数错误
#define ERR_READ_HEAD_PARA 0x00D4 // 读取机头板参数错误
#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_CHANGE_PNHPIN1 0x00F4 // 更换冲头1 lxs220607
#define ERR_CHANGE_PNHPIN2 0x00F5 // 更换冲头2
#define ERR_CHANGE_PNHPIN3 0x00F6 // 更换冲头3
#define ERR_CHANGE_PNHPIN4 0x00F7 // 更换冲头4
#define ERR_CHANGE_PNHPIN5 0x00F8 // 更换冲头5
#define ERR_CHANGE_PNHPIN6 0x00F9 // 更换冲头6
#define ERR_CHANGE_SEWND 0x00FA // 更换缝纫针
#define ERR_PUNCH3_NOT_ZERO 0x0232 // 冲孔3主轴不在零位
#define ERR_PUNCH4_NOT_ZERO 0x0233 // 冲孔4主轴不在零位
#define ERR_PUNCH_NOT_BACK 0x029F // 呼吸阀冲孔气缸不在高位
#define ERR_CMK_BTP 0x02DA // 呼吸阀冲孔上,异常
#define ERR_CMK_BBP 0x02DB // 呼吸阀冲孔下,异常
#define ERR_CMK_BPB 0x02DC // 呼吸阀冲孔下挡块伸缩,异常
#define ERR_INSTALLMENT_OK 0x0300 // 密码设置成功
#define ERR_INSTALLMENT_FAIL 0x0301 // 密码设置失败
#define ERR_MT_DRIVER_X 0x0601 // X电机驱动器报警
#define ERR_MT_DRIVER_Y 0x0602 // Y电机驱动器报警
#define ERR_MT_DRIVER_Y2 0x0603 // Y2电机驱动器报警
#define ERR_MT_DRIVER_U 0x0604 // 升降电机驱动器报警
#define ERR_MT_DRIVER_M 0x0605 // 主轴驱动器报警
#define ERR_MT_DRIVER_M2 0x0606 // 主轴2驱动器报警
#define ERR_MT_DRIVER_R 0x0607 // 旋转驱动器报警
#define ERR_MT_DRIVER_R2 0x0608 // 旋转2驱动器报警
#define ERR_CLR_BLK 0x0801 // 吸尘器阻塞
#define ERR_CLR_FULL 0x0802 // 吸尘器满料
#define ERR_OIL_AIR 0x0803 // 油泵压力异常
//机器状态判断
#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_EMB_FRAME_FINISH 0x0151 // 边框刺绣完成
#define STA_LINE_TBREAK 0x0152 // 断线停止
#define STA_AUTO_SOFTLIMIT 0x0153 // 自动定软限位完成
#define STA_SPINDLERATIO 0x0154 // 主轴齿轮比正常
// 设置机器状态
/*
工作流程
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 MVSTANG_PARA 0x06 // 起始动框角度
#define SEW_REVMCPARA_MACH 0x07 // 预留机器配置参数
#define SEW_REVMCPARA_WORK 0x08 // 预留机器工作参数
// 设置机器参数
/*
工作流程
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 MAX_EXDP_LEN // 位图大小
#define MAX_FILE_SIZE (LEN_RSV_BMP*MAX_EXDP_LEN*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// 测试断线检测
// 归零和手动移动和电机使能的 控制参数1 定义
#define MT_LX 0x0001 // X向移动电机
#define MT_LY 0x0002 // Y向移动电机
#define MT_LM 0x0003 // 升降(压胶机)// 主轴电机
#define MT_LN 0x0004 // 针电机
#define MT_LH 0x0005 // 梭电机
#define MT_LU 0x0006 // 升降电机
#define MT_LF 0x0007 // 压脚电机
#define MT_LR 0x0008 // 旋转电机
#define MT_LRU 0x0009 // 上旋转电机
#define MT_LRD 0x000A// 下旋转电机
#define MT_LPM 0x000B // 冲孔主轴
#define MT_LP2 0x000C // 冲孔2主轴
#define MT_LCM 0x000D// 裁刀主轴
#define MT_LU2 0x000E // 升降电机2
#define MT_LW 0x000F // 摆动电机
#define MT_LMS 0x0010 // 主轴
#define MT_PR1 0x0073 // 冲孔旋转电机1
#define MT_PR2 0x0074 // 冲孔旋转电机2
// 手动移动的 控制参数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_FOLLOW_EN 0x0002 // 随动允许
#define OT_UCUT_THREAD 0x0003 // 压脚 //上剪刀剪线
#define OT_DCUT_THREAD 0x0004 // 下剪刀剪线
#define OT_FRAME 0x0005 // 气框
#define OT_OIL 0x0006 // 加油
#define OT_LIGHT 0x0007 // 照明灯
#define OT_CUT_UP 0x0008 // 上剪线
#define OT_MID_FOOT 0x0009 // 中压脚
#define OT_LOOSE_UTRD2 0x000D// 松紧线2
#define OT_PUSH_BTRD 0x000A// 扣底线
#define OT_STAND_BTRD 0x000B // 顶底线
#define OT_CLIP_UTRD 0x000C // 夹面线
#define OT_LOOSE_UTRD2 0x000D// 松紧线2
#define OT_SEW_LIFT 0x000E // 缝纫机头升降
#define OT_PUNCH_LIFT 0x000F // 冲孔机头升降
#define OT_SEW_BLOW 0x0010 // 缝纫吹气
#define OT_PUNCH_BLOW 0x0011 // 冲孔吹气
#define OT_CLEANER 0x0012 // 吸尘器
#define OT_DCUT_THREAD_R 0x0013 // 右机头下剪刀剪线
#define OT_BIT_FOOT_R 0x0014 // 右机头大压脚
#define OT_MID_FOOT_R 0x0015 // 右机头中压脚
#define OT_PUSH_BTRD_R 0x0016 // 右机头扣底线
#define OT_STAND_BTRD_R 0x0017 // 右机头顶底线
#define OT_CLIP_UTRD_R 0x0018 // 右机头夹面线
#define OT_SEW_BLOW_R 0x0019 // 右机头缝纫吹气
#define OT_HEAD_L_CLUTH 0x001A// 左机头主轴离合
#define OT_HEAD_R_CLUTH 0x001B // 右机头主轴离合
#define OT_HEAD_R_LOOSE_THREAD 0x001C // 右机头松紧线
#define OT_HEAD_R_LOOSE_UTRD2 0x001D // 右机头松紧线2
#define OT_CUTTER_LIFT 0x001E // 切刀机头
#define OT_PRESS_KNOT 0x001F // 压枣控制
//#define OT_FRAME 0x0020// 气框开合
#define OT_FRAME_TEN 0x0021 // 气框拉伸
#define OT_FRAME_PRE 0x0022 // 气框压紧
#define OT_CLIP_EXTEND 0x0024 // 勾线动作 伸缩
#define OT_CLIP_EXTEND_R 0x0025 // 右机头勾线动作 伸缩
#define OT_CLIP_OPEN 0x0026 // 勾线动作 开合
#define OT_CLIP_OPEN_R 0x0027 // 右机头勾线动作 开合
#define OT_CUTDW_LIFT 0x0030 // 裁切机头下升降
#define OT_CUTUP_LIFT 0x0031 // 裁切机头上升降
#define OT_CUT_KNIFE 0x0032 // 切刀
#define OT_EMB_CUT 0x0040 // 平绣剪刀
#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_PUNCH_OIL 0x0050 // 冲孔加油
#define OT_PUNCH_LOCK 0x0051 // 冲孔锁头
#define OT_SAFE_DOOR1 0x0054 // 安全护栏1
#define OT_SAFE_DOOR2 0x0055 // 安全护栏2
#define OT_OIL_R 0x00EB // 加油2
//控制动作
#define MT_CU 0x0010 // 裁刀升降电机 ++
#define MT_LX2 0x0011 // X2向移动电机
#define MT_LY2 0x0012 // Y2向移动电机
#define MT_LM2 0x0013 // 主轴2电机
#define MT_LB 0x0014 // 传送带
#define MT_LPU 0x0015 // 压枣升降
#define MT_LIN 0x0016 // 进料电机
#define MT_LOT 0x0018 // 出料电机
#define MT_LHM 0x0019 // 横切移动电机
#define MT_LHX 0x001A // 横切旋刀电机
#define MT_LBQ 0x001B // 边切刀电机
#define MT_LJB 0x001C // 夹布移动电机
#define MT_LH2 0x001D // 梭电机2
#define MT_LN2 0x001E // 针电机2
#define MT_LEM 0x0020 // 平绣主轴
#define MT_LLSL 0x0021 // 左上料电机
#define MT_LRSL 0x0022 // 右上料电机
#define MT_LYZR 0x0023 // 零等待 右侧Y电机
#define MT_RTN 0x0026 // 退料电机
#define MT_LPS 0x0027 // 冲孔换色电机
#define MT_LPR 0x0028 // 冲孔旋转电机
#define MT_ECM 0x0040 //平绣换色电机
#define MT_LPS2 0x0045 // 冲孔换色电机
#define MT_LMA 0x0050 // 所有主轴电机
#define MT_LP3 0x0051 // 冲孔3主轴
#define MT_LP4 0x0052 // 冲孔4主轴
#define MT_EMN 0x0077 // 平绣针主轴
#define MT_EMH 0x0078 // 平绣梭主轴
// 输出参数2
#define OT_STOP 0x0000 // 停止
#define UP_OPEN_ON 0x0001 // 上升、打开、放松、伸出
#define DOWN_CLOSE_OFF 0x0002 // 下降、关闭、加紧、收回
#define OT_ACTION 0x0003 // 动作
// 手动控制功能的代码(控制参数1) 定义-冲孔机系列
#define CUT_THREAD 0x0001 // 手动剪线
#define MAINSHAFT_ADJUST 0x0002 // 针梭校对(主轴点动)
#define ROTATE_ADJUST 0x0003 // 旋转校对
#define HEAD_LIFT_UP 0x0004 // 机头上升
#define SET_WORK_AREA 0x0005 // 设置可工作区域
#define SEWING_MS_RUN 0x0009 // 缝纫主轴研车
#define PUNCH_MS_RUN 0x000A // 冲孔主轴研车
#define ALL_MS_RUN 0x000B // 所有主轴研车
#define CUT_UP 0x0010 // 剪上线
#define CUT_DOWN 0x0011 // 剪下线
#define SEW_HEAD_LIFT 0x0012 // 缝纫机头升降(根据传感器状态确定上升还是下降)
#define MS_JOG 0x0013 // 点动
#define M_TO_ANGLE 0x0014 // M轴去指定角度
#define WIRE_MS_RUN 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 XY_MOVE_STOP 0x001A // XY停止
#define ROT_MOVE_POSI 0x001D // 逆时针旋转
#define ROT_MOVE_MEGA 0x001E // 顺时针旋转
#define ROT_MOVE_STOP 0x001F // 旋转停止
#define AUTO_SET_START 0x0021 // 自动定起点
#define XY_AUTO_SOFTLIMIT 0x0022 // 自动定软限位
#define CHECK_CANBUS 0x0023 // 总线检测
#define PUNCH_MS_JOG 0x0030 // 多头冲孔点动
#define PUNCH_SW_KN 0x0031 // 多头冲孔换刀
#define PUNCH_CHANGE_ZERO 0x0032 // 冲孔换色
#define PUNCH_MS_POH 0x0035 //单次冲孔
#define PUNCH_MS_CD 0x0036 //冲头停下位
#define CHANGE_WORK_HEAD 0X0037 //机头切换
#define AUTO_SET_RANGE 0x0038 // 自动设定工作范围
#define PUNCH_DRAW_OUTLINE 0x003A //画轮廓线
#define PUNCH_CON_OIL 0x0077 // 冲孔连续供油
#define PUNCH_ROT_TO_ZERO 0x0078 // 冲孔旋转去零位
#define SEWING_MS_JOG 0x0084 // 缝纫机头点动
#define NEEDLE_TO_CUSP 0x0085 // 缝纫主轴去勾线位
#define HOOK_TO_CUSP 0x0086 // 梭去勾线位
#define EMB_TO_CUSP 0x0087 // 绣花主轴去勾线位
#define SHOW_M_ABSECD_VAL 0x0100 // 显示M轴绝对值编码器值
#define TEST_ADC_POTVAL 0x0102 // 测试电位器
#define EMB_MS_JOG 0x0020 // 平绣点动
#define EMB_SW_COLOR 0x0021 // 平绣换色
#define EMB_MS_RUN 0x0022 // 平绣主轴研车
#define EMB_CUT_THREAD 0x0023 // 平绣剪线
// 手动动作(压胶机)
#define ALL_TO_RESET 0x0001 // 全部复位
#define MOTO_TO_ZERO_YJ 0x0002 // 电机归零
#define STATION1_START_GLUE 0x0003 // 工位1涂胶
#define STATION2_START_GLUE 0x0004 // 工位2涂胶
#define HEAD_UP_DOWN 0x0005 // 机头升降
#define TO_STATION1_APOS 0x0006 // 回工位1起始点
#define TO_STATION2_APOS 0x0007 // 回工位2起始点
#define TO_WAITTING_POS 0x0008 // 回等料点
#define TO_REMOVE_GLUE_POS 0x0009 // 回排胶点
#define REMOVE_GLUE_ONCE 0x000A // 排一次胶
#define ADJUST_GLUE_HEGHT 0x000B // 校准胶管高度
// 机器工作命令
/*
工作命令执行流程
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_FAST_JUMP 0x000B // 快速进退
#define WORK_GOTO_WKPOS 0x000C // 回工作点
#define WORK_GOTO_FEEDT 0x000D // 回穿线点
#define WORK_GOTO_CHGBO 0x000E // 回换梭位
#define WORK_GOTO_ZERO 0x0012 // 回零点(框架归零)
#define WORK_GOTO_GORNER 0x0013 // 回角点
#define WORK_FIX_MVFRAME 0x0017 // 定量移框
#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_GOTO_FRMMP 0x0029 // 回中心点
#define WORK_ACT_OIL 0x0050 // 工作中加油
/*
移动到位置 命令 执行流程
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