446 lines
12 KiB
C
446 lines
12 KiB
C
|
||
#ifndef __DATADEF_H__
|
||
#define __DATADEF_H__
|
||
|
||
#include "config.h"
|
||
|
||
//-------------------------------------------------------------------------
|
||
|
||
// 执行数据定义
|
||
typedef struct
|
||
{
|
||
u8 ctrl; // 控制字节
|
||
u8 attr; // 属性字节
|
||
s16 dx; // X偏移
|
||
s16 dy; // Y偏移
|
||
s16 dr; // R偏移
|
||
u16 len; // xy分量合成长度
|
||
u8 action[2]; //附加动作
|
||
|
||
u8 rev[4];
|
||
|
||
}__attribute__ ((packed)) DataItem, Ds16Item;
|
||
|
||
typedef struct
|
||
{
|
||
u8 ctrl; // 控制字节
|
||
u8 attr; // 属性字节
|
||
s16 dx; // X偏移
|
||
s16 dy; // Y偏移
|
||
s16 dr; // R偏移
|
||
|
||
}__attribute__ ((packed)) Ds8Item;
|
||
|
||
typedef struct
|
||
{
|
||
u8 ctrl; // 控制字节
|
||
u8 attr; // 属性字节
|
||
u8 dx; // X偏移
|
||
u8 dy; // Y偏移
|
||
|
||
}__attribute__ ((packed)) DsrItem, Ds4Item;
|
||
|
||
// 双字节压缩格式
|
||
typedef struct
|
||
{
|
||
s8 cdx; // X数据
|
||
s8 cdy; // Y数据
|
||
|
||
/*
|
||
格式定义
|
||
cdx x分量控制数据
|
||
cdy y分量控制数据
|
||
|
||
每个字节的最低位为控制位,高7个位为数据位。数据位的最高位是符号位。
|
||
|
||
两个控制位合在一起形成4种控制数据,定义如下:
|
||
cdx.0 cdy.0
|
||
0 0 缝纫数据,数据范围从-128 -- +126, 只有偶数可用(精度0.2mm),单位0.1mm
|
||
0 1 空走数据,数据范围从-128 -- +126, 只有偶数可用(精度0.2mm),单位0.1mm
|
||
1 0 大步空走数据,数据范围从-128 -- +126, 只有偶数可用(精度2mm),单位1mm
|
||
1 1 控制数据,数据位定义为控制码和参数 cdx 为控制码, cdx 为参数
|
||
|
||
*/
|
||
}__attribute__ ((packed)) ToBItem, Ds2Item;
|
||
|
||
// ctrl 定义
|
||
// 控制字节, 作为功能码,定义如下
|
||
|
||
#define DATA_NULL 0x00 // 文件结束
|
||
#define DATA_SEWING 0x01 // 缝纫数据, 该数据需要缝纫机针扎一次, 同时 X, Y,R 偏移运动dx,dy,dr, 框步进式运动或连续运动
|
||
#define DATA_OFFSET 0x02 // 偏移数据, 该数据只移动 X, Y,R 偏移 dx,dy,dr,连续运动
|
||
#define DATA_CUTTING 0x03 // 切刀数据, 该数据需要切刀先运转,同时 X, Y,R 偏移 dx,dy,dr,根据切刀类型选择动框方式
|
||
#define DATA_LASER 0x04 // 激光数据, 该数据需要激光出光, 同时X, Y,R偏移 dx,dy,dr,框连续运动,激光强度和运动线速度有关系
|
||
#define DATA_DRAWING 0x05 // 记号数据, 该数据需要记号笔先放下来, 同时X, Y,R偏移dx,dy,dr,框连续运动
|
||
#define DATA_SEWING_R 0x06 // 右机头缝纫,该数据需要缝纫机针扎一次, 同时 X, Y,R 偏移运动dx,dy,dr, 框步进式运动或连续运动
|
||
|
||
#define DATA_SECF_SEW 0x11 // 第二框缝纫
|
||
#define DATA_SECF_OFST 0x12 // 第二框偏移
|
||
|
||
#define DATA_SECF_SEW_R 0x16 // 第二框右机头缝纫,该数据需要缝纫机针扎一次(主轴可以转动多圈(如果有跳针功能的话)), 同时 X, Y,R 偏移运动dx,dy,dr, 框步进式运动或连续运动
|
||
|
||
|
||
// 兼容DSR控制码
|
||
#define DATA_SYNCSEW 0x07 // 同步缝纫数据, 该数据需要缝纫机针扎一次, 同时 X, Y,R 偏移运动 dx,dy,dr,X2, Y2 也运动 dx,dy,框步进式运动或连续运动
|
||
#define DATA_PAUSE_OLD 0x08 // 暂停
|
||
#define DATA_ANGLE_OLD 0x09 // 拐点
|
||
#define DATA_CUT_OLD 0x0A // 剪线
|
||
#define DATA_END_OLD 0x10 // 结束码
|
||
|
||
#define DATA_JUMP 0x0B // 跳针数据,该数据要求缝纫机主轴运动,但锁头, X, Y,R 偏移运动 dx,dy,dr, 框步进式运动或连续运动
|
||
#define DATA_PUNCH 0x0C // 冲孔数据, 该数据需要冲孔主轴运转一圈,同时 X, Y,R 偏移 dx,dy,dr,
|
||
#define DATA_EMB 0x0D // 绣花数据,该数据需要平绣针扎一次, 同时 X, Y,偏移运动dx,dy, 框步进式运动
|
||
#define DATA_CHGND_OLD 0x0E // 换色功能码
|
||
|
||
#define DATA_SYNCOFST 0x0F // 同步偏移数据
|
||
|
||
#define DATA_MILLING 0x21 // 铣刀数据
|
||
#define DATA_DRILL 0x22 // 钻孔数据
|
||
#define DATA_RKNIFE 0x23 // 圆刀数据, 该数据需要圆刀先运转,同时 X, Y,R 偏移 dx,dy,dr,
|
||
#define DATA_SKNIFE 0x24 // 震刀数据, 该数据需要震刀先运转,同时 X, Y,R 偏移 dx,dy,dr,
|
||
#define DATA_TAPE_OFST 0x25 // 织带偏移数据
|
||
|
||
#define DATA_WHEEL 0x26 // 压轮数据
|
||
#define DATA_PRESSURE 0x27 // 压料数据
|
||
#define DATA_OPTI 0x28 // 吐丝数据
|
||
|
||
#define DATA_BASE1 0x2A // 基座1数据
|
||
#define DATA_BASE2 0x2B // 基座2数据
|
||
#define DATA_BASE3 0x2C // 基座3数据
|
||
|
||
#define DATA_EKNIFE1 0x2D // 偏心刀1数据
|
||
#define DATA_EKNIFE2 0x2E // 偏心刀2数据
|
||
|
||
#define DATA_CHENILLE 0x41 // 毛巾数据
|
||
#define DATA_CHAIN 0x42 // 链式数据
|
||
#define DATA_HIGHT 0x43 // 高度数据(毛巾绣)
|
||
#define DATA_COIL 0x44 // 缠绕数据
|
||
#define DATA_ZIGZAG 0x45 // 锯齿数据
|
||
#define DATA_RIBBON 0x46 // 盘带数据
|
||
|
||
#define DATA_END 0x80 // 结束码
|
||
#define DATA_PAUSE 0x81 // 暂停功能码
|
||
#define DATA_CHGND 0x82 // 绣花换针杆功能码(换色)
|
||
#define DATA_CUTTRD 0x83 // 剪线功能码
|
||
#define DATA_CUT_TAPE 0x84 // 剪织带功能码
|
||
#define DATA_MOVE_PHOTO 0x85 // 移动到拍照点功能码
|
||
#define DATA_GET_IMAGE 0x86 // 拍照功能码
|
||
|
||
#define DATA_ANGLE 0x89 // 拐点
|
||
|
||
// atrr, 属性字节,作为运动属性字节
|
||
|
||
// 缝纫针步的属性定义:
|
||
|
||
// attr.7, 夹线力度等级H
|
||
// attr.6, 夹线力度等级L
|
||
// attr.5, 保留
|
||
// attr.4, 缝纫回针标志
|
||
// attr.3, 右针杆不落针标志(=0,落针=1,不落针)
|
||
// attr.2, 左针杆不落针标志(=0,落针=1,不落针)
|
||
// attr.1, 速度等级H
|
||
// attr.0, 速度等级L
|
||
|
||
#define ATTR_CLAMP_LV 0xC0 // 夹线力度等级
|
||
#define ATTR_RESEW 0x10 // 回针标志
|
||
#define ATTR_FOOT_LV 0x60 // 压脚高度等级
|
||
#define ATTR_R_TOUP 0x08 // 右针杆不落针标志(=0,落针=1,不落针)
|
||
#define ATTR_L_TOUP 0x04 // 左针杆不落针标志(=0,落针=1,不落针)
|
||
#define ATTR_SPD_LV 0x03 // 速度等级
|
||
|
||
|
||
// 绣花针步的属性定义:
|
||
// attr.5, 跳针标志
|
||
|
||
#define ATTR_JUMP 0x20 // 跳针标志
|
||
|
||
|
||
#define EMB_ACTION 0x20 // 刺绣附加动作
|
||
// 刺绣附加动作
|
||
// 亮片
|
||
#define ACT_SEQUIN1 0x01
|
||
#define ACT_SEQUIN2 0x02
|
||
#define ACT_SEQUIN3 0x03
|
||
#define ACT_SEQUIN4 0x04
|
||
#define ACT_SEQUIN5 0x05
|
||
#define ACT_SEQUIN6 0x06
|
||
#define ACT_SEQUIN7 0x07
|
||
#define ACT_SEQUIN8 0x08
|
||
#define ACT_SEQUIN9 0x09
|
||
#define ACT_SEQUIN10 0x0A
|
||
#define ACT_SEQUIN11 0x0B
|
||
#define ACT_SEQUIN12 0x0C
|
||
|
||
// 散珠
|
||
#define ACT_SCBEAD1 0x11
|
||
#define ACT_SCBEAD2 0x12
|
||
#define ACT_SCBEAD3 0x13
|
||
#define ACT_SCBEAD4 0x14
|
||
#define ACT_SCBEAD5 0x15
|
||
#define ACT_SCBEAD6 0x16
|
||
|
||
// 简易毛巾
|
||
#define ACT_EASYCHENILLE 0x20
|
||
|
||
|
||
#define WIRE_ACTION 0x40 // 布线机附加动作
|
||
|
||
#define ACT_ZIGZAGL 0x01 // 左 远离上位
|
||
#define ACT_ZIGZAGR 0x02 // 右 靠近上位
|
||
|
||
// 铣刀的属性定义:
|
||
|
||
// attr.7, 保留
|
||
// attr.6, 保留
|
||
// attr.5, 保留
|
||
// attr.4, 保留
|
||
// attr.3, 刀压深度HH
|
||
// attr.2, 刀压深度HL
|
||
// attr.1, 刀压深度LH
|
||
// attr.0, 刀压深度LL
|
||
|
||
#define ATTR_HIGH_MARK 0x0F // 铣刀刀压深度调整掩码
|
||
|
||
|
||
// dx, x向偏移值, 有符号数, 范围为 -32768--32767, 单位为 0.01mm
|
||
// dy, y向偏移值, 有符号数, 范围为 -32768--32767, 单位为 0.01mm
|
||
// dr, r向偏移值, 有符号数, 范围为 -32768--32767, 单位为 0.0001 弧度
|
||
// len, xy 分量的合成长度,无符号数,范围0--65535, 单位为 0.01mm
|
||
|
||
//-------------------------------------------------------------------------
|
||
|
||
#ifndef PULSE_PER_MM
|
||
#define PULSE_PER_MM (100) // 每毫米脉冲数
|
||
#endif
|
||
|
||
#define RADIAN_ACCURACY 10000 // 万分之一弧度
|
||
|
||
//-------------------------------------------------------------------------
|
||
// 换色常量
|
||
#define MAX_SWITCH_NEEDLE 512 // 最大换色数(换色表个数)
|
||
|
||
// 针杆常量
|
||
// 平绣
|
||
#define EMB_NEEDNO_MIN 1
|
||
#define EMB_NEEDNO_MAX 32 // 平绣绣花 1 -- 32 针杆
|
||
|
||
// 冲孔
|
||
#define PUNCH_NEEDNO_MIN 33
|
||
#define PUNCH_NEEDNO_MAX 48 // 多针冲孔 33 -- 48 针杆
|
||
|
||
// 缝纫
|
||
#define SEW_NEEDNO_MIN 49
|
||
#define SEW_NEEDNO_MAX 50
|
||
|
||
// 盘带
|
||
#define RIBBON_NEEDNO_MIN 51
|
||
#define RIBBON_NEEDNO_MAX 52
|
||
|
||
#define RIBBON_NEEDNO_MODE1 51 // 盘带模式1 正常盘带
|
||
#define RIBBON_NEEDNO_MODE2 52 // 盘带模式2 褶绣
|
||
|
||
// 毛巾
|
||
#define CHENILLE_NEEDNO_MIN 53
|
||
#define CHENILLE_NEEDNO_MAX 68
|
||
|
||
// 链式
|
||
#define CHAIN_NEEDNO_MIN 69
|
||
#define CHAIN_NEEDNO_MAX 84
|
||
|
||
// 缠绕
|
||
#define COIL_NEEDNO_MIN 85
|
||
#define COIL_NEEDNO_MAX 100
|
||
|
||
#define COIL_NEEDNO_L1 85 // 缠绕左旋1
|
||
#define COIL_NEEDNO_L2 86 // 缠绕左旋2
|
||
#define COIL_NEEDNO_L3 87 // 缠绕左旋3
|
||
#define COIL_NEEDNO_L4 88 // 缠绕左旋4
|
||
#define COIL_NEEDNO_R1 89 // 缠绕右旋1
|
||
#define COIL_NEEDNO_R2 90 // 缠绕右旋2
|
||
#define COIL_NEEDNO_R3 91 // 缠绕右旋3
|
||
#define COIL_NEEDNO_R4 92 // 缠绕右旋4
|
||
#define COIL_EMB_NEEDNO 93 // 缠绕平绣(使用缠绕机头绣作平绣)
|
||
|
||
// 锯齿
|
||
#define SAWTOOTH_NEEDNO_MIN 101
|
||
#define SAWTOOTH_NEEDNO_MAX 112
|
||
|
||
#define SAWTOOTH_NEEDNO_MODE1 101 // 锯齿模式1
|
||
#define SAWTOOTH_NEEDNO_MODE2 102 // 锯齿模式2
|
||
#define SAWTOOTH_NEEDNO_MODE3 103 // 锯齿模式3
|
||
#define SAWTOOTH_NEEDNO_MODE4 104 // 锯齿模式4
|
||
#define SAWTOOTH_NEEDNO_MODE5 105 // 锯齿模式5
|
||
#define SAWTOOTH_NEEDNO_MODE6 106 // 锯齿模式6
|
||
|
||
// 激光,不同色序代表不同的切割速度,由低到高
|
||
#define LASER_NEEDNO_MIN 113
|
||
#define LASER_NEEDNO_MAX 122
|
||
|
||
#define LASER_NEEDNO_SPEED1 113
|
||
#define LASER_NEEDNO_SPEED2 114
|
||
#define LASER_NEEDNO_SPEED3 115
|
||
#define LASER_NEEDNO_SPEED4 116
|
||
#define LASER_NEEDNO_SPEED5 117
|
||
#define LASER_NEEDNO_SPEED6 118
|
||
#define LASER_NEEDNO_SPEED7 119
|
||
#define LASER_NEEDNO_SPEED8 120
|
||
#define LASER_NEEDNO_SPEED9 121
|
||
#define LASER_NEEDNO_SPEED10 122
|
||
|
||
// 裁切
|
||
#define CUT_NEEDNO 123
|
||
// 打孔
|
||
#define HOLE_NEEDNO 124
|
||
|
||
// 暂停
|
||
#define PAUSE_SW_CODE 255
|
||
|
||
|
||
// 数据文件头
|
||
//-------------------------------------------------------------------------
|
||
typedef union
|
||
{
|
||
u8 buff[0x400];
|
||
|
||
struct
|
||
{
|
||
// 0x00
|
||
u8 hdIdenti[0x40];
|
||
u8 fileparas[0x400 - 0x40];
|
||
} __attribute__ ((packed)) headparts; //
|
||
|
||
struct
|
||
{
|
||
// 0x00
|
||
char fileName[32]; // 文件名称
|
||
// 0x20
|
||
u32 dataSize; // 数据字节数
|
||
u32 itemNums; // 数据项个数
|
||
u16 bytesPerItem; // 每项占的字节数
|
||
u16 bytesPerBlk; // 数据内容划分块大小
|
||
u32 dataChecksum; // 数据累加校验和
|
||
u16 checkCrc; // 前面6个字段的CRC校验,(6个字段分别为:文件名称,字节数,项个数,每项字节数,每块字节数,数据累加和的CRC校验值)
|
||
// 0x32
|
||
u8 begHead; // 以哪种类型的机头定起点
|
||
u8 rev0;
|
||
u32 fileid; // 文件唯一标识符,识别是否为同一个文件
|
||
|
||
// 0x38
|
||
u8 reserved1[0x40-0x38]; // 保留区1
|
||
// 20221114 因绣花机界面问题,占用此8字节,绣花机主控不能使用
|
||
|
||
// 0x40
|
||
s32 anchorX; // 定位点坐标X
|
||
s32 anchorY; // 定位点坐标Y
|
||
// 0x48
|
||
s32 beginX; // 数据起点坐标X
|
||
s32 beginY; // 数据起点坐标Y
|
||
s32 beginR; // 数据起点坐标Z
|
||
|
||
// 0x54
|
||
s32 minX;
|
||
s32 maxX;
|
||
s32 minY;
|
||
s32 maxY; // 轮廓范围
|
||
|
||
// 0x64
|
||
u32 sizeX;
|
||
u32 sizeY; // 裁片大小
|
||
|
||
// 0x6C
|
||
s32 anchorX2; // 定位点坐标X2
|
||
s32 anchorY2; // 定位点坐标Y2
|
||
s32 beginX2; // 数据起点坐标X2
|
||
s32 beginY2; // 数据起点坐标Y2
|
||
s32 beginR2; // 数据起点坐标R2
|
||
|
||
// 0x80
|
||
u32 runAct; // 附加动作,
|
||
// bit0: 0:完成后不拍照 1:完成后拍照
|
||
|
||
// 0x84
|
||
u32 EnFlag; //
|
||
// bit0,偏移点X向允许 0,不允许 1,允许
|
||
// bit1,偏移点Y向允许 0,不允许 1,允许
|
||
// bit2,
|
||
// bit3,
|
||
// bit4,
|
||
// bit5,
|
||
// bit6,反复优先级 0,X向优先 1,Y向优先
|
||
|
||
s32 offsetX; // 偏移点X
|
||
s32 offsetY;
|
||
|
||
// 0x90
|
||
u8 xRepeatNums; // X向反复次数,范围0-99,默认0
|
||
u8 yRepeatNums; // Y向反复次数
|
||
s32 xRepeatDistance; // X向反复距离,单位mm,精度0.01,范围-100000-100000,默认0
|
||
s32 yRepeatDistance; // Y向反复距离
|
||
|
||
// 0x9A
|
||
u16 pressureHigh2; // 刀压2, 范围 0--65.000,单位0.001mm
|
||
u16 pressureHigh3; // 刀压3, 范围 0--65.000,单位0.001mm
|
||
u16 pressureHigh5; // 刀压5, 范围 0--65.000,单位0.001mm
|
||
u16 pressureHigh6; // 刀压6, 范围 0--65.000,单位0.001mm
|
||
u16 pressureHigh7; // 刀压7, 范围 0--65.000,单位0.001mm
|
||
u16 pressureHigh8; // 刀压8, 范围 0--65.000,单位0.001mm
|
||
u16 pressureHigh9; // 刀压9, 范围 0--65.000,单位0.001mm
|
||
|
||
// 0xA8
|
||
u8 reserved2[0x200-0xA8];
|
||
|
||
// 0x200
|
||
u8 switchNeedleTable[0x400-0x200]; // 色序设定表, 支持512个色序设定
|
||
|
||
} __attribute__ ((packed)) fileHead; // 文件头
|
||
|
||
}DataFileHead;
|
||
|
||
typedef struct
|
||
{
|
||
s32 anchorX;
|
||
s32 anchorY;
|
||
|
||
s32 beginX;
|
||
s32 beginY;
|
||
|
||
}__attribute__ ((packed)) DataFilePara; // 文件参数,
|
||
|
||
// 文件执行参数结构
|
||
typedef struct
|
||
{
|
||
u32 newIdx;
|
||
s32 newXPos;
|
||
s32 newYPos;
|
||
s32 newRPos;
|
||
u32 newColorIdx; // 新针位
|
||
u32 newHighIdx; // 新高度(绣花机毛巾高度)
|
||
u32 mvFrameflag; // 移框标志(设置执行进度时是否移框)
|
||
|
||
u32 rev[256-7];
|
||
}__attribute__ ((packed)) FileExecPara;
|
||
|
||
|
||
//-------------------------------------------------------------------------
|
||
|
||
void ReSetFileParaOld(DataFilePara * pNewPara);
|
||
void ReSetFilePara(DataFileHead * pNewPara);
|
||
|
||
u16 GetFileParaCheckCrc(void);
|
||
|
||
//-------------------------------------------------------------------------
|
||
#ifndef MAX_EX_SW_ND
|
||
#define MAX_EX_SW_ND 512 // 最大扩展换色数
|
||
#endif
|
||
|
||
#define TEMP_DATA1 0x01
|
||
#define TEMP_DATA2 0x02
|
||
#define TEMP_DATA3 0x03
|
||
#define TEMP_DATA4 0x04
|
||
|
||
//-------------------------------------------------------------------------
|
||
|
||
#endif
|
||
|
||
|