#ifndef __DATADEF_H__ #define __DATADEF_H__ #include "typedef.h" #include "config.h" //------------------------------------------------------------------------- #define PATTERN_LARGE_NEEDLES 1280000 // 绝对位置数据 typedef struct { u8 ctrl; //控制字节 u8 attr; //属性字节 WORD action;//控制动作 double ax; //X位置 double ay; //Y位置 double ar; //R角度 }__attribute__ ((packed)) DsAbsItem; typedef struct { QList absItemList; }LineItem; // 画图格式数据 typedef struct { u8 ctrl;//控制字节 u8 attr;//属性字节 WORD action;// 附加动作 double bx, by;//绘制起点,第一机头 double ex, ey;//绘制终点,第一机头 double bx2, by2;//绘制起点,第二机头 double ex2, ey2;//绘制终点,第二机头 s32 ar;//角度 u32 rgb; }__attribute__ ((packed)) DispItem; // 编辑花样格式数据 typedef struct { u8 ctrl;//控制字节 u8 attr;//属性字节 WORD action;// 附加动作 double bx, by;//绘制起点 double ex, ey;//绘制终点 s16 ar;//角度 }__attribute__ ((packed)) ViewItem; //刀压测试的获取XY增益参数 typedef struct { s16 GapArray[25][20]; // X*Y u16 enFlag; // 参数有效标志 u8 cellx; // X向格子数 u8 celly; // Y向格子数 s16 xcellgap; // X向格子间距,单位mm s16 ycellgap; // Y向格子间距,单位mm s16 collectStartX; // X向采集起始位置,单位mm s16 collectStartY; // Y向采集起始位置,单位mm u16 rev[0x200-25*20-6]; } __attribute__ ((packed)) KnifeGapPara; //机头间距表地址 typedef struct { unsigned char iswork; //1-8机头是否工作 unsigned char doubleHead; //双机头 unsigned short int distance1_2; //机头2和机头1的机头间距(单位0.1mm,范围0-5000.0) unsigned short int distance1_3; unsigned short int distance1_4; unsigned short int distance1_5; unsigned short int distance1_6; unsigned short int distance1_7; unsigned short int distance1_8; }__attribute__ ((packed)) HeadTable; // 画图格式数据 typedef struct { u8 ctrl;//控制字节 u8 attr;//属性字节 WORD action;// 附加动作 s16 bx, by;//绘制起点 s16 ex, ey;//绘制终点 s16 ar;//角度 HeadTable headtable; u32 rgb; }__attribute__ ((packed)) Disp_HeadItem; // 执行数据定义 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; // ds8格式 typedef struct { u8 ctrl; // 控制字节 u8 attr; // 属性字节 s16 dx; // X偏移 s16 dy; // Y偏移 s16 dr; // R偏移 }__attribute__ ((packed)) Ds8Item; // 兼容dsr格式 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_OFFSET_SEC 0x12 // 第二机头偏移(右机头偏移) #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 // 换色功能码 lxs 20220628添加 #define DATA_SYNCOFST 0x0F // 同步偏移数据 #define DATA_MIRROR_SEC 0x17 // 镜像缝纫数据 #define DATA_MIRROR_OFT_SEC 0x1F // 镜像偏移数据 #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_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_END 0x80 // 结束码 #define DATA_PAUSE 0x81 // 暂停功能码 #define DATA_CHGND 0x82 // 换色 #define DATA_CUTTRD 0x83 // 剪线功能码 #define DATA_SYNC_CUTTER 0x88 // 左右机头剪线,下位机取名叫 DATA_CUTTRD_R #define DATA_CUTTER_SEC 0x87 // 右机头剪线,下位机取名叫 DATA_CUTTRD_L #define DATA_ANGLE 0x89 // 拐点 // atrr, 属性字节,作为运动属性字节 // 缝纫针步的属性定义: // attr.7, 夹线力度等级H // attr.6, 夹线力度等级L // attr.5, 保留 // attr.4, 缝纫回针标志 // attr.3, 压脚高度等级H // attr.2, 压脚高度等级L // attr.1, 速度等级H // attr.0, 速度等级L #define ATTR_CLAMP_LV 0xC0 // 夹线力度等级 #define ATTR_RESEW 0x10 // 回针标志 #define ATTR_FOOT_LV 0x0C // 压脚高度等级 #define ATTR_SPD_LV 0x03 // 速度等级 // 缝纫针步的属性定义: // dx, x向偏移值, 有符号数, 范围为 -32768--32767, 单位为 0.01mm // dy, y向偏移值, 有符号数, 范围为 -32768--32767, 单位为 0.01mm // dr, r向偏移值, 有符号数, 范围为 -32768--32767, 单位为 0.0001 弧度 // len, xy 分量的合成长度,无符号数,范围0--65535, 单位为 0.01mm #define HEAD_NAME_STR_LEN 0x20 #define HEAD_FIX_INFO_LEN 0x32 // 铣刀的属性定义: // 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 // 铣刀刀压深度调整掩码 #pragma pack(1)//设定为1字节对齐 //ds16头文件-发给下位机的 typedef struct { // 0x00 char fileName[32]; // 文件名称 // 0x20 u32 dataSize; // 数据字节数 u32 itemNums; // 数据项个数 u16 bytesPerItem; // 每项占的字节数 u16 bytesPerBlk; // 数据内容划分块大小 u32 dataChecksum; // 数据累加校验和 u16 checkCrc; // 前面6个字段的CRC校验,(6个字段分别为:文件名称,字节数,项个数,每项字节数,每块字节数,数据累加和的CRC校验值) // 0x32 u16 rev0; u32 fileid; // 文件唯一标识符,识别是否为同一个文件 // 0x38 u8 reserved1[0x40-0x38]; // 保留区1 // 0x40 s32 anchorX; // 定位点坐标X s32 anchorY; // 定位点坐标Y // 0x48 s32 beginX; // 数据起点坐标X s32 beginY; // 数据起点坐标Y s32 beginR; // 数据起点坐标R // 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; // 数据起点坐标Z2 // 0x80 u32 runAct; // 附加动作, // bit0: 0:完成后不拍照 1:完成后拍照 // 0x84 // bit0,偏移点X向允许 0,不允许 1,允许 // bit1,偏移点Y向允许 0,不允许 1,允许 // bit2,反复优先级 0,X向优先 1,Y向优先 // bit3,二次剪线 0,不允许 1,允许 u32 EnFlag; // 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 u8 reserved2[0x200-0x9A]; // 0x200 u8 switchNeedleTable[0x400-0x200]; // 色序设定表, 支持512个色序设定 }__attribute__ ((packed)) DataDs16FileHead;//下发给主控的ds16文件头 #pragma pack(1)//恢复对齐状态 typedef struct { // 0 char HMIVerStr[16]; // 界面版本 // 4 u32 machineNumber; // 机器编号 // 5 u16 motorNum; //电机个数 u16 debugProgress; //调试进度 // 6 char fileName[32]; // 文件名称 #if(0) // 52 char sensorStartBtn; // 启动按钮1 char sensorStopBtn; // 暂停按钮1 char sensorJogBtn; // 点动按钮1 char sensorMainFrameXZeroPos; // 主框架X零位 char sensorMainFrameYZeroPos; // 主框架Y零位 char sensorMainFrameXNegLimit; // 主框架X负限位 char sensorMainFrameYNegLimit; // 主框架Y负限位 char sensorMainFrameXPosLimit; // 主框架X正限位 char sensorMainFrameYPosLimit; // 主框架Y正限位 char sensorScissorsReturn; // 剪刀回位 #endif //14 char deliveryTime[32]; //交付日期 //22 u32 workProgress; //机器工作进度(花样执行进度) //26 u32 workState; //工作状态 //27 u32 startPins; //开始针数 //28 u32 endPins; //结束针数 //29 quint64 startTime; //开始时间 //31 quint64 endTime; //结束时间 //33 u32 outCounter; //产量统计 //34 u32 rev2[256-34]; } __attribute__ ((packed)) HMILotData; // 界面物联网数据 //------------------------------------------------------------------------- // 升级文件头 typedef struct { // 0x00 char fileName[32]; // 文件名称 // 0x20 u32 dataSize; // 数据字节数 u32 dataChecksum; // 数据累加校验和 // 0x28 u8 reserved1[0x30-0x28]; // 保留区1 // 0x30 u8 reserved2[0x64-0x30]; // 保留区1 // 0x64 u8 reserved3[0x80-0x64]; // 保留区2 // 0x80 u8 reserved4[0x100-0x80]; }__attribute__ ((packed)) AppFileHead; // 文件参数结构 typedef struct { // 0x00 u8 hdIdenti[0x40]; // 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; // 数据起点坐标Z2 // 0x80 u8 reserved0[0x200-0x80]; // 0x200 u8 reserved1[0x400-0x200]; }__attribute__ ((packed)) DataFilePara; typedef struct { s32 anchorX; // 定位点坐标X s32 anchorY; // 定位点坐标Y s32 beginX; // 数据起点坐标X s32 beginY; // 数据起点坐标Y }__attribute__ ((packed)) DataFilePos; //------------------------------------------------------------------------- // 文件执行参数结构 typedef struct { u32 newIdx; s32 newXPos; s32 newYPos; s32 newRPos; u32 newColorIdx; // 新针位 u32 rev[256-5]; }__attribute__ ((packed)) FileExecPara; //------------------------------------------------------------------------- //参数文件头 struct ParaFile { unsigned char s_head[4] ; // 默认 PARA int s_type ; // 默认 0 int s_len ; // 数据 默认 4096 unsigned int s_para_buff[1024] ; //工作 参数体 unsigned short s_crc ; //参数体的CRC unsigned short rev ; //预留 保持 结构体四字节对齐 }; //------------------------------------------------------------------------- #endif