Files

203 lines
5.7 KiB
C++

#ifndef PRINTSETTING_H
#define PRINTSETTING_H
#include <QWidget>
#include <QPushButton>
#include <QXmlStreamWriter>
#include "PulseNumFix.h"
#include "scene/CounterEditor.h"
namespace Ui {
class PrintSetting;
}
/**
* @brief 从sysPara中提取的某些用于跟随工作文件保存的打印设置
*
*
* @remark
* 字段声明位置按照类型长度降序排列,用于在紧凑内存对齐的状态下尽量提升性能
* 所以看声明顺序有点奇怪
* 使用紧凑内存对齐的原因是为了方便直接映射为字符串,方便保存
*/
struct PrintSettingModel
{
int timeTriggerPrintMode = 0; // 间隔模式, 0: 行末-> 行首 1: 行首对行首 ,韩国人要求只保留一个,所以应该固定为 0
/**
* 触发间隔。
* 时延模式,指间隔多久打印一次。单位ms,
* 电眼 + 同步器模式: 根据 eleEyeRepeatCnt 设定的重复次数,确定重复间隔,单位长度mm
* 电眼模式:根据 eleEyeRepeatCnt 设定的重复次数,确定重复间隔,单位是时间 ms
* 同步器模式:重复间隔,单位长度 mm
* */
unsigned triggerInterval = 100;
unsigned eleEyeRepeatCnt = 1; // 电眼触发时,打印内容的次数,也就是重复数
bool unlimitedRepeat = false; // 无限重复打印
unsigned triggerMode = 0; // 触发模式
float encoderPulsePerMm = 40; // 编码器的每毫米脉冲数
double encoderDiameter = 10; // 编码器的直径,单位毫米
double encoderPulsePerCycle = 5000; // 编码器每圈的脉冲数
unsigned printColDelay = 6; // 打印列延迟,(字宽)
unsigned short volParaIndex = 0; // 喷印模式的索引, 决定选择哪组电压参数
unsigned short eleEyeTriggerPrintDelay = 0; // 0x38 电眼 + 同步器模式下,电眼触发后,同步打印延迟时间,单位:毫秒
unsigned short altMirrorGap = 0; // 镜像交替间隔, 单位:喷印个数
unsigned short eleMaskTime = 0; // 电眼封锁时间或距离 单位ms或mm
/**
* 同步器的正反转模式
* 0:正反转打印
* 1:只正转打印
* 2:只反转打印
* 3:带补偿的正转打印
* 4:带补偿的反转打印
*/
unsigned char syncTriggerMode = 0;
unsigned char mode0211 = 1; // 0211模式
unsigned char highVoltageAmplitude = 75; // 界面显示 字高,但是名字叫 高压振幅? 谁解释一下
unsigned char altMirrorType = 0; // 镜像交替模式
unsigned char pulseOutputEnable = 0; // 脉冲输出使能
unsigned int productCntPerOutputPulse = 0; // 多少个产品产生一个输出脉冲
unsigned short outputPulseDelayMs = 0; // 输出脉冲延时
unsigned short OuputPulseCol = 0; // 在第几列输出脉冲
unsigned short pulse_sinal_value = 0; // 脉冲信号值
bool leftRightInverse = false; // 信息左右颠倒
bool upDownInverse = false; // 信息上下颠倒
bool eleEyeTriggerSynPrintEn = false;
CounterSettings cnt1Settings; // 计数器1 配置
CounterSettings cnt2Settings; // 计数器2 配置
static void loadFromXml(PrintSettingModel& model, const QXmlStreamAttributes& attrs);
static void saveToXml(const PrintSettingModel& model, QXmlStreamWriter& writer);
static void applyToSysPara(const PrintSettingModel& model, SysPara* sysPara);
static PrintSettingModel fromSysPara(SysPara* sysPara);
static QString toString(const PrintSettingModel& model);
static PrintSettingModel defPrintSettingModel();
static void setDefPrintSettingModel(const PrintSettingModel& model);
};
class PrintSetting : public QWidget
{
Q_OBJECT
public:
explicit PrintSetting(QWidget *parent = 0);
~PrintSetting();
QPushButton* m_closeBtn;
QPushButton* m_checkBtn;
void updateModelFromUI();
void updateModelToUI();
void bindSysPara(SysPara *sysPara);
void updateSysStatusToUI();
void setTriggerUI(int triggerMode);
void setSynPrintMode(int mode);
void on_pushButtonApply_pressed();
void TriggerupdateModelToUI();
void setEnableEleEyeSetting(bool);
void setEnableSynTriggerSetting(bool);
void applyPrintSettingsToSysPara(bool showTip = true);
PrintSettingModel model() const;
void setModel(const PrintSettingModel& model);
void setDefaultSettingMode(bool enable);
bool isDefaultSettingMode() const {
return m_isDefaultSettingMode;
}
private slots:
void buttonClickedSlot();
void updateTriggerPPM();
void onPulseNumFixDone(float);
void on_lineEditTriggerPulsePerMm_textChanged(const QString &arg1);
void on_radioButtonSynTrigger_pressed();
void on_radioButtonDelayTrigger_pressed();
void on_radioButtonEleEyeEdgetTrigger_pressed();
void on_radioButtonEleEyeLevelTrigger_pressed();
void on_checkEyeTriggerSynPrintEn_clicked(bool checked);
void on_eleEyeEdgetTriggerInner_clicked();
void on_eleEyeEdgetTriggerExternal_clicked();
void on_radioButtonSynTriggerInner_clicked();
void on_radioButtonEleEyeEdgetTrigger_clicked();
void on_radioButtonEleEyeLevelTrigger_clicked();
void on_radioButtonSynTriggerExternal_clicked();
void on_checkBoxPulseOutputEnable_clicked(bool checked);
void on_cb_unlimited_clicked(bool checked);
private:
Ui::PrintSetting *ui;
PrintSettingModel m_model;
SysPara *sysPara = nullptr;
PulseNumFix *pulseNumFix;
bool isPulseEenable = false;
bool m_isDefaultSettingMode = false;
void init();
void applyStyleSheet(); // 应用样式表
signals:
void sendButtonClickedSignal(int index);
};
#endif // PRINTSETTING_H