optical/EMBOS/Users/EmbFunc/operator/datadef.h
2025-09-04 09:45:08 +08:00

446 lines
12 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 __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, YR 偏移运动dx,dy,dr 框步进式运动或连续运动
#define DATA_OFFSET 0x02 // 偏移数据, 该数据只移动 X, YR 偏移 dx,dy,dr连续运动
#define DATA_CUTTING 0x03 // 切刀数据, 该数据需要切刀先运转,同时 X, YR 偏移 dx,dy,dr根据切刀类型选择动框方式
#define DATA_LASER 0x04 // 激光数据, 该数据需要激光出光, 同时X, YR偏移 dx,dy,dr框连续运动激光强度和运动线速度有关系
#define DATA_DRAWING 0x05 // 记号数据, 该数据需要记号笔先放下来, 同时X, YR偏移dx,dy,dr框连续运动
#define DATA_SEWING_R 0x06 // 右机头缝纫,该数据需要缝纫机针扎一次, 同时 X, YR 偏移运动dx,dy,dr 框步进式运动或连续运动
#define DATA_SECF_SEW 0x11 // 第二框缝纫
#define DATA_SECF_OFST 0x12 // 第二框偏移
#define DATA_SECF_SEW_R 0x16 // 第二框右机头缝纫,该数据需要缝纫机针扎一次(主轴可以转动多圈(如果有跳针功能的话)), 同时 X, YR 偏移运动dx,dy,dr 框步进式运动或连续运动
// 兼容DSR控制码
#define DATA_SYNCSEW 0x07 // 同步缝纫数据, 该数据需要缝纫机针扎一次, 同时 X, YR 偏移运动 dx,dy,drX2, 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, YR 偏移运动 dx,dy,dr 框步进式运动或连续运动
#define DATA_PUNCH 0x0C // 冲孔数据, 该数据需要冲孔主轴运转一圈,同时 X, YR 偏移 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, YR 偏移 dx,dy,dr
#define DATA_SKNIFE 0x24 // 震刀数据, 该数据需要震刀先运转,同时 X, YR 偏移 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