#ifndef __DATADEF_H__ #define __DATADEF_H__ #include "typedef.h" #include "config.h" //------------------------------------------------------------------------- #define PATTERN_LARGE_NEEDLES 1280000 #pragma pack(1)//设定为1字节对齐 // 绝对位置数据 typedef struct { u8 ctrl; //控制字节 u8 attr; //属性字节 WORD action;//控制动作 double ax; //X位置 double ay; //Y位置 double ar; //R角度 }__attribute__ ((packed)) DsAbsItem; // 画图格式数据 typedef struct { u8 ctrl;//控制字节 u8 attr;//属性字节 u8 action[2]; //附加动作 s16 bx, by;//绘制起点 s16 ex, ey;//绘制终点 s16 ar;//角度 u32 rgb; }__attribute__ ((packed)) DispItem; // 执行数据定义 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; #define BEADRADIUS 150 //散珠或亮片半径(用于绘制图形) #define TOWELRADIUS 200 //毛巾半径(用于绘制图形) // 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 // 换色功能码 lxs 20220628添加 #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_CHENILLE 0x41 // 毛巾绣的环式数据 #define DATA_CHAIN 0x42 // 毛巾绣的链式数据 #define DATA_TOWELHIGH 0x43 // 毛巾绣的高度数据 #define DATA_COIL 0x44 // 缠绕数据 #define DATA_SAWTOOTH 0x45 // 锯齿数据 #define DATA_RIBBON 0x46 // 盘带数据 #define DATA_END 0x80 // 结束码 #define DATA_PAUSE 0x81 // 暂停功能码 #define DATA_CHGND 0x82 // 绣花换针杆功能码(换色) #define DATA_CUTTRD 0x83 // 剪线功能码 #define DATA_ANGLE 0x89 // 拐点 #define DATA_OPEN_SEQUIN 0xFE // 开关亮片功能码(中转数据) #define DATA_UNKNOW 0xFF // 未定义(中转数据) // atrr, 属性字节,作为运动属性字节 // 缝纫针步的属性定义: // 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 #define BEADSEQUINTYPE 0x20 //珠片码的种类,31种,第一个为预留 // 数据文件头 typedef struct { // 0x00 char fileName[32]; // 文件名称 // 0x20 u32 dataSize; // 数据字节数 u32 itemNums; // 数据项个数 u16 bytesPerItem; // 每项占的字节数 u16 bytesPerBlk; // 数据内容划分块大小 u32 dataChecksum; // 数据累加校验和 // 0x30 u16 checkCrc; // 前面6个字段的CRC校验,(6个字段分别为:文件名称,字节数,项个数,每项字节数,每块字节数,数据累加和的CRC校验值) // 0x32 u8 begHead; //以哪种类型的机头定点 之前是u8 u8 reserved0; // 0x34 52 u32 fileid; // 文件唯一标识符,识别是否为同一个文件 // 0x38 u8 reserved1[0x40-0x38]; // 保留区 // 0x40 64 s32 anchorX; // 定位点坐标X s32 anchorY; // 定位点坐标Y // 0x48 s32 beginX; // 数据起点坐标X s32 beginY; // 数据起点坐标Y s32 beginR; // 数据起点坐标Z // 0x54 //84 s32 minX; s32 maxX; s32 minY; s32 maxY; // 轮廓范围 //用于存储适用于下位机的反复绣设置,需要7个字节 //0x64 u8 mcXRepeatNum;//x向反复次数 //0x65 s16 mcXRepeatSpace;//x向反复间距 //0x67 u8 mcYRepeatNum;//y向反复次数 //0x68 s16 mcYRepeatSpace;//y向反复间距 //0x6A u8 mcPriority;//反复优先级 // 0x6B u8 reserved2[0x74-0x6B]; // 保留区 // 0x74 116 s32 coloLockrNeedle; //换色锁针针数 // 0x78 120 s32 jumpNeedleChange; // 跳针变越框锁针针数(用于跳针前后加锁针) // 0x7C 124 s32 minStep; //合并小针步时的针步大小(过滤) // 0x80 128 s32 rotateStyle; //旋转式样 //132 s32 horizontalStyle; //水平翻转式样 //136 s32 verticalStyle; //垂直翻转式样 //140 s32 rotateAngle; //旋转角度 //144 s32 xZoom; //X向倍率 //148 s32 yZoom; //Y向倍率 //152 s32 repeatStyle; //反复方式 //156 s32 priority; //优先次序 //160 s32 xRepeatNum; //X向反复次数 //164 s32 yRepeatNum; //Y向反复次数 //168 s32 xRepeatSpace; //X向反复间距 //172 s32 yRepeatSpace; //Y向反复间距 //176 s32 stepCompensation; //针步补偿 //180 s32 xCompensate; //X向补偿 //184 s32 yCompensate; //Y向补偿 //188 s32 lockNeedlesNum; //锁针次数 //192 s32 lockNeedlesStepNum; //锁针步数 //196 s32 lockNeedlesStepLength; //锁针针步长度 //200 s32 combineMode; //双头组合模式 //204 s32 breakLineParkNum; //断线停车次数 //绣花机中需要插入跳针的针步大小,不用计入参数id, //因为此值变化数据步数会变,从而改变了fileid //208 //0xD0 u16 convertJumpStepSize; //210 //0xD2 u16 jumpStepSize; //212 //0xD4 u16 pleatedMode;//是否为褶绣模式 //214 //0xD6 u8 reserved3[0x118-0xD6];//保留 //280 0x118 u32 offsetEn; // bit0,偏移点X向允许 0,不允许 1,允许 // // bit1,偏移点Y向允许 0,不允许 1,允许 // // bit2,平绣数据有无 0,无 1,有 // // bit3,激光数据有无 0,无 1,有 // // bit4,毛巾链式数据有无 0,无 1,有 // // bit5,缠绕锯齿盘带数据有无 0,无 1,有 // 284 //0x11C s32 offsetX; // 偏移点X // 288 // 0x120 s32 offsetY; //292 0x124 s32 threeCombineMode; //三头组合模式 //296 0x128 u8 reserved4[0x1E0-0x128];//保留 //原来是0xD0 //0x1E0 u8 beadSequinTable[BEADSEQUINTYPE]; // 珠片码与散珠/亮片动作码对应表 // 0x200 u8 switchTable[0x400-0x200]; // 色序设定表, 支持512个色序设定 }__attribute__ ((packed)) DataFileHead;//中间数据(fcg) //ds16头文件 typedef struct { // 0x00 char fileName[32]; // 文件名称 // 0x20 u32 dataSize; // 数据字节数 u32 itemNums; // 数据项个数 u16 bytesPerItem; // 每项占的字节数 u16 bytesPerBlk; // 数据内容划分块大小 u32 dataChecksum; // 数据累加校验和 // 0x30 u16 checkCrc; // 前面6个字段的CRC校验,(6个字段分别为:文件名称,字节数,项个数,每项字节数,每块字节数,数据累加和的CRC校验值) // 0x32 u8 begHead; //以哪种类型的机头定点 之前是u8 u8 reserved0; // 0x34 u32 fileid; // 文件唯一标识符,识别是否为同一个文件 // 0x38 u32 jumpNeedleNum; // 跳针数(绣花机) u16 colorNum; // 颜色数(绣花机) u16 towelHighNum; // 毛巾高度数 // 0x40 s32 anchorX; // 定位点坐标X s32 anchorY; // 定位点坐标Y // 0x48 s32 beginX; // 数据起点坐标X s32 beginY; // 数据起点坐标Y s32 beginR; // 数据起点坐标Z // 0x54 //84 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:完成后拍照 // 132//0X84 u32 offsetEn; // bit0,偏移点X向允许 0,不允许 1,允许 // // bit1,偏移点Y向允许 0,不允许 1,允许 // // bit2,平绣数据有无 0,无 1,有 // // bit3,激光数据有无 0,无 1,有 // // bit4,毛巾链式数据有无 0,无 1,有 // // bit5,缠绕锯齿盘带数据有无 0,无 1,有 // // bit6,反复优先级 0,X向优先 1,Y向优先 // 136 //0x88 s32 offsetX; // 偏移点X // 140 // 0x8C 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 reserved3[0x100-0x9A]; // 0x100 u8 reserved4[0x200-0x100]; // 0x200 u8 switchTable[0x400-0x200]; // 色序设定表, 支持512个色序设定 }__attribute__ ((packed)) DataDs16FileHead;//下发给主控的ds16文件头 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; // 界面物联网数据 //------------------------------------------------------------------------- #define HEADBUF 8192 //512x16 #define PATCHCOLORBUF 512 //512(u16) #define PATCHNEEDLEBUF 10 #define TOWELHIGHBUF 1024 //贴布绣按针参数结构体 struct NeedlePatch { u32 needleIdx; u16 move; }; // 数据文件头 typedef struct { DataFileHead fileHead; // 数据文件头 u8 colorOrderEmbHead[HEADBUF]; // 隔头 每个色序对应的16个机头是否开启 // u8 ifPatch;//是否设置了贴布绣 u16 patchColorEmb[PATCHCOLORBUF]; // 贴布绣 每个色序对应的设置位置 NeedlePatch patchNeedleEmb[PATCHNEEDLEBUF]; // 贴布绣 针数索引对应的设置位置 }__attribute__ ((packed)) cfgDataFileHead; //开位线绣节点坐标 struct OpenLineNode { int nodeX; int nodeY; }; typedef struct { s32 rotateStyle; //旋转式样 s32 rotateAngle; //旋转角度 s32 xZoom; //X向倍率 s32 yZoom; //Y向倍率 s32 repeatStyle; //反复方式 s32 priority; //优先次序 s32 xRepeatNum; //X向反复次数 s32 yRepeatNum; //Y向反复次数 s32 xRepeatSpace; //X向反复间距 s32 yRepeatSpace; //Y向反复间距 s32 lockNeedlesNum; //锁针次数 s32 lockNeedlesStepNum; //锁针针步 s32 lockNeedlesStepLength; //锁针针步长度 s32 xCompensate; //X向补偿 s32 yCompensate; //Y向补偿 } __attribute__ ((packed)) PatternParaStruct; //------------------------------------- // 花样参数类型定义 // 升级文件头 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 char fileName[32]; // 文件名称 // 0x20 u32 dataSize; // 数据字节数 u32 dataChecksum; // 数据累加校验和 u8 protocol; // 文件要发给的协议类型 u8 nodeid; // 文件要发给的节点ID,0为广播 u8 fileType; // 文件类型 u8 nodeType; // 文件要发给的节点类型 -rq // 0x2C u8 reserved1[0x30-0x2C]; // 保留区1 // 0x30 u8 reserved2[0x64-0x30]; // 保留区2 // 0x64 u8 reserved3[0x80-0x64]; // 保留区3 // 0x80 u8 reserved4[0x100-0x80]; // 保留区4 }__attribute__ ((packed)) BoardFileHead; // 文件参数结构 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 reserved3[0x200-0x80]; // 0x200 u8 switchNeedleTable[0x400-0x200]; // 色序设定表, 支持512个色序设定 }__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 newHighIdx; // 新高度(绣花机毛巾高度) u32 mvFrameFlag; // 移框标志 u32 rev[256-7]; }__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 ; //预留 保持 结构体四字节对齐 }; // 组合文件的文件头 typedef struct strCombHead { // 0x00 - 0x03 u32 totalFilesNum; //组合的总的文件数 // 0x04 u32 fileByte[0x100-0x04]; //用于保存每个文件的字节数 }__attribute__ ((packed)) CombHead; //------------------------------------------------------------------------- //#pragma pack(1)//设定为1字节对齐 //------------------------------------------------------------------------- #endif