EmbHMI/machine/comm/datadef.h
2024-02-06 14:27:07 +08:00

622 lines
19 KiB
C
Raw 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 "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, 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 // 换色功能码 lxs 20220628添加
#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_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