#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