QuiltingHMI/machine/comm/protocol.h
2024-02-06 15:10:48 +08:00

1753 lines
74 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_TRANS_RESULT 0x0007 // 读取传输结果
#define UCMD_GET_SENSOR_BMP 0x0008 // 读取传感器位图
#define UCMD_GET_TENSION_DAT 0x0009 // 读取张力数据
#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_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 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_LOTDATA 0x800D // 发送物联网数据
// 三、命令详解
/*
工作流程
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 curN1Ver; //软件编译N1板卡版本
// 525
u8 rev2[1024-525];
} __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 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
{
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 spindleAngle; // 主轴角度
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; //电位器值
u32 tempdat3; // 提升电机档位值或松紧线位置
// 26
//u32 laserIntensity; // 激光强度
u32 iterationsNum; // 反复绣,当前反复次数
// 27
s32 workableTimer; // 可工作时间计数器(分钟)
u32 needleNum; // 缝纫针数
//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_ALM_WATERTANK 0x002A // 水箱报警
#define ERR_ALM_COVEROPEN 0x002B // 开盖报警
#define ERR_LIGHTCURTAINS1 0x002C // 光幕1介入
#define ERR_LIGHTCURTAINS2 0x002D // 光幕2介入
#define ERR_AIR_POWER 0x002E // 气压不足
#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_HEAD_NOT_HIGH 0x0055 // 机头不在高位
#define ERR_HEAD_NOT_LOW 0x0056 // 机头不在低位
#define ERR_LIGHTCURTAINS 0x0057 // 光幕介入
#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_NOT_AT_POS 0x005E // 模版不到位
#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_R_LIT_POSI 0x0081 // 旋转正向限位
#define ERR_R_LIT_NEGA 0x0082 // 旋转反向限位
#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_NOTIN_SAFE_AREA 0x009E // 机头不在安全区域
#define ERR_BUS_ERR 0x00AD // 总线错误
#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_WORK_HEAD 0x00D6 // 工作机头错误
#define ERR_CHANGE_SHUT 0x00D7 // 换梭异常
// 设置机器状态
/*
工作流程
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_THREADBK 0x0024 // 退出断线测试
#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_LINE_TBREAK 0x0152 // 断线停止
typedef struct
{
u32 buf[PARA_NUM];
} __attribute__ ((packed)) ParaStruct;
// 参数类型定义
#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 SEW_MCPARA_EX1 0x20 // 机器扩展参数1
#define SEW_MCPARA_EX2 0x21 // 机器扩展参数2
// 缝纫机器参数
typedef struct
{
// 0
u32 machineType; // 机器类型
u32 productType; // 产品类型
u32 headNumbers; // 机头个数
u32 needleNumbers; // 每头机针个数
// 4
u32 rev0[10-0];
// 10
u32 xConfig; // x配置
u32 yConfig; // y配置
u32 x2Config; // x2配置
u32 y2Config; // y2配置
// config.0, = 0, 无该轴; = 1, 有该轴;
// config.1, = 0, 单电机驱动; = 1, 双电机驱动;
// config.2, = 0, 坐标系统为正; = 1, 坐标系统为反;
// config.3, = 0, 移动对象为机头 = 1, 移动对象为框;
// config.4, = 0, 没有零位传感器; = 1, 有零位传感器;
// config.5, = 0, 没有降速传感器; = 1, 有降速传感器;
// config.6, = 0, 没有正向限位传感器; = 1, 有正向限位传感器;
// config.7, = 0, 没有负向限位传感器; = 1, 有负向限位传感器;
// config.8, = 0, 向负方向找零位传感器; = 1, 向正方向找零位传感器;
// config.9, = 0, 零位单独起作用; = 1, 零位和降速一起起作用;
u32 mConfig; // 缝纫主轴配置
// config.0, = 0, 无该轴; = 1, 有该轴;
// config.1, = 0, 针梭一体; = 1, 针梭分离(双电机);
u32 uConfig; // 升降电机配置
// config.0, = 0, 无该轴; = 1, 有该轴;
u32 fConfig; // 压脚电机配置
// config.0, = 0, 无该轴; = 1, 有该轴;
u32 rConfig; // 旋转电机配置
// config.0, = 0, 无该轴; = 1, 有该轴;
// config.1, = 0, 单电机驱动; = 1, 双电机驱动;
// config.2, = 0, 坐标系统为正; = 1, 坐标系统为反;
// config.3, = 0, 转动对象为机头 = 1, 转动对象为框;
// config.4, = 0, 无旋转范围限制 = 1, 有旋转范围限制;
// 18
u32 cutDTrdDev; // 下剪刀驱动装置选择, 0, 无下剪线装置; 1, 气缸; 2, 交流电机; 3, 步进电机; 4, 电磁铁
u32 cutDTrdMode; // 下剪线模式选择, 0, 静态剪线; 1, 动态剪线; 2, 凸轮剪线; 3, 凸轮分别剪线
u32 cutUTrdDev; // 上剪刀驱动装置选择, 0, 无上剪线装置; 1, 气缸;
// 21
u32 utbdDev; // 面线断线检测装置选择; 0, 无装置; 1, 挑线簧; 2, 电子断线器;
u32 dtbdDev; // 底线断线检测装置选择; 0, 无装置, 1, 光栅轮; 2, 磁编码器;
u32 tbdMode; // 断线检测模式选择; 0, 直接检测; 1, 外围板检测;
// 24
u32 hookTrdDev; // 勾面线装置选择, 0, 无勾面线装置; 1, 气缸; 2, 电磁铁
u32 looseTrdDev; // 松面线装置选择, 0, 无松线装置; 1, 气缸; 2, 电磁铁
u32 pullTrdDev; // 拉面线装置选择, 0, 无拉面线装置; 1, 气缸;
u32 pushTrdDev; // 扣底线装置选择, 0, 无扣底线装置; 1, 气缸; 2, 电磁铁
u32 looseTrdDev2; // 第二松面线装置选择, 0, 无松线装置; 1, 气缸; 2, 电磁铁
u32 templateId; // 模版识别装置, 0, 无识别装置; 1, 条形码; 2, 编码孔
// 30
u32 hookFaceTo; // 旋梭面对方向, 0, 向前; 1, 向左; 2, 向右; 3, 向上
// 31
u32 templateDect; // 模版检测装置, 0, 无检测装置; 1, 检测
u32 rev1[50-32];
// 50
// 位置,尺寸
s32 xSensorPos; // X框传感器坐标单位 0.01mm
s32 ySensorPos; // Y框传感器坐标单位 0.01mm
s32 mStopAng; // 主轴停车传感器角度,单位 0.01度
s32 uSensorPos; // 升降传感器坐标,单位 0.01mm
s32 fSensorPos; // 压脚传感器坐标,单位 0.01mm
s32 rSensorAng; // 旋转传感器角度,单位 0.01度
// 56
s32 mHkSensorAng; // 主轴勾线传感器角度,单位 0.01度
// 57
s32 pStopAng; // 冲头停车角度,单位 0.01度
// 58
s32 cStopAng; // 裁刀主轴停车角度
// 59
s32 x2SensorPos; // X2框传感器坐标单位 0.01mm
s32 y2SensorPos; // Y2框传感器坐标单位 0.01mm
s32 plSensorPos; // 拉料电机传感器坐标,单位 0.01mm
// 62
s32 mJogSensorAng; // 主轴点动停车角度,单位 0.01度
s32 emStopAng; // 平绣主轴停车角度,单位 0.01度
// 64
u32 rev2[70-64];
// 70
s32 xNegaBorder; // x可移动区域负边界(X-), 范围 -2147483648--2147483647单位0.01mm
s32 xPosiBorder; // x可移动区域正边界(X+), 范围 -2147483648--2147483647单位0.01mm
s32 yNegaBorder; // y可移动区域负边界(Y-), 范围 -2147483648--2147483647单位0.01mm
s32 yPosiBorder; // y可移动区域正边界(Y+), 范围 -2147483648--2147483647单位0.01mm
// 74
s32 headudUper; // 机头升降可移动上边界单位0.01mm
s32 headudLower; // 机头升降可移动下边界单位0.01mm
// 76
s32 footudUper; // 压脚升降可移动上边界单位0.01mm
s32 footudLower; // 压脚升降可移动下边界单位0.01mm
u32 fppmmNumerator; // 电机压脚脉冲当量分子
u32 fppmmDenominator; // 电机压脚脉冲当量分母
// 80
s32 rLimitAnglePosi; // 旋转范围正向限制角度,单位 0.01度
s32 rLimitAngleNega; // 旋转范围正向限制角度,单位 0.01度
// 82
s32 punchOffsetX; // 冲孔机头偏移X, 范围 -2147483648--2147483647单位0.01mm
s32 punchOffsetY; // 冲孔机头偏移Y, 范围 -2147483648--2147483647单位0.01mm
s32 sewingAreaXN; // x可缝纫区域负边界(X-), 范围 -2147483648--2147483647单位0.01mm
s32 sewingAreaXP; // x可缝纫区域正边界(X+), 范围 -2147483648--2147483647单位0.01mm
s32 sewingAreaYN; // y可缝纫区域负边界(Y-), 范围 -2147483648--2147483647单位0.01mm
s32 sewingAreaYP; // y可缝纫区域正边界(Y+), 范围 -2147483648--2147483647单位0.01mm
s32 punchAreaXN; // x可冲孔区域负边界(X-), 范围 -2147483648--2147483647单位0.01mm
s32 punchAreaXP; // x可冲孔区域正边界(X+), 范围 -2147483648--2147483647单位0.01mm
s32 punchAreaYN; // y可冲孔区域负边界(Y-), 范围 -2147483648--2147483647单位0.01mm
s32 punchAreaYP; // y可冲孔区域正边界(Y+), 范围 -2147483648--2147483647单位0.01mm
s32 sewingROffsetX; // 缝纫右机头偏移X, 范围 -2147483648--2147483647单位0.01mm
s32 sewingROffsetY; // 缝纫右机头偏移Y, 范围 -2147483648--2147483647单位0.01mm
s32 cutterOffsetX; // 切刀机头偏移X, 范围 -2147483648--2147483647单位0.01mm
s32 cutterOffsetY; // 切刀机头偏移Y, 范围 -2147483648--2147483647单位0.01mm
s32 cuttingAreaXN; // x可裁切区域负边界(X-), 范围 -2147483648--2147483647单位0.01mm
s32 cuttingAreaXP; // x可裁切区域正边界(X+), 范围 -2147483648--2147483647单位0.01mm
s32 cuttingAreaYN; // y可裁切区域负边界(Y-), 范围 -2147483648--2147483647单位0.01mm
s32 cuttingAreaYP; // y可裁切区域正边界(Y+), 范围 -2147483648--2147483647单位0.01mm
// u32 rev3[100-100];
// 100
// 速度参数
u32 xymvstspSpd; // xy启动停止速度, 范围 1--100单位mm/s默认 10
u32 xymvzSpd; // xy归零运行速度, 范围 1--100单位mm/s默认 100
u32 xymvlSpd; // xy空走运行速度, 范围 1--1000单位mm/s默认 300
u32 xymvSAdd; // xy行走加速度, 范围 1--10000单位mm/s2默认 1000
u32 xymvbrkAdd; // xy刹车加速度 1--10000单位mm/s2默认 10000
u32 xymvhSpd1; // xy手动移动速度1, 范围 1--1000单位mm/s默认 10
u32 xymvhSpd2; // xy手动移动速度2, 范围 1--1000单位mm/s默认 100
u32 xymvhSpd3; // xy手动移动速度3, 范围 1--1000单位mm/s默认 300
u32 xymaxSpd; // xy最高移动速度, 范围 1--1000单位mm/s默认 300
// 109
u32 msrstspRpm; // 主轴启动停止转速, 范围 1--300单位r/min默认 100
u32 mstzRpm; // 主轴归零转速, 范围 1--3000单位r/min默认 120
u32 msrunRpm; // 主轴运转转速, 范围 1--3000单位r/min默认 300
u32 msrAddRpss; // 主轴运转加速度, 范围 1--100单位r/ss默认 50
u32 msrbrkAdd; // 主轴刹车加速度, 范围 1--100单位r/ss默认 100
u32 msHightRpm; // 主轴缝纫最高转速, 范围 1--3000单位r/min默认 3000
// 115
u32 ustspSpd; // 机头升降起停速度, 范围 1--250单位mm/s默认 10
u32 umvtzSpd; // 机头升降归零速度, 范围 1--250单位mm/s默认 50
u32 umoveSpd; // 机头升降行走速度, 范围 1--250单位mm/s默认 200
u32 uliftAdd; // 机头升降行走加速度, 1--10000单位mm/s2默认 500
u32 uBrkAdd; // 机头升降刹车加速度, 1--10000单位mm/s2默认 1000
// 120
u32 fstspSpd; // 压脚升降起停速度, 范围 1--100单位mm/s默认 10
u32 fmvtzSpd; // 压脚升降归零速度, 范围 1--100单位mm/s默认 30
u32 fmoveSpd; // 压脚升降行走速度, 范围 1--100单位mm/s默认 100
u32 fliftAdd; // 压脚升降行走加速度, 1--10000单位mm/s2默认 500
u32 fBrkAdd; // 压脚升降刹车加速度, 1--10000单位mm/s2默认 1000
// 125
u32 rotstspDps; // 机头旋转启动停止速度, 范围 1--720, 单位 deg/s(度/秒),默认 10
u32 rottzDps; // 机头旋转归零速度, 1--720, 单位 deg/s(度/秒),默认 50
u32 rotrunDps; // 机头旋转运转速度, 范围 1--720, 单位 deg/s(度/秒),默认 360
u32 rotAddDpss; // 机头旋转运动加速度, 范围 1--10000, 单位 deg/s(度/秒方),默认 500
u32 rotBrkDpss; // 机头旋转刹车加速度, 范围 1--10000, 单位 deg/s(度/秒方),默认 5000
u32 rotmaxDps; // 机头旋转最高速度, 范围 1--720单位 deg/s默认 720
// 131
u32 minDrawSpd; // 最小画笔绘画速度, 范围 1--100单位mm/s默认 10
u32 maxDrawSpd; // 最大画笔绘画速度, 范围 1--1200单位mm/s默认 1000
u32 drawAdd; // 画笔绘画加速度, 范围 1--4000单位mm/s2默认 500
u32 drawSlowAngle; // 画笔绘画降速最小偏差角度,范围 0--18000单位 0.01度,默认 3000
// 135
u32 rev4[150-135];
// 150
s32 embOffsetX; // 平绣机头偏移X, 范围 -2147483648--2147483647单位0.01mm
s32 embOffsetY; // 平绣机头偏移Y, 范围 -2147483648--2147483647单位0.01mm
s32 embAreaXN; // 平绣x可绣花区域负边界(X-), 范围 -2147483648--2147483647单位0.01mm
s32 embAreaXP; // 平绣x可绣花区域正边界(X+), 范围 -2147483648--2147483647单位0.01mm
s32 embAreaYN; // 平绣y可绣花区域负边界(Y-), 范围 -2147483648--2147483647单位0.01mm
s32 embAreaYP; // 平绣y可绣花区域正边界(Y+), 范围 -2147483648--2147483647单位0.01mm
// 156
u32 rev5[200-156];
// 200
s32 penOffsetX; // 画笔偏移X, 范围 -2147483648--2147483647单位0.01mm
s32 penOffsetY; // 画笔偏移Y, 范围 -2147483648--2147483647单位0.01mm
s32 PressOffsetX; // 压枣偏移X, 范围 -2147483648--2147483647单位0.01mm
s32 PressOffsetY; // 压枣偏移Y, 范围 -2147483648--2147483647单位0.01mm
// 204
u32 EncoderMolecule; // 编码器系数分子, 范围 1--100000单位 无
u32 EncoderDeno; // 编码器系数分母, 范围 1--100000单位 无
u32 ZeroCutDistance; // 零切距离, 范围 1--500000单位 0.01mm
u32 FeedClothDev; // 进料装置选择, 0, 无进料装置; 1, 有进料装置
u32 CrossCutDev; // 横切装置选择, 0, 无横切装置; 1, 有横切装置
u32 ClipClothDev; // 夹布装置选择, 0, 无夹布装置; 1, 有夹布装置
u32 TensionDev; // 张紧装置选择, 0, 无张紧装置; 1, 有张紧装置
u32 SideCutDev; // 边切装置选择, 0, 无边切装置; 1, 有边切装置
// 212
u32 rev6[256-212];
} __attribute__ ((packed)) SewingMcPara;
// 缝纫工作参数
typedef struct
{
// 0
u32 msWorkRpm; // 主轴缝纫工作转速, 范围 1--3000单位r/min默认 2000
u32 mscutRpm; // 主轴剪线转速, 范围 1--500单位r/min默认 120
u32 msRevRpm; // 主轴回针转速, 范围 1--500单位r/min默认 200
u32 msStSlowRpm; // 主轴启动慢动转速, 范围 1--500单位r/min默认 200
u32 msBackEquRpm; // 倒车等效主轴转速,, 范围 1--3000单位r/min默认 1000
// 5
u32 sewMoveType; // 缝纫动框方式, 位图
// bit0 = 0, xy连续动框; bit = 1, xy间歇式动框;
// bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速;
// bit2 = 0, 机头连续旋转; bit2 = 1, 机头间歇式旋转;
// bit3 = 0, 机头间歇式脉冲无加减速; bit3 = 1, 间歇式脉冲正弦加减速;
u32 sewMoveStAng; // 缝纫动框起始角度, 0--36000, 单位 0.01度,默认 28000
u32 sewMoveCtnAng;// 缝纫动框持续角度, 0--36000, 单位 0.01度,默认 15000
// 8
u32 stSlowNum; // 起针慢动针数, 0--10单位 针, ,默认 3
u32 actionWhenStart; // 起针动作允许; 位图选择, 0, 不允许; 1, 允许; bit0, 松线允许; bit1, 顶线允许; bit2, 夹线允许;
// 10
u32 cutTrdEn; // 剪线允许; 0, 不剪线; 1, 自动剪线; 2, 数据剪线 默认1
u32 cutTrdDivAngle; // 剪线分线角度0--36000, 单位 0.01度,默认 20000
u32 cutTrdEndAngle; // 剪线完成角度0--36000, 单位 0.01度,默认 6000
u32 actionWhenCut; // 剪线时动作允许, 位图选择, bit0, 松线允许; bit1, 拉线允许; bit2, 夹线允许;
// 14
u32 tbdNumber; // 断线检测针数; 0, 不检测断线; 其他, 断线信号连续针数默认3
u32 tbdAngle; // 断线检测主轴角度0--36000, 单位 0.01度,默认 3000
// 16
u32 changeBobbinMode; // 换梭芯提醒功能, 0, 不启用该功能; 1, 按长度计数延迟提醒; 2, 按片数计数; 3, 按长度立刻提醒; 默认0
u32 changeBobbinLength; // 底线长度, 单位 0.01mm,默认 10000000
u32 cblenFixed; // 每针底线修正量, 单位 0.01mm,默认 0
u32 changeBobbinNums; // 换梭片数计数, 单位 次,默认 0
// 20
u32 oilMode; // 加油方式选择, 0, 不加油; 1, 按工作时间间歇加油; 2, 按工作针数间歇加油; 3, 持续不停加油默认0
u32 addOilGapStitch; // 加油针数间隔, 单位针, 加油方式为按针数加油时有用,默认 10000
u32 addOilGapTime; // 加油时间间隔, 单位秒, 加油方式为按工作时间加油时有用;
u32 addOilTime; // 加油持续时长, 单位秒,
// 24
u32 finishStopSel; // 完成后停车位置选择, 0, 当前位置; 1起点2定位点3上料点; 4偏移点
// 25
u32 offsetEn; // 偏移点坐标有效标志; 0, 无效; 1, x有效; 2, y有效; 3, xy同时有效
s32 offsetX;
s32 offsetY; // 偏移点坐标
// 28
u32 fixPosEn; // 穿线点坐标有效标志; 0, 无效; 1, x有效; 2, y有效; 3, xy同时有效
s32 fixPosX;
s32 fixPosY; // 穿线点坐标
// 31
s32 headLowPos; // 机头升降低位高度
s32 headHighPos; // 机头升降高位高度
// 33
u32 expectedOutput; // 产量预设
// 34
u32 lightingBrightness; // 照明亮度0--255; 默认128
// 35
u32 delayAfterFrameClose; // 气框关闭后延时, 0--2000, 单位ms, 默认500
// 36
u32 msAddRpss; // 缝纫加速度, 1--100, 单位r/ss , 默认5
// 37
u32 cutXYMovement; // 剪线动框位移, 1--1000, 单位0.01mm, 默认500
// 38
u32 sewingBlowEn; // 缝纫吹气允许, 0, 不允许; 1, 允许
u32 punchBlowEn; // 冲孔吹气允许, 0, 不允许; 1, 允许
u32 cleanerCloseDelay; // 吸尘器关闭延时,单位秒
// 41
u32 pmWorkRpm; // 冲孔主轴工作转速, 范围 1--3000单位r/min默认 2000
u32 pmAddRpss; // 冲孔加速度, 1--100, 单位r/ss , 默认20
u32 pmMoveType; // 冲孔动框方式, 位图
// bit0 = 0, xy连续动框; bit = 1, xy间歇式动框;
// bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速;
u32 pmMoveStAng; // 冲孔动框起始角度, 0--36000, 单位 0.01度,默认 24000
u32 pmMoveCtnAng; // 冲孔动框持续角度, 0--36000, 单位 0.01度,默认 15000
// 46
u32 liftHeadWhenSewing; // 缝纫间越框机头升降, 0, 不允许; 1, 允许
u32 liftHeadWhenPunch; // 冲孔间越框机头升降, 0, 不允许; 1, 允许
// 48
u32 actionWhenMove; // 移框时动作选择; 位图选择, 0, 不允许; 1, 允许; bit0, 松线允许; bit2, 夹线允许;
// 49
u32 softwareLimit; // 软件限位; 位图选择, 0, 不允许; 1, 允许; bit0, xy移动; bit1, 缝纫头升降限制; bit2, 冲孔头升降限制; bit3, 裁刀机头升降限制
// 50
s32 changeBobbinAng; // 换梭旋转机头角度, 0--36000, 单位 0.01度,默认 18000
u32 rotMoveCtnAng; // 旋转持续角度, 0--36000, 单z位 0.01度,默认 36000
// 52
u32 hookThreadNum; // 面线勾线针数1--5单位 针默认1
u32 sewFootHeight; // 缝纫工作时压脚高度,单位 0.01mm
u32 simuHeadHeight; // 模拟工作时机头高度,单位 0.01mm
// 55
u32 cutterWorkRpm; // 切刀工作转速, 范围 1--3000单位r/min默认 1200
u32 cutterAddRpss; // 切刀加速度, 1--100, 单位r/ss , 默认20
// 57
u32 cutMoveDir; // 剪线动框方向, 0, 不动框; 1, 向左; 2, 向前; 3, 向右; 4, 向后
// 58
u32 pressKnotHigh; // 压枣升降行程,单位 0.01mm
// 59
u32 msCornerRpm; // 主轴拐角转速, 范围 1--3000单位r/min默认 1000
u32 slowAngle; // 降速最小偏差角度单位度范围0--180,默认 180
// 61
u32 rev2[100-61];
// 100
u32 workHeadSel; // 工作机头选择位图选择共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头......
u32 safetyEn; // 安全输入允许位图选择0, 不允许; 1, 允许; bit0 光幕; bit1, 气压; bit2 上电信号
u32 autoFrameEn; // 自动气框允许0, 不允许; 1, 允许;
u32 autoFrameDelay; // 自动气框闭合延时单位ms
u32 sewoffsetAsCmd; // 线迹偏移功能0, 不允许; 1, 允许;
u32 autoworkstart; // 循环工作功能0, 不允许; 1, 允许;
u32 workHeadSelR; // 右工作机头选择位图选择共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头......
u32 PullingPos; // 拉料电机拉料位置,单位 0.01mm
u32 pullingLength; // 拉料长度,单位 0.01mm
u32 cuttingLength; // 裁切长度,单位 0.01mm
// 110
u32 addOilHookTime; // 梭加油持续时长, 单位秒, (针梭独立加油时有效)
u32 clampingForce1; // 夹线力度1: 0~100 %
u32 clampingForce2; // 夹线力度2: 0~100 %
u32 clampingForce3; // 夹线力度3: 0~100 %
u32 clampingForce4; // 夹线力度4: 0~100 %
// 115
u32 emWorkRpm; // 平绣主轴工作转速, 范围 1--3000单位r/min默认 1000
u32 emAddRpss; // 平绣加速度, 1--100, 单位r/ss , 默认5
u32 emMoveType; // 平绣动框方式, 位图
// bit0 = 0, xy连续动框; bit = 1, xy间歇式动框;
// bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速;
u32 emMoveStAng; // 平绣动框起始角度, 0--36000, 单位 0.01度,默认 24000
u32 emMoveCtnAng; // 平绣动框持续角度, 0--36000, 单位 0.01度,默认 20000
// 120
u32 rev3[150-120];
// 150
u32 rev4[200-150];
// 200
u32 rev5[256-200];
} __attribute__ ((packed)) SewingWkPara;
//回复的定义
#define REV_TYPE_ONCE 0 // 单次回复;下位机收到命令后发送一次回复数据
#define REV_TYPE_BEGIN 1 // 多次回复;下位机收到命令后,会主动开始发送回复数据,直到被其他命令打断。
// 传感信号位定义,传感器信号位图和传感器信号的位定义相同
typedef struct
{
// 0
u8 bitmap[1024];
} __attribute__ ((packed)) SensorsBitmap;
// 传输文件类型
#define FILE_TYPE_DAT 0x00 // 数据文件
#define FILE_TYPE_PGM 0x02 // 升级文件
// 文件传输控制结构
#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;
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 // 请求传输模式
// 控制动作定义
#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_ALLZ 0x0004 // 所有主轴 零位
#define MT_ALLG 0x0005 // 所有主轴 勾线
#define MT_ALLM 0x0006 // 所有主轴 点动
#define MT_LF 0x0007 // 压脚电机
#define MT_LR 0x0008 // 旋转电机
#define MT_LRU 0x0009 // 上旋转电机
#define MT_LRD 0x000A// 下旋转电机
#define CUT_THREAD 0x0001 // 手动剪线
#define ALL_MS_RUN 0x0002 // 所有主轴研车
#define ROTATE_ADJUST 0x0003 // 旋转校对
#define HEAD_LIFT_UP 0x0004 // 机头上升
#define HEAD_LIFT_DOWN 0x0005 // 机头下降
#define HEAD_LIFT_UPDW 0x0006 // 机头升降
#define MAINSHAFT_ADJUST 0x0007 // 针梭校对
#define SEWING_MS_RUN 0x0009 // 缝纫主轴研车
#define SEWING_MS_JOG 0x0084 // 缝纫机头点动
#define SEW_HEAD_LIFT 0x0012 // 缝纫机头升降(根据传感器状态确定上升还是下降)
#define SEW_MS_RESET 0x0013 // 缝纫针梭复位(回到停车位)
#define SEW_MS_TO_FIX 0x0014 // 缝纫针梭去穿线位(回到穿线位)
#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 MAKEUP_NOHEAD 0x0020 // 取消补缝
#define MAKEUP_HEAD1 0x0021 // 机头1补缝
#define MAKEUP_HEAD2 0x0022 // 机头2补缝
#define MAKEUP_HEAD3 0x0023 // 机头3补缝
#define MAKEUP_HEAD4 0x0024 // 机头4补缝
#define MAKEUP_HEAD5 0x0025 // 机头5补缝
#define XY_MOVE_STOP 0x001A // XY停止
#define SET_WORK_AREA 0x0001 // 设置可工作区域 手动控制功能,para2是机头 para3选X- X+ Y- Y+,分别对应1234
#define ALL_MOVE_STOP 0x0040 // 移动停止
#define AUTO_CHANGE_ONE_SHUT 0x0060 // 自动换一个梭
#define INSTALL_FIRST_BOBBIN 0x0061 // 安装第一个梭壳
#define SHUT_FROM_PLATE_TO_HEAD 0x0062 // 将旋梭从梭盘拿到机头
#define SHUT_FROM_HEAD_TO_PLATE 0x0063 // 将旋梭从机头拿到梭盘
#define SHUT_INTO_TAKE_PLATE 0x0065 // 进入换梭盘状态
#define SHUT_INTO_INDX_STA 0x0066 // 进入缝纫状态
#define HEAD_MOVING_MOTOR 0x0067 //机头移动电机
// 手动 控制参数2 定义
#define MT_MOVE_DIR_STOP 0x0000 // 停止转动
#define MT_MOVE_DIR_POSI 0x0001 // 正向移动x向右y向上升降向上
#define MT_MOVE_DIR_NEGA 0x0002 // 反向移动x向左y向下升降向下
#define MT_SERVO_ON 0x0001 // 电机使能开
#define MT_SERVO_OFF 0x0002 // 电机使能关
// 通用输出控制定义
// 输出控制参数1代码定义
#define OT_LOOSE_THREAD 0x0001 // 松紧线
#define OT_UCUTTER_LIFT 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_BIT_FOOT 0x0008 // 大压脚
#define OT_MID_FOOT 0x0009 // 中压脚
#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_SEW_BLOW 0x0010 // 缝纫吹气
#define OT_HEAD_L_CLUTH 0x001A// 左机头主轴离合
#define OT_HEAD_R_CLUTH 0x001B// 右机头主轴离合
#define OT_CLIP_EXTEND 0x0024 // 勾线动作-伸出
#define OT_CLIP_EXTEND_R 0x0025 // 右机头勾线动作
#define OT_CLIP_OPEN 0x0026 // 勾线动作-开合
#define OT_PEN_DOWN 0x0028 // 画笔升降
#define OT_CHBOB_GRAB_OPEN 0x0070 // 换梭装置抓取
#define OT_CHBOB_SWAY_PUSH 0x0071 // 换梭装置摆动
#define OT_CHBOB_SPIN 0x0073 // 换梭装置旋转
#define OT_LASER_CTRL 0x00F0 // 激光控制
#define OT_LASER_BLOW 0x00F1 // 激光吹气
// 输出参数2
#define OT_STOP 0x0000 // 停止
#define UP_OPEN_ON 0x0001 // 上升、打开、放松、伸出
#define DOWN_CLOSE_OFF 0x0002 // 下降、关闭、加紧、收回
#define OT_ACTION 0x0003 // 动作
// 通用工作控制功能
#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_CUT_XLINE 0x000A // 手动断布
#define WORK_FAST_JUMP 0x000B // 快速进退
#define WORK_GOTO_WKPOS 0x000C // 回工作点
#define WORK_GOTO_FEEDT 0x000D // 回穿线点
#define WORK_GOTO_CHGBO 0x000E // 回换梭位
#define WORK_FEED_MOVE 0x000F // 进料退料
#define WORK_GOTO_FINISH 0x0011 // 回结束点
#define WORK_GOTO_ZERO 0x0012 // 回零点(框架归零)
#define WORK_GOTO_GORNER 0x0013 // 回角点
#define WORK_MS_JOG 0x0013 // 主轴点动
#define WORK_FIX_MVFRAME 0x0017 // 定量移框
#define WORK_RPM_CHG 0x0020 // 速度改变
#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 AUTO_CHANGE_ONE_SHUT 0x0060 // 自动换一个梭
#define RESET_SHUT_COUNTER 0x0067 // 梭盘计数复位
// 启动工作的参数1定义
#define WKMD_NORMAL 1 // 正常
#define WKMD_SIMULATION 2 // 模拟(空走)
#define WKMD_BACKWORD 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 机器工作命令
#pragma pack(1)//设定为1字节对齐
struct
{
u8 sync[DP_SYNC_LEN];
u16 cmdCode;
s32 posx;
s32 posy;
u16 crc;
} __attribute__ ((packed)) moveFrameTo; // UCMD_MOVE_TO 移动框架到位置命令
#pragma pack(1)//设定为1字节对齐
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;
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 rev[6];
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