第一次提交

This commit is contained in:
华海艳 2024-02-06 14:58:57 +08:00
commit 6bb609026d
166 changed files with 135961 additions and 0 deletions

10
Lot/csvcode.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef CSVCODE_H
#define CSVCODE_H
//平绣机
#define CSV_CODE_1 0x0001 //全部归零
#define CSV_CODE_2 0x0002 //平绣勾线
#define CSV_CODE_3 0x0003 //主轴点动
#define CSV_CODE_4 0x0004 //回工作点
#endif // CSVCODE_H

208
XPlatForm.pro Normal file
View File

@ -0,0 +1,208 @@
#-------------------------------------------------
#
# Project created by Qt5.9.1 2021-03-08T08:42:36
# created by HUAHAIYAN
#-------------------------------------------------
TEMPLATE = app
TARGET = XPlatForm
CONFIG += c++11
CONFIG += resources_big
QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
OBJECTS_DIR += obj
MOC_DIR += moc
UI_DIR += forms
RCC_DIR += rccs
#昆仑通态操作屏设置时间的库
unix:LIBS +=-L/usr/local/MCGS/sysroot-mcgs/usr/lib -lmcgs-hal
FORMS += \
sharedviews/controlactionwidget.ui \
sharedviews/numerinputdialog.ui \
sharedviews/parametersetdialog.ui \
sharedviews/passworddialog.ui \
sharedviews/patternmanagewidget.ui \
sharedviews/patternselectwidget.ui \
sharedviews/promptdialog.ui \
sharedviews/sensorinputwidget.ui \
sharedviews/systemmanagedialog.ui \
sharedviews/wordsinputdialog.ui \
mctype/patternsingleboard/mainUI/mainwidget.ui \
sharedviews/sheetwidget.ui \
sharedviews/setworkarea.ui \
sharedviews/brokenlinedialog.ui \
sharedviews/colorordersetwidget.ui \
sharedviews/debuginfodialog.ui \
sharedviews/needlebarsetwidget.ui \
sharedviews/rotacomwidget.ui \
sharedviews/debugviews/debugdialog.ui \
sharedviews/debugviews/dialogneedleshuttle.ui \
sharedviews/debugviews/dialogcutline.ui \
sharedviews/debugviews/dialogdiecutter.ui
HEADERS += \
main.h \
items/paraitem.h \
items/sensoritem.h \
machine/comport.h \
machine/error.h \
machine/machine.h \
machine/qbindtcpsocket.h \
machine/tcpclient.h \
machine/comm/comm.h \
machine/comm/config.h \
machine/comm/crc16.h \
machine/comm/crc32.h \
machine/comm/datadef.h \
machine/comm/protocol.h \
machine/comm/typedef.h \
machine/qextserial/qextserialbase.h \
machine/qextserial/qextserialport.h \
datafile/datafiledst.h \
datafile/embdata.h \
datafile/datafiledsr.h \
items/outctrlitem.h \
items/shortcutitem.h \
items/cmdconfig.h \
items/fileitem.h \
settings/settings.h \
sharedviews/controlactionwidget.h \
sharedviews/numerinputdialog.h \
sharedviews/parametersetdialog.h \
sharedviews/passworddialog.h \
sharedviews/patternmanagewidget.h \
sharedviews/patternselectwidget.h \
sharedviews/promptdialog.h \
sharedviews/sensorinputwidget.h \
sharedviews/systemmanagedialog.h \
sharedviews/wordsinputdialog.h \
sharedviews/mybutton.h \
mctype/mainwidgetfunction.h \
sharedviews/setcontrolstyle.h \
datafile/dsrcryption.h \
items/itemsmanage.h \
items/assistitem.h \
items/patternsetitem.h \
mctype/patternsingleboard/mainUI/mainwidget.h \
settings/lotsettings.h \
machine/lotmachine.h \
items/parasetitem.h \
mctype/machinetypefun.h \
sharedviews/sheetwidget.h \
machine/gatewaytcpclient.h \
items/errorcodestateitem.h \
sharedviews/setworkarea.h \
sharedviews/brokenlinedialog.h \
Lot/csvcode.h \
sharedviews/colorordersetwidget.h \
mctype/patternsingleboard/function/punchmachine.h \
mctype/patternsingleboard/function/punchsewembmachine.h \
mctype/patternsingleboard/function/punchsewmachine.h \
sharedviews/debuginfodialog.h \
sharedviews/needlebarsetwidget.h \
mctype/patternsingleboard/function/autopospunchmachine.h \
mctype/patternsingleboard/function/adhesivemachine.h \
sharedviews/rotacomwidget.h \
sharedviews/debugviews/debugdialog.h \
sharedviews/debugviews/dialogneedleshuttle.h \
items/debugitem.h \
sharedviews/debugviews/dialogcutline.h \
sharedviews/debugviews/dialogdiecutter.h \
mctype/patternsingleboard/function/templatesewmachine.h
SOURCES += \
main.cpp \
items/paraitem.cpp \
items/sensoritem.cpp \
machine/comport.cpp \
machine/error.cpp \
machine/machine.cpp \
machine/qbindtcpsocket.cpp \
machine/tcpclient.cpp \
machine/comm/comm.cpp \
machine/comm/crc16.cpp \
machine/comm/crc32.cpp \
machine/qextserial/qextserialbase.cpp \
machine/qextserial/qextserialport.cpp \
datafile/datafiledst.cpp \
datafile/embdata.cpp \
datafile/datafiledsr.cpp \
items/outctrlitem.cpp \
items/shortcutitem.cpp \
items/fileitem.cpp \
settings/settings.cpp \
sharedviews/controlactionwidget.cpp \
sharedviews/numerinputdialog.cpp \
sharedviews/parametersetdialog.cpp \
sharedviews/passworddialog.cpp \
sharedviews/patternmanagewidget.cpp \
sharedviews/patternselectwidget.cpp \
sharedviews/promptdialog.cpp \
sharedviews/sensorinputwidget.cpp \
sharedviews/systemmanagedialog.cpp \
sharedviews/wordsinputdialog.cpp \
sharedviews/mybutton.cpp \
mctype/mainwidgetfunction.cpp \
sharedviews/setcontrolstyle.cpp \
datafile/dsrcryption.cpp \
items/itemsmanage.cpp \
items/assistitem.cpp \
items/patternsetitem.cpp \
mctype/patternsingleboard/mainUI/mainwidget.cpp \
machine/lotmachine.cpp \
items/parasetitem.cpp \
mctype/machinetypefun.cpp \
sharedviews/sheetwidget.cpp \
machine/gatewaytcpclient.cpp \
items/errorcodestateitem.cpp \
sharedviews/setworkarea.cpp \
sharedviews/brokenlinedialog.cpp \
sharedviews/colorordersetwidget.cpp \
mctype/patternsingleboard/function/punchmachine.cpp \
mctype/patternsingleboard/function/punchsewembmachine.cpp \
mctype/patternsingleboard/function/punchsewmachine.cpp \
sharedviews/debuginfodialog.cpp \
sharedviews/needlebarsetwidget.cpp \
mctype/patternsingleboard/function/autopospunchmachine.cpp \
mctype/patternsingleboard/function/adhesivemachine.cpp \
sharedviews/rotacomwidget.cpp \
sharedviews/debugviews/debugdialog.cpp \
sharedviews/debugviews/dialogneedleshuttle.cpp \
items/debugitem.cpp \
sharedviews/debugviews/dialogcutline.cpp \
sharedviews/debugviews/dialogdiecutter.cpp \
mctype/patternsingleboard/function/templatesewmachine.cpp
#windows下调用库
#win32:LIBS += $$PWD/../../HMI-Widget/XPlatform/Dll/Machine.dll
#win32:LIBS += $$PWD/../../HMI-Widget/XPlatform/Dll/DataFileComb.dll
#linux下调用库
#unix:LIBS += $$PWD/../../HMI-Widget/XPlatform/Dll/Machine
#RESOURCES += \
# bf.qrc
unix:INSTALLS += target
unix:target.path=/storage/oprt
TRANSLATIONS += chinese.ts\
english.ts
unix:HEADERS += machine/qextserial/posix_qextserialport.h
unix:SOURCES += machine/qextserial/posix_qextserialport.cpp
unix:DEFINES += _TTY_POSIX_
win32:HEADERS += machine/qextserial/win_qextserialport.h
win32:SOURCES += machine/qextserial/win_qextserialport.cpp
win32:DEFINES += _TTY_WIN_

297
XPlatForm.pro.user.37f85c8 Normal file
View File

@ -0,0 +1,297 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.5.1, 2024-01-25T09:15:00. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{37f85c89-6fa5-437b-ab42-a8f793baa331}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap"/>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Arm</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Arm</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{5193437b-bed9-404f-9b07-632a0d6f24f0}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/hgfs/workQT/punching/arm</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/hgfs/workQT/punching/arm</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Check for free disk space</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.CheckForFreeDiskSpaceStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedFiles"/>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedHosts"/>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedRemotePaths"/>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedSysroots"/>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedTimes"/>
<value type="QString" key="RemoteLinux.CheckForFreeDiskSpaceStep.PathToCheck">/</value>
<value type="qulonglong" key="RemoteLinux.CheckForFreeDiskSpaceStep.RequiredSpace">5242880</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Upload files via SFTP</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.DirectUploadStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedFiles"/>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedHosts"/>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedRemotePaths"/>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedSysroots"/>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedTimes"/>
<value type="bool" key="RemoteLinux.GenericDirectUploadStep.IgnoreMissingFiles">false</value>
<value type="bool" key="RemoteLinux.GenericDirectUploadStep.Incremental">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy to Remote Linux Host</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">DeployToGenericLinux</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">1</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">XPlatForm (on Remote Device)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinuxRunConfiguration:XPlatForm</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.Arguments"/>
<value type="QString" key="Qt4ProjectManager.MaemoRunConfiguration.TargetName">XPlatForm</value>
<value type="QString" key="RemoteLinux.RunConfig.AlternateRemoteExecutable"></value>
<value type="bool" key="RemoteLinux.RunConfig.UseAlternateRemoteExecutable">false</value>
<value type="QString" key="RemoteLinux.RunConfig.WorkingDirectory"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">18</value>
</data>
<data>
<variable>Version</variable>
<value type="int">18</value>
</data>
</qtcreator>

BIN
chinese.qm Normal file

Binary file not shown.

19409
chinese.ts Normal file

File diff suppressed because it is too large Load Diff

4
csvcode.h Normal file
View File

@ -0,0 +1,4 @@
#ifndef CSVCODE_H
#define CSVCODE_H
#endif // CSVCODE_H

1379
datafile/datafiledsr.cpp Normal file

File diff suppressed because it is too large Load Diff

225
datafile/datafiledsr.h Normal file
View File

@ -0,0 +1,225 @@
#ifndef DATAFILEDSR_H
#define DATAFILEDSR_H
#include <QFileInfo>
#include <QFile>
#include <QString>
#include <QByteArray>
#include <QImage>
#include <QDebug>
#include <QPainter>
#include <QRgb>
#include "math.h"
#include <QBrush>
#include <QLinearGradient>
#include "dsrcryption.h"
#include "machine/comm/datadef.h"
#include "machine/comm/crc16.h"
//-----------------------------------------------
#define MAX_WIDTH_OF_DBZ 70 // 摆针最大范围7mm
#define MIN_WIDTH_OF_DBZ 2 // 摆针最小范围0.2mm
#define MAX_HEIGHT_OF_SBZ 40 // Y最大范围4mm
#define MIN_HEIGHT_OF_SBZ 8 // Y最小范围0.8mm
#define DSR_PREVIEW_SIDE (15) // 留边大小
#define DSR_PREVIEW_WIDTH (156) // 默认预览图区域宽度
#define DSR_PREVIEW_HEIGHT (164) // 默认预览图区域高度
#define DSR_VERSION_5 5.00f
#define DSR_VERSION_5_5 5.50f
//异形冲孔形状
// 各种数据类型
struct tempDs16Item
{
double ax ;
double ay ;
double ar ;
};
//冲孔图形
struct ChongKongObj
{
u32 nIdKey;
u8 refColor[4];
u32 countPt;
u32 zhuCount;
s32 gruopIndexArray[500];
tempDs16Item pointList[500];
};
struct KongDaoInfo
{
u32 colorId;
u8 refColor[4];
float widthX;
float heightY;
u8 biValue;
ChongKongObj pChongKongObj;
};
struct KongCount
{
u8 biColorID;
KongDaoInfo pKongDaoInfo;
};
typedef struct strDsrHead
{
// 0x00
DWORD verCode; // 文件版本 LSB
DWORD cryWord; // 加密字
BYTE reserved1[8]; // 保留 8 字节
// 0x10
DWORD dataBegin; // 数据起始 LSB
DWORD stepSize; // 数据字段大小
DWORD xyUnit; // 长度数据单位
DWORD rUnit; // 角度数据单位
// 0x20
DWORD stitches; // 针数 LSB
DWORD fileID; // 文件id,和智能识别有关 = 0, 不能识别
BYTE reserved3[8]; // 保留 8 字节
// 0x30
s32 rangeNx; // 范围 -X LSB
s32 rangePx; // 范围 +X LSB
s32 rangeNy; // 范围 -Y LSB
s32 rangePy; // 范围 +Y LSB
// 0x40
long startX; // 起点坐标X LSB
long startY; // 起点坐标Y LSB
long anchorX; // 定位点X LSB
long anchorY; // 定位点Y LSB
// 0x50
DWORD angleFix; // 角度修正量
// 0x54
BYTE reserved4[0x77-0x54]; // 保留字节
//0x77
u32 shapeAddress ; //形状地址
//0x7B
BYTE reserved5[0x88-0x7B]; // 保留字节
//0x88 //136
s32 offsetX; // 偏移点X
// //0x8C //140
s32 offsetY;
// //0x90 //144
u8 reserved6[0x200-0x90]; //BYTE // 保留字节
// 0x200
u8 switchTable[0x400-0x200]; //BYTE // 色序设定表, 支持512个色序设定
}__attribute__ ((packed)) DsrHead;
typedef struct strDsrStep
{
BYTE ctrl; // 控制字节
BYTE attr; // 属性字节
WORD action;// 附加动作
s32 dx; // X绝对偏移
s32 dy; // Y绝对偏移
s32 dr; // R角度
}__attribute__ ((packed)) DsrStep;
//-----------------------------------------------
#define DSR_NULL 0x00 // 文件结束
#define DSR_SEWING 0x01 // 缝纫数据
#define DSR_OFFSET 0x02 // 偏移数据
#define DSR_CUTTING 0x03 // 切刀数据
#define DSR_LASER 0x04 // 激光数据
#define DSR_DRAWING 0x05 // 记号数据
#define DSR_SEWING_R 0x06 // 第二缝纫数据
#define DSR_PAUSE 0x08 // 暂停
#define DSR_ANGLE 0x09 // 拐点
#define DSR_CUT 0x0A // 剪线
#define DSR_JUMP 0x0B // 跳针
#define DSR_PUNCH 0x0C // 冲孔
#define DSR_EMB 0x0D // 绣花
#define DSR_CHGND 0x0E // 换色
#define DSR_END 0x10 // 结束码
//-----------------------------------------------
#define DSR_DATADIRX (1) // X向数据坐标与下位机坐标系统的差异
#define DSR_DATADIRY (1) // Y向数据坐标与下位机坐标系统的差异
#define DSR_DATADIRR (1) // R向数据坐标与下位机坐标系统的差异
#define DSR_SHOWDIRX (-1) // X向显示坐标和数据坐标的差异
#define DSR_SHOWDIRY (1) // Y向显示坐标和数据坐标的差异
class DataFileDsr
{
public:
DataFileDsr();
~DataFileDsr();
public:
void initColor(int cnum = 0, QRgb * pColor = NULL);
void initFile(const QString & fullPathName);
int checkDsrVersion();//检查dsr文件版本非5.2以上版本和错误格式返回-1
void convertDataToEmbAbs(); // 转换为绝对数据
//是否保存 //笔宽
int createPreviewImage(QImage * pImg = NULL, int saveflag = 0, int penwidth = 1, int reDraw = 0); // 生成预览文件
int createPunchShapeData(QString filePath); // 生成冲刀形状数据
int createPunchShapeImage(QImage * pImg = NULL, int idx = 0); // 生成冲刀形状预览图
public:
void clear();
void loadFile();
void saveFile();
void writePointToFile(int x, int y, int flag = 0);//写入起始点到文件中
void writeOffsetXYMoveToFile(s32 offsetX,s32 offsetY);//偏移点XY写回dsr头文件
inline const QString & getFileFullPathName() const {return m_fileFullPathName;} // 文件路径名称
inline QByteArray & getFileData() {return m_fileData;} // 得到文件数据
inline QByteArray & getEmbAbsData() {return m_embAbsData;} // 得到转换后的数据
QString getFileFullPath(); // 文件所在目录
QString getFileFullName(); // 文件名称(包括扩展名)
QString getFileName(); // 文件名称(不包括扩展名)
QString getFileSuffix(); // 文件扩展名
int getStitchNums();//得到数据的针数
int getColorNums();//得到数据的色数
int getFileid();//得到fileid
int getDatWidth();//得到数据的图形宽度
int getDatHeight();//得到数据的图形高度
int getMaxX();//得到数据最大X+
int getMinX();//得到数据最小X-
int getMaxY();//得到数据最大Y+
int getMinY();//得到数据最小Y-
int getAnchorX();
int getAnchorY();
int getBeginX();
int getBeginY();
int getBeginXYAndAnchorXY(QString path, int &beginX, int &beginY, int &anchorX, int &anchorY);
void getSwitchTable(u8 * table);
protected:
QString m_fileFullPathName; // 文件路径
QByteArray m_embAbsData; // 转换后的绝对坐标数据
private:
QByteArray m_fileData;// 文件数据内容(原始数据)
int m_colorNum;//颜色数
QRgb * m_pColor;//颜色rgb值
QString m_fileName; // 文件路径
QList<KongCount> m_punchCountList;
private:
int m_minX;
int m_maxX;
int m_minY;
int m_maxY;
private:
int checkFileCryption();//检查dsr文件是否加密
void getDsrMinMax();
private:
int checkDefaultSwitchTable(int colornum = 0);
};
#endif // DATAFILEDSR_H

1168
datafile/datafiledst.cpp Normal file

File diff suppressed because it is too large Load Diff

153
datafile/datafiledst.h Normal file
View File

@ -0,0 +1,153 @@
#ifndef DATAFILEDST_H
#define DATAFILEDST_H
#include <QFileInfo>
#include <QFile>
#include <QString>
#include <QByteArray>
#include <QImage>
#include <QDebug>
#include <QPainter>
#include <QRgb>
#include "math.h"
#include <QBrush>
#include <QLinearGradient>
#include "main.h"
#include "machine/comm/datadef.h"
#include "machine/comm/crc16.h"
#define DATAFACTOR 10 //dst绝对坐标数据转换为ds16前需要扩大10倍
#define DST_DATADIRX (1) // X向数据坐标与下位机坐标系统的差异
#define DST_DATADIRY (-1) // Y向数据坐标与下位机坐标系统的差异
#define DST_SHOWDIRX (-1) // X向显示坐标和数据坐标的差异
#define DST_SHOWDIRY (1) // Y向显示坐标和数据坐标的差异
#define DST_PREVIEW_SIDE (15) // 留边大小
#define DST_PREVIEW_WIDTH (156) // 默认预览图区域宽度
#define DST_PREVIEW_HEIGHT (164) // 默认预览图区域高度
// dst文件头
#pragma pack(1)//设定为1字节对齐
struct DstHead
{
// 0
char la[20];
char st[11];
char co[7];
char xp[9];
char xn[9];
char yp[9];
char yn[9];
char ax[10];
char ay[10];
char mx[10];
char my[10];
char pd[10];
char sub;
char reserved1[3];
// 128 // 自定义,存储色序
u8 switchTable[256-128]; //BYTE // 色序设定表, 支持128个色序设定缝绣机
// 256
s16 reserved2;
// 258
int anchorX; //定位点
int anchorY;
// 266
s32 startX; //起始点
s32 startY;
// 274
u8 reserved3;
//278
u32 reserved4;
//282
s32 offsetX; // 偏移点X
// 286
s32 offsetY;
//290
u8 reserved5[512-290]; //BYTE // 保留字节
};
#pragma pack(1)//恢复对齐状态
// 针步数据
typedef struct strDstStep
{
u8 c1; ////BYTE
u8 c2; ////BYTE
u8 c3; ////BYTE
}__attribute__ ((packed)) DstStep;
class DataFileDst
{
public:
DataFileDst();
~DataFileDst();
public:
void initColor(int cnum = 0, QRgb * pColor = NULL);
void initFile(const QString & fullPathName);
int createPreviewImage(QImage * pImg = NULL, int saveflag = 0, int penwidth = 1, int reDraw = 0); // 生成预览文件
void convertDataToAbs(); // 转换为绝对坐标数据
void writePointToFile(int x, int y, int flag = 0);//写入起始点到文件中
void writeOffsetXYMoveToFile(s32 offsetX,s32 offsetY);
int checkDstFile();//检查dst文件是否正确
public:
void clear();
void loadFile();
void saveFile();
inline const QString & getFileFullPathName() const {return m_fileFullPathName;} // 文件路径名称
inline QByteArray & getFileData() {return m_fileData;} // 得到文件数据
inline QByteArray & getEmbAbsData() {return m_embAbsData;} // 得到转换后的数据
QString getFileFullPath(); // 文件所在目录
QString getFileFullName(); // 文件名称(包括扩展名)
QString getFileName(); // 文件名称(不包括扩展名)
QString getFileSuffix(); // 文件扩展名
int getStitchNums();//得到数据的针数
int getColorNums();//得到数据的色数
int getFileid();//得到fileid
int getDatWidth();//得到数据的图形宽度
int getDatHeight();//得到数据的图形高度
int getMaxX();//得到数据最大X+
int getMinX();//得到数据最小X-
int getMaxY();//得到数据最大Y+
int getMinY();//得到数据最小Y-
int getAnchorX();
int getAnchorY();
int getBeginX();
int getBeginY();
int getBeginXYAndAnchorXY(QString path, int &beginX, int &beginY, int &anchorX, int &anchorY);
void getSwitchTable(u8 * table);
protected:
QString m_fileFullPathName; // 文件路径
QByteArray m_embAbsData; // 转换后的绝对坐标数据
private:
QByteArray m_fileData;// 文件数据内容(原始数据)
int m_colorNum;//颜色数
QRgb * m_pColor;//颜色rgb值
QString m_fileName; // 文件路径
private:
double m_minX;
double m_maxX;
double m_minY;
double m_maxY;
private:
int checkDefaultSwitchTable(int colornum = 0);
int changeDstStep(DstStep * pDststep, Ds4Item & ds4step);
};
#endif // DATAFILEDST_H

319
datafile/dsrcryption.cpp Normal file
View File

@ -0,0 +1,319 @@
#include "dsrcryption.h"
#include <QString>
#include <QTime>
DsrCryption::DsrCryption()
{
m_initflag = 0;
m_cryword = 0;
memset(m_factors, 0, BYTES_OF_CRY_FACTORS);
}
// 初始化加密控制, 生成加密字和加密因子
int DsrCryption::InitDsrCryptionCtrl(int version, unsigned int cryword, const unsigned char * factors)
{
int rslt = 0;
m_initflag = 0;
m_cryword = 0;
memset(m_factors, 0, BYTES_OF_CRY_FACTORS);
if (version >= 0)
{
rslt = CreateCryWord(version);
}
else
{
m_cryword = cryword;
}
if (rslt == 0)
{
rslt = CreateCryFactors(factors);
}
if (rslt == 0)
{
m_initflag++;
}
return rslt;
}
// 获取加密字
unsigned int DsrCryption::GetDsrCryptionWord()
{
return m_cryword;
}
// 加密数据
int DsrCryption::EnCryption(unsigned char * pData, int size)
{
if (pData == NULL || size <= 0)
{
return -1;
}
unsigned char thisfactors[BYTES_OF_CRY_FACTORS];
unsigned char tempbuff[BYTES_OF_CRY_FACTORS];
memcpy(thisfactors, m_factors, BYTES_OF_CRY_FACTORS); // 拷贝临时的加密因子,做计算用
int i, j;
for (i = 0; i < size; i += BYTES_OF_CRY_FACTORS)
{
// 拷贝数据到临时buff
int mv = 0;
for (j = 0; j < BYTES_OF_CRY_FACTORS; j++)
{
if (i+j < size)
{
tempbuff[j] = pData[i+j]; // 拷贝数据
}
else
{
tempbuff[j] = 0;
}
mv += thisfactors[j]; // 累加因子,作为移动因子
}
// 移动数据
if (i + BYTES_OF_CRY_FACTORS < size)
{
// 生成移动索引
unsigned char mvidx[BYTES_OF_CRY_FACTORS];
int idx, setdidx = BYTES_OF_CRY_FACTORS-1;
for (j = 0; j < BYTES_OF_CRY_FACTORS; j++)
{
idx = (mv >> j) & 0x1f;
for (int k = 0; k < j; k++)
{
if (mvidx[k] == idx)
{
idx = setdidx;
do
{
int kk;
for (kk = 0; kk < j; kk++)
{
if (mvidx[kk] == idx)
{
break;
}
}
if (kk < j)
{
idx--;
}
else
{
setdidx = idx-1;
break;
}
} while(1);
break;
}
}
mvidx[j] = idx;
}
// 移动数据
unsigned char tempdat[BYTES_OF_CRY_FACTORS];
memcpy(tempdat, tempbuff, BYTES_OF_CRY_FACTORS);
for (j = 0; j < BYTES_OF_CRY_FACTORS; j++)
{
tempbuff[j] = tempdat[mvidx[j]];
}
}
// 数据加密
for (j = 0; i+j < size && j < BYTES_OF_CRY_FACTORS; j++)
{
tempbuff[j] ^= thisfactors[j]; // 异或加密
pData[i+j] = tempbuff[j]; // 保存
}
// 下次的变幻因子
int temp = 0;
for (j = 0; j < BYTES_OF_CRY_FACTORS; j++)
{
temp += thisfactors[j];
temp *= 3;
temp += 1;
temp /= 2;
thisfactors[j] = temp;
}
}
return 0;
}
// 解密数据
int DsrCryption::DeCryption(unsigned char * pData, int size)
{
if (pData == NULL || size <= 0)
{
return -1;
}
if (pData == NULL || size <= 0)
{
return -1;
}
unsigned char thisfactors[BYTES_OF_CRY_FACTORS];
unsigned char tempbuff[BYTES_OF_CRY_FACTORS];
memcpy(thisfactors, m_factors, BYTES_OF_CRY_FACTORS);
int i, j;
for (i = 0; i < size; i += BYTES_OF_CRY_FACTORS)
{
// 拷贝数据到临时buff
int mv = 0;
for (j = 0; j < BYTES_OF_CRY_FACTORS; j++)
{
if (i+j < size)
{
tempbuff[j] = pData[i+j]; // 拷贝数据
}
else
{
tempbuff[j] = 0;
}
mv += thisfactors[j]; // 累加因子,作为移动因子
}
// 数据解密
for (j = 0; i+j < size && j < BYTES_OF_CRY_FACTORS; j++)
{
tempbuff[j] ^= thisfactors[j];
}
// 数据移动回去
if (i + BYTES_OF_CRY_FACTORS < size)
{
// 生成移动索引
unsigned char mvidx[BYTES_OF_CRY_FACTORS];
int idx, setdidx = BYTES_OF_CRY_FACTORS-1;
for (j = 0; j < BYTES_OF_CRY_FACTORS; j++)
{
idx = (mv >> j) & 0x1f;
for (int k = 0; k < j; k++)
{
if (mvidx[k] == idx)
{
idx = setdidx;
do
{
int kk;
for (kk = 0; kk < j; kk++)
{
if (mvidx[kk] == idx)
{
break;
}
}
if (kk < j)
{
idx--;
}
else
{
setdidx = idx-1;
break;
}
} while(1);
break;
}
}
mvidx[j] = idx;
}
// 移动数据
unsigned char tempdat[BYTES_OF_CRY_FACTORS];
memcpy(tempdat, tempbuff, BYTES_OF_CRY_FACTORS);
for (j = 0; j < BYTES_OF_CRY_FACTORS; j++)
{
tempbuff[mvidx[j]] = tempdat[j];
}
}
// 保存解密数据
for (j = 0; i+j < size && j < BYTES_OF_CRY_FACTORS; j++)
{
pData[i+j] = tempbuff[j]; // 保存
}
// 下次的变幻因子
int temp = 0;
for (j = 0; j < BYTES_OF_CRY_FACTORS; j++)
{
temp += thisfactors[j];
temp *= 3;
temp += 1;
temp /= 2;
thisfactors[j] = temp;
}
}
return 0;
}
// 生成加密字
int DsrCryption::CreateCryWord(int version)
{
if (version < 0 || version > 250)
{
return -1;
}
int rdw;
if (version == 0)
{
rdw = 0;
}
else
{
QTime time= QTime::currentTime();
qsrand(time.msec()+time.second()*1000);
rdw = qrand(); // 产生随机数
}
m_cryword = rdw & 0xffffff;
m_cryword *= 251;
m_cryword += version;
return 0;
}
// 生成加密因子
int DsrCryption::CreateCryFactors(const unsigned char * factors)
{
if (factors == NULL)
{
return -1;
}
memcpy(m_factors, factors, BYTES_OF_CRY_FACTORS);
int * pDat = (int*)m_factors;
// 变幻加密因子,兼容非加密情况
for (int i = 0; i < BYTES_OF_CRY_FACTORS; i+=sizeof(int))
{
*pDat *= m_cryword;
pDat++;
}
return 0;
}

33
datafile/dsrcryption.h Normal file
View File

@ -0,0 +1,33 @@
#ifndef DSRCRYPTION_H
#define DSRCRYPTION_H
#define CRY_VERSION1 0x01
#define CRY_VERSION2 0x02
#define CUR_CRY_VERSION 0x01 // 当前的加密版本(取值范围为 0 -- 250方便通过版本使用不同的加密方法。
#define BYTES_OF_CRY_FACTORS 32 // 加密因子字节数
class DsrCryption
{
public:
DsrCryption();
public:
int InitDsrCryptionCtrl(int version, unsigned int cryword, const unsigned char * factors); // 初始化加密控制, 自动生成生成加密字和加密因子
unsigned int GetDsrCryptionWord(); // 获取加密字
int EnCryption(unsigned char * pData, int size); // 加密数据,使用当前的加密字和加密因子
int DeCryption(unsigned char * pData, int size); // 解密数据,使用当前的加密字和加密因子
private:
int CreateCryWord(int version); // 生成加密字
int CreateCryFactors(const unsigned char * factors); // 生成加密因子
private:
int m_initflag;
unsigned int m_cryword;
unsigned char m_factors[BYTES_OF_CRY_FACTORS];
};
#endif // DSRCRYPTION_H

2876
datafile/embdata.cpp Normal file

File diff suppressed because it is too large Load Diff

190
datafile/embdata.h Normal file
View File

@ -0,0 +1,190 @@
#ifndef EMBDATA_H
#define EMBDATA_H
#include <QList>
#include <QByteArray>
#include <QApplication>
#include <QDir>
#include <QImage>
#include <qmath.h>
#include <QDebug>
#include <QFile>
#include <QFileInfo>
#include <QPainter>
#include <QObject>
#include <QRgb>
#include "machine/comm/datadef.h"
#include "machine/comm/crc16.h"
#define TOTAL_NEEDLE_NUM 49//总的针杆数,绣花32个(1-32),冲孔16个(33-48),缝纫1个(49)
#define EMB_NEEDLE_NUM 32//绣花32个针杆
#define PUNCH_NEEDLE_NUM 16//冲孔16个针杆
#define SEW_NEEDLE_NUM 1 //缝纫1个针杆
#define PREVIEW_SIDE (32) // 留边大小
#define TENTHOUSANDNEEDLE 100000
#define SHOWDIRX (-1) // X向显示坐标和数据坐标的差异
#define SHOWDIRY (1) // Y向显示坐标和数据坐标的差异
#define COLOR_GREY 186 //纯灰色的rgb
#define PREVIEW_SIDE (32) // 留边大小
#define PI10000 31416
#define PI20000 62832
class EmbData: public QObject
{
Q_OBJECT
public:
EmbData();
~EmbData();
public:
void clear();
void initColor(int cnum = 0, QRgb * pColor = NULL);//初始化颜色
QByteArray & getDsDat();//得到转换后的ds16数据
inline DataDs16FileHead * getDsDatHead(){return m_pDs16Head;}//得到转换后的ds16数据的文件头
void setDsDatHeadFileID(u32 fileid);//设置数据区文件头的fileid
void appendAbsFile(QString filePath,QByteArray array,int mirror = 0);//附加一个绝对坐标的花样文件
void getAbsDatRangeXY();//得到绝对坐标的maxXY和minXY
int addLockStitchs(int locktimes, int locksteps, int lockstepsize);//加锁针
int addContinuousRunCompensate(int value, int idx = -1);//连续动框补偿
public:
inline QString getFileName(){return m_pDs16Head->fileName;}//得到花版名称
inline int getStitchNums(){return m_pDs16Head->itemNums;}//得到数据的针数
inline u32 getColorNums(){return m_pDs16Head->colorNumber;}//得到数据的色数
inline int getDatWidth(){return m_pDs16Head->maxX - m_pDs16Head->minX;}//得到数据的图形宽度
inline int getDatHeight(){return m_pDs16Head->maxY - m_pDs16Head->minY;}//得到数据的图形高度
inline int getMaxX(){return m_pDs16Head->maxX;}//得到数据最大X+
inline int getMinX(){return m_pDs16Head->minX;}//得到数据最小X-
inline int getMaxY(){return m_pDs16Head->maxY;}//得到数据最大Y+
inline int getMinY(){return m_pDs16Head->minY;}//得到数据最小Y-
inline int getBeginX(){return m_pDs16Head->beginX;}//得到数据起始点
inline int getBeginY(){return m_pDs16Head->beginY;}//得到数据起始点
inline int getAnchorX(){return m_pDs16Head->anchorX;}//得到数据定位点
inline int getAnchorY(){return m_pDs16Head->anchorY;}//得到数据定位点
inline int getPunchNum(){return m_pDs16Head->punchNum;}//得到总的冲孔个数
public:
QByteArray getColorTable();//得到数据的色序表
void setAbsDat(QByteArray & dat);
QByteArray & getAbsDat(void);
void setDs16ColorOfTable(u8* table); //改变色序颜色
int getPosInfoFromNeedleIdx(int stitchIdx, int & posx, int & posy, int & posr, int & colorIdx);
int getPosInfoFromColorIdx(int & stitchIdx, int & posx, int & posy, int & posr, int colorIdx);
int getNeedleIdxFromColorIdx(int & needleIdx, int colorIdx, u8 & stepCtrl);
void setNeedleColorTable(int colorIdx, int colorvalue); //针杆颜色
void setStartPosition(int x, int y);//设置起始点
void setAnchorPosition(int x, int y);//设置定位点
void setSplitStitchLength(int length = 0);
public:
int setDatSizeChange(int dsx, int dsy, int idx = -1);//设置尺寸变化
int setMirror(int mirror, int idx = -1);//设置镜像
int setFLip(int mirror, int idx = -1);//设置垂直翻转
int setNeedleTipCompensation(s16 correct = 0); // 旋转机头针尖补偿
int setRotate(int dr, int idx = -1);//设置旋转
int setToMiddle(int idx = -1);//设置居中
int setDatMove(int dx, int dy, int idx = -1);//设置数据移动
private:
//此函数转换传入的绝对坐标值,是否取镜像及反复时数据之间的间距
void convertAbsDat(QByteArray & dat,int mirror = 0);
int createDs16FromAbs();//生成DS16数据
int reCalcDataChecksum();//重新计算文件CRC
QByteArray intTo2ByteArray(s16 value);//短整型转换为byte
void drawNeedleIdxPen(int x, int y, QPainter &painter);//绘制针数索引的跟踪笔
void eraseNeedleIdxPen(QPainter &painter);//擦除针数索引的跟踪笔
public:
int m_editedflag;//数据被编辑的标志
int m_spaceX;//横向间隙
int m_spaceY;//纵向移动距离
int m_stitchSplitLength;
double m_minX;
double m_maxX;
double m_minY;
double m_maxY;
double m_factor;//绘制数据与实际数据的缩放率
int m_tabelColorNum;//颜色数
QRgb * m_pColor;//颜色rgb
s16 m_needleColorTable[TOTAL_NEEDLE_NUM];//针杆颜色索引
QByteArray m_colortab;//发给下位机的数据(需要转换)
private:
QByteArray m_absData; // 转换后的绝对坐标数据
QList <QByteArray> m_dataAbsList;//文件绝对位置列表
QByteArray m_ds16Data;//发给下位机的ds16数据需要转换
int m_totalJumpNeedle;//总跳针数
DataDs16FileHead * m_pDs16Head;//ds16 文件头 //数据转换用的都是DataDs16FileHead
u8 m_startSerrPos;//起针锯齿位置
int m_showColorBeg;
int m_showColorEnd;
int m_greyColorBeg;
int m_greyColorEnd;
//图形预览、刷新
public:
//显示所有线迹(原色显示)
//显示所有线迹(有效区域内的显示原色,其余显示灰色)
//显示所有线迹(执行过的显示原色,其余显示灰色)
//刷新部分线迹(缝纫中进度显示)
enum DISP_MODE {DISP_ALL_NORMAL = 0, DISP_ALL_AREA, DISP_ALL_EXEC, DISP_EXECING};
enum DRAW_MODE {DRAW_VIEW = 0, DRAW_PREVIEW};//绘制模式(非预览模式、预览模式)
public:
int setViewInfo(int width, int height);//设置视图尺寸(透明背景)
void setViewInfo(QPixmap pix);//设置视图(带背景图片背景)
//重新重置ds16数据(换色点击取消后数据会变为单个图元的原数据,
//若图形经过变换数据会不对换色界面保存了最后的数据和XY范围
//若点击换色并取消后恢复为换色界面最后保存的数据即可)
void reSetEmbData(QByteArray ary);
void reSetEmbDataRange(int maxX,int minX,int maxY,int minY);
void setEmbData(int redraw = 0);//重置数据
//是否重绘 //是否为渐变
void setDispMode(DISP_MODE dispmode = DISP_ALL_NORMAL, int redraw = 0);//设置预览模式
void setDrawMode(DRAW_MODE drawmode = DRAW_VIEW);//设置绘制模式
void setGreyAreaRange(int begin, int end);//设置灰色区域显示
void setDispAreaRange(int begin, int end, int redraw = 0);//设置区域显示参数
void setExecIndex(int index);//设置进度显示数据
void reDraw();//重新绘图
public:
inline QPixmap getPreviewImage(){return m_canvas;}//返回预览图片
private:
int createDispFromDs16Dat(QByteArray & ds16dat);//创建显示用的数据(为了快速显示)
int drawImageByDispFile();//用显示数据画图
private:
int m_penX, m_penY;//执行过程中绘制跟踪笔的坐标索引
QPixmap m_canvas;
QPixmap m_penPix;//跟踪笔绘制的临时区域
int m_viewWidth;
int m_viewHight;
QString m_filePath;//文件路径
private:
QByteArray m_dispDat;//绘制图形的绝对数据(进行缩放的)
int m_stitchIndex;
int m_dispIndex;
DISP_MODE m_dispMode;
DRAW_MODE m_drawMode;
signals:
void siDrawNeedleIdx(int idx);
};
#endif // EMBDATA_H

BIN
english.qm Normal file

Binary file not shown.

19407
english.ts Normal file

File diff suppressed because it is too large Load Diff

43
items/assistitem.cpp Normal file
View File

@ -0,0 +1,43 @@
#include "assistitem.h"
AssistItem::AssistItem(QObject *parent) : QObject(parent)
{
clean();
}
AssistItem::~AssistItem()
{
clean();
}
AssistItem::AssistItem(const AssistItem & item) : QObject()
{
copyData(item);
}
AssistItem & AssistItem::operator= (const AssistItem & item)
{
copyData(item);
return *this;
}
void AssistItem::clean()
{
m_macType = 0;
m_showPriority = 0;
m_name.clear();
m_topImageName.clear();
m_enumFunction = 0;
}
void AssistItem::copyData(const AssistItem &item)
{
if (this != &item)
{
this->m_macType = item.m_macType;
this->m_showPriority = item.m_showPriority;
this->m_name = item.m_name;
this->m_topImageName = item.m_topImageName;
this->m_enumFunction = item.m_enumFunction;
}
}

36
items/assistitem.h Normal file
View File

@ -0,0 +1,36 @@
#ifndef ASSISTITEM_H
#define ASSISTITEM_H
#include <QObject>
class AssistItem : public QObject
{
Q_OBJECT
public:
explicit AssistItem(QObject *parent = 0);
~AssistItem();
public:
AssistItem(const AssistItem & item);
AssistItem & operator= (const AssistItem & item);
public:
void clean();
private:
void copyData(const AssistItem & item);
public:
int m_macType; // 机器类型
int m_showPriority; // 显示优先级
QString m_name; // label名称
QString m_topImageName; // 顶图图标logo名称
int m_enumFunction; // 对应的事件的枚举值
signals:
public slots:
};
#endif // ASSISTITEM_H

256
items/cmdconfig.h Normal file
View File

@ -0,0 +1,256 @@
#ifndef CMDCONFIG_H
#define CMDCONFIG_H
//点击触发型参数枚举(超级用户参数、软件设置参数、网络管理参数等)
enum CLICK_ALL_FUNCTION {
ROOT_HMICONFIGURATION = 0, //界面配置
ROOT_MACHINEPARA, // 机器参数
ROOT_WORKPARA, // 工作参数
ROOT_TRAVERSESET , // 遍历设置
ROOT_AUTOSETSOFTLIMIT, // 自动定软限位
ROOT_PATTERNPARAMETERS, //花样参数
ROOT_LOCKTEST , // 锁头测试
ROOT_HOOKTEST,
ROOT_CLEARPATTERN, //花样总清
ROOT_RESOLUTION, //分辨率
ROOT_DEBUGMODE, //界面进入调试模式
ROOT_MACTYPE, //机器类型
ROOT_PRODUCTTYPE, //产品类型
ROOT_WATERMARKSET, //主背景水印设置(是否带水印)
ROOT_WIFI,
ROOT_PARASORTSET, //参数分类设置(是否分类)
ROOT_HMIDECRYPT, // 界面解密
ROOT_TROKECORRECTION, // 行程矫正
ROOT_SKIPEFFECT, // 跳针生效
ROOT_CHANGEPASSWORD, //修改一级密码
ROOT_IOTCONFIGURATION, //物联网配置-物联网配置
ROOT_GATEWAYCONNECTIONMETHOD, //物联网配置-网关连接方式
ROOT_RACKNUMBERINPUT, //物联网配置-机架号输入
ROOT_NETWORKSETTINGS, //物联网配置-网络设置
ROOT_DELIVERYTIME, //物联网配置-工厂预计交货时间
ROOT_DEBUGPROGRESS, //物联网配置-调试进度
ROOT_DELETEINI, //删除配置文件
ROOT_IMPORTCSV , //导入CSV文件
ROOT_DELETECSV , //删除CSV文件
ROOT_RESETCSV , //重置安装调试进度
ROOT_HIGH_SPEED_SWITCHING,//高低速切换
ROOT_FRAMEANGLESETTING, //动框角度设置
ROOT_SPINDlLEGEARRATIO,//主轴齿轮比测试
ROOT_FRAMEIMPORTPARA, //动框参数导入
ROOT_FRAMEEXPORTPARA, //动框参数导出
ROOT_CLEARPATTERNFCG_FILEID, //清除花样fcg文件影响fileid的数据
PSE_SOFTWAREPARA_IMPORTPARA, // 参数导入
PSE_SOFTWAREPARA_EXPORTPARA, // 参数导出
PSE_SOFTWAREPARA_HMIUPDATE, // 界面升级
PSE_SOFTWAREPARA_MCUPDATE, // 主控升级
PSE_SOFTWAREPARA_EXIT // 退出程序
};
//此头文件定义了常用功能的枚举
enum SHORTCUT_FUNCTION {
FUN_ALLTOZERO = 1, // 全部归零
FUN_SPINDLEENABLE, // 主轴使能
FUN_SPINDLEDISABLE, // 主轴失能
FUN_SPINDLETEST, // 主轴研车
FUN_BACKWORKPOINT, // 回工作点
FUN_BACKANCHORPOINT, //回定位点
FUN_BACKTHREADPOINT, //回穿线点
FUN_SETOFFSETPOINT, // 定偏移点
FUN_BACKOFFSETPOINT, // 回偏移点
FUN_SETSTARTPOINT, // 第一机头(主机头)定起始点
FUN_SETANCHORPOINT, // 第一机头(主机头)定定位点
FUN_BACKSTARTPOINT, // 回起始点
FUN_CHECKFRAME, // 边框检查
FUN_FORWARDORBACK, // 前进回退
FUN_PROCESSRESET, //流程复位
FUN_PATTERNSELECT, // 花样选择
//冲孔机
FUN_PUNCHSPINDLEJOG, // 冲孔主轴点动
FUN_PUNCHMANUALCHANGECOLOR, // 冲孔手动换色
FUN_PUNCHNEEDLEZERO, // 冲孔换杆归零
FUN_SINGLEPUNCH, //单次冲孔
FUN_FRAMEZERO, //框架归零
FUN_MOVETORIGHTUP, //去右上角
FUN_MOVETORIGHTDOWN, //去右下角
FUN_MOVETOLEFTUP, //去左上角
FUN_MOVETOLEFTDOWN, //去左下角
FUN_SETWORKRANGE, //定工作范围
FUN_TESTPOTENTIOMETER,// 测试电位器 xcy 1024
FUN_PUNCHSTOPLOWER, //冲头停下位
FUN_DRAWOUTLINE, //画轮廓线 xcy20220909
FUN_AUTOSETSTARTPOINT, // 自动定起始点
FUN_OILSUPPLY ,//连续供油
FUN_PUNCH_ROT_TO_ZERO,//冲孔旋转去零位
FUN_ROTATECOMPENSATE, //旋转补偿
//冲缝机
FUN_SEWSPINDLETEST, // 缝纫主轴研车
FUN_SEWMOTORUPDOWN, // 缝纫机头升降
FUN_SEWSPINDLEJOG, // 缝纫主轴点动
FUN_SEWHOOKPOSITION, // 缝纫主轴去勾线位
FUN_ROTATEPROOFREAD, //缝纫旋转校对
FUN_SECSETSTARTPOINT, // 次机头(第二机头)定起始点-冲缝机冲孔为次机头
FUN_SECSETANCHORPOINT, // 次机头(第二机头)定定位点-冲缝机冲孔为次机头
FUN_SELECTSEWHEAD, // 切换缝纫机头
FUN_SELECTPUCNHHEAD, // 切换冲孔机头
FUN_SEWHEADCUTLINEO, // 机头1剪线
FUN_SEWHEADCUTLINET, // 机头2剪线
FUN_NEEDLECONTRAST, // 针梭校对
FUN_NEEDLESHUTTLERESET, //针梭复位
FUN_BACKSHUTTLEPOS, //回换梭位
FUN_NEEDLERESET, //针复位
FUN_SHUTTLERESET, //梭复位
FUN_SEWROTATEUP, //缝纫旋转+
FUN_SEWROTATEDOWN, //缝纫旋转-
FUN_RETURNTOCENTERPOINT,// 回中心点
//压胶机
FUN_RESETALL , // 全部复位
FUN_MOTORZEROING, // 电机归零
FUN_STATION1GLUING, // 工位1涂胶
FUN_STATION2GLUING, // 工位2涂胶
FUN_HEADUPDOWN, // 机头升降
FUN_TOSTATION1APOS, //回工位1起始点
FUN_TOSTATION2APOS, //回工位2起始点
FUN_WORKPAUSE, //暂停工作
FUN_TO_WAITTING_POS , // 回等料点
FUN_TO_REMOVE_GLUE_POS , // 回排胶点
FUN_REMOVE_GLUE_ONCE , // 排一次胶
FUN_ADJUST_GLUE_HEGHT ,//校准胶管高度
//冲缝绣
FUN_EMBHOOKPOSITION, // 平绣主轴去勾线位
FUN_SEWEMBSPINDLETEST, //绣花主轴研车
FUN_SEWEMBSPINDLEJOG, //绣花主轴点动
FUN_SEWEMBCHANGECOLOR, //绣花换色
FUN_THRIDSETSTARTPOINT, //第三机头定起始点-冲缝绣时绣花为三机头
FUN_THRIDSETANCHORPOINT, //第三机头定定位点-冲缝绣时绣花为三机头
FUN_SELECTEMBHEAD, //切换绣花机头
FUN_SEWEMBCUTLINE, //绣花剪线
FUN_NULL // 无功能 无功能应该放在最后一位,因为常用功能得最大值就是无功能,否则无法一一对应
};
//辅助功能的枚举
enum ASSIST_FUNCTION {
ASSIST_SENSOR = 1, // 传感器信号
ASSIST_CONTROLACTION, // 控制动作
ASSIST_HMIUPGRADE, // 界面升级
ASSIST_MCUPGRADE, // 主控升级
ASSIST_PARAIMPORT, // 参数导入
ASSIST_PARAEXPORT, // 参数导出
ASSIST_SOFTWARESET, // 软件设置
ASSIST_AUTHORIZATION, // 软件授权
ASSIST_NETWORK, // 网络管理
ASSIST_WIFI, // WIFI管理
ASSIST_NEEDLESET, // 针杆设置
ASSIST_TIMESET, // 时间设置
ASSIST_SHORTCUTSET, // 常用设置
ASSIST_PRODUCTSTATICS, // 生产统计
ASSIST_LOGFILE,//文件日志
ASSIST_ERRORLOG,//错误日志
ASSIST_BREAKAGELOG,//断线日志
ASSIST_MCVERSION, // 版本信息
ASSIST_BOTTOMLINEDETECT, //底线检测
ASSIST_FACELINEDETECT, //面线检测
ASSIST_DEBUG, //调试功能
ASSIST_ROOT, //超级用户
ASSIST_SHUTDOWN, //关机
ASSIST_WKPARAIMPORT, // 工作参数导入
ASSIST_BOTTOMLINECOUNTRESET, // 底线计数复位
ASSIST_PARACONTRAST, // 参数对比
ASSIST_NULL // 无功能
};
//花样设置功能的枚举
enum PATTERNSET_FUNCTION {
PATTERNSET_PATTERNSELECT = 1, // 花样选择
PATTERNSET_PATTERNPARA, // 花样参数
PATTERNSET_PATTERNCOLOR, // 花样色序
PATTERNSET_PATTERNIMPORT, // 花样导入
PATTERNSET_PATTERNEXPORT, // 花样导出
PATTERNSET_PATTERNDELETE, // 花样删除
PATTERNSET_PATTERNSELECT_STATION1, // 工位1花样选择
PATTERNSET_PATTERNSELECT_STATION2, // 工位2花样选择
PATTERNSET_PATTERNCOLOR_HEADHIGHT, // 花样机头高度
PATTERNSET_PATTERN_SWITCHING, //花样切换
PATTERNSET_NULL // 无功能
};
//参数设置参数类型的枚举
enum PARASET_FUNCTION {
PARASET_POSITION = 1, // 位置参数
PARASET_SPEED, // 速度参数
PARASET_ACTION, // 动作参数
PARASET_DETECT, // 检测参数
PARASET_SETTING, // 设置参数
PARASET_WORK // 工作参数
};
//调试功能参数类型的枚举
enum DEBUG_FUNCTION {
DEBUG_TRIM = 1, // 剪线
DEBUG_DIECUTTER, //冲刀
DEBUG_NEEDLESHUTTLE // 针梭
};
enum OUTCONTROL_FUN {
OUTCONTROL_ENABLE = 1, // 使能
OUTCONTROL_DISABLE, // 失能
OUTCONTROL_MS_ENABLE, // 主轴电机使能
OUTCONTROL_MS_DISABLE, // 主轴电机失能
OUTCONTROL_JOGP, // 正转
OUTCONTROL_JOGN, // 反转
OUTCONTROL_STOP, // 停止
OUTCONTROL_ZERO, // 归零
OUTCONTROL_UP, // 上升
OUTCONTROL_DOWN, // 下降
MANUALACTION_RUN, // 执行
OUTCONTROL_OPEN, // 打开
OUTCONTROL_CLOSE, // 关闭
OUTCONTROL_STARTOIL, // 开始
OUTCONTROL_STOPOIL, // 停止
MOTORHEADO_UP, // 缝纫机头1升降
MOTORHEADO_DOWN, //缝纫机头1下降
MOTORHEADT_UP, // 缝纫机头2升降
MOTORHEADT_DOWN // 缝纫机头2下降
};
//软件设置的顺序枚举
enum ENUM_SOFTWARESET {
SET_LANGUAGE, // 语言
SET_CONNECTMODE //连接方式(通讯方式)
};
//花样参数的顺序枚举
enum ENUM_PATTERNPARA {
SET_ROTATESTYLE = 0, // 旋转式样
SET_HORIZONTALSTYLE, // 水平翻转样式
SET_VERTICALSTYLE, // 垂直翻转样式
SET_ROTATEANGLE, // 旋转角度
SET_SPLITSTITCHLENGTH, // 分割针步长度
SET_XZOOM, // X向倍率
SET_YZOOM, // Y向倍率
SET_LOCKNEEDLESNUM, // 锁针次数
SET_LOCKNEEDLESSTEPNUM, // 锁针步数
SET_LOCKNEEDLESSTEPLENTH, // 锁针针步长度
SET_STARTX, //起始点x 230105 xcy
SET_STARTY, //起始点y
SET_ANCHORX, //定位点x
SET_ANCHORY , //定位点y
SET_CONTINURUNCOMP, //连续动框补偿0-1000百分比
SET_NEEDLETIPCOMP //针尖补偿
};
//网络管理设置的顺序枚举
enum ENUM_NETWORKSET {
SET_MQTT_SERVERIP = 0, // 网关服务器IP
SET_MQTT_SERVERPORT, // 网关服务器端口
SET_MACHINE_SERVERIP, // 机器服务器IP
SET_MACHINE_SERVERPORT, // 机器服务器端口
SET_LOCALIP, // 本地IP
SET_LOCALPORT, // 本地端口
};
#endif // CMDCONFIG_H

43
items/debugitem.cpp Normal file
View File

@ -0,0 +1,43 @@
#include "debugitem.h"
DebugItem::DebugItem(QObject *parent) : QObject(parent)
{
clean();
}
DebugItem::~DebugItem()
{
clean();
}
DebugItem::DebugItem(const DebugItem & item) : QObject()
{
copyData(item);
}
DebugItem & DebugItem::operator= (const DebugItem & item)
{
copyData(item);
return *this;
}
void DebugItem::clean()
{
m_macType = 0;
m_showPriority = 0;
m_name.clear();
m_topImageName.clear();
m_enumFunction = 0;
}
void DebugItem::copyData(const DebugItem &item)
{
if (this != &item)
{
this->m_macType = item.m_macType;
this->m_showPriority = item.m_showPriority;
this->m_name = item.m_name;
this->m_topImageName = item.m_topImageName;
this->m_enumFunction = item.m_enumFunction;
}
}

36
items/debugitem.h Normal file
View File

@ -0,0 +1,36 @@
#ifndef DEBUGITEM_H
#define DEBUGITEM_H
#include <QObject>
class DebugItem : public QObject
{
Q_OBJECT
public:
explicit DebugItem(QObject *parent = 0);
~DebugItem();
public:
DebugItem(const DebugItem & item);
DebugItem & operator= (const DebugItem & item);
public:
void clean();
private:
void copyData(const DebugItem & item);
public:
int m_macType; // 机器类型
int m_showPriority; // 显示优先级
QString m_name; // label名称
QString m_topImageName; // 顶图图标logo名称
int m_enumFunction; // 对应的事件的枚举值
signals:
public slots:
};
#endif // DEBUGITEM_H

View File

@ -0,0 +1,37 @@
#include "errorcodestateitem.h"
ErrorCodeStateItem::ErrorCodeStateItem(QObject *parent) : QObject(parent)
{
clean();
}
ErrorCodeStateItem::~ErrorCodeStateItem()
{
clean();
}
ErrorCodeStateItem::ErrorCodeStateItem(const ErrorCodeStateItem &item) : QObject()
{
copyData(item);
}
ErrorCodeStateItem &ErrorCodeStateItem::operator=(const ErrorCodeStateItem &item)
{
copyData(item);
return *this;
}
void ErrorCodeStateItem::clean()
{
m_code = 0;
m_name.clear();
}
void ErrorCodeStateItem::copyData(const ErrorCodeStateItem &item)
{
if (this != &item)
{
this->m_code = item.m_code ; // 代码
this->m_name = item.m_name ; // 代码对应的名称
}
}

View File

@ -0,0 +1,33 @@
#ifndef ERRORCODESTATEITEM_H
#define ERRORCODESTATEITEM_H
#include <QObject>
class ErrorCodeStateItem : public QObject
{
Q_OBJECT
public:
explicit ErrorCodeStateItem(QObject *parent = 0);
~ErrorCodeStateItem();
public:
ErrorCodeStateItem(const ErrorCodeStateItem & item);
ErrorCodeStateItem & operator= (const ErrorCodeStateItem & item);
public:
void clean();
private:
void copyData(const ErrorCodeStateItem & item);
public:
unsigned int m_code; // 代码
QString m_name; // 代码对应的名称
signals:
public slots:
};
#endif // ERRORCODESTATEITEM_H

63
items/fileitem.cpp Normal file
View File

@ -0,0 +1,63 @@
#include "fileitem.h"
FileItem::FileItem(QObject *parent) :
QObject(parent)
{
clear();
}
FileItem::~FileItem()
{
clear();
}
FileItem::FileItem(const FileItem & item) :
QObject(item.parent())
{
copyData(item);
}
FileItem & FileItem::operator=(const FileItem & item)
{
copyData(item);
return *this;
}
void FileItem::clear()
{
m_filePathName.clear(); // 文件路径
m_showInfo.clear(); // 显示信息
m_imagePath.clear(); // 图片路径
m_previewImage = QImage(); // 图形预览
}
// 拷贝
void FileItem::copyData(const FileItem & item)
{
if (this != &item)
{
this->m_filePathName = item.m_filePathName; // 文件路径
this->m_showInfo = item.m_showInfo; // 显示信息
this->m_imagePath = item.m_imagePath; // 图片路径
this->m_previewImage = item.m_previewImage; // 图形预览
}
}
#if (1)
void FileItem::setFileInfo(QString & path, QString & show, QImage & previewImg)
#else
void FileItem::setFileInfo(QString path, QString show, QImage previewImg)
#endif
{
m_filePathName = path; // 文件路径
m_showInfo = show; // 显示信息
m_previewImage = previewImg; // 预览图形
}
void FileItem::setFileInfo(QString path, QString show, QString imagePath)
{
m_filePathName = path; // 文件路径
m_showInfo = show; // 显示信息
m_imagePath = imagePath; // 图片路径
}

48
items/fileitem.h Normal file
View File

@ -0,0 +1,48 @@
#ifndef FILEITEM_H
#define FILEITEM_H
#include <QObject>
#include <QImage>
#include <QString>
// 文件条目项
class FileItem : public QObject
{
Q_OBJECT
public:
explicit FileItem(QObject *parent = NULL);
FileItem(const FileItem & item);
~FileItem();
public:
FileItem &operator=(const FileItem & item);
public:
void clear();
private:
void copyData(const FileItem & item);
public:
#if (1)
void setFileInfo(QString & path, QString & show, QImage & previewImg);
#else
void setFileInfo(QString path, QString show, QImage previewImg);
#endif
void setFileInfo(QString path, QString show, QString imagePath);
public:
inline const QString & getFilePath() const {return m_filePathName;} // 文件路径
inline const QString & getShowInfo() const {return m_showInfo;} // 显示信息
inline const QString & getImagePath() const {return m_imagePath;} // 图片路径
inline const QImage & getPreviewImage() const {return m_previewImage;} // 图形预览
private:
QImage m_previewImage; // 图形预览
QString m_filePathName; // 文件路径名称
QString m_imagePath; // 图片路径
QString m_showInfo; // 显示信息(文件名称)
signals:
public slots:
};
#endif // FILEITEM_H

1782
items/itemsmanage.cpp Normal file

File diff suppressed because it is too large Load Diff

104
items/itemsmanage.h Normal file
View File

@ -0,0 +1,104 @@
#ifndef ITEMSMANAGE_H
#define ITEMSMANAGE_H
#include "paraitem.h"
#include "outctrlitem.h"
#include "shortcutitem.h"
#include "assistitem.h"
#include "patternsetitem.h"
#include "parasetitem.h"
#include "sensoritem.h"
#include "debugitem.h"
#include "errorcodestateitem.h"
#include "main.h"
#include <QCoreApplication>
#include <QTextCodec>
//添加快捷功能item
ShortCutItem makeAShortCutItem(int macType,int showPriority,
QString name,QString topImageName,
int enumFunction);
//添加辅助功能item
AssistItem makeAAssistItem(int macType,int showPriority,
QString name,QString topImageName,
int enumFunction);
//花样设置功能item
PatternSetItem makeAPatternSetItem(int macType,int showPriority,
QString name,QString topImageName,
int enumFunction);
//调试功能功能item
DebugItem makeADebugItem(int macType,int showPriority,
QString name,QString topImageName,
int enumFunction);
//参数设置功能item
ParaSetItem makeAParaSetItem(int macType,int showPriority,
QString name,QString topImageName,
int paraType);
//传感器信号item
SensorItem makeASensorItem(int byte,int bit,QString name,int type = -1);
//错误代码/状态item
ErrorCodeStateItem makeAErrorStateItem(int code,QString name);
//添加控制动作item
OutCtrlItem makeAOutCtrlItem(int macType,int showPriority,QString name,int def,
QString btn1Str,bool btn1Visible,
int btn1ClickFun,int btn1PreFun,int btn1RelFun,
QString btn2Str,bool btn2Visible,
int btn2ClickFun,int btn2PreFun,int btn2RelFun,
QString btn3Str,bool btn3Visible,
int btn3ClickFun,int btn3PreFun,int btn3RelFun,
QString btn4Str,bool btn4Visible,
int btn4ClickFun,int btn4PreFun,int btn4RelFun,
QString btn5Str,bool btn5Visible,
int btn5ClickFun,int btn5PreFun,int btn5RelFun);
//添加参数item
ParaItem makeAParaItem(
int64_t mcenSel, /* 机型选择 */
int paraType, /* 参数类型(机器参数、工作参数、花样设置参数...) */
int paraTypeSort, /* 参数类型分类(机器参数的速度参数、机器参数的动作参数...) */
int indexInPara, /* 参数索引,-1提示型显示; >= 0该条目在参数中的位置*/
int bitInWord, /* 参数位索引 */
int readonly, /* 只读标志 */
int valueType, /* 参数值类型 = 0, 无值; = 1, 数字输入型; = 2, 开关选择型; = 3, 列表选择; = 4, 字符输入型*/
QString paraName, /* 参数名称 */
int64_t value, /* int输入型或选择型参数值 */
int64_t minval, /* int输入型参数值范围下限 */
int64_t maxval, /* int输入型参数值范围上限 */
int64_t defvalue, /* int输入型或选择型默认参数值 */
int afterpoint, /* int输入型保留小数位数 */
QString unitstr, /* int输入型单位字符串 */
QString valuestr, /* 字符输入型参数字符串 */
QString selList, /* 列表选择型的参数列表, 通过"\n"来分割 */
int selIdx, /* 当前选择项索引 */
int defIdx, /* 默认选择项索引 */
int showPriority, /* 显示优先级 */
int authority /* 参数权限 */
);
//比较参数优先级
bool comparePriority(const ParaItem & item1, const ParaItem & item2);
//各个机型通用参数
void initSoftwareParasList(QList <ParaItem> & parasList);//软件参数
void initTimeParasList(QList <ParaItem> & parasList);//时间设置参数
void initPunchCommonFunParasList(QList <ParaItem> & parasList);//冲孔机常用功能参数
void initPunchSewCommonFunParasList(QList <ParaItem> & parasList);//冲缝机常用功能参数
void initPunchEmbSewCommonFunParasList(QList <ParaItem> & parasList);
void initNetworkParasList(QList <ParaItem> & parasList);//网络管理参数
void initRootHMIConfigurationList(QList <ParaItem> & parasList);//界面配置参数
void initRootIOTConfigurationList(QList <ParaItem> &parasList); //物联网配置参数
#endif // ITEMSMANAGE_H

101
items/outctrlitem.cpp Normal file
View File

@ -0,0 +1,101 @@
#include "outctrlitem.h"
OutCtrlItem::OutCtrlItem(QObject *parent) : QObject(parent)
{
clean();
}
OutCtrlItem::~OutCtrlItem()
{
clean();
}
OutCtrlItem::OutCtrlItem(const OutCtrlItem & item) : QObject()
{
copyData(item);
}
OutCtrlItem & OutCtrlItem::operator= (const OutCtrlItem & item)
{
copyData(item);
return *this;
}
void OutCtrlItem::clean()
{
m_macType = 0;
m_showPriority = 0;
m_name.clear(); // 名称
m_def = -1;
m_btn1Str.clear();
m_btn1Visible = false;
m_btn1ClickFun = -1;
m_btn1PreFun = -1;
m_btn1RelFun = -1;
m_btn2Str.clear();
m_btn2Visible = false;
m_btn2ClickFun = -1;
m_btn2PreFun = -1;
m_btn2RelFun = -1;
m_btn3Str.clear();
m_btn3Visible = false;
m_btn3ClickFun = -1;
m_btn3PreFun = -1;
m_btn3RelFun = -1;
m_btn4Str.clear();
m_btn4Visible = false;
m_btn4ClickFun = -1;
m_btn4PreFun = -1;
m_btn4RelFun = -1;
m_btn5Str.clear();
m_btn5Visible = false;
m_btn5ClickFun = -1;
m_btn5PreFun = -1;
m_btn5RelFun = -1;
}
void OutCtrlItem::copyData(const OutCtrlItem & item)
{
if (this != &item)
{
this->m_macType = item.m_macType;
this->m_showPriority = item.m_showPriority;
this->m_name = item.m_name; // 名称
this->m_def = item.m_def;
this->m_btn1Str = item.m_btn1Str;
this->m_btn1Visible = item.m_btn1Visible;
this->m_btn1ClickFun = item.m_btn1ClickFun;
this->m_btn1PreFun = item.m_btn1PreFun;
this->m_btn1RelFun = item.m_btn1RelFun;
this->m_btn2Str = item.m_btn2Str;
this->m_btn2Visible = item.m_btn2Visible;
this->m_btn2ClickFun = item.m_btn2ClickFun;
this->m_btn2PreFun = item.m_btn2PreFun;
this->m_btn2RelFun = item.m_btn2RelFun;
this->m_btn3Str = item.m_btn3Str;
this->m_btn3Visible = item.m_btn3Visible;
this->m_btn3ClickFun = item.m_btn3ClickFun;
this->m_btn3PreFun = item.m_btn3PreFun;
this->m_btn3RelFun = item.m_btn3RelFun;
this->m_btn4Str = item.m_btn4Str;
this->m_btn4Visible = item.m_btn4Visible;
this->m_btn4ClickFun = item.m_btn4ClickFun;
this->m_btn4PreFun = item.m_btn4PreFun;
this->m_btn4RelFun = item.m_btn4RelFun;
this->m_btn5Str = item.m_btn5Str;
this->m_btn5Visible = item.m_btn5Visible;
this->m_btn5ClickFun = item.m_btn5ClickFun;
this->m_btn5PreFun = item.m_btn5PreFun;
this->m_btn5RelFun = item.m_btn5RelFun;
}
}

68
items/outctrlitem.h Normal file
View File

@ -0,0 +1,68 @@
#ifndef OUTCTRLITEM_H
#define OUTCTRLITEM_H
#include <QObject>
#include "items/cmdconfig.h"
typedef short int s16;
class OutCtrlItem : public QObject
{
Q_OBJECT
public:
explicit OutCtrlItem(QObject *parent = 0);
~OutCtrlItem();
public:
OutCtrlItem(const OutCtrlItem & item);
OutCtrlItem & operator= (const OutCtrlItem & item);
public:
void clean();
private:
void copyData(const OutCtrlItem & item);
public:
int m_macType; // 机器类型
int m_showPriority; // 显示优先级
QString m_name; // 名称
int m_def; // 对应的事件宏定义
QString m_btn1Str; // 按钮1上的文本
bool m_btn1Visible; // 按钮1是否可见
s16 m_btn1ClickFun; // 按钮1对应的点击事件 -1代表没有
s16 m_btn1PreFun; // 按钮1对应的按下事件 -1代表没有
s16 m_btn1RelFun; // 按钮1对应的抬起事件 -1代表没有
QString m_btn2Str; // 按钮2上的文本
bool m_btn2Visible; // 按钮2是否可见
s16 m_btn2ClickFun; // 按钮2对应的点击事件 -1代表没有
s16 m_btn2PreFun; // 按钮2对应的按下事件 -1代表没有
s16 m_btn2RelFun; // 按钮2对应的抬起事件 -1代表没有
QString m_btn3Str; // 按钮3上的文本
bool m_btn3Visible; // 按钮3是否可见
s16 m_btn3ClickFun; // 按钮3对应的点击事件 -1代表没有
s16 m_btn3PreFun; // 按钮3对应的按下事件 -1代表没有
s16 m_btn3RelFun; // 按钮3对应的抬起事件 -1代表没有
QString m_btn4Str; // 按钮4上的文本
bool m_btn4Visible; // 按钮4是否可见
s16 m_btn4ClickFun; // 按钮4对应的点击事件 -1代表没有
s16 m_btn4PreFun; // 按钮4对应的按下事件 -1代表没有
s16 m_btn4RelFun; // 按钮4对应的抬起事件 -1代表没有
QString m_btn5Str; // 按钮5上的文本
bool m_btn5Visible; // 按钮5是否可见
s16 m_btn5ClickFun; // 按钮5对应的点击事件 -1代表没有
s16 m_btn5PreFun; // 按钮5对应的按下事件 -1代表没有
s16 m_btn5RelFun; // 按钮5对应的抬起事件 -1代表没有
signals:
public slots:
};
#endif // OUTCTRLITEM_H

77
items/paraitem.cpp Normal file
View File

@ -0,0 +1,77 @@
#include "paraitem.h"
ParaItem::ParaItem(QObject *parent) : QObject(parent)
{
clean();
}
ParaItem::~ParaItem()
{
paraName.clear();
selList.clear();
unitStr.clear();
valueStr.clear();
}
ParaItem::ParaItem(const ParaItem & item) : QObject()
{
copyData(item);
}
ParaItem & ParaItem::operator=(const ParaItem & item)
{
copyData(item);
return *this;
}
void ParaItem::clean()
{
mcenSel = 0;
paraType = 0;
paraTypeSort = 0;
indexInPara = -1;
bitInWord = 0;
readonly = 0;
valueType = 0;
paraName = "";
value = 0;
minVal = 0;
maxVal = 0;
defValue = 0;
afterPoint = 0;
unitStr = "";
valueStr = "";
selList = "";
selIdx = -1;
defIdx = -1;
showPriority = 0;
authority = 0;
}
void ParaItem::copyData(const ParaItem & item)
{
if (this != &item)
{
this->mcenSel = item.mcenSel;
this->paraType = item.paraType;
this->paraTypeSort = item.paraTypeSort;
this->indexInPara = item.indexInPara;
this->bitInWord = item.bitInWord;
this->readonly = item.readonly;
this->valueType = item.valueType;
this->paraName = item.paraName;
this->value = item.value;
this->minVal = item.minVal;
this->maxVal = item.maxVal;
this->defValue = item.defValue;
this->afterPoint = item.afterPoint;
this->unitStr = item.unitStr;
this->valueStr = item.valueStr;
this->selList = item.selList;
this->selIdx = item.selIdx;
this->defIdx = item.defIdx;
this->showPriority = item.showPriority;
this->authority = item.authority;
}
}

101
items/paraitem.h Normal file
View File

@ -0,0 +1,101 @@
#ifndef PARAITEM_H
#define PARAITEM_H
#include <QObject>
#include <QString>
#include <QStringList>
#include "items/cmdconfig.h"
class ParaItem : public QObject
{
Q_OBJECT
public:
explicit ParaItem(QObject *parent = 0);
ParaItem(const ParaItem & item);
~ParaItem();
public:
ParaItem &operator=(const ParaItem & item);
public:
void clean();
private:
void copyData(const ParaItem & item);
public:
int64_t mcenSel; // 机型选择
int paraType; // 参数类型(机器参数、工作参数、花样设置参数...)
int paraTypeSort; // 参数类型分类(机器参数的速度参数、机器参数的动作参数...)
int indexInPara; // 参数索引,-1提示型显示; >= 0该条目在参数中的位置
int bitInWord; // 参数位索引
int readonly; // 只读标志
int valueType; // 参数值类型 = 0, 无值; = 1, 数字输入型; = 2, 开关选择型; = 3, 列表选择型; = 4, 字符输入型
public:
QString paraName; // 参数名称
public:
int64_t value; // 数字输入型数值
int64_t minVal; // 输入值范围下限
int64_t maxVal; // 输入值范围上限
int64_t defValue; // 默认值
int afterPoint; // 保留小数位数
QString unitStr; // 单位
QString valueStr; // 字符输入型字符
public:
QString selList; // 列表选择型参数列表,通过"\n"来分割
int selIdx; // 选择项目
int defIdx; // 默认选择
public:
int showPriority; // 显示优先级
int authority; // 参数权限
public:
short int ifPress;
short int ifChange;
};
#define PARA_VALUE_TYPE_NONE 0 // 无
#define PARA_VALUE_TYPE_INT 1 // 数值输入型
#define PARA_VALUE_TYPE_SW 2 // 开关型
#define PARA_VALUE_TYPE_LIST 3 // 列表选择型
#define PARA_VALUE_TYPE_STRINPUT 4 // 字符串输入型
#define PARA_VALUE_TYPE_CLICK 5 // 点击触发型
//参数类型(点击触发型的参数种类)
#define PARA_TYPE_MACH 0x00000001 // 主控机器参数
#define PARA_TYPE_WORK 0x00000002 // 主控工作参数
#define PARA_TYPE_DEF_MC 0x00000004 // 出厂默认机器配置参数(读取有效)
#define PARA_TYPE_DEF_WK 0x00000008 // 出厂默认机器工作参数(读取有效)
#define PARA_TYPE_PATTERN 0x00000010 // 花样参数
#define PARA_TYPE_SOFTWARESET 0x00000020 // 软件设置参数
#define PARA_TYPE_TIMESET 0x00000040 // 时间设置参数
#define PARA_TYPE_COMMONFUN 0x00000080 // 常用功能设置参数
#define PARA_TYPE_NETWORKSET 0x00000100 // 网络管理设置参数
#define PARA_TYPE_ROOT 0x00000200 // 超级用户参数
#define PARA_TYPE_ROOTTRAVERSE 0x00000400 // 超级用户遍历参数
#define PARA_TYPE_SPINDLETEST 0x00000800 //主轴研车参数
#define PARA_TYPE_LOCKTEST 0x00001000 //锁头测试参数
#define PARA_TYPE_EXBUPGRADE 0x00002000 //外围板升级参数
#define PARA_TYPE_HEADPARAMETER 0x00004000 //机头板参数
#define PARA_TYPE_HMICONFIGURATION 0x00008000 //界面配置
#define PARA_TYPE_IOTCONFIGURATION 0x00010000 //物联网配置
#define PARA_TYPE_NETWORKSETTINGS 0x00020000 //网络设置
#define PARA_TYPE_ROOT_PATTERN 0x00040000 // 超级用户花样参数(目前用于配置针步补偿)
//参数分类
#define MC_SORT_SPEED 0x00000001 // 速度参数
#define MC_SORT_ACTION 0x00000002 // 动作参数
#define MC_SORT_DETECT 0x00000004 // 检测参数
#define MC_SORT_POSITION 0x00000008 // 位置参数
#define MC_SORT_SETTING 0x00000010 // 设置参数
#define MC_SORT_WORK 0x00000020 // 工作参数
#define ROOT_SORT_HEADSENSOR 0x00000020 // 遍历状态信号参数
#endif // PARAITEM_H

44
items/parasetitem.cpp Normal file
View File

@ -0,0 +1,44 @@
#include "parasetitem.h"
ParaSetItem::ParaSetItem(QObject *parent) : QObject(parent)
{
clean();
}
ParaSetItem::~ParaSetItem()
{
clean();
}
ParaSetItem::ParaSetItem(const ParaSetItem & item) : QObject()
{
copyData(item);
}
ParaSetItem & ParaSetItem::operator= (const ParaSetItem & item)
{
copyData(item);
return *this;
}
void ParaSetItem::clean()
{
m_macType = 0;
m_showPriority = 0;
m_name.clear();
m_topImageName.clear();
m_paraType = 1;
}
void ParaSetItem::copyData(const ParaSetItem &item)
{
if (this != &item)
{
this->m_macType = item.m_macType;
this->m_showPriority = item.m_showPriority;
this->m_name = item.m_name;
this->m_topImageName = item.m_topImageName;
this->m_paraType = item.m_paraType;
}
}

36
items/parasetitem.h Normal file
View File

@ -0,0 +1,36 @@
#ifndef PARASETITEM_H
#define PARASETITEM_H
#include <QObject>
class ParaSetItem : public QObject
{
Q_OBJECT
public:
explicit ParaSetItem(QObject *parent = 0);
~ParaSetItem();
public:
ParaSetItem(const ParaSetItem & item);
ParaSetItem & operator= (const ParaSetItem & item);
public:
void clean();
private:
void copyData(const ParaSetItem & item);
public:
int m_macType; // 机器类型
int m_showPriority; // 显示优先级
QString m_name; // label名称
QString m_topImageName; // 顶图图标logo名称
int m_paraType; // 参数类型
signals:
public slots:
};
#endif // PARASETITEM_H

43
items/patternsetitem.cpp Normal file
View File

@ -0,0 +1,43 @@
#include "patternsetitem.h"
PatternSetItem::PatternSetItem(QObject *parent) : QObject(parent)
{
clean();
}
PatternSetItem::~PatternSetItem()
{
clean();
}
PatternSetItem::PatternSetItem(const PatternSetItem & item) : QObject()
{
copyData(item);
}
PatternSetItem & PatternSetItem::operator= (const PatternSetItem & item)
{
copyData(item);
return *this;
}
void PatternSetItem::clean()
{
m_macType = 0;
m_showPriority = 0;
m_name.clear();
m_topImageName.clear();
m_enumFunction = 0;
}
void PatternSetItem::copyData(const PatternSetItem &item)
{
if (this != &item)
{
this->m_macType = item.m_macType;
this->m_showPriority = item.m_showPriority;
this->m_name = item.m_name;
this->m_topImageName = item.m_topImageName;
this->m_enumFunction = item.m_enumFunction;
}
}

36
items/patternsetitem.h Normal file
View File

@ -0,0 +1,36 @@
#ifndef PATTERNSETITEM_H
#define PATTERNSETITEM_H
#include <QObject>
class PatternSetItem : public QObject
{
Q_OBJECT
public:
explicit PatternSetItem(QObject *parent = 0);
~PatternSetItem();
public:
PatternSetItem(const PatternSetItem & item);
PatternSetItem & operator= (const PatternSetItem & item);
public:
void clean();
private:
void copyData(const PatternSetItem & item);
public:
int m_macType; // 机器类型
int m_showPriority; // 显示优先级
QString m_name; // label名称
QString m_topImageName; // 顶图图标logo名称
int m_enumFunction; // 对应的事件的枚举值
signals:
public slots:
};
#endif // PATTERNSETITEM_H

46
items/sensoritem.cpp Normal file
View File

@ -0,0 +1,46 @@
#include "sensoritem.h"
SensorItem::SensorItem(QObject *parent) : QObject(parent)
{
clean();
}
SensorItem::~SensorItem()
{
clean();
}
SensorItem::SensorItem(const SensorItem & item) : QObject()
{
copyData(item);
}
SensorItem & SensorItem::operator= (const SensorItem & item)
{
copyData(item);
return *this;
}
void SensorItem::clean()
{
m_byte_offset = -1; // 字节偏移值
m_bit_offset = -1; // 字节内位偏移值
m_name.clear(); // 名称
m_type = -1; // 传感器类型
}
void SensorItem::copyData(const SensorItem & item)
{
m_byte_offset = item.m_byte_offset ; // 字节偏移值
m_bit_offset = item.m_bit_offset ; // 字节内位偏移值
m_name = item.m_name ; // 名称
m_type = item.m_type; // 传感器类型
}
void SensorItem::setItemValue(int woffset, int boffset, QString name, int type)
{
m_byte_offset = woffset ; // 字节偏移值
m_bit_offset = boffset ; // 字节内位偏移值
m_name = name ; // 名称
m_type = type; // 传感器类型
}

34
items/sensoritem.h Normal file
View File

@ -0,0 +1,34 @@
#ifndef __SENSORITEM_H__
#define __SENSORITEM_H__
#include <QObject>
#define MAX_SENSOR_NUM (1024*8)
class SensorItem : public QObject
{
Q_OBJECT
public:
explicit SensorItem(QObject *parent = 0);
~SensorItem();
public:
SensorItem(const SensorItem & item);
SensorItem & operator= (const SensorItem & item);
public:
void clean();
private:
void copyData(const SensorItem & item);
public:
void setItemValue(int woffset, int boffset, QString name, int type = -1);
public:
int m_byte_offset; // 字节偏移值
int m_bit_offset; // 字节内的位偏移值
QString m_name; // 名称
int m_type; // 传感器类型
};
#endif // __SENSORITEM_H__

43
items/shortcutitem.cpp Normal file
View File

@ -0,0 +1,43 @@
#include "shortcutitem.h"
ShortCutItem::ShortCutItem(QObject *parent) : QObject(parent)
{
clean();
}
ShortCutItem::~ShortCutItem()
{
clean();
}
ShortCutItem::ShortCutItem(const ShortCutItem & item) : QObject()
{
copyData(item);
}
ShortCutItem & ShortCutItem::operator= (const ShortCutItem & item)
{
copyData(item);
return *this;
}
void ShortCutItem::clean()
{
m_macType = 0;
m_showPriority = 0;
m_name.clear();
m_topImageName.clear();
m_enumFunction = 0;
}
void ShortCutItem::copyData(const ShortCutItem &item)
{
if (this != &item)
{
this->m_macType = item.m_macType;
this->m_showPriority = item.m_showPriority;
this->m_name = item.m_name;
this->m_topImageName = item.m_topImageName;
this->m_enumFunction = item.m_enumFunction;
}
}

35
items/shortcutitem.h Normal file
View File

@ -0,0 +1,35 @@
#ifndef SHORTCUTITEM_H
#define SHORTCUTITEM_H
#include <QObject>
class ShortCutItem : public QObject
{
Q_OBJECT
public:
explicit ShortCutItem(QObject *parent = 0);
~ShortCutItem();
public:
ShortCutItem(const ShortCutItem & item);
ShortCutItem & operator= (const ShortCutItem & item);
public:
void clean();
private:
void copyData(const ShortCutItem & item);
public:
int m_macType; // 机器类型
int m_showPriority; // 显示优先级
QString m_name; // label名称
QString m_topImageName; // 顶图图标logo名称
int m_enumFunction; // 对应的事件的枚举值
signals:
public slots:
};
#endif // SHORTCUTITEM_H

438
machine/comm/comm.cpp Normal file
View File

@ -0,0 +1,438 @@
//-------------------------------------------------------------------------------
// File Name: comm.cpp
// Brief:
// Version: 1.0.0
// Create Date: 2017/05/08
// Create by: Marshal Lee
// Copyright:
// Copyright (c) 2017, Richpeace Co., LTD.
// All rights reserved.
//
// Modify by: Marshal Lee
// Modify Date: 2017/05/08
//-------------------------------------------------------------------------------
#define _IN_COMM_CPP
#include "comm.h"
#include "crc16.h"
//--------------------------------------------------------------------------------------------------
// 读空缓冲区
void readBuffEmpty(DataExFuns * funs)
{
int rslt, len;
u8 temp;
len = funs->getRsvLen();
while (len > 0)
{
rslt = funs->getCommData(&temp, 1);
if (rslt != 1)
{
rslt = 0;
break;
}
len--;
}
}
//--------------------------------------------------------------------------------------------------
// 功能: 从通讯口接收缓冲区中得到一个数据包, 如果有附加数据,包括附加数据
// 参数: pPacket, 数据包指针
// 返回: >=0, 成功取得一个数据包,包括定长数据包和可变长度数据包,返回值为数据包长度
// -1, 参数错误
// -2, CRC错误
// -3, 数据不足
// -4, 没有找到同步序列
// -5等待接收数据超时
// -6, 数据包参数错误
// -7, 附加数据CRC错误
// -8, 发生未知错误
// 结果: 如果正确取得数据包,或通讯口没有命令, 循环队列尾指针回向后移动
int getANormalPacket(DataExFuns * funs, DataPacket * pPacket)
{
int rslt, len;
int i;
int phase;
int status;
int exlen;
static int rdstatus = 0;
static u8 odBuf[LEN_NORMAL_PACKET];
u8 temp;
u8 rdBuf[LEN_NORMAL_PACKET];
DataPacket * pDat;
u8 getBuf[LEN_NORMAL_PACKET-DP_SYNC_LEN];
int getBuflen;
int getIdx;
u8 tmpBuf[LEN_NORMAL_PACKET-DP_SYNC_LEN];
int tmpBuflen;
if (funs == NULL || pPacket == NULL)
{
return -1;
}
rslt = 0;
i = 0; // 扫描字节计数器
getBuflen = 0;
getIdx = 0;
tmpBuflen = 0;
pDat = (DataPacket *)rdBuf;
if (rdstatus == 0)
{
do
{
len = funs->getRsvLen(); // 得到接收长度
len += getBuflen; // 加上已经获取的长度
if (len < LEN_NORMAL_PACKET)
{
rslt = -3;
break; // 没有足够数据
}
phase = 0;
status = 0;
rslt = 0;
// 从接收缓冲区中找数据包
while(((len + phase) >= LEN_NORMAL_PACKET) && (phase < LEN_NORMAL_PACKET))
{
if (getBuflen == 0)
{
if (phase == 0 && i > MAX_ONCE_SCAN)
{
rslt = -4;
break; // 查找同步序列超出最大单次扫描字节数
}
rslt = funs->getCommData(&temp, 1);
if (rslt != 1)
{
printf("error at GetCommData rslt\r\n");
rslt = -8;
break;
}
rslt = 0;
i++; // 扫描字数增加
}
else
{
temp = getBuf[getIdx];
getIdx++;
getBuflen--;
}
len--; // 剩余长度减小
pDat->buff.normal[phase] = temp;
if (phase < DP_SYNC_LEN) // 识别同步序列
{
tmpBuflen = 0;
if (phase == 0)
{
if (temp == FLDP_SYNC[0])
{
status = 1;
}
else if (temp == VLDP_SYNC[0])
{
status = 2;
}
else
{
status = 0;
phase = 0;
rslt = 0; // 非同步序列
break;
}
}
else
{
if (status == 1)
{
if (temp != FLDP_SYNC[phase])
{
status = 0;
phase = 0;
rslt = 0;
break;
}
}
else if (status == 2)
{
if (temp != VLDP_SYNC[phase])
{
status = 0;
phase = 0;
rslt = 0;
break;
}
}
else
{
printf("error status in GetANormalPacket\r\n");
rslt = -8;
break;
}
}
}
else
{
tmpBuf[tmpBuflen] = temp;
tmpBuflen++;
}
phase++;
}
if (rslt != 0)
{
break;
}
if (phase >= LEN_NORMAL_PACKET) // 得到数据包
{
u16 crc;
crc = calcCrc16(pDat->normal.content, DP_CONT_LEN);
if (crc == pDat->normal.crc)
{
// 得到正确数据包
memcpy(pPacket, pDat, LEN_NORMAL_PACKET);
// printf("GetANormalPacket ok\r\n");
rslt = LEN_NORMAL_PACKET;
break;
}
else
{
// CRC 不正确
printf("crc error in GetANormalPacket\r\n");
// 拷贝需要再判断的数据
if (tmpBuflen != 0)
{
memcpy(getBuf, tmpBuf, tmpBuflen);
}
getBuflen = tmpBuflen;
getIdx = 0;
// continue;
}
}
else
{
// 没有找到同步序列的情况
getBuflen = 0;
getIdx = 0;
// continue;
}
}while(1);
}
if (rdstatus == 1)
{
memcpy(pPacket, odBuf, LEN_NORMAL_PACKET);
rslt = LEN_NORMAL_PACKET;
}
// 附加数据
if (rslt == LEN_NORMAL_PACKET)
{
if (memcmp(pPacket->normal.sync, VLDP_SYNC, DP_SYNC_LEN) == 0) // 是可变长度数据包
{
exlen = pPacket->vldp.exlen;
if (exlen > MAX_EXDP_LEN)
{
printf("data exlen error, len=%d\r\n", exlen);
return -6; // 数据包参数错误
}
memset(pPacket->buff.exData, 0, MAX_EXDP_LEN);
i = 0;
status = 0; // 作为历史计数器
// 读取附加数据
do
{
rslt = funs->getCommData(pPacket->buff.exData, exlen);
if (rslt == exlen)
{
u16 crc;
// 校验CRC
crc = calcCrc16(pPacket->buff.exData, exlen);
if (crc == pPacket->vldp.excrc)
{
// printf("get exdata ok\r\n");
rslt = exlen+LEN_NORMAL_PACKET;
}
else
{
printf("crc error at get exdata\r\n");
rslt = -7; // CRC错误
}
rdstatus = 0;
break; // 得到数据
}
else if (rslt == 0)
{
memcpy(odBuf, pPacket, LEN_NORMAL_PACKET);
rdstatus = 1;
rslt = -3;
break;
/*
// 数据不足
if (funs->delay != NULL)
{
funs->delay(1); // 延时等待
}
len = funs->getRsvLen(); // 得到接收数据长度
qDebug()<<"getRsvLen"<<len;
if (len != status) // 和上次长度比较
{
status = len;
i = 0;
}
else // 如果没有变化,则计数器增加
{
i++;
if (i > GTEX_TIME_OUT) // 如果无变化计数器值大于超时值
{
qDebug()<<"call GetCommData timeout";
rslt = -5;
break;
}
}
*/
}
else
{
qDebug()<<"error after call GetCommData";
break;
}
}while(1);
}
}
return rslt;
}
//--------------------------------------------------------------------------------------------------
// 功能: 添加数据到发送队列中, 通过通讯口发送数据
// 参数: pPacket, 需要发送的数据,已经正确存放在了相应字段。
// 结果:
// 0, 可以发送, 添加到了发送数据队列中
// -1, 参数错误
// -2发送错误
// 1, 队列已满, 不能发送
int sendAPacket(DataExFuns * funs, DataPacket * pPacket)
{
int rslt;
int freelen, sendlen;
if (pPacket == NULL)
{
return -1;
}
if (memcmp(pPacket->normal.sync, FLDP_SYNC, DP_SYNC_LEN) == 0)
{
sendlen = LEN_NORMAL_PACKET;
}
else if (memcmp(pPacket->normal.sync, VLDP_SYNC, DP_SYNC_LEN) == 0)
{
sendlen = LEN_NORMAL_PACKET + pPacket->vldp.exlen;
}
else
{
printf("para err, not a corrected packet\r\n");
return -1;
}
freelen = funs->getTrsFreeLen();
if (freelen < sendlen)
{
// printf("buff is full in SendAPacket\r\n");
return 1;
}
rslt = funs->sendCommData(pPacket->datbuff, sendlen);
if (rslt != sendlen)
{
printf("error at call SendCommData, rslt=%d\r\n", rslt);
return -2;
}
return 0;
}
//--------------------------------------------------------------------------------------------------
// 功能: 打包一个固定长度数据包
// 参数:
// pPacket, 需要打包的数据包其中除了sync和crc的部分已经就绪
// 结果:
// 0, 打包好数据
// -1, 参数错误
int packetAFLDP(DataPacket * pPacket)
{
if (pPacket == NULL)
{
return -1;
}
memcpy(pPacket->normal.sync, FLDP_SYNC, DP_SYNC_LEN);
pPacket->normal.crc = calcCrc16(pPacket->normal.content, DP_CONT_LEN);
return 0;
}
//--------------------------------------------------------------------------------------------------
// 功能: 打包一个可变长度数据包
// 参数: pPacket, 需要打包的数据包,需要填充其中的 SYNC EXLEN EXCRC 和 EXDAT 等部分
// pExdat, 附加数据,可以为空
// exlen附加数据长度可以为0
// 结果:
// 0, 打包好数据
// -1, 参数错误
// -2
int packetAVLDP(DataPacket * pPacket, u8 * pExdat, u16 exlen)
{
if (pPacket == NULL)
{
return -1;
}
if (pExdat == NULL)
{
exlen = 0;
}
memcpy(pPacket->vldp.sync, VLDP_SYNC, DP_SYNC_LEN);
pPacket->vldp.exlen = exlen;
pPacket->vldp.excrc = calcCrc16(pExdat, exlen);
pPacket->vldp.crc = calcCrc16(pPacket->normal.content, DP_CONT_LEN);
if (exlen != 0)
{
memcpy(pPacket->vldp.exData, pExdat, exlen);
}
return 0;
}
//--------------------------------------------------------------------------------------------------

205
machine/comm/comm.h Normal file
View File

@ -0,0 +1,205 @@
//-------------------------------------------------------------------------------
// File Name: comm.h
// Brief:
// Version: 1.0.0
// Create Date: 2017/05/08
// Create by: Marshal Lee
// Copyright:
// Copyright (c) 2017, Richpeace Co., LTD.
// All rights reserved.
//
// Modify by: Marshal Lee
// Modify Date: 2017/05/08
//-------------------------------------------------------------------------------
#ifndef __COMM_H__
#define __COMM_H__
#include "typedef.h"
#include <string.h>
#include <QDebug>
#include <stdio.h>
//------------------------------------------------------------------------
// 通讯数据包定义
//------------------------------------
/*
1.
|-------------------------------------------------------------------|-----------|
| | | |
|-------------------------------------------------------------------|-----------|
| B0 B1 B2 B3 | B4 B5 | B6 B7 B8 B9 B10 B11 B12 B13 | B14 B15 |
|-------------------------------------------------------------------|-----------|
| | | | B4--B13的 |
| | ID | | |
| 'F','L','D','P' | | | 16CRC |
|-------------------------------------------------------------------|-----------|
2.
|---------------------------------------------------------------------------|-----------|----------------
| | | | |
|---------------------------------------------------------------------------|-----------|---------------|
| B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | B16--Bn |
|---------------------------------------------------------------------------|-----------|---------------|
| | | | | | B4--B13的 | |
| | ID | | | | | |
| 'V','L','D','P' | | | | | 16CRC | |
|---------------------------------------------------------------------------|-----------|---------------|
0--1024
*/
//------------------------------------
#define DP_SYNC_LEN 4 // 数据识别序列长度
#define DP_CONT_LEN 10 // 数据内容长度
#define DP_CRC_LEN 2 // 校验字长度
#define MAX_EXDP_LEN 1024 // 最大附加数据长度
#define LEN_NORMAL_PACKET (DP_SYNC_LEN+DP_CONT_LEN+DP_CRC_LEN)
#define MAX_INDP_PARA 8
#ifdef _IN_COMM_CPP
const u8 FLDP_SYNC[DP_SYNC_LEN] =
{
'F','L','D','P',
};
const u8 VLDP_SYNC[DP_SYNC_LEN] =
{
'V','L','D','P',
};
#else
extern const u8 FLDP_SYNC[DP_SYNC_LEN];
extern const u8 VLDP_SYNC[DP_SYNC_LEN];
#endif
//-----------------------------------------------------------------------
typedef union
{
u8 datbuff[LEN_NORMAL_PACKET+MAX_EXDP_LEN]; // dat buff 方式
struct
{
u8 normal[LEN_NORMAL_PACKET];
u8 exData[MAX_EXDP_LEN];
} __attribute__ ((packed)) buff; // buff方式
struct
{
u8 sync[DP_SYNC_LEN];
u8 content[DP_CONT_LEN];
u16 crc;
} __attribute__ ((packed)) normal; // 通用方式
struct
{
u8 sync[DP_SYNC_LEN];
u16 cmd;
u8 para[8];
u16 crc;
} __attribute__ ((packed)) fldp; // fldp方式
struct
{
u8 sync[DP_SYNC_LEN];
u16 cmd;
u16 exlen;
u16 excrc;
u8 para[4];
u16 crc;
u8 exData[MAX_EXDP_LEN];
} __attribute__ ((packed)) vldp; // vldp方式
} DataPacket;
//-----------------------------------------------------------------------
typedef struct
{
int (*sendCommData)(u8 *, int);
int (*getCommData)(u8 *, int);
int (*getRsvLen)(void);
int (*getTrsFreeLen)(void);
void (*delay)(u32);
} DataExFuns;
//-----------------------------------------------------------------------
// 读空缓冲区
void readBuffEmpty(DataExFuns * funs);
//-----------------------------------------------------------------------
// 功能: 从通讯口接收缓冲区中得到一个数据包,
// 只能取得普通数据包结构. 如果数据包还有附加数据, 那么需要用 GetExCommData 函数取得
// 参数: pPacket, 数据包指针
// 返回: >=0, 成功取得一个数据包,包括定长数据包和可变长度数据包,返回值为数据包长度
// -1, 参数错误
// -2, CRC错误
// -3, 数据不足
// -4, 没有找到同步序列
// -5等待接收数据超时
// -6, 数据包参数错误
// -7, 附加数据CRC错误
// -8, 发生未知错误
// 结果: 如果正确取得数据包,或通讯口没有命令, 循环队列尾指针回向后移动
#define MAX_ONCE_SCAN (LEN_NORMAL_PACKET*10) // 一次扫描最大字节数
#define GTEX_TIME_OUT 100 // 得到数据包超时时间单位是ms
int getANormalPacket(DataExFuns * funs, DataPacket * pPacket);
//--------------------------------------------------------------------------------------------------
// 功能: 添加数据到发送队列中, 通过通讯口发送数据
// 参数: pPacket, 需要发送的数据,已经正确存放在了相应字段。
// 结果:
// 0, 可以发送, 添加到了发送数据队列中
// -1, 参数错误
// -2发送错误
// 1, 队列已满, 不能发送
int sendAPacket(DataExFuns * funs, DataPacket * pPacket);
//--------------------------------------------------------------------------------------------------
// 功能: 打包一个固定长度数据包
// 参数:
// pPacket, 需要打包的数据包其中除了sync和crc的部分已经就绪
// 结果:
// 0, 打包好数据
// -1, 参数错误
int packetAFLDP(DataPacket * pPacket);
//--------------------------------------------------------------------------------------------------
// 功能: 打包一个可变长度数据包
// 参数: pPacket, 需要打包的数据包,需要填充其中的 SYNC EXLEN EXCRC 和 EXDAT 等部分
// pExdat, 附加数据,可以为空
// exlen附加数据长度可以为0
// 结果:
// 0, 打包好数据
// -1, 参数错误
// -2
int packetAVLDP(DataPacket * pPacket, u8 * pExdat, u16 exlen);
//--------------------------------------------------------------------------------------------------
#endif

13
machine/comm/config.h Normal file
View File

@ -0,0 +1,13 @@
#ifndef __CONFIG_H__
#define __CONFIG_H__
#include "typedef.h"
#include <QImage>
#define BF_SW_ND 448 // 最大换色数
#define MAX_EXDP_LEN 1024 // 最大附加数据长度
#define IMAGE_TYPE (QImage::Format_ARGB32)
#endif

159
machine/comm/crc16.cpp Normal file
View File

@ -0,0 +1,159 @@

//-------------------------------------------------------------------------------
// File Name: crc16.cpp
// Brief:
// Version: 1.0.0
// Create Date: 2017/05/08
// Create by: Marshal Lee
// Copyright:
// Copyright (c) 2017, Richpeace Co., LTD.
// All rights reserved.
//
// Modify by: Marshal Lee
// Modify Date: 2017/05/08
//-------------------------------------------------------------------------------
#include "crc16.h"
//-------------------------------------------------------------------------------
#ifdef USE_CRC_TABLE
// 16 位 crc 列表
u16 CRC16_LIST[256] =
{
0x0000, 0x3096, 0x612C, 0x51BA, 0xC419, 0xF48F, 0xA535, 0x95A3,
0x8832, 0xB8A4, 0xE91E, 0xD988, 0x4C2B, 0x7CBD, 0x2D07, 0x1D91,
0x1064, 0x20F2, 0x7148, 0x41DE, 0xD47D, 0xE4EB, 0xB551, 0x85C7,
0x9856, 0xA8C0, 0xF97A, 0xC9EC, 0x5C4F, 0x6CD9, 0x3D63, 0x0DF5,
0x20C8, 0x105E, 0x41E4, 0x7172, 0xE4D1, 0xD447, 0x85FD, 0xB56B,
0xA8FA, 0x986C, 0xC9D6, 0xF940, 0x6CE3, 0x5C75, 0x0DCF, 0x3D59,
0x30AC, 0x003A, 0x5180, 0x6116, 0xF4B5, 0xC423, 0x9599, 0xA50F,
0xB89E, 0x8808, 0xD9B2, 0xE924, 0x7C87, 0x4C11, 0x1DAB, 0x2D3D,
0x4190, 0x7106, 0x20BC, 0x102A, 0x8589, 0xB51F, 0xE4A5, 0xD433,
0xC9A2, 0xF934, 0xA88E, 0x9818, 0x0DBB, 0x3D2D, 0x6C97, 0x5C01,
0x51F4, 0x6162, 0x30D8, 0x004E, 0x95ED, 0xA57B, 0xF4C1, 0xC457,
0xD9C6, 0xE950, 0xB8EA, 0x887C, 0x1DDF, 0x2D49, 0x7CF3, 0x4C65,
0x6158, 0x51CE, 0x0074, 0x30E2, 0xA541, 0x95D7, 0xC46D, 0xF4FB,
0xE96A, 0xD9FC, 0x8846, 0xB8D0, 0x2D73, 0x1DE5, 0x4C5F, 0x7CC9,
0x713C, 0x41AA, 0x1010, 0x2086, 0xB525, 0x85B3, 0xD409, 0xE49F,
0xF90E, 0xC998, 0x9822, 0xA8B4, 0x3D17, 0x0D81, 0x5C3B, 0x6CAD,
0x8320, 0xB3B6, 0xE20C, 0xD29A, 0x4739, 0x77AF, 0x2615, 0x1683,
0x0B12, 0x3B84, 0x6A3E, 0x5AA8, 0xCF0B, 0xFF9D, 0xAE27, 0x9EB1,
0x9344, 0xA3D2, 0xF268, 0xC2FE, 0x575D, 0x67CB, 0x3671, 0x06E7,
0x1B76, 0x2BE0, 0x7A5A, 0x4ACC, 0xDF6F, 0xEFF9, 0xBE43, 0x8ED5,
0xA3E8, 0x937E, 0xC2C4, 0xF252, 0x67F1, 0x5767, 0x06DD, 0x364B,
0x2BDA, 0x1B4C, 0x4AF6, 0x7A60, 0xEFC3, 0xDF55, 0x8EEF, 0xBE79,
0xB38C, 0x831A, 0xD2A0, 0xE236, 0x7795, 0x4703, 0x16B9, 0x262F,
0x3BBE, 0x0B28, 0x5A92, 0x6A04, 0xFFA7, 0xCF31, 0x9E8B, 0xAE1D,
0xC2B0, 0xF226, 0xA39C, 0x930A, 0x06A9, 0x363F, 0x6785, 0x5713,
0x4A82, 0x7A14, 0x2BAE, 0x1B38, 0x8E9B, 0xBE0D, 0xEFB7, 0xDF21,
0xD2D4, 0xE242, 0xB3F8, 0x836E, 0x16CD, 0x265B, 0x77E1, 0x4777,
0x5AE6, 0x6A70, 0x3BCA, 0x0B5C, 0x9EFF, 0xAE69, 0xFFD3, 0xCF45,
0xE278, 0xD2EE, 0x8354, 0xB3C2, 0x2661, 0x16F7, 0x474D, 0x77DB,
0x6A4A, 0x5ADC, 0x0B66, 0x3BF0, 0xAE53, 0x9EC5, 0xCF7F, 0xFFE9,
0xF21C, 0xC28A, 0x9330, 0xA3A6, 0x3605, 0x0693, 0x5729, 0x67BF,
0x7A2E, 0x4AB8, 0x1B02, 0x2B94, 0xBE37, 0x8EA1, 0xDF1B, 0xEF8D
};
#else
#ifdef SHIFT_RIGHT // 如果是右移
#define CRC_GEN 0xa001 // 使用多项式 0xa001
#else // 如果是左移
#define CRC_GEN 0x8005 // 使用多项式 0x8005
#endif // #ifdef SHIFT_RIGHT
#endif
//-------------------------------------------------------------------------------
u16 addCrc16(u16 crcword, u8 dat)
{
#ifdef USE_CRC_TABLE // 查表法crc
crcword = (crcword >> 8) ^ CRC16_LIST[(crcword ^ dat) & 0xFF];
#else
u8 i;
crcword ^= dat;
for (i = 0; i < 8; i++)
{
#ifdef SHIFT_RIGHT // 右移计算crc
if ((LOBYTE(crcword) & 0x01) != 0)
{
crcword >>= 1;
crcword ^= CRC_GEN;
}
else
{
crcword >>= 1;
}
#else // 左移计算crc
if ((HIBYTE(crcword) & 0x80) != 0)
{
crcword <<= 1;
crcword ^= CRC_GEN;
}
else
{
crcword <<= 1;
}
#endif
}
#endif
return crcword;
}
//-------------------------------------------------------------------------------
u16 calcCrc16(u8 * pBuf, int lenBuf)
{
int i;
u16 crcword = CRC_INIT;
for (i = 0; i < lenBuf; i++)
{
crcword = addCrc16(crcword, pBuf[i]);
}
return crcword;
}
//-------------------------------------------------------------------------------
u8 calcCheckSum8(u8 * pBuf, int lenBuf)
{
int i;
u8 checksum = 0;
for (i = 0; i < lenBuf; i++)
{
checksum += pBuf[i];
}
return checksum;
}
//-------------------------------------------------------------------------------
u32 calcCheckSum32(u8 * pBuf, int lenBuf)
{
int i;
u32 checksum = 0;
for (i = 0; i < lenBuf; i++)
{
checksum += pBuf[i];
}
return checksum;
}

60
machine/comm/crc16.h Normal file
View File

@ -0,0 +1,60 @@
//-------------------------------------------------------------------------------
// File Name: crc16.h
// Brief:
// Version: 1.0.0
// Create Date: 2017/05/08
// Create by: Marshal Lee
// Copyright:
// Copyright (c) 2017, Richpeace Co., LTD.
// All rights reserved.
//
// Modify by: Marshal Lee
// Modify Date: 2017/05/08
//-------------------------------------------------------------------------------
#ifndef __CRC16_H__
#define __CRC16_H__
/*
CRC16
CRC16
*/
#include "typedef.h"
#define USE_CRC_TABLE // 用查表法crc, 否则, 用移位法计算
#define SHIFT_RIGHT // 右移位
#ifdef USE_CRC_TABLE
#define CRC_INIT 0x0000 // 并且crc初值为0
#else
#ifdef SHIFT_RIGHT // 如果是右移
#define CRC_INIT 0xFFFF // crc初值为0xFFFF
#else // 如果是左移
#define CRC_INIT 0x0000 // 并且crc初值为0
#endif // #ifdef SHIFT_RIGHT
#endif
u16 calcCrc16(u8 * pBuf, int lenBuf);
u8 calcCheckSum8(u8 * pBuf, int lenBuf);
u32 calcCheckSum32(u8 * pBuf, int lenBuf);
#endif

74
machine/comm/crc32.cpp Normal file
View File

@ -0,0 +1,74 @@

//-------------------------------------------------------------------------------
// File Name: crc32.c
// Brief:
// Version: 1.0.0
// Create Date: 2018/08/13
// Create by: Marshal Lee
// Copyright:
// Copyright (c) 2019, Richpeace Co., LTD.
// All rights reserved.
//
// Modify by: Marshal Lee
// Modify Date: 2018/08/13
//-------------------------------------------------------------------------------
#include "crc32.h"
//-------------------------------------------------------------------------------
static const u32 CRC32_LIST[256] =
{
0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L,
0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L,
0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L,
0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L,
0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L,
0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL,
0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL,
0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L,
0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L,
0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L,
0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL,
0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L,
0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL,
0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L,
0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L,
0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L,
0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL,
0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L,
0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL,
0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL,
0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L,
0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L,
0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L,
0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL,
0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL,
0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL,
};
u32 addCrc32(u32 crcword, u8 dat)
{
return (crcword >> 8) ^ CRC32_LIST[((crcword ^ dat) & 0xFF)];
}
u32 calcCrc32(u8 * pBuf, int lenBuf)
{
int i;
u32 crcword = CRC32_INIT;
for (i = 0; i < lenBuf; i++)
{
crcword = addCrc32(crcword, pBuf[i]);
}
return crcword;
}

33
machine/comm/crc32.h Normal file
View File

@ -0,0 +1,33 @@
//-------------------------------------------------------------------------------
// File Name: crc32.h
// Brief:
// Version: 1.0.0
// Create Date: 2018/08/13
// Create by: Marshal Lee
// Copyright:
// Copyright (c) 2019, Richpeace Co., LTD.
// All rights reserved.
//
// Modify by: Marshal Lee
// Modify Date: 2018/08/13
//-------------------------------------------------------------------------------
#ifndef __CRC32_H__
#define __CRC32_H__
/*
CRC32
*/
#include "typedef.h"
#define CRC32_INIT 0xffffffff // crc初值
u32 addCrc32(u32 crcword, u8 dat);
u32 calcCrc32(u8 * pBuf, int lenBuf);
#endif

493
machine/comm/datadef.h Normal file
View File

@ -0,0 +1,493 @@
//-------------------------------------------------------------------------------
// File Name: datadef.h
// Brief:
// Version: 1.0.0
// Create Date: 2017/05/08
// Create by: Marshal Lee
// Copyright:
// Copyright (c) 2017, Richpeace Co., LTD.
// All rights reserved.
//
// Modify by: Marshal Lee
// Modify Date: 2017/05/08
//-------------------------------------------------------------------------------
#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
{
u8 ctrl;//控制字节
u8 attr;//属性字节
WORD action;// 附加动作
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.2mm0.1mm
0 1 -128 -- +126, 0.2mm0.1mm
1 0 -128 -- +126, 2mm1mm
1 1 cdx , cdx
*/
}__attribute__ ((packed)) ToBItem, Ds2Item;
#define PUNCHRADIUS 100 //冲孔半径(用于绘制图形)
// 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_END 0x80 // 结束码
#define DATA_PAUSE 0x81 // 暂停功能码
#define DATA_CHGND 0x82 // 绣花换针杆功能码(换色)
#define DATA_CUTTRD 0x83 // 剪线功能码
#define DATA_ANGLE 0x89 // 拐点
// 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 SWITCHTABLE 512
#define SWITCHTABLENUM 4
#define SWITCHTABLE1 32
#define SWITCHTABLE2 32+SWITCHTABLE1
#define SWITCHTABLE3 SWITCHTABLE/SWITCHTABLENUM+SWITCHTABLE2
#define SWITCHTABLE4 SWITCHTABLE/SWITCHTABLENUM+SWITCHTABLE3
#pragma pack(1)//设定为1字节对齐
// 数据文件头
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
u32 fileid; // 文件唯一标识符,识别是否为同一个文件
// 0x36
s32 anchorX; // 定位点坐标X
s32 anchorY; // 定位点坐标Y
// 0x3E
s32 beginX; // 数据起点坐标X
s32 beginY; // 数据起点坐标Y
s32 beginR; // 数据起点坐标Z
// 0x4A
s32 minX;
s32 maxX;
s32 minY;
s32 maxY; // 轮廓范围
// 0x5A
u32 jumpNeedleNum; // 跳针数
// 0x5E
u32 colorNum; // 颜色数
// 0x62
u16 rotateStyle; //旋转式样
//0x64
u16 horizontalStyle; //水平翻转式样
//0x66
u16 verticalStyle; //垂直翻转式样
//0x68
u16 rotateAngle; //旋转角度
//0x6A
u16 xZoom; //X向倍率
//0x6C
u16 yZoom; //Y向倍率
//0x6E
u16 lockNeedlesNum; //锁针次数
//0x70
u16 lockNeedlesStepNum; //锁针步数
//0x72
u16 lockNeedlesStepLength; //锁针针步长度
//0x74
u16 stitchSplitLength; //需要分割的针步长度
//0x76
u16 continuRunComp; //连续动框补偿
//0x78
u16 needleTipComp; //针尖补偿
//0x7A
u8 reserved1[0x82-0x7A];//保留
//0x82
s32 breakLineParkNum; //断线停车次数
//0x86
u8 reserved2[0x200-0x86];//保留
// 0x400
u8 switchTable[SWITCHTABLE]; // 色序设定表
}__attribute__ ((packed)) DataFileHead;//中间数据(fcg)
//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
u8 reserved0; // 保留
u8 reserved1;
u32 fileid; // 文件唯一标识符,识别是否为同一个文件
// 0x38
u32 punchNum; // 冲孔个数
//0x3C
u32 colorNumber;
// 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
u32 runAct; // 附加动作,
// bit0: 0:完成后不拍照 1:完成后拍照
// 0x84
u32 rev;
s32 offsetX; // 偏移点X
s32 offsetY;
// 0x9A
u8 reserved2[0x200-0x90];
// 0x200
u8 switchTable[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
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 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

1929
machine/comm/protocol.h Normal file

File diff suppressed because it is too large Load Diff

107
machine/comm/typedef.h Normal file
View File

@ -0,0 +1,107 @@
#ifndef TYPEDEF_H
#define TYPEDEF_H
//---------------------------------------------------------------
#ifndef NULL
#define NULL ((void *) 0)
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
//---------------------------------------------------------------
#define DATA_VALID 0x55AA
//---------------------------------------------------------------
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short int WORD;
typedef unsigned long int DWORD;
typedef unsigned char u8;
typedef unsigned short int u16;
typedef unsigned int u32;
typedef char s8;
typedef short int s16;
typedef int s32;
//---------------------------------------------------------------
#define U8_MAX ((u8)255)
#define S8_MAX ((s8)127)
#define S8_MIN ((s8)(-128))
#define U16_MAX ((u16)65535u)
#define S16_MAX ((s16)32767)
#define S16_MIN ((s16)(-32768))
#define U32_MAX ((u32)4294967295uL)
#define S32_MAX ((s32)2147483647uL)
#define S32_MIN ((s32)(-2147483648uL))
//---------------------------------------------------------------
#ifndef LOBYTE
#define LOBYTE(w) ((BYTE)(((WORD)(w)) & 0xff))
#endif
#ifndef HIBYTE
#define HIBYTE(w) ((BYTE)((((WORD)(w)) >> 8) & 0xff))
#endif
#ifndef LOWORD
#define LOWORD(l) ((WORD)(((DWORD)(l)) & 0xffff))
#endif
#ifndef HIWORD
#define HIWORD(l) ((WORD)((((DWORD)(l)) >> 16) & 0xffff))
#endif
#ifndef MAKEWORD
#define MAKEWORD(a, b) ((WORD)((BYTE)(a)) | (((WORD)((BYTE)(b))) << 8))
#endif
#ifndef MAKEDWORD
#define MAKEDWORD(a, b) ((DWORD)((WORD)(a)) | (((DWORD)((WORD)(b))) << 16))
#endif
#ifndef LOHFBYTE
#define LOHFBYTE(b) ((BYTE)((b) & 0x0f))
#endif
#ifndef HIHFBYTE
#define HIHFBYTE(b) ((BYTE)(((b) >> 4) & 0x0f))
#endif
#ifndef MAKEBYTE
#define MAKEBYTE(a, b) ((BYTE)((BYTE)((a) & 0x0f)) | ((BYTE)(((BYTE)((b) & 0x0f)) << 4)))
#endif
#ifndef MIN
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
#ifndef MAX
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#endif
//---------------------------------------------------------------
#ifndef PI
#define PI 3.1415926535897932
#endif
#endif // TYPEDEF_H

153
machine/comport.cpp Normal file
View File

@ -0,0 +1,153 @@
#include "comport.h"
#include <QDebug>
#include <QThread>
//-----------------------------------------------------------------------------------------------------
ComPort::ComPort(QObject *parent) :
QObject(parent),
m_pSerialport(NULL),
m_running(0),
m_pReadTimer(NULL)
{
m_pReadTimer = new QTimer(this);
m_pReadTimer->setInterval(20);
connect(m_pReadTimer, SIGNAL(timeout()), this, SLOT(getDataFromPort()));
}
ComPort::~ComPort()
{
m_pReadTimer->stop();
delete m_pReadTimer;
if (m_pSerialport != NULL)
{
m_pSerialport->close();
delete m_pSerialport;
m_pSerialport = NULL;
}
}
void ComPort::setComPortName(QString portName)
{
m_portName.clear();
if(portName.length() > 0)//串口名称不为空
{
m_portName = portName;
return;
}
//windows平台下
#ifdef Q_OS_WIN
//得到串口设备
QString path = "HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM";
QSettings *settings = new QSettings(path,QSettings::NativeFormat);
QStringList key = settings->allKeys();
int num = (int)key.size();
//打开注册表
unsigned long keysize,type,valuesize;
wchar_t keyname[256]; //键名数组
char keyvalue[256]; //键值数组
keysize = sizeof(keyname);
valuesize = sizeof(keyvalue);
int indexnum;
HKEY hKey;
QString commresult = "";
QString valuemessage = "";//键值
QString strkey = "HARDWARE\\DEVICEMAP\\SERIALCOMM";//子键路径
LPCWSTR subkey = reinterpret_cast<const wchar_t *>(strkey.utf16());
if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&hKey)!=0)
{
return;
}
//循环得到串口设备的名称
for(int i = 0; i < num; i++)
{
valuemessage.clear();
commresult.clear();
keysize=sizeof(keyname);
valuesize=sizeof(keyvalue);
indexnum=i;//要读取键值的索引号
if(::RegEnumValue(hKey,indexnum,keyname,&keysize,0,&type,(BYTE*)keyvalue,&valuesize) == 0)//列举键名和值
{
for(unsigned int j = 0; j < valuesize; j++)
{
if(keyvalue[j]!=0x00)
{
valuemessage.append(keyvalue[j]);
}
}
if(m_portName.length() <= 0)
{
m_portName = valuemessage;
}
}
else
{
commresult="nokey";
}
}
::RegCloseKey(hKey);//关闭注册表
#endif
#ifdef Q_OS_LINUX
m_portName = COMNAME;
#endif
return;
}
void ComPort::initComm()
{
if (m_running == 0)
{
qDebug() << "InitComm ComPort at thread" << QThread::currentThread() << "name" << m_portName;
struct PortSettings myComSetting = {BAUD115200, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 0, 20};
m_pSerialport = new QextSerialPort(m_portName, myComSetting);
bool bOpen = m_pSerialport->open(QIODevice::ReadWrite | QIODevice::Unbuffered);
if(bOpen == false)
{
emit siSerialPortOpenState(m_running);
return;
}
qDebug() << "Start timer";
m_pReadTimer->start();
m_running = 1;
emit siSerialPortOpenState(m_running);
}
}
void ComPort::getDataFromPort()
{
// qDebug("GetDataFromPort");
// qDebug() << "ComPort GetDataFromPort" << QThread::currentThread();
if (m_running != 0 && m_pSerialport != NULL)
{
QByteArray dat = m_pSerialport->readAll();
if (dat.size() != 0)
{
//qDebug()<<"dat.size()="<<dat.size();
//qDebug("SiReceiveData");
emit (siReceiveData(dat));
}
}
}
void ComPort::slotSendData(QByteArray dat)
{
// qDebug() << "ComPort SlotSendData" << QThread::currentThread();
if (m_running != 0 && m_pSerialport != NULL && dat.size() != 0)
{
// qDebug("send data");
m_pSerialport->write(dat.data(), dat.size());
}
}

43
machine/comport.h Normal file
View File

@ -0,0 +1,43 @@
#ifndef COMPORT_H
#define COMPORT_H
#include <QObject>
#include <QTimer>
#include <QSettings>
#include "qextserial/qextserialport.h"
#ifdef Q_OS_LINUX
#define COMNAME "/dev/ttyS1"
#define COMNAME485 "/dev/ttyS2"
#endif
class ComPort : public QObject
{
Q_OBJECT
public:
explicit ComPort(QObject *parent = 0);
~ComPort();
private:
QextSerialPort * m_pSerialport;
int m_running;
QTimer * m_pReadTimer;
QString m_portName;
public:
void setComPortName(QString portName);//获取所有串口名称
private slots:
void getDataFromPort();
signals:
void siReceiveData(QByteArray dat);
void siSerialPortOpenState(int val);
public slots:
void initComm();
void slotSendData(QByteArray dat);
};
#endif // COMTHREAD_H

119
machine/error.cpp Normal file
View File

@ -0,0 +1,119 @@

#include "error.h"
#include "comm/protocol.h"
#include <QObject>
#define CASE_OP(cd, str) \
{\
case cd:\
errinfo = str;\
break;\
}
QString getErrStr(u32 code)
{
QString errinfo;
errinfo.clear();
QString errorCode;
errorCode.clear();
switch (code)
{
//通用的错误代码
CASE_OP(ERR_NONE, QObject::tr("")); // 没有错误
CASE_OP(ERR_NO_AIR, QObject::tr("Insufficient air pressure")); // 气压不足
CASE_OP(ERR_NOT_SAFE, QObject::tr("safe area error")); // 安全区域介入
CASE_OP(ERR_EXPIRATION, QObject::tr("Expiration of use (Please contact the manufacturer)")); // 使用时限已到 (请联系厂家)
CASE_OP(ERR_DRIVER, QObject::tr("Driver alarm")); // 驱动器报警
CASE_OP(ERR_FILL_DATA, QObject::tr("Fill data error")); // 填充数据错误
CASE_OP(ERR_NOT_ALLOWED, QObject::tr("Not allowed to work")); // 不允许工作状态
CASE_OP(ERR_CTRL_ERR, QObject::tr("Control error")); // 控制错误
CASE_OP(ERR_FPGA_ERR, QObject::tr("Motion control chip version error")); // 运动控制芯片版本错误
CASE_OP(ERR_BUTTON_NOUP, QObject::tr("Waiting for button to lift timeout")); // 等待按钮抬起超时
CASE_OP(ERR_FPGA_RESET, QObject::tr("FPGA Reset")); // FPGA复位
CASE_OP(ERR_NO_READY, QObject::tr("Peripheral Device not ready")); // 外设未就绪
CASE_OP(ERR_NO_SEND_ERR, QObject::tr("Transmission data error")); // 传输数据错误
CASE_OP(ERR_EDTION_ERR, QObject::tr("Program version error")); // 程序版本错误
CASE_OP(ERR_WORK_DONE, QObject::tr("Complete output")); // 完成产量
CASE_OP(ERR_LMT_POSITIVE, QObject::tr("Positive limit")); // 正向限位
CASE_OP(ERR_LMT_NEGATIVE, QObject::tr("Negative limit")); // 反向限位
CASE_OP(ERR_RUN_ALM, QObject::tr("Motion alarm")); // 运动报警
CASE_OP(ERR_RUN_LIMIT, QObject::tr("Motion limit")); // 运动限位
CASE_OP(ERR_RUN_EMS, QObject::tr("Emergency stop")); // 运动急停
CASE_OP(ERR_MV_PARA, QObject::tr("Motion parameters error")); // 运动参数错误
CASE_OP(ERR_MC_PARA, QObject::tr("Machine parameters error")); // 机器参数错误
CASE_OP(ERR_IN_PARA, QObject::tr("Input parameters error")); // 输入参数错误
CASE_OP(ERR_NOT_WORKSTA, QObject::tr("Not in work status error")); // 不能工作状态
CASE_OP(ERR_NOT_MOVESTA, QObject::tr("Prohibited frame moving state")); // 禁止移框状态
CASE_OP(ERR_MTZ_RIGHT, QObject::tr("Zero success")); // 归零成功
CASE_OP(ERR_MTZ_ERROR, QObject::tr("Return to zero error")); // 归零错误
CASE_OP(ERR_COOR_SYSTM, QObject::tr("XYCoordinate system error (Please reset to zero again)")); // XY坐标系统错误请重新归零
CASE_OP(ERR_OUT_RANGE, QObject::tr("Target position out of bounds")); // 目标位置越界
CASE_OP(ERR_X_LIT_POSI, QObject::tr("X Positive limit")); // X正向限位
CASE_OP(ERR_X_LIT_NEGA, QObject::tr("X Negative limit")); // X反向限位
CASE_OP(ERR_Y_LIT_POSI, QObject::tr("Y Positive limit")); // Y正向限位
CASE_OP(ERR_Y_LIT_NEGA, QObject::tr("Y Negative limit")); // Y反向限位
CASE_OP(ERR_MC_MANUAL, QObject::tr("Machine is in manual state")); // 机器处于手动状态
CASE_OP(ERR_KEY_SW_OFF, QObject::tr("Machine key off")); // 机器钥匙开关关闭
CASE_OP(ERR_LIGHTCURTAINS1, QObject::tr("Light curtain 1 intervention")); // 光幕1介入
CASE_OP(ERR_LIGHTCURTAINS2, QObject::tr("Light curtain 2 intervention")); // 光幕2介入
CASE_OP(ERR_NO_DATA, QObject::tr("None data")); // 无数据
CASE_OP(ERR_DATA_ERROR, QObject::tr("Data error")); // 数据错误
CASE_OP(ERR_GRAPH_OUT_RANGE, QObject::tr("Graphics out of range")); // 图形超出范围
CASE_OP(ERR_MS_NOT_ZERO, QObject::tr("Spindle is not in zero position")); // 主轴不在零位
CASE_OP(ERR_CUTTER_NOT_POS, QObject::tr("Scissors are not in position")); // 剪刀不在回位
CASE_OP(ERR_UPER_TBREAK, QObject::tr("Thread is broken"));// 断线
CASE_OP(ERR_BOBBIN_TBREAK, QObject::tr("Bottom thread disconnected")); // 底线断线
CASE_OP(ERR_TRANS_TIMEOUT, QObject::tr("Execution command timed out")); // 执行命令超时
CASE_OP(ERR_LIFT_TIMEOUT, QObject::tr("Cutting down lifting timeout (please check lifting sensor)")); // 裁切下升降超时(请检查升降传感器)
CASE_OP(ERR_NODE_ERR, QObject::tr("Node error")); // 节点错误
CASE_OP(ERR_BUS_ERR, QObject::tr("Bus Error (Please check the communication connection)")); // 总线错误(请检查通讯连接)
CASE_OP(ERR_CAN_TIMEOUT, QObject::tr("CAN communication timeout")); // CAN通讯超时
CASE_OP(ERR_CHANGE_BOBBIN, QObject::tr("Change the bobbin")); // 更换梭芯
CASE_OP(ERR_CHANGE_BOBBIN_A, QObject::tr("Replace bobbin A")); // 更换梭芯A
CASE_OP(ERR_CHANGE_BOBBIN_B, QObject::tr("Replace bobbin B")); // 更换梭芯B
CASE_OP(ERR_CHANGE_BOBBIN_STA, QObject::tr("The machine is in the state of replacing the bobbin")); // 机器处于更换梭芯状态
CASE_OP(ERR_AIR_POWER, QObject::tr("Insufficient air pressure")); // 气压不足
CASE_OP(ERR_MC_AUTO, QObject::tr("Machine is in auto state")); // 机器处于自动状态
CASE_OP(ERR_INSTALLMENT_OK, QObject::tr("Password set finished")); // 密码设置成功
CASE_OP(ERR_INSTALLMENT_FAIL, QObject::tr("Password set failed")); // 密码设置失败
CASE_OP(ERR_READ_HEAD_PARA, QObject::tr("Error reading headboard parameters")); // 读取机头板参数错误
CASE_OP(ERR_CHANGE_PNHPIN1, QObject::tr("Replace punch 1")); // 更换冲头1
CASE_OP(ERR_CHANGE_PNHPIN2, QObject::tr("Replace punch 2")); // 更换冲头2
CASE_OP(ERR_CHANGE_PNHPIN3, QObject::tr("Replace punch 3")); // 更换冲头3
CASE_OP(ERR_CHANGE_PNHPIN4, QObject::tr("Replace punch 4")); // 更换冲头4
CASE_OP(ERR_CHANGE_PNHPIN5, QObject::tr("Replace punch 5")); // 更换冲头5
CASE_OP(ERR_CHANGE_PNHPIN6, QObject::tr("Replace punch 6")); // 更换冲头6
//通用的状态信息
CASE_OP(STA_NORMAL_STOP, QObject::tr("Normal stop")); // 正常停止
CASE_OP(STA_MTZ_SUCCESS, QObject::tr("Find zero success")); // 归零成功
CASE_OP(STA_WORK_PAUSE, QObject::tr("work pause")); // 工作暂停
CASE_OP(STA_WORK_OVER, QObject::tr("End of work")); // 工作结束
CASE_OP(STA_WORK_FINISH, QObject::tr("Work done")); // 工作完成
CASE_OP(STA_WORK_DONE, QObject::tr("Complete production")); // 完成产量
CASE_OP(STA_EXEC_SUCCESS, QObject::tr("Execute success")); // 执行成功
CASE_OP(STA_EXEC_FAILED, QObject::tr("Execute false")); // 执行失败
CASE_OP(STA_WAIT_FILE, QObject::tr("wait file")); // 等待文件
CASE_OP(STA_CHANGE_BOBBIN, QObject::tr("change the bobbin")); // 更换梭芯
CASE_OP(STA_PROCESS_FINISH, QObject::tr("Execute finish")); // 执行完成
CASE_OP(STA_PROCESS_RUNNING, QObject::tr("Execute runnibng")); // 执行过程中
CASE_OP(STA_AUTO_SOFTLIMIT, QObject::tr("Automatic soft limit setting completed")); // 自动定软限位完成
default:
//errorCode.sprintf("CODE 0x%x", code);
//errinfo.append(QObject::tr("Undefined error,") + errorCode);
break;
}
return errinfo;
}
QString getPromptStr(u32 code)
{
QString errinfo;
switch (code)
{
CASE_OP(ERR_NO_MATERIEL, QObject::tr("Please feed")); // 请上料
}
return errinfo;
}

12
machine/error.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef ERROR_H
#define ERROR_H
#include <QString>
#include "comm/typedef.h"
QString getErrStr(u32 code);
QString getPromptStr(u32 code);
#endif // ERROR_H

View File

@ -0,0 +1,335 @@
#include "gatewaytcpclient.h"
#include <QSettings>
#include <QApplication>
#include <QAbstractSocket>
GatewayTcpClient::GatewayTcpClient(QObject *parent) :
QObject(parent),
m_pClientSocket(NULL),
m_pConnectCheckTimer(NULL),
m_connected(0),
m_pConnectDetectThread(NULL),
m_pConnectDetect(NULL),
m_detect(0),
m_localip(DEF_LOCAL_IP),
m_localport(DEF_LOCAL_PORT),
m_serverip(DEF_SERVER_IP),
m_serverport(DEF_SERVER_PORT)
{
m_pClientSocket = new QBindTcpSocket(this);
m_pClientSocket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);
connect(m_pClientSocket, SIGNAL(readyRead()), this, SLOT(receiveServerData()));
connect(m_pClientSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(displaySocketError(QAbstractSocket::SocketError)));
// connect(m_pClientSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(netStateChanged(QAbstractSocket::SocketState)));
m_pConnectCheckTimer = new QTimer(this);
connect(m_pConnectCheckTimer, SIGNAL(timeout()), this, SLOT(connectCheck()));
m_pConnectDetectThread = new QThread();
}
GatewayTcpClient::~GatewayTcpClient()
{
m_pConnectCheckTimer->stop();
delete m_pConnectCheckTimer;
m_pClientSocket->disconnectFromHost();
m_pClientSocket->waitForDisconnected();
m_pClientSocket->close();
delete m_pClientSocket;
if (m_connected != 0)
{
m_pConnectDetectThread->quit();
m_pConnectDetectThread->wait();
}
delete m_pConnectDetectThread;
}
void GatewayTcpClient::setConfigFileName(QString configfilename)
{
m_configFileName = configfilename;
}
void GatewayTcpClient::connectToServer()
{
if (m_pClientSocket == NULL)
{
qDebug() << "m_pClientSocket not alloc";
return;
}
if (m_connected == 0)
{
loadIpAndPort();
if (m_pConnectDetect == NULL)
{
m_pConnectDetect = new TcpConnectDetect;
}
qDebug() << "ConnectToServer";
qDebug() << "localip=" << m_localip << "localport=" << m_localport;
qDebug() << "serverip=" << m_serverip << "serverport=" << m_serverport;
m_pConnectDetect->setIpAndPort(m_localip, m_localport, m_serverip, m_serverport);
m_pConnectDetect->moveToThread(m_pConnectDetectThread);
connect(this, SIGNAL(siDetectHost()), m_pConnectDetect, SLOT(connectDetect()), Qt::QueuedConnection);
connect(m_pConnectDetect, SIGNAL(siConnectSta(int)), this, SLOT(detectStatus(int)), Qt::QueuedConnection);
// 20191226由于检测线程会造成网络重连所以将检测线程注释 lft
/*
connect(m_pConnectDetectThread, SIGNAL(started()), m_pConnectDetect, SLOT(detectStart()) );
connect(m_pConnectDetectThread, SIGNAL(finished()), m_pConnectDetect, SLOT(deleteLater()) ); // 退出删除对象
m_pConnectDetectThread->start(); // 启动线程
*/
m_pConnectCheckTimer->start(1000);
m_connected = 1;
m_detect = 1;
}
}
void GatewayTcpClient::disConnectFromServer()
{
if (m_connected != 0)
{
m_pConnectCheckTimer->stop();
if (m_pClientSocket != NULL)
{
m_pClientSocket->disconnectFromHost();
m_pClientSocket->waitForDisconnected();
m_pClientSocket->close();
}
m_pConnectDetectThread->quit();
m_pConnectDetectThread->wait();
m_connected = 0;
m_detect = 0;
}
}
void GatewayTcpClient::loadIpAndPort()
{
if (!m_configFileName.isEmpty())
{
// 机器的IP和端口 和 连接机器的本地IP和端口
QSettings configIni(m_configFileName, QSettings::IniFormat);
QString serverip, localip;
quint16 serverport, localport;
//网关IP不固定但是不能与主板连接IP相同
serverip = configIni.value("server/ip", QVariant("192.168.2.95")).toString();
serverport = configIni.value("server/port", QVariant(8080)).toInt();
localip = configIni.value("local/ip", QVariant("192.168.2.100")).toString();
localport = configIni.value("local/port", 5001).toInt();
// 回写参数
configIni.setValue("server/ip", serverip);
configIni.setValue("server/port", serverport);
configIni.setValue("local/ip", localip);
configIni.setValue("local/port", localport);
m_localip = localip;
m_localport = localport;
m_serverip = serverip;
m_serverport = serverport;
}
}
// 发送数据的槽
void GatewayTcpClient::slotSendData(QByteArray dat)
{
if (m_pClientSocket != NULL)
{
m_pClientSocket->write(dat);
}
}
// 自动检测连接
void GatewayTcpClient::connectCheck()
{
if (m_pClientSocket == NULL)
{
qDebug() << "Socket is not alloced";
return;
}
// qDebug() << "check client connect";
if (m_connected == 1)
{
if (m_localip.isEmpty() == false)
{
m_pClientSocket->bindAddrAndPort(m_localip, m_localport);
}
m_pClientSocket->abort();
m_pClientSocket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
m_pClientSocket->connectToHost(m_serverip, m_serverport);
int rslt = m_pClientSocket->waitForConnected(2000);
if (rslt == 0)
{
}
/*
qDebug("bind connect and waitForConnected 2000, rslt=%d", rslt);
qDebug() << "localip=" << m_localip << "localport=" << m_localport;
qDebug() << "serverip=" << m_serverip << "serverport=" << m_serverport;
*/
m_connected = 2;
}
else if (m_connected != 0)
{
switch(m_pClientSocket->state())
{
case QAbstractSocket::ConnectedState:
{
if (m_connected != 3)
{
/*
qDebug() << "net State is Connected";
qDebug() << "localip=" << m_localip << "localport=" << m_localport;
*/
m_connected = 3; // 检测连接状态
}
break;
}
case QAbstractSocket::ConnectingState:
{
if (m_connected != 2)
{
qDebug() << "net State is Connecting";
// qDebug() << "localip=" << m_localip << "localport=" << m_localport;
}
m_connected = 2;
break;
}
case QAbstractSocket::UnconnectedState:
{
if (m_connected != 1)
{
// qDebug() << "net State is unconnected";
// qDebug() << "localip=" << m_localip << "localport=" << m_localport;
}
m_connected = 1;
break;
}
default:
{
/*
QAbstractSocket::HostLookupState
QAbstractSocket::BoundState
QAbstractSocket::ListeningState
QAbstractSocket::ClosingState
*/
{
qDebug("net State is %d\r\n", m_pClientSocket->state());
qDebug() << "localip=" << m_localip << "localport=" << m_localport;
qDebug() << "serverip=" << m_serverip << "serverport=" << m_serverport;
}
m_connected = 1;
}
}
}
else
{
}
if (m_connected == 3) // 已连接
{
if (m_detect == 1)
{
// qDebug() << "Machine " << QThread::currentThread();
m_detect = 0;
emit(siDetectHost());
// qDebug() << "after send SiDetectHost ";
}
}
emit (siConnectSta(m_connected)); // 网络连接信号
}
void GatewayTcpClient::detectStatus(int sta)
{
// qDebug("host detect sta=%d", sta);
m_detect = 1;
if (sta == 1) // 网络已断开
{
qDebug("disconnect ClientSocket by detect");
m_pClientSocket->disconnectFromHost();
// m_pClientSocket->waitForDisconnected();
m_pClientSocket->close();
m_connected = 1;
}
else if (sta == 2) // 网络连接还在
{
}
else
{
}
}
void GatewayTcpClient::receiveServerData()
{
if (m_pClientSocket != NULL)
{
QByteArray tmpDat;
tmpDat = m_pClientSocket->readAll(); // 读取
// qDebug("ReceiveServerData, size = %d", tmpDat.size());
// PrintAsHex(&tmpDat);
emit(siReceiveData(tmpDat)); // 发送收到数据信号
}
}
void GatewayTcpClient::displaySocketError(QAbstractSocket::SocketError err)
{
QString errinfo;
errinfo.sprintf("Err: code=%d, errorString=", err);
errinfo += m_pClientSocket->errorString();
// qDebug() << errinfo;
emit(siConnectErr(errinfo)); // 网络错误信息
}
void GatewayTcpClient::netStateChanged(QAbstractSocket::SocketState sta)
{
switch (sta)
{
/*
case UnconnectedState:
case HostLookupState:
case ConnectingState:
case ConnectedState:
case BoundState:
case ListeningState:
case ClosingStat:
*/
default:
break;
}
}
void GatewayTcpClient::hostFound()
{
qDebug("found host");
}

View File

@ -0,0 +1,72 @@
#ifndef GATEWAYTCPCLIENT_H
#define GATEWAYTCPCLIENT_H
#include <QObject>
#include <QTimer>
#include <QHostAddress>
#include <QTcpSocket>
#include <QUdpSocket>
#include <QTcpServer>
#include <QThread>
#include "qbindtcpsocket.h"
class ConnectDetectThread;
class GatewayTcpClient : public QObject
{
Q_OBJECT
public:
explicit GatewayTcpClient(QObject *parent = NULL);
virtual ~GatewayTcpClient();
public:
void setConfigFileName(QString configfilename);
signals:
void siConnectSta(int sta); // 网络连接信号
void siConnectErr(QString errinfo); // 网络错误信息
void siReceiveData(QByteArray dat); // 收到数据包信号
signals:
void siDetectHost(void);
public:
public slots:
void slotSendData(QByteArray dat); // 发送数据的槽
void connectToServer();//连接到服务器
void disConnectFromServer();
void detectStatus(int);
public:
private slots:
void connectCheck();
void receiveServerData();
void displaySocketError(QAbstractSocket::SocketError err);
void netStateChanged(QAbstractSocket::SocketState sta);
void hostFound();
private:
void loadIpAndPort();
private:
QBindTcpSocket * m_pClientSocket;
QTimer * m_pConnectCheckTimer;
public:
int m_connected; // 连接状态; 0, 初始化; 1, 未连接; 2, 连接中; 3, 已连接
private:
QThread * m_pConnectDetectThread;
TcpConnectDetect * m_pConnectDetect;
int m_detect; // 连接测试状态
private:
QString m_configFileName;
private:
QString m_localip;
quint16 m_localport;
QString m_serverip;
quint16 m_serverport;
};
#endif // GATEWAYTCPCLIENT_H

289
machine/lotmachine.cpp Normal file
View File

@ -0,0 +1,289 @@
#include "lotmachine.h"
#include <QTime>
#include <QApplication>
LotMachine::LotMachine(QObject *parent) :
QObject(parent),
m_pTcpThread(NULL),
m_pTcpClient(NULL),
m_pComThread(NULL),
m_pComPort(NULL),
m_startComm(0)
{
m_receiveBuff.clear();
m_keyBuff.clear();
m_reFlag = 0;
m_connected = 0;
}
LotMachine::~LotMachine()
{
if (m_startComm != 0)
{
if(m_connectMode == USE_TCP_COMM)
{
m_pTcpThread->quit();
m_pTcpThread->wait();
}
else if(m_connectMode == USE_SERIAL_COMM)
{
m_pComThread->quit();
m_pComThread->wait();
}
}
if(m_connectMode == USE_TCP_COMM)
{
if(m_pTcpThread != NULL)
{
delete m_pTcpThread;
}
}
else if(m_connectMode == USE_SERIAL_COMM)
{
if(m_pComThread != NULL)
{
delete m_pComThread;
}
}
}
//初始化通讯连接方式
void LotMachine::initConnectMode(s16 val)
{
m_connectMode = val;
if(m_connectMode == USE_TCP_COMM)//网口
{
m_pTcpThread = new QThread();
m_pTcpClient = new GatewayTcpClient();
}
else if(m_connectMode == USE_SERIAL_COMM)//串口
{
m_pComThread = new QThread();
m_pComPort = new ComPort();
connect(m_pComPort, SIGNAL(siSerialPortOpenState(int)), this, SLOT(slotIfOpenSerialPort(int)) );
}
}
void LotMachine::setConfigFileName(QString configfilename)
{
m_configFileName = configfilename;
if(m_connectMode == USE_TCP_COMM)//网口
{
m_pTcpClient->setConfigFileName(m_configFileName);
}
}
//设置串口名称
void LotMachine::setComportName(QString portName)
{
if(m_pComPort == NULL)
{
return;
}
if(m_connectMode == USE_SERIAL_COMM)//串口
{
m_pComPort->setComPortName(portName);
}
}
QString LotMachine::getConfigFileName()
{
return m_configFileName;
}
int LotMachine::startCommunication()
{
if (m_startComm == 0)
{
// qDebug() << "Machine " << QThread::currentThread();
if(m_connectMode == USE_TCP_COMM)//网口
{
if (m_configFileName.isEmpty())
{
qDebug() << "mast call SetConfigFileName first ";
}
m_pTcpClient->moveToThread(m_pTcpThread); // 移动对象到线程中
// connect(qApp, SIGNAL(finished()), m_pTcpThread, SLOT(finished()));
connect(m_pTcpThread, SIGNAL(started()), m_pTcpClient, SLOT(connectToServer()) );
connect(m_pTcpThread, SIGNAL(finished()), m_pTcpClient, SLOT(deleteLater()) ); // 退出删除对象
connect(m_pTcpClient, SIGNAL(siConnectSta(int)),
this, SLOT(slotConnectSta(int)), Qt::AutoConnection); // 连接状态改变
connect(m_pTcpClient, SIGNAL(siConnectErr(QString)),
this, SLOT(slotConnectErr(QString)), Qt::AutoConnection); // 接收到通讯错误
connect(m_pTcpClient, SIGNAL(siReceiveData(QByteArray)),
this, SLOT(slotReceiveData(QByteArray)), Qt::AutoConnection); // 接收到数据
connect(this, SIGNAL(siSendData(QByteArray)),
m_pTcpClient, SLOT(slotSendData(QByteArray)), Qt::AutoConnection); // 发送数据的槽
m_pTcpThread->start(); // 启动线程
}
if(m_connectMode == USE_SERIAL_COMM)//串口
{
m_pComPort->moveToThread(m_pComThread);
connect(m_pComThread, SIGNAL(started()), m_pComPort, SLOT(initComm()) );
connect(m_pComThread, SIGNAL(finished()), m_pComPort, SLOT(deleteLater()) ); // 退出删除对象
connect(m_pComPort, SIGNAL(siReceiveData(QByteArray)),
this, SLOT(slotReceiveData(QByteArray)), Qt::QueuedConnection); // 接收到数据
connect(this, SIGNAL(siSendData(QByteArray)),
m_pComPort, SLOT(slotSendData(QByteArray)), Qt::QueuedConnection); // 发送数据的槽
m_pComThread->start(); // 启动线程
}
m_startComm = 1;
}
return m_startComm;
}
// 连接状态改变的槽函数
void LotMachine::slotConnectSta(int sta)
{
// qDebug() << "SlotConnectSta" << sta;
if(m_connected != sta)
{
m_connected = sta;
if(m_connected == 3)//已连接
{
emit siConnectToMqtt();
}
}
}
// 接收到通讯错误槽函数
void LotMachine::slotConnectErr(QString errinfo)
{
qDebug() << "SlotConnectErr" << errinfo;
}
// 接收到数据的槽函数
void LotMachine::slotReceiveData(QByteArray dat)
{
m_receiveBuff.append(dat);
int size = m_receiveBuff.length();
QString str = m_receiveBuff;
if(str == "success")
{
m_receiveBuff.remove(0, size);
return;
}
//QString rackNumStr = getJsonValue("device");//机架号
QString bootCmd = getJsonValue("data","boot");//执行命令
if(bootCmd.length() > 0)
{
emit siRunLotDataAction(bootCmd);
}
m_receiveBuff.remove(0, size);
}
//串口是否打开
void LotMachine::slotIfOpenSerialPort(int val)
{
if(val != 0)
{
if(m_connectMode == USE_SERIAL_COMM)
{
m_connected = 3;//串口已打开
}
}
}
//获取键值对属性值
QString LotMachine::getJsonValue(QString name1, QString name2)
{
QString rstr;
rstr.clear();
if(name1.length() <= 0 && name2.length() <= 0)
{
return rstr;
}
//QString str = "{\"device\":\"xiuhuaji133\",\"data\":{\"boot\":9}}";
QString str = m_receiveBuff;
QStringList vallist;
if(str.indexOf(",") == -1)
{
return rstr;
}
else
{
vallist = str.split(",", QString::SkipEmptyParts);
}
if(name2.length() <= 0)
{
if(vallist.size() >= 1)
{
QStringList vallist1;
if(QString(vallist[0]).indexOf(":") == -1)
{
return rstr;
}
else
{
vallist1 = QString(vallist[0]).split(":", QString::SkipEmptyParts);
}
if(QString(vallist1[0]).indexOf(name1) == -1)
{
return rstr;
}
else
{
rstr = QString(vallist1[1]).remove("\"");
}
}
}
else
{
if(vallist.size() >= 2)
{
QStringList vallist1;
if(QString(vallist[1]).indexOf(":") == -1)
{
return rstr;
}
else
{
vallist1 = QString(vallist[1]).split(":", QString::SkipEmptyParts);
}
for(int i = 0; i < vallist1.size(); i++)
{
if(QString(vallist1[i]).indexOf(name2) != -1)
{
if(i+1 < vallist1.size())
{
rstr = QString(vallist1[i+1]).remove("\"").remove("}");
}
}
}
}
}
return rstr;
}
//发送物联数据到网关
void LotMachine::sendLotDataToGateway(QString str)
{
QByteArray dat;
dat.clear();
dat = str.toLatin1();
emit(siSendData(dat));
}

73
machine/lotmachine.h Normal file
View File

@ -0,0 +1,73 @@
#ifndef LOTMACHINE_H
#define LOTMACHINE_H
#include "gatewaytcpclient.h"
#include "comport.h"
#include "comm/typedef.h"
#include <QThread>
#include <QTimer>
#include <QDebug>
#include <QStringList>
#define USE_TCP_COMM 0
#define USE_SERIAL_COMM 1
class LotMachine: public QObject
{
Q_OBJECT
public:
explicit LotMachine(QObject *parent = NULL);
virtual ~LotMachine();
public:
void initConnectMode(s16 val = 0);//初始化通讯连接方式
void setConfigFileName(QString configfilename);
void setComportName(QString portName);//设置串口名称
QString getConfigFileName();
int startCommunication();
private:
QString m_configFileName;
QByteArray m_receiveBuff;//接收到的buf
QByteArray m_keyBuff;//键值对buf
s16 m_reFlag;
private:
s16 m_connectMode; //通讯连接方式 0:网口1:串口
// 通讯线程和网络连接
QThread * m_pTcpThread;
GatewayTcpClient * m_pTcpClient;
QThread * m_pComThread;
ComPort * m_pComPort;
// 连接
public:
inline int isConnected() const { return m_connected; }
private:
int m_startComm;
int m_connected; // 机器连接状态. 0, 未连接; 1, 连接中; 2,
signals: // 发送数据到机器的信号
void siSendData(QByteArray dat);
void siRunLotDataAction(QString cmd);//执行物联网数据动作
void siConnectToMqtt();//与网关已连接
private slots: // 和线程通讯的槽
void slotConnectSta(int sta); // 连接状态改变的槽函数
void slotConnectErr(QString errinfo); // 接收到通讯错误槽函数
void slotReceiveData(QByteArray dat); // 接收到数据的槽函数
void slotIfOpenSerialPort(int val);//串口是否打开
private:
QString getJsonValue(QString name1,QString name2 = NULL);//获取键值对属性值
public:
void sendLotDataToGateway(QString str);//发送物联数据到网关
};
#endif // LOTMACHINE_H

2481
machine/machine.cpp Normal file

File diff suppressed because it is too large Load Diff

354
machine/machine.h Normal file
View File

@ -0,0 +1,354 @@
#ifndef MACHINE_H
#define MACHINE_H
#define BN_PROTOCOL_HEAD 0x05 // 机头板通讯协议N5N5A
#define BN_PROTOCOL_HCPS 0x06 // 勾剪扣换等N6N6A
#define BN_PROTOCOL_DCUT 0x10 // 剪线控制协议(D86)
#include "tcpclient.h"
#include "comport.h"
#include <QThread>
#include <QTimer>
#include <QDebug>
#include "comm/datadef.h"
#include "comm/protocol.h"
#define USE_TCP_COMM 0
#define USE_SERIAL_COMM 1
#define WIREHEAD 4
class Machine: public QObject
{
Q_OBJECT
public:
explicit Machine(QObject *parent = NULL);
virtual ~Machine();
public:
void initConnectMode(s16 val = 0);//初始化通讯连接方式
void setConfigFileName(QString configfilename);
void setComportName(QString portName);//设置串口名称
QString getConfigFileName();
int startCommunication();
private:
QString m_configFileName;
private:
s16 m_connectMode; //通讯连接方式 0:网口1:串口
// 通讯线程和网络连接
QThread * m_pTcpThread;
TcpClient * m_pTcpClient;
QThread * m_pComThread;
ComPort * m_pComPort;
// 连接
public:
inline int isConnected() const { return m_connected; }
private:
int m_startComm;
int m_connected; // 机器连接状态. 0, 未连接; 1, 连接中; 2,
signals: // 发送数据到机器的信号
void siSendData(QByteArray dat);
void siSendDataDone();
private slots: // 和线程通讯的槽
void slotConnectSta(int sta); // 连接状态改变的槽函数
void slotConnectErr(QString errinfo); // 接收到通讯错误槽函数
void slotReceiveData(QByteArray dat); // 接收到数据的槽函数
//----------------------------------------
// 通讯命令
// 机器信息
public:
private:
// 机器状态
public:
inline int isStatusEn() const { return m_statusEn; }
inline const MCStatus & getMcStatus() {m_statusEn = 0; return m_mcStatus; }
void setMcStatusAsMc(u8 * buff, u16 len, int toggle);
//机器信息
inline const MCInfo &getMcInfo(){return m_mcInfo;}
//调试信息
inline const DebugInfo &getDebugInfo(){return m_debugInfo;}
//外围板版本信息
inline const ExBoardInfo &getEXBInfo(){return m_exboardInfo;}
//物联数据
inline const McLotData &getMcLotData(){return m_lotData;}
private:
int m_statusEn; // 状态有效标志
int m_statusToggle;
MCStatus m_mcStatus; // 机器状态
MCInfo m_mcInfo; // 机器信息
DebugInfo m_debugInfo;//调试信息
ExBoardInfo m_exboardInfo; // 外围板信息
McLotData m_lotData; // 物联数据
// 机器参数
public:
inline const ParaStruct & getMcPara() {/*m_mcParaEn = 0; */ return m_mcPara; }
inline const ParaStruct & getWkPara() {/*m_wkParaEn = 0; */ return m_wkPara; }
inline const ParaStruct & getPreMcPara() {/*m_mcParaEn = 0; */ return m_mcPrePara; }
inline const ParaStruct & getPreWkPara() {/*m_wkParaEn = 0; */ return m_wkPrePara; }
inline const EmbMvAng & getFrameAnglePara() {/*m_wkParaEn = 0; */ return m_frameAnglePara; }
//获取索引外围板的参数,目前读取的是第一块的(所有外围板参数都和第一块的相同)
//inline const HeadInfo & getHeadPara(int idx = 0) {/*m_mcParaEn = 0; */ return m_exboardInfo.headInfo[idx]; }
private:
ParaStruct m_mcPara; // 机器参数信息 配置信息
ParaStruct m_wkPara; // 工作参数信息
ParaStruct m_mcPrePara; // 机器预留参数
ParaStruct m_wkPrePara; // 工作预留参数
EmbMvAng m_frameAnglePara; // 动框角度参数
int m_mcParaEn;
int m_wkParaEn;
int m_mcPreParaEn;
int m_wkPreParaEn;
int m_frameAngleParaEn;
public:
inline int isSensorBmpEn() const { return m_sensorBmpEn; }
inline const SensorsBitmap & getSensorDat() {/* m_sensorStaEn = 0; */ return m_sensorsStaDat; }
inline const SensorsBitmap & getSensorBmp() {/* m_sensorBmpEn = 0; */ return m_sensorEnBmp; }
inline int getTotalSendNum() { return m_totalSendNum; }
inline int getTotalPacketNum() { return m_totalPacketNum; }
private:
SensorsBitmap m_sensorsStaDat; // 传感器信号状态位图
SensorsBitmap m_sensorEnBmp; // 传感器信号有效位图
int m_sensorStaEn;
int m_sensorBmpEn;
public:
void setTcpConnectState(int state);
void setMacKey(unsigned char * p_dat , int i_size); // 设置机器的密钥
HeadInfo* getHeadPara(int idx);
// 文件传输结果
public:
private:
QTimer * m_pSendTimer;
FileTransCtrl m_transCtrl;
int m_fileTransEn;
int m_transBreak;
int m_totalSendNum;//传输文件时总共发送的包数
int m_totalPacketNum;//传输文件时总的包数
private slots:
void onSendTimer(void);
void slIfOpenSerialPort(int val);//串口是否打开
signals: // 发送给UI的信号
void siMcInfoChange(); // 机器信息改变信号
void siDebugInfo(); //调试信息改变信号
void siReceiveLotData(); // 接收物联数据信号
void siEXBInfoChange(); // 外围板版本信息改变信号
void siStatusChange(int); // 状态改变信号
void siParaChange(int type, int id); // 参数更新信号
void siEXBParaChange(); // 机头板参数更新信号
void siMemDataChange(int beginAddr); // 内存数据更新信号
void siSensorChange(SensorsBitmap map); // 传感信号更新信号
void siFileInfoChange(); // 文件信息更新信号
void siTransResultChange(); // 文件传输结果信号
void siTransProgress(u8 fileType, int send, int total); // 文件传输结果信号
void siSensorEnBitmap(SensorsBitmap map); // 传感信号有效位图更新信号
void siDataFilePos(DataFilePos pos); // 边框检查时起始点超出范围后下位机自动定新的起始点后发给上位机
public slots:
void breakFileTrans(); // 打断文件传输
public: // 机器执行命令,读取下位机数据
void getInfoFromMachine();
void getExboardInfoFromMachine();
int getStatusFromMachine();
void getNetDataFromMachine(); // 读取机器物联数据
void getParasFromMachine(int type = -1, int id = 0); // 读取机器参数
void getHeadParasFromMachine(int id ,int nodeType = 4); // 读取机头板参数
void restoreFactorySetting(int type = -1); // 恢复出厂设置
void getSensorsFromMachine(int backtype = 0);
void getTransResultFromMachine(int fileid);
void getSensorEnBmpFromMachine(); // 获取传感器有效标志位图
void sleep(int sec);
//void getHeadPara();
public: // 设置机器配置
// #define UCMD_SET_MC_CONFIG 0x0101 VLDP 无 设置机器的配置,包括信号使用的端口等信息
public:
void resetAll();//全部复位
void motorZeroing();//电机归零
void station1Gluing();//工位1涂胶
void station2Gluing();//工位2涂胶
void headUpDown();// 机头升降
void toStation1Apos(); // 回工位1起始点
void toStation2Apos(); // 回工位2起始点
void toWaittingPos(); // 回等料点
void toRemoveGluePos(); // 回排胶点
void removeGlueOnce(); // 排一次胶
void adjustGlueHeight(); // 校准胶管高度
void setMcStatus(int stacode, int para = 0); // 设置机器状态
void cleanError(); // 清除错误
void setEnableWorkSta(); // 设置允许工作状态
void setDisableWorkSta(); // 设置禁止工作状态
void setEnableWorkTime(); // 设置允许工作时间状态
void setDisableWorkTime(); // 设置禁止工作时间状态
void resetOutput(); // 重置产量
void setToManualWork(); // 手动工作状态
void setToAutoWork(); // 自动工作状态
void switchWorkFile(int idx = 0); // 文件切换
void invalidateWorkFile(int idx = 0); // 文件失效
void cleanNewParaFlag(); // 清除新参数标志
void setSimulateWork(); // 模拟工作状态
void setNormalWork(); // 正常工作状态
void exitTraverStates(); //退出遍历状态
void exitDetectTest(); //退出断线测试
void resetBobbinCounter(); // 底线计数复位
void entrySensorScan(); // 进入扫描传感器状态
void exitSensorScan(); // 退出扫描传感器状态
void setElapsed(unsigned char i_type , unsigned char i_time); // 设置经过的时间
void testThreadBK(int type,int needle); // 测试断线检测,1是面线2是底线
public: // 设置机器参数
void setParasToMachine(int type, ParaStruct & para);
void setFrameAngleParasToMachine(int type, EmbMvAng & para);
void setAParasToMachine(int type, int idx, u32 value);
void setEXBHeadParasToMachine(HeadInfo & para,int id = 0);//设置机头板板参数
void setShutDownTime(u8 type, u32 time);
void setMcPara(ParaStruct * pPara);
void setWkPara(ParaStruct * pPara);
void setMcPrePara(ParaStruct * pPara);//预留参数
void setWkPrePara(ParaStruct * pPara);//预留参数
void setFrameAnglePara(EmbMvAng * pPara);//动框角度参数设置
void setAMcPara(int id, u32 value);
void setAWkPara(int id, u32 value);
void setAMcPrePara(int id, u32 value);//预留参数
void setAWkPrePara(int id, u32 value);//预留参数
void setHeadBoardPara(HeadInfo * pPara, int id = 0);//设置机头板参数
void setHeadPara(ParaStruct * pPara,u16 ID);//设置机头参数
public: // 设置内存数据
// #define UCMD_SET_MEM_DATA 0x0104 // 设置内存数据
public: // 设置文件参数
void setFilePara(int fileidx, int fileid, DataFilePara & filePara);
public: // 设置执行进度
void setFileExecProgress(int fileidx, int fileid, FileExecPara & fileExecPara);
void setToDefaultParas(int type, u8 id = 0, u8 nodeType = 0);
public slots: // 手动控制命令
void actionByhand(int actcode, int para1, int para2 = 0, int para3 = 0);
void motoToZero(int obj); // 电机归零(辅助调试的功能,无安全保护和逻辑关系)
void motoMove(int obj, int dir, int spd); // 电机移动(辅助调试的功能,无安全保护和逻辑关系)
void outputCtrl(int obj, int act, int para); // 输出控制(辅助调试的功能,无安全保护和逻辑关系)
void motoServoCtrl(int obj, int onoff); // 电机使能控制(辅助调试的功能,无安全保护和逻辑关系)
void sewingMsServoOn();
void sewingMsServoOff(); // 缝纫主轴使能控制
void sewingMsRun(); // 缝纫主轴研车
void punchMsServoOn();
void punchMsServoOff(); // 冲孔主轴使能控制
void punchMsRun(); // 冲孔主轴研车
void embMsServoOn();
void embMsServoOff(); // 平绣主轴使能控制
void embMsRun(); //平绣主轴研车
void punchJog(); // 多头冲孔点动
void punchSwitchNeedle(int nNum); // 多头冲孔换刀
void embSwitchNeedle(int nNum); //绣花换色
void singlePunch(); // 单次冲孔
void punchMsDown(); // 冲头停下位
void punchDrawOutline(); //画轮廓线
void continuousOilSupply();//连续供油
void sewJog(); // 缝纫点动
void hookPos(); // 缝纫主轴去勾线位
void embHookPos(); // 平绣主轴去勾线位
void rotateProofread(); // 缝纫旋转校对
void embJog(); //平绣点动
void sewHeadLift(); // 缝纫机头升降
void manualAction(int obj, int para2 = 0, int para3 = 0); // 手动动作功能(日常使用功能,有安全保护和逻辑时序关系)
void setWorkRange(); // 定工作范围
void autoSetWorkRange(); // 自动定工作范围
void manualOil(int nNum); // 手动加油
void quantityMoveFrame(s32 x,s32 y); // 定量移框
void moveFrameByHand(char xy, char dir, int spd); // 手动移框
void spindleJog(); // 主轴点动
void spindleTest(s32 para1, s32 para2); // 主轴研车
void encoderVal(int para); // M轴绝对值编码器值
void cutThreadUp(); // 剪上线
void cutThreadDn(); // 剪下线
void testADC(int num); // 测试电位器
//进入或退出状态(遍历设置、断线检测、退出勾刀测试)
void enterOrExitStates(int obj, int para1 = 0, int para2 = 0, int para3 = 0, int para4 = 0);
public: // 机器工作命令
void mcWorkCmd(int workcode, int para1 = 0 , int para2 = 0);
void startWork(); // 启动工作
void pauseWork(); // 暂停工作
void allToReset(); // 流程复位
void allToZero(); // 全部归零
void gotoStartPos(); // 回起针点
void checkFrame(); // 边框检查
void sewCutThread(int nNum); // 缝纫剪线
void embCutThread();
void simulateFrame(); // 空走边框
void autoSetSoftLimit();//自动定软限位
void enterClothEmbroidery();//进入匹绣
void exitClothEmbroidery();//退出匹绣
void autoSetStart();//自动定起点
void gotoFeedPos(); // 回上料点
void setOffsetPos(); // 定偏移点
void gotoOffsetPos(); // 回偏移点
void punchRotToZero();//冲孔旋转去零位
void fastJump(int idx); // 前进回退
void gotoWorkPos(); // 回工作点
void gotoAnchorPos(); //回定位点
void gotoThreadPos(); //回穿线点
void gotoCenterPos(); // 回中心点
void gotoShuttlePos(); //回换梭位
void gotoZeroPos(); // 回零点
void gotoGorner(int nNum);// 回角点
void msRpmChange(int chgram,int flag); // 速度改变
void headBoardBusDetect();//机头板总线检测
void headSwitch(int para); //机头切换,para是切换的机头
void msAdjust(int step); // 针梭校对
void moveRotByHand(char dir, int spd); //手动旋转
public: // 移动到XY坐标命令
void moveFrameTo(int x, int y);
public: // 文件传输命令
int sendFileProc(int type, int idx, int id, DataDs16FileHead * pfileHead, u8 * pDatBuff);
int sendFileProc(int type, int idx, int id, DataDs16FileHead & fileHead, u8 * pDatBuff);
int sendAPPFileProc(int type, int idx, int id, AppFileHead &fileHead, u8 *pDatBuff);
int sendBoardFileProc(int type, int idx, int id, BoardFileHead &fileHead, u8 *pDatBuff);
private:
void startFileTrans(FileTransCtrl & transCtrl);
void transFileData(FileTransCtrl & transCtrl, int pktidx);
public: // 下位机系统升级命令
void updateFirmware(); // 下位机升级
void updateExBoard(u8 protocolType, u8 nodeId,u8 nodeType); // 外围板升级
};
#endif // MACHINE_H

186
machine/qbindtcpsocket.cpp Normal file
View File

@ -0,0 +1,186 @@
#include "qbindtcpsocket.h"
#include <QHostAddress>
QBindTcpSocket::QBindTcpSocket(QObject *parent):
QTcpSocket(parent)
{
}
QBindTcpSocket::~QBindTcpSocket()
{
}
int QBindTcpSocket::bindAddrAndPort(QString localAddr, quint16 localPort)
{
QString str = localAddr;
QHostAddress addr(str);
setLocalAddress(addr);
setLocalPort(localPort);
return 0;
}
//-------------------------------
TcpConnectDetect::TcpConnectDetect(QObject *parent) :
QObject(parent),
m_pDetectSocket(NULL),
m_localip(DEF_LOCAL_IP),
m_localport(DEF_LOCAL_PORT),
m_serverip(DEF_SERVER_IP),
m_serverport(DEF_SERVER_PORT)
{
}
TcpConnectDetect::~TcpConnectDetect()
{
if (m_pDetectSocket == NULL)
{
m_pDetectSocket->disconnectFromHost();
m_pDetectSocket->waitForDisconnected();
m_pDetectSocket->close();
delete m_pDetectSocket;
}
}
void TcpConnectDetect::detectStart()
{
qDebug("TcpConnectDetect start");
if (m_pDetectSocket == NULL)
{
m_pDetectSocket = new QBindTcpSocket;
}
}
int TcpConnectDetect::connectDetect()
{
int connectsta = 0;
int rslt;
// qDebug() << "TcpConnectDetect " << QThread::currentThread();
if (m_pDetectSocket == NULL)
{
return 0;
}
if (m_localip.isEmpty() == false)
{
m_pDetectSocket->bindAddrAndPort(m_localip, m_localport);
}
m_pDetectSocket->abort();
m_pDetectSocket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
m_pDetectSocket->connectToHost(m_serverip, m_serverport);
do
{
rslt = m_pDetectSocket->waitForConnected(4000); // 等待连接
qDebug("bind Detect connect rslt=%d", rslt);
qDebug() << "localip=" << m_localip << "localport=" << m_localport;
qDebug() << "serverip=" << m_serverip << "serverport=" << m_serverport;
switch(m_pDetectSocket->state())
{
case QAbstractSocket::ConnectedState:
{
// 如果连接上,说明 m_pClientSocket 连接已经无效, 需要断开重新连接
// 先断开测试连接
m_pDetectSocket->disconnectFromHost();
m_pDetectSocket->waitForDisconnected();
connectsta = 1;
// 发送断开主连接的信号
qDebug() << "detect is Connected, disconnect all";
break;
}
case QAbstractSocket::UnconnectedState:
{
// qDebug() << "detect is Unconnected err=" << m_pDetectSocket->error() << ", info:" << m_pDetectSocket->errorString();
switch (m_pDetectSocket->error())
{
case QAbstractSocket::SocketTimeoutError: // 连接超时,说明已经断开
case QAbstractSocket::NetworkError: // 网络错误, 主机不可连接, 可能已经断开
{
qDebug() << "detect is timout, disconnect all";
connectsta = 1;
// 发送断开主连接的信号
break;
}
case QAbstractSocket::ConnectionRefusedError: // 拒绝连接, 说明连接还在
{
connectsta = 2;
// qDebug() << "Connection Refused, old connect is alive";
break;
}
/*
case QAbstractSocket::RemoteHostClosedError:
case QAbstractSocket::HostNotFoundError:
case QAbstractSocket::SocketAccessError:
case QAbstractSocket::SocketResourceError:
case QAbstractSocket::SocketTimeoutError:
case QAbstractSocket::DatagramTooLargeError:
case QAbstractSocket::AddressInUseError:
case QAbstractSocket::SocketAddressNotAvailableError:
case QAbstractSocket::UnsupportedSocketOperationError:
case QAbstractSocket::UnfinishedSocketOperationError:
case QAbstractSocket::ProxyAuthenticationRequiredError:
case QAbstractSocket::SslHandshakeFailedError:
case QAbstractSocket::ProxyConnectionRefusedError:
case QAbstractSocket::ProxyConnectionClosedError:
case QAbstractSocket::ProxyConnectionTimeoutError:
case QAbstractSocket::ProxyNotFoundError:
case QAbstractSocket::ProxyProtocolError:
case QAbstractSocket::UnknownSocketError:
*/
default:
{
// 继续检测
connectsta = 2;
qDebug() << " retry";
break;
}
} // 错误处理结束
}
case QAbstractSocket::ConnectingState:
{
// qDebug() << "detect is Connecting";
// qDebug() << "localip=" << m_localip << "localport=" << m_localport;
// 继续等待
break;
}
case QAbstractSocket::HostLookupState:
case QAbstractSocket::BoundState:
case QAbstractSocket::ListeningState:
case QAbstractSocket::ClosingState:
default:
{
// 继续等待
qDebug("detect sta is %d\r\n", m_pDetectSocket->state());
break;
}
}
if (connectsta != 0)
{
break;
}
}while(1);
m_pDetectSocket->close();
// 发送本次测试连接的状态信号
emit(siConnectSta(connectsta));
return connectsta;
}
void TcpConnectDetect::setIpAndPort(QString localip, quint16 localport, QString serverip, quint16 serverport)
{
m_localip = localip;
m_localport = localport;
m_serverip = serverip;
m_serverport = serverport;
}

53
machine/qbindtcpsocket.h Normal file
View File

@ -0,0 +1,53 @@
#ifndef QBINDTCPSOCKET_H
#define QBINDTCPSOCKET_H
#define DEF_SERVER_IP "192.168.16.253"
#define DEF_SERVER_PORT 5000
#define DEF_LOCAL_IP ""
#define DEF_LOCAL_PORT 5001
#include <QTcpSocket>
class QBindTcpSocket : public QTcpSocket
{
public:
QBindTcpSocket(QObject *parent = 0);
virtual ~QBindTcpSocket();
public:
int bindAddrAndPort(QString localAddr, quint16 localPort);
};
#if(1)
class TcpConnectDetect : public QObject
{
Q_OBJECT
public:
explicit TcpConnectDetect(QObject *parent = NULL);
virtual ~TcpConnectDetect();
signals:
void siConnectSta(int sta); // 网络连接信号
public:
public slots:
void detectStart();
int connectDetect();
private:
QBindTcpSocket * m_pDetectSocket;
public:
void setIpAndPort(QString localip, quint16 localport, QString serverip, quint16 serverport);
private:
QString m_localip;
quint16 m_localport;
QString m_serverip;
quint16 m_serverport;
};
#endif
#endif // QBINDTCPSOCKET_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,57 @@
#ifndef _POSIX_QEXTSERIALPORT_H_
#define _POSIX_QEXTSERIALPORT_H_
#include <stdio.h>
#include <termios.h>
#include <errno.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/select.h>
#include "qextserialbase.h"
class Posix_QextSerialPort:public QextSerialBase {
public:
Posix_QextSerialPort();
Posix_QextSerialPort(const Posix_QextSerialPort& s);
Posix_QextSerialPort(const QString & name);
Posix_QextSerialPort(const PortSettings& settings);
Posix_QextSerialPort(const QString & name, const PortSettings& settings);
Posix_QextSerialPort& operator=(const Posix_QextSerialPort& s);
virtual ~Posix_QextSerialPort();
virtual void setBaudRate(BaudRateType);
virtual void setDataBits(DataBitsType);
virtual void setParity(ParityType);
virtual void setStopBits(StopBitsType);
virtual void setFlowControl(FlowType);
virtual void setTimeout(ulong, ulong);
virtual bool open(OpenMode mode=0);
virtual void close();
virtual void flush();
virtual qint64 size() const;
virtual qint64 bytesAvailable();
virtual void ungetChar(char c);
virtual void translateError(ulong error);
virtual void setDtr(bool set=true);
virtual void setRts(bool set=true);
virtual ulong lineStatus();
QFile* Posix_File;
protected:
//QFile* Posix_File;
struct termios Posix_CommConfig;
struct timeval Posix_Timeout;
struct timeval Posix_Copy_Timeout;
virtual qint64 readData(char * data, qint64 maxSize);
virtual qint64 writeData(const char * data, qint64 maxSize);
};
#endif

View File

@ -0,0 +1,250 @@
#include "qextserialbase.h"
/*!
\class QextSerialBase
\version 1.0.0
\author Stefan Sander
A common base class for Win_QextSerialBase, Posix_QextSerialBase and QextSerialPort.
*/
#ifdef QT_THREAD_SUPPORT
QMutex* QextSerialBase::mutex=NULL;
unsigned long QextSerialBase::refCount=0;
#endif
/*!
\fn QextSerialBase::QextSerialBase()
Default constructor.
*/
QextSerialBase::QextSerialBase()
: QIODevice()
{
#ifdef _TTY_WIN_
setPortName("COM1");
#elif defined(_TTY_IRIX_)
setPortName("/dev/ttyf1");
#elif defined(_TTY_HPUX_)
setPortName("/dev/tty1p0");
#elif defined(_TTY_SUN_)
setPortName("/dev/ttya");
#elif defined(_TTY_DIGITAL_)
setPortName("/dev/tty01");
#elif defined(_TTY_FREEBSD_)
setPortName("/dev/ttyd1");
#else
setPortName("/dev/ttyS0");
#endif
construct();
}
/*!
\fn QextSerialBase::QextSerialBase(const QString & name)
Construct a port and assign it to the device specified by the name parameter.
*/
QextSerialBase::QextSerialBase(const QString & name)
: QIODevice()
{
setPortName(name);
construct();
}
/*!
\fn QextSerialBase::~QextSerialBase()
Standard destructor.
*/
QextSerialBase::~QextSerialBase()
{
#ifdef QT_THREAD_SUPPORT
refCount--;
if (mutex && refCount==0) {
delete mutex;
mutex=NULL;
}
#endif
}
/*!
\fn void QextSerialBase::construct()
Common constructor function for setting up default port settings.
(115200 Baud, 8N1, Hardware flow control where supported, otherwise no flow control, and 500 ms timeout).
*/
void QextSerialBase::construct()
{
Settings.BaudRate=BAUD115200;
Settings.DataBits=DATA_8;
Settings.Parity=PAR_NONE;
Settings.StopBits=STOP_1;
Settings.FlowControl=FLOW_HARDWARE;
Settings.Timeout_Sec=0;
Settings.Timeout_Millisec=500;
#ifdef QT_THREAD_SUPPORT
if (!mutex) {
mutex=new QMutex( QMutex::Recursive );
}
refCount++;
#endif
setOpenMode(QIODevice::NotOpen);
}
/*!
\fn void QextSerialBase::setPortName(const QString & name)
Sets the name of the device associated with the object, e.g. "COM1", or "/dev/ttyS0".
*/
void QextSerialBase::setPortName(const QString & name)
{
port = name;
}
/*!
\fn QString QextSerialBase::portName() const
Returns the name set by setPortName().
*/
QString QextSerialBase::portName() const
{
return port;
}
/*!
\fn BaudRateType QextSerialBase::baudRate(void) const
Returns the baud rate of the serial port. For a list of possible return values see
the definition of the enum BaudRateType.
*/
BaudRateType QextSerialBase::baudRate(void) const
{
return Settings.BaudRate;
}
/*!
\fn DataBitsType QextSerialBase::dataBits() const
Returns the number of data bits used by the port. For a list of possible values returned by
this function, see the definition of the enum DataBitsType.
*/
DataBitsType QextSerialBase::dataBits() const
{
return Settings.DataBits;
}
/*!
\fn ParityType QextSerialBase::parity() const
Returns the type of parity used by the port. For a list of possible values returned by
this function, see the definition of the enum ParityType.
*/
ParityType QextSerialBase::parity() const
{
return Settings.Parity;
}
/*!
\fn StopBitsType QextSerialBase::stopBits() const
Returns the number of stop bits used by the port. For a list of possible return values, see
the definition of the enum StopBitsType.
*/
StopBitsType QextSerialBase::stopBits() const
{
return Settings.StopBits;
}
/*!
\fn FlowType QextSerialBase::flowControl() const
Returns the type of flow control used by the port. For a list of possible values returned
by this function, see the definition of the enum FlowType.
*/
FlowType QextSerialBase::flowControl() const
{
return Settings.FlowControl;
}
/*!
\fn bool QextSerialBase::isSequential() const
Returns true if device is sequential, otherwise returns false. Serial port is sequential device
so this function always returns true. Check QIODevice::isSequential() documentation for more
information.
*/
bool QextSerialBase::isSequential() const
{
return true;
}
/*!
\fn bool QextSerialBase::atEnd() const
This function will return true if the input buffer is empty (or on error), and false otherwise.
Call QextSerialBase::lastError() for error information.
*/
bool QextSerialBase::atEnd() const
{
if (size()) {
return true;
}
return false;
}
/*!
\fn qint64 QextSerialBase::readLine(char * data, qint64 maxSize)
This function will read a line of buffered input from the port, stopping when either maxSize bytes
have been read, the port has no more data available, or a newline is encountered.
The value returned is the length of the string that was read.
*/
qint64 QextSerialBase::readLine(char * data, qint64 maxSize)
{
qint64 numBytes = bytesAvailable();
char* pData = data;
if (maxSize < 2) //maxSize must be larger than 1
return -1;
/*read a byte at a time for MIN(bytesAvail, maxSize - 1) iterations, or until a newline*/
while (pData<(data+numBytes) && --maxSize) {
readData(pData, 1);
if (*pData++ == '\n') {
break;
}
}
*pData='\0';
/*return size of data read*/
return (pData-data);
}
/*!
\fn ulong QextSerialBase::lastError() const
Returns the code for the last error encountered by the port, or E_NO_ERROR if the last port
operation was successful. Possible error codes are:
\verbatim
Error Explanation
--------------------------- -------------------------------------------------------------
E_NO_ERROR No Error has occured
E_INVALID_FD Invalid file descriptor (port was not opened correctly)
E_NO_MEMORY Unable to allocate memory tables (POSIX)
E_CAUGHT_NON_BLOCKED_SIGNAL Caught a non-blocked signal (POSIX)
E_PORT_TIMEOUT Operation timed out (POSIX)
E_INVALID_DEVICE The file opened by the port is not a character device (POSIX)
E_BREAK_CONDITION The port detected a break condition
E_FRAMING_ERROR The port detected a framing error
(usually caused by incorrect baud rate settings)
E_IO_ERROR There was an I/O error while communicating with the port
E_BUFFER_OVERRUN Character buffer overrun
E_RECEIVE_OVERFLOW Receive buffer overflow
E_RECEIVE_PARITY_ERROR The port detected a parity error in the received data
E_TRANSMIT_OVERFLOW Transmit buffer overflow
E_READ_FAILED General read operation failure
E_WRITE_FAILED General write operation failure
\endverbatim
*/
ulong QextSerialBase::lastError() const
{
return lastErr;
}

View File

@ -0,0 +1,196 @@
#ifndef _QEXTSERIALBASE_H_
#define _QEXTSERIALBASE_H_
#include <QIODevice>
#include <QFile>
#ifdef QT_THREAD_SUPPORT
#include <QThread>
#include <QMutex>
#endif
/*if all warning messages are turned off, flag portability warnings to be turned off as well*/
#ifdef _TTY_NOWARN_
#define _TTY_NOWARN_PORT_
#endif
/*macros for thread support*/
#ifdef QT_THREAD_SUPPORT
#define LOCK_MUTEX() mutex->lock()
#define UNLOCK_MUTEX() mutex->unlock()
#else
#define LOCK_MUTEX()
#define UNLOCK_MUTEX()
#endif
/*macros for warning messages*/
#ifdef _TTY_NOWARN_PORT_
#define TTY_PORTABILITY_WARNING(s)
#else
#define TTY_PORTABILITY_WARNING(s) qWarning(s)
#endif
#ifdef _TTY_NOWARN_
#define TTY_WARNING(s)
#else
#define TTY_WARNING(s) qWarning(s)
#endif
/*line status constants*/
#define LS_CTS 0x01
#define LS_DSR 0x02
#define LS_DCD 0x04
#define LS_RI 0x08
#define LS_RTS 0x10
#define LS_DTR 0x20
#define LS_ST 0x40
#define LS_SR 0x80
/*error constants*/
#define E_NO_ERROR 0
#define E_INVALID_FD 1
#define E_NO_MEMORY 2
#define E_CAUGHT_NON_BLOCKED_SIGNAL 3
#define E_PORT_TIMEOUT 4
#define E_INVALID_DEVICE 5
#define E_BREAK_CONDITION 6
#define E_FRAMING_ERROR 7
#define E_IO_ERROR 8
#define E_BUFFER_OVERRUN 9
#define E_RECEIVE_OVERFLOW 10
#define E_RECEIVE_PARITY_ERROR 11
#define E_TRANSMIT_OVERFLOW 12
#define E_READ_FAILED 13
#define E_WRITE_FAILED 14
/*enums for port settings*/
enum NamingConvention {
WIN_NAMES,
IRIX_NAMES,
HPUX_NAMES,
SUN_NAMES,
DIGITAL_NAMES,
FREEBSD_NAMES,
LINUX_NAMES
};
enum BaudRateType {
BAUD50, //POSIX ONLY
BAUD75, //POSIX ONLY
BAUD110,
BAUD134, //POSIX ONLY
BAUD150, //POSIX ONLY
BAUD200, //POSIX ONLY
BAUD300,
BAUD600,
BAUD1200,
BAUD1800, //POSIX ONLY
BAUD2400,
BAUD4800,
BAUD9600,
BAUD14400, //WINDOWS ONLY
BAUD19200,
BAUD38400,
BAUD56000, //WINDOWS ONLY
BAUD57600,
BAUD76800, //POSIX ONLY
BAUD115200,
BAUD128000, //WINDOWS ONLY
BAUD256000 //WINDOWS ONLY
};
enum DataBitsType {
DATA_5,
DATA_6,
DATA_7,
DATA_8
};
enum ParityType {
PAR_NONE,
PAR_ODD,
PAR_EVEN,
PAR_MARK, //WINDOWS ONLY
PAR_SPACE
};
enum StopBitsType {
STOP_1,
STOP_1_5, //WINDOWS ONLY
STOP_2
};
enum FlowType {
FLOW_OFF,
FLOW_HARDWARE,
FLOW_XONXOFF
};
/*structure to contain port settings*/
struct PortSettings {
BaudRateType BaudRate;
DataBitsType DataBits;
ParityType Parity;
StopBitsType StopBits;
FlowType FlowControl;
ulong Timeout_Sec;
ulong Timeout_Millisec;
};
class QextSerialBase : public QIODevice {
public:
QextSerialBase();
QextSerialBase(const QString & name);
virtual ~QextSerialBase();
virtual void construct();
virtual void setPortName(const QString & name);
virtual QString portName() const;
virtual void setBaudRate(BaudRateType)=0;
virtual BaudRateType baudRate() const;
virtual void setDataBits(DataBitsType)=0;
virtual DataBitsType dataBits() const;
virtual void setParity(ParityType)=0;
virtual ParityType parity() const;
virtual void setStopBits(StopBitsType)=0;
virtual StopBitsType stopBits() const;
virtual void setFlowControl(FlowType)=0;
virtual FlowType flowControl() const;
virtual void setTimeout(ulong, ulong)=0;
virtual bool open(OpenMode mode=0)=0;
virtual bool isSequential() const;
virtual void close()=0;
virtual void flush()=0;
virtual qint64 size() const=0;
virtual qint64 bytesAvailable()=0;
virtual bool atEnd() const;
virtual void ungetChar(char c)=0;
virtual qint64 readLine(char * data, qint64 maxSize);
virtual ulong lastError() const;
virtual void translateError(ulong error)=0;
virtual void setDtr(bool set=true)=0;
virtual void setRts(bool set=true)=0;
virtual ulong lineStatus()=0;
protected:
QString port;
PortSettings Settings;
ulong lastErr;
#ifdef QT_THREAD_SUPPORT
static QMutex* mutex;
static ulong refCount;
#endif
virtual qint64 readData(char * data, qint64 maxSize)=0;
virtual qint64 writeData(const char * data, qint64 maxSize)=0;
};
#endif

View File

@ -0,0 +1,98 @@
/*!
\class QextSerialPort
\version 1.0.0
\author Stefan Sander
A cross-platform serial port class.
This class encapsulates a serial port on both POSIX and Windows systems. The user will be
notified of errors and possible portability conflicts at run-time by default - this behavior can
be turned off by defining _TTY_NOWARN_ (to turn off all warnings) or _TTY_NOWARN_PORT_ (to turn
off portability warnings) in the project.
\note
On Windows NT/2000/XP this class uses Win32 serial port functions by default. The user may
select POSIX behavior under NT, 2000, or XP ONLY by defining _TTY_POSIX_ in the project. I can
make no guarantees as to the quality of POSIX support under NT/2000 however.
*/
#include <stdio.h>
#include "qextserialport.h"
/*!
\fn QextSerialPort::QextSerialPort()
Default constructor. Note that the naming convention used by a QextSerialPort constructed with
this constructor will be determined by #defined constants, or lack thereof - the default behavior
is the same as _TTY_LINUX_. Possible naming conventions and their associated constants are:
\verbatim
Constant Used By Naming Convention
---------- ------------- ------------------------
_TTY_WIN_ Windows COM1, COM2
_TTY_IRIX_ SGI/IRIX /dev/ttyf1, /dev/ttyf2
_TTY_HPUX_ HP-UX /dev/tty1p0, /dev/tty2p0
_TTY_SUN_ SunOS/Solaris /dev/ttya, /dev/ttyb
_TTY_DIGITAL_ Digital UNIX /dev/tty01, /dev/tty02
_TTY_FREEBSD_ FreeBSD /dev/ttyd0, /dev/ttyd1
_TTY_LINUX_ Linux /dev/ttyS0, /dev/ttyS1
<none> Linux /dev/ttyS0, /dev/ttyS1
\endverbatim
The object will be associated with the first port in the system, e.g. COM1 on Windows systems.
See the other constructors if you need to use a port other than the first.
*/
QextSerialPort::QextSerialPort()
: QextBaseType()
{}
/*!
\fn QextSerialPort::QextSerialPort(const QString & name)
Constructs a serial port attached to the port specified by name.
name is the name of the device, which is windowsystem-specific,
e.g."COM1" or "/dev/ttyS0".
*/
QextSerialPort::QextSerialPort(const QString & name)
: QextBaseType(name)
{}
/*!
\fn QextSerialPort::QextSerialPort(PortSettings const& settings)
Constructs a port with default name and settings specified by the settings parameter.
*/
QextSerialPort::QextSerialPort(PortSettings const& settings)
: QextBaseType(settings)
{}
/*!
\fn QextSerialPort::QextSerialPort(const QString & name, PortSettings const& settings)
Constructs a port with the name and settings specified.
*/
QextSerialPort::QextSerialPort(const QString & name, PortSettings const& settings)
: QextBaseType(name, settings)
{}
/*!
\fn QextSerialPort::QextSerialPort(const QextSerialPort& s)
Copy constructor.
*/
QextSerialPort::QextSerialPort(const QextSerialPort& s)
: QextBaseType(s)
{}
/*!
\fn QextSerialPort& QextSerialPort::operator=(const QextSerialPort& s)
Overrides the = operator.
*/
QextSerialPort& QextSerialPort::operator=(const QextSerialPort& s)
{
return (QextSerialPort&)QextBaseType::operator=(s);
}
/*!
\fn QextSerialPort::~QextSerialPort()
Standard destructor.
*/
QextSerialPort::~QextSerialPort()
{}

View File

@ -0,0 +1,27 @@
#ifndef _QEXTSERIALPORT_H_
#define _QEXTSERIALPORT_H_
/*POSIX CODE*/
#ifdef _TTY_POSIX_
#include "posix_qextserialport.h"
#define QextBaseType Posix_QextSerialPort
/*MS WINDOWS CODE*/
#else
#include "win_qextserialport.h"
#define QextBaseType Win_QextSerialPort
#endif
class QextSerialPort: public QextBaseType {
public:
QextSerialPort();
QextSerialPort(const QString & name);
QextSerialPort(PortSettings const& s);
QextSerialPort(const QString & name, PortSettings const& s);
QextSerialPort(const QextSerialPort& s);
QextSerialPort& operator=(const QextSerialPort&);
virtual ~QextSerialPort();
};
#endif

View File

@ -0,0 +1,880 @@
/*!
\class Win_QextSerialPort
\version 1.0.0
\author Stefan Sander
A cross-platform serial port class.
This class encapsulates the Windows portion of QextSerialPort. The user will be notified of
errors and possible portability conflicts at run-time by default - this behavior can be turned
off by defining _TTY_NOWARN_ (to turn off all warnings) or _TTY_NOWARN_PORT_ (to turn off
portability warnings) in the project. Note that defining _TTY_NOWARN_ also defines
_TTY_NOWARN_PORT_.
\note
On Windows NT/2000/XP this class uses Win32 serial port functions by default. The user may
select POSIX behavior under NT, 2000, or XP ONLY by defining _TTY_POSIX_ in the project. I can
make no guarantees as to the quality of POSIX support under NT/2000 however.
*/
#include <stdio.h>
#include "win_qextserialport.h"
/*!
\fn Win_QextSerialPort::Win_QextSerialPort()
Default constructor. Note that the name of the device used by a Win_QextSerialPort constructed
with this constructor will be determined by #defined constants, or lack thereof - the default
behavior is the same as _TTY_LINUX_. Possible naming conventions and their associated constants
are:
\verbatim
Constant Used By Naming Convention
---------- ------------- ------------------------
_TTY_WIN_ Windows COM1, COM2
_TTY_IRIX_ SGI/IRIX /dev/ttyf1, /dev/ttyf2
_TTY_HPUX_ HP-UX /dev/tty1p0, /dev/tty2p0
_TTY_SUN_ SunOS/Solaris /dev/ttya, /dev/ttyb
_TTY_DIGITAL_ Digital UNIX /dev/tty01, /dev/tty02
_TTY_FREEBSD_ FreeBSD /dev/ttyd0, /dev/ttyd1
_TTY_LINUX_ Linux /dev/ttyS0, /dev/ttyS1
<none> Linux /dev/ttyS0, /dev/ttyS1
\endverbatim
This constructor associates the object with the first port on the system, e.g. COM1 for Windows
platforms. See the other constructor if you need a port other than the first.
*/
Win_QextSerialPort::Win_QextSerialPort():QextSerialBase() {
Win_Handle=INVALID_HANDLE_VALUE;
}
/*!Win_QextSerialPort::Win_QextSerialPort(const Win_QextSerialPort&)
Copy constructor.
*/
Win_QextSerialPort::Win_QextSerialPort(const Win_QextSerialPort& s):QextSerialBase(s.port) {
Win_Handle=INVALID_HANDLE_VALUE;
setOpenMode(s.openMode());
lastErr=s.lastErr;
port = s.port;
Settings.FlowControl=s.Settings.FlowControl;
Settings.Parity=s.Settings.Parity;
Settings.DataBits=s.Settings.DataBits;
Settings.StopBits=s.Settings.StopBits;
Settings.BaudRate=s.Settings.BaudRate;
Win_Handle=s.Win_Handle;
memcpy(&Win_CommConfig, &s.Win_CommConfig, sizeof(COMMCONFIG));
memcpy(&Win_CommTimeouts, &s.Win_CommTimeouts, sizeof(COMMTIMEOUTS));
}
/*!
\fn Win_QextSerialPort::Win_QextSerialPort(const QString & name)
Constructs a serial port attached to the port specified by devName.
devName is the name of the device, which is windowsystem-specific,
e.g."COM2" or "/dev/ttyS0".
*/
Win_QextSerialPort::Win_QextSerialPort(const QString & name):QextSerialBase(name) {
Win_Handle=INVALID_HANDLE_VALUE;
}
/*!
\fn Win_QextSerialPort::Win_QextSerialPort(const PortSettings& settings)
Constructs a port with default name and specified settings.
*/
Win_QextSerialPort::Win_QextSerialPort(const PortSettings& settings) {
Win_Handle=INVALID_HANDLE_VALUE;
setBaudRate(settings.BaudRate);
setDataBits(settings.DataBits);
setStopBits(settings.StopBits);
setParity(settings.Parity);
setFlowControl(settings.FlowControl);
setTimeout(settings.Timeout_Sec, settings.Timeout_Millisec);
}
/*!
\fn Win_QextSerialPort::Win_QextSerialPort(const QString & name, const PortSettings& settings)
Constructs a port with specified name and settings.
*/
Win_QextSerialPort::Win_QextSerialPort(const QString & name, const PortSettings& settings) {
Win_Handle=INVALID_HANDLE_VALUE;
setPortName(name);
setBaudRate(settings.BaudRate);
setDataBits(settings.DataBits);
setStopBits(settings.StopBits);
setParity(settings.Parity);
setFlowControl(settings.FlowControl);
setTimeout(settings.Timeout_Sec, settings.Timeout_Millisec);
}
/*!
\fn Win_QextSerialPort::~Win_QextSerialPort()
Standard destructor.
*/
Win_QextSerialPort::~Win_QextSerialPort() {
if (isOpen()) {
close();
}
}
/*!
\fn Win_QextSerialPort& Win_QextSerialPort::operator=(const Win_QextSerialPort& s)
overrides the = operator
*/
Win_QextSerialPort& Win_QextSerialPort::operator=(const Win_QextSerialPort& s) {
setOpenMode(s.openMode());
lastErr=s.lastErr;
port = s.port;
Settings.FlowControl=s.Settings.FlowControl;
Settings.Parity=s.Settings.Parity;
Settings.DataBits=s.Settings.DataBits;
Settings.StopBits=s.Settings.StopBits;
Settings.BaudRate=s.Settings.BaudRate;
Win_Handle=s.Win_Handle;
memcpy(&Win_CommConfig, &s.Win_CommConfig, sizeof(COMMCONFIG));
memcpy(&Win_CommTimeouts, &s.Win_CommTimeouts, sizeof(COMMTIMEOUTS));
return *this;
}
/*!
\fn bool Win_QextSerialPort::open(OpenMode mode)
Opens a serial port. Note that this function does not specify which device to open. If you need
to open a device by name, see Win_QextSerialPort::open(const char*). This function has no effect
if the port associated with the class is already open. The port is also configured to the current
settings, as stored in the Settings structure.
*/
bool Win_QextSerialPort::open(OpenMode mode) {
unsigned long confSize = sizeof(COMMCONFIG);
Win_CommConfig.dwSize = confSize;
LOCK_MUTEX();
if (mode == QIODevice::NotOpen)
return isOpen();
if (!isOpen()) {
/*open the port*/
Win_Handle=CreateFileA(port.toLatin1(), GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (Win_Handle!=INVALID_HANDLE_VALUE) {
/*set open mode*/
QIODevice::open(mode);
/*configure port settings*/
GetCommConfig(Win_Handle, &Win_CommConfig, &confSize);
GetCommState(Win_Handle, &(Win_CommConfig.dcb));
/*set up parameters*/
Win_CommConfig.dcb.fBinary=TRUE;
Win_CommConfig.dcb.fInX=FALSE;
Win_CommConfig.dcb.fOutX=FALSE;
Win_CommConfig.dcb.fAbortOnError=FALSE;
Win_CommConfig.dcb.fNull=FALSE;
setBaudRate(Settings.BaudRate);
setDataBits(Settings.DataBits);
setStopBits(Settings.StopBits);
setParity(Settings.Parity);
setFlowControl(Settings.FlowControl);
setTimeout(Settings.Timeout_Sec, Settings.Timeout_Millisec);
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
}
}
UNLOCK_MUTEX();
return isOpen();
}
/*!
\fn void Win_QextSerialPort::close()
Closes a serial port. This function has no effect if the serial port associated with the class
is not currently open.
*/
void Win_QextSerialPort::close() {
LOCK_MUTEX();
CloseHandle(Win_Handle);
QIODevice::close();
UNLOCK_MUTEX();
}
/*!
\fn void Win_QextSerialPort::flush()
Flushes all pending I/O to the serial port. This function has no effect if the serial port
associated with the class is not currently open.
*/
void Win_QextSerialPort::flush() {
LOCK_MUTEX();
if (isOpen()) {
FlushFileBuffers(Win_Handle);
}
UNLOCK_MUTEX();
}
/*!
\fn qint64 Win_QextSerialPort::size() const
This function will return the number of bytes waiting in the receive queue of the serial port.
It is included primarily to provide a complete QIODevice interface, and will not record errors
in the lastErr member (because it is const). This function is also not thread-safe - in
multithreading situations, use Win_QextSerialPort::bytesAvailable() instead.
*/
qint64 Win_QextSerialPort::size() const {
int availBytes;
COMSTAT Win_ComStat;
DWORD Win_ErrorMask=0;
ClearCommError(Win_Handle, &Win_ErrorMask, &Win_ComStat);
availBytes = Win_ComStat.cbInQue;
return (qint64)availBytes;
}
/*!
\fn qint64 Win_QextSerialPort::bytesAvailable()
Returns the number of bytes waiting in the port's receive queue. This function will return 0 if
the port is not currently open, or -1 on error. Error information can be retrieved by calling
Win_QextSerialPort::getLastError().
*/
qint64 Win_QextSerialPort::bytesAvailable() {
LOCK_MUTEX();
if (isOpen()) {
DWORD Errors;
COMSTAT Status;
bool success=ClearCommError(Win_Handle, &Errors, &Status);
translateError(Errors);
if (success) {
lastErr=E_NO_ERROR;
UNLOCK_MUTEX();
return Status.cbInQue + QIODevice::bytesAvailable();
}
UNLOCK_MUTEX();
return (unsigned int)-1;
}
UNLOCK_MUTEX();
return 0;
}
/*!
\fn void Win_QextSerialPort::translateError(ulong error)
Translates a system-specific error code to a QextSerialPort error code. Used internally.
*/
void Win_QextSerialPort::translateError(ulong error) {
if (error&CE_BREAK) {
lastErr=E_BREAK_CONDITION;
}
else if (error&CE_FRAME) {
lastErr=E_FRAMING_ERROR;
}
else if (error&CE_IOE) {
lastErr=E_IO_ERROR;
}
else if (error&CE_MODE) {
lastErr=E_INVALID_FD;
}
else if (error&CE_OVERRUN) {
lastErr=E_BUFFER_OVERRUN;
}
else if (error&CE_RXPARITY) {
lastErr=E_RECEIVE_PARITY_ERROR;
}
else if (error&CE_RXOVER) {
lastErr=E_RECEIVE_OVERFLOW;
}
else if (error&CE_TXFULL) {
lastErr=E_TRANSMIT_OVERFLOW;
}
}
/*!
\fn qint64 Win_QextSerialPort::readData(char *data, qint64 maxSize)
Reads a block of data from the serial port. This function will read at most maxlen bytes from
the serial port and place them in the buffer pointed to by data. Return value is the number of
bytes actually read, or -1 on error.
\warning before calling this function ensure that serial port associated with this class
is currently open (use isOpen() function to check if port is open).
*/
qint64 Win_QextSerialPort::readData(char *data, qint64 maxSize)
{
LOCK_MUTEX();
int retVal=0;
COMSTAT Win_ComStat;
DWORD Win_BytesRead=0;
DWORD Win_ErrorMask=0;
ClearCommError(Win_Handle, &Win_ErrorMask, &Win_ComStat);
if (Win_ComStat.cbInQue &&
(!ReadFile(Win_Handle, (void*)data, (DWORD)maxSize, &Win_BytesRead, NULL)
|| Win_BytesRead==0)) {
lastErr=E_READ_FAILED;
retVal=-1;
}
else {
retVal=((int)Win_BytesRead);
}
UNLOCK_MUTEX();
return retVal;
}
/*!
\fn qint64 Win_QextSerialPort::writeData(const char *data, qint64 maxSize)
Writes a block of data to the serial port. This function will write len bytes
from the buffer pointed to by data to the serial port. Return value is the number
of bytes actually written, or -1 on error.
\warning before calling this function ensure that serial port associated with this class
is currently open (use isOpen() function to check if port is open).
*/
qint64 Win_QextSerialPort::writeData(const char *data, qint64 maxSize)
{
LOCK_MUTEX();
int retVal=0;
DWORD Win_BytesWritten;
if (!WriteFile(Win_Handle, (void*)data, (DWORD)maxSize, &Win_BytesWritten, NULL)) {
lastErr=E_WRITE_FAILED;
retVal=-1;
}
else {
retVal=((int)Win_BytesWritten);
}
UNLOCK_MUTEX();
flush();
return retVal;
}
/*!
\fn void Win_QextSerialPort::ungetChar(char c)
This function is included to implement the full QIODevice interface, and currently has no
purpose within this class. This function is meaningless on an unbuffered device and currently
only prints a warning message to that effect.
*/
void Win_QextSerialPort::ungetChar(char c) {
if (c == c)
{
}
/*meaningless on unbuffered sequential device - return error and print a warning*/
TTY_WARNING("Win_QextSerialPort: ungetChar() called on an unbuffered sequential device - operation is meaningless");
}
/*!
\fn void Win_QextSerialPort::setFlowControl(FlowType flow)
Sets the flow control used by the port. Possible values of flow are:
\verbatim
FLOW_OFF No flow control
FLOW_HARDWARE Hardware (RTS/CTS) flow control
FLOW_XONXOFF Software (XON/XOFF) flow control
\endverbatim
*/
void Win_QextSerialPort::setFlowControl(FlowType flow) {
LOCK_MUTEX();
if (Settings.FlowControl!=flow) {
Settings.FlowControl=flow;
}
if (isOpen()) {
switch(flow) {
/*no flow control*/
case FLOW_OFF:
Win_CommConfig.dcb.fOutxCtsFlow=FALSE;
Win_CommConfig.dcb.fRtsControl=RTS_CONTROL_DISABLE;
Win_CommConfig.dcb.fInX=FALSE;
Win_CommConfig.dcb.fOutX=FALSE;
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
break;
/*software (XON/XOFF) flow control*/
case FLOW_XONXOFF:
Win_CommConfig.dcb.fOutxCtsFlow=FALSE;
Win_CommConfig.dcb.fRtsControl=RTS_CONTROL_DISABLE;
Win_CommConfig.dcb.fInX=TRUE;
Win_CommConfig.dcb.fOutX=TRUE;
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
break;
case FLOW_HARDWARE:
Win_CommConfig.dcb.fOutxCtsFlow=TRUE;
Win_CommConfig.dcb.fRtsControl=RTS_CONTROL_HANDSHAKE;
Win_CommConfig.dcb.fInX=FALSE;
Win_CommConfig.dcb.fOutX=FALSE;
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
break;
}
}
UNLOCK_MUTEX();
}
/*!
\fn void Win_QextSerialPort::setParity(ParityType parity)
Sets the parity associated with the serial port. The possible values of parity are:
\verbatim
PAR_SPACE Space Parity
PAR_MARK Mark Parity
PAR_NONE No Parity
PAR_EVEN Even Parity
PAR_ODD Odd Parity
\endverbatim
*/
void Win_QextSerialPort::setParity(ParityType parity) {
LOCK_MUTEX();
if (Settings.Parity!=parity) {
Settings.Parity=parity;
}
if (isOpen()) {
Win_CommConfig.dcb.Parity=(unsigned char)parity;
switch (parity) {
/*space parity*/
case PAR_SPACE:
if (Settings.DataBits==DATA_8) {
TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: Space parity with 8 data bits is not supported by POSIX systems.");
}
Win_CommConfig.dcb.fParity=TRUE;
break;
/*mark parity - WINDOWS ONLY*/
case PAR_MARK:
TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: Mark parity is not supported by POSIX systems");
Win_CommConfig.dcb.fParity=TRUE;
break;
/*no parity*/
case PAR_NONE:
Win_CommConfig.dcb.fParity=FALSE;
break;
/*even parity*/
case PAR_EVEN:
Win_CommConfig.dcb.fParity=TRUE;
break;
/*odd parity*/
case PAR_ODD:
Win_CommConfig.dcb.fParity=TRUE;
break;
}
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
}
UNLOCK_MUTEX();
}
/*!
\fn void Win_QextSerialPort::setDataBits(DataBitsType dataBits)
Sets the number of data bits used by the serial port. Possible values of dataBits are:
\verbatim
DATA_5 5 data bits
DATA_6 6 data bits
DATA_7 7 data bits
DATA_8 8 data bits
\endverbatim
\note
This function is subject to the following restrictions:
\par
5 data bits cannot be used with 2 stop bits.
\par
1.5 stop bits can only be used with 5 data bits.
\par
8 data bits cannot be used with space parity on POSIX systems.
*/
void Win_QextSerialPort::setDataBits(DataBitsType dataBits) {
LOCK_MUTEX();
if (Settings.DataBits!=dataBits) {
if ((Settings.StopBits==STOP_2 && dataBits==DATA_5) ||
(Settings.StopBits==STOP_1_5 && dataBits!=DATA_5)) {
}
else {
Settings.DataBits=dataBits;
}
}
if (isOpen()) {
switch(dataBits) {
/*5 data bits*/
case DATA_5:
if (Settings.StopBits==STOP_2) {
TTY_WARNING("Win_QextSerialPort: 5 Data bits cannot be used with 2 stop bits.");
}
else {
Win_CommConfig.dcb.ByteSize=5;
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
}
break;
/*6 data bits*/
case DATA_6:
if (Settings.StopBits==STOP_1_5) {
TTY_WARNING("Win_QextSerialPort: 6 Data bits cannot be used with 1.5 stop bits.");
}
else {
Win_CommConfig.dcb.ByteSize=6;
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
}
break;
/*7 data bits*/
case DATA_7:
if (Settings.StopBits==STOP_1_5) {
TTY_WARNING("Win_QextSerialPort: 7 Data bits cannot be used with 1.5 stop bits.");
}
else {
Win_CommConfig.dcb.ByteSize=7;
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
}
break;
/*8 data bits*/
case DATA_8:
if (Settings.StopBits==STOP_1_5) {
TTY_WARNING("Win_QextSerialPort: 8 Data bits cannot be used with 1.5 stop bits.");
}
else {
Win_CommConfig.dcb.ByteSize=8;
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
}
break;
}
}
UNLOCK_MUTEX();
}
/*!
\fn void Win_QextSerialPort::setStopBits(StopBitsType stopBits)
Sets the number of stop bits used by the serial port. Possible values of stopBits are:
\verbatim
STOP_1 1 stop bit
STOP_1_5 1.5 stop bits
STOP_2 2 stop bits
\endverbatim
\note
This function is subject to the following restrictions:
\par
2 stop bits cannot be used with 5 data bits.
\par
1.5 stop bits cannot be used with 6 or more data bits.
\par
POSIX does not support 1.5 stop bits.
*/
void Win_QextSerialPort::setStopBits(StopBitsType stopBits) {
LOCK_MUTEX();
if (Settings.StopBits!=stopBits) {
if ((Settings.DataBits==DATA_5 && stopBits==STOP_2) ||
(stopBits==STOP_1_5 && Settings.DataBits!=DATA_5)) {
}
else {
Settings.StopBits=stopBits;
}
}
if (isOpen()) {
switch (stopBits) {
/*one stop bit*/
case STOP_1:
Win_CommConfig.dcb.StopBits=ONESTOPBIT;
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
break;
/*1.5 stop bits*/
case STOP_1_5:
TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: 1.5 stop bit operation is not supported by POSIX.");
if (Settings.DataBits!=DATA_5) {
TTY_WARNING("Win_QextSerialPort: 1.5 stop bits can only be used with 5 data bits");
}
else {
Win_CommConfig.dcb.StopBits=ONE5STOPBITS;
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
}
break;
/*two stop bits*/
case STOP_2:
if (Settings.DataBits==DATA_5) {
TTY_WARNING("Win_QextSerialPort: 2 stop bits cannot be used with 5 data bits");
}
else {
Win_CommConfig.dcb.StopBits=TWOSTOPBITS;
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
}
break;
}
}
UNLOCK_MUTEX();
}
/*!
\fn void Win_QextSerialPort::setBaudRate(BaudRateType baudRate)
Sets the baud rate of the serial port. Note that not all rates are applicable on
all platforms. The following table shows translations of the various baud rate
constants on Windows(including NT/2000) and POSIX platforms. Speeds marked with an *
are speeds that are usable on both Windows and POSIX.
\verbatim
RATE Windows Speed POSIX Speed
----------- ------------- -----------
BAUD50 110 50
BAUD75 110 75
*BAUD110 110 110
BAUD134 110 134.5
BAUD150 110 150
BAUD200 110 200
*BAUD300 300 300
*BAUD600 600 600
*BAUD1200 1200 1200
BAUD1800 1200 1800
*BAUD2400 2400 2400
*BAUD4800 4800 4800
*BAUD9600 9600 9600
BAUD14400 14400 9600
*BAUD19200 19200 19200
*BAUD38400 38400 38400
BAUD56000 56000 38400
*BAUD57600 57600 57600
BAUD76800 57600 76800
*BAUD115200 115200 115200
BAUD128000 128000 115200
BAUD256000 256000 115200
\endverbatim
*/
void Win_QextSerialPort::setBaudRate(BaudRateType baudRate) {
LOCK_MUTEX();
if (Settings.BaudRate!=baudRate) {
switch (baudRate) {
case BAUD50:
case BAUD75:
case BAUD134:
case BAUD150:
case BAUD200:
Settings.BaudRate=BAUD110;
break;
case BAUD1800:
Settings.BaudRate=BAUD1200;
break;
case BAUD76800:
Settings.BaudRate=BAUD57600;
break;
default:
Settings.BaudRate=baudRate;
break;
}
}
if (isOpen()) {
switch (baudRate) {
/*50 baud*/
case BAUD50:
TTY_WARNING("Win_QextSerialPort: Windows does not support 50 baud operation. Switching to 110 baud.");
Win_CommConfig.dcb.BaudRate=CBR_110;
break;
/*75 baud*/
case BAUD75:
TTY_WARNING("Win_QextSerialPort: Windows does not support 75 baud operation. Switching to 110 baud.");
Win_CommConfig.dcb.BaudRate=CBR_110;
break;
/*110 baud*/
case BAUD110:
Win_CommConfig.dcb.BaudRate=CBR_110;
break;
/*134.5 baud*/
case BAUD134:
TTY_WARNING("Win_QextSerialPort: Windows does not support 134.5 baud operation. Switching to 110 baud.");
Win_CommConfig.dcb.BaudRate=CBR_110;
break;
/*150 baud*/
case BAUD150:
TTY_WARNING("Win_QextSerialPort: Windows does not support 150 baud operation. Switching to 110 baud.");
Win_CommConfig.dcb.BaudRate=CBR_110;
break;
/*200 baud*/
case BAUD200:
TTY_WARNING("Win_QextSerialPort: Windows does not support 200 baud operation. Switching to 110 baud.");
Win_CommConfig.dcb.BaudRate=CBR_110;
break;
/*300 baud*/
case BAUD300:
Win_CommConfig.dcb.BaudRate=CBR_300;
break;
/*600 baud*/
case BAUD600:
Win_CommConfig.dcb.BaudRate=CBR_600;
break;
/*1200 baud*/
case BAUD1200:
Win_CommConfig.dcb.BaudRate=CBR_1200;
break;
/*1800 baud*/
case BAUD1800:
TTY_WARNING("Win_QextSerialPort: Windows does not support 1800 baud operation. Switching to 1200 baud.");
Win_CommConfig.dcb.BaudRate=CBR_1200;
break;
/*2400 baud*/
case BAUD2400:
Win_CommConfig.dcb.BaudRate=CBR_2400;
break;
/*4800 baud*/
case BAUD4800:
Win_CommConfig.dcb.BaudRate=CBR_4800;
break;
/*9600 baud*/
case BAUD9600:
Win_CommConfig.dcb.BaudRate=CBR_9600;
break;
/*14400 baud*/
case BAUD14400:
TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: POSIX does not support 14400 baud operation.");
Win_CommConfig.dcb.BaudRate=CBR_14400;
break;
/*19200 baud*/
case BAUD19200:
Win_CommConfig.dcb.BaudRate=CBR_19200;
break;
/*38400 baud*/
case BAUD38400:
Win_CommConfig.dcb.BaudRate=CBR_38400;
break;
/*56000 baud*/
case BAUD56000:
TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: POSIX does not support 56000 baud operation.");
Win_CommConfig.dcb.BaudRate=CBR_56000;
break;
/*57600 baud*/
case BAUD57600:
Win_CommConfig.dcb.BaudRate=CBR_57600;
break;
/*76800 baud*/
case BAUD76800:
TTY_WARNING("Win_QextSerialPort: Windows does not support 76800 baud operation. Switching to 57600 baud.");
Win_CommConfig.dcb.BaudRate=CBR_57600;
break;
/*115200 baud*/
case BAUD115200:
Win_CommConfig.dcb.BaudRate=CBR_115200;
break;
/*128000 baud*/
case BAUD128000:
TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: POSIX does not support 128000 baud operation.");
Win_CommConfig.dcb.BaudRate=CBR_128000;
break;
/*256000 baud*/
case BAUD256000:
TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: POSIX does not support 256000 baud operation.");
Win_CommConfig.dcb.BaudRate=CBR_256000;
break;
}
SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG));
}
UNLOCK_MUTEX();
}
/*!
\fn void Win_QextSerialPort::setDtr(bool set)
Sets DTR line to the requested state (high by default). This function will have no effect if
the port associated with the class is not currently open.
*/
void Win_QextSerialPort::setDtr(bool set) {
LOCK_MUTEX();
if (isOpen()) {
if (set) {
EscapeCommFunction(Win_Handle, SETDTR);
}
else {
EscapeCommFunction(Win_Handle, CLRDTR);
}
}
UNLOCK_MUTEX();
}
/*!
\fn void Win_QextSerialPort::setRts(bool set)
Sets RTS line to the requested state (high by default). This function will have no effect if
the port associated with the class is not currently open.
*/
void Win_QextSerialPort::setRts(bool set) {
LOCK_MUTEX();
if (isOpen()) {
if (set) {
EscapeCommFunction(Win_Handle, SETRTS);
}
else {
EscapeCommFunction(Win_Handle, CLRRTS);
}
}
UNLOCK_MUTEX();
}
/*!
\fn ulong Win_QextSerialPort::lineStatus(void)
returns the line status as stored by the port function. This function will retrieve the states
of the following lines: DCD, CTS, DSR, and RI. On POSIX systems, the following additional lines
can be monitored: DTR, RTS, Secondary TXD, and Secondary RXD. The value returned is an unsigned
long with specific bits indicating which lines are high. The following constants should be used
to examine the states of individual lines:
\verbatim
Mask Line
------ ----
LS_CTS CTS
LS_DSR DSR
LS_DCD DCD
LS_RI RI
\endverbatim
This function will return 0 if the port associated with the class is not currently open.
*/
ulong Win_QextSerialPort::lineStatus(void) {
unsigned long Status=0, Temp=0;
LOCK_MUTEX();
if (isOpen()) {
GetCommModemStatus(Win_Handle, &Temp);
if (Temp&MS_CTS_ON) {
Status|=LS_CTS;
}
if (Temp&MS_DSR_ON) {
Status|=LS_DSR;
}
if (Temp&MS_RING_ON) {
Status|=LS_RI;
}
if (Temp&MS_RLSD_ON) {
Status|=LS_DCD;
}
}
UNLOCK_MUTEX();
return Status;
}
/*!
\fn void Win_QextSerialPort::setTimeout(ulong sec, ulong millisec);
Sets the read and write timeouts for the port to sec seconds and millisec milliseconds.
*/
void Win_QextSerialPort::setTimeout(ulong sec, ulong millisec) {
LOCK_MUTEX();
Settings.Timeout_Sec=sec;
Settings.Timeout_Millisec=millisec;
if(isOpen()) {
Win_CommTimeouts.ReadIntervalTimeout = sec*1000+millisec;
Win_CommTimeouts.ReadTotalTimeoutMultiplier = sec*1000+millisec;
Win_CommTimeouts.ReadTotalTimeoutConstant = 0;
Win_CommTimeouts.WriteTotalTimeoutMultiplier = sec*1000+millisec;
Win_CommTimeouts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(Win_Handle, &Win_CommTimeouts);
}
UNLOCK_MUTEX();
}

View File

@ -0,0 +1,48 @@
#ifndef _WIN_QEXTSERIALPORT_H_
#define _WIN_QEXTSERIALPORT_H_
#include "qextserialbase.h"
/*if all warning messages are turned off, flag portability warnings to be turned off as well*/
#ifdef _TTY_NOWARN_
#define _TTY_NOWARN_PORT_
#endif
#include <windows.h>
class Win_QextSerialPort:public QextSerialBase {
public:
Win_QextSerialPort();
Win_QextSerialPort(Win_QextSerialPort const& s);
Win_QextSerialPort(const QString & name);
Win_QextSerialPort(const PortSettings& settings);
Win_QextSerialPort(const QString & name, const PortSettings& settings);
Win_QextSerialPort& operator=(const Win_QextSerialPort& s);
virtual ~Win_QextSerialPort();
virtual bool open(OpenMode mode=0);
virtual void close();
virtual void flush();
virtual qint64 size() const;
virtual void ungetChar(char c);
virtual void setFlowControl(FlowType);
virtual void setParity(ParityType);
virtual void setDataBits(DataBitsType);
virtual void setStopBits(StopBitsType);
virtual void setBaudRate(BaudRateType);
virtual void setDtr(bool set=true);
virtual void setRts(bool set=true);
virtual ulong lineStatus(void);
virtual qint64 bytesAvailable();
virtual void translateError(ulong);
virtual void setTimeout(ulong, ulong);
protected:
HANDLE Win_Handle;
COMMCONFIG Win_CommConfig;
COMMTIMEOUTS Win_CommTimeouts;
virtual qint64 readData(char *data, qint64 maxSize);
virtual qint64 writeData(const char *data, qint64 maxSize);
};
#endif

501
machine/tcpclient.cpp Normal file
View File

@ -0,0 +1,501 @@
#include "tcpclient.h"
#include <QSettings>
#include <QApplication>
#include <QAbstractSocket>
TcpClient::TcpClient(QObject *parent) :
QObject(parent),
m_pClientSocket(NULL),
m_pConnectCheckTimer(NULL),
m_connected(0),
m_pConnectDetectThread(NULL),
m_pConnectDetect(NULL),
m_detect(0),
m_localip(DEF_LOCAL_IP),
m_localport(DEF_LOCAL_PORT),
m_serverip(DEF_SERVER_IP),
m_serverport(DEF_SERVER_PORT)
{
m_pClientSocket = new QBindTcpSocket(this);
m_pClientSocket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);
connect(m_pClientSocket, SIGNAL(readyRead()), this, SLOT(receiveServerData()));
connect(m_pClientSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(displaySocketError(QAbstractSocket::SocketError)));
// connect(m_pClientSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(netStateChanged(QAbstractSocket::SocketState)));
m_pConnectCheckTimer = new QTimer(this);
connect(m_pConnectCheckTimer, SIGNAL(timeout()), this, SLOT(connectCheck()));
m_pConnectDetectThread = new QThread();
}
TcpClient::~TcpClient()
{
m_pConnectCheckTimer->stop();
delete m_pConnectCheckTimer;
m_pClientSocket->disconnectFromHost();
m_pClientSocket->waitForDisconnected();
m_pClientSocket->close();
delete m_pClientSocket;
if (m_connected != 0)
{
m_pConnectDetectThread->quit();
m_pConnectDetectThread->wait();
}
delete m_pConnectDetectThread;
}
void TcpClient::setConfigFileName(QString configfilename)
{
m_configFileName = configfilename;
}
void TcpClient::connectToServer()
{
if (m_pClientSocket == NULL)
{
qDebug() << "m_pClientSocket not alloc";
return;
}
if (m_connected == 0)
{
loadIpAndPort();
if (m_pConnectDetect == NULL)
{
m_pConnectDetect = new TcpConnectDetect;
}
qDebug() << "ConnectToServer";
qDebug() << "localip=" << m_localip << "localport=" << m_localport;
qDebug() << "serverip=" << m_serverip << "serverport=" << m_serverport;
m_pConnectDetect->setIpAndPort(m_localip, m_localport, m_serverip, m_serverport);
m_pConnectDetect->moveToThread(m_pConnectDetectThread);
connect(this, SIGNAL(siDetectHost()), m_pConnectDetect, SLOT(connectDetect()), Qt::QueuedConnection);
connect(m_pConnectDetect, SIGNAL(siConnectSta(int)), this, SLOT(detectStatus(int)), Qt::QueuedConnection);
// 20191226由于检测线程会造成网络重连所以将检测线程注释 lft
/*
connect(m_pConnectDetectThread, SIGNAL(started()), m_pConnectDetect, SLOT(detectStart()) );
connect(m_pConnectDetectThread, SIGNAL(finished()), m_pConnectDetect, SLOT(deleteLater()) ); // 退出删除对象
m_pConnectDetectThread->start(); // 启动线程
*/
m_pConnectCheckTimer->start(1000);
m_connected = 1;
m_detect = 1;
}
}
void TcpClient::disConnectFromServer()
{
if (m_connected != 0)
{
m_pConnectCheckTimer->stop();
if (m_pClientSocket != NULL)
{
m_pClientSocket->disconnectFromHost();
m_pClientSocket->waitForDisconnected();
m_pClientSocket->close();
}
m_pConnectDetectThread->quit();
m_pConnectDetectThread->wait();
m_connected = 0;
m_detect = 0;
}
}
void TcpClient::loadIpAndPort()
{
if (!m_configFileName.isEmpty())
{
// 机器的IP和端口 和 连接机器的本地IP和端口
QSettings configIni(m_configFileName, QSettings::IniFormat);
QString serverip, localip;
quint16 serverport, localport;
serverip = configIni.value("server/ip", QVariant("192.168.16.253")).toString();
serverport = configIni.value("server/port", QVariant(5000)).toInt();
localip = configIni.value("local/ip", QVariant("192.168.16.100")).toString();
localport = configIni.value("local/port", 5001).toInt();
// 回写参数
configIni.setValue("server/ip", serverip);
configIni.setValue("server/port", serverport);
configIni.setValue("local/ip", localip);
configIni.setValue("local/port", localport);
m_localip = localip;
m_localport = localport;
m_serverip = serverip;
m_serverport = serverport;
}
}
// 发送数据的槽
void TcpClient::slotSendData(QByteArray dat)
{
if (m_pClientSocket != NULL)
{
m_pClientSocket->write(dat);
}
}
// 自动检测连接
void TcpClient::connectCheck()
{
if (m_pClientSocket == NULL)
{
qDebug() << "Socket is not alloced";
return;
}
// qDebug() << "check client connect";
if (m_connected == 1)
{
if (m_localip.isEmpty() == false)
{
m_pClientSocket->bindAddrAndPort(m_localip, m_localport);
}
m_pClientSocket->abort();
m_pClientSocket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
m_pClientSocket->connectToHost(m_serverip, m_serverport);
int rslt = m_pClientSocket->waitForConnected(2000);
if (rslt == 0)
{
}
/*
qDebug("bind connect and waitForConnected 2000, rslt=%d", rslt);
qDebug() << "localip=" << m_localip << "localport=" << m_localport;
qDebug() << "serverip=" << m_serverip << "serverport=" << m_serverport;
*/
m_connected = 2;
}
else if (m_connected != 0)
{
switch(m_pClientSocket->state())
{
case QAbstractSocket::ConnectedState:
{
if (m_connected != 3)
{
/*
qDebug() << "net State is Connected";
qDebug() << "localip=" << m_localip << "localport=" << m_localport;
*/
m_connected = 3; // 检测连接状态
}
break;
}
case QAbstractSocket::ConnectingState:
{
if (m_connected != 2)
{
qDebug() << "net State is Connecting";
// qDebug() << "localip=" << m_localip << "localport=" << m_localport;
}
m_connected = 2;
break;
}
case QAbstractSocket::UnconnectedState:
{
if (m_connected != 1)
{
// qDebug() << "net State is unconnected";
// qDebug() << "localip=" << m_localip << "localport=" << m_localport;
}
m_connected = 1;
break;
}
default:
{
/*
QAbstractSocket::HostLookupState
QAbstractSocket::BoundState
QAbstractSocket::ListeningState
QAbstractSocket::ClosingState
*/
{
qDebug("net State is %d\r\n", m_pClientSocket->state());
qDebug() << "localip=" << m_localip << "localport=" << m_localport;
qDebug() << "serverip=" << m_serverip << "serverport=" << m_serverport;
}
m_connected = 1;
}
}
}
else
{
}
if (m_connected == 3) // 已连接
{
if (m_detect == 1)
{
// qDebug() << "Machine " << QThread::currentThread();
m_detect = 0;
emit(siDetectHost());
// qDebug() << "after send SiDetectHost ";
}
}
emit (siConnectSta(m_connected)); // 网络连接信号
}
void TcpClient::detectStatus(int sta)
{
// qDebug("host detect sta=%d", sta);
m_detect = 1;
if (sta == 1) // 网络已断开
{
qDebug("disconnect ClientSocket by detect");
m_pClientSocket->disconnectFromHost();
// m_pClientSocket->waitForDisconnected();
m_pClientSocket->close();
m_connected = 1;
}
else if (sta == 2) // 网络连接还在
{
}
else
{
}
}
void TcpClient::receiveServerData()
{
if (m_pClientSocket != NULL)
{
QByteArray tmpDat;
tmpDat = m_pClientSocket->readAll(); // 读取
// qDebug("ReceiveServerData, size = %d", tmpDat.size());
// PrintAsHex(&tmpDat);
emit(siReceiveData(tmpDat)); // 发送收到数据信号
}
}
void TcpClient::displaySocketError(QAbstractSocket::SocketError err)
{
QString errinfo;
errinfo.sprintf("Err: code=%d, errorString=", err);
errinfo += m_pClientSocket->errorString();
// qDebug() << errinfo;
emit(siConnectErr(errinfo)); // 网络错误信息
}
void TcpClient::netStateChanged(QAbstractSocket::SocketState sta)
{
switch (sta)
{
/*
case UnconnectedState:
case HostLookupState:
case ConnectingState:
case ConnectedState:
case BoundState:
case ListeningState:
case ClosingStat:
*/
default:
break;
}
}
void TcpClient::hostFound()
{
qDebug("found host");
}
#if(0)
//-------------------------------------------------------
TcpConnectDetect::TcpConnectDetect(QObject *parent) :
QObject(parent),
m_pDetectSocket(NULL),
m_localip(DEF_LOCAL_IP),
m_localport(DEF_LOCAL_PORT),
m_serverip(DEF_SERVER_IP),
m_serverport(DEF_SERVER_PORT)
{
}
TcpConnectDetect::~TcpConnectDetect()
{
if (m_pDetectSocket == NULL)
{
m_pDetectSocket->disconnectFromHost();
m_pDetectSocket->waitForDisconnected();
m_pDetectSocket->close();
delete m_pDetectSocket;
}
}
void TcpConnectDetect::detectStart()
{
qDebug("TcpConnectDetect start");
if (m_pDetectSocket == NULL)
{
m_pDetectSocket = new QBindTcpSocket;
}
}
int TcpConnectDetect::connectDetect()
{
int connectsta = 0;
int rslt;
// qDebug() << "TcpConnectDetect " << QThread::currentThread();
if (m_pDetectSocket == NULL)
{
return 0;
}
if (m_localip.isEmpty() == false)
{
m_pDetectSocket->bindAddrAndPort(m_localip, m_localport);
}
m_pDetectSocket->abort();
m_pDetectSocket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
m_pDetectSocket->connectToHost(m_serverip, m_serverport);
do
{
rslt = m_pDetectSocket->waitForConnected(4000); // 等待连接
qDebug("bind Detect connect rslt=%d", rslt);
qDebug() << "localip=" << m_localip << "localport=" << m_localport;
qDebug() << "serverip=" << m_serverip << "serverport=" << m_serverport;
switch(m_pDetectSocket->state())
{
case QAbstractSocket::ConnectedState:
{
// 如果连接上,说明 m_pClientSocket 连接已经无效, 需要断开重新连接
// 先断开测试连接
m_pDetectSocket->disconnectFromHost();
m_pDetectSocket->waitForDisconnected();
connectsta = 1;
// 发送断开主连接的信号
qDebug() << "detect is Connected, disconnect all";
break;
}
case QAbstractSocket::UnconnectedState:
{
// qDebug() << "detect is Unconnected err=" << m_pDetectSocket->error() << ", info:" << m_pDetectSocket->errorString();
switch (m_pDetectSocket->error())
{
case QAbstractSocket::SocketTimeoutError: // 连接超时,说明已经断开
case QAbstractSocket::NetworkError: // 网络错误, 主机不可连接, 可能已经断开
{
qDebug() << "detect is timout, disconnect all";
connectsta = 1;
// 发送断开主连接的信号
break;
}
case QAbstractSocket::ConnectionRefusedError: // 拒绝连接, 说明连接还在
{
connectsta = 2;
// qDebug() << "Connection Refused, old connect is alive";
break;
}
/*
case QAbstractSocket::RemoteHostClosedError:
case QAbstractSocket::HostNotFoundError:
case QAbstractSocket::SocketAccessError:
case QAbstractSocket::SocketResourceError:
case QAbstractSocket::SocketTimeoutError:
case QAbstractSocket::DatagramTooLargeError:
case QAbstractSocket::AddressInUseError:
case QAbstractSocket::SocketAddressNotAvailableError:
case QAbstractSocket::UnsupportedSocketOperationError:
case QAbstractSocket::UnfinishedSocketOperationError:
case QAbstractSocket::ProxyAuthenticationRequiredError:
case QAbstractSocket::SslHandshakeFailedError:
case QAbstractSocket::ProxyConnectionRefusedError:
case QAbstractSocket::ProxyConnectionClosedError:
case QAbstractSocket::ProxyConnectionTimeoutError:
case QAbstractSocket::ProxyNotFoundError:
case QAbstractSocket::ProxyProtocolError:
case QAbstractSocket::UnknownSocketError:
*/
default:
{
// 继续检测
connectsta = 2;
qDebug() << " retry";
break;
}
} // 错误处理结束
}
case QAbstractSocket::ConnectingState:
{
// qDebug() << "detect is Connecting";
// qDebug() << "localip=" << m_localip << "localport=" << m_localport;
// 继续等待
break;
}
case QAbstractSocket::HostLookupState:
case QAbstractSocket::BoundState:
case QAbstractSocket::ListeningState:
case QAbstractSocket::ClosingState:
default:
{
// 继续等待
qDebug("detect sta is %d\r\n", m_pDetectSocket->state());
break;
}
}
if (connectsta != 0)
{
break;
}
}while(1);
m_pDetectSocket->close();
// 发送本次测试连接的状态信号
emit(siConnectSta(connectsta));
return connectsta;
}
void TcpConnectDetect::setIpAndPort(QString localip, quint16 localport, QString serverip, quint16 serverport)
{
m_localip = localip;
m_localport = localport;
m_serverip = serverip;
m_serverport = serverport;
}
#endif

102
machine/tcpclient.h Normal file
View File

@ -0,0 +1,102 @@
#ifndef TCPCLIENT_H
#define TCPCLIENT_H
#include <QObject>
#include <QTimer>
#include <QHostAddress>
#include <QTcpSocket>
#include <QUdpSocket>
#include <QTcpServer>
#include <QThread>
#include "qbindtcpsocket.h"
class ConnectDetectThread;
class TcpClient : public QObject
{
Q_OBJECT
public:
explicit TcpClient(QObject *parent = NULL);
virtual ~TcpClient();
public:
void setConfigFileName(QString configfilename);
signals:
void siConnectSta(int sta); // 网络连接信号
void siConnectErr(QString errinfo); // 网络错误信息
void siReceiveData(QByteArray dat); // 收到数据包信号
signals:
void siDetectHost(void);
public:
public slots:
void slotSendData(QByteArray dat); // 发送数据的槽
void connectToServer();//连接到服务器
void disConnectFromServer();
void detectStatus(int);
public:
private slots:
void connectCheck();
void receiveServerData();
void displaySocketError(QAbstractSocket::SocketError err);
void netStateChanged(QAbstractSocket::SocketState sta);
void hostFound();
private:
void loadIpAndPort();
private:
QBindTcpSocket * m_pClientSocket;//客户端
QTimer * m_pConnectCheckTimer;
public:
int m_connected; // 连接状态; 0, 初始化; 1, 未连接; 2, 连接中; 3, 已连接
private:
QThread * m_pConnectDetectThread;
TcpConnectDetect * m_pConnectDetect;
int m_detect; // 连接测试状态
private:
QString m_configFileName;
private:
QString m_localip;
quint16 m_localport;
QString m_serverip;
quint16 m_serverport;
};
#if(0)
class TcpConnectDetect : public QObject
{
Q_OBJECT
public:
explicit TcpConnectDetect(QObject *parent = NULL);
virtual ~TcpConnectDetect();
signals:
void siConnectSta(int sta); // 网络连接信号
public:
public slots:
void detectStart();
int connectDetect();
private:
QBindTcpSocket * m_pDetectSocket;
public:
void setIpAndPort(QString localip, quint16 localport, QString serverip, quint16 serverport);
private:
QString m_localip;
quint16 m_localport;
QString m_serverip;
quint16 m_serverport;
};
#endif
#endif // TCPCLIENT_H

437
main.cpp Normal file
View File

@ -0,0 +1,437 @@
#include <QApplication>
#include <QFontDatabase>
#include <QTranslator>
#include <QTextCodec>
#include <QSplashScreen>
#include <QResource>
#include <QDir>
#include <QSharedMemory>
#define _IN_MAIN_CPP
#include "main.h"
#include "mctype/patternsingleboard/mainUI/mainwidget.h"
QString switchLanguage(int language,QDir appPath)
{
QString sourcePath,targetPath;
targetPath = appPath.path() + appPath.separator() + "language.qm";
switch (language)
{
case 0://中文
sourcePath = appPath.path() + appPath.separator() + "chinese.qm";
break;
case 1://英文
sourcePath = appPath.path() + appPath.separator() + "english.qm";
break;
default://中文
sourcePath = appPath.path() + appPath.separator() + "chinese.qm";
break;
}
QFile::remove(targetPath);
QFile::copy(sourcePath,targetPath);
#ifdef Q_OS_LINUX
system("sync");
#endif
return targetPath;
}
void setMcMainWindow(QApplication &app, QSplashScreen *splash, s16 HMIDecrypt, s16 connectMode)
{
MainWidget mainwindow;
//初始化主窗口
mainwindow.initMcTypeWindows();
mainwindow.initAllWindows(HMIDecrypt,connectMode);
mainwindow.show();//显示窗口
splash->finish(NULL);
app.exec();//开始执行应用程序
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);//此处必须用QApplication否则QSplashScreen不能使用
QSharedMemory shared_memory;
shared_memory.setKey(QString("main_window"));//设置固定共享内存段的key值
if(shared_memory.attach()) //尝试将进程附加到该共享内存段,避免windows下重开程序
{
return 0;
}
#ifdef Q_OS_LINUX
QApplication::setOverrideCursor(Qt::BlankCursor);
#endif
//支持中文编码
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
//文件路径
QDir apppath(qApp->applicationDirPath());
g_pSettings = new Settings();
//将文件和文件夹重命名,防止旧程序升级为新程序时因为文件名称不同,造成死机
//重命名mcConfig.ini
QString mcconfigfile;
mcconfigfile = apppath.path() + apppath.separator() + "mcConfig.ini";
QFile file(mcconfigfile);
if(file.exists())
{
QString mcconfigfileCp = apppath.path() + apppath.separator() + "mcconfig.ini";
file.rename(mcconfigfileCp);
}
//重命名lotConfig.ini
QString lotconfigfile;
lotconfigfile = apppath.path() + apppath.separator() + "lotConfig.ini";
file.setFileName(lotconfigfile);
if(file.exists())
{
QString lotconfigfileCp = apppath.path() + apppath.separator() + "lotconfig.ini";
file.rename(lotconfigfileCp);
}
//如果目录下有oprt文件夹删除此文件夹
#ifdef Q_OS_LINUX
QString oprtPath;
oprtPath = apppath.path() + apppath.separator() + "oprt";
QDir oprtDir(oprtPath);
if(oprtDir.exists())
{
system("rm -rf /storage/oprt/oprt");
}
#endif
//改变花样路径名称并删除fcg文件
QString dirPath = apppath.absolutePath() + apppath.separator() + "patternfiles";
QDir dataFilesDir(dirPath);
if(dataFilesDir.exists())
{
//删除文件
QDir dir(dirPath);//项目中所保存的路径
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤
QFileInfoList fileList = dir.entryInfoList(QStringList()<<"*.fcg");// 获取.fcg的文件列表
foreach (QFileInfo file,fileList)//遍历文件信息
{
if (file.isFile()) //是文件,删除
{
file.dir().remove(file.fileName());
}
else //递归删除
{
// deleteDir(file.absoluteFilePath());
}
}
QString dirPathCp = apppath.absolutePath() + apppath.separator() + PATTERNPATH;
dataFilesDir.rename(dirPath,dirPathCp);
}
//日志文件记录
for(s16 i = TYPE_ERROR; i <= TYPE_BREAK; i++)
{
QString csvfile;
if(i == TYPE_ERROR)
{
csvfile = apppath.path() + apppath.separator() + CSV_ERROR;
}
else if(i == TYPE_BREAK)
{
csvfile = apppath.path() + apppath.separator() + CSV_BREAK;
}
// 使用时间格式进行csv文件命名
//m_strFilePath = strDir + "/" + QString("csv%1.csv").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd"));
// 判断文件是否不存在
QFile fileCSV(csvfile);
if (!fileCSV.exists())
{
QFile file(csvfile);
if (file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))
{
QTextStream in(&file);
QString strText("");
// 文件不存在第一次给他写个列表名字这样csv文件打开时候查看的时候就比较清晰
strText = QString("DateTime,") + QString("Info");
in << strText << '\n';
file.close();
}
}
g_pSettings->clearToCsv(i);
}
//配置文件路径
QString configfile;
configfile = apppath.path() + apppath.separator() + "config.ini";
//读入配置
//g_pSettings = new Settings();
g_pSettings->loadSetting(configfile);
QFile iniFile(configfile);
int language = 0;
s16 connectMode = 0;
s16 gatewayConnectMode = 0;
if(!iniFile.exists())//配置文件不存在
{
g_pSettings->writeToIniFile("HMI/resolution",resolution1006);
//上次关机时间
g_pSettings->writeToIniFile("DateTime/second",0);
//写入机头断线次数
g_pSettings->writeToIniFile("HeadBreakLineNum/head",0);
g_pSettings->writeToIniFile("HMI/connectMode",0);//连接方式(通讯方式,网口或串口)
g_pSettings->writeToIniFile("HMI/passwordOne",PASSWORD_ONE);
g_pSettings->writeToIniFile("HMI/machineType",MACHINE_PUNCH);
g_pSettings->writeToIniFile("HMI/productType",PRODUCT_PUNCH_SINGLEHEAD);
g_pSettings->writeToIniFile("HMI/connectMode",0);//连接方式(通讯方式,网口或串口)
g_pSettings->writeToIniFile("HMI/commonbtn1",FUN_PATTERNSELECT);//快捷按钮1的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn2",FUN_SETSTARTPOINT);//快捷按钮2的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn3",FUN_BACKSTARTPOINT);//快捷按钮3的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn4",FUN_CHECKFRAME);//快捷按钮4的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn5",FUN_FORWARDORBACK);//快捷按钮5的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn6",FUN_PUNCHMANUALCHANGECOLOR);//快捷按钮6的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn7",FUN_PUNCHSPINDLEJOG);//快捷按钮7的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn8",FUN_BACKWORKPOINT);//快捷按钮8的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn9",FUN_ALLTOZERO);//快捷按钮9的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn10",FUN_SINGLEPUNCH);//快捷按钮10的功能索引
g_pSettings->writeToIniFile("HMI/machineType",MACHINE_PUNCH);
g_pSettings->writeToIniFile("HMI/productType",PRODUCT_PUNCH_SINGLEHEAD);
g_pSettings->writeToIniFile("HMI/wifi",0);//是否有wifi
g_pSettings->writeToIniFile("HMI/language",chinese);
g_pSettings->writeToIniFile("HMI/waterMark",1);//0:主背景图不带水印 1:主背景图带水印
g_pSettings->writeToIniFile("HMI/paraSort",1);//0:参数不分类显示 1:参数分类显示
g_pSettings->writeToIniFile("HMI/debugMode",nodebugMode);//界面调试模式
g_pSettings->writeToIniFile("IOT/gatewayConnectMode",0);//网关连接方式(连接方式,网口或串口)
g_pSettings->writeToIniFile("IOT/rackNumber",0);//机架号
g_pSettings->writeToIniFile("Pattern/name","");
g_pSettings->writeToIniFile("AUFUS/zeroXcoordinate",90000);//自动定起始点
g_pSettings->writeToIniFile("AUFUS/highSpeed",0);//高低速
//冲孔针杆
g_pSettings->writeToIniFile("PunchNeedle/number",1);
g_pSettings->writeToIniFile("PunchNeedle/1_coloridx",1);
//缝纫针杆
g_pSettings->writeToIniFile("SewNeedle/number",1);
g_pSettings->writeToIniFile("SewNeedle/1_coloridx",1);
//绣花针杆
g_pSettings->writeToIniFile("EmbNeedle/number",1);
g_pSettings->writeToIniFile("EmbNeedle/1_coloridx",1);
g_emResolut = resolution1006;
language = chinese;
g_passwordOne = PASSWORD_ONE;
g_emDebugMode = nodebugMode;
}
else//存在配置文件很可能是只有DateTime/second
{
int date = g_pSettings->readFromIniFile("DateTime/second").toInt();
if(date == 0)
{
// 获取系统当前时间
QDateTime dateTime = QDateTime::currentDateTime();
g_pSettings->writeToIniFile(("DateTime/second"),dateTime.toTime_t());//单位为秒
}
QString g_emResolutStr = "HMI/resolution";
if(g_pSettings->ifKeyExists(g_emResolutStr) == true)
{
g_emResolut = (Resolution)(g_pSettings->readFromIniFile("HMI/resolution").toInt());
}
else
{
g_emResolut = resolution1006;
}
language = g_pSettings->readFromIniFile("HMI/language").toInt();
g_emDebugMode =(DebugMode)(g_pSettings->readFromIniFile("HMI/debugMode").toInt());//如果存在配置文件并且有这个key就读配置文件里的调试模式的值
connectMode = g_pSettings->readFromIniFile("HMI/connectMode").toInt();
g_emMacType = (MachineType)(g_pSettings->readFromIniFile("HMI/machineType").toInt());
g_emProductType = (ProductType)(g_pSettings->readFromIniFile("HMI/productType").toInt());
gatewayConnectMode = g_pSettings->readFromIniFile("IOT/gatewayConnectMode").toInt();
}
//自动定位冲孔机针杆数固定为6
if(g_emMacType == MACHINE_PUNCH_AUTOPOS)
{
g_pSettings->writeToIniFile("PunchNeedle/number",6);
for(int i = 0 ; i < 6; i++)
{
QString str = "PunchNeedle/"+QString::number(i+1)+"_coloridx";
if(g_pSettings->ifKeyExists(str) == false)
{
g_pSettings->writeToIniFile(str,i);
}
}
}
//自动获取屏幕分辨率
#ifdef Q_OS_LINUX
QDesktopWidget * desktop = QApplication::desktop();
QRect screenRect = desktop->screenGeometry();
int width = screenRect.width();
int height = screenRect.height();
if(width == 1920 && height == 1080)
{
g_emResolut = resolution1910;
}
else if(width == 1024 && height == 600)
{
g_emResolut = resolution1006;
}
#endif
//多语言翻译
QString languageFile = switchLanguage(language,apppath);
QTranslator translator;
translator.load(languageFile);
app.installTranslator(&translator);
//资源文件
QString resourcefile = apppath.path() + apppath.separator() + "nxcui.rcc";
QResource::registerResource(resourcefile);
//启动画面
QSplashScreen *splash = new QSplashScreen;
if(g_emResolut == resolution1006)
{
splash->setPixmap(QPixmap(":/images/startlogo1006.png"));
}
else if(g_emResolut == resolution1910)
{
splash->setPixmap(QPixmap(":/images/startlogo1910.png"));
}
QFont font;
font.setPixelSize(20);
splash->setFont(font);
splash->move(0,0);
int waterMark = g_pSettings->readFromIniFile("HMI/waterMark").toInt();//是否带水印
if(waterMark==1)//带logo
{
splash->show();//显示启动画面
}
//检测界面解密的配置文件是否存在
//界面解密配置文件路径
s16 HMIDecrypt = 1;//1代表已授权解密过0代表未授权解密过
QString HMIDecryptConfigfile;
HMIDecryptConfigfile = apppath.path() + apppath.separator() + "HMIDecryptConfig.ini";
QFile HMIDecryptIniFile(HMIDecryptConfigfile);
if(!HMIDecryptIniFile.exists())//不存在界面解密的文件(已发机器),可与主板建立连接
{
HMIDecrypt = 1;
}
else//存在界面解密的文件,判断是否解密过来决定是否与主板建立连接
{
QSettings iniSetting(HMIDecryptConfigfile, QSettings::IniFormat);
HMIDecrypt = iniSetting.value("HMIDecrypt/ifdecrypt").toInt();
}
//下位机通讯
g_pMachine = NULL;
QString mcConfigfile;
mcConfigfile = apppath.path() + apppath.separator() + "mcconfig.ini";
g_pMachine = new Machine(); //创建下位机通讯
g_pMachine->initConnectMode(connectMode);//初始化通讯连接方式
g_pMachine->setComportName("");
g_pMachine->setConfigFileName(mcConfigfile);//配置文件
// if(HMIDecrypt != 0)
// {
g_pMachine->startCommunication();//启动线程
// }
//物联网客户端与mqtt网关服务器建立连接
g_pLotMachine = NULL;
QString lotConfigfile;
lotConfigfile = apppath.path() + apppath.separator() + "lotconfig.ini";
g_pLotMachine = new LotMachine(); //创建网关通讯
g_pLotMachine->initConnectMode(gatewayConnectMode);//初始化通讯连接方式
g_pLotMachine->setComportName("");
g_pLotMachine->setConfigFileName(lotConfigfile);
g_pLotMachine->startCommunication();
g_pCurEmbData = new EmbData();
g_pCurEmbData->initColor(g_pSettings->getColorRgbArray().size(),(QRgb*)g_pSettings->getColorRgbArray().data());
//设置颜色列表(针杆色序表)
for(int i = 0; i < TOTAL_NEEDLE_NUM; i++)
{
QString idxStr;
idxStr.clear();
//绣花针杆
if(i >= 0 && i <= EMB_NEEDLE_NUM - 1)
{
idxStr = "EmbNeedle/"+QString::number(i+1)+"_coloridx";
}
//冲孔针杆
else if(i >= (EMB_NEEDLE_NUM - 1) && i < (EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM))
{
int punchIdx = i + 1 - EMB_NEEDLE_NUM;
idxStr = "PunchNeedle/"+QString::number(punchIdx)+"_coloridx";
}
//缝纫针杆
else if(i == EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM)
{
int sewIdx = i + 1 - EMB_NEEDLE_NUM - PUNCH_NEEDLE_NUM;
idxStr = "SewNeedle/"+QString::number(sewIdx)+"_coloridx";
}
if(g_pSettings->ifKeyExists(idxStr) == true)
{
int idx = g_pSettings->readFromIniFile(idxStr).toInt();
g_pCurEmbData->setNeedleColorTable(i,idx);
}
else
{
g_pCurEmbData->setNeedleColorTable(i,i);
}
}
Qt::Alignment alignment = Qt::AlignHCenter|Qt::AlignBottom; //设置一个格式
QString str = QCoreApplication::translate("GLOBAL", "Init windows...");//初始化窗体...
splash->showMessage(str,alignment,Qt::red);
if(g_emResolut == resolution1006)
{
fontBold_1 = fontBold_5;
fontNormal_1 = fontNormal_8;//1024x600常规字体和显示花样字体一样大,都是fontNormal_8(正常)
fontNormal_6 = fontNormal_8;
fontNormal_10 = fontNormal_11;//绣花机断线机头字体
fontNormal_9 = fontNormal_9;//绗绣机断线机头字体
fontNormal_12 = fontNormal_12;//1024x600分辨率 花样选择界面花样名称
fontNormal_3 = fontNormal_8;//调试信息
fontNormal_4 = fontNormal_12;
}
else
{
fontBold_1 = fontBold_1;
fontNormal_1 = fontNormal_1;
fontNormal_6 = fontNormal_1; //1920x1080分辨率 的所有字体
fontNormal_10 = fontNormal_10;
fontNormal_9 = fontNormal_11;//绗绣机断线机头字体
fontNormal_12 = fontNormal_1;
fontNormal_3 = fontNormal_3;//调试信息
fontNormal_4 = fontNormal_4;
}
#ifdef Q_OS_WIN
//win下防止多个程序打开
if(shared_memory.create(1)) //创建1byte的共享内存段
{
setMcMainWindow(app,splash,HMIDecrypt,connectMode);
}
#endif
#ifdef Q_OS_LINUX
setMcMainWindow(app,splash,HMIDecrypt,connectMode);
#endif
delete splash;
delete g_pSettings;
delete g_pMachine;
delete g_pCurEmbData;
return 0;
}

249
main.h Normal file
View File

@ -0,0 +1,249 @@
#ifndef MAIN_H
#define MAIN_H
#include <QImage>
#include <QDesktopWidget>
#include "settings/settings.h"
#include "machine/machine.h"
#include "machine/lotmachine.h"
#include "datafile/embdata.h"
#define VER_CODE_Y 21
#define VER_CODE_M 11
#define VER_CODE_D 12
#define HEADNUMBERIDX 0 //机头个数参数索引
#define STYPE1 0x00000001
#define STYPE2 0x00000002
#define STYPE3 0x00000004
#define STYPE4 0x00000008
#define STYPE5 0x00000010
#define STYPE6 0x00000020
#define STYPE7 0x00000040
#define STYPE8 0x00000080
#define STYPE9 0x00000100
#define STYPE10 0x00000200
#define NAMEMAXLENGTH 8 // 字体最大长度
#define LINUXUSBPATH "/media/usb0/"
#define PATTERNPATH "datafiles"
#define IMAGE_TYPE (QImage::Format_ARGB32)
#define PEN_WIDTH 1
//透明背景色,白色前景色
#define LABELWHITESTYLE "background-color: rgba(245, 245, 245, 0);color: rgb(255, 255, 255);"
//透明背景色,白色前景色,带边框(色序设定针杆按钮)
#define BUTTONWHITESTYLE "QPushButton{outline: none;border:1px solid rgb(235,235,235);border-style:inset;border-radius:5px;color: rgb(255, 255, 255);} QPushButton:pressed{background-color: rgba(105, 105, 127);}"
//白色背景色,黑色前景色,带边框(列表界面按钮-动框角度调节)
#define BUTTONSHEETSTYLE "QPushButton{background-color: rgba(245, 245, 245);border:0.5px solid rgb(120,120,120);color: rgb(10, 10, 10);} QPushButton:pressed{background-color: rgba(199, 226, 255);}"
//透明背景色,灰色前景色
#define LABELGREYSTYLE "background-color: rgba(245, 245, 245, 0);color: rgb(78, 78, 78);"
//透明背景色,黑色前景色
#define LABELBLACKSTYLE "background-color: rgba(245, 245, 245, 0);color: rgb(0, 0, 0);"
//透明背景色,红色前景色
#define LABELREDSTYLE "background-color: rgba(245, 245, 245, 0);color: rgb(220, 0, 0);"
//透明背景色,蓝色前景色 字体很大
#define LABELREDSTYLEBROKENBLUE "background-color: rgba(245, 245, 245, 0);color: rgb(57, 95, 140);"
//透明背景色,深蓝色前景色
#define LABELNAVYBLUESTYLE "background-color: rgba(245, 245, 245, 0);color: rgb(57, 95, 140);"
//透明色、无焦点、无边框
#define TRANSPARENTSTYLE "outline:none;border:0px;background-color: rgba(255, 255, 255, 0);"
//进度条样式表
#define PROGRESSBARSTYLE "QProgressBar{border-radius: 5px;border:0px;}QProgressBar::chunk{background-color: rgb(255, 255, 255);}"
#define PROGRESSBARSTYLE2 "QProgressBar::chunk {background-color: #3a8fbc;border-radius: 5px;}QProgressBar {border:1px solid #d4d4d4;background-color: #bab0b6;border-radius: 5px;}QProgressBar {color: #efefef}"
#ifdef Q_OS_WIN
#define FONTSIZE1_1 18 //1920x1080分辨率 常规字体字体(正常)
#define FONTSIZE1_2 26 //速度显示
#define FONTSIZE1_3 16 //1920x1080分辨率色序设定界面
#define FONTSIZE1_4 11 //1024x600分辨率 常规字体字体(加大)
#define FONTSIZE1_6 18 //1920x1080分辨率 显示花样信息的字体(正常)
#define FONTSIZE1_7 10 //1024x600分辨率 显示花样信息的字体(加大)
#define FONTSIZE1_8 9 //1024x600分辨率 常规字体字体(正常)
#define FONTSIZE1_9 20 //1920x1080分辨率 的字体(加大)
#define FONTSIZE1_10 200 //1920x1080分辨率 机头断线字体34
#define FONTSIZE1_11 100 //1024x600分辨率 机头断线字体
#define FONTSIZE1_12 8 //1024x600分辨率 花样选择界面花样名称 1920x1080的字体大小不变
#endif
#ifdef Q_OS_LINUX
#define FONTSIZE1_1 14
#define FONTSIZE1_2 20
#define FONTSIZE1_3 12
#define FONTSIZE1_4 17 //1024x600分辨率 常规字体字体(加大)
#define FONTSIZE1_5 15
#define FONTSIZE1_6 16
#define FONTSIZE1_7 13 //LINUX 1024x600分辨率 显示花样信息的字体
#define FONTSIZE1_8 11 //1024x600分辨率 常规字体字体(正常)
#define FONTSIZE1_9 22 //1920x1080分辨率 的字体(加大)
#define FONTSIZE1_10 220 //1920x1080分辨率 机头断线字体
#define FONTSIZE1_11 120 //1024x600分辨率 机头断线字体
#define FONTSIZE1_12 10 //1024x600分辨率 花样选择界面花样名称
#endif
#define BORDER_RADIUS1 "10"
#define BORDER_RADIUS2 "5"
#define FONTTYPE "Microsoft YaHei"
#define FONTBOLD QFont::Bold //加粗
#define FONTNORMAL QFont::Normal //正常
#define LINUX_APPNAME "OPRT_CP"
#define WIN_APPNAME "oprt_up.exe"
#define APPNAME "XPLATFORM"
#define PASSWORD_ONE "290810" //一级密码
#define PASSWORD_TWO "262574" //二级密码
#define PASSWORD_THREE "951103" //三级密码
#define PASSWORD_RESETPARA "123456" //重置参数密码
#define HMI_UPDATA 1 // 界面升级
#define MC_UPDATA 2 // 主控升级
#define PARA_IMPORT 3 // 参数导入
#define PARA_EXPORT 4 // 参数导出
#define EXBOARD_UPDATA 5 // 外围板升级
#define PRODUCTSTATIS 6 // 生产统计
#define BOARD_LIST 7 // 显示板卡列表
#define WKPARA_IMPORT 8 // 工作参数导入
#define FRAMEPARA_IMPORT 9 // 动框参数导入
#define FRAMEPARA_EXPORT 10 // 动框参数导出
#define JOURNAL 11 // 日志文件
enum ConnectState
{
NoConnect = 1, //未连接
Connectting = 2, //连接中
Connected = 3 //已连接
};
enum DebugMode
{
nodebugMode = 0, //不是调试模式
debugMode = 1 //是调试模式
};
//用户权限
enum UserRoles
{
operate = 0,
repair = 1,
factory = 2,
root = 3,
resetpara = 4
};
//分辨率
enum Resolution
{
resolution1910 = 0, //1920x1080
resolution1006 = 1 //1024x600
};
//语言
enum Language
{
chinese = 0, //中文
english = 1 //英文
};
//机器类型
enum MachineType
{
MACHINE_PUNCH = 0, //冲孔机
MACHINE_PUNCH_SEW, //冲缝机
MACHINE_PUNCH_AUTOPOS, //定制冲孔机(自动定位冲孔机)(垫板式冲孔机)单头 双头 四头 旋转
MACHINE_ADHESIVE, //压胶机
MACHINE_PUNCH_SEW_EMB, //冲缝绣
MACHINE_TEMPLATE_SEW //模板缝纫机
};
//产品类型
enum ProductType
{
//冲孔机
//单头
PRODUCT_PUNCH_SINGLEHEAD= 0,//单头
PRODUCT_PUNCH_TWOHEAD , //双头
PRODUCT_PUNCH_FOURHEAD, //四头
PRODUCT_PUNCH_ROTARY, //旋转冲
//冲缝机
PRODUCT_PUNCHSEW_SINGLEHEAD, //单头
PRODUCT_PUNCHSEW_TWOHEAD, //双头
PRODUCT_NULL //无产品类型
};
#ifdef _IN_MAIN_CPP
LotMachine * g_pLotMachine;//物联网Machine,作为客户端发送数据给mqtt网关
Machine * g_pMachine;
EmbData * g_pCurEmbData = NULL;
UserRoles g_emUser = operate;
QString g_passwordOne = PASSWORD_ONE;
Settings * g_pSettings = NULL;
Resolution g_emResolut = resolution1910;
MachineType g_emMacType = MACHINE_PUNCH;
ProductType g_emProductType = PRODUCT_PUNCH_SINGLEHEAD;
DebugMode g_emDebugMode = nodebugMode;
QFont fontNormal_1(FONTTYPE,FONTSIZE1_1,FONTNORMAL);//微软雅黑常规
QFont fontNormal_2(FONTTYPE,FONTSIZE1_2,FONTNORMAL);//微软雅黑常规
QFont fontNormal_3(FONTTYPE,FONTSIZE1_3,FONTNORMAL);//微软雅黑常规
QFont fontNormal_4(FONTTYPE,FONTSIZE1_4,FONTNORMAL);//微软雅黑常规
QFont fontNormal_6(FONTTYPE,FONTSIZE1_6,FONTNORMAL);//微软雅黑常规
QFont fontNormal_7(FONTTYPE,FONTSIZE1_7,FONTNORMAL);//微软雅黑常规
QFont fontNormal_8(FONTTYPE,FONTSIZE1_8,FONTNORMAL);//微软雅黑常规
QFont fontNormal_9(FONTTYPE,FONTSIZE1_9,FONTNORMAL);//微软雅黑常规
QFont fontNormal_10(FONTTYPE,FONTSIZE1_10,FONTNORMAL);//微软雅黑常规
QFont fontNormal_11(FONTTYPE,FONTSIZE1_11,FONTNORMAL);//微软雅黑常规
QFont fontNormal_12(FONTTYPE,FONTSIZE1_12,FONTNORMAL);//微软雅黑常规
QFont fontBold_1(FONTTYPE,FONTSIZE1_2,FONTBOLD);//微软雅黑26加粗
QFont fontBold_2(FONTTYPE,FONTSIZE1_3,FONTBOLD);//微软雅黑16加粗
QFont fontBold_3(FONTTYPE,FONTSIZE1_1,FONTBOLD);//微软雅黑20加粗
QFont fontBold_4(FONTTYPE,FONTSIZE1_4,FONTBOLD);//微软雅黑14加粗
QFont fontBold_5(FONTTYPE,FONTSIZE1_8,FONTBOLD);//微软雅黑14加粗
#else
extern Machine * g_pMachine;
extern LotMachine * g_pLotMachine;//物联网Machine,作为客户端发送数据给mqtt网关
extern EmbData * g_pCurEmbData;//绣作数据
extern UserRoles g_emUser;
extern QString g_passwordOne;//一级密码
extern Settings * g_pSettings;
extern Resolution g_emResolut;
extern MachineType g_emMacType;
extern ProductType g_emProductType;
extern DebugMode g_emDebugMode;
//1920x1080字体
extern QFont fontNormal_1;//微软雅黑常规14
extern QFont fontNormal_2;//微软雅黑常规22
extern QFont fontNormal_3;//微软雅黑常规12
extern QFont fontNormal_6;//微软雅黑常规16
extern QFont fontNormal_9;//微软雅黑常规16
extern QFont fontNormal_10;//微软雅黑常规35
extern QFont fontNormal_11;//微软雅黑常规28
extern QFont fontNormal_12;//微软雅黑常规28
extern QFont fontBold_1;//微软雅黑26加粗
extern QFont fontBold_2;//微软雅黑18加粗
extern QFont fontBold_3;//微软雅黑20加粗
///1024x600字体
extern QFont fontNormal_4;//微软雅黑常规9
extern QFont fontNormal_7;//微软雅黑常规16
extern QFont fontNormal_8;//微软雅黑常规16
extern QFont fontBold_4;//微软雅黑14加粗
extern QFont fontBold_5;//微软雅黑8加粗
#endif
#endif // MAIN_H

110
mctype/machinetypefun.cpp Normal file
View File

@ -0,0 +1,110 @@
#include "machinetypefun.h"
MachineTypeFun::MachineTypeFun(QObject *parent) : QObject(parent)
{
m_allParasList.clear();
m_allOutCtrlList.clear();
m_allShortCutList.clear();
m_allAssistList.clear();
m_allPatternSetList.clear();
m_allParaSetList.clear();
m_allSensorList.clear();
m_allErrorCodeAndStateList.clear();
m_allDebugFunList.clear();
initAllSensorList();
}
MachineTypeFun::~MachineTypeFun()
{
m_allParasList.clear();
m_allOutCtrlList.clear();
m_allShortCutList.clear();
m_allAssistList.clear();
m_allPatternSetList.clear();
m_allParaSetList.clear();
m_allSensorList.clear();
m_allErrorCodeAndStateList.clear();
m_allDebugFunList.clear();
}
//获取传感器列表
QList<SensorItem> MachineTypeFun::getSensorList()
{
return m_allSensorList;
}
//获取错误代码列表
QList<ErrorCodeStateItem> MachineTypeFun::getErrorCodeAndStateList()
{
return m_allErrorCodeAndStateList;
}
//获取调试功能
QList<DebugItem> MachineTypeFun::getDebugFunList()
{
return m_allDebugFunList;
}
void MachineTypeFun::initAllSensorList()
{
//所有传感器列表,字符为空
m_allSensorList.clear();
int addr, byteaddr, bitaddr;
SensorItem item;
for (addr = 0; addr < MAX_SENSOR_NUM; addr++)
{
byteaddr = addr / 8;
bitaddr = addr % 8; //(0-7)
item.setItemValue(byteaddr, bitaddr, "");
m_allSensorList.append(item);
}
}
QList<ParaSetItem> MachineTypeFun::getParaSetListByFilter()
{
return m_allParaSetList;
}
QList<PatternSetItem> MachineTypeFun::getPatternSetListByFilter()
{
return m_allPatternSetList;
}
QList<AssistItem> MachineTypeFun::getAssistListByFilter()
{
return m_allAssistList;
}
QList<ShortCutItem> MachineTypeFun::getShortCutListByFilter()
{
return m_allShortCutList;
}
QList<OutCtrlItem> MachineTypeFun::getOutCtrlListByFilter()
{
return m_allOutCtrlList;
}
QList<ParaItem> MachineTypeFun::getParasListByMcSel()
{
QList <ParaItem> paralist;
int size = m_allParasList.size();
for (int i = 0; i < size; i++)
{
const ParaItem & item = m_allParasList.at(i);
paralist.append(item);
#if(0)
if ((item.mcenSel & mcensel) != 0)
{
paralist.append(item);
}
#endif
}
qStableSort(paralist.begin(), paralist.end(), comparePriority);
return paralist;
}

45
mctype/machinetypefun.h Normal file
View File

@ -0,0 +1,45 @@
#ifndef MACHINETYPEFUN_H
#define MACHINETYPEFUN_H
#include <QObject>
#include <QTextCodec>
#include "items/itemsmanage.h"
#include "main.h"
class MachineTypeFun : public QObject
{
Q_OBJECT
public:
explicit MachineTypeFun(QObject *parent = 0);
public:
virtual ~MachineTypeFun();
public:
virtual QList <ParaItem> getParasListByMcSel();
virtual QList <OutCtrlItem> getOutCtrlListByFilter();
virtual QList <ShortCutItem> getShortCutListByFilter();
virtual QList <AssistItem> getAssistListByFilter();
virtual QList <PatternSetItem> getPatternSetListByFilter();
virtual QList <ParaSetItem> getParaSetListByFilter();
virtual QList <SensorItem> getSensorList();
virtual QList <ErrorCodeStateItem> getErrorCodeAndStateList();
virtual QList <DebugItem> getDebugFunList();
public:
QList <ParaItem> m_allParasList;
QList <OutCtrlItem> m_allOutCtrlList;
QList <ShortCutItem> m_allShortCutList;
QList <AssistItem> m_allAssistList;
QList <PatternSetItem> m_allPatternSetList;
QList <ParaSetItem> m_allParaSetList;
QList <SensorItem> m_allSensorList;
QList <ErrorCodeStateItem> m_allErrorCodeAndStateList;
QList <DebugItem> m_allDebugFunList;
private:
void initAllSensorList();//初始化全部传感器列表
};
#endif // MACHINETYPEFUN_H

File diff suppressed because it is too large Load Diff

273
mctype/mainwidgetfunction.h Normal file
View File

@ -0,0 +1,273 @@
#ifndef MAINWIDGETFUNCTION_H
#define MAINWIDGETFUNCTION_H
#include <QObject>
#include <QWidget>
#include <QApplication>
#include <stdio.h>
#include <QDateTime>
#include <QProcess>
#include "main.h"
#include "machine/error.h"
#include "sharedviews/promptdialog.h"
#include "sharedviews/passworddialog.h"
#include "sharedviews/systemmanagedialog.h"
#include "sharedviews/brokenlinedialog.h"
#include "datafile/datafiledst.h"
#include "datafile/datafiledsr.h"
#include "settings/lotsettings.h"
#include "items/errorcodestateitem.h"
#include "Lot/csvcode.h"
#include "items/paraitem.h"
#ifdef Q_OS_WIN
#include <windows.h>
#endif
//是否打开物联功能
#define IFOPENGATEWAY 1
#define DATA_DS8 1
#define DATA_DS16 2
#define DATA_FORMATE DATA_DS16
#define COLUMN_CODE 0 //信息代码(第一列)
#define COLUMN_INFO 1 //映射信息(第二列)
#define COLUMN_SCORE 2 //分值(第三列)
#define COLUMN_PRESSNUM 3 //是否被点击过(第四列)
#define WIFIINIPATH "/etc/iot_cfg/mcgs_box_conf.ini"
//机头断线次数结构体
struct HeadBreakLine
{
//32个机头每个机头的断线次数
s32 headBreakLineNum[32];
//xcy 0314 机头针位断线
s32 headNeedleBreakLine[32][15];
};
struct HMIFileHead
{
int fileNum;
};
struct HMIItemFileHead
{
char filePath[64];
char fileName[64];
int dataCheck;
int fileSize;
};
class MainWidgetFunction : public QObject
{
Q_OBJECT
public:
explicit MainWidgetFunction(QObject *parent = 0);
~MainWidgetFunction();
private:
PromptDialog *m_pPromptDlg;
SystemManageDialog *m_pSystemManageDlg;
BrokenLineDialog *m_pBrokenLineDialog;
MCStatus m_mcStatus;
HeadBreakLine m_headBreakLine;
int m_curFileID;
int m_beginX;
int m_beginY;
QString m_filePath;
QString m_fileName;
McLotData m_mcLotData;//下位机物联数据
HMILotData m_HMILotData;//上位机物联数据
int m_sensorBitmapNum;//传感器位图个数
QList<ErrorCodeStateItem> m_errorCodeAndStateItemList;//错误代码和状态列表
QTimer * m_pTipsTimer; //4小时定时器提示用户使用时长不足5天
//QTimer timer; //测试物联网用
QTimer *m_pLotTimer; //物联网定时器
int m_getScore;//安装进度调试得分
int m_totalScore;//总分值
QStringList m_csvFileStrList;
private:
void initialize();//初始化
void initializeLotInfo();//初始化物联网所需要的机器信息
void initializeLotData();//初始化物联网数据
void systemUpgrade(int type, u8 protocol = 0, u8 nodeid = 0, u8 nodeType = 0);
s16 refreshWifiList(QStringList &wifiStrList,s16 scan = 0);//刷新wifi列表
QString getIpSegment(bool bl);//获取已连接wifi分配的IP
void sendDs16PatternData(int type = FILE_TYPE_DAT);//发送ds16花样数据
void convertDs16ToDs8AndSend(QString filePath,int type = FILE_TYPE_DAT);//将ds16数据转换为ds8数据并发送
void addProductStatisInfo(int patternBreakLineNum);//添加生产统计信息
void addJournalInfoError();//添加错误日志信息
void addJournalInfoBreakage();//添加断线日志信息
QString getCompileDateTime();
QString compositionJson(QString key,QString value);//组成json键值对
HMILotData getHMILotData();//获取界面物联数据
void sendDataToGateway(s16 code,s16 type = 0);//发送数据到物联网
public:
void setErrorCodeAndStateList(QList<ErrorCodeStateItem> list);//设置错误代码和状态的列表
void setShutDownTime();//上电计算关机时间并发送给主控
void setMcStates(MCStatus mcStatus);//设置机器状态
QString getVersionStr();
QString detectUsb();//优盘检测
s16 detectWifiConnect();
void writePonitToFile(QString filePath,int x,int y,int flag = 0);//将起始点或定位点写回到文件中
void funImportParameter(QString tStyle);//参数导入
void funImportWkParameter(QString tStyle);//工作参数导入
void funExportParameter();//参数导出
void funExportFrameParameter();//动框参数导出
void funMCUpgrade(QString tStyle);//主控升级
void funHMIUpgrade(QString tStyle);//界面升级
void funWIFI(QString tStyle);//WIFI管理
void funAllToZero();//全部归零
void funSpindleJog();//主轴点动
void funPunchMsSeverOn();//冲孔主轴使能
void funPunchMsSeverOff();//冲孔主轴失能
void funPunchMsRun();//冲孔主轴研车
void funSewMsRun();//缝纫主轴研车
void funEmbMsRun();//平绣主轴研车
void funPunchSpindleJog();//冲孔主轴点动
void funSewSpindleJog();//缝纫主轴点动
void funEmbSpindleJog();//平绣主轴点动
void funToHookPosition();//缝纫主轴去勾线位
void funEmbToHookPosition();//平绣主轴去勾线位
void funRotateProofread();//缝纫旋转校对
void funSewheadUpDown();//缝纫机头升降
void switchMachineHead(int nNum);//切换机头
void funNeedleContrast(int step);//针梭校对
void funBackShuttlePos();//回换梭位
void funSewRotate(int flag); //缝纫旋转+-
void funBackWorkPoint();//回工作点
void funBackAnchorPoint();//回定位点
void funBackThreadPoint();//回穿线点
void funBackToOrigin();//回原点
void funBackCenterPoint();//回中心点
void funFirstHeadSetStartPoint(QString filePath);//主机头设置起始点(冲缝机时主机头为缝纫机头)
void funFirstHeadSetAnchorPoint(QString filePath);//主机头设置定位点(冲缝机时主机头为缝纫机头)
void funSecHeadSetStartPoint(QString filePath);//次机头设置起始点(冲缝机时次机头为冲孔机头)
void funSecHeadSetAnchorPoint(QString filePath);//次机头设置定位点(冲缝机时次机头为冲孔机头)
void funThrHeadSetStartPoint(QString filePath);//三机头设置起始点(冲绣缝时三机头为平绣机头)
void funThrHeadSetAnchorPoint(QString filePath);//三机头设置定位点(冲绣缝时三机头为平绣机头)
void funResetStartPoint(QString filePath,DataFilePos pos);//边框检查超限后重新自动设置起始点
void funSetStartPoint(QString filePath, s32 x, s32 y);//参数设置起始点
void funSetAnchorPoint(QString filePath, s32 x, s32 y);//参数设置定位点
void funBackStartPoint();//回起始点
void funBorderCheck();//边框检查
void funSewHeadCutLine(int nNum);//缝纫机头剪线
void funEmbHeadCutLine();//平绣机头剪线
void funManualTrimUp();//手动剪线-剪上线
void funManualTrimDn();//手动剪线-剪下线
void funCutterOpenAndClose();//剪刀开合
void funPunchRodZero();//冲孔换杆归零
void funPunchManualChangeColor();//手动换色
void funEmbManualChangeColor();//绣花手动换色
void funSinglePunch();//单次冲孔
void funWorkPause();//工作暂停
void funSimulateFrame();//空走边框
void funProcessReset();//流程复位
void funSetOffsetPoint();//设置偏移点
void funBackOffsetPoint();//回偏移点
void funPunchRotToZero();//冲孔旋转去零位
void funGotoZeroPos();//框架归零
void funGotoGorner(int nNum);//回角点 1、右上2、右下3、左上4、左下
void funSetWorkRange();//定工作范围
void funTestADC();//测试电位器值
void funPunchMsDown();//冲头停下位
void funDrawOutline();//画轮廓线
void funAutoSetStartPoint(QString filePath);//自动设置起始点-只有垫板冲孔机(自动定位冲孔机)有这个功能
void funContinuousOilSupply();//连续供油
void funManualOil(int nNum);//手动加油
void sendPatternHead(QString filePath);//发送花样文件头
void sendPatternData(QString filePath,int type = FILE_TYPE_DAT);//发送花样数据
void funFaceDetect();//面线检测
void funExitRoot();//退出登录
void funGetMCVersionInfo();//获取主控主板版本信息
void funProductStatistics(QString tStyle,QString filePath,int patternBreakLineNum);//生产统计
void funJournalError(QString tStyle);//错误日志
void funSoftwareAuthor();//软件授权
void funShutDown();//win下关闭计算机
int funErrorPrompt(u32 errcode,QString info);//错误信息提示
void funSetPromptDlgVisibleFalse();//错误信息提示窗体隐藏
void funBottomLineCountReset();//底线计数复位
void funBottomCountClear();//计数清零(罗莱)
void funResetAll();//整机全部复位
void funMotorZeroing();//电机归零
void funStationGluing(int idx);//工位涂胶
void funHeadUpDown(); //机头升降
void funToStationApos(int idx);//回工位起始点
void funToWaittingPos();//回等料点
void funToRemoveGluePos();//回排胶点
void funRemoveGlueOnce();//排一次胶
void funAdjustGlueHeight();//校准胶管高度
void funManualOrAutoSwitch(s16 val = 0);//手自动工作状态切换 0:手动 1:自动
void getPatternHeadConfig(QString path,DataFileHead & head);
void setPatternHeadConfig(QString path,DataFileHead head);
void deleteDir(QString path);//删除文件夹
public:
inline int getBeginX(){return m_beginX;}
inline int getBeginY(){return m_beginY;}
private slots:
void slotMCInfoChange();//机器信息改变
void slotSendLotData();//发送物联数据
void slotRunLotDataAction(QString str);//执行网关数据动作
//void slotSendJsonToMqtt();//当界面与网关建立连接时需要向网关发送固定的键值对
void slotTransProgress(u8 fileType, int send, int total); // 发送文件进度条
void slotClearProductStatis();//清空产量统计
void slotCsvExport(int logType);//导出csv文件
void slotClearJournal();//清空文件日志
void slotRefreshWifiList();//刷新wifi列表
void onTipsTimer();//4小时定时器
void slotSetDynamicIP(QString ssid);//设置动态IP
void slotSetStaticIP(QString ssid,QString psd,QString dnip);//设置静态IP
void slotDebugMode();//界面调试模式
void slotParaReadPrompt(s16 type,s16 value);
signals:
void siSetButtonUserLogo(int level);
void siClearPatternBreakLineNum();
void siDebugState();
void siCloseRootPara();
void siClearPattern();
void siClearPatternFcg();
//void siReceiveLotDat(); //测试物联网用
void siAfterDeleteFileid();//xcy 0314 删掉影响fileid的数据后
void siWifiState(bool bl);//wifi连接状态
public slots:
void slotUserLogin(s16 user);//用户登录
void slotHMIDecrypt(QString id);//界面解密
void slotStrokeCorrection();//行程矫正
void slotAutoSetSoftLimit();//自动定软限位
void slotFrameParaImport();//动框参数导入
void slotFrameParaExport();//动框参数导出
void slotExitApp();//超级用户退出程序
void slotVerRecovery();//超级用户下版本恢复
void slotDeleteIni();//删除执行目录下的config.ini
void slotImportCSV();//导入csv文件
void slotDeleteCSV();//删除csv文件
void slotResetCSV();//重置安装调试进度
void slotPatternClear();//超级用户下花样总清
void slotPatternFcgClear();//超级用户花样fcg文件删除
void slotPatternFcgClearFileid();//清除影响fileid的数据
void slotCalMachineProgress(s16 csvCode,s16 type = 0);//计算安装调试进度
void slotJournalError();//错误日志
void slotJournalBreakage();//断线日志
void slotSpindleTest();
//以下为测试记录断线次数精准到针位
//void testBreakLineNeedle();
public:
//QTimer *m_testNeedle;
};
#endif // MAINWIDGETFUNCTION_H

View File

@ -0,0 +1,963 @@
#include "adhesivemachine.h"
//压胶机
AdhesiveMachine::AdhesiveMachine()
{
//添加各种参数到列表中
initRootParasList();
initRootHMIConfigurationList(m_allParasList);//超级用户界面配置
initRootIOTConfigurationList(m_allParasList); //超级用户物联网配置
initPatternsParasList();
initSoftwareParasList(m_allParasList);
initTimeParasList(m_allParasList);
initMcParasList();
//初始化控制动作列表
initOutCtrlList();
//初始化快捷功能列表
initShortCutList();
//初始化辅助功能列表
initAssistList();
//初始化花样设置功能列表
initPatternSetList();
//参数分类功能
initParaSetList();
//初始化传感器列表
initSensorList();
//初始化错误代码和状态列表
initErrorCodeAndStateList();
}
AdhesiveMachine::~AdhesiveMachine()
{
}
//超级用户参数(包括机器参数、工作参数)
void AdhesiveMachine::initRootParasList()
{
//超级用户参数---------------------------
//超级用户参数-界面配置;单位:无
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_HMICONFIGURATION, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("HMI Configuration"),//界面配置
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0000 , factory));
//超级用户参数-界面进入调试模式;单位:无
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_DEBUGMODE, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Interface debug mode"),//界面进入调试模式
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001 , root));
//超级用户参数-删除config.ini配置文件单位
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_DELETEINI, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Delete configure file"),//删除配置文件
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001 , root));
//超级用户参数-重置花样配置-删除花样fcg文件影响fileid的数据;
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_CLEARPATTERNFCG_FILEID, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Delete pattern configuration"),//删除花样配置
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001, factory));
//超级用户参数-导入csv文件单位
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_IMPORTCSV, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Import CSV file"),//导入csv文件
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001 , factory));
//超级用户参数-删除csv文件单位
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_DELETECSV, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Delete CSV file"),//删除csv文件
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001 , factory));
//超级用户参数-重置安装调试进度;单位:无
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_RESETCSV, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Reset CSV file"),//重置安装调试进度
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001 , factory));
//超级用户参数-机器参数;单位:无
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_MACHINEPARA, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Machine parameters"),//机器参数
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0002, factory));
//超级用户参数-工作参数;单位:无
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_WORKPARA, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Work parameters"),//工作参数
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0003, factory));
//超级用户参数-物联网配置;
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_IOTCONFIGURATION, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("InternetofThings configuration"),//物联网配置
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x000D, factory));
}
//花样参数
void AdhesiveMachine::initPatternsParasList()
{
QTextCodec *cod = QTextCodec::codecForLocale();
//花样参数-花样设置参数-翻转式样;单位:无 范围0-7默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_ROTATESTYLE, 0, 0, PARA_VALUE_TYPE_LIST,
tr("Flip style"),//翻转式样
0, 0, 7, 0, 0, tr(""), tr(""),
tr("normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7"),
0, 0, 0x0001, operate));
//花样参数-花样设置参数-水平翻转样式;单位:无 范围0-1默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_HORIZONTALSTYLE, 0, 0, PARA_VALUE_TYPE_LIST,
tr("Horizontal flip style"),//水平翻转式样
0, 0, 1, 0, 0, tr(""), tr(""),
tr("No:0;Yes:1"),
0, 0, 0x0002, operate));
//花样参数-花样设置参数-垂直翻转式样;单位:无 范围0-1默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_VERTICALSTYLE, 0, 0, PARA_VALUE_TYPE_LIST,
tr("vertical flip style"),//垂直翻转式样
0, 0, 1, 0, 0, tr(""), tr(""),
tr("No:0;Yes:1"),
0, 0, 0x0002, operate));
//花样参数-花样设置参数-旋转角度;单位:° 范围0-90默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_ROTATEANGLE, 0, 0, PARA_VALUE_TYPE_INT,
tr("Rotation angle"),//旋转角度
0, 0, 90, 0, 0, cod->toUnicode("°"), tr(""),//度
tr(""), 0, 0,0x0003, operate));
//花样参数-花样设置参数-需要分割的针步长度单位mm范围3-20默认7
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_SPLITSTITCHLENGTH, 0, 0, PARA_VALUE_TYPE_INT,
tr("Length of the stitch that needs to be split"),//需要分割的针步长度
700, 300, 2000, 700, 2, tr("mm"), tr(""),//mm
tr(""), 0, 0,0x0003, operate));
//花样参数-花样设置参数-起始点x范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_STARTX, 0, 0, PARA_VALUE_TYPE_INT,
tr("startX"),//起始点x
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm
tr(""), 0, 0,0x0004, operate));
//花样参数-花样设置参数-起始点y范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_STARTY, 0, 0, PARA_VALUE_TYPE_INT,
tr("startY"),//起始点y
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm
tr(""), 0, 0,0x0004, operate));
//花样参数---------------------------
}
//机器参数
void AdhesiveMachine::initMcParasList()
{
// XY电机启停转速, 范围 1--5000单位mm/s默认 10
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
0, 0, 0, PARA_VALUE_TYPE_INT,
tr("XY motor start and stop speed"),
10, 1, 5000, 10, 0, tr("r/min"), tr(""),
tr(""), 0, 0, 0x0000, operate));
// XY电机归零转速, 范围 1--5000单位mm/s默认 20
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
1, 0, 0, PARA_VALUE_TYPE_INT,
tr("XY motor return to zero speed"),
20, 1, 5000, 20, 0, tr("r/min"), tr(""),
tr(""), 0, 0, 0x0001, operate));
// XY电机运转转速, 范围 1--5000单位mm/s默认 100
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
2, 0, 0, PARA_VALUE_TYPE_INT,
tr("XY motor running speed"),
100, 1, 5000, 100, 0, tr("r/min"), tr(""),
tr(""), 0, 0, 0x0002, operate));
// XY电机运转加速度, 范围 1--5000单位mm/ss默认 30
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
3, 0, 0, PARA_VALUE_TYPE_INT,
tr("XY motor operating acceleration"),
30, 1, 5000, 30, 0, tr("r/ss"), tr(""),
tr(""), 0, 0, 0x0003, operate));
// 升降启动速度,1--100 mm/s默认 30
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
4, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lifting start speed"),
30, 1, 100, 30, 0, tr("mm/s"), tr(""),
tr(""), 0, 0, 0x0004, operate));
// 升降归零速度,1--100 mm/s默认 30
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
5, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lifting and returning to zero speed"),
30, 1, 100, 30, 0, tr("mm/s"), tr(""),
tr(""), 0, 0, 0x0005, operate));
// 升降行走速度,1--1500
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
6, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lifting and walking speed"),
200, 1, 1500, 200, 0, tr("mm/s"), tr(""),
tr(""), 0, 0, 0x0006, operate));
// 升降行走加速度,1--10000 mm/s2默认 1000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
7, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lifting and walking acceleration"),
1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""),
tr(""), 0, 0, 0x0007, operate));
// 慢动速度,范围 1--5000单位mm/s默认 100
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
50, 0, 0, PARA_VALUE_TYPE_INT,
tr("Slow motion speed"),
100, 1, 5000, 100, 0, tr("r/min"), tr(""),
tr(""), 0, 0, 0x0032, operate));
// 工作速度,范围 1--5000单位mm/s默认 20
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
51, 0, 0, PARA_VALUE_TYPE_INT,
tr("Operating speed"),
20, 1, 5000, 20, 0, tr("r/min"), tr(""),
tr(""), 0, 0, 0x0033, operate));
// 工作加速度, 范围 1--5000单位mm/ss默认 30
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
52, 0, 0, PARA_VALUE_TYPE_INT,
tr("Working acceleration"),
30, 1, 5000, 30, 0, tr("r/ss"), tr(""),
tr(""), 0, 0, 0x0034, operate));
// 工作最高速度,范围 1--1000单位mm/s默认 200
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
53, 0, 0, PARA_VALUE_TYPE_INT,
tr("Maximum operating speed"),
200, 1, 1000, 200, 0, tr("mm"), tr(""),
tr(""), 0, 0, 0x0035, operate));
// 工作最小速度,范围 1--1000单位mm/s默认 200
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
54, 0, 0, PARA_VALUE_TYPE_INT,
tr("Minimum operating speed"),
200, 1, 1000, 200, 0, tr("mm"), tr(""),
tr(""), 0, 0, 0x0036, operate));
// X电机零位坐标范围-500000--5000000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
100, 0, 0, PARA_VALUE_TYPE_INT,
tr("Zero position coordinate of X motor"),// X电机零位坐标
0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0064, operate));
// Y电机零位坐标范围-500000--5000000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
101, 0, 0, PARA_VALUE_TYPE_INT,
tr("Zero position coordinate of Y motor"),// Y电机零位坐标
0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0065, operate));
// 升降电机零位坐标,范围-500000--5000000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
102, 0, 0, PARA_VALUE_TYPE_INT,
tr("Zero position coordinate of lifting motor"), // 升降电机零位坐标
0, -500000, 5000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0066, operate));
// X电机归零补偿范围-10000--10000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
103, 0, 0, PARA_VALUE_TYPE_INT,
tr("Zero compensation of X motor"), // X电机归零补偿
0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0067, operate));
// Y电机归零补偿范围-10000--10000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
104, 0, 0, PARA_VALUE_TYPE_INT,
tr("Y motor zeroing compensation"), // Y电机归零补偿
0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0068, operate));
// 升降电机归零补偿,范围-10000--10000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
105, 0, 0, PARA_VALUE_TYPE_INT,
tr("Zero compensation of lifting motor"), // 升降电机归零补偿
0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0069, operate));
// 偏移点X坐标范围-500000--5000000单位0.01mm默认200
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
106, 0, 0, PARA_VALUE_TYPE_INT,
tr("Offset point X coordinate"),
200, -500000, 5000000, 200, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x006A, operate));
// 偏移点Y坐标范围-500000--5000000单位0.01mm默认200
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
107, 0, 0, PARA_VALUE_TYPE_INT,
tr("Offset point Y coordinate"),
200, -500000, 5000000, 200, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x006B, operate));
// 校准点坐标X范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
108, 0, 0, PARA_VALUE_TYPE_INT,
tr("Calibration point coordinate X"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x006C, operate));
// 校准点坐标Y范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
109, 0, 0, PARA_VALUE_TYPE_INT,
tr("Calibration point coordinate Y"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x006C, operate));
// 校准传感器高度,范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
110, 0, 0, PARA_VALUE_TYPE_INT,
tr("Calibrate sensor height"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x006C, operate));
// 机头升降低位坐标,-500000--5000000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
150, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lower position coordinate of head lifting"),
0, -500000, 5000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0096, operate));
// 机头升降高位坐标,-500000--5000000单位0.01mm默认10000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
151, 0, 0, PARA_VALUE_TYPE_INT,
tr("Head lifting high position coordinate"),
10000, -500000, 5000000, 10000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0097, operate));
// 机头升降上边界,单位0.01mm,默认10000范围-500000--5000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
152, 0, 0, PARA_VALUE_TYPE_INT,
tr("Head lifting upper boundary"),
10000, -500000, 5000000, 10000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0098, operate));
// 机头升降下边界单位0.01mm,默认1000范围-500000--5000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
153, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lower boundary of nose lifting"),
1000, -500000, 5000000, 1000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0099, operate));
// X1 正向软限位,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
154, 0, 0, PARA_VALUE_TYPE_INT,
tr("X1 positive soft limit"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009A, operate));
// X1 负向软限位,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
155, 0, 0, PARA_VALUE_TYPE_INT,
tr("X1 negative soft limit"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009B, operate));
// X2 正向软限位,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
156, 0, 0, PARA_VALUE_TYPE_INT,
tr("X2 positive soft limit"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009C, operate));
// X2 负向软限位,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
157, 0, 0, PARA_VALUE_TYPE_INT,
tr("X2 Negative soft limit"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009D, operate));
// Y 正向软限位,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
158, 0, 0, PARA_VALUE_TYPE_INT,
tr("Y positive direction soft limit"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009E, operate));
// Y 负向软限位,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
159, 0, 0, PARA_VALUE_TYPE_INT,
tr("Y negative direction soft limit"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009F, operate));
// 软件限位允许0不允许1允许
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
160, 0, 0, PARA_VALUE_TYPE_SW,
tr("software limit allowed"),
0, 0, 1, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00A0, operate));
// 上料点坐标X1范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
161, 0, 0, PARA_VALUE_TYPE_INT,
tr("Loading point coordinate X1"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A1, operate));
// 上料点坐标X2范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
162, 0, 0, PARA_VALUE_TYPE_INT,
tr("Loading point coordinate X2"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A2, operate));
// 上料点坐标Y范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
163, 0, 0, PARA_VALUE_TYPE_INT,
tr("Loading point coordinate Y"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A3, operate));
// 排胶点坐标X范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
164, 0, 0, PARA_VALUE_TYPE_INT,
tr("Coordinate X of glue discharge point"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A4, operate));
// 排胶点坐标Y范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
165, 0, 0, PARA_VALUE_TYPE_INT,
tr("Coordinate Y of glue discharge point"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A5, operate));
// 左右工位间隔距离X范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
166, 0, 0, PARA_VALUE_TYPE_INT,
tr("Distance between left and right stations X"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A6, operate));
// 左右工位间隔距离Y范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
167, 0, 0, PARA_VALUE_TYPE_INT,
tr("Distance between left and right stations Y"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A7, operate));
// 工位1可工作范围X+,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
168, 0, 0, PARA_VALUE_TYPE_INT,
tr("Workable range X+ of station 1"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A8, operate));
// 工位1可工作范围X-,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
169, 0, 0, PARA_VALUE_TYPE_INT,
tr("Workable range X- of station 1"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A9, operate));
// 工位2可工作范围X+,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
170, 0, 0, PARA_VALUE_TYPE_INT,
tr("Workable range X+ of station 2"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AA, operate));
// 工位2可工作范围X-,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
171, 0, 0, PARA_VALUE_TYPE_INT,
tr("Workable range X- of station 2"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AB, operate));
// 可工作范围Y+,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
172, 0, 0, PARA_VALUE_TYPE_INT,
tr("Working range Y+"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AC, operate));
// 可工作范围Y-,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
173, 0, 0, PARA_VALUE_TYPE_INT,
tr("Working range Y-"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AD, operate));
// 工位1升降低位坐标,范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
174, 0, 0, PARA_VALUE_TYPE_INT,
tr("Station 1 lifting low position coordinate"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AE, operate));
// 工位2升降低位坐标,范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
175, 0, 0, PARA_VALUE_TYPE_INT,
tr("Station 2 lifting low position coordinate"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AF, operate));
// 越框时机头抬起高度,0--100000单位0.01mm,默认 500
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
176, 0, 0, PARA_VALUE_TYPE_INT,
tr("Head lifting height when crossing frame"),
500, 0, 100000, 500, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00B0, operate));
//自动排胶等待时间范围0-1000单位分默认30
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
179, 0, 0, PARA_VALUE_TYPE_INT,
tr("Automatic glue discharge waiting time"),// 自动排胶等待时间
30, 0, 1000, 30, 0, tr("min"), tr(""),
tr(""), 0, 0, 0x00B0, operate));
//自动排胶持续时间范围0-100单位秒默认10
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
180, 0, 0, PARA_VALUE_TYPE_INT,
tr("Automatic glue discharge duration"),// 自动排胶持续时间
10, 0, 100, 10, 0, tr("s"), tr(""),
tr(""), 0, 0, 0x00B0, operate));
//开机自动复位允许0不允许1允许
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
200, 0, 0, PARA_VALUE_TYPE_SW,
tr("Power on automatic reset allowed"),
0, 0, 1, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00C8, operate));
// 模拟工作功能0不允许1允许。
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
201, 0, 0, PARA_VALUE_TYPE_SW,
tr("Analog working function"),
0, 0, 1, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00C9, operate));
// 启动按钮模式范围0-10默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
202, 0, 0, PARA_VALUE_TYPE_INT,
tr("Start button mode"),
0, 0, 10, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00CA, operate));
// 自动补胶功能0不允许1允许
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
203, 0, 0, PARA_VALUE_TYPE_SW,
tr("Automatic glue filling function"),
0, 0, 1, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00CB, operate));
// 双工位模式01
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
204, 0, 0, PARA_VALUE_TYPE_SW,
tr("Dual station mode"),
0, 0, 1, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00CC, operate));
}
//电机和控制动作
void AdhesiveMachine::initOutCtrlList()
{
m_allOutCtrlList.clear();
QString enableStr = tr("Enable"); //使能
QString disableStr = tr("Disable"); //失能
QString jogPStr = tr("JogP"); //正转
QString jogNStr = tr("JogN"); //反转
QString zeroStr = tr("Zero"); //归零
QString openStr = tr("Open"); //打开
QString closeStr = tr("Close");//关闭
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0001,tr("X to move motor"),MT_LX,// X向移动电机
enableStr,true,OUTCONTROL_ENABLE,-1,-1,
disableStr,true,OUTCONTROL_DISABLE,-1,-1,
jogPStr,true,-1,OUTCONTROL_JOGP,OUTCONTROL_STOP,
jogNStr,true,-1,OUTCONTROL_JOGN,OUTCONTROL_STOP,
zeroStr,true,OUTCONTROL_ZERO,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0002,tr("Y to move motor"),MT_LY,// Y向移动电机
enableStr,true,OUTCONTROL_ENABLE,-1,-1,
disableStr,true,OUTCONTROL_DISABLE,-1,-1,
jogPStr,true,-1,OUTCONTROL_JOGP,OUTCONTROL_STOP,
jogNStr,true,-1,OUTCONTROL_JOGN,OUTCONTROL_STOP,
zeroStr,true,OUTCONTROL_ZERO,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0003,tr("Lifting motor"),MT_LM,// 升降电机
enableStr,true,OUTCONTROL_ENABLE,-1,-1,
disableStr,true,OUTCONTROL_DISABLE,-1,-1,
jogPStr,true,-1,OUTCONTROL_JOGP,OUTCONTROL_STOP,
jogNStr,true,-1,OUTCONTROL_JOGN,OUTCONTROL_STOP,
zeroStr,true,OUTCONTROL_ZERO,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0004,tr("Glue gun control"),OT_GLUE_CTRL,// 胶枪控制
"",false,-1,-1,-1,
"",false,-1,-1,-1,
"",false,-1,-1,-1,
openStr,true,OUTCONTROL_OPEN,-1,-1,
closeStr,true,OUTCONTROL_CLOSE,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0005,tr("A Pneumatic ball valve of large rubber pump"),OT_AL_GLUE_CTRL,// A大胶泵气动球阀
"",false,-1,-1,-1,
"",false,-1,-1,-1,
"",false,-1,-1,-1,
openStr,true,OUTCONTROL_OPEN,-1,-1,
closeStr,true,OUTCONTROL_CLOSE,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0006,tr("Feeding control of small glue pump A"),OT_AS_GLUE_CTRL,// A小胶泵补料控制
"",false,-1,-1,-1,
"",false,-1,-1,-1,
"",false,-1,-1,-1,
openStr,true,OUTCONTROL_OPEN,-1,-1,
closeStr,true,OUTCONTROL_CLOSE,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0007,tr("B Pneumatic ball valve of large rubber pump"),OT_BL_GLUE_CTRL,// B大胶泵气动球阀
"",false,-1,-1,-1,
"",false,-1,-1,-1,
"",false,-1,-1,-1,
openStr,true,OUTCONTROL_OPEN,-1,-1,
closeStr,true,OUTCONTROL_CLOSE,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0008,tr("B Feeding control of small glue pump"),OT_BS_GLUE_CTRL,// B小胶泵补料控制
"",false,-1,-1,-1,
"",false,-1,-1,-1,
"",false,-1,-1,-1,
openStr,true,OUTCONTROL_OPEN,-1,-1,
closeStr,true,OUTCONTROL_CLOSE,-1,-1));
}
//快捷功能
void AdhesiveMachine::initShortCutList()
{
m_allShortCutList.clear();
m_allShortCutList.append(makeAShortCutItem(0,0x0001,tr("Reset All"),"buttonProcessReset",FUN_RESETALL));//全部复位
m_allShortCutList.append(makeAShortCutItem(0,0x0002,tr("Motor Zeroing"),"buttonAllToZero",FUN_MOTORZEROING));//电机归零
m_allShortCutList.append(makeAShortCutItem(0,0x0003,tr("Station1 Gluing"),"buttonStationGluing",FUN_STATION1GLUING));//工位1涂胶
m_allShortCutList.append(makeAShortCutItem(0,0x0004,tr("Station2 Gluing"),"buttonStationGluing",FUN_STATION2GLUING));//工位2涂胶
m_allShortCutList.append(makeAShortCutItem(0,0x0005,tr("Head Up And Down"),"buttonHeadUpDn",FUN_HEADUPDOWN));//机头升降
m_allShortCutList.append(makeAShortCutItem(0,0x0006,tr("To Station1 Start"),"buttonBackAnchorPoint",FUN_TOSTATION1APOS));//回工位1起始点
m_allShortCutList.append(makeAShortCutItem(0,0x0007,tr("To Station2 Start"),"buttonBackAnchorPoint",FUN_TOSTATION2APOS));//回工位2起始点
m_allShortCutList.append(makeAShortCutItem(0,0x0008,tr("Work Pause"),"buttonSpindleDisable",FUN_WORKPAUSE));// 暂停工作
m_allShortCutList.append(makeAShortCutItem(0,0x0009,tr("To Waitting Point"),"buttonBackFeedingPoint",FUN_TO_WAITTING_POS));//回等料点
m_allShortCutList.append(makeAShortCutItem(0,0x000A,tr("To Adhesive Point"),"buttonToGluePos",FUN_TO_REMOVE_GLUE_POS));//回排胶点
m_allShortCutList.append(makeAShortCutItem(0,0x000B,tr("Arrange Adhesive Once"),"buttonStationGluing",FUN_REMOVE_GLUE_ONCE));//排一次胶
m_allShortCutList.append(makeAShortCutItem(0,0x0006,tr("Set Offset"),"buttonSetOffsetPoint",FUN_SETOFFSETPOINT));//定偏移点
m_allShortCutList.append(makeAShortCutItem(0,0x0007,tr("Back Offset"),"buttonBackOffsetPoint",FUN_BACKOFFSETPOINT));//回偏移点
m_allShortCutList.append(makeAShortCutItem(0,0x000C,tr("Sew Set Start"),"buttonSetAnchorPoint",FUN_SETSTARTPOINT));//缝纫定起始点
m_allShortCutList.append(makeAShortCutItem(0,0x000D,tr("Back Start"),"buttonBackAnchorPoint",FUN_BACKSTARTPOINT));//回起始点
m_allShortCutList.append(makeAShortCutItem(0,0x000F,tr("Check Frame"),"buttonBorderCheck",FUN_CHECKFRAME));//边框检查
m_allShortCutList.append(makeAShortCutItem(0,0x0010,tr("Forward And Back"),"buttonForwardOrBack",FUN_FORWARDORBACK));//前进回退
m_allShortCutList.append(makeAShortCutItem(0,0x0011,tr("Adjust Glue Height"),"buttonAdjustGlueHeight",FUN_ADJUST_GLUE_HEGHT));//校准胶管高度
}
//辅助功能
void AdhesiveMachine::initAssistList()
{
m_allAssistList.clear();
m_allAssistList.append(makeAAssistItem(0,0x0001,tr("SensorSign"),"buttonSensor",ASSIST_SENSOR));//传感器信号
m_allAssistList.append(makeAAssistItem(0,0x0002,tr("Action"),"buttonControlAction",ASSIST_CONTROLACTION));//控制动作
m_allAssistList.append(makeAAssistItem(0,0x0003,tr("HMI Upgrade"),"buttonHMIUpgrade",ASSIST_HMIUPGRADE));//界面升级
m_allAssistList.append(makeAAssistItem(0,0x0004,tr("MC Upgrade"),"buttonMCUpgrade",ASSIST_MCUPGRADE));//主控升级
m_allAssistList.append(makeAAssistItem(0,0x0006,tr("ParaImport"),"buttonParaImport",ASSIST_PARAIMPORT));//参数导入
m_allAssistList.append(makeAAssistItem(0,0x0007,tr("ParaExport"),"buttonParaExport",ASSIST_PARAEXPORT));//参数导出
m_allAssistList.append(makeAAssistItem(0,0x0008,tr("SoftwareSet"),"buttonSoftwareSet",ASSIST_SOFTWARESET));//软件设置
m_allAssistList.append(makeAAssistItem(0,0x0009,tr("SoftPower"),"buttonSoftwareAuthor",ASSIST_AUTHORIZATION));//软件授权
m_allAssistList.append(makeAAssistItem(0,0x000A,tr("Network"),"buttonNetworkManage",ASSIST_NETWORK));//网络管理
//m_allAssistList.append(makeAAssistItem(0,0x000B,tr("NeedleSet"),"buttonNeedleSet",ASSIST_NEEDLESET));//针杆设置
m_allAssistList.append(makeAAssistItem(0,0x000C,tr("TimeSet"),"buttonTimeSet",ASSIST_TIMESET));//时间设置
m_allAssistList.append(makeAAssistItem(0,0x000F,tr("Version"),"buttonVersionInfo",ASSIST_MCVERSION));//版本信息
m_allAssistList.append(makeAAssistItem(0,0x0014,tr("Root"),"buttonRoot",ASSIST_ROOT));//超级用户
}
//花样设置
void AdhesiveMachine::initPatternSetList()
{
m_allPatternSetList.clear();
//m_allPatternSetList.append(makeAPatternSetItem(0,0x0001,tr("Select"),"buttonPatternSelect",PATTERNSET_PATTERNSELECT));//花样选择
m_allPatternSetList.append(makeAPatternSetItem(0,0x0002,tr("Para"),"buttonPatternPara",PATTERNSET_PATTERNPARA));//花样参数
m_allPatternSetList.append(makeAPatternSetItem(0,0x0003,tr("SpeedGear"),"buttonPatternColorOrder",PATTERNSET_PATTERNCOLOR));//速度档位
m_allPatternSetList.append(makeAPatternSetItem(0,0x0003,tr("HeadHeight"),"buttonPatternColorOrder",PATTERNSET_PATTERNCOLOR_HEADHIGHT));//机头高度
m_allPatternSetList.append(makeAPatternSetItem(0,0x0004,tr("Import"),"buttonPatternImport",PATTERNSET_PATTERNIMPORT));//花样导入
m_allPatternSetList.append(makeAPatternSetItem(0,0x0005,tr("Export"),"buttonPatternExport",PATTERNSET_PATTERNEXPORT));//花样导出
m_allPatternSetList.append(makeAPatternSetItem(0,0x0006,tr("Delete"),"buttonPatternDelete",PATTERNSET_PATTERNDELETE));//花样删除
m_allPatternSetList.append(makeAPatternSetItem(0,0x0007,tr("Station1Select"),"buttonPatternSelect",PATTERNSET_PATTERNSELECT_STATION1));//工位1花样选择
m_allPatternSetList.append(makeAPatternSetItem(0,0x0008,tr("Station2Select"),"buttonPatternSelect",PATTERNSET_PATTERNSELECT_STATION2));//工位2花样选择
m_allPatternSetList.append(makeAPatternSetItem(0,0x0009,tr("PatternSwitching"),"buttonPatternSwitching",PATTERNSET_PATTERN_SWITCHING));//花样切换
}
//参数分类(参数分组功能)
void AdhesiveMachine::initParaSetList()
{
m_allParaSetList.clear();
m_allParaSetList.append(makeAParaSetItem(0,0x0001,tr("OperatPara"),"buttonOperatParas",PARASET_SETTING));//设置参数 //操作参数
m_allParaSetList.append(makeAParaSetItem(0,0x0002,tr("ActionSet"),"buttonActionParas",PARASET_ACTION));//动作参数 //动作设定
m_allParaSetList.append(makeAParaSetItem(0,0x0003,tr("SpeedPara"),"buttonSpeedParas",PARASET_SPEED));//速度参数 //速度控制参数
m_allParaSetList.append(makeAParaSetItem(0,0x0004,tr("LimitPara"),"buttonPositionParas",PARASET_POSITION));// 位置参数 //限位参数
m_allParaSetList.append(makeAParaSetItem(0,0x0005,tr("MCPara"),"buttonSettingParas",PARASET_DETECT));//检测参数 //机器参数
}
//初始化传感器列表
void AdhesiveMachine::initSensorList()
{
QList <SensorItem> sensorList;
sensorList.append(makeASensorItem(0x0200, 0, tr("X motor - zero position")));//X电机-零位
sensorList.append(makeASensorItem(0x0200, 1, tr("X motor - positive limit")));//X电机-正限位
sensorList.append(makeASensorItem(0x0200, 2, tr("X motor - negative limit")));//X电机-负限位
sensorList.append(makeASensorItem(0x0200, 3, tr("Rubber discharge position of X motor")));//X电机排胶位
sensorList.append(makeASensorItem(0x0200, 4, tr("Y motor - zero position")));//Y电机-零位
sensorList.append(makeASensorItem(0x0200, 5, tr("Y motor - positive limit")));//Y电机-正限位
sensorList.append(makeASensorItem(0x0200, 6, tr("Y motor - negative limit")));//Y电机-负限位
sensorList.append(makeASensorItem(0x0200, 7, tr("Rubber discharge position of Y motor")));//Y电机排胶位
sensorList.append(makeASensorItem(0x0201, 0, tr("Low liquid level alarm of large rubber pump A")));//A大胶泵低液位预警
sensorList.append(makeASensorItem(0x0201, 1, tr("Low liquid level shutdown of large rubber pump A")));//A大胶泵低液位停机
sensorList.append(makeASensorItem(0x0201, 2, tr("Low liquid level alarm of large rubber pump B")));//B大胶泵低液位预警
sensorList.append(makeASensorItem(0x0201, 3, tr("Low liquid level shutdown of large rubber pump B")));//B大胶泵低液位停机
sensorList.append(makeASensorItem(0x0201, 4, tr("High liquid level replenishment of small rubber pump A is completed")));//A小胶泵高液位补液完成
sensorList.append(makeASensorItem(0x0201, 5, tr("Low liquid level alarm of small rubber pump A")));//A小胶泵低液位预警
sensorList.append(makeASensorItem(0x0201, 6, tr("Stop at low liquid level of small glue pump A")));//A小胶泵低液位停机
sensorList.append(makeASensorItem(0x0201, 7, tr("High liquid level replenishment of small glue pump B is completed ")));//B小胶泵高液位补液完成
sensorList.append(makeASensorItem(0x0202, 0, tr("Low liquid level alarm of small rubber pump B")));//B小胶泵低液位预警
sensorList.append(makeASensorItem(0x0202, 1, tr("Shutdown of small glue pump B at low liquid level")));//B小胶泵低液位停机
sensorList.append(makeASensorItem(0x0202, 4, tr("Z motor - zero position")));//Z电机-零位
sensorList.append(makeASensorItem(0x0202, 5, tr("Z motor - positive limit")));//Z电机-正限位
sensorList.append(makeASensorItem(0x0202, 6, tr("Z motor - negative limit")));//Z电机-负限位
sensorList.append(makeASensorItem(0x0203, 0, tr("Station 1 left limit")));//工位1左限位
sensorList.append(makeASensorItem(0x0203, 1, tr("Station 1 right limit")));//工位1右限位
sensorList.append(makeASensorItem(0x0203, 2, tr("Station 2 left limit")));//工位2左限位
sensorList.append(makeASensorItem(0x0203, 3, tr("Station 2 right limit")));//工位2右限位
//将机型所需的传感器列表替换到传感器整体列表中
for(int i = 0; i < sensorList.size(); i++)
{
int byteaddr = sensorList[i].m_byte_offset;
int bitaddr = sensorList[i].m_bit_offset;
QString str = sensorList[i].m_name;
int type = sensorList[i].m_type;
int idx = byteaddr*8+bitaddr;
if(idx < m_allSensorList.size())
{
m_allSensorList[idx].m_name = str;
m_allSensorList[idx].m_type = type;
}
}
}
//初始化错误代码和状态列表
void AdhesiveMachine::initErrorCodeAndStateList()
{
m_allErrorCodeAndStateList.clear();
//错误代码
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PLC_DIS, tr("PLC is not allowed to work")));// PLC不允许工作
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PLC_LRNF, tr("Left and right stations are not ready")));// 左右工位未就绪
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PLC_LNF, tr("Left station is not ready")));// 左工位未就绪
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PLC_RNF, tr("Right station is not ready")));// 右工位未就绪
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_MC_NW, tr("The device has not started to work")));// 设备未开始工作
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_MTX_WP, tr("X motor position is abnormal")));// X电机位置异常
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_MTY_WP, tr("Abnormal position of Y motor")));// Y电机位置异常
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_WK_STA_NI, tr("The working state is not initialized")));// 工作状态未初始化
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_AL_LACK, tr("A large glue pump is short of glue")));// A大胶泵缺胶
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_BL_LACK, tr("B large rubber pump is short of glue")));// B大胶泵缺胶
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_AS_LACK, tr("A small glue pump is short of glue")));// A小胶泵缺胶
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_BS_LACK, tr("The small rubber pump B is short of glue")));// B小胶泵缺胶
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_NOT_RMPOS, tr("The rubber discharge position is not reached")));// 未到排胶位
}

View File

@ -0,0 +1,54 @@
#ifndef ADHESIVEMACHINE_H
#define ADHESIVEMACHINE_H
#include "mctype/machinetypefun.h"
//控制动作
#define OT_GLUE_CTRL 0x0001 // 胶枪控制
#define OT_AL_GLUE_CTRL 0x0002 // A大胶泵气动球阀
#define OT_AS_GLUE_CTRL 0x0003 // A小胶泵补料控制
#define OT_BL_GLUE_CTRL 0x0004 // B大胶泵气动球阀
#define OT_BS_GLUE_CTRL 0x0005 // B小胶泵补料控制
//错误代码
#define ERR_PLC_DIS 0x0650 // PLC不允许工作
#define ERR_PLC_LRNF 0x0651 // 左右工位未就绪
#define ERR_PLC_LNF 0x0652 // 左工位未就绪
#define ERR_PLC_RNF 0x0653 // 右工位未就绪
#define ERR_MC_NW 0x0654 // 设备未开始工作
#define ERR_MTX_WP 0x0655 // X电机位置异常
#define ERR_MTY_WP 0x0656 // Y电机位置异常
#define ERR_WK_STA_NI 0x0657 // 工作状态未初始化
#define ERR_AL_LACK 0x0658 // A大胶泵缺胶
#define ERR_BL_LACK 0x0659 // B大胶泵缺胶
#define ERR_AS_LACK 0x065A // A小胶泵缺胶
#define ERR_BS_LACK 0x065B // B小胶泵缺胶
#define ERR_NOT_RMPOS 0x065C // 未到排胶位
//压胶机
class AdhesiveMachine : public MachineTypeFun
{
Q_OBJECT
public:
AdhesiveMachine();
~AdhesiveMachine();
private:
void initRootParasList();//超级用户参数(包括机器参数、工作参数)
void initPatternsParasList();//花样参数
void initMcParasList();//主控机器参数
private:
void initOutCtrlList();//控制动作
void initShortCutList();//快捷动作
void initAssistList();//辅助功能
void initPatternSetList();//花样设置
void initParaSetList();//参数设置
private:
void initSensorList();//初始化传感器列表
void initErrorCodeAndStateList();//初始化错误代码和状态列表
};
#endif // ADHESIVEMACHINE_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,32 @@
#ifndef AUTOPOPUNCHMACHINES_H
#define AUTOPOPUNCHMACHINES_H
#include "mctype/machinetypefun.h"
//自动定位冲孔机
class AutoPosPunchMachine : public MachineTypeFun
{
Q_OBJECT
public:
AutoPosPunchMachine();
~AutoPosPunchMachine();
private:
void initRootParasList();//超级用户参数(包括机器参数、工作参数)
void initPatternsParasList();//花样参数
void initMcParasList();//主控机器参数
void initWkParasList();//主控工作参数
private:
void initOutCtrlList();//控制动作
void initShortCutList();//快捷动作
void initAssistList();//辅助功能
void initPatternSetList();//花样设置
void initParaSetList();//参数设置
private:
void initSensorList();//初始化传感器列表
void initErrorCodeAndStateList();//初始化错误代码和状态列表
};
#endif // AUTOPOPUNCHMACHINES_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,32 @@
#ifndef PUNCHMACHINE_H
#define PUNCHMACHINE_H
#include "mctype/machinetypefun.h"
//冲孔机
class PunchMachine : public MachineTypeFun
{
Q_OBJECT
public:
PunchMachine();
~PunchMachine();
private:
void initRootParasList();//超级用户参数(包括机器参数、工作参数)
void initPatternsParasList();//花样参数
void initMcParasList();//主控机器参数
void initWkParasList();//主控工作参数
private:
void initOutCtrlList();//控制动作
void initShortCutList();//快捷动作
void initAssistList();//辅助功能
void initPatternSetList();//花样设置
void initParaSetList();//参数设置
private:
void initSensorList();//初始化传感器列表
void initErrorCodeAndStateList();//初始化错误代码和状态列表
};
#endif // PUNCHMACHINE_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,32 @@
#ifndef PUNCHMACHINEAUTOPOS_H
#define PUNCHMACHINEAUTOPOS_H
#include "mctype/machinetypefun.h"
//自动定位冲孔机
class PunchMachineAutoPos : public MachineTypeFun
{
Q_OBJECT
public:
PunchMachineAutoPos();
~PunchMachineAutoPos();
private:
void initRootParasList();//超级用户参数(包括机器参数、工作参数)
void initPatternsParasList();//花样参数
void initMcParasList();//主控机器参数
void initWkParasList();//主控工作参数
private:
void initOutCtrlList();//控制动作
void initShortCutList();//快捷动作
void initAssistList();//辅助功能
void initPatternSetList();//花样设置
void initParaSetList();//参数设置
private:
void initSensorList();//初始化传感器列表
void initErrorCodeAndStateList();//初始化错误代码和状态列表
};
#endif // PUNCHMACHINEAUTOPOS_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,33 @@
#ifndef PUNCHSEWEMBMACHINE_H
#define PUNCHSEWEMBMACHINE_H
#include "mctype/machinetypefun.h"
//冲缝绣
class PunchSewEmbMachine : public MachineTypeFun
{
Q_OBJECT
public:
PunchSewEmbMachine();
~PunchSewEmbMachine();
private:
void initRootParasList();//超级用户参数(包括机器参数、工作参数)
void initPatternsParasList();//花样参数
void initMcParasList();//主控机器参数
void initWkParasList();//主控工作参数
private:
void initOutCtrlList();//控制动作
void initShortCutList();//快捷动作
void initAssistList();//辅助功能
void initPatternSetList();//花样设置
void initParaSetList();//参数设置
void initDebugFunList();//初始化调试功能
private:
void initSensorList();//初始化传感器列表
void initErrorCodeAndStateList();//初始化错误代码和状态列表
};
#endif // PUNCHSEWEMBMACHINE_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,32 @@
#ifndef PUNCHSEWMACHINE_H
#define PUNCHSEWMACHINE_H
#include "mctype/machinetypefun.h"
//冲缝机
class PunchSewMachine : public MachineTypeFun
{
Q_OBJECT
public:
PunchSewMachine();
~PunchSewMachine();
private:
void initRootParasList();//超级用户参数(包括机器参数、工作参数)
void initPatternsParasList();//花样参数
void initMcParasList();//主控机器参数
void initWkParasList();//主控工作参数
private:
void initOutCtrlList();//控制动作
void initShortCutList();//快捷动作
void initAssistList();//辅助功能
void initPatternSetList();//花样设置
void initParaSetList();//参数设置
private:
void initSensorList();//初始化传感器列表
void initErrorCodeAndStateList();//初始化错误代码和状态列表
};
#endif // PUNCHSEWMACHINE_H

View File

@ -0,0 +1,958 @@
#include "punchsewmachineYaJiao.h"
//改为压胶机 xcy 20221122
PunchSewMachineYaJiao::PunchSewMachineYaJiao()
{
//添加各种参数到列表中
initRootParasList();
initRootHMIConfigurationList(m_allParasList);//超级用户界面配置
initRootIOTConfigurationList(m_allParasList); //超级用户物联网配置
initPatternsParasList();
initSoftwareParasList(m_allParasList);
initTimeParasList(m_allParasList);
initMcParasList();
initWkParasList();
//初始化控制动作列表
initOutCtrlList();
//初始化快捷功能列表
initShortCutList();
//初始化辅助功能列表
initAssistList();
//初始化花样设置功能列表
initPatternSetList();
//参数分类功能
initParaSetList();
//初始化传感器列表
initSensorList();
//初始化错误代码和状态列表
initErrorCodeAndStateList();
}
PunchSewMachineYaJiao::~PunchSewMachineYaJiao()
{
}
//超级用户参数(包括机器参数、工作参数)
void PunchSewMachineYaJiao::initRootParasList()
{
//超级用户参数---------------------------
//超级用户参数-界面配置;单位:无
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_HMICONFIGURATION, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("HMI Configuration"),//界面配置
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0000 , factory));
//超级用户参数-界面进入调试模式;单位:无
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_DEBUGMODE, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Interface debug mode"),//界面进入调试模式
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001 , root));
//超级用户参数-删除config.ini配置文件单位
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_DELETEINI, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Delete configure file"),//删除配置文件
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001 , root));
//超级用户参数-导入csv文件单位
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_IMPORTCSV, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Import CSV file"),//导入csv文件
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001 , factory));
//超级用户参数-删除csv文件单位
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_DELETECSV, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Delete CSV file"),//删除csv文件
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001 , factory));
//超级用户参数-重置安装调试进度;单位:无
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_RESETCSV, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Reset CSV file"),//重置安装调试进度
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0001 , factory));
//超级用户参数-机器参数;单位:无
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_MACHINEPARA, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Machine parameters"),//机器参数
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0002, factory));
//超级用户参数-工作参数;单位:无
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_WORKPARA, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("Work parameters"),//工作参数
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x0003, factory));
//超级用户参数-物联网配置;
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_ROOT,
0 ,
ROOT_IOTCONFIGURATION, 0, 0, PARA_VALUE_TYPE_CLICK,
tr("InternetofThings configuration"),//物联网配置
0, 0, 0, 0, 0, tr(""), tr(""),
tr(""),
0, 0, 0x000D, factory));
}
//花样参数
void PunchSewMachineYaJiao::initPatternsParasList()
{
QTextCodec *cod = QTextCodec::codecForLocale();
//花样参数-花样设置参数-翻转式样;单位:无 范围0-7默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_ROTATESTYLE, 0, 0, PARA_VALUE_TYPE_LIST,
tr("Flip style"),//翻转式样
0, 0, 7, 0, 0, tr(""), tr(""),
tr("normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7"),
0, 0, 0x0001, operate));
//花样参数-花样设置参数-水平翻转样式;单位:无 范围0-1默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_HORIZONTALSTYLE, 0, 0, PARA_VALUE_TYPE_LIST,
tr("Horizontal flip style"),//水平翻转式样
0, 0, 1, 0, 0, tr(""), tr(""),
tr("normalP:0;mirrorP:1;"),
0, 0, 0x0002, operate));
//花样参数-花样设置参数-垂直翻转式样;单位:无 范围0-1默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_VERTICALSTYLE, 0, 0, PARA_VALUE_TYPE_LIST,
tr("vertical flip style"),//垂直翻转式样
0, 0, 1, 0, 0, tr(""), tr(""),
tr("normalP:0;mRight180P:1;"),
0, 0, 0x0002, operate));
//花样参数-花样设置参数-旋转角度;单位:° 范围0-90默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_ROTATEANGLE, 0, 0, PARA_VALUE_TYPE_INT,
tr("Rotation angle"),//旋转角度
0, 0, 90, 0, 0, cod->toUnicode("°"), tr(""),//度
tr(""), 0, 0,0x0003, operate));
//花样参数-花样设置参数-起始点x范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_STARTX, 0, 0, PARA_VALUE_TYPE_INT,
tr("startX"),//起始点x
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm
tr(""), 0, 0,0x0004, operate));
//花样参数-花样设置参数-起始点y范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_PATTERN,
0 ,
SET_STARTY, 0, 0, PARA_VALUE_TYPE_INT,
tr("startY"),//起始点y
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm
tr(""), 0, 0,0x0004, operate));
//花样参数---------------------------
}
//机器参数
void PunchSewMachineYaJiao::initMcParasList()
{
// XY电机启停转速, 范围 1--5000单位mm/s默认 10
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
0, 0, 0, PARA_VALUE_TYPE_INT,
tr("XY motor start and stop speed"),
10, 1, 5000, 10, 0, tr("r/min"), tr(""),
tr(""), 0, 0, 0x0000, operate));
// XY电机归零转速, 范围 1--5000单位mm/s默认 20
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
1, 0, 0, PARA_VALUE_TYPE_INT,
tr("XY motor return to zero speed"),
20, 1, 5000, 20, 0, tr("r/min"), tr(""),
tr(""), 0, 0, 0x0001, operate));
// XY电机运转转速, 范围 1--5000单位mm/s默认 100
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
2, 0, 0, PARA_VALUE_TYPE_INT,
tr("XY motor running speed"),
100, 1, 5000, 100, 0, tr("r/min"), tr(""),
tr(""), 0, 0, 0x0002, operate));
// XY电机运转加速度, 范围 1--5000单位mm/ss默认 30
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
3, 0, 0, PARA_VALUE_TYPE_INT,
tr("XY motor operating acceleration"),
30, 1, 5000, 30, 0, tr("r/ss"), tr(""),
tr(""), 0, 0, 0x0003, operate));
// 升降启动速度,1--100 mm/s默认 30
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
4, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lifting start speed"),
30, 1, 100, 30, 0, tr("mm/s"), tr(""),
tr(""), 0, 0, 0x0004, operate));
// 升降归零速度,1--100 mm/s默认 30
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
5, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lifting and returning to zero speed"),
30, 1, 100, 30, 0, tr("mm/s"), tr(""),
tr(""), 0, 0, 0x0005, operate));
// 升降行走速度,1--1500
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
6, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lifting and walking speed"),
200, 1, 1500, 200, 0, tr("mm/s"), tr(""),
tr(""), 0, 0, 0x0006, operate));
// 升降行走加速度,1--10000 mm/s2默认 1000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
7, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lifting and walking acceleration"),
1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""),
tr(""), 0, 0, 0x0007, operate));
// 慢动速度,范围 1--5000单位mm/s默认 100
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
50, 0, 0, PARA_VALUE_TYPE_INT,
tr("Slow motion speed"),
100, 1, 5000, 100, 0, tr("r/min"), tr(""),
tr(""), 0, 0, 0x0032, operate));
// 工作速度,范围 1--5000单位mm/s默认 20
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
51, 0, 0, PARA_VALUE_TYPE_INT,
tr("Operating speed"),
20, 1, 5000, 20, 0, tr("r/min"), tr(""),
tr(""), 0, 0, 0x0033, operate));
// 工作加速度, 范围 1--5000单位mm/ss默认 30
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
52, 0, 0, PARA_VALUE_TYPE_INT,
tr("Working acceleration"),
30, 1, 5000, 30, 0, tr("r/ss"), tr(""),
tr(""), 0, 0, 0x0034, operate));
// 工作最高速度,范围 1--1000单位mm/s默认 200
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
53, 0, 0, PARA_VALUE_TYPE_INT,
tr("Maximum operating speed"),
200, 1, 1000, 200, 0, tr("mm"), tr(""),
tr(""), 0, 0, 0x0035, operate));
// 工作最小速度,范围 1--1000单位mm/s默认 200
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
54, 0, 0, PARA_VALUE_TYPE_INT,
tr("Minimum operating speed"),
200, 1, 1000, 200, 0, tr("mm"), tr(""),
tr(""), 0, 0, 0x0036, operate));
// X电机零位坐标范围-500000--5000000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
100, 0, 0, PARA_VALUE_TYPE_INT,
tr("Zero position coordinate of X motor"),// X电机零位坐标
0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0064, operate));
// Y电机零位坐标范围-500000--5000000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
101, 0, 0, PARA_VALUE_TYPE_INT,
tr("Zero position coordinate of Y motor"),// Y电机零位坐标
0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0065, operate));
// 升降电机零位坐标,范围-500000--5000000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
102, 0, 0, PARA_VALUE_TYPE_INT,
tr("Zero position coordinate of lifting motor"), // 升降电机零位坐标
0, -500000, 5000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0066, operate));
// X电机归零补偿范围-10000--10000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
103, 0, 0, PARA_VALUE_TYPE_INT,
tr("Zero compensation of X motor"), // X电机归零补偿
0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0067, operate));
// Y电机归零补偿范围-10000--10000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
104, 0, 0, PARA_VALUE_TYPE_INT,
tr("Y motor zeroing compensation"), // Y电机归零补偿
0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0068, operate));
// 升降电机归零补偿,范围-10000--10000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
105, 0, 0, PARA_VALUE_TYPE_INT,
tr("Zero compensation of lifting motor"), // 升降电机归零补偿
0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0069, operate));
// 偏移点X坐标范围-500000--5000000单位0.01mm默认200
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
106, 0, 0, PARA_VALUE_TYPE_INT,
tr("Offset point X coordinate"),
200, -500000, 5000000, 200, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x006A, operate));
// 偏移点Y坐标范围-500000--5000000单位0.01mm默认200
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_POSITION,
107, 0, 0, PARA_VALUE_TYPE_INT,
tr("Offset point Y coordinate"),
200, -500000, 5000000, 200, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x006B, operate));
// 校准点坐标X范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
108, 0, 0, PARA_VALUE_TYPE_INT,
tr("Calibration point coordinate X"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x006C, operate));
// 校准点坐标Y范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
109, 0, 0, PARA_VALUE_TYPE_INT,
tr("Calibration point coordinate Y"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x006C, operate));
// 校准传感器高度,范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
110, 0, 0, PARA_VALUE_TYPE_INT,
tr("Calibrate sensor height"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x006C, operate));
// 机头升降低位坐标,-500000--5000000单位0.01mm默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
150, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lower position coordinate of head lifting"),
0, -500000, 5000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0096, operate));
// 机头升降高位坐标,-500000--5000000单位0.01mm默认10000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
151, 0, 0, PARA_VALUE_TYPE_INT,
tr("Head lifting high position coordinate"),
10000, -500000, 5000000, 10000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0097, operate));
// 机头升降上边界,单位0.01mm,默认10000范围-500000--5000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
152, 0, 0, PARA_VALUE_TYPE_INT,
tr("Head lifting upper boundary"),
10000, -500000, 5000000, 10000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0098, operate));
// 机头升降下边界单位0.01mm,默认1000范围-500000--5000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
153, 0, 0, PARA_VALUE_TYPE_INT,
tr("Lower boundary of nose lifting"),
1000, -500000, 5000000, 1000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x0099, operate));
// X1 正向软限位,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
154, 0, 0, PARA_VALUE_TYPE_INT,
tr("X1 positive soft limit"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009A, operate));
// X1 负向软限位,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
155, 0, 0, PARA_VALUE_TYPE_INT,
tr("X1 negative soft limit"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009B, operate));
// X2 正向软限位,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
156, 0, 0, PARA_VALUE_TYPE_INT,
tr("X2 positive soft limit"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009C, operate));
// X2 负向软限位,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
157, 0, 0, PARA_VALUE_TYPE_INT,
tr("X2 Negative soft limit"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009D, operate));
// Y 正向软限位,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
158, 0, 0, PARA_VALUE_TYPE_INT,
tr("Y positive direction soft limit"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009E, operate));
// Y 负向软限位,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
159, 0, 0, PARA_VALUE_TYPE_INT,
tr("Y negative direction soft limit"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x009F, operate));
// 软件限位允许0不允许1允许
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
160, 0, 0, PARA_VALUE_TYPE_SW,
tr("software limit allowed"),
0, 0, 1, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00A0, operate));
// 上料点坐标X1范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
161, 0, 0, PARA_VALUE_TYPE_INT,
tr("Loading point coordinate X1"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A1, operate));
// 上料点坐标X2范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
162, 0, 0, PARA_VALUE_TYPE_INT,
tr("Loading point coordinate X2"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A2, operate));
// 上料点坐标Y范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
163, 0, 0, PARA_VALUE_TYPE_INT,
tr("Loading point coordinate Y"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A3, operate));
// 排胶点坐标X范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
164, 0, 0, PARA_VALUE_TYPE_INT,
tr("Coordinate X of glue discharge point"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A4, operate));
// 排胶点坐标Y范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
165, 0, 0, PARA_VALUE_TYPE_INT,
tr("Coordinate Y of glue discharge point"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A5, operate));
// 左右工位间隔距离X范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
166, 0, 0, PARA_VALUE_TYPE_INT,
tr("Distance between left and right stations X"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A6, operate));
// 左右工位间隔距离Y范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
167, 0, 0, PARA_VALUE_TYPE_INT,
tr("Distance between left and right stations Y"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A7, operate));
// 工位1可工作范围X+,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
168, 0, 0, PARA_VALUE_TYPE_INT,
tr("Workable range X+ of station 1"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A8, operate));
// 工位1可工作范围X-,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
169, 0, 0, PARA_VALUE_TYPE_INT,
tr("Workable range X- of station 1"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00A9, operate));
// 工位2可工作范围X+,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
170, 0, 0, PARA_VALUE_TYPE_INT,
tr("Workable range X+ of station 2"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AA, operate));
// 工位2可工作范围X-,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
171, 0, 0, PARA_VALUE_TYPE_INT,
tr("Workable range X- of station 2"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AB, operate));
// 可工作范围Y+,范围-1000000--1000000单位0.01mm,默认1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
172, 0, 0, PARA_VALUE_TYPE_INT,
tr("Working range Y+"),
1000000, -1000000, 1000000, 1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AC, operate));
// 可工作范围Y-,范围-1000000--1000000单位0.01mm,默认-1000000
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
173, 0, 0, PARA_VALUE_TYPE_INT,
tr("Working range Y-"),
-1000000, -1000000, 1000000, -1000000, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AD, operate));
// 工位1升降低位坐标,范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
174, 0, 0, PARA_VALUE_TYPE_INT,
tr("Station 1 lifting low position coordinate"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AE, operate));
// 工位2升降低位坐标,范围-1000000--1000000单位0.01mm,默认 0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
175, 0, 0, PARA_VALUE_TYPE_INT,
tr("Station 2 lifting low position coordinate"),
0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00AF, operate));
// 越框时机头抬起高度,0--100000单位0.01mm,默认 500
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
176, 0, 0, PARA_VALUE_TYPE_INT,
tr("Head lifting height when crossing frame"),
500, 0, 100000, 500, 2, tr("mm"), tr(""),
tr(""), 0, 0, 0x00B0, operate));
//自动排胶等待时间范围0-1000单位分默认30
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
179, 0, 0, PARA_VALUE_TYPE_INT,
tr("Automatic glue discharge waiting time"),// 自动排胶等待时间
30, 0, 1000, 30, 0, tr("min"), tr(""),
tr(""), 0, 0, 0x00B0, operate));
//自动排胶持续时间范围0-100单位秒默认10
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
180, 0, 0, PARA_VALUE_TYPE_INT,
tr("Automatic glue discharge duration"),// 自动排胶持续时间
10, 0, 100, 10, 0, tr("s"), tr(""),
tr(""), 0, 0, 0x00B0, operate));
//开机自动复位允许0不允许1允许
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
200, 0, 0, PARA_VALUE_TYPE_SW,
tr("Power on automatic reset allowed"),
0, 0, 1, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00C8, operate));
// 模拟工作功能0不允许1允许。
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
201, 0, 0, PARA_VALUE_TYPE_SW,
tr("Analog working function"),
0, 0, 1, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00C9, operate));
// 启动按钮模式范围0-10默认0
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
202, 0, 0, PARA_VALUE_TYPE_INT,
tr("Start button mode"),
0, 0, 10, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00CA, operate));
// 自动补胶功能0不允许1允许
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
203, 0, 0, PARA_VALUE_TYPE_SW,
tr("Automatic glue filling function"),
0, 0, 1, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00CB, operate));
// 双工位模式01
m_allParasList.append(makeAParaItem(0,
PARA_TYPE_MACH,
MC_SORT_SETTING,
204, 0, 0, PARA_VALUE_TYPE_SW,
tr("Dual station mode"),
0, 0, 1, 0, 0, tr(""), tr(""),
tr(""), 0, 0, 0x00CC, operate));
}
//电机和控制动作
void PunchSewMachineYaJiao::initOutCtrlList()
{
m_allOutCtrlList.clear();
QString enableStr = tr("Enable"); //使能
QString disableStr = tr("Disable"); //失能
QString jogPStr = tr("JogP"); //正转
QString jogNStr = tr("JogN"); //反转
QString zeroStr = tr("Zero"); //归零
QString openStr = tr("Open"); //打开
QString closeStr = tr("Close");//关闭
QString startStr = tr("Start"); //开始
QString stopStr = tr("Stop");//停止
QString upStr = tr("Up"); //上升
QString downStr= tr("Down");//下降
QString clampStr = tr("Clamp"); //夹紧
QString relaxStr= tr("Relax");//放松
QString outStr = tr("Out"); //伸出
QString backStr= tr("Back");//收回
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0001,tr("X to move motor"),MT_LX,// X向移动电机
enableStr,true,OUTCONTROL_ENABLE,-1,-1,
disableStr,true,OUTCONTROL_DISABLE,-1,-1,
jogPStr,true,-1,OUTCONTROL_JOGP,OUTCONTROL_STOP,
jogNStr,true,-1,OUTCONTROL_JOGN,OUTCONTROL_STOP,
zeroStr,true,OUTCONTROL_ZERO,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0002,tr("Y to move motor"),MT_LY,// Y向移动电机
enableStr,true,OUTCONTROL_ENABLE,-1,-1,
disableStr,true,OUTCONTROL_DISABLE,-1,-1,
jogPStr,true,-1,OUTCONTROL_JOGP,OUTCONTROL_STOP,
jogNStr,true,-1,OUTCONTROL_JOGN,OUTCONTROL_STOP,
zeroStr,true,OUTCONTROL_ZERO,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0003,tr("Lifting motor"),MT_LM,// 升降电机
enableStr,true,OUTCONTROL_ENABLE,-1,-1,
disableStr,true,OUTCONTROL_DISABLE,-1,-1,
jogPStr,true,-1,OUTCONTROL_JOGP,OUTCONTROL_STOP,
jogNStr,true,-1,OUTCONTROL_JOGN,OUTCONTROL_STOP,
zeroStr,true,OUTCONTROL_ZERO,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0004,tr("Glue gun control"),OT_GLUE_CTRL,// 胶枪控制
"",false,-1,-1,-1,
"",false,-1,-1,-1,
"",false,-1,-1,-1,
openStr,true,OUTCONTROL_OPEN,-1,-1,
closeStr,true,OUTCONTROL_CLOSE,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0005,tr("A Pneumatic ball valve of large rubber pump"),OT_AL_GLUE_CTRL,// A大胶泵气动球阀
"",false,-1,-1,-1,
"",false,-1,-1,-1,
"",false,-1,-1,-1,
openStr,true,OUTCONTROL_OPEN,-1,-1,
closeStr,true,OUTCONTROL_CLOSE,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0006,tr("Feeding control of small glue pump A"),OT_AS_GLUE_CTRL,// A小胶泵补料控制
"",false,-1,-1,-1,
"",false,-1,-1,-1,
"",false,-1,-1,-1,
openStr,true,OUTCONTROL_OPEN,-1,-1,
closeStr,true,OUTCONTROL_CLOSE,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0007,tr("B Pneumatic ball valve of large rubber pump"),OT_BL_GLUE_CTRL,// B大胶泵气动球阀
"",false,-1,-1,-1,
"",false,-1,-1,-1,
"",false,-1,-1,-1,
openStr,true,OUTCONTROL_OPEN,-1,-1,
closeStr,true,OUTCONTROL_CLOSE,-1,-1));
m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0008,tr("B Feeding control of small glue pump"),OT_BS_GLUE_CTRL,// B小胶泵补料控制
"",false,-1,-1,-1,
"",false,-1,-1,-1,
"",false,-1,-1,-1,
openStr,true,OUTCONTROL_OPEN,-1,-1,
closeStr,true,OUTCONTROL_CLOSE,-1,-1));
}
//快捷功能
void PunchSewMachineYaJiao::initShortCutList()
{
m_allShortCutList.clear();
m_allShortCutList.append(makeAShortCutItem(0,0x0001,tr("ResetAll"),"buttonProcessReset",FUN_RESETALL));//全部复位
m_allShortCutList.append(makeAShortCutItem(0,0x0002,tr("MotorZeroing"),"buttonAllToZero",FUN_MOTORZEROING));//电机归零
m_allShortCutList.append(makeAShortCutItem(0,0x0003,tr("Station1Gluing"),"buttonStationGluing",FUN_STATION1GLUING));//工位1涂胶
m_allShortCutList.append(makeAShortCutItem(0,0x0004,tr("Station2Gluing"),"buttonStationGluing",FUN_STATION2GLUING));//工位2涂胶
m_allShortCutList.append(makeAShortCutItem(0,0x0005,tr("HeadUpDown"),"buttonHeadUpDn",FUN_HEADUPDOWN));//机头升降
m_allShortCutList.append(makeAShortCutItem(0,0x0006,tr("ToStation1Apos"),"buttonBackAnchorPoint",FUN_TOSTATION1APOS));//回工位1起始点
m_allShortCutList.append(makeAShortCutItem(0,0x0007,tr("ToStation2Apos"),"buttonBackAnchorPoint",FUN_TOSTATION2APOS));//回工位2起始点
m_allShortCutList.append(makeAShortCutItem(0,0x0008,tr("workpause"),"buttonSpindleDisable",FUN_WORKPAUSE));// 暂停工作
m_allShortCutList.append(makeAShortCutItem(0,0x0009,tr("ToWaittingPos"),"buttonBackFeedingPoint",FUN_TO_WAITTING_POS));//回等料点
m_allShortCutList.append(makeAShortCutItem(0,0x000A,tr("ToRemoveGluePos"),"buttonToGluePos",FUN_TO_REMOVE_GLUE_POS));//回排胶点
m_allShortCutList.append(makeAShortCutItem(0,0x000B,tr("RemoveGlueOnce"),"buttonStationGluing",FUN_REMOVE_GLUE_ONCE));//排一次胶
m_allShortCutList.append(makeAShortCutItem(0,0x0006,tr("SetOffset"),"buttonSetOffsetPoint",FUN_SETOFFSETPOINT));//定偏移点
m_allShortCutList.append(makeAShortCutItem(0,0x0007,tr("BackOffset"),"buttonBackOffsetPoint",FUN_BACKOFFSETPOINT));//回偏移点
m_allShortCutList.append(makeAShortCutItem(0,0x000C,tr("SewStart"),"buttonSetAnchorPoint",FUN_SETSTARTPOINT));//缝纫定起始点
m_allShortCutList.append(makeAShortCutItem(0,0x000D,tr("BackStart"),"buttonBackAnchorPoint",FUN_BACKSTARTPOINT));//回起始点
m_allShortCutList.append(makeAShortCutItem(0,0x000F,tr("CheckFrame"),"buttonBorderCheck",FUN_CHECKFRAME));//边框检查
m_allShortCutList.append(makeAShortCutItem(0,0x0010,tr("ComeOrBack"),"buttonForwardOrBack",FUN_FORWARDORBACK));//前进回退
m_allShortCutList.append(makeAShortCutItem(0,0x0011,tr("AdjustGlueHeight"),"buttonAdjustGlueHeight",FUN_ADJUST_GLUE_HEGHT));//校准胶管高度
}
//辅助功能
void PunchSewMachineYaJiao::initAssistList()
{
m_allAssistList.clear();
m_allAssistList.append(makeAAssistItem(0,0x0001,tr("SensorSign"),"buttonSensor",ASSIST_SENSOR));//传感器信号
m_allAssistList.append(makeAAssistItem(0,0x0002,tr("Action"),"buttonControlAction",ASSIST_CONTROLACTION));//控制动作
m_allAssistList.append(makeAAssistItem(0,0x0003,tr("HMIUpgrade"),"buttonHMIUpgrade",ASSIST_HMIUPGRADE));//界面升级
m_allAssistList.append(makeAAssistItem(0,0x0004,tr("MCUpgrade"),"buttonMCUpgrade",ASSIST_MCUPGRADE));//主控升级
m_allAssistList.append(makeAAssistItem(0,0x0006,tr("ParaImport"),"buttonParaImport",ASSIST_PARAIMPORT));//参数导入
m_allAssistList.append(makeAAssistItem(0,0x0007,tr("ParaExport"),"buttonParaExport",ASSIST_PARAEXPORT));//参数导出
m_allAssistList.append(makeAAssistItem(0,0x0008,tr("SoftwareSet"),"buttonSoftwareSet",ASSIST_SOFTWARESET));//软件设置
m_allAssistList.append(makeAAssistItem(0,0x0009,tr("SoftPower"),"buttonSoftwareAuthor",ASSIST_AUTHORIZATION));//软件授权
m_allAssistList.append(makeAAssistItem(0,0x000A,tr("Network"),"buttonNetworkManage",ASSIST_NETWORK));//网络管理
//m_allAssistList.append(makeAAssistItem(0,0x000B,tr("NeedleSet"),"buttonNeedleSet",ASSIST_NEEDLESET));//针杆设置
m_allAssistList.append(makeAAssistItem(0,0x000C,tr("TimeSet"),"buttonTimeSet",ASSIST_TIMESET));//时间设置
m_allAssistList.append(makeAAssistItem(0,0x000F,tr("Version"),"buttonVersionInfo",ASSIST_MCVERSION));//版本信息
m_allAssistList.append(makeAAssistItem(0,0x0014,tr("Root"),"buttonRoot",ASSIST_ROOT));//超级用户
}
//花样设置
void PunchSewMachineYaJiao::initPatternSetList()
{
m_allPatternSetList.clear();
//m_allPatternSetList.append(makeAPatternSetItem(0,0x0001,tr("Select"),"buttonPatternSelect",PATTERNSET_PATTERNSELECT));//花样选择
m_allPatternSetList.append(makeAPatternSetItem(0,0x0002,tr("Para"),"buttonPatternPara",PATTERNSET_PATTERNPARA));//花样参数
m_allPatternSetList.append(makeAPatternSetItem(0,0x0003,tr("Color"),"buttonPatternColorOrder",PATTERNSET_PATTERNCOLOR));//花样色序
m_allPatternSetList.append(makeAPatternSetItem(0,0x0003,tr("HeadHeight"),"buttonPatternColorOrder",PATTERNSET_PATTERNCOLOR_HEADHIGHT));//花样机头高度
m_allPatternSetList.append(makeAPatternSetItem(0,0x0004,tr("Import"),"buttonPatternImport",PATTERNSET_PATTERNIMPORT));//花样导入
m_allPatternSetList.append(makeAPatternSetItem(0,0x0005,tr("Export"),"buttonPatternExport",PATTERNSET_PATTERNEXPORT));//花样导出
m_allPatternSetList.append(makeAPatternSetItem(0,0x0006,tr("Delete"),"buttonPatternDelete",PATTERNSET_PATTERNDELETE));//花样删除
m_allPatternSetList.append(makeAPatternSetItem(0,0x0007,tr("Station1Select"),"buttonPatternSelect",PATTERNSET_PATTERNSELECT_STATION1));//工位1花样选择
m_allPatternSetList.append(makeAPatternSetItem(0,0x0008,tr("Station2Select"),"buttonPatternSelect",PATTERNSET_PATTERNSELECT_STATION2));//工位2花样选择
m_allPatternSetList.append(makeAPatternSetItem(0,0x0009,tr("PatternSwitching"),"buttonPatternSwitching",PATTERNSET_PATTERN_SWITCHING));//花样切换
}
//参数分类(参数分组功能)
void PunchSewMachineYaJiao::initParaSetList()
{
m_allParaSetList.clear();
m_allParaSetList.append(makeAParaSetItem(0,0x0001,tr("OperatPara"),"buttonOperatParas",PARASET_SETTING));//设置参数 //操作参数
m_allParaSetList.append(makeAParaSetItem(0,0x0002,tr("ActionSet"),"buttonActionParas",PARASET_ACTION));//动作参数 //动作设定
m_allParaSetList.append(makeAParaSetItem(0,0x0003,tr("SpeedPara"),"buttonSpeedParas",PARASET_SPEED));//速度参数 //速度控制参数
m_allParaSetList.append(makeAParaSetItem(0,0x0004,tr("LimitPara"),"buttonPositionParas",PARASET_POSITION));// 位置参数 //限位参数
m_allParaSetList.append(makeAParaSetItem(0,0x0005,tr("MCPara"),"buttonSettingParas",PARASET_DETECT));//设置参数 //机器参数
}
//初始化传感器列表
void PunchSewMachineYaJiao::initSensorList()
{
QList <SensorItem> sensorList;
sensorList.append(makeASensorItem(0x0200, 0, tr("X motor - zero position")));//X电机-零位
sensorList.append(makeASensorItem(0x0200, 1, tr("X motor - positive limit")));//X电机-正限位
sensorList.append(makeASensorItem(0x0200, 2, tr("X motor - negative limit")));//X电机-负限位
sensorList.append(makeASensorItem(0x0200, 3, tr("Rubber discharge position of X motor")));//X电机排胶位
sensorList.append(makeASensorItem(0x0200, 4, tr("Y motor - zero position")));//Y电机-零位
sensorList.append(makeASensorItem(0x0200, 5, tr("Y motor - positive limit")));//Y电机-正限位
sensorList.append(makeASensorItem(0x0200, 6, tr("Y motor - negative limit")));//Y电机-负限位
sensorList.append(makeASensorItem(0x0200, 7, tr("Rubber discharge position of Y motor")));//Y电机排胶位
sensorList.append(makeASensorItem(0x0201, 0, tr("Low liquid level alarm of large rubber pump A")));//A大胶泵低液位预警
sensorList.append(makeASensorItem(0x0201, 1, tr("Low liquid level shutdown of large rubber pump A")));//A大胶泵低液位停机
sensorList.append(makeASensorItem(0x0201, 2, tr("Low liquid level alarm of large rubber pump B")));//B大胶泵低液位预警
sensorList.append(makeASensorItem(0x0201, 3, tr("Low liquid level shutdown of large rubber pump B")));//B大胶泵低液位停机
sensorList.append(makeASensorItem(0x0201, 4, tr("High liquid level replenishment of small rubber pump A is completed")));//A小胶泵高液位补液完成
sensorList.append(makeASensorItem(0x0201, 5, tr("Low liquid level alarm of small rubber pump A")));//A小胶泵低液位预警
sensorList.append(makeASensorItem(0x0201, 6, tr("Stop at low liquid level of small glue pump A")));//A小胶泵低液位停机
sensorList.append(makeASensorItem(0x0201, 7, tr("High liquid level replenishment of small glue pump B is completed ")));//B小胶泵高液位补液完成
sensorList.append(makeASensorItem(0x0202, 0, tr("Low liquid level alarm of small rubber pump B")));//B小胶泵低液位预警
sensorList.append(makeASensorItem(0x0202, 1, tr("Shutdown of small glue pump B at low liquid level")));//B小胶泵低液位停机
sensorList.append(makeASensorItem(0x0202, 4, tr("Z motor - zero position")));//Z电机-零位
sensorList.append(makeASensorItem(0x0202, 5, tr("Z motor - positive limit")));//Z电机-正限位
sensorList.append(makeASensorItem(0x0202, 6, tr("Z motor - negative limit")));//Z电机-负限位
sensorList.append(makeASensorItem(0x0203, 0, tr("Station 1 left limit")));//工位1左限位
sensorList.append(makeASensorItem(0x0203, 1, tr("Station 1 right limit")));//工位1右限位
sensorList.append(makeASensorItem(0x0203, 2, tr("Station 2 left limit")));//工位2左限位
sensorList.append(makeASensorItem(0x0203, 3, tr("Station 2 right limit")));//工位2右限位
//将机型所需的传感器列表替换到传感器整体列表中
for(int i = 0; i < sensorList.size(); i++)
{
int byteaddr = sensorList[i].m_byte_offset;
int bitaddr = sensorList[i].m_bit_offset;
QString str = sensorList[i].m_name;
int type = sensorList[i].m_type;
int idx = byteaddr*8+bitaddr;
if(idx < m_allSensorList.size())
{
m_allSensorList[idx].m_name = str;
m_allSensorList[idx].m_type = type;
}
}
}
//初始化错误代码和状态列表
void PunchSewMachineYaJiao::initErrorCodeAndStateList()
{
m_allErrorCodeAndStateList.clear();
//错误代码
//m_allErrorCodeAndStateList.append(makeAErrorStateItem(0, tr("")));//
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PLC_DIS, tr("PLC is not allowed to work")));// PLC不允许工作
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PLC_LRNF, tr("Left and right stations are not ready")));// 左右工位未就绪
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PLC_LNF, tr("Left station is not ready")));// 左工位未就绪
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PLC_RNF, tr("Right station is not ready")));// 右工位未就绪
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_MC_NW, tr("The device has not started to work")));// 设备未开始工作
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_MTX_WP, tr("X motor position is abnormal")));// X电机位置异常
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_MTY_WP, tr("Abnormal position of Y motor")));// Y电机位置异常
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_WK_STA_NI, tr("The working state is not initialized")));// 工作状态未初始化
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_AL_LACK, tr("A large glue pump is short of glue")));// A大胶泵缺胶
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_BL_LACK, tr("B large rubber pump is short of glue")));// B大胶泵缺胶
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_AS_LACK, tr("A small glue pump is short of glue")));// A小胶泵缺胶
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_BS_LACK, tr("The small rubber pump B is short of glue")));// B小胶泵缺胶
m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_NOT_RMPOS, tr("The rubber discharge position is not reached")));// 未到排胶位
}

View File

@ -0,0 +1,53 @@
#ifndef PUNCHSEWMACHINEYAJIAO_H
#define PUNCHSEWMACHINEYAJIAO_H
#include "mctype/machinetypefun.h"
//控制动作
#define OT_GLUE_CTRL 0x0001 // 胶枪控制
#define OT_AL_GLUE_CTRL 0x0002 // A大胶泵气动球阀
#define OT_AS_GLUE_CTRL 0x0003 // A小胶泵补料控制
#define OT_BL_GLUE_CTRL 0x0004 // B大胶泵气动球阀
#define OT_BS_GLUE_CTRL 0x0005 // B小胶泵补料控制
//错误代码
#define ERR_PLC_DIS 0x0650 // PLC不允许工作
#define ERR_PLC_LRNF 0x0651 // 左右工位未就绪
#define ERR_PLC_LNF 0x0652 // 左工位未就绪
#define ERR_PLC_RNF 0x0653 // 右工位未就绪
#define ERR_MC_NW 0x0654 // 设备未开始工作
#define ERR_MTX_WP 0x0655 // X电机位置异常
#define ERR_MTY_WP 0x0656 // Y电机位置异常
#define ERR_WK_STA_NI 0x0657 // 工作状态未初始化
#define ERR_AL_LACK 0x0658 // A大胶泵缺胶
#define ERR_BL_LACK 0x0659 // B大胶泵缺胶
#define ERR_AS_LACK 0x065A // A小胶泵缺胶
#define ERR_BS_LACK 0x065B // B小胶泵缺胶
#define ERR_NOT_RMPOS 0x065C // 未到排胶位
class PunchSewMachineYaJiao : public MachineTypeFun
{
Q_OBJECT
public:
PunchSewMachineYaJiao();
~PunchSewMachineYaJiao();
private:
void initRootParasList();//超级用户参数(包括机器参数、工作参数)
void initPatternsParasList();//花样参数
void initMcParasList();//主控机器参数
private:
void initOutCtrlList();//控制动作
void initShortCutList();//快捷动作
void initAssistList();//辅助功能
void initPatternSetList();//花样设置
void initParaSetList();//参数设置
private:
void initSensorList();//初始化传感器列表
void initErrorCodeAndStateList();//初始化错误代码和状态列表
};
#endif // PUNCHSEWMACHINEYAJIAO_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,30 @@
#ifndef TEMPLATESEWMACHINE_H
#define TEMPLATESEWMACHINE_H
#include "mctype/machinetypefun.h"
class TemplateSewMachine : public MachineTypeFun
{
Q_OBJECT
public:
TemplateSewMachine();
~TemplateSewMachine();
private:
void initRootParasList();//超级用户参数(包括机器参数、工作参数)
void initPatternsParasList();//花样参数
void initMcParasList();//主控机器参数
void initWkParasList();//主控工作参数
private:
void initOutCtrlList();//控制动作
void initShortCutList();//快捷动作
void initAssistList();//辅助功能
void initPatternSetList();//花样设置
void initParaSetList();//参数设置
void initDebugFunList();//初始化调试功能
private:
void initSensorList();//初始化传感器列表
void initErrorCodeAndStateList();//初始化错误代码和状态列表
};
#endif // TEMPLATESEWMACHINE_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,298 @@
#ifndef MainWidget_H
#define MainWidget_H
#include <QDebug>
#include <QWidget>
#include <QDateTime>
#include <QResource>
#include <QMouseEvent>
#include "main.h"
#include "mctype/mainwidgetfunction.h"
#include "sharedviews/promptdialog.h"
#include "sharedviews/patternselectwidget.h"
#include "sharedviews/colorordersetwidget.h"
#include "sharedviews/parametersetdialog.h"
#include "sharedviews/patternmanagewidget.h"
#include "sharedviews/sensorinputwidget.h"
#include "sharedviews/controlactionwidget.h"
#include "sharedviews/sheetwidget.h"
#include "sharedviews/setworkarea.h"
#include "sharedviews/needlebarsetwidget.h"
#include "sharedviews/rotacomwidget.h"
#include "sharedviews/debugviews/debugdialog.h"
#include "sharedviews/debugviews/dialogneedleshuttle.h"
#include "sharedviews/debugviews/dialogcutline.h"
#include "sharedviews/debugviews/dialogdiecutter.h"
#include "machine/error.h"
#include "mctype/patternsingleboard/function/punchmachine.h"
#include "mctype/patternsingleboard/function/punchsewembmachine.h" // lxs 20220614 建立这个机型界面
#include "mctype/patternsingleboard/function/punchsewmachine.h"
#include "mctype/patternsingleboard/function/adhesivemachine.h"
#include "mctype/patternsingleboard/function/autopospunchmachine.h" // xcy 20220902 建立这个机型界面
#include "mctype/patternsingleboard/function/templatesewmachine.h"//模板缝纫机
#define INTERFACE_SHORTCUT 1 //快捷功能界面
#define INTERFACE_ACCESS 2 //辅助功能界面
namespace Ui {
class MainWidget;
}
class MainWidget : public QWidget
{
Q_OBJECT
public:
explicit MainWidget(QWidget *parent = 0);
~MainWidget();
private:
Ui::MainWidget *ui;
PatternSelectWidget *m_pPatternSelectWi;//花样选择窗体
ColorOrderSetWidget *m_pColorOrderSetWi;
NeedleBarSetWidget *m_pNeedleBarSetWi;//针杆设定
ParameterSetDialog *m_pParameterSetDlg;//参数设定窗体
PatternManageWidget *m_pPatternManageWi;//花样管理窗体(花样导入、导出...)
SensorInputWidget *m_pSensorInputWi;
ControlActionWidget *m_pControlActionWi;
MainWidgetFunction *m_pMainWidgetFunction;//功能函数结构体
SheetWidget *m_pSheetWi;
SetWorkArea *m_pSetWorkAreaWi;
RotaComWidget *m_pRotaComWi;//旋转补偿
QList<MyButton*> m_quickBtnList;//快捷功能中的快捷按钮列表
QList<QLabel*> m_quickLabelList;//快捷功能中的label显示列表
QList<MyButton*> m_shortCutBtnList;//窗体下方的快捷按钮列表
QList<MyButton*> m_assistBtnList;//辅助功能中的辅助按钮列表
QList<QLabel*> m_assistLabelList;//辅助功能中的label显示列表
QList<MyButton*> m_patternSetBtnList;//花样设置中的花样设置按钮列表
QList<QLabel*> m_patternSetLabelList;//花样设置中的label显示列表
QList<MyButton*> m_paraSetBtnList;//参数设置中的参数设置按钮列表
QList<QLabel*> m_paraSetLabelList;//参数设置中的label显示列表
QList<MyButton*> m_debugBtnList;//调试功能中的辅助按钮列表
QList<QLabel*> m_debugLabelList;//调试功能中的label显示列表
QString m_usbPath;//优盘路径
QString m_rootPath;//操作屏根路径
QString m_curPath;//当前路径
s32 m_fileIdx; //文件ID
int m_pageNums;//总页数
int m_curPages;//快捷界面当前页数
private:
void initialize();//初始化
public:
void initAllWindows(s16 ifHMIDecrypt = 1, s16 connectMode = 0);//初始化窗体
void initMcTypeWindows();//不同机型不同的窗体设置
private:
void initQuickFunBtn();//初始化快捷功能中的快捷按钮
QList<ShortCutItem> m_quickItemList;//快捷功能中的快捷条目列表
void initAssisitBtn();//初始化辅助功能中的辅助按钮
QList<AssistItem> m_assistItemList;//辅助功能中的辅助按钮列表
void initDebugBtn();//初始化辅助功能中的调试按钮
QList<DebugItem> m_debugItemList;//辅助功能中的调试按钮列表
void initPatternSetBtn();//初始化花样设置功能中的花样设置按钮
QList<PatternSetItem> m_patternSetItemList;//花样设置功能中的花样设置条目列表
void initParaSetBtn();//初始化参数设置功能中的参数设置按钮
QList<ParaSetItem> m_paraSetItemList;//参数设置功能中的参数设置条目列表
QList<ErrorCodeStateItem> m_errorCodeAndStateItemList;//错误代码和状态列表
private:
QList<QPushButton*> m_colorBtnList;
u32 m_workStatus;//工作状态
int m_curRpm;
int m_curDatIdx;//当前针数索引
int m_curColorIdx;//当前色序
int m_showColorIdxBegin;
int m_forwardBackNeedleIdx;//前进回退时的针数索引
int m_forwardBackColorIdx;//前进回退时的颜色索引
s16 m_ifHMIDecrypt;//界面是否授权1代表已授权解密过0代表未授权解密过
s16 m_connectMode;//通讯连接方式 0:网口1:串口
private:
MCStatus m_mcStatus;
u32 m_errorCode;//记录报错代码
int m_initflag;//初始化标志
int m_timoutflag;//超时标志
QTimer * m_pTimer;//建立连接的定时器
QTimer * m_pConTimer;//检测上下位机心跳包的定时器
QTimer * m_pMinTimer;//记录当前时间的定时器
QTimer * m_pRefreshVer; //刷新版本信息
QTimer * m_pWifiConTimer;//检测wifi是否连接的定时器
SetControlStyle m_setControlStyle;
QTimer * m_pRefreshPatternTimer;//更新花样显示的定时器(测试用)
int m_conFlag;//连接标志
int m_linkSta;//连接状态
int m_itemPerPage;//快捷界面每页按钮数
EmbData::DISP_MODE m_dispMode;
QPixmap m_embBackPix;//绘制预览图的背景图
QString m_curFilePath;//当前选择的花样路径
int m_needle; //当前花样针数
DataFileHead m_fileHead;//fcg
FileExecPara m_expara;
int m_patternSelectStation;//花样选择的工位
u8 m_fileColorTable[0x400-0x200]; // 文件最初色序表, 支持512个色序设定
private:
int m_speedLevel;//速度等级
private:
void setFrameNineBtnStyle();
private:
void clearFileInfo();//清除文件信息
void initControl();//初始化窗体控件,包括位置、尺寸、样式
void initResolution1910();//初始化窗体控件为1920x1080分辨率
void initResolution1006();//初始化窗体控件为1024x600分辨率
void initControlStyle();//初始化窗体控件样式
QString getBackImagePath(s16 waterMark);//获取背景图的加载路径
void refreshPageUi(s16 type);//刷新界面显示
private:
void sendInitString(QString str);//发送初始化字符串
void refConnectUi(int alive);//刷新连接状态(1秒)
//刷新连接状态
void refConnectUi(Machine * pMachine,int & linkSta, int alive);
void hideMenuFrame();//隐藏菜单栏(frame)
void resetAllData();//重置所有数据
void refreshShowColorUi();
void patternSelect(int station = 0);//花样选择
void patternColorSet();//色序设定
void patternColorSetHeadHight();//花样机头高度
void patternSwitching(QString fileid);//花样切换
private:
void showExecInfo();//显示机器运行状态中的信息
void showPatternPreview();//显示花样显示页面
private:
void setCommonBtn();//设置常用按钮
QString getCommonBtnStyle(int idx);//获取常用按钮样式
void runCommonBtnFunction(int idx);//执行常用按钮功能
void runAssistBtnFunction(int funEnum,int idx);//执行辅助按钮功能
void runPatternSetBtnFunction(int funEnum,int idx);//执行花样设置按钮功能
void runDebugBtnFunction(int funEnum);//执行调试按钮功能
void setUiBtnEnable(bool bValue);//设置UI界面按钮的使能
private:
void reSetDatIdx(int newidx);
void funForwardOrBack();//前进回退
void addOrDecNeedleIdx(int &idx); //加减针
void addOrDecColorIdx(int &idx,s16 flag); //按颜色数前进回退
signals:
void siSendLoadingMessage(QString info, int alignment, QColor color);//接受加载信息
void siSpeedLevel(int speed);//手动换挡
private slots:
void slotWaitTimout();//等待超时
void slotMachineStatus(int toggle);//机器状态
void slotRefreshWifiIcon(bool bl);
private slots:
//选择花样后是否弹出花样参数设置窗体并设置花样参数(默认显示花样参数设置窗体)
void slotShowPatternPara(QString filePath,s16 showFlag = 0);
void slotIfFileExist();//删除文件后判断当前文件是否被删除
void slotClearPatternFcg();//删除fcg后重新选择花版
void slotReplacePattrn(QString path);//花样导入替换文件
void slotSetPatternData();//设置花样数据
void slotShowFrameAngleWi();//显示动框角度设置界面
void slotPunchManualChangeColor();//冲孔手动换色
public slots:
void slotChangeProgressBar(int value);
private slots:
void slotQuickBtnClick();//快捷功能中的快捷按钮被点击
void slotShortCutBtnClick();//界面下方的快捷按钮被点击
void slotAssistBtnClick();//辅助功能中的辅助功能按钮被点击
void slotDebugBtnClick();//调试功能按钮被点击
void slotPatternSetBtnClick();//花样设置中的花样设置按钮被点击
void slotParaTypeBtnClick();//参数设置中的参数功能按钮被点击
void slotSetButtonRootLogo(int level);//设置超级用户图标
void slotClearPatternBreakLineNum();//清空花版断线次数
void slotResetStartPos(DataFilePos pos);//边框检查超限后重新定起始点
void slotDebugState();//界面调试模式
void slotCloseRootPara();//关闭超级用户参数窗体
void slotChangeColorTable(int selColor,int colorIdx);//改变色序
void slotColorOrderChange();//色序设定之后发送文件头
void slotReSetData(QByteArray table);
private slots:
void onRefreshVer();//刷新版本信息定时器
void onRefreshPatternTimer();//1秒定时器(刷新花样测试用)
void onOneSecondTimer();//1秒定时器
void onFiveSecondTimer();//5秒定时器
void onTenMiniteTimer();//10分钟定时器
void onOneMinTimer();//1分钟定时器
void on_buttonMainMenu_clicked();//主界面按钮
void on_buttonPatternSet_clicked();//花样设置按钮
void on_buttonParaSet_clicked();//参数设定按钮
void on_buttonShortcutFunction_clicked();//快捷功能按钮
void on_buttonAccessFunction_clicked();//辅助功能按钮
void on_buttonSpeedAdd_clicked();
void on_buttonSpeedDec_clicked();
void on_buttonNineBtnUp_pressed();
void on_buttonNineBtnUp_released();
void on_buttonNineBtnDown_pressed();
void on_buttonNineBtnDown_released();
void on_buttonNineBtnLeft_pressed();
void on_buttonNineBtnLeft_released();
void on_buttonNineBtnRight_pressed();
void on_buttonNineBtnRight_released();
void on_buttonNineBtnMiddle_pressed();//九宫格中间键按下
void on_buttonNineBtnMiddle_released();//九宫格中间键抬起
void on_buttonNineBtn1_clicked();
void on_buttonNineBtn2_clicked();
void on_buttonNineBtn3_clicked();
void on_buttonNineBtn4_clicked();
void on_buttonPatternInfo_clicked();//花样参数快捷按钮
void on_buttonNeedleBegin_clicked();
void on_buttonNeedleEnd_clicked();
void on_buttonNeedleDec1_clicked();
void on_buttonNeedleAdd1_clicked();
void on_buttonNeedleDec10_clicked();
void on_buttonNeedleAdd10_clicked();
void on_buttonNeedleDec100_clicked();
void on_buttonNeedleAdd100_clicked();
void on_buttonNeedleDec1000_clicked();
void on_buttonNeedleAdd1000_clicked();
void on_buttonNeedleDec10000_clicked();
void on_buttonNeedleAdd10000_clicked();
void on_buttonForwardBackOk_clicked();
void on_buttonForwardBackCancel_clicked();
void on_buttonUser_clicked();
void on_buttonShortCutPgUp_clicked();
void on_buttonShortCutPgDn_clicked();
void on_buttonAssistPgUp_clicked();
void on_buttonAssistPgDn_clicked();
void on_buttonColorAdd_clicked();
void on_buttonColorDec_clicked();
void on_buttonNeedle_clicked();
void on_buttonDebugClose_clicked();
};
#endif // MainWidget_H

File diff suppressed because it is too large Load Diff

102
settings/lotsettings.h Normal file
View File

@ -0,0 +1,102 @@
#ifndef LOTSETTINGS_H
#define LOTSETTINGS_H
//物联网数据key
//上行数据属性列表
#define U00001 "progress" //完成进度(%) int
#define U00002 "products" //生产数量 int
#define U00003 "Action" //动作(0:开始;1:停止;9:剪线) int
#define U00004 "Turns" //转速 int
#define U00005 "xInitCoordinate" //定位点x int
#define U00006 "ynitCoordinate" //定位点y int
#define U00007 "xCoordinate" //当前点位x int
#define U00008 "yCoordinate" //当前点位y int
#define U00009 "realTime" //一天机器实际工作时间时间戳 int
#define U00010 "estimatedTime" //标准时间完成一件产品时间时间戳 int
#define U00011 "totalWork" //工作总量 int
#define U00012 "totalTime" //一天生产总时间时间戳 int
#define U00013 "machineTime" //一天机器做工工作时间时间戳 int
#define U00014 "TotalNeedle" //累计针数 int
#define U00015 "totalTime" //累计刺绣时间 int
#define U00016 "machineName" //机器(设备)名称 string
#define U00017 "deviceID" //设备(机器)ID string
#define U00018 "RackNumber" //机器编号(机架号) int
#define U00019 "Oline" //是否在线(0:离线;1:在线) int
#define U00020 "ErrorCode" //错误编码 int
#define U00021 "Message" //提示信息 string
#define U00022 "MachineEdition" //机器版本 string
#define U00023 "AlarmInformation" //报警信息 string
#define U00024 "TotalAuthorizationTime" //授权总时间(min) int
#define U00025 "AuthorizationTimeRemaining"//授权剩余时间(min) int
#define U00026 "StartupTime" //开机时间(min) int
#define U00027 "RunningTime" //运行时间(min) int
#define U00028 "CurrentProduction" //当前产量 int
#define U00029 "OutputSetting" //产量设定 int
#define U00030 "InterfaceVersion" //界面版本 string
#define U00031 "StagesPasswordState" //分期密码状态(0:未设置;1:已设置) int
#define U00032 "RemoteUpgradeState" //是否远程升级(0,1) int
#define U00033 "DeviceStatus" //设备状态编码 int
#define U00034 "spindleZeroSta" //主轴零位状态 int
#define U00035 "SpindleAngle" //主轴角度 int
#define U00036 "Frame_X" //绣框X坐标 int
#define U00037 "Frame_Y" //绣框y坐标 int
#define U00038 "StartButton1" //启动按钮1(0,1) int
#define U00039 "PauseButton1" //暂停按钮1(0,1) int
#define U00040 "JogButton1" //点动按钮1(0,1) int
#define U00041 "MFrameX_Z" //主框架X零位 int
#define U00042 "MFrameY_Z" //主框架Y零位 int
#define U00043 "MFrameX_N" //主框架X负限位 int
#define U00044 "MFrameY_N" //主框架Y负限位 int
#define U00045 "MFrameX_P" //主框架X正限位 int
#define U00046 "MFrameY_P" //主框架Y正限位 int
#define U00047 "ScissorsReturn" //剪刀回位(0,1) int
//0 断电(离线)
//1 上电(在线)
//2 开始工作(工作)
//3 结束工作(待机)
//WorkingState=0/1/2时StartTime、EndTime均可不传
#define U00048 "WorkingState" //工作状态
#define U00049 "StartTime" //开始时间
#define U00050 "EndTime" //结束时间
#define U00051 "Pins" //区间针数
#define U00052 "CurrentProduction" //当前产量 int
#define U000102 "electric_total" //电机总数 int
#define U000103 "sensor_total" //传感器总数 int
#define U000118 "realityTime" //手动输入实际交付时间 string
#define U000119 "manualProgress" //手动输入安装/调试进度 int
#define U000120 "hookMode" //勾线模式
#define U000121 "taperedMode" //锁头模式
#define U000122 "sewHeadNumbers" //缝纫机头个数
#define U000123 "embHeadNumbers" //绣花机头个数
#define U000124 "embneedleNumbers" //绣花机针个数
#define U000125 "punchHeadNumbers" //冲孔机头个数
#define U000126 "punchneedleNumbers" //冲孔机针个数
#define U000149 "WorkProgress" //机器工作进度
#define S0504 0 //断电(离线)
#define S0505 1 //上电(在线)
#define S0506 2 //开始工作(工作)
#define S0507 3 //结束工作(待机)
//下行数据属性列表
#define D00001 "StagesPassword " //分期密码 string
#define D00002 "Start" //开机指令(0,1) bool
#define D00003 "Stop" //停止指令(0,1) bool
#define D00004 "SetTurns" //设置转速 int
#define D00005 "RemoteUpgrade" //远程升级(0,1) bool
//传感器信号索引对应的excel表
#define S00000 "S00000" //启动按钮
#define S00010 "S00010" //暂停按钮
#define S00020 "S00020" //点动按钮
#define S00070 "S00070" //气压检测
#define S00200 "S00200" //主框架X零位
#define S00201 "S00201" //主框架Y零位
#define S00220 "S00220" //主框架X负限位
#define S00221 "S00221" //主框架Y负限位
#define S00230 "S00230" //主框架X正限位
#define S00231 "S00231" //主框架Y正限位
#define S01000 "S01000" //剪刀回位
#endif // LOTSETTINGS_H

469
settings/settings.cpp Normal file
View File

@ -0,0 +1,469 @@
#include "settings.h"
#include <qrgb.h>
#include <bits/stdc++.h>
using namespace std;
Settings::Settings()
{
m_configFile.clear();
m_HMIconfigFile.clear();
}
void Settings::loadSetting(QString configfile)
{
if (configfile.isEmpty() == false)
{
m_configFile = configfile;
}
fillDefaultColor();
}
void Settings::loadHMISetting(QString configfile)
{
if (configfile.isEmpty() == false)
{
m_HMIconfigFile = configfile;
}
}
//写入值到ini文件
void Settings::writeToIniFile(QString key, QVariant value)
{
if(m_configFile.length() <= 0){return;}
QSettings iniSetting(m_configFile, QSettings::IniFormat);
iniSetting.setValue(key,value);
//qDebug()<<"key"<<key;
#ifdef Q_OS_LINUX
system("sync");
#endif
}
//写入值到ini文件
void Settings::writeToInHMIiFile(QString key, QVariant value)
{
if(m_HMIconfigFile.length() <= 0){return;}
QSettings iniSetting(m_HMIconfigFile, QSettings::IniFormat);
iniSetting.setValue(key,value);
//qDebug()<<"key"<<key;
#ifdef Q_OS_LINUX
system("sync");
#endif
}
QVariant Settings::readFromIniFile(QString key)
{
if(m_configFile.length() <= 0){return -1;}
QSettings iniSetting(m_configFile, QSettings::IniFormat);
return iniSetting.value(key);
}
//从HMIini文件读取值
QVariant Settings::readFromInHMIiFile(QString key)
{
if(m_HMIconfigFile.length() <= 0){return -1;}
QSettings iniSetting(m_HMIconfigFile, QSettings::IniFormat);
return iniSetting.value(key);
}
bool Settings::ifKeyExists(QString key)
{
if(key.length() <= 0){return false;}
if(m_configFile.length() <= 0){return false;}
QSettings iniSetting(m_configFile, QSettings::IniFormat);
return iniSetting.contains(key);
}
bool Settings::ifHMIKeyExists(QString key)
{
if(m_HMIconfigFile.length() <= 0){return false;}
QSettings iniSetting(m_HMIconfigFile, QSettings::IniFormat);
return iniSetting.contains(key);
}
//hsb转换成rgb
void Settings::HSItoRGB(float h,float s,float i,float *r,float *g,float *b)
{
int hi = ((int)h / 60) % 6;
float f = h / 60 - hi;
float p = i * (1 - s);
float q = i * (1 - f * s);
float t = i * (1 - (1 - f) * s);
switch(hi)
{
case 0:
*r = i; *g = t; *b = p;
break;
case 1:
*r = q; *g = i; *b = p;
break;
case 2:
*r = p; *g = i; *b = t;
break;
case 3:
*r = p; *g = q; *b = i;
break;
case 4:
*r = t; *g = p; *b = i;
break;
case 5:
*r = i; *g = p; *b = q;
break;
default:
break;
}
*r = (int)((*r) * 255);
*g = (int)((*g) * 255);
*b = (int)((*b) * 255);
}
void Settings::fillDefaultColor()
{
m_colorRGB.clear();
#if (1)
vector<pair<float, float> > sbv;
sbv.push_back(make_pair(1, 0.7)); //尾部插入数字
sbv.push_back(make_pair(0.82, 0.7));
sbv.push_back(make_pair(0.64, 0.7));
sbv.push_back(make_pair(0.46, 0.7));
sbv.push_back(make_pair(0.28, 0.7));
sbv.push_back(make_pair(0.1, 0.7)); // 灰色单独处理,不调用此处的值
sbv.push_back(make_pair(0.1, 1));
sbv.push_back(make_pair(0.28, 1));
sbv.push_back(make_pair(0.46, 1));
sbv.push_back(make_pair(0.64, 1));
sbv.push_back(make_pair(0.82, 1));
sbv.push_back(make_pair(1, 1));
float hv[] = {0, 15.6, 31.3, 46.9, 62.6, 78.2, 93.9, 109.5, 125.2, 140.8, 156.5, 172.1, 187.8, 203.4, 219.1, 234.7, 250.4, 266.0, 281.7, 297.3, 313.0, 328.6, 344.3, 360.0};
QRgb rgb[MC_SW_ND];
int num = 0;
for(int i = 0; i < 12; i ++)
{
if (i == 5)
{// 显示灰色
for(int j = 0; j < 24; j ++)
{
rgb[num ++] = qRgb((255-j*(255/24)), (255-j*(255/24)),(255-j*(255/24)));
}
}
else
{// 显示彩色
float s = sbv[i].first;
float b = sbv[i].second;
for(int j = 0; j < 24; j ++)
{
if(j==24)
{
float R = 225;
float G = 225;
float B = 225;
HSItoRGB(hv[j], s, b, &R, &G, &B);
rgb[num ++] = qRgb(R, G, B);
}
else
{
float R, G, B;
HSItoRGB(hv[j], s, b, &R, &G, &B);
rgb[num ++] = qRgb(R, G, B);
}
}
}
}
for (int i = 0; i < MC_SW_ND; i++)
{
m_colorRGB.append((char*)(&(rgb[i])), sizeof(QRgb));
}
#else
u8 r, g, b;
u8 * prgb;
const int cnum = 243; // 3的5次方
int rcount = 0;
int gcount = 0;
int bcount = 0;
int temp;
r = 102;
g = 255;
b = 154;
for (int i = 0; i < cnum; i++)
{
if ((rcount <= gcount) && (rcount <= bcount))
{
prgb = &r;
rcount++;
rcount %= 5;
}
else if ((gcount <= rcount) && (gcount <= bcount))
{
prgb = &g;
gcount++;
gcount %= 5;
}
else if ((bcount <= rcount) && (bcount <= gcount))
{
prgb = &b;
bcount++;
bcount %= 5;
}
else
{
break;
}
temp = *prgb;
temp += (int)(51.2*3 + 0.5);
if (temp > 255)
{
temp -= 256;
}
*prgb = temp;
m_colorRGB.append(r);
m_colorRGB.append(g);
m_colorRGB.append(b);
m_colorRGB.append(255);
}
#endif
}
void Settings::writeToCsv(QString strText,int type)
{
QString filePath;
filePath.clear();
QDir apppath(qApp->applicationDirPath());
if(type == TYPE_ERROR)
{
filePath = apppath.path() + apppath.separator() + CSV_ERROR;
}
else if(type == TYPE_BREAK)
{
filePath = apppath.path() + apppath.separator() + CSV_BREAK;
}
else if(type == TYPE_DEBUGINFO)
{
filePath = apppath.path() + apppath.separator() + CSV_DEBUGINFO;
}
if(filePath.length() <= 0){return;}
QFile file(filePath);
if (file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))
{
QString strCurTime = QDateTime::currentDateTime().toString("yyyy/MM/dd/hh:mm:ss");//时间
QString strMessage;
QTextStream in(&file);//写
if(type == TYPE_DEBUGINFO)
{
strMessage = QString("%1//%2").arg(strCurTime).arg(strText);//时间,内容
}
else
{
strMessage = QString("%1,%2").arg(strCurTime).arg(strText);//时间,内容
}
in << strMessage << '\n';
#ifdef Q_OS_LINUX
system("sync");
#endif
file.close();
}
}
//清除超过三十天的信息
void Settings::clearToCsv(int type)
{
QString filePath;
filePath.clear();
QStringList tempbar;
tempbar.clear();
QDir apppath(qApp->applicationDirPath());
if(type == TYPE_ERROR)
{
filePath = apppath.path() + apppath.separator() + CSV_ERROR;
}
else if(type == TYPE_BREAK)
{
filePath = apppath.path() + apppath.separator() + CSV_BREAK;
}
else if(type == TYPE_DEBUGINFO)
{
filePath = apppath.path() + apppath.separator() + CSV_DEBUGINFO;
}
if(filePath.length() <= 0){return;}
QStringList strAlarmInfoList;
int timeFlag = 0;
QFile file(filePath);
if (file.open(QIODevice::ReadOnly))
{
QTextStream out(&file);//读
QStringList tempOption = out.readAll().split("\n");
// 获取系统当前时间
QDateTime dateTime = QDateTime::currentDateTime();
int curSecond = dateTime.toTime_t();//当前时间转换为秒
int differSecond = curSecond-25920000; //30天 = 2592000秒
QDateTime newDateTime;
for (int i = 0; i < tempOption.count(); i++)//tempOption文件里的所有行
{
if(type == TYPE_DEBUGINFO)
{
tempbar= tempOption.at(i).split("//");//获取每一行 以“//”号分开
}
else
{
tempbar = tempOption.at(i).split(",");//获取每一行 以“,”号分开
}
QString listTime =tempbar.at(0);
int newTime = newDateTime.fromString(listTime, "yyyy/MM/dd/hh:mm:ss").toTime_t();//将字符串转换为秒
//没超过30天的存在列表里
if(newTime >= differSecond)
{
tempbar.removeLast();//一共有2项时间内容移除最后一项
if (tempbar.size() > 0)
{
if (tempbar.at(0).indexOf(QString("DateTime")) != -1)
continue;
strAlarmInfoList << tempOption[i];
}
else
{
return;
}
}
else
{
if(newTime != -1)//第一行读不到时间newTime会等于-1
{
timeFlag = 1;
}
}
}
if(timeFlag == 1)
{
fileClear(filePath);//清除文件内容
for(int i =0;i<strAlarmInfoList.size();i++)
{
writeToCsv(strAlarmInfoList.at(i),type);
}
}
if(strAlarmInfoList.size()>800)
{
fileClear(filePath);//清除文件内容
}
}
#ifdef Q_OS_LINUX
system("sync");
#endif
file.close();
return;
}
QStringList Settings::readToCsv(int type)
{
QStringList strAlarmInfoList;
strAlarmInfoList.clear();
QStringList strInfoList;
strInfoList.clear();
QStringList newTempOption;
newTempOption.clear();
QString allinfo;
allinfo.clear();
QStringList tempbar;
tempbar.clear();
QString filePath;//文件
filePath.clear();
QDir apppath(qApp->applicationDirPath());
if(type == TYPE_ERROR)
{
filePath = apppath.path() + apppath.separator() + CSV_ERROR;
}
else if(type == TYPE_BREAK)
{
filePath = apppath.path() + apppath.separator() + CSV_BREAK;
}
else if(type == TYPE_DEBUGINFO)
{
filePath = apppath.path() + apppath.separator() + CSV_DEBUGINFO;
}
if(filePath.length() <= 0){return strAlarmInfoList;}
QFile file(filePath);
if (file.open(QIODevice::ReadOnly))
{
QTextStream out(&file);//读
QStringList tempOption = out.readAll().split("\n");
for (int i = 0; i < tempOption.count(); i++)//tempOption文件里的所有行
{
if(type == TYPE_DEBUGINFO)
{
tempbar= tempOption.at(i).split("//");//获取每一行 以“//”号分开
}
else
{
tempbar = tempOption.at(i).split(",");//获取每一行 以“,”号分开
}
if (tempbar.size() > 0)
{
//DateTime不显示
if (tempbar.at(0).indexOf(QString("DateTime")) != -1)
continue;
}
QString time = tempbar.at(0);//一共有2项时间内容
QString info ="'";
if(time.length() > 0)
{
info = tempbar.at(1);
time.remove(" ");//清除空格
if(type == TYPE_DEBUGINFO)
{
allinfo=time+"//"+info;
}
else
{
allinfo=time+","+info;
}
newTempOption.append(allinfo);
strInfoList << newTempOption[newTempOption.count()-1];
}
}
for(int i = 0; i < strInfoList.count(); i++)
{
//if( (i != 0) && (((strInfoList.count() - 1 - i) >= 0 ) && ((strInfoList.count() - 1 - i) < strInfoList.count())))
if( ((strInfoList.count() - 1 - i) >= 0 && ((strInfoList.count() - 1 - i) < strInfoList.count())))
{
strAlarmInfoList << strInfoList[strInfoList.count() -1- i]; //xcy 0313 日志倒序显示
}
}
}
#ifdef Q_OS_LINUX
system("sync");
#endif
file.close();
return strAlarmInfoList;
}
//清除文件内容,不是删除文件
void Settings::fileClear(QString filePath)
{
QFile file(filePath);
file.open(QFile::WriteOnly|QFile::Truncate);
#ifdef Q_OS_LINUX
system("sync");
#endif
file.close();
}

56
settings/settings.h Normal file
View File

@ -0,0 +1,56 @@
#ifndef SETTINGS_H
#define SETTINGS_H
#include <QByteArray>
#include <QString>
#include <QSettings>
#include <QDebug>
#include <QFile>//csv使用到
#include <QDateTime>
#include <QStringList>
#include <QDir>
#include <QApplication>
#define MC_SW_ND 448 // 最大换色数 原为288,lxs20220803客户有一个花样需要448色序,进行更改
#define CSV_ERROR "csverro.csv"
#define CSV_BREAK "breakag.csv"
#define CSV_DEBUGINFO "debuginfo.csv"
#define CSV_PROGRESS "progress.csv"
#define TYPE_ERROR 0
#define TYPE_BREAK 1
#define TYPE_DEBUGINFO 2
class Settings
{
public:
Settings();
public:
void loadSetting(QString configfile);
inline QByteArray & getColorRgbArray() {return m_colorRGB;}
void writeToIniFile(QString key, QVariant value);//写入值到ini文件
QVariant readFromIniFile(QString key);//从ini文件读取值
bool ifKeyExists(QString key);//判断是否存在键值
void loadHMISetting(QString configfile);
void writeToInHMIiFile(QString key, QVariant value);//写入值到HMIini文件
QVariant readFromInHMIiFile(QString key);//从HMIini文件读取值
bool ifHMIKeyExists(QString key);//判断是否存在键值
void writeToCsv(QString strText,int type = 0);
QStringList readToCsv(int type = 0);
void clearToCsv(int type = 0);
void fileClear(QString filePath);
private:
QByteArray m_colorRGB;
QString m_configFile;
QString m_HMIconfigFile;
private:
void fillDefaultColor();
void HSItoRGB(float h,float s,float i,float *r,float *g,float *b);//hsb转换成rgb
};
#endif // SETTINGS_H

View File

@ -0,0 +1,165 @@
#include "brokenlinedialog.h"
#include "ui_brokenlinedialog.h"
BrokenLineDialog::BrokenLineDialog(QWidget *parent) :
QWidget(parent),
ui(new Ui::BrokenLineDialog)
{
ui->setupUi(this);
setWindowFlags (Qt::Window | Qt::FramelessWindowHint);
setWindowModality(Qt::ApplicationModal );//用以设置窗口模态类型 ,ApplicationModal阻塞整个应用程序的所有窗口
initWidget();
initControl();
}
BrokenLineDialog::~BrokenLineDialog()
{
delete ui;
}
void BrokenLineDialog::initWidget()
{
ui->labelContent->setText("");
ui->labelContentInfo->setText("");
}
void BrokenLineDialog::initControl()
{
//根据不同分辨率设置控件的位置和尺寸
switch (g_emResolut)
{
case resolution1910:
initResolution1910();
break;
case resolution1006:
initResolution1006();
break;
default:
this->resize(1920,1080);
break;
}
initControlStyle();//初始化窗体控件样式
}
void BrokenLineDialog::initResolution1910()
{
//上状态栏
this->resize(1322,820);
//this->move((1920-this->width())/2,(1080-this->height())/2);
this->move(192,62);
ui->frameBack->setGeometry(0,0,1322,820);
ui->labelTitle->setGeometry(20,15,900,56);
ui->labelContent->setGeometry(12,58,1300,700);
ui->labelContentInfo->setGeometry(12,58,1300,700);
ui->buttonOk->setGeometry(1110,710,174,60);
}
void BrokenLineDialog::initResolution1006()
{
//上状态栏
this->resize(710,460);
//this->move((1024-this->width())/2,(600-this->height())/2);
this->move(100,30);
ui->frameBack->setGeometry(0,0,710,460);
ui->labelTitle->setGeometry(10,-5,500,56);
ui->labelContent->setGeometry(15,56,680,340);
ui->labelContentInfo->setGeometry(15,56,680,340);
ui->buttonOk->setGeometry(590,400,96,40);
}
//初始化窗体控件样式
void BrokenLineDialog::initControlStyle()
{
SetControlStyle setControlStyle;
setControlStyle.setUiName(this->objectName());
//设置控件图标
//背景图
ui->frameBack->setStyleSheet(TRANSPARENTSTYLE);
this->setStyleSheet(LABELWHITESTYLE);
ui->frameBack->setStyleSheet(setControlStyle.getStyleSheet(this->objectName()));
ui->labelTitle->setStyleSheet(LABELWHITESTYLE);
ui->labelTitle->setFont(fontNormal_1);
ui->labelTitle->setAlignment(Qt::AlignLeft);
ui->labelTitle->setAlignment(Qt::AlignVCenter);
//数字
ui->labelContent->setStyleSheet(LABELREDSTYLE); // 断线机头 红色 字体加大 -rq
ui->labelContent->setFont(fontNormal_10);
ui->labelContent->setAlignment(Qt::AlignCenter);//文字水平垂直居中
ui->labelContentInfo->setStyleSheet(LABELREDSTYLE); // 断线机头文字 红色 字体加大 -rq
QFont font;//设置断线文字大小
if(g_emResolut == resolution1006 )
{
font.setPixelSize(51);
}
else if (g_emResolut == resolution1910)
{
font.setPixelSize(101);
}
font.setFamily(FONTTYPE);//字体
ui->labelContentInfo->setFont(font);
ui->labelContentInfo->setAlignment(Qt::AlignCenter);//文字水平垂直居中
ui->buttonOk->setWhiteBlueBottomStyle();
ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()+"_1"),8);
ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()+"_1"));
}
//设置标题
void BrokenLineDialog::setTitleStr(QString str)
{
ui->labelTitle->setText(str);
}
//设置内容
void BrokenLineDialog::setContentInfoStr(QString str)
{
ui->labelContent->setText("");//数字的控件清空
ui->labelContent->hide();//数字的控件隐藏
ui->labelContentInfo->setText(str);//设置文字的控件内容
ui->labelContentInfo->show();//文字的控件显示
}
void BrokenLineDialog::setContentStr(QString str)
{
ui->labelContentInfo->setText("");
ui->labelContentInfo->hide();
ui->labelContent->setText(str);
ui->labelContent->show();
}
void BrokenLineDialog::show(int flag)
{
if(flag == 1)//断线弹窗
{
//数字
ui->labelContent->setStyleSheet(LABELREDSTYLE); // 断线机头 红色 字体加大 -rq
ui->labelContent->setFont(fontNormal_10);
ui->labelContent->setAlignment(Qt::AlignCenter);//文字水平垂直居中
ui->labelContentInfo->setStyleSheet(LABELREDSTYLE); // 断线机头文字 红色 字体加大 -rq
QFont font;//设置断线文字大小
font.setPixelSize(101);
font.setFamily(FONTTYPE);//字体
ui->labelContentInfo->setFont(font);
ui->labelContentInfo->setAlignment(Qt::AlignCenter);//文字水平垂直居中
}
else if (flag == 4)//扎线报警弹窗
{
ui->labelContent->setStyleSheet(LABELREDSTYLE);
QFont font;//设置文字大小
font.setPixelSize(200);
font.setFamily(FONTTYPE);//字体
ui->labelContent->setFont(font);
ui->labelContent->setAlignment(Qt::AlignCenter);//文字水平垂直居中
}
QWidget::show();
}
void BrokenLineDialog::on_buttonOk_clicked()
{
this->hide();
}

Some files were not shown because too many files have changed in this diff Show More