From 6bb609026df640d264ba8aa6cf3b91f205165a12 Mon Sep 17 00:00:00 2001 From: huahaiyan <3686255842@qq.com> Date: Tue, 6 Feb 2024 14:58:57 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lot/csvcode.h | 10 + XPlatForm.pro | 208 + XPlatForm.pro.user.37f85c8 | 297 + chinese.qm | Bin 0 -> 274533 bytes chinese.ts | 19409 ++++++++++++++++ csvcode.h | 4 + datafile/datafiledsr.cpp | 1379 ++ datafile/datafiledsr.h | 225 + datafile/datafiledst.cpp | 1168 + datafile/datafiledst.h | 153 + datafile/dsrcryption.cpp | 319 + datafile/dsrcryption.h | 33 + datafile/embdata.cpp | 2876 +++ datafile/embdata.h | 190 + english.qm | Bin 0 -> 121 bytes english.ts | 19407 +++++++++++++++ items/assistitem.cpp | 43 + items/assistitem.h | 36 + items/cmdconfig.h | 256 + items/debugitem.cpp | 43 + items/debugitem.h | 36 + items/errorcodestateitem.cpp | 37 + items/errorcodestateitem.h | 33 + items/fileitem.cpp | 63 + items/fileitem.h | 48 + items/itemsmanage.cpp | 1782 ++ items/itemsmanage.h | 104 + items/outctrlitem.cpp | 101 + items/outctrlitem.h | 68 + items/paraitem.cpp | 77 + items/paraitem.h | 101 + items/parasetitem.cpp | 44 + items/parasetitem.h | 36 + items/patternsetitem.cpp | 43 + items/patternsetitem.h | 36 + items/sensoritem.cpp | 46 + items/sensoritem.h | 34 + items/shortcutitem.cpp | 43 + items/shortcutitem.h | 35 + machine/comm/comm.cpp | 438 + machine/comm/comm.h | 205 + machine/comm/config.h | 13 + machine/comm/crc16.cpp | 159 + machine/comm/crc16.h | 60 + machine/comm/crc32.cpp | 74 + machine/comm/crc32.h | 33 + machine/comm/datadef.h | 493 + machine/comm/protocol.h | 1929 ++ machine/comm/typedef.h | 107 + machine/comport.cpp | 153 + machine/comport.h | 43 + machine/error.cpp | 119 + machine/error.h | 12 + machine/gatewaytcpclient.cpp | 335 + machine/gatewaytcpclient.h | 72 + machine/lotmachine.cpp | 289 + machine/lotmachine.h | 73 + machine/machine.cpp | 2481 ++ machine/machine.h | 354 + machine/qbindtcpsocket.cpp | 186 + machine/qbindtcpsocket.h | 53 + machine/qextserial/posix_qextserialport.cpp | 1117 + machine/qextserial/posix_qextserialport.h | 57 + machine/qextserial/qextserialbase.cpp | 250 + machine/qextserial/qextserialbase.h | 196 + machine/qextserial/qextserialport.cpp | 98 + machine/qextserial/qextserialport.h | 27 + machine/qextserial/win_qextserialport.cpp | 880 + machine/qextserial/win_qextserialport.h | 48 + machine/tcpclient.cpp | 501 + machine/tcpclient.h | 102 + main.cpp | 437 + main.h | 249 + mctype/machinetypefun.cpp | 110 + mctype/machinetypefun.h | 45 + mctype/mainwidgetfunction.cpp | 5507 +++++ mctype/mainwidgetfunction.h | 273 + .../function/adhesivemachine.cpp | 963 + .../function/adhesivemachine.h | 54 + .../function/autopospunchmachine.cpp | 2020 ++ .../function/autopospunchmachine.h | 32 + .../function/punchmachine.cpp | 2053 ++ .../function/punchmachine.h | 32 + .../function/punchmachineAutoPos.cpp.autosave | 1996 ++ .../function/punchmachineAutoPos.h.autosave | 32 + .../function/punchsewembmachine.cpp | 4499 ++++ .../function/punchsewembmachine.h | 33 + .../function/punchsewmachine.cpp | 2737 +++ .../function/punchsewmachine.h | 32 + .../punchsewmachineYaJiao.cpp.autosave | 958 + .../function/punchsewmachineYaJiao.h.autosave | 53 + .../function/templatesewmachine.cpp | 4499 ++++ .../function/templatesewmachine.h | 30 + .../patternsingleboard/mainUI/mainwidget.cpp | 5156 ++++ mctype/patternsingleboard/mainUI/mainwidget.h | 298 + .../patternsingleboard/mainUI/mainwidget.ui | 6713 ++++++ settings/lotsettings.h | 102 + settings/settings.cpp | 469 + settings/settings.h | 56 + sharedviews/brokenlinedialog.cpp | 165 + sharedviews/brokenlinedialog.h | 48 + sharedviews/brokenlinedialog.ui | 158 + sharedviews/colorordersetwidget.cpp | 1689 ++ sharedviews/colorordersetwidget.h | 131 + sharedviews/colorordersetwidget.ui | 706 + sharedviews/controlactionwidget.cpp | 665 + sharedviews/controlactionwidget.h | 77 + sharedviews/controlactionwidget.ui | 1577 ++ sharedviews/debuginfodialog.cpp | 249 + sharedviews/debuginfodialog.h | 47 + sharedviews/debuginfodialog.ui | 651 + sharedviews/debugviews/debugdialog.cpp | 315 + sharedviews/debugviews/debugdialog.h | 99 + sharedviews/debugviews/debugdialog.ui | 102 + sharedviews/debugviews/dialogcutline.cpp | 292 + sharedviews/debugviews/dialogcutline.h | 63 + sharedviews/debugviews/dialogcutline.ui | 487 + sharedviews/debugviews/dialogdiecutter.cpp | 227 + sharedviews/debugviews/dialogdiecutter.h | 69 + sharedviews/debugviews/dialogdiecutter.ui | 419 + .../debugviews/dialogneedleshuttle.cpp | 440 + sharedviews/debugviews/dialogneedleshuttle.h | 106 + sharedviews/debugviews/dialogneedleshuttle.ui | 809 + sharedviews/mybutton.cpp | 348 + sharedviews/mybutton.h | 81 + sharedviews/needlebarsetwidget.cpp | 629 + sharedviews/needlebarsetwidget.h | 75 + sharedviews/needlebarsetwidget.ui | 295 + sharedviews/numerinputdialog.cpp | 793 + sharedviews/numerinputdialog.h | 90 + sharedviews/numerinputdialog.ui | 1052 + sharedviews/parametersetdialog.cpp | 2622 +++ sharedviews/parametersetdialog.h | 159 + sharedviews/parametersetdialog.ui | 563 + sharedviews/passworddialog.cpp | 290 + sharedviews/passworddialog.h | 49 + sharedviews/passworddialog.ui | 3930 ++++ sharedviews/patternmanagewidget.cpp | 1589 ++ sharedviews/patternmanagewidget.h | 122 + sharedviews/patternmanagewidget.ui | 1026 + sharedviews/patternselectwidget.cpp | 912 + sharedviews/patternselectwidget.h | 97 + sharedviews/patternselectwidget.ui | 813 + sharedviews/promptdialog.cpp | 1252 + sharedviews/promptdialog.h | 136 + sharedviews/promptdialog.ui | 1118 + sharedviews/rotacomwidget.cpp | 820 + sharedviews/rotacomwidget.h | 90 + sharedviews/rotacomwidget.ui | 884 + sharedviews/sensorinputwidget.cpp | 571 + sharedviews/sensorinputwidget.h | 89 + sharedviews/sensorinputwidget.ui | 680 + sharedviews/setcontrolstyle.cpp | 207 + sharedviews/setcontrolstyle.h | 37 + sharedviews/setworkarea.cpp | 194 + sharedviews/setworkarea.h | 59 + sharedviews/setworkarea.ui | 216 + sharedviews/sheetwidget.cpp | 540 + sharedviews/sheetwidget.h | 78 + sharedviews/sheetwidget.ui | 299 + sharedviews/systemmanagedialog.cpp | 820 + sharedviews/systemmanagedialog.h | 113 + sharedviews/systemmanagedialog.ui | 747 + sharedviews/wordsinputdialog.cpp | 399 + sharedviews/wordsinputdialog.h | 54 + sharedviews/wordsinputdialog.ui | 2214 ++ 166 files changed, 135961 insertions(+) create mode 100644 Lot/csvcode.h create mode 100644 XPlatForm.pro create mode 100644 XPlatForm.pro.user.37f85c8 create mode 100644 chinese.qm create mode 100644 chinese.ts create mode 100644 csvcode.h create mode 100644 datafile/datafiledsr.cpp create mode 100644 datafile/datafiledsr.h create mode 100644 datafile/datafiledst.cpp create mode 100644 datafile/datafiledst.h create mode 100644 datafile/dsrcryption.cpp create mode 100644 datafile/dsrcryption.h create mode 100644 datafile/embdata.cpp create mode 100644 datafile/embdata.h create mode 100644 english.qm create mode 100644 english.ts create mode 100644 items/assistitem.cpp create mode 100644 items/assistitem.h create mode 100644 items/cmdconfig.h create mode 100644 items/debugitem.cpp create mode 100644 items/debugitem.h create mode 100644 items/errorcodestateitem.cpp create mode 100644 items/errorcodestateitem.h create mode 100644 items/fileitem.cpp create mode 100644 items/fileitem.h create mode 100644 items/itemsmanage.cpp create mode 100644 items/itemsmanage.h create mode 100644 items/outctrlitem.cpp create mode 100644 items/outctrlitem.h create mode 100644 items/paraitem.cpp create mode 100644 items/paraitem.h create mode 100644 items/parasetitem.cpp create mode 100644 items/parasetitem.h create mode 100644 items/patternsetitem.cpp create mode 100644 items/patternsetitem.h create mode 100644 items/sensoritem.cpp create mode 100644 items/sensoritem.h create mode 100644 items/shortcutitem.cpp create mode 100644 items/shortcutitem.h create mode 100644 machine/comm/comm.cpp create mode 100644 machine/comm/comm.h create mode 100644 machine/comm/config.h create mode 100644 machine/comm/crc16.cpp create mode 100644 machine/comm/crc16.h create mode 100644 machine/comm/crc32.cpp create mode 100644 machine/comm/crc32.h create mode 100644 machine/comm/datadef.h create mode 100644 machine/comm/protocol.h create mode 100644 machine/comm/typedef.h create mode 100644 machine/comport.cpp create mode 100644 machine/comport.h create mode 100644 machine/error.cpp create mode 100644 machine/error.h create mode 100644 machine/gatewaytcpclient.cpp create mode 100644 machine/gatewaytcpclient.h create mode 100644 machine/lotmachine.cpp create mode 100644 machine/lotmachine.h create mode 100644 machine/machine.cpp create mode 100644 machine/machine.h create mode 100644 machine/qbindtcpsocket.cpp create mode 100644 machine/qbindtcpsocket.h create mode 100644 machine/qextserial/posix_qextserialport.cpp create mode 100644 machine/qextserial/posix_qextserialport.h create mode 100644 machine/qextserial/qextserialbase.cpp create mode 100644 machine/qextserial/qextserialbase.h create mode 100644 machine/qextserial/qextserialport.cpp create mode 100644 machine/qextserial/qextserialport.h create mode 100644 machine/qextserial/win_qextserialport.cpp create mode 100644 machine/qextserial/win_qextserialport.h create mode 100644 machine/tcpclient.cpp create mode 100644 machine/tcpclient.h create mode 100644 main.cpp create mode 100644 main.h create mode 100644 mctype/machinetypefun.cpp create mode 100644 mctype/machinetypefun.h create mode 100644 mctype/mainwidgetfunction.cpp create mode 100644 mctype/mainwidgetfunction.h create mode 100644 mctype/patternsingleboard/function/adhesivemachine.cpp create mode 100644 mctype/patternsingleboard/function/adhesivemachine.h create mode 100644 mctype/patternsingleboard/function/autopospunchmachine.cpp create mode 100644 mctype/patternsingleboard/function/autopospunchmachine.h create mode 100644 mctype/patternsingleboard/function/punchmachine.cpp create mode 100644 mctype/patternsingleboard/function/punchmachine.h create mode 100644 mctype/patternsingleboard/function/punchmachineAutoPos.cpp.autosave create mode 100644 mctype/patternsingleboard/function/punchmachineAutoPos.h.autosave create mode 100644 mctype/patternsingleboard/function/punchsewembmachine.cpp create mode 100644 mctype/patternsingleboard/function/punchsewembmachine.h create mode 100644 mctype/patternsingleboard/function/punchsewmachine.cpp create mode 100644 mctype/patternsingleboard/function/punchsewmachine.h create mode 100644 mctype/patternsingleboard/function/punchsewmachineYaJiao.cpp.autosave create mode 100644 mctype/patternsingleboard/function/punchsewmachineYaJiao.h.autosave create mode 100644 mctype/patternsingleboard/function/templatesewmachine.cpp create mode 100644 mctype/patternsingleboard/function/templatesewmachine.h create mode 100644 mctype/patternsingleboard/mainUI/mainwidget.cpp create mode 100644 mctype/patternsingleboard/mainUI/mainwidget.h create mode 100644 mctype/patternsingleboard/mainUI/mainwidget.ui create mode 100644 settings/lotsettings.h create mode 100644 settings/settings.cpp create mode 100644 settings/settings.h create mode 100644 sharedviews/brokenlinedialog.cpp create mode 100644 sharedviews/brokenlinedialog.h create mode 100644 sharedviews/brokenlinedialog.ui create mode 100644 sharedviews/colorordersetwidget.cpp create mode 100644 sharedviews/colorordersetwidget.h create mode 100644 sharedviews/colorordersetwidget.ui create mode 100644 sharedviews/controlactionwidget.cpp create mode 100644 sharedviews/controlactionwidget.h create mode 100644 sharedviews/controlactionwidget.ui create mode 100644 sharedviews/debuginfodialog.cpp create mode 100644 sharedviews/debuginfodialog.h create mode 100644 sharedviews/debuginfodialog.ui create mode 100644 sharedviews/debugviews/debugdialog.cpp create mode 100644 sharedviews/debugviews/debugdialog.h create mode 100644 sharedviews/debugviews/debugdialog.ui create mode 100644 sharedviews/debugviews/dialogcutline.cpp create mode 100644 sharedviews/debugviews/dialogcutline.h create mode 100644 sharedviews/debugviews/dialogcutline.ui create mode 100644 sharedviews/debugviews/dialogdiecutter.cpp create mode 100644 sharedviews/debugviews/dialogdiecutter.h create mode 100644 sharedviews/debugviews/dialogdiecutter.ui create mode 100644 sharedviews/debugviews/dialogneedleshuttle.cpp create mode 100644 sharedviews/debugviews/dialogneedleshuttle.h create mode 100644 sharedviews/debugviews/dialogneedleshuttle.ui create mode 100644 sharedviews/mybutton.cpp create mode 100644 sharedviews/mybutton.h create mode 100644 sharedviews/needlebarsetwidget.cpp create mode 100644 sharedviews/needlebarsetwidget.h create mode 100644 sharedviews/needlebarsetwidget.ui create mode 100644 sharedviews/numerinputdialog.cpp create mode 100644 sharedviews/numerinputdialog.h create mode 100644 sharedviews/numerinputdialog.ui create mode 100644 sharedviews/parametersetdialog.cpp create mode 100644 sharedviews/parametersetdialog.h create mode 100644 sharedviews/parametersetdialog.ui create mode 100644 sharedviews/passworddialog.cpp create mode 100644 sharedviews/passworddialog.h create mode 100644 sharedviews/passworddialog.ui create mode 100644 sharedviews/patternmanagewidget.cpp create mode 100644 sharedviews/patternmanagewidget.h create mode 100644 sharedviews/patternmanagewidget.ui create mode 100644 sharedviews/patternselectwidget.cpp create mode 100644 sharedviews/patternselectwidget.h create mode 100644 sharedviews/patternselectwidget.ui create mode 100644 sharedviews/promptdialog.cpp create mode 100644 sharedviews/promptdialog.h create mode 100644 sharedviews/promptdialog.ui create mode 100644 sharedviews/rotacomwidget.cpp create mode 100644 sharedviews/rotacomwidget.h create mode 100644 sharedviews/rotacomwidget.ui create mode 100644 sharedviews/sensorinputwidget.cpp create mode 100644 sharedviews/sensorinputwidget.h create mode 100644 sharedviews/sensorinputwidget.ui create mode 100644 sharedviews/setcontrolstyle.cpp create mode 100644 sharedviews/setcontrolstyle.h create mode 100644 sharedviews/setworkarea.cpp create mode 100644 sharedviews/setworkarea.h create mode 100644 sharedviews/setworkarea.ui create mode 100644 sharedviews/sheetwidget.cpp create mode 100644 sharedviews/sheetwidget.h create mode 100644 sharedviews/sheetwidget.ui create mode 100644 sharedviews/systemmanagedialog.cpp create mode 100644 sharedviews/systemmanagedialog.h create mode 100644 sharedviews/systemmanagedialog.ui create mode 100644 sharedviews/wordsinputdialog.cpp create mode 100644 sharedviews/wordsinputdialog.h create mode 100644 sharedviews/wordsinputdialog.ui diff --git a/Lot/csvcode.h b/Lot/csvcode.h new file mode 100644 index 0000000..cf8ccae --- /dev/null +++ b/Lot/csvcode.h @@ -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 diff --git a/XPlatForm.pro b/XPlatForm.pro new file mode 100644 index 0000000..093233c --- /dev/null +++ b/XPlatForm.pro @@ -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_ + diff --git a/XPlatForm.pro.user.37f85c8 b/XPlatForm.pro.user.37f85c8 new file mode 100644 index 0000000..38649b4 --- /dev/null +++ b/XPlatForm.pro.user.37f85c8 @@ -0,0 +1,297 @@ + + + + + + EnvironmentId + {37f85c89-6fa5-437b-ab42-a8f793baa331} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Arm + Arm + {5193437b-bed9-404f-9b07-632a0d6f24f0} + 1 + 0 + 0 + + /mnt/hgfs/workQT/punching/arm + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + /mnt/hgfs/workQT/punching/arm + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 2 + + + + true + Check for free disk space + + RemoteLinux.CheckForFreeDiskSpaceStep + + + + + + / + 5242880 + + + true + Upload files via SFTP + + RemoteLinux.DirectUploadStep + + + + + + false + true + + 2 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy to Remote Linux Host + + DeployToGenericLinux + + 1 + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 1 + + XPlatForm (on Remote Device) + + RemoteLinuxRunConfiguration:XPlatForm + + XPlatForm + + false + + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/chinese.qm b/chinese.qm new file mode 100644 index 0000000000000000000000000000000000000000..61348ff58564ae604375c8ae1edebb65f7735cbd GIT binary patch literal 274533 zcmXWkby!qQ7Xa`xbGB0~?8H_KurUx2JF#0q#XwOE3@k9P5il?j1iKXrQAA8Etk+iT zZpHe}p85Xp`8{)Y*}XCM%$c~WM~Z);bMIHjTr6Gec>fK@?ll7#S`Pqf0IYOV9zDy7 zvZ+efaIz-AijAzudqr9HvC@4VD?d8^t`-Ov9V8SXO?TN!F$EVX_{1pR5m}oFu&fPGqto|5s(X^2+i*l&;%JAAnW9B>ju) zNVWh-|ILbuj`z0!QQfg0v`?pgv7+KRW%Z?G2Y@wYSW&~VKb-;A)+f6GTx!pXYR*cx zqhxp5?l?c)K~#%Yy60!*@Bhdi0GC}^QSF%0y%9MSAkuN(hJu(kgB(kze6KQU11pwJ zW~JX{L-4T;Gco`5GxJtX5XHu=0yW`9uA^{CQB7bGLxz+ev_3?Um0SvZBsf&=yDq zu}OSS^F3dS-j1Y+i{Kt<`ps?!jdl+Lpy?UqD-z&d;fVFA7rti%ENTrRL0qNK)b6pz{o^ajJgThW19hj+p)r=SB|CQ zr0p_&321*&>^V9Kbe6>c)gqNMyDK-oQzoodCfQjrb37|sR8rpjrTo!`#a;727kdg| zu8tLR_JO`B-PiLEv0}c797Ofqv7Ma%mKF2sva*AEUEcc0WlR|c`mP%(Zp~Lljbz2r zcC7U4ue|Hb;?XoP28jth`?V@+LdB_hH2{D=Y6$gnUVk?R!|UtQRZqpN0JEH6XjzP~J^qF?9*#f4vmM z+3GC1J%_@5Xn)!UvZ9ke6w^@bvW$dchIb&%87z*k2gPpF_bfBAV(E2O-gAdyU*`bS zY08R5<)Gw7$NT!SBC0Ga??phVO^)q*SrHY?%6m7UbdwSke~v0ozK3!JXMpVUhsD!< zpqz6smEBm(SOzu5QQLCo6x8ZF3PkN&P|qz7#h>4-C_fhJW!3~yZznWZ5e8z@S{9wU zLPN*KuFA@FomlL%4*UX=0rpG* zzgdwK*Iu!hxe&TYich6WK$nxb0Q>Gh_k)K3&NqYZC+C9r)Ss1Wo3hyZ8gzeg1!T+G zEbfkho*s4(+wQaI91A@|UjZD@K+oi8kVOh95BaeeJ|B8bpzX!GDvzvUan4!j^D7yI z+f(Sos9^&I7b(yW;8&&m#sl(*G(Oj!ft2K}XY(p?!< zhZRdpu+p!x@=gwmMNhFQ~&;~7<5PZaSAKf1hClaJ;Wcq2BJtG*w}^Q$m{RqOptG? zlC#JGWH=d1Mv&*p*&yFi6P!);f4i1aB#M7mIzeJp%8j3NgdNq+QM=R{4t=5fJg74q zo$C#9+HW{|;uAouFDqiI!s++)x$Q=>3ExdQ)W+OadTHVyP3Av znx;Jai^bKS-~xaCakymn1G)P!T-i+b(~}g)c1Z_uw-AfXFT>r_eL)sjqTKhB#pww5 z#4vy(#o&QUTab^Jz=QK$K%_Kdu}m(!?nnDszJc<%2a8L#!|PR4-(4mvgJ&x*jbcTa zEali1tgL!Td1?=f%bURmTLgfcqBMHeFV)U$7wwaX=iinQq2ZDeqqEit+5bw^gGHwKm zJ*JD!uWNxEby4)(76Q=h87o?>5xr{e2f6Hs=v9x5sUiBM(|%rR$;w$478?lR58ePb z9*DpZHv!V@Vt6OIJ}nEeqFs;(UPpbLVk<>R!K;*qZxNvfvqAPAz~ZSBBJ9T(kUbBv zm|j>+n-&7H*8&#P--y{i>GQCLhzvUk@@a9gs4lff``@rwDnTqBOz}%R5KG*tecXG3 z#S)=nY4t%Mir*4ZJLvr1>?>jf)t?pT#j5XN^!_jr_qZ8dCvR4a%M{5u@gOT3Sd5-5 zwwWlNzn{R0B4t_mwT<#u9g&*3kM{c?i|PHu@uf~6vhK5TW&(@#W5w~UbUfYPuy~@4 zNFPo0a{WS94(Z3D*+-n3SsG-S4lFK67iVUF0daaiE2q?AvF1o|t~*`Nr)ey9m?+NE zJq-uzi1U%z06C?_)o!$3uWpK)Pf4%d%9|z@w;mNYpVRgatHsT)r2A9lg@r7x>n?77 zr|s|4#NAVLKKz!kc=WS)KFu4%&RMJ+)q=$$4aMsoe?h)$B;I7+1i4_Cc>j^k_ZbiI z!JqDnul>ZAO`oVe4`k7~wD>dbINjf)#J_8l4;k7@QR5MvkNT_}JcUKmM~U8)udSXY z_0y={t-Zv`fYK})=SYJ#i~7X-SkY&@G&S-B*mjnr>$=^W^dhH|R6n;LB`JT~{)42x z><)L*mmE#DAh(e%$rsX^=1k)!snQno5a4G!nWqKi%Wy*GIW-34^GNBmoW?%Z&r!x3 zSW#p(D}Oq(2*J{6#bp{-Y0ZjCiOL#pS@~o5`YVCySn- zK7Gh)R*WwsORpFW@=r(Ua*+D&?@?BGLg%;gds%VVPwLM_$!e|z0NOWXg`ZAVOG^OA z=pbuSn*dunNVhRLATC~JvEE!+|7tTTFK4k{d)Y80hwkHk(j%14tLcmMoL?HmmLjYi zagD|NSEbiwijRH1vtqzT<-3Y3c7G_no_+;!Ac4iwy`|5kCLmsCvDkICY<@2dgz>0s zeVO9&fnn0``vibLPh>a8@l^dOyDz5iEjUN^`uTvyJ_@m-S4-I|m&#oSv!Z9B?DdPv zoqMyQ+cnwiH|N{{5`U%=xIdl}oH$z2b za&H#L#L1v%G~TlyLyqoD`}N!^M=zrN%qS{@OBSHx`^;kLt#WLX1bFjSj!mNT@7bIc zzOH0#fcwqllubw`%jr-Waa2h zES5PTBQ#VGKYx(3WquHG6K@!Ew*e-GrP`yo@Di?Hs} z1z0hB;yft8E@vDm7*Oua|r3NG7O zTwF??+Pezi@Nt<@{t>{$pR5S|%gP3=lvxHA6RMGq0YcldVp3~XHdv#~>ds=qbn*$k zZv!hPtzcz?56Y}$dA7qy8Y^7KiiYdu#r&-Rk}t}OgQ$wd;Y$STVwj zmCmb_2i~zb(<-m5O{e~PIaYM4Ag_7N0CD9IE5l=1^az&MM$-Mo-vR(`K5Z{4H3+sDj`R_XGt6cm4U z%Li{M?$mF_iYAYgaUm?~s>++e}Hu`22K`zoxMH~{r&^!kkTteA0)q}ONMWyMSb>QB<^(`&F|`a+Uk zpFV;W(@&y4-SPShR?MLHr91xKg%vXb&@h4G#*w|O9D9Mq^25<+UjuTiFWM8=0{mXa zN_}+}gX7UDuLSw-GUn6J^@<*Z`Rx7xji<80+esP!g_VI7S+s7$0-vgYoV*AN{ux5! zGL>05yc3Ig9%JDT%|Ny<%;LdNEYd2Q#tW{qa_wIh`?SC!k)HV-4Y(u|NPAg|3KxZf~;Kglf~Ziu&!%QfW0HI zLGd8~4_2c`m&PCqCMgeSSe#J=8##xANS(xDrCQh|Pbx@#jxxC@i(|TBv$Y`z%-!8^(dW zo}Z*~lXJ_l_tX&Tf4#UbM%dHL1ON zJP?OA>OhLqb@Q^K(Mz0G zj@psr!8l`e7LD)y!tBpn^_Rw9l2|;c$5r(cXgqc@ zi>Y^Tga2+2_QII3YZlFmxv^qi5^jn63Q%%7ZgI>Bl~{pWuI&Jkv51wE=CN3#Ic`5h z-xJf170YsQ2gmb%xF@6mh?=Rm_agNZZVzW=q=`lEvbfJ_3+2hH@X!is4|*rDn4!mG z!`p$Z^B;>F+G5&e`u;!zD~4~x6WgdBr1@j|r*f1>Eo9~N`YhJ=A*1L#A7jyF9G<1I zE^z9m0E}Bnazld}5~S zs9&#ax{MXgmnb(!v2w&57W22l9LIR|?8B^>9Zs$Rn0c2KGvDBgLJN1@r?=@rP!bdFn=4!azhKGRF zZ8fgLIs$x{sd1g*@Rp`}-&PbCI%{gYr+9rRMC0a0wRz=Y<*@;*DDSOtmy~zkE~Tj* zwg6zzc2*3|*3=pNl;S`>P2&<2U&UY+hu_vTT|no_`xlGbduco$Q9WqUj}>jxHJ)E@ zQhY0=@d^#0`{+N7ujBo7!dYDZUDM{p9*~0`YkKA+Q2)Fdiv^!*dhb0&d1Gl-cqVB2 zv};WLv(B16L+SJWIBEPR(Y#Bk^BVuXdnkTw(Tw~t4#fFnR!)y(u}*(YaJ?4*16Q*m z;DPerKNg3L(FE7;OL>2LR*W9O%JOfN$Dgvew4Wx#?F7ih>6-DIC{MlU!(!b(n(=>V z`^zGl34VV8Ml@hW&|J-=1p}!cScnyVS(-_^=zBy*W!+#_H1<@kFtM^<2^M9pW^%_E z5G4YYRl-^MTc?@)nBrGvOBQPh&E#Km04~neOr1;P9=agq#-S{Zex#W;csH#HD9egw zOEuH`mI1LfnZ<(rH8b!NNNut*ek+Tki)v;ac?bwP&8$1rPm}F5b7ohddDPmh7!{d7yCer-Y3uTi_tnhiHOuoX(;c7ePo2S`M z<43YZE{nT+YIZigL~9P3Yj)0}@7XZ@|K4Xsfuc%hsVvt@S;vc&f74jZ9H`m3irRz9 zCe4wp)DQS_Omk#UDH>mLCMjOF{Kbm)9?Hwe%30woHaJ55NAGW=;daueBa7R2YmR-V z`n4`sb9`z%fU8E6mP+@<&KfKhexW(Jo!WzzUs&AZr#Tf`j{5mUl%D668}ld=f|Q9> zS>ck=@sSmzM5D0Xg=$|P*%>jv*=S( z^ZL&hnr9rK`KZy;czGultC%!j|7--|yj%0VH03o1{%F2`$)&vbh35BvE;Ns`Li6u6 z#kY6USQ%HI#U6FF8pm;4w=2Duu%cC0<%t=roY0-cs`a%NN!NetA+2Rq0L6!u$}0O= z`MbI{PrwQg>yEH;u!cp`SaKz8&t>J{rYxHFX!EbnPivVXS+S-tEB%$IzoK}Xvo3>`dU}}ddv0`vvatxJ+vtsZ{ZO!x1 z)L)BdF-2njwrOvQGkbbyo7Jc5 z-nbzvylyDt_p);6D;BN8wXKiPeb_Qenb?;V?H*}cKcw$HIak}Z=Mxaw!&z)nR@*Ua zBfxoswucYJy<+8+0cKVVwX;$?N*OuB<3JT3Ie#S*3)s)LzoRMTM$j=S6^S;vkee?l~6_#rkIM!KJ z>7ZQ^L;bl*5iBnIp^e+*P4gtDwX3Vp_4B{ZiXjhKsX45SH?ugZns#+hx-WjV(ykt* z0g>37mBS)g%#&ZcE@ujjKOJDj&_r!ggJ=+sezMqRw>CL8faXCKX*XBCP2+X@SWBpd7?d?oCqiqwC76X2Pj-p*)Ee6o!2Yx4`$_}Z!ESf zp*_F;7xlxxXm3@d{%XPR$^#u)oH0y$d%*yTD^s<1?$P}-cs?rv1GM+M{sZ}Mr}okG zFq+qWz{;>kEV?b%KHl7s=9dqUodC*NNQy7z29gw4%B5&kdl1ixSqa)_lPC}9U6{pF zq1ty-Khu0(RqcnWRR4ai)P7nTP2&@TwO?I7(t4o&+V2~m(*9ItMW9(H__(_$+Y457 zzNWmtj+Kk6ve>elPIOoaFglbKV^mpIF>+a+%w#cUiq7CTzh~>|%(qX`Jegf*+eQ7) zGRZ71EUL2)rR$IqqbqRXFZGiPu;_kKSK$38x_%>A(WI2FV7vP?zuHyjOzXbHzu_zf z-q#iB<4)tk+gK5rqAPVU9K_3atc=aWqTeQ6g#msbOQf?nua2(Dv}QCfGl&%fitDPn z)4HiK`^honUtP726rWptVsURLo$CoLh*Psz8G4Mx>J4@7UIOHy8M->b#X-2<(A6vH zLgS)USUfOaSKo#5?Smt99vS?3*b48-61EDqhK z^FAC-`Q$)lS{D|VUe~qJYy~Laf!t0;>DqK%1Ts$_<*o-TPP(jXJ2jHVE$Zt!-l4qt zUM7mM@v>HI5Qp>gqII{ybJL0n(PV$;^Tz$ZIE*50JN=)>ar z!n(j5+U{LkdGjQT+otM9xW&*s(* zovfJfSr=rZ@`NF*m>8=IvQv3tNmhi`*9A?X^0a-dm`>ZLQh9nZE2e+f1%*+0Mt@e! zSfvY^M&+4>STVDaZd7Bccbf0I(Y;^O`k>3o4Ph(>dFjR$oeR=ZUAZ-p#qseZt!uDM zS8n~x;`qSjCcqv-Rx+3o3gx=L2`Y@wUooywhlu%g>| z-RwS8?lzbey_V=^_jSB~A1ivk(ajBvrun^@y2uJtuUqY5ac^E7_p>gy)6J(fX>fX$ zZhkJUSKGdsyh^?#X`XRMCEenZ&UF9nXT^Y_x+Np2{i)W6#pRcEE2q#r7f#cy+?565 zWHyV{7U<$iEe2sq(Z$hrh&;}U$f~+E)4XVH_j*?Jov&Nl`XP;H_t&ilvf?7$hP>|q z?nUZ0OriVHG+pV{g%!@#l`Z}%4=-h9@B|jiwbaE|p!noGN|)G*j{8&zU1CNBkgX51 zxUYyV$yk!+NfLC)|E|*f$V}aqVH%ph+{cQ^v8-&kRC&ouw{;V>mo1O8xThpZ`O>^% zteCrBx2+cC9nC5#uRmsS%Us>IMEc%-TXp*?zM}Ezr@Di87tuP5R>~7MS&TlWI~34_ z;>$-}YSIOY)9$PoQ&^WKAJe>2ZC(1)epDZp=`Pz!05loH3ZMD9%g?F5Q`Djy_?i`i zE3gvUD%YK1aafw}O5IkJM_$!k8{CQFpOfytz-*9kmBrycy1S0!aNDgsAHd>T7u{V) ze?z3`?tb*7>*=q1*kB#4b8yyiyB4lxML6i5{-XOOq>%2JHH_AeSy&PML-#tq9gVj| zDR=&4F;uI2-_IRnLoa3458cQ2CuqJlgO%e_S*$!&_jR#1)$enx==E0jV;Pkjq_e`a zt?pNP4#+NbSUeW1mvw1e^_ZI;>rp&>FK^;OnUyt(&KU*&WGkhxj<8eTNNRx6Vg^*@m`zvd=b(V(2Z#uR#e zT4PpBJ4n*&(?VG>?X|w9X9mFJ7*jzHJ2`09z@g zPj6PVwz6`4LYyZ>MTx(*AI`Pai{h-S>YGW%B4Q~aldH%C}f;|{P`C&K7NJLQE0CBY)D2GAy_v&^jHzu(dTvmVUMpJqYEn9!*C0+kS9V>^`Wzn9hzc*qn z?Z-pq*8D7v>#TpQ=|}w-U;Se~?}J#;K31O-MtS|A$9fgdhq5BPxBe;Dmk#=unbbc0 zt*3ugoZ{)r-TE&@Jwd*nPc|b@=)a6UM&kz~^j~|^xJ;NIE5aV@zs=tOF!dlS!aD1J z?79hJMH5!`>%bybH|VeWf~cHk$m?5$`af1f!MK_fmzNowM|}rbDzEZr5f&pO49>ZM z^t{7jL(zZK&UCNEir(!ErQ=(I*j0_iB2NuvBHU>m-5^%<`MFVlH{`O#42f)9vi`B@p|#bSpGhN`^3E`}QIztH-U4ThR0 zs2{WaB#VV68QeR*qkQKlDvk3yT7IMF zBUc5psI5fObCRo)Sk(42v`M0NX=jw7-G~Pir>h#;?V)ymcTYo4n-_>R3s^LG8+!Bm zE*l1vzD|q2x3jWR6Xl6vEH2w)7~ma3?ehv&#EfTUcUKnE78(3=>A5)Fd_zE+M0!r9 zrgG~*7RMzR0^(h0e*XfCmBJ0djVMlf+)`c+V==LwVcemr6koI~c0OhpzqTT+%SteW zZCU|x@I`VZ$RPy{v-?oo?U9!ieG0QOHo>sK=1KkF8p?J(Skbwu^4!}8j2eje4=!Rf3Bj5S<(P5pk;Y~_|?EQb6vT(Nwl^VY<0?Pf>1FM6`rF)vB^ z!h zq%oMqu{lP2ZOWtj?qtQlw#EY0a%p_JzOmr*`v7Mj8cRQ<`u}Q+u}nq+Jul?WiaB?T z6-H5f+8x1Su|~#f+o_+IQ=7$hZ;jP=E~e)SJdCw^O3Hsu8*9hVcw&W}#(Hn_gSha4 zl`~GWSU1^NKmQXtP7h=K(tl}QuZYnjvKPp5Qkj~E#l_={jnl@_eC%gdPQS`xovp@Z zZnS^*4;g)ou9SD)V8xWx#^weZmk_5|98uTU-0}KYXI6w9Fg8y)M91-k#bVoxtwvP> zu=^X^mX4=(&1h`fjpB9Qr6k4cykCrMj})PHxu&uG)?t)ao-uYhLgzETr*iKB7Q^-# zyOcgf&t;&o%Sp<6YlSOgvsn?dm6g5UDj%$5F{7=~F|H$ZpIHnZZ0!Av)^#OjlbQ59 zL}TNCd9-eK(iP)?7Zg|L<`@SxcuM=(+~{92lh$K>Gmco_joQmC%A-43oL}5Hely(< zvJ8tOVvLg-6{G%ZC*x$AJd;tgjgt%B2eD@mi^Yo?C%^3mqGo^Nl;ut|e>TZDA+8T+Wd{3=W5I>289{t zt)=r)WR~*KF&4wW8RuQ0{jTJ1oZrI*plo~Nq8(Q!t4VwA?MW-F5qvN-0a zF)EghtJhT)Pt`I;d(m-q%~0Nb&*JfN#@H64s9)aF7&~D(<+HBF*vJry!^@RNO0hV{ zWQ<+9gZh;@#<-c$wBF3wxO!g@UFY)3jb&LJz0$ZQoZ`f^FRYl}-MHR|_WPvWxITbf zSJ;>|jpEGvhO8(Yz{;-$l)r>AX$QrTH4BVeO($r7UKw{Brv68elX2IL4In2zH}0R9 zPVGuvW6C_Lx5hFoj*T%Mq4iL*Knvx*eJoBpVm!8izIT2tRzxl}rWV>y>k&4xBIuPd zJ-Q2xtJN`PI6l|uqw#d9H?(f0sPS}D^7~!m*|zPdUiul&whyB90Z&;hxW;%cp7K-A zYs%|OSlr@9zN7Jn-pcd&SX^_-c=2%rt>62^3Xl87D>V{8KDcYV>g7q}X-iodn8BjG zrSZBO&7-}zz+&fchYUq%?ey`%bDtCI3;GK;HM8^5<70OIpF7W=#)2ZH$amc;@6$w44;16cIGMf!vI zwTZ>Sg~hi#2PS z%GS)Hdb2`#y*rDWe~@%O-AXIZ-C=P}w5jY+s()esSbFHn^{kd?P`$QKVKMZ*sY&oaI)6V|(KJ#ScY&1yKd`6^H+iNkqISO*iwm<%El1`9aiSqB zClp|@%4buXPn5Unizu6FSWp$6}EfQ#&o?9UBL;vSLqV z+9DRCE}A;ErTeONZ5H>&m^yd&qxnlG7U+sOY@EMO@Z|Mrl{S>6xf^2mmHy7FIgP% zz%)X;m&R2iSseDq6x4eaz-F^4WOyxl?#a%IaVt%sKPg@xa5v2ub&|ffxoM`)BM{mm zrpQlCY2M_9De_Ne>gOF|MWJ=3sHjAGPDIDb6?<9imTHQg=|=70K;?!5ECyXS#W?!o zV~Vn3>?KoNp1yRyK4<0X8!Yx(XIk$<$I<2=i~IYTHu$=L?Dm<(w9cjtt;4C@mc`@S zO&c6}Pe&&f4+Wc&i$|DtG^TOUy7x>w z|03nxzAXCuGaWcZ@p-F1iv^3B4!t=AqSPSM;d1`8Zuo)e@IH!f+yAjx=%DFX+-Lgz zmgA;$-?22#b%Yfit}1VJX64);EP9zur~GSDUc1ng@rCM@F4}bFTsvB)_EZ_K#L?YN zXKQF_9sf`kol2R`&vDeBv#glcnw4!2vUtGRbp9FTPkEY|F65zgq4po93-jssgZ33; zu|zi6gUUfHmMm|&Nc{-eYCMa3ZkVzC(eR^mz+RSI24q2KchV zf4fPwQ%hM9G1~O3vp2}X7nFz0EQU8Rz5YCbo?9AW`VdF=>*F=7T;juG+b*V0FX?kP z|1^CaMfbP;rE*s?i<5erzTKw0wccS?G#O&z_NwW6Wp+6hH-qVWTz(pt@K-*o!HPP= zOurBIrSa)nEN)0N{Z6H_&t?{P7)`%l(RpuDO?fqy#iWH~7_E=pp*&Nc#kkU@zca?s zc-LezZjPor@&PN$Ym~>0EH0T~);Y$F#VlprBvv#Ytz6lImHl6vbxUZS+}9T*JumZh zi&_7~6`+3+Rt#FL{8*QjYs#99!G5$Ju%y`->WIH@lue%~N&xH{tvnTNHa>QzbqRTu`^T|3J;H3=PVLaKEEX%yHrusjDG&R_ zict;C&gKM~*DR}C|C+^-vF5VF+SBuW-sbW{s6M9eX3;f}r23ftjYZcT=JMmIzP~xi z$`xZ+>^8|`Ca*VFb)xOfGg#bN&Rlf>mFsn7 zG5)OC)wMJT?`~unGJ&MyXnc+p-XBR9n%^qH3ZKU28cuU*eOW1128?3Sc*|Tfi|*qO zwam5b^m|Ok$!0g8al_Xc=4QGA07K8RV)$@#vqh9|e5z<}v!V(0^FNvW+E5;tw8q@+ zLJ{ict~U2AL*r@nYOal=4H`v&OH1qwSUJdv2t8V7Arh5kJ{-@`Ne(~hgCF>&e%oyQaFqGJj~oa zOvz%!)M@6Bh*#8am}Q>qvL3+Oi4`pq&67uNqj{0)=BcHf0shry<@dGbsh(60Y|e_| z|Cv?0vdTR32i@=fHCZvFl{tJW-M4X*%;8HYA3A%SmD5JB=sv+55mk}uLseETf6QXn z9I_H^cf4K+U|!_do;2CKv>mN0Ogh41-m&IoN!0I-{b*h__d3YYWz2Dh=>FKy-Mr3|^0Y^< z%{x|*{fq{oZD!=GpYf|A4klOzP+X2gWAN3 z;Fadb18Lr1N*YP?22)+ksy+L{iiiv5XA|1eJVL7Z*_CX{vog(ZDj6xS|Drsf$l}@| z<~NmT{%I<*V(NBQHXE+IQHI4W=gsdPQJ#8mx%pG6b~Jy}M0s!_i!=9_KOd%i<7p#S zMrm1W|JD4hFO5^R%r^hP^XPXD+A7cgVsUL6N#n<*CtI8<(|ulQfFtM|_h4swjv|>w=l+%kKIN!?U6I934=oJ~ z1=G5HH%p`Z8k+xHr95(n#kp2X6UXN^TBf|>#$w`UOOw|c8t)!zX_-Uycz-z-OWw2e zOdCe)6v|lorhK7!p_!IJwQT_9ZI(d|7SVm*gT-x!EQ6X*x%Oig*LSfD8qk-%=cV$> zY!)}QB!lRGyNCuySF0 z7JUbj)Stfljg<>mu;{zPGI?cPYR4W~rtYFVuS|7|Y9D5?Vn~c-*7^E0-sx+JaK1|8 zwtrYz+eLZdEQ{-wTOtb4>s3dy(ko7RvpI`fe_0|@C{DJIWrbf)<>Qa6T%xvP+s&3a zWoUfph(9aGPG_-vG0U8Ve`)>I6&5FWTjm8u(71BCWqzT}0On_w`Q_Z`_Y}~w(Dx~= zcOR!t#VT7Zi`G&<|NVJZt}el1&smnJ%ROn`?m$ay?01k|4zQS7 z&=R|aj$?8gR!k{nS$=FJJJj`cQcM!R-fNX@g$7J4s|SR-1gD$?fkH; znfQd(MYUq(#QrQ+la{r0V<^8Fz{-H_ESd^i5@vj)`zgY*X(08FV6J8BF6u{(?azvk zAC_&7@|2RSm~!8;BhP-2Ye!mkMpC~bVYg-X2fANQ9PLQgWl1qb zQhzhca_ChPT0d*F96sERp5L2kIa+KMjYnlG&$VT7jjx5Db98&liUz+eXV=r`y5v;` zJF{ZUb5>SKRHpY~F}9H9TsPXE7l$nu9G~ymTA6*0#m!qS7lU%B|58DjGJ?fft1OqE z(%*R%SKi2CaqCperRTK$!(hv$ucZ4X<%Nzct}AT0^qsc9kF;Da*p249URtiUdqls7 zQ{3`jr5*qaX0u}c5z9SVX9Dj(Tkc<__F-!w%R|#wdLDiki)Dsd9xaLjIiQr~iJ9_% zM{QVaqp>_0HI~+6{jlWF`fO42uZ7#M+1*$%yQ1Z(FKw^Y(DF3!IY13(<)YrKSU8K7 z9n+MzGgv%a%JMX~5XkY(EKmP91j~!vR4>jqXR-EQ%gcQ^RL@&lK1I^FL#-{AA6u;S ze3rrTtLhb6zgEWb%a_ar-BzxD#L6MNSTwJ+>ij6r z{xgZiA#cffR8C`YsGC)Hhw9DILRS5frS!W8MOhK^+G-zkf_|rCsn!0L=A|l}v8wjw zzBON2PwHPDvO3dq%y6!rwP>XTnkV?g;>k|dqHiefmMqHRyhYaH&Xefj_+v?>*?emci zR&U=hTDP}Bd9n(NG5M{&#_J$1WwO{{nzh9dKM+}dten}O#rhU&>wO>T_ki9itDdlS z9#(+vBOg}S=2`nV)@#)0q0D^F;;IYQzSZeGXil(VO=lJjW^3PpwEi$_i*;x}8ZSHe z(mMR*Xn^=hEJ~|&q_d#kHwj{K@+0d=$LBY`rMx{2FG(%UV#V9m<#nSdk8Z@u zyi=8X1dCHXSeIvq(mKmbR*YH8$|_xz=}s)hoVCV3r~ChC9E%k?TQ`1QN&WSQ*2EjT zXg+3^azjaFypQtoFIJSbC|z4C-3PPs=XB+tQY?z=)=loWY2MLl-9o=x0kT_jarRaJrIp-`8=pZoVXobEB+0ZdT&E z_2?4n|C&!&Q+LpKz`*XT2#8nyjbbrSYfYoygOlHGSTl!Tqjd}AS+Tf@^-M73Grqa3 zXd7Tv&%ZZkMZ!U`lAYFSXGk&tT;)3zRFEP7^J zA799!dB42YoUY`i-mG+PtUM6I;*8zaXV8zOJVQXEN z;zh;_TWb%hcmJ)mwabHpr8~A>j^AA>nQrUdHw++ihs}}4LuPYZzc8AwE_sT@ z$hx+G##<Ia9lpXdC82dED?MRs0SUgnSHu5hW z-|5}9QFB~rozDbT^j@HR*@BfZqgnI=+o-G5K4ng}jVpB=M48dHaht2t^(|*}7^Dx<_=9!~xQPCMRpT3L5 z;zMoAMrmpNNln}8GmYu_s1vLh)XJ9V$n&d~v?Uw-D6VGNwlt-DTA*#$)x7liWm%jQ zYumkn+Rx29Y`fzfwzVCjd3UII*>^iF}h_nP& zjt^(CN^iT<#!%YtFUpMNEUp-0clwXk19^;9UM|LB!ZmxovhMV}SgO51^)PyF;j_Ik zP@c4ZqP@tlcxp%M+KYuz{;(y-UgFnv+P=kJf&L!`p?_hoTuVdoe!H^yR#vpBuRQgU zm6Iy6Sbej-MoT)-n*Z5rC*7xZ^ByY)CbOuGvDaxs&uzE}78iw(bRJ#0vAF1*z46&o zAUAl}o1DlG(!T@gPcF7MEgMYpt4^$(e38W(XYEbU`Qx}E3uI&Wb`_afvT06!Zmx=$b}U-28mitgFu zJ}Tc}MUR@~et<3wSkYqLdFo$M=-awugL61M$5fivxC$be_I1U~#}d@+6h-u{f{;nGWKID~kg+kQ5hxOk;82 zCz9gCkIO6$@*+=z_*t68LD6I;mB+9+=qX9}-_LXw{p*l)|K;Xq(SHtknbr?DUcU_3 z*YP^tk6#?GU!k(&by_d>C4j}gw@7Mlz8qk&UnP?Aov(Tp`%NM#{(tSxV!!j`4JvPD zv41i0CY5tp>_3vcMe7w>v)DhCyiMiREDo@fw5~LFFN*=?$&a*NLBnFe1o9J=yRaB= z#y)*UG(euc_E{dgsUIC_4+NTAq7#+{b3Kf-UC0JYIu3%qS%$@SR)~pP<%3=kyFHJ5&{gZk2s4}#UZT&m@ zvX6BC7VB+~y-)G;`8xaBHuI_7pKFib9|Pcg#GZ7B;^)2<_T*TKg9ZC4_ouQr{fd2C zPCUii7AzJ9`=0jw=yM+1_we73vF~p&iGD8t?FXCF{jg#LE0(+3Q#PNYbu4c7l)Ln~ z4_)ntI#YXje60Pj3%zgCAyzuSQXXu`;><3iacXa?ESv)R^7U{s_w07DD%gjv*NMQXw>(+ zU)|?-zvuVh-uxdPq@T;5{wn=karo_?fBnF{!1uT4=Zf{u_x#ywli+{;BK=(c`2S8n zSM;9h`SL#m`V~*p&*eY+iyn6F+@hb$M*d09pTF-l*mwRb{apUhI{jQR_(wfoecu|e zcm7BExy(xTeErA3&(RG1T=u~q_59oa1n>WQf7SC1W7b&y%UaJj9tHi}U;GyRT>e`h zqMs|?|Nfr8-1l9>IPvf3=dx4ZVn6@m1N3wGr~Z_Ft~m1Dp1)do8|1bh^t`q0zkvPw z^POiPUiicj`nlqtf4=AY#~{w-&;Ow3ukXAY?2#|`{LP8CK@W44 zelGjiUikS_(9^t5KbJKpdVYZUY5v1p&ktVx1o#Pjnf?4+hJLP?KhX1^u)jA?_Wbz2 z!8mq(oBcfUW%{}71D|9+|J5JU&*hgsML$>UEcg7R57xswCwu<(n;<8A@Co|4;(vLw z=iU5|z(3%d^mF-(AElowrf&B9mmmF}VdQ>DKbPgZdVcvX*pq%bQ8ZTkpR3`9XY?8e zGxtCFZs~7J{i#>w;S&!0wUH;^<Kfj-Ix$)q1xl#jEvs$Sa8^uZ) znah~-l}4qe-Pks5xcb|Ca z_8aH_F(>RhIP-Y3-Y_4*em!Ot^92pU<6Eb{{n+=$&!s;5%Q^Lc_I~_tQm^EG=gD_-%dY;=diVKv zI4@fdHX9W-|7cieiuGK9rru1m2Gdg0ryTT&;})StX5IL-k%KyI7p>nOa}Tc`MrR&QpEhBgs{s-S@En{f68RdN92WI#G2g6N5kQc4 z1me7Jv_Y!bM#HL=afcu<{ifKK85DNJd`3NdZR6L3-fDlitnDnCUuXZ@sh{(v+8@4L1%XC6%R%x|ZT;aJ zzj;uJ8@u+4#nOeI!amMP{Aj6Ig_mB?40bGaa`Da6Z$0bEf4xU5wM*IBjCl|S6}MD% zi%-6r|0mMn)k^|MzDY9^&n`7>^Tem8rMbQ8*vaGO;YbrYhQ#SduD;A)wG)XSt>$Z4 z&B(^`Bbnj!BQKofWWC3%>>XBhBIrY$+G5l3BB=C97Pl7v?QEM*T97c?e~UTxA{}YgjX;lJB+7f|Fb4 zZ6A)@ws7+?4@#{o8&8ym&)0n`bIq|zt#}2*JJ^(FBP>$vdDvtu&U5?mdF>|CjZX(1 zVvH{Q5bMPyw)o~L>zNfdzA0^`{m092_RMDC44AQ|n|b|i8m|?foV<2QTIpK|p=>oO zvy*UR%-7AR2U+^7izVI%Z6B!Q$CMr4Hkb1}JE45G+d1*_JI)PW{TtrGwiAlOEepqY zxzd0+nw`-sn8&`42ayMKJ%Kt$5lrE5puSHVPk%hso~m8^#I5Ud*7MhdtKWksta83l zzy;DMfb`lZHgW~{m~EJ4xJT5@Mg`7lvtBI~)n`%ycf|{-7v6n#ivWGk342SUxFu5!Bip0TchZx2b6d56Hzc4X=Qoi(`D9#rf6WLl;-Irr=>qSS{ zHU>G{cb%wY>89wvY79mMOGW`pD!~#0XRZ{tLCKd|YU^_}M&o06MttTIH)c6&11Bn% z%DZmXqvE92k*5B?OQM{0&8O8 zoUl}O`^KVPXf|d*c6yJ)@t#^yzYB>#xZuY+B@t*dyoVt5AoFFo@WM1BF;3b2Tvi(& z^T=usFhs62bmcPyFQB9u1|Az5&AluMw(*mPqsXj|Zk$ZV4uaJ2{?R ze7op6iJDsTLvTm|7s}U&T|0I4ubz0R(as51j=`lC6rf6y?#cU%5o5P8I=c&gx*KtP ztTM8DG-K6A)cbCNX}OFkNx)yv)Lgc*Xi88QDVcD9G8&*v6ri^0^ac0c*EU|Y)c2p* z%vU|i>Nq?P`U$Ik#Xa5@UI95lB2oIJ@N}}H9 zzIv^E_UY??hWCZVHw7uOn-Pbr&6v{3BQ0-8iE1Th*!6OE?B*x0zTDhC?P@~WQk9BY z`i)s%Su8#M4TB#bHCeNb;Hbl1HpW+4;xo~|KjD#VbKU}mY7FvE;f zai;Pf|8Dwcd{EhAR?S8TB|_HOQa{xI*% zj&x^aB9(=^)b;m+-oyeBC~Vfdbo^ z-ChApK(cS9IAj3=mlED)G5u4C#WgN4(_-s+WFSe^dnTj5XHx&3fb^c;GpTydq^+&j zzh|6{#r#u(k+;Y0szJ0h>rSR_MvR)PXFI0ucv9JT zGNf_OHBQ=u2GWg6HE6FvDc`#(sV}45H(txE%j zI$x~SDz%A`;n8{i{2u!=J-^rfg`VH19HThA)-HNU*K6~R+Aie;_!a!;4rgswT|J!3 z7rw!tT&8|3fqF)i$|Q5ZT9j8%*T^KYa3cV_g&LQ6lkIeLt9_VbHpPO6LT&O-oO$Zv zJ3im2)fcTAgq}q6jEbWuiZ3f%Ibxt_L>(htHCCgC{zRod0r3n4F+#p?EMBemf0@um;UD`dT}? z5~Wv5f1AFM`dx{s4VbJI`NjGfp9+WeT5hrhA! zr$5NQ2PqGK^L_6Ml;;GVDkX5caepU)0VFW@n;boHGF!HzF=`DE%IseQ{zh_Yct4>V zi>jZ%8HqF(E%y@*FN!qi81T#rtHD>G_YIkkfSIKbOmtS)_J3^hK&fBiw&xI7F-g(N zoLRKwYu$af)PHUNSl5~D7&O3{8#p8%3GNEZEkI}@9w)XLr2vi<+NSzm_~zM3HaD81 zPxPbA&zo6uI9t027Af3pVT7k^&3b|PJ}HMQJSt5|s)|fg608-M&}8@Y+~s9bmyaBV z2q3c#Ng`=-*z3m3&Vt{Y;4c%j$h2KXt~^iG&M)$gy5lfTc`Z>lt}fDU3`&}WyNT3< z&{qtqrH#=XWUklFEjl7@G88x20&WcXm7KczBu=?bPdPjZM8KWLdR2(gS}&uJGc|Z3 z7AoXqt_17l-8baXvTu|Cub_&=={R#p+jTDHa0{5jdQ21zQNF-;Ufv#C; zg6$aiIx0b04R_Q7p~+qf76}b`RN|?_9@QjcokDb2 zn-dYHd_LA3T`Zsfi>t5m^`1CV%U&|an+@1(L&TBE{pZ%%vG1<_cg+zy#2x3r#cZzG z1l0lguqv5Q1}rKmXtqe+jY80(n#y-o_XHTKDWe4$s_A_p;vJ7v1TQolp~spY141y! zv-nIM9a=;ML;6afLsO=H6-EqdRJZF3Y>Y!-qY&4qq>SV3W#ZgeryvXTP?R6JtDHb* zP%ZE6AIZ;lS6$l2b~@2{A59P3Q}y5P~n%RK7ruj+2L@tn{2}zWDz=`6hi6&o3AhAbIyPNbn$`oIi$QGvo8h8#IP0Rt< zvy-V;3P*jgJAz^9S_N_J;MIU1>2|MWe4Qhuo%-6dTk^)ao{90tek4h2BPZYqL%sYeAL4M+Lj3hIy^ zb!cg*!+O-=rJx=g>q>pD^eVfV=Q>bOL2t+B-?6@6e-Bz4_WiBvR`vOJ<{q)X2g@7^ zoc3=+e7Y4We8~hQC*`W45Z_C-_gA6PtU*}QsQg#dxR#sqm1q-o`!TY|fvKVvXg-|8MR4rjD3re4`L&(t8 zKgM4guH`e;BCKxx;-M{T?rWLh{K&2AV+t&qvEc4o)?ano#(%fu`gX?0L1UkWw9Fg2a@A5E>|^ro_9SbOiGlEj0~3FWqE3aay62uE6Pu)lyRO zL&$fLzlTqHaNhRc#oU&1;6r0u$ofzY8AMMvL_D8?XaJ0#W9I>Nz|c+gBa#*F0;%oeI*QOR>DvVD}i~H4w7VLY3?!os6EE;Ycg}My z2&gIH0xxF-TEkiNI>0N>YvKj<01_{z3*@=-n-T0tgo*w5{5vzZ$VOC5Z~;} z6nyjiJGtMtzj5urqe8RXhUJ_?aL?j@hCPJ*&-o!0a`mEjMO9+@4a~fU7g^qgzs6A? zM~$L$>jdX5$5<*~Pnl1L^O$zbs9C)AG2vB8Zs-b8^DNUf%jq)6UkQAgDPeEK7U)Qi z(t@zdx7Gq}yir;hTIxH{Mj54r;ia~)2j^Ur7WOQ)g}qT**xOnQwEk~hhdiq5Z~T}~ z-pzdSVtO{P^>UN6g&xS-xf5f%r=SC17c*SvT*;zEp!tpO%MwCJicOa@X8}98kV&4@ z;?kWs@R)N~&3h3f=#WEv^cuj_4U%QyUf!op8!XJ|@k&0AeG_hD;QXUDO~Q72#lhy< zE+_w;@|fyI6YuE)@{GB3`5d^9^UEx}X0Bvq%b-hRY(t>2RRf1kZI8o9GIzz)fyG(R ziMl0~oprGF=eLEjRG25OLa3+*D>BmWh$WE>GFn$aWtsz*>`f&I1)ErvZ@pB<0A}U z)e@%2^a(O6`GKt=;;PcC&&o?1cb1hrc?-fLU>iGFbIeowV z1|`a_lxx-+Sr($C?1ygT0Wpk0$)$K>5E7{O!aa&z#AF1-WCTQVB9Jzmb~n+7^37sl zNse@s9`}+CFuq0cFFC)zxm~i|#nM;>B^Po72+HHsjv1Un4vSd&(YdWCJn#vSNW)eD z(g&SH+U3)qezf+8V`Q3r|H6p0uWYk%AljwMcNW?|A=wCQfeUZ}VJW%Qz35Af6ieH| zN?OJewS~D)p?oEkVjl-$Ho;(_=k zDRn^F*2lEs3d(?FH_$sBpjLc88PHHLM?)=KG8xctFwk%dK#($Xu^|;W=y6^QY85!S z`;}cx{I933zM6W4ud7an8j@3MXD>B;xqs2ka+`2SC#|~PhrAcx8JmSL z`&mhbU+-Xm=!>a5Spp9yhn@00xcH0XVVJ^Ex6uLQ*OVDZ4$ACN`eV9 zl3=PgK5rA`6lte<)3O9tF(#cM#>Ba~X-PtZ>{#GjiDD)u4W~FZegos;8o!%p8=`?h zC7%<8!I@!Dz(}Llq`2=lxBfgY_^jVhqa4QxR`R3zb$YK@wZ2? zGJ&?A+Q&McstNwCU6ZvUQ}Kp6y|!UR4c_4L5Ek2+5`aJ7eVV+wojbpl$vC5xoHzPq z`Ur8wHp&a5Q|CDsYdt6s>XOg1glft`wsFeewO-^nt35cgO_n5931aI+Ft$w!np@`q zs?5$th?NsGEE3uV4;oXfgvZ|Llb|VIDq);4jvGgf<5D{5wll|%9@maKdgRQv!TVP%9J6f-@(N=vTgZUq6pZ2U zlzI(Zrm2vDl4%M4<`xP5Zh*&)kt4b3Yn;}!tV2*gb_HgJ<1-Y}TAi_d*-~&a>UU27 z08QPCQgRhY)-?@fkV@HlK}xZr<)qt~y83qEXl{CPl?3*{lxfXRLuwz0#9OeVO>0~= zBOc=+@RtimnGRPzROFTqc&%Yz)PX8B?BY#@$med9lnO9NBhyN9Ef>;-|%iBZ~2kS~oQS z4()YzVTn9^zzJOIP72Apx*&5}9pXUiCYDmrb`K*K?}WWT9Nj$y>6239iK!$tTQ5Mm zS#8^xH6!WCw-E6#3D5BvBYj?6cs75R2(!}*pk=e<*{+{$75Gco~|i8~>s9NHsDc8_Y2puBQd zuH3Bpq7~KvToH|E(Qj0gln=cmaf89Di*VW9fC=wda5|AX@%{iYnYJ|mO=9tR$btY971@!^Jv?s{l07=oa*MKg%*c2pBrLfbQ9_~)b(r(K zHZbRV(-xV76p}##SY~MgSjHoO^<)O4$7;bs^`#x_0Dwq&#~f1kROX~%hcc2%LJ+js zir|;=3VxaBf*;b#iPqvk9Zm3aXx&$KX~W-Hwp;W4_GM=B3CVAtBFkuH1 zzd(;l3e#wcV{%}`bViuA2bJb%(J*$?KNIpZR)u_<>)o_HcErx$?%li1T6JD4_yjk> z8i~*Zw6Vk{l2P9xx#T8>qBb$K9CiX;aV$YJB*c-Kpy-RKaGpFu`=^Hv} z_bs^zOxqf%iTz7%0&~VjYU02Wn_#OVN)xawmbUbg_7)O87Re~9yAAX6ad|a?IozDQ zeAr{FJ&uf-dEyT-u`P^2{LmSA9dgaf^g>>p9n!H&1H!oE& z2pNKn&)yzCNuMFWm=%PD?;+W*UGWf-{PI@P;A>RFpx{y^N5S*JD&5>rBS1MKKzsU44{hfx1Z_i2XskJ^ zC2l*{BZMX_)8~UrTHmpbv7t9E=R4>#W`SO?KV#nK%f`ZF!g|;K#?@FPi)CG*m3lDU{%WWuPph&bwzi815-TSZP*n= zauMD-56*K!B!2-+yd*N=lqCU1&k?5S=HqTB09Q{=eA<@;Jgsd(lQ>-2jy`#~lB^Aw zs|zoqUo$o9J8VLs8yD;(w42c9Bz%SmMW2V@Gwdexc^E!J%5eI;2R=iZaQeI#K0{(~ z`n(T5@3TMehtK=%&j;Z10nXdMELX~yyAUguNRIfh0VRFkB}a#R-wllp`@S0<-Q)Xi z&*)y?cY8{z=j?wT%PUZ5L9eGIt!cA{ITZW9HXKLb>U!W ztJ#$flr;Wo2g*lLe0s(!0@W>um4gJeVIt5*I@IknST9VZ_L8z-*mzJnl~*x61k-j6 z4nN4MbSOCr0)J!KRz`)>e2yP!bfFgE)4fGyo`SJDG zVuTh452!1))(0LgfW~mEkhZc;GNVP1rW22E&0oXoA10&bqSdB`H4nc3P_mQh{411Y z*-1dHm0oZycX-xv9FDJAgr(eCJrU*Ny%%pW82^lhO?Lj`H<(B3LXZ8O8v#84w-$`b zwe$Cq`zhXX;AVqid{Bpka$vFV^=9P#ZZjY6IQ2#AJIt!;WdZ*-m%DHu|EtT)WpA_9 zW~mNkR6ziM%e~$L8^AQ9hM+Mye9&jS4bd{h@V(H`#wW;1;1kWv+NrQyu*@%`p6fkS ztIS#D6Tr|B2=S=om#u($DlzK|S6|P4ePM*d_p#?pe9(jhO7m4xYy^w)E^n! zjfaf~gl1w7&rh4%AAUg72z0!Tb|Qo}e)TW%7d(B_`7j6u?9!)cSbDoQXKJht9CGQ| zWshikB8J7><=8K*z*YP)q^;K?S@a~1#e`LWJh*Kb{)bMvqDj6o?E`z{WN1DV6QlF|GQ zsSj6TcE7MLT%L9#AXkjr`MCpIkOy=^`}&E`G;!&{+TA5A`L2m<-hym_^$~OTF8%tY zdjPDB32AM_Cn#~-_OKZaNdZ#E{C^grWIGw7)Wr;CzL*N=t7QOIw%B?dh;p`{B{g{DY@z(vAjU3~*s(mm&>|@LI7CgC0ntgg}KazQ*=yPmm4Rt(-w=E4kW-? z5I#0xFBGE~l%q}Jtdo9mgcj+=+u64`X7W?;MI1w0uqL~(NaF+r*~u%k3VQgjVd(xR zp#^928idWul_ULw5l9@?OMyh)PS<)i%mknO_I?>ittti6#oqpKvw=b%31RB`4?z!0 zF`(^k>}SxkSa66Rk!|Ck#lq1GcruZC{OapxpPBBJLig4~sL?!@b%4zb?nxG|DCT^i zgGseteO-cC&0!$7uAOgG0if{82;g|RaE`11tCtE;inv`VMB4VSfjCmMU@YJQ#D+rE zyTMPRFNoW}=m&yq1V4*`MEu!14nvhKcB^1)jFDw@}VY6bjl0?P5l0rO`W$V4b(vr9$G#slg&VPmPR|d#JJzmLNkQ>cK|R7$vNvLBoc`SU1vO6jv}wcWPyB z`h5NB+myM@eV;Wf+o4_d74Di?)5O;kM2(WLhx$&5nnYtYJqo)XdbxF2P=VC(#a9bQ z3xAUTp3p^|hYMD2?kJWb^l{raHemfWQwcrwpXrl(Y_C2HwLl?9G^lbOhM51NQ?YZOCb)?dqE^P9H#{4OB4utU>2}( zC9yo122X8)rW0wHVBved8{0U0+c(Qs0S)McH1nJ&okR{oYu!l63^ZVc4Q>$0Fn5GN zhA(E5Vg3joUGHPxOFspv#a|lx{LTBZUH~7?O-JF@Pyy*4%F;q+2Z%s}Wc`pVYQe-j zF5WSVJGGpIw);Rk0=1=Q#%s7v@sqFl_S0`lL)~!{TvURG8LE5yv3K*MwGh1dVJaO| zUJK&uokwfdN1CvYl@`oq9ZL8xO*Y*s#QB$SX@#5nIt4Xd;zjZ}CwI-Sil)h69!%>x z$tY-td_%z7b=`#&wB#EV+^(CmSV2oEii2t0T*L}mNb`P4KNPg&Rw1^VxOVDPeeo?wdn%PFd;|;|m$IbwFWZ?=-1M>{eGIF4J^l9CFY`C< zglb+GWl&pS8fo$A1RWoPp1tQzTq7n_6)&LhXEyAcgKvE?>SQ1_lnxJ}jzbO6v1hm7 zG0J(}cnorbk*XiUQf)u%I#?2@uDQ3HmkVxWZO33~dmrdcZOVKlz4pqd$J53`_>Z^K za~woIFj15t@U{NXLl1c=q|0}l{qqlREvyuL`PLt=V=51DPs>7Di(H{U9CL32e~O0f^)P7)L0km)%I2BXOeW-`HyBEE(h4P+4!Xu4dQN2@^; zENO{A(aR_(bBU@MmaIe|>K2Fs+JW0$rVISr+j^Nov&0lN}8v= z4!LT2>)Kvx6Z2*#kOzOOU^xBklYb|4-W_9*mBiOey;wU2w~18yN1s4nD?TajoXDc= z4c8!aPt8H*hk9|g$g-nI(-bS#V5T^st?r2|sy)gq@u08K`24{uot~lT0uv>a5vr%K zyo-+lYQjwZD|y+%^H>umaM`w@OC^7kg#Bn>2T(d;>0a7Jw;X#{@Ntqjdpot4U6h0- zdPJHdAM#Pf1Ek~CM5C9FfxBy)B>j_-CKrHq>PDx4wMDJeK zfLizlON~=yQ)r9z0M^;0GMm2U+EeX|uhf5=^A?AJu9TXNB3+zOl&kdA7X|PHraY}J z5NAGQ(MbwYUFN{!$$QRp=etrboi6xJnm$;$Amr4Tv1Nm@-RXD=}$1birWy z-vieKmF0356J=o|1(5IY<>wompSBG6FL-w>@7Q*M0}^EUQ)q?!UODlT5RTy(JS9_G z+itMBU~}q6+R@?WA-d|TAL?Nb?cQns)I*9sJZj9o>UvI7xqlsf!%-lhrV7wZ6CO2!aqLXD}q>p=VCrH zbQe^k1evHf4W{P?Iju;q0W@nJ8ZczP-!M@rBFUQDB?R;RCh9rC(&iYk>&{Inh;a|N zuh!~jFSsLKvuj%f$ZMyr{*{z2E&!5=+HmQzFOVT!aPyN_Uv6%nb~P;hUM^FW3Yk|z zfP5L5vHGVw8qk+chUOOf5S5P70B!VwVsc9zU<}bZh|i7Bf`#=0f+%eL9vYWCqqBzedpXg@q!^^ubcEg!XdfFzeJg)6 zaCQtk?3axNy$YynJcYHp!#DT#{0?azccDKb+{e^&Ifk=Eax`0sY6rNv1Tw{*7Sau` za+MUCvF>*0*dfV#r{6~nn^;i8YaKQjfb$y%+7<-l`z{EXsx?Rx7&?G-C%&hp#h9?4 zGRI)c_dQCR8K`Aa<_j~NNk=JzrY%^NN+PL}Fed`L7$}-_M6MGnCo0ZsiLf6zd;E>6 zFaeb9NF@ni^r@@hxD*QLc-O>QR8V0Tv%&Li@>^XL+AZiH!=N+mw(mjp?G>B+s3E(D z2NAiJ#?SO4I^U>AGyqf@Uk#{w#DhWI@z;Q=XG8#~G(R>wFKaJ!7$)Z%)r<*%l;+Pp z4uBuBl^KN@d(fYqPvwn%+%(q7GV}IL&pSo^y8zVTwl%1MYp!jq^D|A}UfV?ei2q6l zn*b!~mLFqjx_!-KJ`1U{S5Me_@sN`nB$so8SO11{az_d@9Dx^=UbH4*`~%98AN|GE zZ*!V^TvHP0DV?mqAkL68Z+ZdT;3*H0muo^quOc7f-7X^e7ClmGT5$1+1c(Y(AK+F2 z&{nBN$2&V2iU%@E1iZD_g&1qbR1-ebdtELCRYe5gJ_J7X#j9@zyt)8db+yS6KsAN4 zyd$~6xwEkyI#90LfVVbS^AW|npdvw_5Y^oz@X*9#LRtu*A!dgH?lEKy3BFui_(ATH zjOoUx86ZsuyZ;u_vJTAsgzD9c=Ezel9 z;8!(cQa+cRz5`m4PL`eV{T+K3mDJKp^q_t^bc+G1F*o_#N~8%A>SYe5d>lxB-#j$| zv6&dqG?1DY0FQ)$6N3i^cMqI~#6|lC$=gI4G>Ldw#s`kC=iF_1ueGDiEZ~AIfpwM8 z5q|=v*Q9NLRyW)&Jxl&H>W5?KOFm-zkxP#uvyKBgXI758ke-+Ljn#!BUD9I!+ijQ_ zh=^4a!FK8fb*zGf$5z(%b;W=>60^aQ?kFjpYbCjUCJI|mefi0EpLj{Sef1rjdAteP zfbzJTyO%H(NX+pcEsP7EzBIus~yH+gZHqd^4Z1af=!_F@H-Q*u80kS|mvnRO^7 zMq&F}_MG|4c3~VxDU;JyS3Bd37VO7|a9m-cnI~ASC*{k_=)OErn*-4w#&WRl6?&5z zx;3WpYMp-M>dU-`g{UB*OVGdR(Q3YyWi{U-_Q=?1?qvylOCZ}P4=({5H(e0>T?u_# zAU1A7%;JBXU)&;c?<*&?Be(@-w8vNv$h#qw8&WmnDhx@#%}R{${$C&1h*NPyg}FhV ziq5Gdb!w?fK+n9>J@h$pPLD+INo3607jxHy zw9j06dHdw+ZYLS9I>jPX-3;tsxpwvS>Z_cbHE;Xjh0?d5ek=W1ftvi^al5V5ir`Tl z!a0trKuiwzRGTqUzvX`C$#(_n)i`dm=mJQGPblj#$Df_Qdg2h%CgjkmUCX*}-%Ui_ zViRHn0B?CS^HIZ&!!lf!bHxHt4$aXzUI@?$3gCe2WI(zVM1x}Y79qdiS{bSi7X2`u zPE=n#^^42pv$xURIX`l`aISsv&Fd$e4!`&bG>;fN@u~D*&R=()8tWS0fPXoE@mb^4 z&*x@vEC1Cp{!W(;mx{15$3JL$N%LxDmx>@W%v0@XJ4q9b;7)LeLIUj3!?2#MQXnCw zp_&JeJ@O#6E`!e{Wbv>IG|z(XDBrcS*02|SCe z-yVC{*vh%uawOZxLXIa`8us-9@`g|bM02)S()Ut7wt;x*fBWn*pH-xvkP!srpfbjd z*=l#y3kQXGsGg0ZdJY2{g;(i4LdsPqs8P@R1`e?E#?PMns`ZDco$~a}10KMg5G$F5 zbSCH$f=W-Cf}y<>%l*!nF}L+eH=+;%wd%P-wg!?L?P(R5#JaKUBPT(4;paeCggpLg z3m?C2M=B%_Gc_b}1X};uV!m0U^rke5TG6=QK{s+n-MHw%zbgR0elZ-Cc%FS~;vDW1 zcpwNoKVV~C%0eDi6qB2fBM4GrIAsbUEgNHA%XiEP$KicJ!8j%)n!&I>U5CaqYfrzE zzb1)%oexhPiXz^1qarOceD*dAdE0(3|a)*dd_ohCJhmNpI^gWDcLA^=-1XwL_L4Oi_div_?Xj|p|uo}XZ!1Ep> zM|mk)-8-*kkp~b7P%^Sc+1Q;Kytz#{|L!^p<tXP zZ~m|8zeKl6#4}(Q!yrCXq6yf$UF^yIe{4c=xjC15r+wL*8UThDxk{LYJLbqm!<;}f}3US;CJcv77#3s8?(&kF3c43Dl1$mtm z=6PA@d9Iwc_9z0N6_#V<9YVynJd{kExX8D#iTU~FxRLpW zJKodZ5H4Dsk5pg_%2#S-Rvu9$dc~ahNWLR>5hbej;DSdwdL^w-jYAP>5i~a8v23a~ z+wmk5^r3eg!!t{_WA{2P$i8#5>lkJYh;oJo2BfK2jNvve1(?Mk0;`BIW;#Aea%1X8 zl(4YssGuq}kI$MsA%7OmITB1LcBY1PNVUQhg|DH$H1)aCs{&{@fX=fDb#M#PLTp62 z^0}{GE2A|XV&HN{9`_F1zy(=wGXRo{HSMld+o|AaE>Byywt;?J6sS281XuT3c^BIm z%$zN)3JY4l?2zsA&tHB0#!FU}oWfo0^A;9_2bE_bg$GhG7cIvW%MOzNocgyDe* z^Dr)HdO`sO^wPkMTsSD!eE?!gp^SoiKH&as&FH6+2z1tP>z2^AhtZ@#E3-_5Gp{=+k0sM>`oh(g^||cJZ`@tH72FXF@a^F(;IjADOF} zeTgO4#&`&DdeUw6gn)Z7M*#C*xd{^zwqYG%TdMumXF1VI77!b9M(@dwNEwhIiWOFm zQ&B?KnkcmWoVU6O!c(!g*o1OrH`mKabufx}t_4Mf$7CQKf34>^QgKE|cs%g8?01|r z?Oa84B|598M)mPj4$G9r7d%*qZO+AcFKBVRzFFcejtc zIXkG9M`9OITbI>0p8fLWWlWQc67-eM^NYFb`NN*u#=Z$~dH?~>aTEaw67JNf?8fw6 zU=*E4fe`Fp#VfXMF#HUQVat+e3Ld6*E1?2v!XY+HbCl0k7~eYD_<*-C6p^jH@r>5aXh|_ypVtT+Pt-2}oIjxkIbYgb~*=X3)sP)>SNP z8;Chk^L*YoG4o9F*UjLV&pyA#4vLR%if@zBi?;*4ol;zNJW+&sfR_3$ia1?@o*M54 zi09E$Z}8wn)KtgaICh~&@or(xL;fd7uc7NvyKYJTsC0aGGgiRMA=Jx=dIzIM(_fOx z*{*UR$Se_d4ig)AUy{-@_A?CUe#CAup>KmQ7>dh#!)C>SfyzgbFfcq?So2-{0(fv!3jXF|zKQ=)Nq2pi!Y70ofP}}6TGb9M- z0TpS(TAE2NjtzN^{ayx4n}anIvYSC)J#pN6QP7^5DXRfDMBKXOQIm~HNiJnUoey$v zsNp7_{;B^SMJZsS-lG_R_Z}rcM7~D_I0XB&u$v@@U@k93QN}u(f51+?kx-YgJM+8- zQU=prOk9B_Kx%eM1l`n&`RsX+jsYfYRCggK*#uvEL>}4O$G5Lyri!S}K9K3cQUCGg zF>3{LxglMj?$y_!&FIs{(;t8CtCPFVjh}yX`ebtp6jyYQ&|LtA6S)qD-A9^5aJ;PN zY8I5vf-4T@(ZosLKtBy@b{5Ry+LM&hGz1(>>mjm#3C9v@Y6FfXN{K->j(Q9Ih+uds z7_P@Ni~~=O5q2z5fdry|kdFiSy>oiK!v;-a-!VY#M?C}_wY78zNC+WE0P%q8a?GK@ z-{CHJ2i(Rao3EWoLpQNFnq)@4I|$8oiHTrAZZCX6I`tDyo{q57I(FsC%__Po@%QRZ z7pWMX#S{~|SBW_(JUFqPz=KuY)RA`Mn11%!VtMZ0&42L5H#xwaXJxfXKRI=o3QaiG@fMkF1+tT4^vvWE>^;^@(?zH zc5U+ zfO{cCD_Ju;$#<|(fRj!*-b|>j3%62xn!&Q+>^d`#8OTD$cmp~{rR(RwO%Rg(0*j@; z&i0&r`cy%<7C(Y4I@>NVmc=&bK_@E9KY~MWKG&; zjx#3w_JBeb4FWJtY~dBBjwAeobr9S|ok6sxh;C!qfQpQTcUnQ7t zk1#RzBPU#;k;|6R!(tk|k|0M4OpI*V+z&Na^TkG;cMZ9cXcrMREUs5n`yn&JqM^Nq zH_R8T?XFU@2FO2N+sxgly?pE^xeI5;aj<9K$&o%2w{+_d(Gf>@&tvqSw(b&I!@N<= zD!6Cx*McVP9f_|?=g!)|K4P?5hWc@!Q^oO2`p3=f7_|qkI&S#XE@Yu*q2CV*LD`F- zGeyHBC8tI+88+h#FR-W`+SKDIgVsDbN(Zj_U&r?9xndm>uP}EYzUtreYU{`8j9cYo zHwyh8F`p(CtR^Pv>vlYPXTEi6JGXDFL#dkEISFZjt$~tt5q!A$q*}rSu>ZrOr#_PU z++*J(ooe;DuSrVKd+p*&&G~8Aw_(I=lXx9x2WAzrX7sAj1i*v(%M(}E&0wpjwSppB zx^eH$??4yA)b8@#)mAGmlXrl1 zApOQ-X>yg&?OV z#R*Zp5-M4)^^YJ%(N7h(Min3nVc=Vu7La+23x02c3(pRbOY(NZI0@X_JoedoOHEip z6AubaFk=@sLAz#4ZEV2KKG%K$>O)pv#T{#G#4a@A`sC~p+QQ2|j%2P0=>@?nhZJun z9M1TqsLRp5SwO3HCebCdDyo25ZI$WTg?=55`mTZ+UfXCdb}&{jy7AHzpU#g6Q}1rE zDNz2BQl51#s9qtdw%#j=fbnX@Zoa}hJR|^v!z&vwOwIw>)bS2%pQyIZL(6>v)m}d3 zWZ#+AA_Xx>0fG3|5~s-ci7XhObenpg*t*9OyO|)+V8-$mnB3$W?)E9ddT)M8Sn<%* z?q6-GS3c}I$*r7O0Lx%ed(n+i=8);Ut2o(W36TITI7E0U z3!hQ%MPBNLK%Y7kCYTu;xpGA~7`q{70@y;qj{?k#`fFp`r!&GlYKIM{p`S+Gr{98^ z4LT@~1#uNzQ(Z;W!4L;x2PLUNNt$6ObUfmD8*qr0COsCSQs5QnrG)w5?L7nd&6 zegp2|(hFZ$HLCi-3d1d1A$4x&_T5*9Aam~nwRsB5411ns%M5!;D9su6=!*aAx1Pn$ z4tNf}_2d+FjBtF!lzCdgJ;vT~U>Z1Y4uFZV(fl=EPWM%Z$UDSSJw%J)OYXj!Vfb>p zt59NR&pdITGKw@yX~2>s$nuqy+N^OUwRVA0Ff=aXb@Y`jB2h$7CxdX;d8r80oitld7MUrrgQWBEmG51mt=;Tp_xb4@hb1^;K2y zP68bsOT6E4TZAJCT;pfS%FO&%6y#BB603%td_c#)b#@BHcR{>@G>XokgJ%9>V2~Mq zMBZ;HOQAfI952Bt2i0|^+Jj8hqVJGsL;nn28*3dBwn5-VDs4FHY`2k?cCK|YsJjdC zv2|d5+fNI;k{Lo=sOxQBTU)Q59zb=ZG-wWLYh&ke$$9o<`nUW^uWf!OYcR2Dkfgv_ ziY;`4bMxdqyVeHvTsw7;s&X%@-EuFHSPQHDLR)$0J4(lFN4hx;T6-wOtb76K`BnUR zs6juerGpdpzo%|pu|(H7DF)dV%{FKhT=)R~#w5rhSVhz6bG+Q~eVNRgWHa{*F`}U= zta(y?fGG#h21z2=DrP*iy@UnJ4Gf=hB%nuQIMF4%RV~f#4Nmurbxp<^?PzTBad`iu zWw@u;D->%c^;C2|`EBy~Wtm~rc?sIC4T83dZj+@7rmlg*kZHCQUCSYzE)XE^^+Gn- zl1B}$vmmtK6p4rdb7LbY#sA(LH$IP>l+eU}p$Vwd0!CiYmBUPeJe1jH3G}M`$f2-) z{1dq$XqzRqDr**9i~<|}wbmOZO-*>~)T0-S%vS<>beqsB)10>2rP0!Bs^o>Rgpew_ zmX%M6+175DXy)a+Mh9efX2BJ>JSpA-PJkKb`X_CY%XUY2hDzjx;7~@*kY|P>v^5;z z8LBKB(iT;}33-Mp#fCgX6=6f3IS_$oDzBl(5$=(`2Vo$4o%_1IAG!{nn}i!XWuRyZ zyCPj;gYc9hrSD;B#yFY^{Zm36B#5k`fN0P(L$b@j!b)O^qX>_?Wrw0X%P2Nc z{jQT2`mA7hpK#;38|lHbi{cU?aT_?M*q$nmL4;;kFuKGEs}mCZpxs-R+*`*fk0zIP z)Nc&rPH$OaZ!v%tdW)6wQ1aM5^VRWl=f?SX_KrJwu55p5EsGm(UAL+?Ke_mSfCpsK z*gv+?*cs5_yT|dY9(*Xd-<*f^c`U*RYbK+rsDr33kiRsndY0XQ%|-1iQw;$&hmH3cCf=qbagY}wuouSr_!qVuq(yglbK{CR zZ*1hX)DCYjWAwb))37z(lv}H^r`tjL|JY;~@8|XuL>{s7B*8S&>XNTU5eS0sM!|$I zk-Fz*Fc-pOKRG*fX1lOIte?c3jN}8FEuq0|0UTQ)KNL$urG)EaaG3*-{p9M`Jdk%W z$VzDj7D6kaZRniC`)>uf=4dCtd-CZCeluxESRVJ_2eC)da*sI-aa9PS`({Cw6>40CM{eiU9PX8j>fk&IibFJ6Y&iCG#*?MQ@)&%sT~ z?@Lmw^I)2?I|d3G@}Vt12rtq8nSbyU6t?EGC`LuhV6PNkK&F!T@SV4sXXO)7eh^q$ ze%qbQ?Z?P|foWq#>K4k_d7mag>PVS$FrIhfN-hp$DCpZ;axnDy%9Dq&O|?v6l!SdN*DgZm!d zEnXTvUw{7G1UPE)@#?f0I993Y=SKX@Qy1S+5TCX}h(k|S-#ElEqzh}^3A|EK?1ps^ z>%!`peQ5eOp6$RDfZ`j}8hmXm4rzC`g9x|V*gdxL)^+0n6y(xBzWO%gNOkYvS5b3U z<}Rys&|9Jq$K9i7ivkORy|J6sGR9H~t*`O|C>V*OH|41>rVN3$`>^dWNwMn+!l3lbe%4|R zYy8bRk65|dLbY++4)gNU1iel|pbBD0ngxR5!;c=GInYlNn7z;Qn8d;I<4166>mFHg z{7C4Ftb}LGZG-UuEI?Q1a`Lnb&-UYdv;I&q+rabZQlyy%QW-^nxU(GGh+NX37s8d{ zq3Lk+iHheb$qV}IQ+!{XPaQZdnI2NtDXP>M{yvGLLEy2UG`F99hBwhmCJNd;n`O)$ z9o+Q^By~9C#4#jB-hzqZkc1V;UYJPj5^ z(;NtfWskbS$t$MJ2USmI091G~qkqzEenm#rdK?%X#3DHYZfuYpQ8pVGN?{vZsTh$< z;x^!r*zf2i=`#jX#yD+oXMZ*MvFYEx;pW5GG6)|36$mv!BGl{9ZxG20&f%pj^P@}9 z7AP{&XC&2#$)zCPTEy(Z=`v~{DQ{!8Ot~Pl5Q&?^e16~}hWatb;k;2Hk*NvQ)|j=6PZKDI z0I@mtb689ZDoMcXp|9Ec@y^0T>DAKTrf;NvSK?*^=LRcCRGafvh(Ln)BPeAR4AU#V zpak_GhjRJ#aK@*3ICfmZ-sfOL-Fp+`NI{(BeNm`D=vymY0l7aj!ze;yd}-=)SWJ&^ zhTE_Jd&y4rkEqm)S;NE~I5hJW{1ME*zoK?KtHrK(JmoFj-oYM+>rOC5qST+hG5)RT z&r8mQn+_JCe2_hA7(mv5%MS9&T@C#^h@u?YWX1fDT@KAplbHUEdh z7CL}M@jyDC$|Y7P-QRLACMHIl=YKdEJO8fbmcM{vW`3+(2{H@8q5_>&mddIGAR-!~ zV!(>T-F+^ig9DQ(BBKPEn|`Wh>_qU%T@VJ1x!OnZH}*Y7kK5l58lz4!Ph+R>eUf+8 zIe{5W>q#Z*Sl5wpd1Uvf_X#_Og8g}L)Cs8|YUyueB-QlHbozp!>KUl2K@qIcdxnM( z9qsY<`^*Zf!QavQPT)xbH(^MbfK>wLA@nMENyR1)l=>z9dJe%9!g1HmrM2!pSn9vF zf2`}w_SFip;hU~C>xB_p=<{y<{`ym$hpD>GQS|)_Zo3U|?V;mlT`seH-36_ZVAe=`hjqIJ_MBw3{)rgF^&)NYeWU?(^4vn5 z7u9}|KvG;})~gqKcw_5ja>_OYAytJ670>cB(2K$VB4J)P5MkXh+$bSowiuqr-Bb*v z7tCGbIxy85^>8-C-%$rf9uMKKIUEU$Tq6`ggnp)r~fSqh)iDNIVG!YQxOwoQ0K8>Ivgs70-@!3VD{=oM1Em5UFY%jk~pu z{6vY#{pZ%({Yw0)qGCySt;@3y&|=RvZh z`5)}P`BO0H8MoiS8_i-#m?0ZJfY;#p>}ANsHqWa{Xyk-GOjVd_Pt`7d;@0&!>-lTK zdG+84tDJ8Xock#=n!x=PJdnyT1tAYW1+(PTtEHl9A)|sya@p@VQJgO}&~q}l+x;;< z?I#aw9`}_g=s0;;yL|l(D1wOm-QG{C5$N)~k-2~I>(@_6qS*r{?OuoQXp$D~b!uP3 z@rbu?n89xj;t{*q_ zOWruwGco?yk0eoN1S%uY6vS1_v=2<;nT36e-?$x-2iCT$xCm}?`K{}G3AHopb?}2w zNg#hz@@uk<-Ac`b2)&X)Q#_M@0#E?h6E8K|IVpJj%fX(Q<#HjY&u zf>eRLFCu6kKy|8zOST9%q=y@75pGxyH{253v9T^HmPERPTnEYnsQrKb9qSAB_nX3N6iVWhy$5!sAkb@(}L@9enfH0=$^cfU5ICQN!Q^x@s+Wl{orZTKh}k} zQbufla&Ka5ux13^_fZwXbVw>BeR2p%qFKKlC0x-=acO7>a-E z@I$-iXkYsX;+@ zcG6>-Uc;Hn3O4FsdTJdnu2So!i{QDVnmP*xfni@g|IW>C@jlwb!E$63Wa(#MG^jj_ zhAl+8`ANb0sz5?#B<}s>wQ11=cE?YeX9Gc;VV{${V-7?)Iqt>*Kp7iXntf}4Z=QcA z_xtuY?(JbzXpb8w9Ek=l6#UO%_ajeaeoUzD81#0iph~}S^HYVRcsb+!{%aiWanw^e zHz~Y{*+U>-xtL+xc`SHbs68r5OcG!2Wx+knJ>Tc;L@^ZKJjh>yxvr?>P#2oc&nVEs zt_zwYB6qrgT!LHZEk3gMaSoY5&aS8l8T82DO_{dA+bp+3R_`c%9$?ajBP>;W+;K=coa&(D;r#LcKpGF zDKXzE4Ghzi30)=NOrc zT*cYRH~!u9&-lo+r;B;0yAw>Ht`kK&d@xae`qA1Wj=5m={R<<~0^gQ~wE~Adc&u0X z5~n?DrU-^isQ98;@96#MdEv@z1AHbF8$_bEF!w1GJTSi)e`PaWwQ^X{&?|S$!j`A@ z(B)v#G}x*F3poyAxQj^I>kdG&X4ER|I7$Q%asZxS{8f0>t-&bw5{8frMo30S7z#!h zijFWGj4&JpfvSc{UP(P^yY`sYJBjEd51?*`PU{JT-7aPK=0(cDlOT8rP*YMK?}XEo zQxna9K=nEeO`KbtmClIu4l#&$n5>E{W}4%Ii+R|~ve%%4#AR((n*+}u#R1|4bB~dY z8ZgC?;stZni8?Ta3egMZst*)>+c)YDO`Ja&@lb)<5H`JwbK3)o0f!?0Rli_1^o=_ z7$V}AT)2R(cul&2fp*C8q~`3gvx=eP7GDuOFLVYjUqR_Ou-O2sZZW5@gwh4+>@#!U zM70CH<+zwicz6=b#`tpXjS^Tv#fGGWV0F((%mtocEp-)DtfGatmCPg;A7V{St~LfpW4x`Z7iOCgg3EV#Z5cAZt@4a zPm{Z+bGr=gtT-c*OxOJ~p)Oj^CVydc>O60Et%n@E&#~ybw*B&Vtrt1KY7f9{lNFNo z&kp;BjsEmf%*i?r0+eOZg_;N#bqQvJ2c}N<^BHx_iofdRN=Q+FacIGBpD@lqmbRnD zami_i*GBTcaJ0;WemXh}Fwntwqomp;xGAArDeXxV_Yll?pD~sGF>Z9}ku%>0uRy3T z#Yb=3lsQ3V!$F4+1q{nG*&4)^*?S!o1p;|g;aw-;-rOSL-VM08rEmz4Pi<3y(@Ze4 z5LSwB{hKRJzr&gAnId;xeD4&TF$(z@C_!=aA|6JtvII65_W%i#Wz06i1Q3&>_g{oRv#*ukAyL`*l>gs-ka;D2Eb>s&ZO?}L4mg6{&7-pckP;jstGeS7ksOvC2QrpAL=%{uq*!h@Fxw?k zgl04LDr2H%nB>qc3U zaSM974S+MBEjK~m0NaO!(S%Gzuexyg!Q3mC8ccEF@`JfoE;X3y!iBGi-ptNx@{MFY zy(Dvbm)|mYPaw9?#GLvZx-d(I=3&GVEBJ{Te!94b-pX3zGmUQGO=vYV!lWI#C}?aZ zG|#S|xLNhsB5-VUe_Q%4dR4 z`OJGgKy;Xxw9t(*F=XeGiy41?vBfie+fASCk0KtL8E135(QYsEQ{ z=DlQnaxaiXcrWaDpA3|7#2HP``(z+aq+!t`0|7}y7JV{M#t~;UEc#?1PNZScBLe|R z1Qy%yMB#^U+lQ3tH{g2A)PhJLsRTD7ku8uom)H;uAh|bTHVMq3fQn93F++w4{AU_9 zqiW1^p4PiL6qte29E7rRX019Oyy*pFGxP}90NyG#WiE`ucd~Wtp{RWVwf0)&dpIig zaO>E6qGIo99eZz7?7gjH?~97PuXXJGQL!Pveyd}7AS(8ORoTcbmu;Ati0>E)%yZ*pBnsXn`f&4MewBFXl7hMVc~%f`o@B{pRF0C%=iHJJZJ=UP zXcR^;!z3CQSc^9=RbRyxjZwRH_Xs3E9UY5XFVgoz#we4n;2GB-m3B&aL%kddOabQT z`hmApD(elgZ_eNBFOs9PU=Ma57#bDTJR=G_Ry%CRyB1s%#2qtMewRWw7Guv^uky}s zr>9kqqx+uqy$k=IKi+|b5FT%qty1tn#h=(YW{mAXD-EZK&lYP?CL8@gl|-lC^bmE< zLVO@ZLaV9T&h-dh!OIj`agvb2@E99M<8r=(KEp^F3-)IiN#nAyFbVk)?Qh)ca4Bch)yJx=)jxM;rBu6hVP{9%QH^ntNhSp@suop+euFkC2CVA6zMR215Ya|Nm zOthA4np@|=_eKZ>Er216gbkc(nu~CoF)tkK%jXp*cnlwd#L{&>;%)QuyVAj99sICj z{>2?+!&Qjf0oZkg?gJTixmZ50fUQ~IVKV|9MPOai+NRG*_zW|GJ`cfXSlje@7(Nf% zpZCD$J@)6l@OiKOc^`b$!Za{}0cumMThBMv% z4Wos@2UGaQ9mR+2tcGZ!f!+YW3b?+*$HCFVZpI#5BlN9exL-5MMg_#rc_V9-j0wg7 ze3ydC;CZ89Gz>gu@q1kH;`f6vI_xjF{>8r}VGP+{VC(_82>3N>1#w^wz;}Lpm=DtT zE%`*@;sinrJ@E@h;ixev?W?OXNt~@p z8q{vEj5?{LPDY>}Qc@2^pdMCI4{ND;fQ_U8+vNB)K*wRyK8o(Z4PK)blibeHt3o<9 zwsFL|?QO;Mr;aCy?&yfaqS-~u$1V7LM{O5mYEm5w_Wck)xghNI}X!{2asL(bC zjOhVD8-(3l9EUz}R1XXc4yyqB&~Xew18hc_|kH%hOh&0IE#>!>t4JeV00ha zuh@Bs-(Uii3qAICZhYSW+z2ob%}zT=esFM3!nYI#1G$(ec?tVo;exr}#s7H6sV`dJ zVOBG5+xWM++=ctxzw*w#>}{{wEJ0D_OK?)dy;q8%@mbgcxMkE3r6Gsk_(>Hn6vG!n z0}N+yB`}DF!{BjVi{0(Wl&qssEaB9f4!Uw8uzQHogxOuoZvQMwENxwScz#;ShK?&2 zgE9iv+4_Tm`54U^knxn=n~+NtqBfDUil{I3_|?~~cQL7R=D^k0r5vb`Rhlv~=P+3u zOqQ|gLZoGE(HXm#`(Y5NGmzwTcg%_UmT1DA=_3fwr=;ozc*L@?qg|Y=<@GbY1 z5(b!g6sk}m!esm;Xq?=AedR%L9;?)7V-KSews%HF+q;S?aly!spw3M)H>|_7&y@1p z&c|ED%!`m=UAH=d({ZnNGf1QMZ@O|>OrWe{>%FGrR^k4CE`zq}MY?g!PQP{KTJ=?F zM-kFp!?LfUBLLGmM(Oo7Ywzi|_+o5x@|3E0i21UWb|Q%o3Zfeb zH(mIG5GK=0g!KYA&a*gU-4q3muUxzOx{&;I9g)LiFE?mgO(}v%^|IY_U%Pc3n;QSoT<*EA@xIzB zHUJ6Nu!tE(d0-hW7SFF^zI!@{m_D{Qim0uy8ACWJxn-XSRiZ?fI*xjsu0(NLimtfl zP^~ftCm|h;ZYMfIGLNuO^!P|!2y%Wi*au%%dVreMXx2bLu8?sa<&E$mu$`LQQ$@r~FUamDi7rvTJF; zE$uG1DQF@39W8-p2c{~>bO~pA{4m5`G$_-6ZfwbVOO{zMN7%ZMR;{U=)^ixH;COmLRRX-(>0XDZrHHJRKz#y; zbyV@x%9P>JBCQ6x1}q-YyH-@HP}t%h#;hEvRjJAx(BK= zWWjzsi^GE9if+XpFgIh36aAGiasJ)KZ|A=L>=sNU&JWxT43()fn^nh<2RU;oyimm? zohYh$7b>Fe7OGyTFj}pBp~Y#v0)`4MhGM)FuOB}`0=pBiuOi%d5z>AkG20h2YfrzE zzh?jLYOwBSWrp2L0PHmnPaT@BU_A&f)arFv>QWsl-tL1O&#)UY&hWBm{{{w9tC}m@ zzqwLW@(A34z}|;yAt)0q6n@*|Nmtm-fm$O*brNJ+uAAfBC<12Ws(U$-60LH#?aQE! zAL<#L@w{WZkpwsYMCm0LB$lRLqHo6g(+vwNtqW-&J+{}5vPI0Q? zE`oN9jD(CcD4S8Yc*6& zL&7GgI0E}Vx}@tmiUIx72eifk!gq*-q^-ZCdXLTc9>!%XKL6AoxslsYo_-1}ybthR z-fs;DnJVN|NdJ`BTC(=5qG=DD*IZSB` zy#u!fZom``jJ(6P>Y5>^EFI&t)^YhrVSa18m^?*@s=xU%^kvt-FAz(#yM}53IXIrm zl78{tU~n>v<9ZB*rd7djPOiablNUJp6$(d>Bf7>MEu!`=)rW|Rq_I1_d{XXM(5u)E zTI_WDe_4C?;JB{yPOvFKV6)k5f)EJt&88kCMUfH#i4sXnGDDG~$b@WyXow<)vS^^u zco@&10f~?uGS)aXv}G=&3?(Pps@+K@DY>$%csE;>DwS*Pac#|Pxg5o+?9Ps>Jdu_1 z&TMw7l9^holyN*s_V@eFa_S-E9pYLd66y-MMq)G0e9912N6ru^iZr1?J5;Z+T`8i#E!|eso1#% zT{(v%jqBfbws-6b(Hu{{ZCzW>cf)x#4o4>eH>nnATaC#UlB%{O_7n~fRY^CQbIWkH zLywcXlOp@X%rg^7do?1VeGk#$zW&-5w~^~(sKKqTgc6QCczOnt{dW(pc8zgL6-?lSclcVS76Pd%4V-~7A#C7V%Jnd$(f(|5BM)6%=%C8 zUxrSs$A1Gw`%Ya25dtt%CqdCBPOZ?hJvXl^`=s?y1cUZRj)}T-nnh}DS?aWgr)z)0 zO)&r7)xyyC6p^(*F;O4#-ND+13x9UyvLZbCZ~9*XF?sy-0!(|<;MAFgYI<%F!g95* zTD9Lt!$A%rt%dMKt>KrN$E!W~vFEo{^((JzUCddMF>Owyy{|B1TEouI?HT!zauwza z_4W@!$x`>6p^|W-DOo^~b(ha)3uVga_BATmAbod1C-LgfzI8q!8oyhRr;!#Uw?ebS zz{O%Bw}impAS!{FnQFv}frC;bTn?Zs02`&QLV|F8!?bkWdb$4v$3C+)fD-Pb+GG|t zlb<Y7$QfKKe6J7jK?Asc&0?%ie~6Ns(4kgKCrwhL*E38&j#Scs;&C?&KJ znHx}zo|^U0`MuXg%-nii+{ zJUavRY=x+Jk>ow`YhlaeJL$A`;pmM(OMbxeHwQ&D`Sa?={EreJOw#+}xwO~VU^C|(YQC=P`}6p@A}F+{QF ztPN4T97HAd^dXaxiC66HL%tdNm)DCSAx@EzS%GVJ+7MC-?xy}6*+ks>yi#^I?dRp2 z-x(;xM6Y{)d3JIPKBm#^xM?UQr0P^LyMaL7CAm7M=Z1r*+p6F9$ASbhcoK+L^e(@- z=Jw54?cdEo?O((NLun=|WZ&_Y`W7o6NZl7ye{n3DM*=h(il9X&8yN(FzBM(eGQ#HQ z?dMpxIBkuJWcD0IcLqk{3kUTvK6^1mvbH+EkC9}LGDVWkh86L%kS z`5d20X9EGa)qI(MhgJLDgQAocZ~w}`*JBQjyHpoeQ8Bu}QeC;;!wO-qf1Ba1j;rTR z1!>j!l7}=GBGQOA-f?6wx43rN-m?5;?6cVLT-^!yOzVv5&mmHN{hBOai!)EIcW-zq#Ks71r5hx{sYtDbtNzZ7*so zYlQRO`KF_TNi!46g6}l_2`>y&l2aVqhuOt@n0h1{2(H%O`2Ilq)cck#J#e1c)>PUK z==xNAQ1e%oCXon%2@gk`vvb1G`7O8!om}a+o$Sl#WM&Qpc$TKUdcX4W&n8aC0x`Cn zSNR4(Jc57-y0cL}i{Ir&C--POZ!(ch&zO=`{QPrUx_yg5v zYk9Weo7nc-Hy!?=tkE(#2sCswiKd|~x14s96gdWm?bxCFG}Py3JqR_i=gLp*PS_HG znqQck8)KlBZw`ba$91wR0+TtYEw^vJa%19MbzzgLf%fHZ;;%qJKIlS%gK@vW6AIQ` z1iB1<=Jw4Ox*b>8`!v!b!r$_Gzhcber=7h0>l6w~>Uigh+y@6}r+kBMr?#H2?OnHT z+E!~-D=+ueeG7R{2RErnooeXM!IW+`l|nI@{W{@z#@yYwc>UiwnbtwaBJD#yy0sg~=LHlSPf(;8!_~2$2Y%!L!)}LiW!wV|PHCUdT^HTdvjg(uPfD!j{~PTOGdw=qTvXXh(r*4;&5ul|m+E|cUFh#% zA3cC>tw$$5$uUy)A>~n;!R$U^@)cb?J8{nnPb`dS*S>S3``VgI6C5BC?X08pUvD)( zVciRS7ns)ur1wyt&uafF1m-rUmFelcjCQgC`$7Y0covRVd;8AL%pe&V!}EuyhZkn5 zBg@)5+HaHNv4=i1ezhd7$YBsCrv8vJ@{ZSIZ}X$q{`J5kLD%EMS4Xa`QS-&wx-!Vw zvUm1zbdGWb2-P1$9smis2rtgl!^on-q(ow!J2@vhq6x5^m>u8siWwm56_8;r*Tfk( z1|k$ECLz;d0&Fe>MS;6B{WM@Il4+3X`{i}#v;aE$Vl(rjdKRh*{D3K`faRJCe=4Te)HqzyZU>ad-c64E6P_( ze$N{KskZcA!P%dz&EYgvk=8(RDM3RtXG`!Q55z(X#&-8#X~Ujfni;|TK_a!DCX17c zjfrLpvs>+F`4oB(9UR*EKouL8Td&wU#?MHt6`nub{Q`>p< z*cbK@i5uoh|68}0zj?KAv4wAfv;C-G_fJB_Cg-X(Punwwt9QdJF1yLr98*=z&HAtT z%HUqLBx8>`w2Ai1>wtI>BI|=BOXx(L zB^uoLJxI$2S1-N+!RBa9gB|3SurI~*GPVSyetQ1|jr}GEYW`{mLS=e8YIgfcP8Tmr zT{c0&PSNx300MrJ3>D@c@B{JG^WjPZnpHwBA1g1AQqML+1KJf(qd}qmz3!tOUCXbD2-AH-X9M-@Z!R> zIu8(JPgdZns6}nPQ&#Ly9KJC;3w8*04Ly}QG-g)LePsJX_#)wLUPqk^yzbD0RSXv94VLGx*=jz?6(iWGCcS7FZQ zbyTUC(jAR=kbpFJ;f(7D38rb8$1#rOvfjMB13QwRvL`dap7eo9ol-i1#A29sM%EMV(Mk!G8HiyqWAEkG2xh*=vKX)W zD>&j|TIQJG_BV3!DG$*Py(`ISW97k`puVQF9 zoW2E*d)1*XinodYU0D@4S;Y4KZaZS}sUT-#5~k+c{fsV*1?~luD%AWDdvc=qCdT63 z_gP9O7|L)*k?*oQspyDgQt5WFb#$HA0nvpDMDS!Nuly~mZL;&*OHT0;+&w1!zVGyk z3t~zX;TbzR2_IBB=#cUTI!K+oz*RQdAB;4YnWmfnn(1*PgNTKi1_ugKkCgUP8zSqN z%W&TO_|{htSfoQw?8I!d!x2eJb_24jFvKHshIpnFJMKi{?Xr;eQP(_q<{^-AbHh5R zaDrW6VjMH24<`rw@W{Z|9YDnoaW_~%<+RWHE)&}l=@h~XMr| z!;S}Q=Rk98sVM?kp4k)-#+ExIZ3{qVnn-gE_n{_@xf#kR0aNyr(87eklrYdz>AN!) zLs5p!$qLq!+z@iWIa`yL=Hb!~K&wPWfwkcev0 zoNw0sT(19w_cE6~Bp7X%cu^^gD;9%b-7{pPFj~m{Ziff&ux|}24qza;`2fAPBNs4` z-h6<53C^J~kl=iPekslY45T<8pkI=600T+R2k4jP9Kb-D^8tD#I(JcmGCn>)slk(` zOK|~@+5_SPJeq$W9?J!I%m)}gcfl_7oV(nc5akN=_N++n zDu$fv-1X)@cfFyygFXs#pS#{du5;I$``q;wa-F;0+~*Euv~sO-?sL~$$aU^|bDz83 zP|-KvqU1hz!KU$?yWD#Qg=+Im;N!W^-Q)Sr-Q&5>-Q)Sr-Q(VK7rwZH$H_B+-ZK(L z3r>g!&3iz?Xu>!`j|4N`HUOKk?=9^z3O3fh`@+wz|Hu(yb`2=u)foIt z4ZLb=8QvmZJDC-Z>)&*Q;|d|+#yO~Jclc;4(;J@jIY9_r8erB&A3!1Cg)u{PESft6 zhPnhZxSSE0<@)=Bn+WM-qPWk(%{IrOIEQsRGZ#g9s^LXaI*2?-w!S*c2stSe0=h&l zq8r^j)w{k4D{^#>YDg^_MAz(WV;ehCpvXC!-C z+-r@FCwC$vIV}I=?n@tY;aHH*nWP8Q7QiSMpfH2uqO%dQXKr=q?&iowm-$T4`favU z=T-J~UitFHiIsnLvC03w`4^52Vo!Y-QSg(q^GFTVoM|qM!-abpT1muDBxmYum81!eSZjBYW*C-RJSI_XHhgQ2Y818XSr_&cqf4umo?e*^tM?-y{H_RWn!{6 zGN;2{+{=XhK;o zdsjH1E!$>JRV|m?xiof!@nrFY$x)u~zQwRa(yOxOW+mINLBk0ls$d6I+K9Y~$~c#X zW+!v)14;0Tc5<`Bv$M?wAL()n&`24xgIi?BOlfQ&**u0tj@iPKk@H)`Wx7*Lp3$^Xm72{wjsQ`>z!e}J&@0LcU}7TOeTG6Mno7K$&KWD8 z4Oj0w0u@=ec<$J4jcxOa5aof;2AF}UlA=Gi_Ckef`kj&P7Y6m8+O*V83Y@7S2b^iZ@xf?<8W*V$#mN8U;q-|aK4L< z?A>iiAp@67QBkZvH?@bp7Ir-4IyN^-Qiy|vZv@@-=Qx!J`9Mf!{g3tMz|ylv1If&) zTmh%%mPP=rzwxS_fzI4e23>y+(04lMh?5ILdy&hH4+hRNIgeAJ>A^bPXCygn=qxcB z3?f~1c=V;=S${I?;>uj@lg7>QlXfQ8)#t_*`x)8co5n3{M=csx;Y+_Tewr#3=Zxt#FZ)suqB+S0J#^*1UlgRBH%cl ztg0p4iG;*2%oW!nVL%T@x)LQ~FdlZbnqK(8 zCG>J2(o0K8H+I@`b|V`ya!KlqlyOOx7nY~KLO*;*BeA(Y-)u}m&7?Ux6ly}UBHz}w zI8JT0`yx2G3ZGJ)>xAj814?r=D^{;ew)E16w{JQgbX$#lE+vI6g9<$FXoy9D)xqjE zSSNM;z-$-1iU1v38H1}W zKl*?H6XsG9LxdHj)uq{t;yuKso+Oqs)UE|xTXV-_2(7{uR)=?Ans8ph9fnqe7N*oU zkFqYb9Yof}0xm4gs#L$LSr`I33xjinaBN&i22N}eKEgUUdvt@0`GRgSSSl5HE0+tX zh3kJ|YQ!Ne3dg)*`KTi=6RQ`y+fXMWSvYM}wiGQVm#7YbcDD#(-jvd9EFWN><$E$i zp^D;iy6*NL*fwQplOq5p(<7uIMwVC5&W~sZKinwV}_h;gzV^w1KbNzmV zhlm4&#boIE8>S#fZ=aaekwb-#7r4Svf2CX0XKjp_N=26DjrEtAJ%pv+L~HINUl7O; zk;k(Ln>2!m3HdO{?l>5R3W$f92&K>MLB-C~SN_+K7j5TY6QS)?RUivmdV4Z#=4(~OW*cMpo^3`*V3h*H(jcpvX888ce)s{?vV6sI!R(MHt89XrwVQlIi#aq z$_J-*++>w7f8S!p!axCVnzV#+q$p<``c|mtizR#xSNp0bVRlEFFy0cuPZpHtd`6Nt zNx01DGa9&A%FynaJ?vZrGW5ryjL;D*;;R}}hv3t~IfmL?i2DM~qsYUP9g#799I9AM1+!V(Y1m6REkEgrKx_{|Cr~aTpN5ol z#v=T-5!k4V1LUlzp^g_e*8lVPjf*JjO@nr5x9k?c8SFonJHuX(O5QEwIpI|pMNtE9 z>kL%C8zdj)o6YM#cFbD$lg^iim&w>6m`C#4A+rwsNKAQ2-_GiM<;L}I&%ehb6U*Q8 z@SxmJyu;?_5XBTeJk7B&#Y(}Z;!jjs4tfY>F4~!n-O9*b6v7MaC0;zQ$)w0IF-PmM zb`bGB85)n`r4MU|uKsWH@7b-r5w3YBkx&g+n#`7O){FITq6WqKFaN1+T}ErEV{s}Y z6j3!Tg_@R3)91WQB^tt8GTi3|G*m8^IXb1MWvJ8jwrxhQmp-KM5Sl0U`aCQ6_H$2p zXX(<1k&54(W2jZ3xzBE0s=qe=FCu2T%HRTcV8gdx_H`aK4>pEO9$RD$&7;S9$!ZdHr{HO1)3k}&%wLB^|@K`Swv1fd7tec-aELhR;oX1M|hWi zmzLm*4Eu;<=-C9nAVjo5)WmXS8hbjKjCr7tT%AJYV7AuLRaB?wVn#b-cVi+>N5OhX zCwEqCq?q3V+nZ)~^SP<%&{n>KFMiVe#LnB6OKz|%BwpZ74=?+UPAE>+0oxVH$5F@J!3UT9(W#{6=Hjv!&9MkTt(#(UbT+W zd!yX6&}$;l7cY}nNg)a(3Oqz{=4q=!k&5e9fh63lZ=A&#HAUiNY2d{(Ad!rR*<830 zQqtlMAT`?B5w;Nf$m(RNacU>XpWoW;WJ5c6xq1>=)<#f~s<{9O4Se4yvSE(1CzIDb zSJE}76BNpNFH{)zfTxpwoiUzV)%c{>D^a?jh9qGeyDuBlywpcuJ?REFLi$b@cNNqY z3zt_G9iN7-%T<&%Wc}%!5d;QV0p0BPz}@ss?F9D+|`g;DO{d7tpIsg?4!BmvM4<@RGrGfUd-By8&OftCuFk(A-L9Kg=Y z)$!r{MMkhyRL0GOdlR&oTr+ZU+Ow1=0j2{Sxj3W1_6+3##@(q-y;=8mJ=c&5F(KSxZgtE5d$E= ziO>HI4ZP~tUmz3T{#_Pw)la{Gh97==()Vi6Px0mpc=*MSfq#m}zLQIr^3+!~?RWIj z3vkLizs~@Fif3MCCGnBR5&INkC#Hj_Nn&RhcQs5~r7)EEyl=rvy6V@xy)fj8okOb- zJBO0R&Y@2wb`HhG&Y@L`okQtjr})rIiqkt0J43*c3lp2$k!S50$|rUXMa9mcRf(Ob zeCQT%o00?;$r8}>cvh$ zNqlr32+;26)xp(83KQR*od$c=506Goe0p{VsH=W^G;ZSSv(Mmuiswh;Cq6(H-<}@P znHYg3r)E`VJLL`9V@7aCk5HFd$&_bkzs3F(?~tCJ#FwaQI=C}&Q|2Y*F|zyc4#Z91 zCcZ~oLGJ1wq&6q?uI(RZBqQGT)+f5wGECZUeKP-^s{HD>qa7d!HW7_;i>$~ie~W{r zyHfs2a>YT(d0ePkhN;+?ZVoem!*{*54;`av**2;)rctOFsj!s=)Yr6g<-_ZLsjT&^ zx$6vScaQ^K8S5qa@ysN`xMmkKoafphG(WZ+xWwEu+8lq(tDP>Y7R|s3r(N23W#AI4 zS`HNG2w_LRQNs9iv>E>68-Dro2kR#;PSp;$p2V`|P&T zd#w=ZeFHS|FXigHNGCEU)SwHFV%jASo{-o!^iuRqK#35M?X%f>o54>G8!3Ai2_akv zy9ga242k>m5uutRyw*0qFKEs*)J#uL6ROv%R-wQxz@mf(qD}pD(aogf%{3uU_ewws ziv(si9%+OK2sNHxYWdyMxf5%*BYUAThKw1xH)5=LiOsY3A@*==7ozDxi>2256DC{u z(hnnKZyZA@)BJSD+OL=P*@U+-CfhFehTL1F%mNAHg`s_pR;nUZ5oU&=zT~CtTk7_a z2CH1#t~XB2EmbACOZH(Y{mS@QWqz(u4PEnVRmv#;EkAz!SNDbbEUPS5*&SBtXG(7% zbe{!isQeaHL?`gBsRGF1pARoB&SlhLZm%7p z^NyXh%FN^_Qi37ZnAG+2O?X>jrZ8h0-ZkUR5>(`m3y&3Awn5v>jQ{m1nI@qer}wat z_xT}JK__?3cptdCZr`-@v@5r1--y-Y@R{hzLI@(9e{ww!Jl4_nCA80RBODx?eSI5U zn$(stHA&RAVa}Y;H^KJVGds5cCu^`jcsCkTsO_sc2s&Kz3-4rpt1w%bD=c72hYQn% ze$_L+8z@W`#tRdL#lkT-74my*UFZ9r!cqM%2&i)Y1zCypzaYd4$dkZdkY0%MgnSpr zKN9&qz<)CGF9H5jc5Sb!S?I?!%!)_uvBUkC3iY|?DE{cxfAl_uKOXO!nOr~xpZ?=d z^v&4cAJL!X_fP6Syx z)*Z4ktGH*P0A&S`{e%~3c3{3VyAnnC0LokHTMWrzL#CZ+Cu~!YEveunHit1ZJ_ref zX74n3IdR5a)(cS?yfWE=^3?Z-o{$)saNX?tG|XzYrX`BnE{CX18jUKiYz9RMHZzfB z-GE~!i<-&TQLKr!F0plv6;!DxNjh1brwbE$8>zEHJ!8E(VTZz(X zHkCXx>tanOCKpCC=SIEE(Z(Bb`Q_z#flyl)qr4&rlcx1fox)TcW zz7wn#B1(OE@#W@p9co`cg_bLD&CjWPWg4xC8Lpjv|lC2hWM1{Xi8YZ6* zXHeo>LJ^aHOJGPbiOdWsr(kA?iL#$&Ncp%>gA!d~Lrl*7X<(vn)V+Fs^FCD?Cw4EI zLFKz14K>mG!=Ui&<+y{MfAyu0Z~Sa!`s&7sfc3l=6`_z#0lq0?RNS-{m;KeHpbD=4 zCnRuMo8Ufq@LH8c${S2H#b^qvkT>Qgy6f{Fvf^FgrxJ7$v1vs+v0C}ncj6hz^3QD~ zp-!SBiF9(uBk86_)(BqI$;#&-f@dQ3uBH?oNc> z57Rlz3)6RiBMUSHa;oMdm>oz;>7EJ;h1CApFof{B14T; zCb3xu)4?&DZFqKJLXBAMz{vkQ{(C$*V~n1!CG zruXT&krCv3=n0uc5(lQ5_og)O&1znm`u^>k)G=T9tEt8t-?t;)^Yq*zmI*!=*wjew zrn5JQu}9VGO&w50(GrV1-4TXNs)vv`z9NZx^F}x!PZ(#qIXkWr@+7vlag$7L=7d#0 z@btpmR8Yv&l#6KTv}ra1IT5zB)c5(WXq@=d3$VRVoz47CB86tO9kR1saoUP3n%K7U zt$%Z6P@O(ffKS1Lz5V3y!b=cpCg!GT8J-`81{MyEztf?BW1R|E3QA_|^Kr`T6(MO`=s|qQh6YGw?lh_`24b=Nxt;fs|kT zWaUSV513{-#B6q+V!8nxFOk7#%BdKrzBOu3MLSx<_LbUag}*K|3a!FR&3{@8@*Zqd z?VNhciQ_F3fN{-E^Ub<>L&r8ZZPDg*kXQfbiKm5)042Mm3gE*rKD_59l3+G$>U zYO+Q5)zo?3Tid{mp=ctrss93t*_?0KtdAD3_tczZ$)dyri*ksIRJLo87qLZ8Awh@w z>|qyc>qGkfHk0cnarR0h-);UD4@mz%u(WiY0?STLUb6$J9=?=5(rxuWR$hK;to7&Y zU%~9}JjGa`x`f2>$N?PLU6u2n=i1p35`i(9gB6pZ&N*-Y_>?2fYSF@z(n1o4Q7aS9 zpr9oRJ=+qcO$4FQg=<;g&Uzw*8a?_caL?h{IL03H@dH_ zxis;GpEc(P+Na*PYqD{61Q@3;QY!DFMarW$ieFL+ye7| zqGr};)hjjaGO6@T>QPBK%6DWvwsjCQwo@Zw6YH#_D%WUl-*fZFA5S09(z&mVICtHq zGw07D@m?eoMDn=Uxc=<*ckKL?(D=Fe@rB{h^kZ4!?kw~uf0z)becu^)D}k-UBLh(g zNoAF$CjH`bfdWxD1t|SmDk+M1rtL`9YifAyrOuwBpf_bGy{jFH0g4VK29!0F-h`n* zX7vrFlXIX9JGbT|Nwm9VF645G#_1*Q3!5X6IueJ|-4a5=&VNPxZjHNEB3757ONDII z);kGY9t!ZN?v@~U-k;DS;f674=+yO#f|qiEtNK@&;C2>ny&OphyEUL%lrL4O`{$ho z3l>Y(+7*B?m@+UfCr+nb=7dn&J%VK7Vp}O;w~4Sqo_b~{PUFA916v^|E+r8QJuj-{ z8Y=Wqpj68`$D$?1o_6H#?&3$L5rttDDK&QcEFYp&OcA$}SPXn7$M*{>T!O zxp^Ln(!%7g4c@ruyiU6X0Zw#tV}o>8YE^SG7M$iJxAA2rsa1dU^bG}n^!6eA*#1-cdt0LGT?6UqLr0{HQj)(FMO7M;Z*pyrY7g1BsBk)-qqI% zU;g4i`@q6WUt$d)r>jSTuJ{O;5lkQjD|k)#(aMpzHl3S;$y-Dku`?=9@WeT)s2anu>mJlV;iq);x$pZf@kJBP zmJ1I-7prC`{opxaNXSBQkE^J)tqvSmS10*)B3OJ1It>Ve*n$j`iLE8QBvrrk zopku~-RBX?KC?8Vm3-klThzd*Yog6ufyQRXpCTr2gRqw z+~v}V`Y8Dji??r1yz4y0J2a9>F`w@_7MzJaSAJ?|Zc79QZVz)~Cd4dpXKcBB^OYMD z?_K-xLzV&W}xzc4|jxZXT38)$u@+cC@Br(qW17Zy#>mq;og#!ow`)YmBp zpN~m6#$~Pgc{*FteQP%}FsjLzYUt0wRBW#4w0M|=ex1z5H|84`um8Kx|Mp_LT^~?@ z7zCBkK5>lOnjbOMvl7@89n)Pm7~&96@lb89s#7y-x2EbT+yf2Ta!)Sf{6Z7yp{m;a zh`NxG?u*}loh2;bpFx9`s_X4^R6|E$T6JNP!xxbh>F9CHtPR+qeZw0)W(KaDdf%wD{6sH}f?<^&}xPI#ejs=4w* z{TITS>{0}#(0(C{iag69CXsgHq>{^E9j&9}E90g`PJ@lqU8pBgpIA)T$ajtEC&wn? zgptddRc}}lRc_bm{Pr1`;}8a`I&G|@Ji{s&Z+_gAlEwHQS_<_&jj`(Xk>6tq8Ox_z z2il6s+8nk`^+W^yMN)$VQZMgO3LX;(<7&ZJ=l&~&Wo6H$lx}{j#OG!U^IGj^mUk4? zg{j7tO7>V4DkhL^d>sd1uk`go+L>Vlk)aB<6z zJ?0Qz68s@dMmpVHwGEU+ReSv@82aWKDh&xshQ$$&L=;g-2m7V*1A~t(?N?xpbyRZ< zbPlw?^d)7Pf8#eu9yi9o+J$GE^K@6hH{25P+gH97R4lyjbBN89kwvqbPz_8kO0bWX}>r)(kKT?&Ugx@2m)2lsb zyKppQBEI{AN=lMQjA+{()kK>Yy2#%;7U&XxpJj#Ctpc6Cw93%ycd`b~U_~nL!b`?U zo&E@VRrMT%Q-^86s$sPIK~N&PMgXya43kgvdP>N?}=DHk^Fp_{n!8{e?MK(@i=Mp4rPr-?DMKCk3JTw#!2JW ziLAPsDDC{6x^8MRdUH&A@6TbsB83sgo{? z7V-1gZ1+Q0laUHh;kqkTh~td>NFq#3mmuo?RB*YCm|4KF?gSJ{x}Gc*r%-73RUj_x zv=k;B;&kaiXd>L3AK&^jyVX;`TJvCQRnDu#E5L&BqVa?A7|8{bI$KtwPl?dE{&w4; z8b5A?N6#+JEx`wvzK+?De2E;$V89Aed{{`MA5a#9-aKRkLtzo!mcj`-fN9sxbdJ=; z33$?EoOFg%7Qke}u?wKyJC5dau*!S=6U6FGdpE4!Uzs@V2qkCipd>Aok)>&Y7OOX_ zmW73G`-73@@*F&)_^%lj7dd?};y7n-yY1Ixn^kL+JrL|^48nL@+4I zVtX@)?TwdFNt{{PvmCyYTqM}}W={PvB*GOCg>fXqBLiP|(DuZpQaP!$Xqof_%QZw` zI{rBZjQFy1b$HBjnKOh%Q0X;EGjBO+$?UG$YiWMTt&*rnM^v#ta3xeH5!t10=f$05 zv9*!Cj$gNva?b#iT-Q=(vNHB@V}!B> z^=6^?f}I0RskSQD@4QG{4Tk;DsHUDZ-=wfQSclOTgC*nFqFOib#N9T&WAgEuFN4|)-L--hC?U%&p&(*BVk zO-0*)uBw@MLrKyshh3-)%<0l%e*U17mD(AW&i}so7Y^UIr#?K!O)!rDCRA-%7;nxt zmhlL|$d<(eb{W`OY3T?ni#x#ghk)nlqjQM5kIC^_IA~@e7Y(xAc4eZWh`bP*y8Ajz zJI3NW)a(qm4+8SD2+`hJ3E6Zj^#-bQ&Mma65H>t|tJ0OXxl^3FV5NEkdqfIEXAkA# z*%zO4hO(!Q*b8Xl)tadUnfPK6@v~}TJxUkGUpY5ad%a1MTPhhPrSswH+O;UDpq@I` zGPPat%G*jS8E&;$RockZR^qM_)6k&5m$URU(lW+kRoGH|uTkgtR64b?%)B7#-=sP{ zq$AlR2y~O~*ZMm@@dP2~Ylpp&0CgRt?bY$n&5g|+9ZyHNxmUv@GXQ^6S^)!jtds54 zi=hOasz(ST1rzT^5bh;{@d#1Mm~@DW@)V~Bha-F`5IqaM)${cBOr1#WVVQ8~%AkeM zF;qmJBd3VyiS35XwzY^u+GQ}64COo3qo&lZX8;nO)l`sfnGk^JdEL(yE(9+4J1tEb z&b&Z=skEeEoixAPX=-xjCdss<(&WtVr4K{9eT#*#o`{GHSXxLwIeL;J%iSH|Oh7*k zCo2DN^okiHl%4GREshRZlCsgm<8*S@2@q08skdV4E`Xygh2pGTpk}%^ai)8#xn{ao z?c~InhC0c-BN;QT$CEloCUXWt7f@O|-yF%{BC0ALRc@nviYo5I1Vz=u2_UOgQxQ6* zrZUv!Qc`sif*T-#LUZtB6NKG~{7hTmDBL5C!X?KU*$mqWGG#gi<(#a-n=?q(GDxT|_`8|Y?M6;x=7tP9>di5ZUc+9mejEayF^&-YYR4hh64%3Z@{UYYJ|}NGC*)*Jz6X1b z9*JNYURE=Ia54>YKcsG-;)_R@_B)Q%>+3MdFM`$gxmH);ES{vj+g8`TTerGwEnczy z+|(Xw|Lw@ibw#^qK~qWZu0O}H9{5+l!L9zs`g7oGu~VZ67feU7xg{hLQB1MNRjvHO z#`=FAzcGHm$(nRu9km3et5B!GYfuu1G^XcTo@lJ%%3SS}#?A4Qc2w)?b7PDBRLZ0d zX$u>Xx#4tt=@-UNztunRWJC`E5TsgQJQsrIl$}7bC1&b(x(qlStXW6R0p3OGLcs8! zmbW-dSz}2?=2oNwMgxfBdXfbhC9*uNi(=9Gn$1nhO0WqqC z`4~Nm)@`PU^Pe!3ha>$covIxP`^nt}-;IPW4n(?Wsb^?aeaPO69BRF~zC&GJSf2U{ zYb-d*s?GKJrZ_a}`vo35*!Zbi*n&8D+3t&gWandJ9GByHwhj=@QM!|*_sx6v(ucQi zItHMvMiC_G8O<%}O;1oJ5JNE>pl$F3oy^jHOTj zHE=O^B|G^vKN~hLLvc&}Y~15>Xt=z}M|x@N~cUUsh~xGW}Qkz$5zCffR57eM<5m9qmOnW_fmahWUid zSMYNmo(cZ!l|SLiiEDci^=;taZhx9CMwD^a{ggtm^K^IBRn`P8`^wvvKHxU)Kf69{ zb?mm(3=HmHH~_#1Bjk`)SJG=mlV{e;ClKupYmP6=glMD_NmPVpsk5pkf#d?uSx&Ro3kpz1@Sv;`mu?Uo$0_WPwwF`SfIr6f~D)Rigavoc+s_k@PP2~p~$SQ5)Rur-#9o|4QCrp-804d zH$U?qYU{uJr?zPsO?h2Zz1bO6yHcoK$+UYe{Srf~`cItRHlUT)&?9cCUpJR@TpPw$)1YXDtyMBQ*3p zYmAtemv4c3ay?m5y9+s(jagpwdZ(H@JhkL!*ke7z)*VcemhCjJfjDuMRtS zyDXj)N!SVDa+@+w(gq*OZTo4JFnJCvmja;TtRD04gQE{I}f;T%Z2SoYZThKNV z8;G{HYkynpn88h)BgeIH<7I~ah=IuOWQHZ;JMMVmqVdc6C0_tzo^DIvPQy8}I}Hux z;3(2P++IiFT4DK>S8mN4!+Ho}sCsr(EJA)oXoV07S%o*lFeZBYd}@2J1BGRVF>?xO z(+Ig3Y@>}$6|Le-Qp!;pP>;Jo94~M=NXJWeKZxT6%ExrPbUmWXJoE6G@!FZcPe!ZK z@nN{+0yRx5|T^rFZ75W`-7Y39D2AX zlp1?!R?7bQ2i93wPG>@gem+cSsE5cEbimU?zqniHVM2j#_{CehoiyXShwhjO4S`08 z-sytorL$NViZY=?t7AgZKA8!%ICsK?0yUWl)u^jwLV?Hg7H2{&-s+gp4$hl;ZWP;L zPw`%jc&7}gAcxu87_$2=8RjONwMF^Zbmmi2eJ9K(P}7)CgL>!8C&3e$PYrzs%%_G- zVm`y5t6)Bdl9^AugR5meL0g>p99kXoIpi{*LwT9cp=9QB=+2qXp*Zt7v>N7fNY#Ky zVm`(BMjUrn&3uMXBbR73f@)7%4(4+x%6tyxXFie5(Q(-B7|PFl4ka<4L%EsHp*Zu2 zS3f87Ipi{*`i)n!=3zeDxW(Y>_dx;0oDry4Dqo~`_^rZhVXm+MN{0*6g?`m7z8fe^7RCz`g~h@#_#X0m5a4{@ zQ#h*s1;%XWUwR8q>3@NF8_1KuUyxpi^MrgC$3GJJKEQu6@-G2?5aN1OO+i2AU{7^W^!R+ZlVA96MZxG_eb<+`Tdjn5BdF5soQ(OypBQd@)==qKx>1$11JN{%}3mLg)k3ZGN z4Csr;kM@C=ZyrCEI=T`T?lD=yS=;M93y-0kNotd#G--uT$--lvawm5!2bRn=p2LLW z{ngq5$D?6=tBH+{O0NjGN~K5KkVN4Qk9T6|PzLpE9NxDM&L)k+OE*JO+d;*= zk=W_^ip=0WI1-QWs<1P>N!@x%HQDpTBc3}c3Gj)+A#AEtz$XqJStZ~R06v)xc;wKN zs|0)!fKR0ZK6&V=RRTT*z@zDaPaQhCO2DH4JeCf4^w2R6;I4#KJ_bOpba+`h!|QzP zP|p({%)6%c*!^)26D*`3mGbkizVvadkkP#_HBpOUyYfF?d+~yp1lHVLC={f8HBG=4X`3!zt*nV~Flpg1&%%U|(0bcv z`%wIP>udk1u>ZBcW)0)lx4rg_l@A-g7Ycbj@-#9eJ;PhQy1ySrUnDVXNPT149Yyhq zoU*E%fbIxpl!tlV9YQOGlZ6w78auf4>mhsa){`e{5g0DRoC+9rAc{;@!Q#z!tebQ? zKa!#fH^=%da+;aE&^Fq5a&Bgx6gV`| zsS2{LHQFV3Wc=p2p`Ke0+3q(ya}8M=utg9Apj_7D4V?2^u?mBcN!PEBOgi&5Y^!&Sc9OESM{(RDl7(#AP&Yh7eiY@JSew+ufCP3(w)GpjRs|^xr~Jz zi%n$Nlvi>t7(0OMRpdSB-kaxDCHdrgvx~pyBl7Au7M`V}lGE=V-4>6myeXK)`6@2q z77umGwkM#YKq+ewYq@h~yv*OnHtl`7P4;-}?+4(hD{?xTxe|m9PBkYisD|>byYr_7AsOXbfEqsw|BSPfjQB zZ?>s(w{3Qt%7c{9xHQ!L+PB6JywG#~KiVnXj`{|Z^Aj-0PwVn960ykFR2=l2?b80* zU)M^_-?EL@YxZyq9u-L|65SmA#%7efIm)lBe{m&t3^pTkG|DQ^WNiJiiV~PO?X2fc zG@h6onWTS~@*FVs#Kaq@WEjrE2|LIRlNn9%o7EGskp``vPHpvcaw}$H3+eARn!c3t zo22`8RzSLvMuFBU(nxevDUAYyZKRP{X;T^nkq?nZPk6?3#Lh&d(GgFhC({}|8EYgD zymOIs4M-*&o?0=5q?|qa_aJpxsmBW-pJD)(ZHQq`P@Elv4Cb>*MMSho8H!8f&xFQ$ie>-hZH ztG~`%`Xm42t(P61_WtLGCq*P;xQfoJkJYC1Bg}0QYb%0=!?>?|p6aDhyd*Ko;eir+ z(cu1)@us2GR3mcLp;g9Zw~L|G#$L>gOlk0q_nZF{IoFUJ_~hlGlQvzy@m`d@ZTWA> z#c%ih@Hi69#aZuCVJJSfq3p52A`>0kP}bPu+;>?SCQ=yh1UWyHDmX>XFEf`Q4Pp-0 zy0OJ{iDC&$z5t5cUd?}63(PL-UdFbnj^VwHZ3x*ttnFZrXGxy-d6ssF{raxZO}<9% z?hQ-;301=LlcPA(qQAK-WW-n_cXi^Af}47c+|7wU3U1~#au+B5D7cB&$laUxqu}OU zBX@1WkJ=nw`ks^LbZB?NPum+K1BH+?);%Xp`Gp)m?lLMKRBW)fAm=)vZJGXjg&u}; z6oO3RCCqrw33!W5ANRKFO=#EaZPzx`^J{-=_rls!lPwxvQ#xt8a3l2N_Gf0(e*5?M zp9O70q@rk85{BF6WG=j0XDdwjVTlqHE53wgWy5*#A3Gt{GSenTm(h52!P2u9x4wAQ_;t*HxV^tRKt&DpLa zuG2fW&BL8Xo2T|JxosU|b&*5nt)4Ph@fIo@E}~u(gO<{+%?SX!TL=FoEOmM=7-61M z;Nz{d%$^p&!{2Q30%V zyxQ}aysJq~@IoXd!$ksJqI14dS`~kDNlM67?U`IRuR1(lO>5@RXRqw_*sbI)Pe6Q@ z$G)xc!E$ia+aZk3%!~OU_DlFL!-N^AirX$%tB2To$}b0rhH5%{YW-s+fV;kFw5Ztib@E5N6as7-#>$`L7ke z{KboB_#N|V@Vml6^NHV5IvlLAi zj&nqL8fiAp_8+V+&n-!^4^E?UnxZyOCQ>KkINSed^~4y{TDjj+KaStJ5IWfjz~G=l z{W;n(mjL0Z7Z%^7L{hjQoplLz0|$ru?9}A&^xU{yOWVLh9D`5IqxkQWu=hWzKOZXu za=?b3W4({|JbCm{{QohL2@=tq4cV^x@O9nE%{Y6{E3Y*F{ndXw0bwr*CN< z>S5Rrn63*sHh6vEKw{c?zOcSj9zTjC3(ncJznL@by^G$)j_qjLpPPpQORnd%;b&c1 zY3)+qD9e)QrzQ=cd*#FHe`)+4Su+Bw*S zy9CCE0AX!0lUqZ|1yKS@NRPGkL?|(tGLp`y2yWSkDTqbdz6QR2AyBWhEAiCVs58j* z5=(~jkZMkE&3WhrVJuR4h^j9$^nOw2u*iwdLgG$@xOONp>O>OkTp10 zHF95C%MPYrWM-_`3hf30iYeig+Qf^Yg;HjuG*r~AxNv^{y}~s+wzaA%s4y2jE@K<8A`(v ze==gd`Im!5CppF*7f*-DBJn7-`!+{L8t!S*$ohVTgZ#wH7ap>3G!MR~N=bhY7iRvY zejoZiut~iTP^0P$27k-ljGHI;M*TwRnfMAX;3DeNeYK78fI{Cm!H zSA*_weCJ1y{0quOW>Cs8>ut>^FMVjYPa89b`R))TC5qHmSugn{FN}?WRm*4@seW6M zmUul?{<^ebqf2_qg>^4M3NURY{P&@YA(i}y+mnh)8rxy`+IYv)`4232$AdLbS76tE}TPYy4<1Y`Zg z+%)4?=3&cPgrO0X`I(anxBsi(XngR-Z#daxcWY~cHr@|3;d0L$Iwq-vZ~lub?@gSh zldK)&`jg@aD+&!?%eJ9ozq-%1y65Ed@QnCCrmhFy$$|gY3Hk1jRy=o*HzDzf;wu{< zxPzkr-g~oTDF`f2Q2;SSWm6DXrJ?|0q)G#b+LxF!+c(EjaQ@YW7gs{_%(~RxHhi+2 zc6r*yS}y5JS9nNJ%?cdc|MovR8dGuoq1GELt>=Vi($)I~YzI35fH6Qqlfn_F`+ zp?UC4=q|!?I@R3*jp{N5ApK2n#~coIWT?kobD7oa0%53X|H*suy4b1eFhSbd9(08s z^2=IfK1D3i=sL=tWJyNrD4Vvn$FJ50$S2DUtN01tv4uX(KT9|j9l7K;2&Yoq3VstD z-NPrB@P0xhJlrSD2UYq#eTv;iXw+%Q+WhMAKE>3iB&uly6)Cbg?AS(lw+r8|Q)~K` zRa(=~U=R9Qv_1#v&ey6muy&vj$>VS@ed=*|qB$JW=&lfh$0YJpc4-{h|9Kuv7bti% zlYqQWClbmI6k>r>28O-~d@wSvvEs;go4@6-CKV2eZL`^uBGyky;)&#Y})&n4-RhvXDCUP$ydz_SLZi?syySS5Y*bC10;s8@AO?$oI0&0HLPIA( zgTh_=sCaQ$LeecLqH*SFM_gb$KqRSJ8eEa(t7#^%^HDk_W!?I9X8p8=J6`&@@q28n zuArgrOCOKl(0>Ql@V--$`xC;c)=1#4dFJxdDtIIK(tG=+J7lEMwzsx{w~?ZZ!lM2Q z*CTz_^j`rN)eFTT-TA2Afq^I_wkp9${XVGOtWd!mTK$y zd^rh~?qwrHA@I$|fyGnlXL`z1#$0(@UH-P~(law7p`x8>1a!REy8dIzAMwhY1UM6| zyqSihiHJzI>xhvp+>!<|UY7U{w$m%s1!slk5iO%JrT7q z=%YtwhCAL)EaJ9cdsGU|hKdwQ>$;={!_IBX4j7nLX!tpjItW5K)zC$~YOJP5xpF<%x z;sd8)(WwSX_hqCPRBp01JySTfOWL&gx_cy7cgh_e+a^zUa-1Vf{0-xJ zC*M>(C`*nlP1zluG03*3B(^WEyZDFAk5mm(JNJ8h-C*O7dbvV5>pVV=o?vqnQ#f58 z&Gs0^s&?*8#4=6+a|k}l)B;*?zRHe%@xf$p(arNbW}&M!i7^(u`pU#5+Fq(~vb zSQkc0(MnvoH`HnI+m~b+)teXT;!t!H#vEW2#jERsgNRjadMMV1rXLPNDq$jP3uaCc zv14*=Dt2x`SI*%`Ba-nyc7jnEPbih5IRf8ZpjaF$R^R48r zsfLm>P0b>yRfJqdwe|QuP_*yVpb&s{xgu4hsJHLA`Qu)#dl3xUA2}xKk{Bm4E%c{r zf5J^L{~ilvDI#lsLcJm9Oujo<+i>B}u3W~yK{Ss3oBo$TOddZC-&XOsVcjJtsTUzE zSNp0}`#nO@sZhi}spKIC5rZWhR%;k}m8w1XvFEq&d*-javUQQ3dyeX3)0y*Ut5Cs? zO^z?A+y%bnlJ<_HPYLaxQ|?8+hMk|=Gx8(eUd>PVLcRTikj-z8_+(8;o+uVL<@4E^ zoLQoS&8UqpPTR(v#AAMtgsimPf-KQ*d08Mt*ef`08HcOi5(2Y%60(^3ih+Yt1Nm+2 zA?XUhboLTB82Kj9(sk?Q{udm&wgynbeN>yEE>qe-Aio-?BfV`3utFJU(xyHboLl03 zbAS@57oUb?N5@5UMi-hW<`>Q$nB5Nv>890AGwGojo;f@Pg=$XjSdgh}V#q>-<=!Sk zHujL!LnaU_h0m;sWtFtbgp$^naJt>46rw4P8mc{H?PQBc-!^B7?sX9}kr0rpYhYWl&7C~u@&QXFwlj`SC|B6x;mDN@hSew_*kX(2cc); zzO&QQOYlulcHEH#W^b9*>3-6vF$#mg@X>yDCQD&Zfrg=(WUo+7bJ;6O3zNS#c;lk; z)b1AJ=4^9uZfuab6kFB&hK63``8cCCVc{}s-f<%$S>=%a%*2?8mL4qQeO3P&@J>Bv zXI~ngp5#uwOjWGB;+Z$sAfL&> zi?{ersRMoSjC{s-@^9f6X8Sp=val8O^->?I{L=s26uEn*_Jr(`8`ww|6l!>{r(^l* z@3+1Y)0S^K2cJ-txhID^Xl49*;-iA`z-LLhGq1)`uv44?j%k5N zn_!F-DzO>v;1G#@GW&{j8nW;pgv#)x&2$GN!V@h#yU&N&X6`n7fo3YKw-A*l z{^Ivv-#uPfpnZZy7i_Bp=Zeu>y(t{MGRu^lI`?A*N0Vq8 zN_rt*k428bVLNu{J`MHxU5*GfvFFN9?M~PdfkFV&+!)i-Wm4q0PIg6LG6%Kg_RUvr zOuVZuY*M9*F9ZVeK^GDnjQa)NXx_vWe>3=*+c#h6c3ffa(@2ZZqKA_)WQ=+IG-H^3WuG=?lE6Mya?dQI_Z|!FBL^Y{X4gEQo(#3iW~xr0-WrgwtM&ZOxBZomnXc6gAUbH&`GbpyeT?j?o2`P3`Mb zQbHNDom__M0A4PB+8(4)`Ssl+-FypGFZ4;CYFyo`jLlAe=h0tSSy#p55`O&@V*n>* zM0B}oJ(y!hBR}=B4%IkaG=wM6RLi2t^=WqLk5T0%>R_BG%KU1ws6$ibPMGK^v`A;O z31k7d>>0ZQ+VnzxD%x_brk6HsG849>wwT$-g}$XD*S>T6JNPy*)AVA#M&=e5VXFx# zznmT2_Y7DHB%GZY9)~vPxYy#ctN9V#I;mb$osX{z{T-a82hgqc=)@;#+_Zg2d6Z@_ zyHA+nAQ#V0+_S>IpdPyRog3ZP)?Aw408!Ls9i{(ztN95N@Z!5bMKmD2hx$ZDXOX55 zV2e~$VtP6+qeT*j=4=DL9Sblu^_`tT!fddpj3P$b^Xka5_Kx=38yCR1{ zoS5N%9_z8U`O$0tdf<_u>+#{MBiGib`QmIz+*Pn0j-zvU>meR|%%t=WFV53Qzrfj0 zQ*?4pC0J)Nw%=E@KCUkJspXEq4M=oiWu^kd~|Jx308Cr&CQ z5u!8daCB$Tqp*C4(QxO@8-;~w8~Lu$Zh%090DBjY(?)5NB?_3EIsQUMdiUNZXW*Ru z&!=_dN@JZeslNH~n;$pd)!*aXtMBQqqh2lfJ#TE8 zS?oszyB~F|s&cMc^RzurAp7+%JzLU5-Ob8zGL^hxX$zX>)+3q`?X zOW2oUIHOO+91S@v-+jR!GawdAr<=B{4vPG_;}u<{ zb3X5UW0-OUUYf|->YMCnKc!Xmqx^&N^wVL+6Lap^5g&^^Hyk+P5s)rhZ!;Obh`Tnl_V}&bBY<_OnZp@;Oai6%W^4-_Hb5urt73?p-Pd`f_IZ zU%GbMuD26`tF9(i5>A;*&4*Z~fhQJCSVj)y#zc;ILTTO@89(i)nk%aLz}#r2iMN3$^tj zw@D_FmbS1(pW_vk**(X=)wQdtD)Xx7L`KYIBE+H*_b4JXpSJ3FL^Z6HF~{V0ufm+q z8xc?;3XO=&4;OmkwkRBH9E4dxDkFKN4;L(ukJ7;Wl8{4LAU>plJ?>iom$E?MPXqG` z?k-r6^gj(uY5}BOI4)R_6f_M?XJ71$tS8)~Lk3~r)LG2fd$~1& zneVYIUi`y>f|FySBsk(>fjxp<(vUZ+PCaC5AEZq-t^ye1VJHZ>18%k; zc^_pg8Bu6zaAM9LNkod74DbwOM6?lq@Yr;h6J{FFIRd6CPcAk607Rl-@fzXk-JPQnL`4v}t$CT!eMHrgMIG?!VAo3cu#$Bhgk7HS$C zC`dglJYvhA`H#5_=gp595Xm{F{AMR+n;niwQnDM6U4;e z8DLr9Tu})f{hcdgpFi6?6T1{pTUhjAVfQ?9^0JRGVW}o_9*J%PiGUQ%v}STp^`G!c z<+6uln(Y$mS$&>G>EuSWo5=6~SqY3*PHv?^@c76&x-WsK6kw#gRl>96+_N-?s{{dyWUXJ zNgsu|&s}dJ*SYJ>eeQZgRZ)Bt=0115ggE#x|Py}8d_Zz0#Y>&<=cf=%N& zce(e>p?2-Bi0+xIaM#jE}( z-um_H?=0;f31+-)0OnrbTiRuGW2SPkBgE_)P;#fS)me{Bvs{ocMt*(gYXISsOS2S>8v9Ez{{3BXF$($8g_*f<)+0&HiZIEB?97J+h{>j~!K2{~P2cC2$=>fF` z0F1)u<1Ak_4&#SezU-M>9lEiJx@oOB@_hAL9mo8zj*e==bQpfdo|uPb3P#N&dDlS_B2#U+r zv8#Ojqi~h-^b0Kxlv>Ke&(~0%w3xF6dVM*Mt3^1h-1b~y<1-9}er~>c%1d?!0jNxi z=YAHD+_|3(j^nbikr;KIEHKMq!yq^g8y#VUOm_`J#N0L32?Q1TzGWz}EgzUrfnFgW zN0hupmIWkeA5`Prz@BycrFmcPMfUDwX)dxYg8_Waq|=C5`Cc?650l%dEM3Qq$`2>t z+<{4%=rNPBp)s#P*=A2jFn;gUbc$j%988yK){_ikTyp2q*b&B)#SrY)ExT`X8y#h#lomB&zu%_&k$hEZHuKo}vl7!XV zRVHTM=5@+W>`L+y6UOc}1nOtjBtSZJN8pj{!iQ7AL-WgXk!OnKfbnR!Qg@__{CNaM zka59tVBW@^I{&S`%SoH)+*kF%bch7dD5dP+>a=arNy0b!=_vFXz}kp@D<+ z!JqQv7GFHNwBJbzfNJSTDUa;-8EFC9C*E~#sSP?EfYN{X23SF^1emzB6TuBTYugNh z4Vq&qrxYC1ldcH_r*U(vFAQwcs>hS1G!?XVU*2R^%+9!>h<0tJ* zuB*?DE%s-5Ja1t;YSFj~U;2gd({J?;Jn5YAJ;XtFW~~BKD^nd^fIoGPv)*O!nRj6M zX9Hh%uy;kUkyb#wpmG3P!kNX-cvU&z`y${to~%4mp&LN5m*y|k2cv)XQCLq;x1y^%65 z$@0ST)K}<2?`R}8*XNs!NvN6hJJSH8;jd+Bah$Sh_eF4W)hwkOu@hmp4k*phtT4MW z-`-0f-oEKLzil=0xl{wT3@Y$^_nlx-V0Ey%4c19r`Y+piu0o;`oVvCfDDmV%rHh<7 zj)kz155D}T4q;se4I$#<)0UMpw^PVMq-=tI^Z^4V%%#M{hZUvOrCERe#|~msPZG=a zY1e{YskuWbgjV4+tHZl5O*pUM4nwO!3sdS_U|AR14kGFW3%IZ}tFrX2W?=~EEDX+( zs%LEA#3tb*OlB|9jdP2^QXY$~T;7`&j(MCN(xPxo`IV14@-oczc83t9?`!JJSQ%o??ohSFj+vDu3&j~cqaT6(iFho)&8Pa{sg0p z2Z^>Nq$jZd=JmEHJk(qP0xpQip3dd8GHoi4?kL#r|m6%gw&raj+ zMCQ0eY8-V#-EhGOt)94SR7R4MZ3%8c#q9N8*5;~|dfT;p66hjI4YoA%yy+69kX>XQ zHK&V$%?*-nHYbS<#wxQy@>Id?!9zPbEqrjsM^!=y_4zR+8;mXhZV)X|hlyvX&6v7cNd!*GPF zSWE>aqSoY|BRHu)$%#N%4uLNF=A&k&+z_01f`HYPafD2#J{Of;?{-doQF-__Dsq$K zL~OP6F<=$zk1CbHxXDGh>&kP&d0}LuM&8ybsBSk%63QQyAAD|@wayTo+ep>~PJ}od z&h3SyIGeE&m#zuu`QYJ$-`{;gTc#oP&dbwW0GD`}D2Nc-JmsY&ag>5h#hqicBkCcR zbm&xb?0T`}qBxEh*-M;wPLoNFBD{=Sj|0<)?@77w$jv+*AG-60yHE7e?u2XJb>u<= zOXJycjUhMn8B5m*O{lJJjCXSdgUmei46p`IcI6+sa33-<`~zixVbN;w$4xer1F_%rYlU> zsQRFfX)bCWEi$vYb5(VaV59^}hJJf|TBXp9(j$3jwuB{&uCZh2F^wgTjecBNLEU<5 z=PSMVUTT0seGagD@Dt|?;z3TfTU8~GXf(d|Ney5+G|L zba-4!Pk(Uo;I{Gn)J;9Yz3x?-hc7bhBZi@;8-78s%0Sfw|4TPQQy%5XAi1!FNS~~& zqZtZI^inc9Wp|?-n#Kj|kj%?0>XftjP3a{1u4!)D|QZg zKyE9~n^`ug=d*w?rIuWJF_3FLg=ww1Bd#6)XWyN{G<}T=lBw-wVC1si?&7uX; z6|P14DHAsXwYi{V`84#FijbaMUm8$l0^K+t~c-L3Nm{Y6Q?#8XDT48UZfPnehi1x)rV?B>NS zQHn7O;ru?yMTKqx4YIM-cp0;OL7&00Pz}@ss@2kC+$^LPg3|I00Z5xgvz=olzVwt( zkt*lBxNZ+hG^-kmc zN=VA^3j?sHRIJST*9XBG6v;9Z_$FvmX=0dh>b>NXyV3x*7^e-a_mB@Tc&FI)`ZaWw zaETHRlX1-%nu|RhZ>|YQ4+jcL)7`|%jMH&viB3c8`H^}y#!I84fDx5}_S;gLbJ&k- z0JI3PNi_Lr%ez91!F>!w-@%9_d0r@uWE4GkwSaW}>MS8c^8g`phIHWFJihk?zA>#F_elsG~R9L>Bd{QM4qCBz6;VbY5fc zLLSN2n<$Zrs)JTUlA=9XDCzZ>St>z*1|x}b={U$GYg{(Lgwt=ZGyl!WU(pIDJ5ucG z_5}H)&8=_2^N1J}-C{`NxAVrJ5i+{BZ4T+Yvh4|Wn(G?jbJI0qomg_`f}@j(EV>4| zP&$F7GxdeL(KTYY7U`!<+ziy_g3#jlyPy&3kJ{NarWK-z6;LYL$9t0UoT49TVm@B+=QtQDBxZ2be@$& zj*cz13mpT~L8wVOMjThpiI<{S2*N~Oek^Q(mA40>sbhp0bc`@r#|U?&V}y-5Mwn5@ z2%GB|>@dx#C|l7nV!#%|#NsxT7rlr4bd1o}F~Uqb1}fAUnH{=9ZB|cD#L$7F_6a&h zm_^438+D8@i;fYRI!2g9#|RsBj4->7!6=DB=WK-5lGFj~A_^1b&MAeRS@1~IMA6e1 zp=Opn5;sx$3@F@Ph#!fcD1bD+-aV`!tJA3$ckC6j-9!fUs}Zy$gd}zoF?3#I??MjA z=}DACMb$xTx&^PoCc;Rs!xnT4;3mqW;~+P?Zqa7MS+#vD#fRj?r_W?fT!b}!`t0r# zQK8fDJ-R?3SVUxr*(}3JlRvXJp82NS6~A&Kd2CSB2d13LKu*`Cj+Ug2ocGfpjDp|HeV;kOy{2%r&mMg=~ ztH_*aQI0$=+PRHW0n1bM!O4KE-g@+%9J3`ui}0Uo_#O8Lr(Sz|b^L~FX32lAvQ)Uc5fo!={(#62RCM-PdGP&# zSf3ptWl?&EMRF=6*AKzx=~j*Sd@%OmzxXM-2K&15FvOxKFDk+IwcjCqi^7o0kZYn; zZv5wSTbmmx^>W+ChsaYy&sw3nvMBs2xc-`J@NGdgsOpA$tIm`#Ir?!h9MpA#wrbTa zee$YFETQFoYUC6@L{-$u-l|i;#f!+d3m;k6hy_FVw!O0uZ&vo-S>ty5JlcD3gu$it zPfn2kidZtLc7#|q6!9MWCR#rI>l-zA)Z+L9xv{W{8m#gJLEg3Wg>y207pw;xK@C$n z7pw&nqGxY6 zUL33H-(Ql?{QJxD1OMKc611iY=u)sQ=85NupGWYF+2Q9`@r?Q4=Zj(<`1ul^F?N0? ze?5$rpReHgihRC`=d1Gh8lJD|alZk#cPedzac``nCga%V_6CMZ{Hcsl5=+Mrm*8VD zdTFe_a&PqVSe*_!qgTfGyfk`sj28FkHP^1-Iz+~i=ctIe78}a*(1SHF%&Q@)6Su!M zjAFRXuDMk`w&B}q!*%DD=ai9#UA5rva=15keBR^ihUE7ni%}e^i@bJT0(^X*)w+w{ zOa?w<19S+0bP>*3zbHADUPn1Ne6cKby$sHyLWg#vatp}jyk9yp-UY!?uN;CF{PHhG zP-(ArIlH$~MHP_L<3PviAH$0r5D~9${Gx=(vNSbOblYVR)h*G;tnNV(D>hZ@wI0T{ zmgpiZyM5Hg0ob}@H$&_U`5oRBip@KE zB#I{s*}K}W-`akvo#JFxD1ut~jCSouZ+>t{w>!4Up8N30tip*4R~K}5LW;a=2a6YB zQ{S<pAx4~8kdA1 z#(zm*NDUg98j`1CriihRpK3^cr%;7rzhOm;=lWDIwv0L==hs(MNt_10s0QW79u+k< z|4=Bj_dIye><`}m@58S?Uc1w|934H6p!^R)=iwN!L>D*p&7HNfYXjjbcyW&2xi$8yZKE93&JR6lg`~HW2nw_?bZ|U79{1o4| rPaod-B8Up=?jJ`4!KmZ+<$qEO-NC+%HNGH8KsN~4_m3Zbl8pL)67NDX literal 0 HcmV?d00001 diff --git a/chinese.ts b/chinese.ts new file mode 100644 index 0000000..a686d24 --- /dev/null +++ b/chinese.ts @@ -0,0 +1,19409 @@ + + + + + AdhesiveMachine + + + HMI Configuration + 界面配置 + + + + Interface debug mode + 界面进入调试模式 + + + + Delete configure file + 删除配置文件 + + + + Import CSV file + 导入csv文件 + + + + Delete CSV file + 删除csv文件 + + + + Reset CSV file + 重置安装调试进度 + + + + Machine parameters + 机器参数 + + + + Work parameters + 工作参数 + + + + InternetofThings configuration + 物联网配置 + + + + Flip style + 翻转式样 + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + Horizontal flip style + 水平翻转式样 + + + + vertical flip style + 垂直翻转式样 + + + + + No:0;Yes:1 + No:0;Yes:1; + 否:0;是:1 + + + + Rotation angle + 旋转角度 + + + + startX + 起始点x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mm + mm + + + + Delete pattern configuration + 删除花样配置 + + + + Length of the stitch that needs to be split + 需要分割的针步长度 + + + + startY + 起始点y + + + + XY motor start and stop speed + XY电机启停转速 + + + + + + + + r/min + r/min + + + + XY motor return to zero speed + XY电机归零转速 + + + + XY motor running speed + XY电机运转转速 + + + + XY motor operating acceleration + XY电机运转加速度 + + + + + r/ss + + + + + Lifting start speed + 升降启动速度 + + + + + + mm/s + mm/s + + + + Lifting and returning to zero speed + 升降归零速度 + + + + Lifting and walking speed + 升降行走速度 + + + + Lifting and walking acceleration + 升降行走加速度 + + + + mm/s2 + mm/s2 + + + + Slow motion speed + 慢动速度 + + + + Operating speed + 工作速度 + + + + Working acceleration + 工作加速度 + + + + Maximum operating speed + 工作最高速度 + + + + Minimum operating speed + 工作最小速度 + + + + Zero position coordinate of X motor + X电机零位坐标 + + + + Zero position coordinate of Y motor + Y电机零位坐标 + + + + Zero position coordinate of lifting motor + 升降电机零位坐标 + + + + Zero compensation of X motor + X电机归零补偿 + + + + Y motor zeroing compensation + Y电机归零补偿 + + + + Zero compensation of lifting motor + 升降电机归零补偿 + + + + Offset point X coordinate + 偏移点X坐标 + + + + Offset point Y coordinate + 偏移点Y坐标 + + + + Calibration point coordinate X + 校准点坐标X + + + + Calibration point coordinate Y + 校准点坐标Y + + + + Calibrate sensor height + 校准传感器高度 + + + + Lower position coordinate of head lifting + 机头升降低位坐标 + + + + Head lifting high position coordinate + 机头升降高位坐标 + + + + Head lifting upper boundary + 机头上升上边界 + + + + Lower boundary of nose lifting + 机头升降下边界 + + + + X1 positive soft limit + X1 正向软限位 + + + + X1 negative soft limit + X1 负向软限位 + + + + X2 positive soft limit + X2 正向软限位 + + + + X2 Negative soft limit + X2 负向软限位 + + + + Y positive direction soft limit + Y 正向软限位 + + + + Y negative direction soft limit + Y 负向软限位 + + + + software limit allowed + 软件限位允许 + + + + Loading point coordinate X1 + 上料点坐标X1 + + + + Loading point coordinate X2 + 上料点坐标X2 + + + + Loading point coordinate Y + 上料点坐标Y + + + + Coordinate X of glue discharge point + 排胶点坐标X + + + + Coordinate Y of glue discharge point + 排胶点坐标Y + + + + Distance between left and right stations X + 左右工位间隔距离X + + + + Distance between left and right stations Y + 左右工位间隔距离Y + + + + Workable range X+ of station 1 + 工位1可工作范围X+ + + + + Workable range X- of station 1 + 工位1可工作范围X- + + + + Workable range X+ of station 2 + 工位2可工作范围X+ + + + + Workable range X- of station 2 + 工位2可工作范围X- + + + + Working range Y+ + 可工作范围Y+ + + + + Working range Y- + 可工作范围Y- + + + + Station 1 lifting low position coordinate + 工位1升降地位坐标 + + + + Station 2 lifting low position coordinate + 工位2升降地位坐标 + + + + Head lifting height when crossing frame + 越框时机头抬起高度 + + + + Automatic glue discharge waiting time + 自动排胶等待时间 + + + + min + + + + + Automatic glue discharge duration + 自动排胶持续时间 + + + + s + + + + + Power on automatic reset allowed + 开机自动复位允许 + + + + Analog working function + 模拟工作功能 + + + + Start button mode + 启动按钮模式 + + + + Automatic glue filling function + 自动补胶功能 + + + + Dual station mode + 双工位模式 + + + + Enable + 使能 + + + + Disable + 失能 + + + + JogP + 正转 + + + + JogN + 反转 + + + + Zero + 归零 + + + + Open + 打开 + + + + Close + 关闭 + + + + X to move motor + X向移动电机 + + + + Y to move motor + Y向移动电机 + + + + Lifting motor + 升降电机 + + + + Glue gun control + 胶枪控制 + + + + A Pneumatic ball valve of large rubber pump + A大胶泵气动球阀 + + + + Feeding control of small glue pump A + A小胶泵补料控制 + + + + B Pneumatic ball valve of large rubber pump + B大胶泵气动球阀 + + + + B Feeding control of small glue pump + B小胶泵补料控制 + + + + Reset All + 全部复位 + + + + Motor Zeroing + 电机归零 + + + + Station1 Gluing + 工位1涂胶 + + + + Station2 Gluing + 工位2涂胶 + + + + Head Up And Down + 机头升降 + + + + To Station1 Start + 回工位1起始点 + + + + To Station2 Start + 回工位2起始点 + + + + Work Pause + 暂停工作 + + + + To Waitting Point + 回等料点 + + + + To Adhesive Point + 回排胶点 + + + + Arrange Adhesive Once + 排一次胶 + + + + Set Offset + 定偏移点 + + + + Back Offset + 回偏移点 + + + + Sew Set Start + 缝纫定起始点 + + + + Back Start + 回起始点 + + + + Check Frame + 边框检查 + + + + Forward And Back + 前进回退 + + + + Adjust Glue Height + 校准胶管高度 + + + + SensorSign + 传感器信号 + + + + Action + 控制动作 + + + + HMI Upgrade + 界面升级 + + + + MC Upgrade + 主控升级 + + + + ParaImport + 参数导入 + + + + ParaExport + 参数导出 + + + + SoftwareSet + 软件设置 + + + + SoftPower + 软件授权 + + + + Network + 网络管理 + + + + TimeSet + 时间设置 + + + + Version + 版本信息 + + + + Root + 超级用户 + + + + Para + 花样参数 + + + + SpeedGear + 速度档位 + + + + HeadHeight + 花样机头高度 + + + + Import + 花样导入 + + + + Export + 花样导出 + + + + Delete + 花样删除 + + + + Station1Select + 工位1花样选择 + + + + Station2Select + 工位2花样选择 + + + + PatternSwitching + 花样切换 + + + + OperatPara + 操作参数 + + + + ActionSet + 动作参数 + + + + SpeedPara + 速度参数 + + + + LimitPara + 限位参数 + + + + MCPara + 机器参数 + + + + X motor - zero position + X电机-零位 + + + + X motor - positive limit + X电机-正限位 + + + + X motor - negative limit + X电机-负限位 + + + + Rubber discharge position of X motor + X电机排胶位 + + + + Y motor - zero position + X电机-零位 + + + + Y motor - positive limit + Y电机-正限位 + + + + Y motor - negative limit + Y电机-负限位 + + + + Rubber discharge position of Y motor + Y电机排胶位 + + + + Low liquid level alarm of large rubber pump A + A大胶泵低液位预警 + + + + Low liquid level shutdown of large rubber pump A + A大胶泵低液位停机 + + + + Low liquid level alarm of large rubber pump B + B大胶泵低液位预警 + + + + Low liquid level shutdown of large rubber pump B + B大胶泵低液位停机 + + + + High liquid level replenishment of small rubber pump A is completed + A小胶泵高液位补液完成 + + + + Low liquid level alarm of small rubber pump A + A小胶泵低液位预警 + + + + Stop at low liquid level of small glue pump A + A小胶泵低液位停机 + + + + High liquid level replenishment of small glue pump B is completed + B小胶泵高液位补液完成 + + + + Low liquid level alarm of small rubber pump B + B小胶泵低液位预警 + + + + Shutdown of small glue pump B at low liquid level + B小胶泵低液位停机 + + + + Z motor - zero position + Z电机-零位 + + + + Z motor - positive limit + Z电机-正限位 + + + + Z motor - negative limit + Z电机-负限位 + + + + Station 1 left limit + 工位1左限位 + + + + Station 1 right limit + 工位1右限位 + + + + Station 2 left limit + 工位2左限位 + + + + Station 2 right limit + 工位2右限位 + + + + PLC is not allowed to work + PLC不允许工作 + + + + Left and right stations are not ready + 左右工位未就绪 + + + + Left station is not ready + 左工位未就绪 + + + + Right station is not ready + 右工位未就绪 + + + + The device has not started to work + 设备未开始工作 + + + + X motor position is abnormal + X电机位置异常 + + + + Abnormal position of Y motor + Y电机位置异常 + + + + The working state is not initialized + 工作状态未初始化 + + + + A large glue pump is short of glue + A大胶泵缺胶 + + + + B large rubber pump is short of glue + B大胶泵缺胶 + + + + A small glue pump is short of glue + A小胶泵缺胶 + + + + The small rubber pump B is short of glue + B小胶泵缺胶 + + + + The rubber discharge position is not reached + 未到排胶位 + + + + AutoPosPunchMachine + + + HMI Configuration + 界面配置 + + + + Interface debug mode + 界面进入调试模式 + + + + Delete configure file + 删除配置文件 + + + + Import CSV file + 导入csv文件 + + + + Delete CSV file + 删除csv文件 + + + + Reset CSV file + 重置安装调试进度 + + + + Machine parameters + 机器参数 + + + + Work parameters + 工作参数 + + + + InternetofThings configuration + 物联网配置 + + + + Flip style + 翻转式样 + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + Horizontal flip style + 水平翻转式样 + + + + vertical flip style + 垂直翻转式样 + + + + + No:0;Yes:1 + No:0;Yes:1; + 否:0;是:1 + + + + Rotation angle + 旋转角度 + + + + punching spindle start and stop speed + 冲孔主轴启动停止转速 + + + + + + + + + + + + + + + + + r/min + r/min + + + + main punching shaft zeroing speed + 主冲孔轴归零转速 + + + + Spindle running speed + 主轴运转转速 + + + + spindle punching speed + 主轴冲孔运转加速度 + + + + + + r/ss + r/ss + + + + spindle punching brake acceleration + 主轴冲孔刹车加速度 + + + + XY start stop speed + XY启动停止速度 + + + + + + + + + + + mm/s + mm/s + + + + XY zero run speed + XY归零运行速度 + + + + XY idle running speed + XY空走运行速度 + + + + XY walking acceleration + XY行走加速度 + + + + + mm/s2 + mm/s2 + + + + XY braking acceleration + XY刹车加速度 + + + + XY manual movement speed 1 + XY手动移动速度1 + + + + XY manual movement speed 2 + XY手动移动速度2 + + + + XY manual movement speed 3 + XY手动移动速度3 + + + + XY maximum movement speed + XY最高移动速度 + + + + X frame sensor coordinates + x框传感器坐标 + + + + + + + + + + + + + + + + + + + + + + + + + mm + mm + + + + Delete pattern configuration + 删除花样配置 + + + + Length of the stitch that needs to be split + 需要分割的针步长度 + + + + Y frame sensor coordinates + y框传感器坐标 + + + + Spindle zero compensation angle + 主轴归零补偿角度 + + + + X-axis zero compensation + X轴归零补偿 + + + + Y-axis zero compensation + Y轴归零补偿 + + + + X backlash compensation + X间隙补偿 + + + + Y backlash compensation + Y间隙补偿 + + + + Number of handpieces + 机头个数 + + + + Number of punch hand + 冲孔每头机针个数 + + + + Infrared device configuration + 红外装置配置 + + + + X movable area negative border + X可移动区域负边界 + + + + X movable area positive border + X可移动区域正边界 + + + + X Punchable area negative boundary + X可冲孔区域负边界 + + + + X Positive boundary of punchable area + X可冲孔区域正边界 + + + + Y movable area negative boundary + Y可移动区域负边界 + + + + Y movable area positive boundary + Y可移动区域正边界 + + + + Y negative boundary of punchable area + Y可冲孔区域负边界 + + + + Y positive boundary of punchable area + Y可冲孔区域正边界 + + + + Starting and stopping speed of punch rotation + 冲头旋转启动停止速度 + + + + + + + deg/s + 度/秒 + + + + Zero speed of punch rotation + 冲头旋转归零速度 + + + + Rotating speed of punch + 冲头旋转运转速度 + + + + Acceleration of punch rotation motion + 冲头旋转运动加速度 + + + + + deg/ss + 度/秒方 + + + + Ram rotation brake acceleration + 冲头旋转刹车加速度 + + + + Maximum speed of punch rotation + 冲头旋转最高速度 + + + + Vacuum cleaner start delay + 吸尘器启动延时 + + + + + + + s + + + + + Vacuum cleaner off delay + 吸尘器关闭延时 + + + + Duration of vacuuming + 吸尘持续时长 + + + + Punching color change spacing + 冲孔换色间距 + + + + Working mode of punching brush + 冲孔画笔工作模式 + + + + automatic:0;Manual:1 + 自动:0;手动:1 + + + + Maximum running speed of punching spindle + 冲孔主轴最大运行速度 + + + + Automatic start angle adjustment + 自动起始角度调整 + + + + Single chip working time display mode + 单片工作时间显示模式 + + + + not display:0;monolithic:1;accumulative total:2 + 不显示:0;单片工作时间:1;累计工作时间:2 + + + + + adjustment angle 1000 rpm + 冲孔自动调整角度 1000 rpm + + + + + adjustment angle 1100 rpm + 冲孔自动调整角度 1100 rpm + + + + + adjustment angle 1200 rpm + 冲孔自动调整角度 1200 rpm + + + + + adjustment angle 1300 rpm + 冲孔自动调整角度 1300 rpm + + + + + adjustment angle 1400 rpm + 冲孔自动调整角度 1400 rpm + + + + + adjustment angle 1500 rpm + 冲孔自动调整角度 1500 rpm + + + + + adjustment angle 1600 rpm + 冲孔自动调整角度 1600 rpm + + + + + adjustment angle 1700 rpm + 冲孔自动调整角度 1700 rpm + + + + + adjustment angle 1800 rpm + 冲孔自动调整角度 1800 rpm + + + + + adjustment angle 1900 rpm + 冲孔自动调整角度 1900 rpm + + + + + adjustment angle 2000 rpm + 冲孔自动调整角度 2000 rpm + + + + + adjustment angle 2100 rpm + 冲孔自动调整角度 2100 rpm + + + + speed limit 4-5mm + 冲孔运行速度限制 4-5mm + + + + speed limit 5-6mm + 冲孔运行速度限制 5-6mm + + + + speed limit 6-7mm + 冲孔运行速度限制 6-7mm + + + + speed limit 7-8mm + 冲孔运行速度限制 7-8mm + + + + speed limit 8-9mm + 冲孔运行速度限制 8-9mm + + + + speed limit 9-14mm + 冲孔运行速度限制 9-14mm + + + + speed limit 14+mm + 冲孔运行速度限制 14+mm + + + + Punching 1 rotation angle compensation 1 + 冲孔旋转角度补偿1 + + + + Punching 1 rotation angle compensation 2 + 冲孔旋转角度补偿2 + + + + Punching 1 rotation angle compensation 3 + 冲孔旋转角度补偿3 + + + + Punching 1 rotation angle compensation 4 + 冲孔旋转角度补偿4 + + + + Punching 1 rotation angle compensation 5 + 冲孔旋转角度补偿5 + + + + Punching 1 rotation angle compensation 6 + 冲孔旋转角度补偿6 + + + + Punching 2 rotation angle compensation 1 + 冲孔2旋转角度补偿1 + + + + Punching 2 rotation angle compensation 2 + 冲孔2旋转角度补偿2 + + + + Punching 2 rotation angle compensation 3 + 冲孔2旋转角度补偿3 + + + + Punching 2 rotation angle compensation 4 + 冲孔2旋转角度补偿4 + + + + Punching 2 rotation angle compensation 5 + 冲孔2旋转角度补偿5 + + + + Punching 2 rotation angle compensation 6 + 冲孔2旋转角度补偿6 + + + + Punching vacuum cleaner start interval + 吸尘器启动间隔 + + + + 1 tool punching tool life alarm + 1刀位冲刀寿命报警 + + + + 2 tool punching tool life alarm + 2刀位冲刀寿命报警 + + + + 3 tool punching tool life alarm + 3刀位冲刀寿命报警 + + + + 4 tool punching tool life alarm + 4刀位冲刀寿命报警 + + + + 5 tool punching tool life alarm + 5刀位冲刀寿命报警 + + + + 6 tool punching tool life alarm + 6刀位冲刀寿命报警 + + + + first head + 第一个机头 + + + + second head + 第二个机头 + + + + third head + 第三个机头 + + + + fourth head + 第四个机头 + + + + Production preset + 产量预设 + + + + Punching spindle working speed + 冲孔主轴工作转速 + + + + Punching acceleration + 冲孔加速度 + + + + Punching and moving frame method + 冲孔动框方式 + + + + xy continuous frame:0;xy intermittent frame:1 + xy连续动框:0;xy间歇式动框:1 + + + + XY moving frame acceleration and deceleration method + XY动框加减速方式 + + + + xy intermittent pulse without acceleration and deceleration:0;xy intermittent pulse sine acceleration and deceleration:1 + xy间歇式脉冲无加减速:0;xy间歇式脉冲正弦加减速:1 + + + + Punching Rotation + 冲孔旋转方式 + + + + Punching continuous rotation:0;Punching indirect rotation:1 + 冲孔连续旋转:0;冲孔间接旋转:1 + + + + Starting angle of punching frame + 冲孔动框起始角度 + + + + Persistence angle of punching frame + 冲孔动框持续角度 + + + + xy move + xy移动 + + + + Minimum deviation angle for punching rotation deceleration + 冲孔旋转减速最小偏差角度 + + + + Continuous angle of punching rotation + 冲孔旋转持续角度 + + + + Punching machine head 1 rotation control + 冲孔机头1旋转控制 + + + + Punching machine head 2 rotation control + 冲孔机头2旋转控制 + + + + Punching machine head 3 rotation control + 冲孔机头3旋转控制 + + + + Punching machine head 4 rotation control + 冲孔机头4旋转控制 + + + + Punching machine head 5 rotation control + 冲孔机头5旋转控制 + + + + Punching machine head 6 rotation control + 冲孔机头6旋转控制 + + + + Replace the punch count + 更换冲头计数值 + + + + + bout + + + + + Color change start method + 换色启动方式 + + + + Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2 + 自动换色,自动启动:0;自动换色,手动启动:1;手动换色,手动启动:2 + + + + X embroidery frame reversing compensation + X绣框换向补偿 + + + + Y embroidery frame reversing compensation + Y绣框换向补偿 + + + + Punching jump stitches to change the number of frame stitches + 冲孔跳针变越框针数 + + + + Needle + + + + + Reversing working mode + 倒车工作模式 + + + + normal mode:0;Jog mode:1;Continuous jog mode:2 + 普通模式:0;点动模式:1;持续点动模式:2 + + + + Special needle position selection + 特殊针位选择 + + + + none:0;1 needle position:1;2 needle position:2;3 needle position:3;4 needle position:4;5 needle position:5;6 needle position:6;7 needle position:7;8 needle position:8;9 needle position:9 + 无:0;针位1:1;针位2:2;针位3:3;针位4:4;针位5:5;针位6:6;针位7:7;针位8:8;针位9:9 + + + + Special needle position function + 特殊针位功能 + + + + Carved hole:0;brush:1 + 雕孔:0;画笔:1 + + + + Color change speed + 换色速度 + + + + light curtain + 光幕 + + + + air pressure + 气压 + + + + Safety guardrail + 安全护栏 + + + + Tricolor lamp + 三色灯 + + + + Oil pump alarm + 油泵报警 + + + + Vacuum cleaner alarm + 吸尘器报警 + + + + Punching spindle start jogging speed + 冲孔主轴启动慢动转速 + + + + X Working Range + X工作范围 + + + + Y Working Range + Y工作范围 + + + + Punching rotation sensor angle + 冲孔旋转传感器角度 + + + + Maximum speed of punching and moving frame + 冲孔动框最高速度 + + + + mm/S + mm/s + + + + Jump maximum spindle speed + 跳针最高主轴转速 + + + + Blowing allowed + 吹气允许 + + + + X offset point + X偏移点 + + + + Y offset point + Y偏移点 + + + + offset point coordinates + 偏移点坐标 + + + + invalid:0;x is valid:1;y is valid:2;xy are valid:3 + 无效:0;x有效:1;y有效:2;xy同时有效:3 + + + + The stop position of the machine head after punching + 冲孔完毕机头停止位置 + + + + current location:0;starting point:1;location point:2;feeding point:3;offset point:4 + 当前位置:0;起点:1;定位点:2;上料点:3;偏移点:4 + + + + Spindle jog parking angle + 主轴点动停车角度 + + + + Refueling method selection + 加油方式选择 + + + + No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3 + 不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + + + + Refueling needles interval + 加油针数间隔 + + + + Needles + + + + + Refueling time interval + 加油时间间隔 + + + + h + 小时 + + + + Refueling duration + 加油持续次数 + + + + Automatic air frame allowed + 自动气框允许 + + + + + + + Not allow:0;Allowed:1 + 不允许:0;允许:1 + + + + Automatic closing of air frame allowed + 气框自动关闭允许 + + + + Automatic opening of air frame allowed + 气框自动打开允许 + + + + Code scanning allowed after automatic closing of air frame + 气框自动关闭后扫码允许 + + + + Automatic air frame closing delay + 自动气框闭合延时 + + + + ms + ms + + + + Enable + 使能 + + + + Disable + 失能 + + + + JogP + 正转 + + + + JogN + 反转 + + + + Zero + 归零 + + + + Open + 打开 + + + + Close + 关闭 + + + + Up + 上升 + + + + Down + 下降 + + + + All punching spindle motor + 所有主轴电机 + + + + No. 1 punching spindle motor + 1号头冲孔主轴电机 + + + + No. 2 punching spindle motor + 2号头冲孔主轴电机 + + + + No. 3 punching spindle motor + 3号头冲孔主轴电机 + + + + No. 4 punching spindle motor + 4号头冲孔主轴电机 + + + + X motor + X电机 + + + + Y motor + Y电机 + + + + punching color changing motor + 冲孔换色电机 + + + + Punch rotate motor + 冲孔旋转电机 + + + + template positioning cylinder + 模板定位气缸 + + + + Vacuum cleaner + 吸尘器 + + + + Safety barrier 1 + 安全护栏1 + + + + Safety barrier 2 + 安全护栏2 + + + + Punching refueling + 冲孔加油 + + + + Headlamp + 照明灯 + + + + All To Zero + 全部归零 + + + + Spindle Jog + 主轴点动 + + + + Spindle Enable + 主轴使能 + + + + Spindle Disable + 主轴失能 + + + + Spindle Test + 主轴研车 + + + + Set Offset + 定偏移点 + + + + Go Offset + 回偏移点 + + + + Set Start + 定起始点 + + + + Go Start + 回起始点 + + + + Go Work + 回工作点 + + + + Check Frame + 边框检查 + + + + Punch Change Tool + 手动换刀 + + + + Forward And Back + 前进回退 + + + + Single Punch + 单次冲孔 + + + + To Right Up + 去右上角 + + + + To Right Down + 去右下角 + + + + To Left Up + 去左上角 + + + + To Left Down + 去左下角 + + + + Head Stop Lower + 冲头停下位 + + + + Draw Outline + 画轮廓线 + + + + Oil Supply + 供油 + + + + Tool Debug + 冲刀调试 + + + + Rotate To Zero + 冲孔旋转去零位 + + + + Signal + 传感器信号 + + + + Action + 控制动作 + + + + HMIUpgrade + 界面升级 + + + + MCUpgrade + 主控升级 + + + + ParaImport + 参数导入 + + + + ParaExport + 参数导出 + + + + Software + 软件设置 + + + + Authorize + 软件授权 + + + + Network + 网络管理 + + + + WIFI + WIFI管理 + + + + NeedleSet + 针杆设置 + + + + Time + 时间设置 + + + + Shortcut + 常用设置 + + + + Statistics + 生产统计 + + + + Version + 版本信息 + + + + Root + 超级用户 + + + + errorjounal + 错误日志 + + + + Select + 花样选择 + + + + Para + 花样参数 + + + + Color + 花样色序 + + + + Import + 花样导入 + + + + Export + 花样导出 + + + + Delete + 花样删除 + + + + OperatPara + 操作参数 + + + + ActionSet + 动作设定 + + + + SpeedPara + 速度参数 + + + + LimitPara + 限位参数 + + + + MCPara + 机器参数 + + + + Start button + 启动按钮 + + + + stop button + 停止按钮 + + + + jog button + 点动按钮 + + + + open frame 1 button + 开框1按钮 + + + + open frame 2 button + 开框2按钮 + + + + Safety light curtain + 安全光幕 + + + + Spindle 1 zero position + 主轴1零位 + + + + Spindle 2 zero position + 主轴2零位 + + + + Spindle 3 zero position + 主轴3零位 + + + + Spindle 4 zero position + 主轴4零位 + + + + Punching 1 Rotation Zero + 冲孔1旋转零位 + + + + Punching 2 Rotation Zero + 冲孔2旋转零位 + + + + Punching 3 Rotation Zero + 冲孔3旋转零位 + + + + Punching 4 Rotation Zero + 冲孔4旋转零位 + + + + X1 zero position + X1零位 + + + + Y1 zero position + Y1零位 + + + + X2 zero position + X2零位 + + + + Y2 zero position + Y2零位 + + + + X1 slows down + X1降速 + + + + Y1 deceleration + Y1降速 + + + + X2 downshift + X2降速 + + + + Y2 downshift + Y2降速 + + + + 1 limit- + X1限位- + + + + Y1 limit- + Y1限位- + + + + X2 limit - + X2限位- + + + + Y2 limit - + Y2限位- + + + + 1 limit+ + X1限位+ + + + + Y1 limit+ + Y1限位+ + + + + X2 limit + + X2限位+ + + + + Y2 limit + + Y2限位+ + + + + Color change motor 1 zero position + 换色电机1零位 + + + + Color change motor 2 zero position + 换色电机2零位 + + + + + Punching color changing motor - zero position + 冲孔换色电机-零位 + + + + Punching Color Change Motor - Negative Limit + 冲孔换色电机-负限位 + + + + Safety light curtain 1 input + 安全光幕1输入 + + + + Safety light curtain 2 input + 安全光幕2输入 + + + + open frame 3 button + 开框3按钮 + + + + open frame 4 button + 开框4按钮 + + + + + Air pressure protection input + 气压保护输入 + + + + Color change zero position 3 + Color change zero position 1 + 换色电机3-零位 + + + + Color change zero position 4 + Color change zero position 2 + 换色电机4-零位 + + + + X3 zero position + X3零位 + + + + Y3 zero position + Y3零位 + + + + X4 zero position + X4零位 + + + + Y4 zero position + Y4零位 + + + + X3 limit - + X3限位- + + + + Y3 limit - + Y3限位- + + + + X4 limit - + X4限位- + + + + Y4 limit - + Y4限位- + + + + X3 limit + + X3限位+ + + + + Y3 limit + + Y3限位+ + + + + X4 limit + + X4限位+ + + + + Y4 limit + + Y4限位+ + + + + Spindle position detection 1 + 冲孔主轴零位 1 + + + + Spindle position detection 2 + 冲孔主轴零位 2 + + + + Spindle position detection 3 + 冲孔主轴零位 3 + + + + Spindle position detection 4 + 冲孔主轴零位 4 + + + + Punching spindle is not at zero position + 冲孔主轴不在零位 + + + + Punching 1 spindle is not at zero position + 冲孔1主轴不在零位 + + + + Vacuum cleaner clogged + 吸尘器阻塞 + + + + Vacuum cleaner full + 吸尘器满料 + + + + Abnormal oil pump pressure + 油泵压力异常 + + + + + + Punching 2 spindle is not at zero position + 冲孔2主轴不在零位 + + + + Punching color change timeout + 冲孔换色超时 + + + + Punching needle position error + 冲孔针位错误 + + + + Punching 3 spindle is not at zero position + 冲孔3主轴不在零位 + + + + Punching 4 spindle is not at zero position + 冲孔4主轴不在零位 + + + + Breathing valve punching cylinder is not high + 呼吸阀冲孔气缸不在高位 + + + + Abnormality on the punching hole of the breathing valve + 呼吸阀冲孔上异常 + + + + Abnormal under the breathing valve punching + 呼吸阀冲孔下异常 + + + + Abnormal expansion and contraction of the stopper under the punching valve of the breathing valve + 呼吸阀冲孔下挡块伸缩异常 + + + + BrokenLineDialog + + + Form + + + + + + 1 + 1 + + + + Broken Line Prompt + 断线提示 + + + + ColorOrderSetWidget + + + Form + + + + + + Needle: + 针杆选择: + 针: + + + + + + 100 + 100 + + + + + Color num: + 当前色序: + 当前色序: + + + + + Total color: + 总颜色数: + 总颜色数: + + + + End needle: + 结束针数: + 结束针数: + + + + dst + + + + + PageNums: 0/0 + 页数:0/0 + + + + Begin needle: + 开始针数: + 开始针数: + + + + Total needle: + 总针数: + 总针数: + + + + + color order set + 色序设定 + + + + + + 1000000 + 1000000 + + + + One + + + + + + Many + + + + + + 0 + 0 + + + + + + + + Punch (P): + 冲孔(P): + + + + Emb (P): + 绣花(E): + + + + + + Sew (S): + 缝纫(S): + + + + pageNum: + 页数: + + + + + Emb (E): + 绣花(E): + + + + P + + + + + S + + + + + E + + + + + G + + + + + Punch: + 冲孔: + + + + + Gear set + 档位设置 + + + + Punch depth + 冲刀深度 + + + + + + Gear: + 缝纫针杆: + + + + Non needle step + 非下针针步 + + + + Needle + 针杆 + + + + + Not set + 未设置 + + + + ControlActionWidget + + + Form + + + + + Control action + 控制动作 + 控制动作 + + + + Control action < Auxiliary function + 控制动作 < 辅助功能 + 控制动作 < 辅助功能 + + + + PageNums: 1/1 + + + + + + + + + + + + + + + + TextLabel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PushButton + + + + + pageNum: + 页数: + + + + DebugDialog + + + Dialog + + + + + DebugFun + 调试功能 + + + + + DebugInfoDialog + + + Dialog + + + + + PageNums: 1/1 + 页数:1/1 + + + + DebugInfo: + 调试信息: + + + + pageNum: 0/0 + 页数: 0/0 + + + + pageNum: + 页数: + + + + DialogCutLine + + + Dialog + + + + + jogN + + + + + jogP + + + + + Enable + 使能 + + + + Disable + 失能 + + + + Spindle + + + + + Zero + 归零 + + + + Lower the scissors to cut the thread + + + + + Lighting + + + + + Manual operation + + + + + + Open + 打开 + + + + + Close + 关闭 + + + + + Trimming line angle + 压脚振幅 + 剪线分线角度 + + + + + deg + + + + + + Trimming completion angle + 压脚振幅 + 剪线完成角度 + + + + Thread trimming stroke + 压脚振幅 + + + + + Sewing and thread cutting + + + + + Sewing machine head lifting and lowering + + + + + CuttingLine debug + + + + + DialogDieCutter + + + Dialog + + + + + + jogN + + + + + + jogP + + + + + + Enable + 使能 + + + + + Disable + 失能 + + + + Spindle + + + + + + Zero + 归零 + + + + Rotate + + + + + Puch Manual operation + + + + + Punch a hole + + + + + Replacing the pole to zero + + + + + Punching jog + + + + + Color Change + + + + + Rotate to zero position + + + + + DieCutter debug + + + + + DialogNeedleShuttle + + + Dialog + + + + + + + + jogN + + + + + + + + jogP + + + + + + + + Enable + 使能 + + + + + + + Disable + 失能 + + + + Spindle + + + + + + + + Zero + 归零 + + + + Needle + + + + + Shuttle + + + + + Rotate + + + + + Close + 关闭 + + + + Lighting + + + + + Open + 打开 + + + + Needle shuttle proofreading + 针梭校对 + + + + Sewing machine head lifting and lowering + + + + + Manual operation + + + + + + Spindle parking sensor angle + 压脚振幅 + 主轴停车传感器角度 + + + + + deg + + + + + Angle of spindle hook sensor + 压脚振幅 + + + + + Needle off hook position + + + + + Shuttle off hook position + + + + + Sewing needle shuttle debugging + 缝纫针梭调试 + + + + Spindle hook line sensor angle unit + 主轴勾线传感器角度 + + + + GLOBAL + + + Init windows... + 初始化窗体... + + + + Language + 语言 + + + + Chinese:0;English:1 + Chinese:0;English:1;Spanish:2;Bengal:3;Portugal:4 + 中文:0;英文:1 + + + + Year + + + + + Month + + + + + Day + + + + + Hour + + + + + Minute + + + + + Second + + + + + Resolution + 分辨率 + + + + PunchMachine: + 冲孔机: + + + + PunchSew: + 冲缝机: + + + + PunchMachineDZ: + 定制冲孔机: + + + + PunchSewEmb: + 冲缝绣: + + + + TemplateSew: + 模板缝纫机: + + + + SingleHead: + 单头: + + + + + DoubleleHead: + 双头: + + + + FourHead: + 四头: + + + + RotaryPunch: + 旋转冲: + + + + singleleHead: + 单头: + + + + High and low speed switching + 高低速切换 + + + + Parameter is classified + 参数是否分类显示 + + + + HMI decrypt + 界面解密 + + + + + + Frequently used button1 + 常用按钮1 + + + + + + + + + + + + + SpindleEnable: + 主轴使能: + + + + + + + + + + + + + SpindleDisable: + 主轴失能: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SpindleTest: + 主轴研车: + + + + + + + + + + + + + + + + + + + + + + + PunchSpindleJog: + 冲孔主轴点动: + + + + + + + + + + + + + + + + + + + + + + + SewSpindleTest: + 缝纫主轴研车: + + + + + + + + + + + + + + + + + + + + + + + Sewing head lifting: + 缝纫机头升降: + + + + + + + + + + + + + + + + + + + + + + + SewSpindleJog: + 缝纫主轴点动: + + + + + + + + + + + + + + + + + + + + + + + PunchSetStartPoint: + 定起始点: + + + + + + + + + + + + + + + + + + + + + + + ChangeMachineSewHead: + 切换缝纫机头: + + + + + + + + + + + + + + + + + + + + + + + ChangeMachinePunchHead: + 切换冲孔机头: + + + + + + + + + + + + + Head 1 thread trimming: + 机头1剪线: + + + + + + + + + + + + + Head 2 thread trimming: + 机头2剪线: + + + + + + + + + + + + + + + + + + + + + + + Needle shuttle proofreading: + 针梭校对: + + + + + + + + + + + + + + + + + + + + + + + BackCenter: + 回中心点: + + + + + + + + + + + + + BackAnchorPoint: + 回定位点: + + + + + + + + + + + + + EmbSetStartPoint: + 平绣定起始点: + + + + + + + + + + + + + EmbSpindleTest: + 平绣主轴研车: + + + + + + + + + + + + + EmbSpindleJog: + 平绣主轴点动: + + + + + + + + + + + + + EmbChangeColor: + 平绣换色: + + + + + + + + + + + + + EmbCutLine: + 平绣剪线: + + + + + + + + + + + + + ChangeMachineEmbHead: + 切换平绣机头: + + + + + + + + + + + + + Sew thread trimming: + 缝纫剪线: + + + + + + + + + + + + + Sew rotate proofreading: + 缝纫旋转校对: + + + + + + + + + + + + + Needle shuttle reposition: + 针梭复位: + + + + + + + + + + + + + Needle reset: + 针复位: + + + + + + + + + + + + + Shuttle reset: + 梭复位: + + + + + + + + + + + + + Sew rotate up: + 缝纫旋转+: + + + + + + + + + + + + + Sew rotate down: + 缝纫旋转-: + + + + Communication method + 通讯方式 + + + + Network:0;SerialPort:1 + 网口:0;串口:1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AllToZero: + 全部归零: + + + + + + + + + + + + + SpindleJog: + 主轴点动: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BackWorkPoint: + 回工作点: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SetStartPoint: + 定起始点: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BackStartPoint: + 回起始点: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ForwardOrBackward: + 前进回退: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PatternSelect: + 花样选择: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Null: + 无功能: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SetOffsetPoint: + 定偏移点: + + + + AdhesivePress: + 压胶机: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BackOffsetPoint: + 回偏移点: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckFrame: + 边框检查: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ManualColorChange: + 手动换色: + + + + + + + + + + + + + ProcessReset: + 流程复位: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SinglePunch: + 单次冲孔: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FrameZero: + 框架归零: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MoveToRightUp: + 去右上角: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MoveToRightDown: + 去右下角: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MoveToLeftUp: + 去左上角: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MoveToLeftDown: + 去左下角: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SetWorkRange: + 定工作范围: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PunchStopLower: + 冲头停下位: + + + + + + + + + + + + + DrawOutline: + 画轮廓线: + + + + + + + + + + + + + ToolDebug: + 旋转补偿: + + + + + + Frequently used button2 + 常用按钮2 + + + + + + Frequently used button3 + 常用按钮3 + + + + + + Frequently used button4 + 常用按钮4 + + + + + + Frequently used button5 + 常用按钮5 + + + + + + Frequently used button6 + 常用按钮6 + + + + + + Frequently used button7 + 常用按钮7 + + + + + + Frequently used button8 + 常用按钮8 + + + + + + Frequently used button9 + 常用按钮9 + + + + + + Frequently used button10 + 常用按钮10 + + + + Server IP settings + Gateway server IP settings + 服务器IP设置 + + + + Server port settings + Gateway server port settings + 服务器端口设置 + + + + Local IP settings + 本地IP设置 + + + + Local port settings + 本地端口设置 + + + + Machine type + 机器类型 + + + + Product type + 产品类型 + + + + ProductNull: + 无: + + + + Is there a Richpeace logo + 是否有富怡标志 + + + + Is it with WiFi + 是否带wifi + + + + Network port:0;Serial port:1 + 网口:0;串口:1 + + + + Factory expects delivery time + 工厂预计交货时间 + + + + Debugging progress + 调试进度 + + + + Gateway connection method + 网关连接方式 + + + + Input rack number + 机架号输入 + + + + Network settings + 网络设置 + + + + + Stroke correction + 行程矫正 + + + + MainWidget + + + Richpeace Embroidery Control System + 富怡绣花控制系统 + 富怡绣花控制系统 + + + + 2021/03/08 8:37:16 + + + + + + PgUp + 上页 + + + + + PgDn + 下页 + + + + + page:0/0 + + + + + + + + + + + + + + + + + + PatternSet + 花样设置 + + + + Assist + 辅助功能 + 辅助功能 + + + + ParaSet + 参数设定 + 参数设定 + + + + Shortcut + 快捷功能 + 快捷功能 + + + + Main + 主界面 + 主界面 + + + + 0min + + + + + 0 + 0 + + + + 90° + + + + + + 30 + + + + + + 4999 + + + + + + 1000.00,1000.00 + + + + + XPlatForm-RP-HMI-L1910-V210713 + + + + + + + Root + 超级用户 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + shortcut + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + assist + 辅助功能 + + + + Pattern + 花样设置 + 花样设置 + + + + Pattern Name + + + + + 500.0 + + + + + + 1000.0 + + + + + X + + + + + 800.0 + + + + + W + + + + + C + + + + + H + C + H + + + + 999 + 999 + + + + 1000000 + + + + + Y + + + + + N + + + + + + + + + + + + + + + + + labelParaType + + + + + labelParaType2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DebugFunction + + + + + Close + 关闭 + 关闭 + + + + Forward or back + 快进快退 + 快进快退 + + + + Init windows... + 初始化窗体... + + + + Init communication... + 初始化通讯... + + + + Connnecting... + Status:Connnecting... + 连接中... + + + + + Connected + Status:Connected + 已连接 + + + + + + Not connected + Status:Not connected + 状态 + 未连接 + + + + Ready + Status:Ready + 已就绪 + + + + Working + Status: Working + 工作中 + + + + Pattern para + 花样参数 + + + + + + Parameter setting + 参数设置 + + + + Pattern selection + 花样选择 + + + + Richpeace PunchSew Control System + 富怡冲缝控制系统 + + + + Richpeace PressGlue Control System + 富怡压胶控制系统 + + + + + Needle setting + 针杆设置 + + + + + Accessibility > Needle setting + 辅助功能 > 针杆设置 + + + + Pattern import + 花样导入 + + + + Pattern export + 花样导出 + + + + Pattern delete + 花样删除 + + + + Pattern setting > Pattern selection + 花样设置 > 花样选择 + + + + + Richpeace Punching Control System + Richpeace Wire Control System + 富怡冲孔控制系统 + + + + Richpeace punchSewEmb Control System + 富怡冲绣缝控制系统 + + + + Richpeace TemplateSew Control System + 富怡模板缝纫机控制系统 + + + + Color order set + 色序设定 + + + + Pattern setting > Color order set + 花样设置 > 色序设定 + + + + Speed gear + 速度档位 + + + + Pattern setting > Speed gear + 花样设置 > 速度档位 + + + + Head height + 机头高度 + + + + Pattern setting > Head height + 花样设置 > 机头高度 + + + + Auxiliary function > Sensor signal + 辅助功能>传感器信号 + + + + Auxiliary function > Control action + 辅助功能 > 控制动作 + + + + Accessibility > Software setting + 辅助功能 > 软件设置 + + + + Accessibility > Network Manage + 辅助功能 > 网络管理 + + + + Accessibility > Time setting + 辅助功能 > 时间设置 + + + + Accessibility > Common functions setting + 辅助功能 > 常用设置 + + + + + + Accessibility > Root + 辅助功能 > 超级用户 + + + + Pattern setting > Pattern import + 花样设置 > 花样导入 + + + + Pattern setting > Pattern export + 花样设置 > 花样导出 + + + + Pattern setting > Pattern delete + 花样设置 > 花样删除 + + + + Undefined error, + 未定义错误, + + + + Pattern setting > Pattern para + 花样设置 > 花样参数 + + + + Frame angle setting + 动框角度设置 + + + + Root > Frame angle setting + 超级用户 > 动框角度设置 + + + + Position parameters + 位置参数 + + + + Speed parameters + 速度参数 + + + + Action parameters + 动作参数 + + + + Detect parameters + 检测参数 + + + + Work parameters + 工作参数 + + + + pageNum: + 页数: + + + + Setting parameters + 设置参数 + + + + Parameter setting > + 参数设置 > + + + + Parameter setting > Parameter setting + 参数设定 > 参数设定 + + + + Sensor signal + 传感器信号 + + + + Control action + 控制动作 + + + + + Accessibility + 辅助功能 + + + + Time setting + 时间设置 + + + + Common functions setting + 常用功能设置 + + + + MainWidgetFunction + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Prompt + 提示 + + + + + + + + USB flash drive is not detected! + 未检测到优盘! + + + + The program is corrupted, please re-upgrade after replacing the program! + 程序已损坏,请更换程序后重新升级! + + + + The file format is wrong, please select again! + 文件格式错误,请重新选择! + + + + + + + + + File size not match, invalid file! + 文件大小不匹配,无效的参数文件! + + + + + + Data check error, invalid file! + 数据校验错误,无效的参数文件! + + + + Parameters imported successfully! + 参数导入成功! + + + + + + File head not match, invalid file! + 文件头不匹配,无效的参数文件! + + + + Failed to initialize wlan0! + 初始化wlan0失败! + + + + Failed to search for WiFi list. Please try again later! + 搜索wifi列表失败,请稍后重试! + + + + dynamic + 动态 + + + + static + 静态 + + + + Failed to obtain IP. Please check the settings! + 获取IP失败,请检查设置! + + + + Parameter Import + 参数导入 + + + + Auxiliary Function > Parameter Import + Parameter Import < Auxiliary Function + 辅助功能 > 参数导入 + + + + + + + MC Upgrade + 主控升级 + + + + Auxiliary Function > MC Upgrade + MC Upgrade < Auxiliary Function + 辅助功能 > 主控升级 + + + + WIFI + + + + + Auxiliary Function > WIFI + 辅助功能 > WIF + + + + Set offset point + 定偏移点 + + + + Whether to set the current point as the offset point? + 是否将当前点设置为偏移点? + + + + Back offset point + 回偏移点 + + + + The password cannot be less than 8 digits, please check! + 密码不能小于8位,请检查! + + + + Password input **** + 密码输入**** + + + + Whether to exit the program? + 是否退出程序? + + + + HMI Upgrade + 界面升级 + + + + + + EXB Upgrade + 外围板升级 + + + + Parameters exported successfully! + 参数导出成功! + + + + All to zero + 全部归零 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The machine is about to move, please pay attention to safety! + 机器即将运动,请注意安全! + + + + Spindle jog + 主轴点动 + + + + Back work point + 回工作点 + + + + Back to origin + 回原点 + + + + File bytes are 0, please check the file! + 文件字节为0,请检查文件! + + + + Work parameters imported fail! + 工作参数导入失败! + + + + Work parameters imported successfully! + 工作参数导入成功! + + + + Frame parameters imported fail! + 动框参数导入失败! + + + + Frame parameters imported successfully! + 动框参数导入成功! + + + + WkParameter Import + 工作参数导入 + + + + Auxiliary Function > WkParameter Import + 辅助功能 > 工作参数导入 + + + + + Parameters exported failed! + 参数导出失败! + + + + Frame parameters exported successfully! + 动框参数导出成功! + + + + + Punch spindle enable + 冲孔主轴使能 + + + + Is the punching spindle enabled? + 冲孔主轴是否使能? + + + + Is the punching spindle disabled? + 冲孔主轴是否失能? + + + + Punch spindle run + 冲孔主轴研车 + + + + Sew spindle run + 缝纫主轴研车 + + + + embroidered spindle run + 平绣主轴研车 + + + + Punch spindle jog + 冲孔主轴点动 + + + + Sew spindle jog + 缝纫主轴点动 + + + + embroidered spindle jog + 平绣主轴点动 + + + + Hook position + 缝纫主轴去勾线位 + + + + Rotate proofread + 缝纫旋转校对 + + + + Sewing machine head lifting + 缝纫机头升降 + + + + Change to the sew head + 切换缝纫机头 + + + + Change to the punch head + 切换冲孔机头 + + + + Change to the embroidered head + 切换平绣机头 + + + + Needle shuttle proofreading + 针梭校对 + + + + Needle shuttle reset + 针梭复位 + + + + Replacing shuttle positions + 回换梭位 + + + + Sew rotate up + 缝纫旋转+ + + + + Sew rotate down + 缝纫旋转- + + + + Whether to change the steering! + 是否改变转向! + + + + Punch rot to zero + 冲孔旋转去零位 + + + + Back anchor point + 回定位点 + + + + Back thread point + 回穿线点 + + + + Back center point + 回中心点 + + + + Sew head set start point + 缝纫头定起始点 + + + + Sew head set anchor point + 缝纫头定定位点 + + + + + + Set anchor point + 定定位点 + + + + + + Whether to set the current point as the anchor point? + 是否将当前点设置为定位点? + + + + Punch head set start point + 冲孔头定起始点 + + + + Punch head set anchor point + 冲孔头定定位点 + + + + Emb head set start point + 绣花头定起始点 + + + + Emb head set anchor point + 绣花头定定位点 + + + + Border check + 边框检查 + + + + Left side out of frame + 左边界超限 + + + + Left side is ok + 左边界正常 + + + + Right side out of frame + 右边界超限 + + + + Right side is ok + 右边界正常 + + + + Lower side out of frame + 下边界超限 + + + + Lower side is ok + 下边界正常 + + + + Upper side out of frame + 上边界超限 + + + + Upper side is ok + 上边界正常 + + + + Click OK button machine will make a frame check, click the Cancel button machine will not move and exit this interface! + 点击确定按钮机器将进行边框检查的动作,点击取消按钮机器不会动作并退出此界面! + + + + Sewing machine head thread cutting + 缝纫机头剪线 + + + + Embroidered machine head thread cutting + 绣花机头剪线 + + + + Punch rod zero + 冲孔换杆归零 + + + + Manual change color + 手动换色 + + + + embroidered Manual change color + 绣花换杆 + + + + Single punch + 单次冲孔 + + + + Work Pause + 暂停工作 + + + + Do you want to suspend machine operation? + 是否暂停机器工作? + + + + Process reset + 流程复位 + + + + The machine is about to reset, please pay attention to safety! + 机器即将流程复位,请注意安全! + + + + Goto gorner + 回角点 + + + + Test adc + 测试电位器 + + + + Punch ms down + 冲头停下位 + + + + Draw outline + 画轮廓线 + + + + Continuous oil supply + 连续供油 + + + + Reset all + 全部复位 + + + + Motor zeroing + 电机归零 + + + + Station 1 gluing + 工位1涂胶 + + + + Station 2 gluing + 工位2涂胶 + + + + head Up Down + 机头升降 + + + + to Station 1 Apos + 回工位1起始点 + + + + to Station 2 Apos + 回工位2起始点 + + + + Return to material waiting point + 回等料点 + + + + Backflow glue point + 回排胶点 + + + + Discharge glue once + 排一次胶 + + + + Adjust glue height + 校准胶管高度 + + + + Total punchs: + 总冲孔数: + + + + Network error + 网络错误 + + + + Moving frame parameter import + 动框参数导入 + + + + Whether to import movable frame parameters? + 是否动框参数导入? + + + + Frame parameter Import + 动框参数导入 + + + + Root > Frame Parameter Import + Root > Parameter Import + 超级用户 > 动框参数导入 + + + + Moving frame parameter export + 动框参数导出 + + + + Whether to export moving frame parameters? + 是否动框参数导出? + + + + Is the pattern Fcg clear? + 是否删除花样fcg文件? + + + + + + + The machine is about to cut the thread, please pay attention to safety! + 机器即将剪线,请注意安全! + + + + The scissors are about to move, please pay attention to safety! + 剪刀即将动作,请注意安全! + + + + Simulate frame + 空走边框 + + + + Goto zero pos + 框架归零 + + + + Set work range + 定工作范围 + + + + If automatically set work range? + 是否自动定工作范围? + + + + Manual oil + 手动加油 + + + + If manual oil? + 是否手动加油? + + + + + Face line detection + 面线检测 + + + + Exit successfully! + 成功退出! + + + + + + Set start point + 定起始点 + + + + Emb hook position + 平绣主轴去勾线位 + + + + Shuttle zero + 梭归零 + + + + Needle zero + 针归零 + + + + + + Whether to set the current point as the start point? + 是否将当前点设置为起始点? + + + + Back start point + 回起始点 + + + + Cutting thread up + 剪上线 + + + + Cutting thread down + 剪下线 + + + + Upper cutter + 上剪线 + + + + System info + 版本信息 + + + + Spindle Gear Ratio Test + 主轴齿轮比测试 + + + + Whether to test the gear ratio of the spindle? + 是否测试齿轮比? + + + + Is the bottom line count reset? + Is the bottom line count reset ? + 是否底线计数复位? + + + + Are you sure to ManualSwitch? + Are you sure to ManualSwitch? + 是否手动工作状态切换? + + + + Are you sure to AutoSwitch? + Are you sure to AutoSwitch? + 是否自动工作状态切换? + + + + + ssid is empty! + ssid为空! + + + + Password input + 密码输入 + + + + + Settings require screen restart to take effect! + 设置需要重启屏幕才生效! + + + + IP input + IP输入 + + + + Whether to enter debug mode? + 是否进入调试模式? + + + + whether to exit debug mode? + 是否退出调试模式? + + + + Please log in to super user again! + 请重新登录超级用户! + + + + read parameter... + 读取参数中... + + + + + Journal exported successfully! + 文件日志导出成功! + + + + Journal exported failed! + 文件日志导出失败! + + + + Password input * + Password input ※ + 密码输入 ※ + + + + Password input ** + Password input ※※ + 密码输入 ※※ + + + + Password input *** + 密码输入 *** + + + + Three-level password successfully logged in! + 三级密码成功登入! + + + + reset parameters password successfully logged in! + 重置参数密码成功登入! + + + + Auto set softlimit + 自动定软限位 + + + + Is the version restored? + 是否版本恢复? + + + + Do you delete the configuration file? + 是否删除配置文件? + + + + + The settings take effect after restarting the interface! + 重启界面后设置生效! + + + + Import csv file successful! + 成功导入csv文件! + + + + Do you delete the csv file? + 是否删除csv文件? + + + + Reset succeeded! + 重置成功! + + + + Is the pattern clear? + 是否花样总清? + + + + Delete complete! + 删除完成! + + + + Delete complete,please reselect the file! + 删除完成,请重新选择文件! + + + + Not cleaned up! + 未清理完成! + + + + If reset the pattern Fcg data? + 是否重置花样fcg文件数据? + + + + Reset complete,please reselect the file! + 重置完成,请重新选择文件! + + + + Whether to shut down the computer? + 是否关闭计算机? + + + + Production statistics + 生产统计 + + + + + No connection + 未连接 + + + + Warrant + 授权 + + + + Total number of patterns processed: + 总共加工花样数量: + + + + Pattern name: + 花样名称: + + + + Pattern break line num: + 花样断线次数: + + + + Head + 机头 + + + + break line num: + 断线次数: + + + + Error Log + 错误日志 + + + + Auxiliary Function > Error Log + 辅助功能 > 错误日志 + + + + Breakage Log + 断线日志 + + + + Auxiliary Function > Breakage Log + 辅助功能 > 断线日志 + + + + ErrorLog + 错误日志 + + + + Auxiliary Function > ErrorLog + 辅助功能 > 错误日志 + + + + Day + + + + + Hour + + + + + Minutes + 分钟 + + + + The remaining available time of the machine is + 机器剩余可用时间为 + + + + Failed to upgrade the main control system! + 主控系统升级失败! + + + + Perparalboard system upgrade failed! + 外围板系统升级失败! + + + + Failed to send data file! + 发送数据文件失败! + + + + The main control system has been successed, waiting until machine restart + 主控系统升级成功,请等待机器重启 + + + + System will restart %1 s later + 系统将在 %1 秒后重启 + + + + The external board system is upgraded! + 外围板系统升级成功! + + + + The data file is send successfully! + 数据文件发送成功! + + + + Main control system is being upgraded... + 主控系统升级中... + + + + Auxiliary Function > HMI Upgrade + 辅助功能 > 界面升级 + + + + Auxiliary Function > Production statistics + 辅助功能 > 生产统计 + + + + The external board system upgrade... + 外围板系统升级中... + + + + Data file sending... + 数据文件发送中... + + + + Primary password successfully logged in! + 一级密码成功登入! + + + + + + The password is wrong,please re-enter! + 密码错误,请重新输入密码! + + + + Root successfully logged in! + 超级用户成功登入! + + + + HMI decrypt + 界面解密 + + + + The interface program is licensed, and then take effect after restarting, please restart manually! + 界面程序授权成功,重启后生效,请手动重启! + + + + Password error, interface program authorization failed! + 密码错误,界面程序授权失败! + + + + NeedleBarSetWidget + + + Form + + + + + + NeedleBar Set + + + + + NumSet: + 个数设置 + + + + + 1 + 1 + + + + EmbNeedleNum: + 绣花针杆个数: + + + + + + + PunchNeedleNum: + 冲孔针杆个数: + + + + SewNeedleNum: + 缝纫针杆个数: + + + + Number set + 个数设置 + + + + NumerInputDialog + + + Dialog + + + + + C + + + + + (0~3000)rmp + + + + + Number input + 数字输入 + + + + ← + + + + + ParameterSetDialog + + + Dialog + + + + + PageNums: 1/1 + 页数:1/1 + + + + Sub title + + + + + Sub title < Title + + + + + + pageNum: + 页数: + + + + Character input + 字符输入 + + + + Numbers of heads + 机头个数 + + + + HMI Configuration + 界面配置 + + + + Root > HMI Configuration + 超级用户 > 界面配置 + + + + Machine parameters + 机器参数 + + + + Work parameters + 工作参数 + + + + Traverse settings + 遍历设置 + + + + Root > Machine parameters + 超级用户 > 机器参数 + + + + Root > Work parameters + 超级用户 > 工作参数 + + + + Root > Traverse settings + 超级用户 > 遍历功能设置 + + + + Local port settings + 本地端口设置 + + + + + Local IP settings + 本地IP设置 + + + + IOT Configuration + 物联网配置 + + + + Root > IOT Configuration + Root >IOT Configuration + 超级用户 > 物联网配置 + + + + Network Settings + 网络设置 + + + + IOT Configuration > Network Settings + IOT Configuration >Network Settings + 物联网配置 > 网络设置 + + + + Pattern parameters + 花样参数 + + + + Root > Pattern parameters + 超级用户 > 花样参数 + + + + Server IP settings + 服务器IP设置 + + + + Server Port settings + 服务器端口设置 + + + + Local Port settings + 本口端口设置 + + + + Board IP settings + 主板IP设置 + + + + Board port settings + 主板端口设置 + + + + Whether to exit traversing settings? + Whether to exit traversing settings? + 是否退出遍历设置? + + + + Whether to exit lock test? + 是否退出锁头测试? + + + + + + + Root + 超级用户 + + + + + + + Accessibility > Root + 辅助功能 > 超级用户 + + + + + + + + + Network error + 网络错误 + + + + + + read parameter... + 读取参数中... + + + + + + No connection + 未连接 + + + + + + + + + + + + + + + Prompt + 提示 + + + + Whether to start traversing settings? + 是否开始遍历设置? + + + + + Parameters saved successfully! + 参数保存成功! + + + + + The settings take effect after restarting the interface! + 重启界面后设置生效! + + + + + Network settings are completed, re-establish after reboot + 网络设置完成,需重启后重新建立连接 + + + + The time setting is completed and will take effect after restart + 时间设置完成,重启后生效 + + + + Unreasonable time setting, please reset + 时间设置不合理,请重新设置 + + + + Time setting failed, please reset + 时间设置失败,请重新设置 + + + + Connection mode changes, take effect after the reboot! + 连接方式改变,重启界面后生效! + + + + Whether to recover the default parameters for the head board? + 是否恢复为机头板默认参数? + + + + Whether to recover the default parameters for the board? + 是否恢复为主板默认参数? + + + + PassWordDialog + + + Dialog + + + + + Password + 密码 + + + + 9 + + + + + 1 + + + + + 2 + + + + + ← + + + + + 3 + + + + + 6 + + + + + 8 + + + + + C + + + + + 0 + + + + + 5 + + + + + 7 + + + + + 4 + + + + + Prompt + 提示 + + + + IP settings are unreasonable! + IP设置不合理! + + + + PatternManageWidget + + + Form + + + + + PageNums: 0/0 + 页数:0/0 + + + + Sub title < Title + + + + + Sub title + + + + + + 1000.0 + + + + + W + + + + + 500.0 + + + + + 999 + + + + + H + + + + + 1000000 + + + + + Y + + + + + X + + + + + 800.0 + + + + + dst + + + + + C + + + + + N + + + + + pageNum: + 页数: + + + + + + + + + Prompt + 提示 + + + + Over 1.28 million stitches, can not be imported! + 针数超过128万,不能导入! + + + + Format error, can not be imported! + 格式错误,不能导入! + + + + This file already exists! + 此文件已存在! + + + + Rename + 重命名 + + + + Importing + 正在导入 + + + + Exporting + 正在导出 + + + + Import complete + 导入完成 + + + + Export complete + 导出完成 + + + + USB flash drive is not detected! + 未检测到优盘! + + + + Whether to delete the pattern? + 是否删除花样? + + + + Operation screen + 操作屏 + + + + USB + 优盘 + + + + + + Pattern Import + 花样导入 + + + + + + Pattern Import < Pattern setting + 花样导入 < 花样设置 + + + + Pattern Export + 花样导出 + + + + Pattern Export < Pattern setting + 花样导出 < 花样设置 + + + + new folder + 新文件夹 + + + + This folder already exists! + 此文件夹已经存在! + + + + PatternSelectWidget + + + Form + + + + + Name: + 花样名: + 花样名: + + + + N + + + + + C + + + + + H + + + + + W + + + + + + X + + + + + + Y + + + + + Width + + + + + NeedleNum + 针杆数 + + + + Name + 名称 + + + + Height + + + + + ColorNum + 颜色数 + + + + RotateAngle: + 旋转角度: + 旋转角度: + + + + 0 + + + + + P + + + + + PatternDirect: + 图案方向: + 图案方向: + + + + PatternHor: + 水平镜像: + 水平镜像: + + + + + No + + + + + + PatternVer: + 垂直镜像: + 垂直镜像: + + + + Pattern Select + 花样选择 + 花样选择 + + + + Pattern Select < Pattern Setting + 花样选择 < 花样设置 + 花样选择 < 花样设置 + + + + PageNums: 0/0 + + + + + PageNum: 0/0 + 页数: 0/0 + + + + pageNum: + 页数: + + + + Prompt + 提示 + + + + The number of stitches of the selected pattern has reached the upper limit (2 million stitches), and it cannot be embroidered! + 所选花样针数已达上限(200万针),不可绣作! + + + + PromptDialog + + + Dialog + + + + + Prompt + 提示 + + + + 1 + 1 + + + + Current Punch: + Current Needle: + 当前冲刀: + 当前冲刀: + + + + ID: + + + + + Password: + 密码: + 密码: + + + + ID + + + + + DecryptInfo + 解密信息 + + + + DecryptInfo: + 解密信息: + 解密信息: + + + + New Password: + 密码: + 新密码: + + + + Confirm Password: + 解密信息: + 解密信息: + + + + X + + X + + + + + X - + X - + + + + Y + + Y + + + + + Y - + Y - + + + + Board: + 主板: + + + + Unlimited time + 无时间限制 + + + + Time has run out + 时间已用完 + + + + Day + + + + + Hour + + + + + Minutes + 分钟 + + + + ID: %1 + + + + + + Password: %1 + + 密码: %1 + + + + + Time: %1 + 时间: %1 + + + + Warrant + 授权 + + + + New Password input + 设置新密码输入的标题 + + + + Confirm Password input + 设置确认密码输入的标题 + + + + HMI decrypt + 界面解密 + + + + PunchMachine + + + HMI Configuration + 界面配置 + + + + Interface debug mode + 界面进入调试模式 + + + + Delete configure file + 删除配置文件 + + + + Import CSV file + 导入csv文件 + + + + Delete CSV file + 删除csv文件 + + + + Reset CSV file + 重置安装调试进度 + + + + Machine parameters + 机器参数 + + + + Work parameters + 工作参数 + + + + InternetofThings configuration + 物联网配置 + + + + High speed or low speed + 高速低速 + + + + Flip style + 翻转式样 + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + Horizontal flip style + 水平翻转式样 + + + + vertical flip style + 垂直翻转式样 + + + + + No:0;Yes:1 + No:0;Yes:1; + 否:0;是:1 + + + + Rotation angle + 旋转角度 + + + + startX + 起始点x + + + + + + + + + + + + + + + + + + + + + + + + + + + mm + mm + + + + Delete pattern configuration + 删除花样配置 + + + + Length of the stitch that needs to be split + 需要分割的针步长度 + + + + startrY + 起始点y + + + + punching spindle start and stop speed + 冲孔主轴启动停止转速 + + + + + + + + + + + + + + + + + r/min + r/min + + + + main punching shaft zeroing speed + 主冲孔轴归零转速 + + + + Spindle running speed + 主轴运转转速 + + + + spindle punching speed + 主轴冲孔运转加速度 + + + + + + r/ss + r/ss + + + + spindle punching brake acceleration + 主轴冲孔刹车加速度 + + + + XY start stop speed + XY启动停止速度 + + + + + + + + + + + mm/s + mm/s + + + + XY zero run speed + XY归零运行速度 + + + + XY idle running speed + XY空走运行速度 + + + + XY walking acceleration + XY行走加速度 + + + + + mm/s2 + mm/s2 + + + + XY braking acceleration + XY刹车加速度 + + + + XY manual movement speed 1 + XY手动移动速度1 + + + + XY manual movement speed 2 + XY手动移动速度2 + + + + XY manual movement speed 3 + XY手动移动速度3 + + + + XY maximum movement speed + XY最高移动速度 + + + + X frame sensor coordinates + x框传感器坐标 + + + + Y frame sensor coordinates + y框传感器坐标 + + + + Spindle zero compensation angle + 主轴归零补偿角度 + + + + X-axis zero compensation + X轴归零补偿 + + + + Y-axis zero compensation + Y轴归零补偿 + + + + X backlash compensation + X间隙补偿 + + + + Y backlash compensation + Y间隙补偿 + + + + Number of handpieces + 机头个数 + + + + Number of punch hand + 冲孔每头机针个数 + + + + Infrared device configuration + 红外装置配置 + + + + X movable area negative border + X可移动区域负边界 + + + + X movable area positive border + X可移动区域正边界 + + + + X Punchable area negative boundary + X可冲孔区域负边界 + + + + X Positive boundary of punchable area + X可冲孔区域正边界 + + + + Y movable area negative boundary + Y可移动区域负边界 + + + + Y movable area positive boundary + Y可移动区域正边界 + + + + Y negative boundary of punchable area + Y可冲孔区域负边界 + + + + Y positive boundary of punchable area + Y可冲孔区域正边界 + + + + Starting and stopping speed of punch rotation + 冲头旋转启动停止速度 + + + + + + + deg/s + 度/秒 + + + + Zero speed of punch rotation + 冲头旋转归零速度 + + + + Rotating speed of punch + 冲头旋转运转速度 + + + + Acceleration of punch rotation motion + 冲头旋转运动加速度 + + + + + deg/ss + 度/秒方 + + + + Ram rotation brake acceleration + 冲头旋转刹车加速度 + + + + Maximum speed of punch rotation + 冲头旋转最高速度 + + + + Vacuum cleaner start delay + 吸尘器启动延时 + + + + + + + s + + + + + Vacuum cleaner off delay + 吸尘器关闭延时 + + + + Duration of vacuuming + 吸尘持续时长 + + + + Punching color change spacing + 冲孔换色间距 + + + + Working mode of punching brush + 冲孔画笔工作模式 + + + + automatic:0;Manual:1 + 自动:0;手动:1 + + + + Maximum running speed of punching spindle + 冲孔主轴最大运行速度 + + + + Automatic start angle adjustment + 自动起始角度调整 + + + + Single chip working time display mode + 单片工作时间显示模式 + + + + not display:0;monolithic:1;accumulative total:2 + 不显示:0;单片工作时间:1;累计工作时间:2 + + + + + adjustment angle 1000 rpm + 冲孔自动调整角度 1000 rpm + + + + + adjustment angle 1100 rpm + 冲孔自动调整角度 1100 rpm + + + + + adjustment angle 1200 rpm + 冲孔自动调整角度 1200 rpm + + + + + adjustment angle 1300 rpm + 冲孔自动调整角度 1300 rpm + + + + + adjustment angle 1400 rpm + 冲孔自动调整角度 1400 rpm + + + + + adjustment angle 1500 rpm + 冲孔自动调整角度 1500 rpm + + + + + adjustment angle 1600 rpm + 冲孔自动调整角度 1600 rpm + + + + + adjustment angle 1700 rpm + 冲孔自动调整角度 1700 rpm + + + + + adjustment angle 1800 rpm + 冲孔自动调整角度 1800 rpm + + + + + adjustment angle 1900 rpm + 冲孔自动调整角度 1900 rpm + + + + + adjustment angle 2000 rpm + 冲孔自动调整角度 2000 rpm + + + + + adjustment angle 2100 rpm + 冲孔自动调整角度 2100 rpm + + + + speed limit 4-5mm + 冲孔运行速度限制 4-5mm + + + + speed limit 5-6mm + 冲孔运行速度限制 5-6mm + + + + speed limit 6-7mm + 冲孔运行速度限制 6-7mm + + + + speed limit 7-8mm + 冲孔运行速度限制 7-8mm + + + + speed limit 8-9mm + 冲孔运行速度限制 8-9mm + + + + speed limit 9-14mm + 冲孔运行速度限制 9-14mm + + + + speed limit 14+mm + 冲孔运行速度限制 14+mm + + + + Punching 1 rotation angle compensation 1 + 冲孔旋转角度补偿1 + + + + Punching 1 rotation angle compensation 2 + 冲孔旋转角度补偿2 + + + + Punching 1 rotation angle compensation 3 + 冲孔旋转角度补偿3 + + + + Punching 1 rotation angle compensation 4 + 冲孔旋转角度补偿4 + + + + Punching 1 rotation angle compensation 5 + 冲孔旋转角度补偿5 + + + + Punching 1 rotation angle compensation 6 + 冲孔旋转角度补偿6 + + + + Punching 2 rotation angle compensation 1 + 冲孔2旋转角度补偿1 + + + + Punching 2 rotation angle compensation 2 + 冲孔2旋转角度补偿1 + + + + Punching 2 rotation angle compensation 3 + 冲孔2旋转角度补偿3 + + + + Punching 2 rotation angle compensation 4 + 冲孔2旋转角度补偿4 + + + + Punching 2 rotation angle compensation 5 + 冲孔2旋转角度补偿5 + + + + Punching 2 rotation angle compensation 6 + 冲孔2旋转角度补偿6 + + + + Punching vacuum cleaner start interval + 吸尘器启动间隔 + + + + 1 tool punching tool life alarm + 1刀位冲刀寿命报警 + + + + 2 tool punching tool life alarm + 2刀位冲刀寿命报警 + + + + 3 tool punching tool life alarm + 3刀位冲刀寿命报警 + + + + 4 tool punching tool life alarm + 4刀位冲刀寿命报警 + + + + 5 tool punching tool life alarm + 5刀位冲刀寿命报警 + + + + 6 tool punching tool life alarm + 6刀位冲刀寿命报警 + + + + first head + 第一个机头 + + + + second head + 第二个机头 + + + + third head + 第三个机头 + + + + fourth head + 第四个机头 + + + + Production preset + 产量预设 + + + + Punching spindle working speed + 冲孔主轴工作转速 + + + + Punching acceleration + 冲孔加速度 + + + + Punching and moving frame method + 冲孔动框方式 + + + + xy continuous frame:0;xy intermittent frame:1 + xy连续动框:0;xy间歇式动框:1 + + + + XY moving frame acceleration and deceleration method + XY动框加减速方式 + + + + xy intermittent pulse without acceleration and deceleration:0;xy intermittent pulse sine acceleration and deceleration:1 + xy间歇式脉冲无加减速:0;xy间歇式脉冲正弦加减速:0 + + + + Punching Rotation + 冲孔旋转方式 + + + + Punching continuous rotation:0;Punching indirect rotation:1 + 冲孔连续旋转:0;冲孔间接旋转:1 + + + + Starting angle of punching frame + 冲孔动框起始角度 + + + + Persistence angle of punching frame + 冲孔动框持续角度 + + + + xy move + xy移动 + + + + Minimum deviation angle for punching rotation deceleration + 冲孔旋转减速最小偏差角度 + + + + Continuous angle of punching rotation + 冲孔旋转持续角度 + + + + Punching machine head 1 rotation control + 冲孔机头1旋转控制 + + + + Punching machine head 2 rotation control + 冲孔机头2旋转控制 + + + + Punching machine head 3 rotation control + 冲孔机头3旋转控制 + + + + Punching machine head 4 rotation control + 冲孔机头4旋转控制 + + + + Punching machine head 5 rotation control + 冲孔机头5旋转控制 + + + + Punching machine head 6 rotation control + 冲孔机头6旋转控制 + + + + Replace the punch count + 更换冲头计数值 + + + + + bout + + + + + Color change start method + 换色启动方式 + + + + Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2 + 自动换色,自动启动:0;自动换色,手动启动:1;手动换色,手动启动:2 + + + + X embroidery frame reversing compensation + X绣框换向补偿 + + + + Y embroidery frame reversing compensation + Y绣框换向补偿 + + + + Punching jump stitches to change the number of frame stitches + 冲孔跳针变越框针数 + + + + Needle + + + + + Reversing working mode + 倒车工作模式 + + + + normal mode:0;Jog mode:1;Continuous jog mode:2 + 普通模式:0;点动模式:1;持续点动模式:2 + + + + Special needle position selection + 特殊针位选择 + + + + none:0;1 needle position:1;2 needle position:2;3 needle position:3;4 needle position:4;5 needle position:5;6 needle position:6;7 needle position:7;8 needle position:8;9 needle position:9 + 无:0;针位1:1;针位2:2;针位3:3;针位4:4;针位5:5;针位6:6;针位7:7;针位8:8;针位9:9 + + + + Special needle position function + 特殊针位功能 + + + + Carved hole:0;brush:1 + 雕孔:0;画笔:1 + + + + Color change speed + 换色速度 + + + + light curtain + 光幕 + + + + air pressure + 气压 + + + + Safety guardrail + 安全护栏 + + + + Tricolor lamp + 三色灯 + + + + Oil pump alarm + 油泵报警 + + + + Vacuum cleaner alarm + 吸尘器报警 + + + + Punching spindle start jogging speed + 冲孔主轴启动慢动转速 + + + + X Working Range + X工作范围 + + + + Y Working Range + Y工作范围 + + + + Punching rotation sensor angle + 冲孔旋转传感器角度 + + + + Maximum speed of punching and moving frame + 冲孔动框最高速度 + + + + mm/S + mm/s + + + + Jump maximum spindle speed + 跳针最高主轴转速 + + + + Blowing allowed + 吹气允许 + + + + X offset point + X偏移点 + + + + Y offset point + Y偏移点 + + + + offset point coordinates + 偏移点坐标 + + + + invalid:0;x is valid:1;y is valid:2;xy are valid:3 + 无效:0;x有效:1;y有效:2;xy同时有效:3 + + + + The stop position of the machine head after punching + 冲孔完毕机头停止位置 + + + + current location:0;starting point:1;location point:2;feeding point:3;offset point:4 + 当前位置:0;起点:1;定位点:2;上料点:3;偏移点:4 + + + + Spindle jog parking angle + 主轴点动停车角度 + + + + Refueling method selection + 加油方式选择 + + + + No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3 + 不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + + + + Refueling needles interval + 加油针数间隔 + + + + Needles + + + + + Refueling time interval + 加油时间间隔 + + + + h + 小时 + + + + Refueling duration + 加油持续次数 + + + + Automatic air frame allowed + 自动气框允许 + + + + + + + Not allow:0;Allowed:1 + 不允许:0;允许:1 + + + + Automatic closing of air frame allowed + 气框自动关闭允许 + + + + Automatic opening of air frame allowed + 气框自动打开允许 + + + + Code scanning allowed after automatic closing of air frame + 气框自动关闭后扫码允许 + + + + Automatic air frame closing delay + 自动气框闭合延时 + + + + ms + ms + + + + Enable + 使能 + + + + Disable + 失能 + + + + JogP + 正转 + + + + JogN + 反转 + + + + Zero + 归零 + + + + Open + 打开 + + + + Close + 关闭 + + + + Up + 上升 + + + + Down + 下降 + + + + All punching spindle motor + 所有主轴电机 + + + + No. 1 punching spindle motor + 1号头冲孔主轴电机 + + + + No. 2 punching spindle motor + 2号头冲孔主轴电机 + + + + No. 3 punching spindle motor + 3号头冲孔主轴电机 + + + + No. 4 punching spindle motor + 4号头冲孔主轴电机 + + + + X motor + X电机 + + + + Y motor + Y电机 + + + + punching color changing motor + 冲孔换色电机 + + + + Punch rotate motor + 冲孔旋转电机 + + + + template positioning cylinder + 模板定位气缸 + + + + Vacuum cleaner + 吸尘器 + + + + Safety barrier 1 + 安全护栏1 + + + + Safety barrier 2 + 安全护栏2 + + + + Punching refueling + 冲孔加油 + + + + Headlamp + 照明灯 + + + + All To Zero + 全部归零 + + + + Spindle Jog + 主轴点动 + + + + Spindle Enable + 主轴使能 + + + + Spindle Disable + 主轴失能 + + + + Spindle Test + 主轴研车 + + + + Set Offset + 定偏移点 + + + + Go Offset + 回偏移点 + + + + Set Start + 定起始点 + + + + Go Start + 回起始点 + + + + Go Work + 回工作点 + + + + Check Frame + 边框检查 + + + + Punch Change Tool + 手动换刀 + + + + Forward And Back + 前进回退 + + + + Single Punch + 单次冲孔 + + + + To Right Up + 去右上角 + + + + To Right Down + 去右下角 + + + + To Left Up + 去左上角 + + + + To Left Down + 去左下角 + + + + Head Stop Lower + 冲头停下位 + + + + Draw Outline + 画轮廓线 + + + + Oil Supply + 冲孔连续供油 + + + + Tool Debug + 冲刀调试 + + + + Rotate To Zero + 冲孔旋转去零位 + + + + Signal + 传感器信号 + + + + Action + 控制动作 + + + + HMIUpgrade + 界面升级 + + + + MCUpgrade + 主控升级 + + + + ParaImport + 参数导入 + + + + ParaExport + 参数导出 + + + + Software + 软件设置 + + + + Authorize + 软件授权 + + + + Network + 网络管理 + + + + WIFI + WIFI管理 + + + + NeedleSet + 针杆设置 + + + + Time + 时间设置 + + + + Shortcut + 常用设置 + + + + Statistics + 生产统计 + + + + Version + 版本信息 + + + + Root + 超级用户 + + + + errojunel + 错误日志 + + + + Select + 花样选择 + + + + Para + 花样参数 + + + + Color + 花样色序 + + + + Import + 花样导入 + + + + Export + 花样导出 + + + + Delete + 花样删除 + + + + OperatPara + 操作参数 + + + + ActionSet + 动作参数 + + + + SpeedPara + 速度参数 + + + + LimitPara + 限位参数 + + + + MCPara + 机器参数 + + + + Start button + 启动按钮 + + + + stop button + 停止按钮 + + + + jog button + 点动按钮 + + + + open frame 1 button + 开框1按钮 + + + + open frame 2 button + 开框2按钮 + + + + Safety light curtain + 安全光幕 + + + + Spindle 1 zero position + 主轴1零位 + + + + Spindle 2 zero position + 主轴2零位 + + + + Spindle 3 zero position + 主轴3零位 + + + + Spindle 4 zero position + 主轴4零位 + + + + Punching 1 Rotation Zero + 冲孔1旋转零位 + + + + Punching 2 Rotation Zero + 冲孔2旋转零位 + + + + Punching 3 Rotation Zero + 冲孔3旋转零位 + + + + Punching 4 Rotation Zero + 冲孔4旋转零位 + + + + X1 zero position + X1零位 + + + + Y1 zero position + Y1零位 + + + + X2 zero position + X2零位 + + + + Y2 zero position + Y2零位 + + + + X1 slows down + X1降速 + + + + Y1 deceleration + Y1降速 + + + + X2 downshift + X2降速 + + + + Y2 downshift + Y2降速 + + + + 1 limit- + X1限位- + + + + Y1 limit- + Y1限位- + + + + X2 limit - + X2限位- + + + + Y2 limit - + Y2限位- + + + + 1 limit+ + X1限位+ + + + + Y1 limit+ + Y1限位+ + + + + X2 limit + + X2限位+ + + + + Y2 limit + + Y2限位+ + + + + + Punching color changing motor - zero position + 冲孔换色电机-零位 + + + + Punching Color Change Motor - Negative Limit + 冲孔换色电机-负限位 + + + + Safety light curtain 1 input + 安全光幕1输入 + + + + Safety light curtain 2 input + 安全光幕2输入 + + + + open frame 3 button + 开框3按钮 + + + + open frame 4 button + 开框4按钮 + + + + + Air pressure protection input + 气压保护输入 + + + + Color change zero position 1 + 冲孔换色零位 1 + + + + Color change zero position 2 + 冲孔换色零位 2 + + + + Color change zero position 3 + 冲孔换色零位 3 + + + + Color change zero position 4 + 冲孔换色零位 4 + + + + X3 zero position + X3零位 + + + + Y3 zero position + Y3零位 + + + + X4 zero position + X4零位 + + + + Y4 zero position + Y4零位 + + + + X3 limit - + X3限位- + + + + Y3 limit - + Y3限位- + + + + X4 limit - + X4限位- + + + + Y4 limit - + Y4限位- + + + + X3 limit + + X3限位+ + + + + Y3 limit + + Y3限位+ + + + + X4 limit + + X4限位+ + + + + Y4 limit + + Y4限位+ + + + + Spindle position detection 1 + 冲孔主轴零位 1 + + + + Spindle position detection 2 + 冲孔主轴零位 2 + + + + Spindle position detection 3 + 冲孔主轴零位 3 + + + + Spindle position detection 4 + 冲孔主轴零位 4 + + + + Punching spindle is not at zero position + 冲孔主轴不在零位 + + + + Punching 1 spindle is not at zero position + 冲孔1主轴不在零位 + + + + Vacuum cleaner clogged + 吸尘器阻塞 + + + + Vacuum cleaner full + 吸尘器满料 + + + + Abnormal oil pump pressure + 油泵压力异常 + + + + + + Punching 2 spindle is not at zero position + 冲孔2主轴不在零位 + + + + Punching color change timeout + 冲孔换色超时 + + + + Punching needle position error + 冲孔针位错误 + + + + Punching 3 spindle is not at zero position + 冲孔3主轴不在零位 + + + + Punching 4 spindle is not at zero position + 冲孔4主轴不在零位 + + + + Breathing valve punching cylinder is not high + 呼吸阀冲孔气缸不在高位 + + + + Abnormality on the punching hole of the breathing valve + 呼吸阀冲孔上异常 + + + + Abnormal under the breathing valve punching + 呼吸阀冲孔下异常 + + + + Abnormal expansion and contraction of the stopper under the punching valve of the breathing valve + 呼吸阀冲孔下挡块伸缩异常 + + + + PunchSewEmbMachine + + + HMI Configuration + 界面配置 + + + + Delete configure file + 删除配置文件 + + + + Import CSV file + 导入csv文件 + + + + Delete CSV file + 删除csv文件 + + + + Reset CSV file + 重置安装调试进度 + + + + Machine parameters + 机器参数 + + + + Work parameters + 工作参数 + + + + InternetofThings configuration + 物联网配置 + + + + Flip style + 翻转式样 + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + Horizontal flip style + 水平翻转式样 + + + + + No:0;Yes:1 + No:0;Yes:1; + 否:0;是:1 + + + + vertical flip style + 垂直翻转式样 + + + + Rotation angle + 旋转角度 + + + + Length of the stitch that needs to be split + 需要分割的针步长度 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mm + mm + + + + startX + 起始点x + + + + startrY + 起始点y + + + + AnchorX + 定位点x + + + + Delete pattern configuration + 删除花样配置 + + + + AnchorY + 定位点y + + + + Continuous motion frame compensation + 连续动框补偿 + + + + Needle tip compensation + 针尖补偿 + + + + Number of heads + 机头个数 + + + + sewing needles per head + 每头机针个数 + + + + emb needles per head + 平绣针数 + + + + punch needles per head + 冲孔针数 + + + + X axis configuration + X轴配置 + + + + + + + + + + + + + + + + + + + + + + + + + + + No:0;Have:1 + 无:0;有:1 + + + + X axis motor drive selection + X轴电机驱动选择 + + + + + + + Single motor:0;Double motor:1 + 单驱动:0;双驱动:1 + + + + X axis coordinate system selection + X轴坐标系统选择 + + + + + + + Positive:0;Reverse:1 + 正:0;反:1 + + + + X axis moving object selection + X轴移动对象选择 + + + + + + + Head:0;Frame:1 + 机头:0;框:1 + + + + X axis zero sensor selection + X轴零位传感器选择 + + + + X axis speed reduction sensor selection + X轴降速传感器选择 + + + + X axis positive limit sensor selection + X轴正限位传感器选择 + + + + X axis negative limit sensor selection + X轴负限位传感器选择 + + + + X axis zero direction selection + X轴零位方向选择 + + + + + + + Negative:0;Positive:1 + 负方向:0;正方向:1 + + + + X axis sensor function selection + X轴传感器作用选择 + + + + + + + Zero separate:0;Zero and speed reduction:1 + 零分离:0;零点和减速:1 + + + + Y axis configuration + Y轴配置 + + + + Y axis motor drive selection + Y轴电机驱动选择 + + + + Y axis coordinate system selection + Y轴坐标系统选择 + + + + Y axis moving object selection + Y轴移动对象选择 + + + + Y axis zero sensor selection + Y轴零位传感器选择 + + + + Y axis speed reduction sensor selection + Y轴降速传感器选择 + + + + Y axis positive limit sensor selection + Y轴正限位传感器 + + + + Y axis negative limit sensor selection + Y轴负限位传感器 + + + + Y axis zero direction selection + Y轴零位方向选择 + + + + Y axis sensor function selection + Y轴传感器作用选择 + + + + X2 axis configuration + X2轴配置 + + + + X2 axis motor drive selection + X2轴电机驱动选择 + + + + X2 axis coordinate system selection + X2轴坐标系统选择 + + + + X2 axis moving object selection + X2轴移动对象选择 + + + + X2 axis zero sensor selection + X2轴零位传感器选择 + + + + X2 axis speed reduction sensor selection + X2轴降速传感器选择 + + + + X2 axis positive limit sensor selection + X2轴正限位传感器选择 + + + + X2 axis negative limit sensor selection + X2轴负限位传感器选择 + + + + X2 axis zero direction selection + X2轴零位方向选择 + + + + X2 axis sensor function selection + X2轴传感器作用选择 + + + + Y2 axis configuration + Y2轴配置 + + + + Y2 axis motor drive selection + Y2轴电机驱动选择 + + + + Y2 axis coordinate system selection + Y2轴坐标系统选择 + + + + Y2 axis moving object selection + Y2轴移动对象选择 + + + + Y2 axis zero sensor selection + Y2轴零位传感器选择 + + + + Y2 axis speed reduction sensor selection + Y2轴降速传感器选择 + + + + Y2 axis positive limit sensor selection + Y2轴正限位传感器 + + + + Y2 axis negative limit sensor selection + Y2轴负限位传感器 + + + + Y2 axis zero direction selection + Y2轴零位方向选择 + + + + Y2 axis sensor function selection + Y2轴传感器作用选择 + + + + Sewing spindle configuration + 缝纫主轴配置 + + + + Needle shuttle configuration + 针梭配置 + + + + Needle shuttle:0;Needle shuttle separation:1 + 针穿梭:0;针梭分离:1 + + + + Lift motor configuration + 升降电机配置 + + + + Presser foot motor configuration + 压脚电机配置 + + + + Rotating motor configuration + 旋转电机配置 + + + + + + Rotary motor coordinate system + 旋转电机坐标系统选择 + + + + Single motor: 0 ; Double motor: 1 + 单电机:0;双电机:1 + + + + The coordinate system is positive: 0 ; Coordinate system is reverse: 1 + 坐标系为正:0;坐标系为负:1 + + + + Machine head: 0 ; box: 1 + 机头:0;框:1 + + + + Rotation limit + 旋转限制 选择 + + + + Unlimited: 0 ; limited: 1 + 有限制:0;无限制:1 + + + + Lower scissors drive selection + 下剪刀驱动装置选择 + + + + No lower trimming device:0;Cylinder:1;AC motor:2;Stepper motor:3;Electromagnet:4 + 无下剪线装置:0;气缸:1;交流电机:2;步进电机:3;电磁铁:4 + + + + Lower trimming mode selection + 下剪线模式选择 + + + + Static trimming:0;Dynamic trimming:1;Cam trimming:2;Cam respectively trimming:3 + 静态剪线:0;动态剪线:1;凸轮剪线:2;凸轮分别剪线:3 + + + + Upper scissors drive selection + 上剪刀驱动装置选择 + + + + No Upper trimming Device:0;Cylinder:1 + 无上剪线装置:0;气缸:1 + + + + Upper thread break detection device selection + 面线断线检测装置选择 + + + + No:0;Pick wire spring:1;Electronic isolation:2 + 无:0;拣选钢丝弹簧:1;电子隔离开关:2 + + + + Bottom line break detection device selection + 底线断线检测装置选择 + + + + No device: 0 ; Grating wheel: 1 ; Magnetic encoder: 2;Immediate alarm by length:3 + 无:0;光栅轮:1;磁编码器:2;按长度即时报警:3 + + + + Wire break detection mode selection + 断线检测模式选择 + + + + Direct detection:0;EXBboard detection:1 + 直接检测:0;外围板检测:1 + + + + Hook line device selection + 勾面线装置选择 + + + + No hook line device:0;Cylinder:1;Electromagnet:2 + 无勾线装置:0;气缸:1;电磁铁:2 + + + + Loose line device selection + 松面线装置选择 + + + + No loose wire device:0;Cylinder:1;Electromagnet:2 + 无松线装置:0;气缸:1个;电磁铁:2 + + + + Ramen line device selection + 拉面线装置选择 + + + + No ramen line device:0;Cylinder:1;Electromagnet:2 + 无拉面线装置:0;气缸:1;电磁铁:2 + + + + Bottom line device selection + 扣底线装置选择 + + + + No bottom line device:0;Cylinder:1;Electromagnet:2 + 无底线装置:0;气缸:1;电磁铁:2 + + + + Second loose line device selection + 第二松面线选择 + + + + No loose wire device: 0 ; cylinder: 1 ; Electromagnet: 2 + 无松线装置:0;气缸:1;电磁铁:2 + + + + Template recognition device + 模板识别装置 + + + + No identification device: 0 ; Bar code: 1 ; Coding hole: 2 + 无识别装置:0;条形码:1;编码孔:2 + + + + The hook faces the direction + 旋梭面对方向 + + + + Forward:0;Left:1;Right:2;Up:3 + 正:0;左:1;右:2;下:3 + + + + Template detecting device + 旋梭面对方向 + + + + No detection device: 0 ; Detect: 1 + 无检测装置:0;有检测装置:1 + + + + X box sensor coordinates + X框传感器坐标 + + + + Y box sensor coordinates + Y框传感器坐标 + + + + Spindle parking sensor angle + 主轴停车传感器角度 + + + + Presser foot sensor coordinates + 压脚传感器坐标 + + + + Rotation sensor angle + 旋转传感器角度 + + + + Spindle hook line sensor angle unit + 主轴勾线传感器角度 + + + + Punch parking angle + 冲头停车角度 + + + + Knife parking angle + 裁刀停车角度 + + + + X2 box sensor coordinates + X2框传感器坐标 + + + + Y2 box sensor coordinates + Y2框传感器坐标 + + + + Spindle jog parking angle + 主轴点动停车角度 + + + + Flat embroidery spindle parking angle + 平绣主轴停车角度 + + + + X movable area negative boundary + X可移动区域负边界 + + + + X movable area positive boundary + X可移动区域正边界 + + + + Y movable area negative boundary + Y可移动区域负边界 + + + + Y movable area positive boundary + Y可移动区域正边界 + + + + Presser foot lift can move the upper boundary + 压脚升降可移动上边界 + + + + Presser foot lift can move the lower boundary + 压脚升降可移动下边界 + + + + Motor presser pulse equivalent molecule + 电机压脚脉冲当量分子 + + + + Motor presser pulse equivalent denominator + 电机压脚脉冲当量分母 + + + + Rotation range positive limit angle + 旋转范围正向限制角度 + + + + Rotation range negative limit angle + 旋转范围正向限制角度 + + + + Punching head offset X + 冲孔机头偏移X + + + + Punching head offset Y + 冲孔机头偏移Y + + + + X Sewing area Negative boundary + x可缝纫区域负边界 + + + + X Sewing area Positive margin + x可缝纫区域正边界 + + + + Y Sewing area Negative boundary + y可缝纫区域负边界 + + + + Y Sewing area Positive margin + y可缝纫区域正边界 + + + + X Can be perforated region Negative boundary + x可冲孔区域负边界 + + + + X Can be perforated region Positive margin + x可冲孔区域正边界 + + + + Y Can be perforated region Negative boundary + y可冲孔区域负边界 + + + + Y Can be perforated region Positive margin + y可冲孔区域正边界 + + + + Sewing right head offset X + 缝纫右机头偏移X + + + + Sewing right head offset Y + 缝纫右机头偏移Y + + + + Cutter head offset X + 切刀机头偏移X + + + + Cutter head offset Y + 切刀机头偏移Y + + + + x can crop the negative boundary of the area + Y可裁切区域负边界 + + + + x can crop the positive boundary of the area + X可裁切区域正边界 + + + + y can crop the negative boundary of the area + Y可裁切区域负边界 + + + + y can crop the positive boundary of the area + Y可裁切区域正边界 + + + + XY start stop speed + XY启动停止速度 + + + + + + + + + + + + + + + + + + + + + + mm/s + mm/s + + + + XY zero running speed + XY归零运行速度 + + + + XY Idling speed + XY空走运行速度 + + + + XY walking acceleration + XY行走加速度 + + + + + + + + + + + mm/s2 + mm/s2 + + + + XY brake acceleration + XY刹车加速度 + + + + XY manual movement speed 1 + XY手动移动速度1 + + + + XY manual movement speed 2 + XY手动移动速度2 + + + + XY manual movement speed 3 + XY手动移动速度3 + + + + XY maximum moving speed + XY最高移动速度 + + + + Spindle start stop speed + 主轴启动停止转速 + + + + + + + + + + + + + + + + + + r/min + r/min + + + + Spindle zero return speed + 主轴归零转速 + + + + Spindle running speed + 主轴运转转速 + + + + Spindle running acceleration + 主轴运转加速度 + + + + + + + + r/ss + r/ss + + + + Spindle brakes acceleration + 主轴刹车加速度 + + + + sewing maximum speed + 主轴缝纫最高转速 + + + + + Head lift start end speed + 机头升降起停速度 + + + + Head lift and zero speed + 机头升降归零速度 + + + + Head lift walk speed + 机头升降行走速度 + + + + Head lift acceleration + 机头升降行走加速度 + + + + Head movements brake acceleration + 机头升降刹车加速度 + + + + Presser foot lift zero speed + 压脚升降归零速度 + + + + Presser foot lifting speed + 压脚升降行走速度 + + + + Presser foot lifting acceleration + 压脚升降行走加速度 + + + + Presser foot lift brake acceleration + 压脚升降刹车加速度 + + + + Head rotation start stop speed + 机头旋转启动停止速度 + + + + + + + + + + + deg/s + 度/秒 + + + + Head rotation zero return speed + 机头旋转归零速度 + + + + Head rotation speed + 机头旋转运转速度 + + + + Head rotation acceleration + 机头旋转运动加速度 + + + + + + + deg/s2 + 度/秒方 + + + + Head rotation brake acceleration + 机头旋转刹车加速度 + + + + Head rotation maximum speed + 机头旋转最高速度 + + + + + Left loading point X + 左上料点x + + + + + Left loading point Y + 左上料点y + + + + + Right loading point X + 右上料点x + + + + + Right loading point Y + 右上料点y + + + + + Template box width + 模板框宽度 + + + + Template frame start and stop speed + 模板框启停速度 + + + + Template frame waking speed + 模板框行走速度 + + + + Template frame waking acceleration + 模板框行走加速度 + + + + Template frame brake acceleration + 模板框刹车加速度 + + + + Compensation angle of upper machine head rotation return to zero + 上机头旋转归零补偿角度 + + + + Compensation angle of lower machine head rotation return to zero + 下机头旋转归零补偿角度 + + + + Spindle zero compensation angle + 主轴归零补偿角度 + + + + Flat embroidery head offset X + 平绣机头偏移x + + + + Flat embroidery head offset Y + 平绣机头偏移y + + + + Flat embroidery X area negative boundary + 平绣x可绣花区域正边界(X-) + + + + + + Flat embroidery X area positive boundary + 平绣x可绣花区域正边界(X+) + + + + Start speed of punching rotation + 冲孔旋转启动速度 + + + + Punch rotation zero speed + 冲孔旋转归零速度 + + + + + Rotating speed of punch + 冲头旋转运转速度 + + + + Acceleration of ram punch + 冲孔旋转运转加速度 + + + + Ram punch rotation brake acceleration + 冲孔旋转刹车加速度 + + + + X gap compensation + X间隙补偿 + + + + Y gap compensation + Y间隙补偿 + + + + Brush offset X + 画笔偏移X + + + + Brush offset Y + 画笔偏移Y + + + + Track offset X + 压枣偏移X + + + + Track offset Y + 压枣偏移Y + + + + sewing work speed + 主轴缝纫工作转速 + + + + Spindle Cut line speed + 主轴剪线转速 + + + + Spindle Back needle speed + 主轴回针转速 + + + + Spindle start slow speed + 主轴启动慢动转速 + + + + Reverse equivalent spindle speed + 倒车等效主轴转速 + + + + Sewing moving frame + 缝纫动框方式 + + + + Continuous:0;Intermittent:1 + 连续:0;间歇式:1 + + + + Sewing acceleration and deceleration mode + 缝纫加减速方式 + + + + No acceleration or deceleration:0;Xy sine acceleration and deceleration:1 + 无加速或减速:0;Xy正弦加速度和减速度:1 + + + + Sewing machine head rotating manner + 缝纫机头旋转方式 + + + + Continuous rotation:0;Xy intermittent rotation:1 + 连续旋转:0;Xy间歇旋转:1 + + + + Sewing head deceleration mode + 缝纫机头加减速方式 + + + + No acceleration or deceleration:0;Intermittent acceleration and deceleration:1 + 无加速或减速:0;间歇加减速:1 + + + + Sewing movable frame starting angle + 缝纫动框起始角度 + + + + Sewing movable frame duration angle + 缝纫动框持续角度 + + + + Start low speed needls + 起针慢动针数 + + + + + + + Needles + + + + + Needle action loose line allowed + 起针动作松线允许 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Not allow:0;Allowed:1 + 不允许:0;允许:1 + + + + Needle action top line allowed + 起针动作松线允许 + + + + Needle action clamp line allowed + 起针动作夹线允许 0 + + + + Allow to embroider line allowed + 绣花起针夹线允许 + + + + Cut lines allow + 剪线允许 + + + + Do not trim: 0;Automatic thread trim:1;Data trim:2 + 不剪线:0;自动剪线:1;数据剪线:2 + + + + Trimming line angle + 剪线分线角度 + + + + Trimming completion angle + 剪线完成角度 + + + + Action loosening when thread trimming + 剪线时动作松线允许 + + + + Action wire pull when thread trimming + 剪线时动作拉线允许 + + + + Action clip line allows when trimming + 剪线时动作夹线允许 + + + + The action of lifting the presser foot during thread cutting is allowed + 剪线时动作提升压脚允许 + + + + The action of lifting the machine head during thread cutting allows for thread cutting + 剪线时动作提升机头剪线允许 + + + + The action of lifting the machine head during thread cutting allows for thread clamping + 剪线时动作提升机头夹线允许 + + + + When cutting the thread, the action is allowed to hook the thread under the pressure foot + 剪线时动作在压脚下勾线允许 + + + + Number of broken wires + 断线检测针数 + + + + Broken line detection spindle angle + 断线检测主轴角度 + + + + Change bobbin Reminder function + 换梭芯提醒功能 + + + + Not:0;Delay reminder by length:1;Count by number of slices:2;Immediately reminder by length:3 + 未启用:0;按长度划分的延迟提醒:1;按切片数计数:2;按长度立即提醒:3 + + + + Bottom line length + 底线长度 + + + + Bottom line correction per stitch + 每针底线修正量 + + + + Number of shuttles + 换梭片数计数 + + + + times + + + + + Refueling method selection + 加油方式选择 + + + + No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3 + 不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + + + + Refueling needles interval + 加油针数间隔 + + + + Refueling time interval + 加油时间间隔 + + + + + + + + + + s + + + + + Refueling duration + 加油持续次数 + + + + Parking position selection after completion + 完成后停车位置选择 + + + + Current:0;Starting:1;Anchor:2;Feeding:3;Offset:4 + 当前点:0;起始点:1;定位点:2;上料点:3;偏移点:4 + + + + Offset point coordinate valid flag + 偏移点坐标有效标志 + + + + + Invalid:0;X is valid:1;Y is valid:2;XY is valid:3 + 无效:0;X有效:1;Y有效:2;XY同时有效:3 + + + + Offset point coordinate X + 偏移点坐标X + + + + Offset point coordinate Y + 偏移点坐标Y + + + + Threading point coordinate effective mark + 穿线点坐标有效标志 + + + + Threading point coordinates X + 穿线点坐标X + + + + Threading point coordinates Y + 穿线点坐标Y + + + + Machine head low position + 机头升降低位高度 + + + + Machine head heigh position + 机头升降高位高度 + + + + Production preset + 产量预设 + + + + Illumination brightness + 照明亮度 + + + + Delay after the air frame is closed + 气框关闭后延时 + + + + Sewing acceleration + 缝纫加速度 + + + + Trimming frame displacement + 剪线动框位移 + + + + Sewing blow allowed + 缝纫吹气允许 + + + + Sewing the needle allowed + 摆针允许 + + + + Automatic loopback point allowed + 自动回穿点允许 + + + + Sewing head rotation allowed + 机头旋转允许 + + + + Send sidebar allowed + 送边条允许 + + + + Punching blow allowed + 冲孔吹气允许 + + + + Vacuum cleaner off delay + 吸尘器关闭延时 + + + + Punching spindle speed + 冲孔主轴转速 + + + + Punching acceleration + 冲孔加速度 + + + + Punching movable frame mode + 冲孔动框方式 + + + + AContinuous:0;BIntermittent:1 + 连续式:0;间歇式:1 + + + + Punching acceleration and deceleration mode + 冲孔加减速方式 + + + + No acceleration or deceleration:0;XY sine acceleration and deceleration:1 + 无加速或减速:0;XY正弦加速度和减速度:1 + + + + Punching frame starting angle + 冲孔动框起始角度 + + + + Punching frame continuous angle + 冲孔动框持续角度 + + + + Sewing move head up down + 缝纫间越框机头升降 + + + + Punching move head up down + 冲孔间越框机头升降 + + + + Moving basket Loose line + 移框松线允许 + + + + Moving basket Clamp line + 移框夹线允许 + + + + Software limit XY move allowed + 软件限位XY移动允许 + + + + Software limit sewing head lifting allowed + 软件限位缝纫头升降允许 + + + + Software limit punch head lifting allowed + 软件限位冲孔头升降允许 + + + + Software limit cutter head lift allowed + 软件限位裁刀机头升降允许 + + + + Software limit Punch drop allowed + 软件限位冲孔落杆限制允许 + + + + Software limit embroidery falling pole allowed + 软件限位绣花落杆限制允许 + + + + + Shuttle rotation angle + 换梭旋转机头角度 + + + + Number of needle hooks + 面线勾线针数 + + + + + needle + + + + + Presser foot height during sewing work + 缝纫工作时压脚高度 + + + + Head height during simulated work + 模拟工作时机头高度 + + + + Cutter working speed + 切刀工作转速 + + + + Cutter acceleration + 切刀加速度 + + + + Trimming frame direction + 剪线动框方向 + + + + Stop:0;Left:1;Forward:2;Right:3;Backward:4 + 禁止移动:0;左:1;前:2;右:3;后:4 + + + + track formed up and down + 压枣升降行程 + + + + Spindle corner speed + 主轴拐角转速 + + + + Minimum speed deviation angle + 降速最小偏差角度 + + + + Slow down the needle step in advance + 提前降速针步 + + + + Delay speed up needle step + 延迟提速针步 + + + + Minimum deviation angle of punching rotation deceleration + 冲孔旋转减速最小偏差角度 + + + + Punch rotation duration angle + 冲孔旋转持续角度 + + + + Working permission of sewing machine head + 缝纫机头工作允许 + + + + Work permit of punch head + 冲孔机头工作允许 + + + + Embroidery machine head work permit + 绣花机头工作允许 + + + + Auto Zero after power on + 开机自动归零 + + + + Punch rotation control 1 + 冲头旋转控制1 + + + + Punch rotation control 2 + 冲头旋转控制2 + + + + Punch rotation control 3 + 冲头旋转控制3 + + + + Punch rotation control 4 + 冲头旋转控制4 + + + + Punch rotation control 5 + 冲头旋转控制5 + + + + Punch rotation control 6 + 冲头旋转控制6 + + + + Color change start method + 换色启动方式 + + + + Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2 + 自动换色,自动启动:0;自动换色,手动启动:1;手动换色,手动启动:2 + + + + X frame commutation compensation + X绣框换向补偿 + + + + Y frame commutation compensation + Y绣框换向补偿 + + + + The way of mending flat embroidery + 平绣补绣方式 + + + + mending emb off: 0 ; mending emb by hand: 1 ; mending emb auto: 2 + 补绣关闭:0;手动:1;自动:2 + + + + Locking times + 锁针次数 + + + + Number of needle locking steps + 锁针步数 + + + + Length of lock needle + 锁针针步长度 + + + + Start working position mode + 开始工作模式 + + + + From the Stop lot: 0 ; From the current location, do not save: 1 ; From the current location, save: 2 + 从停车点开始:0;从当前位置开始,不保存:1;从当前位置开始,保存:2 + + + + Punching jump stitches to change the number of stitches beyond the frame + 冲孔跳针变越框针数 + + + + Punching jog mode + 冲孔点动模式 + + + + Lock rotate:0;rotate Lock:1 + 先锁头,再旋转:0;先旋转,再锁头:1 + + + + Reverse operation mode + 倒车工作模式 + + + + normal:0;click:1;continue click:2 + 普通模式:0;点动模式:1;持续点动模式:2 + + + + Special needle choose + 特殊针位选择 + + + + nothing:0;one:1;two:2;three:3;four:4;five:5;six:6;seven:7;eight:8;nine:9 + 无:0;针位1:1;针位2:2;针位3:3;针位4:4;针位5:5;针位6:6;针位7:7;针位8:8;针位9:9 + + + + Special needle function + 特殊针位功能 + + + + Carved hole:0;paint brush:1 + 雕孔:0;画笔:1 + + + + Vacuum cleaner start delay + 吸尘器启动延时 + + + + Color change speed + 换色速度 + + + + first head + 第一个机头 + + + + second head + 第二个机头 + + + + third head + 第三个机头 + + + + fourth head + 第四个机头 + + + + fifth head + 第五个机头 + + + + sixth head + 第六个机头 + + + + seventh head + 第七个机头 + + + + eighth head + 第八个机头 + + + + ninth head + 第九个机头 + + + + tenth head + 第十个机头 + + + + eleventh head + 第十一个机头 + + + + twelfth head + 第十二个机头 + + + + thirteenth head + 第十三个机头 + + + + fourteenth head + 第十四个机头 + + + + fifteenth head + 第十五个机头 + + + + sixteent head + 第十六个机头 + + + + seventeenth head + 第十七个机头 + + + + eighteenth head + 第十八个机头 + + + + nineteenth head + 第十九个机头 + + + + twentieth head + 第二十个机头 + + + + twenty-first head + 第二十一个机头 + + + + twenty-second head + 第二十二个机头 + + + + twenty-third head + 第二十三个机头 + + + + twenty-fourth head + 第二十四个机头 + + + + twenty-fifth head + 第二十五个机头 + + + + twenty-sixth head + 第二十六个机头 + + + + twenty-seventh head + 第二十七个机头 + + + + twenty-eighth head + 第二十八个机头 + + + + twenty-ninth head + 第二十九个机头 + + + + thirtieth head + 第三十个机头 + + + + thirty-first head + 第三十一个机头 + + + + thirty-second head + 第三十二个机头 + + + + Secure input light curtain allows + 安全输入光幕允许 + + + + Safety input pressure allowed + 安全输入气压允许 + + + + Safe input power-on signal allowed + 安全输入上电信号允许 + + + + Safe input emergency door allowed + 安全输入安全门允许 + + + + Automatic air box allowed + 自动气框允许 + + + + Automatic air frame closing delay + 自动气框闭合延时 + + + + + ms + ms + + + + Stitch offset allows + 线迹偏移允许 + + + + Loop work allowed + 循环工作允许 + + + + Right Work head selection 1 + 右机头选择1 + + + + Right Work head selection 2 + 右机头选择2 + + + + Right Work head selection 3 + 右机头选择3 + + + + Right Work head selection 4 + 右机头选择4 + + + + Right Work head selection 5 + 右机头选择5 + + + + Right Work head selection 6 + 右机头选择6 + + + + Right Work head selection 7 + 右机头选择7 + + + + Right Work head selection 8 + 右机头选择8 + + + + Right Work head selection 9 + 右机头选择9 + + + + Right Work head selection 10 + 右机头选择10 + + + + Right Work head selection 11 + 右机头选择11 + + + + Right Work head selection 12 + 右机头选择12 + + + + Right Work head selection 13 + 右机头选择13 + + + + Right Work head selection 14 + 右机头选择14 + + + + Right Work head selection 15 + 右机头选择15 + + + + Right Work head selection 16 + 右机头选择16 + + + + Right Work head selection 17 + 右机头选择17 + + + + Right Work head selection 18 + 右机头选择18 + + + + Right Work head selection 19 + 右机头选择19 + + + + Right Work head selection 20 + 右机头选择20 + + + + Right Work head selection 21 + 右机头选择21 + + + + Right Work head selection 22 + 右机头选择22 + + + + Right Work head selection 23 + 右机头选择23 + + + + Right Work head selection 24 + 右机头选择24 + + + + Right Work head selection 25 + 右机头选择25 + + + + Right Work head selection 26 + 右机头选择26 + + + + Right Work head selection 27 + 右机头选择27 + + + + Right Work head selection 28 + 右机头选择28 + + + + Right Work head selection 29 + 右机头选择29 + + + + Right Work head selection 30 + 右机头选择30 + + + + Right Work head selection 31 + 右机头选择31 + + + + Right Work head selection 32 + 右机头选择32 + + + + Pulling motor pull position + 拉料电机拉料位置 + + + + Pull length + 拉料长度 + + + + Cutting length + 拉料长度 + + + + Shuttle refueling duration + 梭加油持续时长 + + + + Clamping force 1 + 夹线力度1 + + + + Clamping force 2 + 夹线力度2 + + + + Clamping force 3 + 夹线力度3 + + + + Clamping force 4 + 夹线力度4 + + + + Flat embroidery spindle working speed + 平绣主轴工作转速 + + + + Flat embroidery acceleration + 平绣加速度 + + + + Flat embroidery frame + 平绣动框方式 + + + + continuous: 0 ; intermittent: 1 + 连续:0;间歇:1 + + + + Flat embroidery acceleration mode + 平绣动框方式 xy间歇式脉冲无加减速 + + + + No acceleration or deceleration: 0 ; Xy sine acceleration and deceleration: 1 + 无加速或减速:0;Xy正弦加减速:1 + + + + Flat embroidery frame starting angle + 平绣动框起始角度 + + + + Flat embroidery frame continuous angle + 平绣动框持续角度 + + + + jump max speed + 跳针最大速度 + + + + Flat embroidery jump to offset Needles count + 平绣跳针变越框针数 + + + + Embroidery move max speed + 平绣动框最高速度 + + + + Punching spindle start slow speed + 冲孔主轴启动慢动转速 + + + + X working range + X工作范围 + + + + Y working range + Y工作范围 + + + + Punching rotation sensor angle + 冲孔旋转传感器角度 + + + + Maximum speed of punching frame + 冲孔动框最高速度 + + + + Embroidery trimming thread hooking delay + 绣花剪线勾线延迟 + + + + Length of punching needle changing to skipping needle + 冲孔运针变跳针长度 + + + + Punching vacuum cleaner start duration + 冲孔吸尘器启动持续时间 + + + + Punching vacuum cleaner start interval + 吸尘器启动间隔 + + + + Flat embroidery thread angle + 平绣扣线角度 + + + + Enable + 使能 + + + + Disable + 失能 + + + + JogP + 正转 + + + + JogN + 反转 + + + + Zero + 归零 + + + + Open + 打开 + + + + Close + 关闭 + + + + Start + 开始 + + + + Stop + 停止 + + + + Up + 上升 + + + + Down + 下降 + + + + Clamp + 夹紧 + + + + Relax + 放松 + + + + Out + 伸出 + + + + Back + 收回 + + + + X to move motor + X向移动电机 + + + + Y to move motor + Y向移动电机 + + + + Sewing needle spindle motor + 缝纫主轴电机 + + + + Needle motor + 针电机 + + + + Shuttle motor + 梭电机 + + + + Lift motor + 升降电机 + + + + ratating motor + 旋转电机 + + + + Up ratating motor + 上旋转电机 + + + + Down ratating motor + 下旋转电机 + + + + Punch main axis + 冲孔主轴电机 + + + + Embroider main axis motor + 绣花主轴电机 + + + + Punching color change motor + 冲孔换色电机 + + + + Punching color rorating motor + 冲孔旋转电机 + + + + Embroidered color rorating motor + 平绣换色电机 + + + + Embroider Needle Spindle + 平绣针主轴 + + + + Embroider shutle Spindle + 平绣梭主轴 + + + + loose thread + 松紧线 + + + + down cutter cut + 下剪刀剪线 + + + + fuel charging + 加油 + + + + light + 照明灯 + + + + mid press foot + 中压脚 + + + + kou blow thread + 扣底线 + + + + clip up thread + 夹面线 + + + + sewing head lift + 缝纫机头升降 + + + + sew blow + 缝纫吹气 + + + + cleaner + 吸尘器 + + + + Debug + 调试功能 + + + + WorkPara + 工作参数 + + + + OperatPara + 操作参数 + + + + DetectPara + 检测参数 + + + + embroider cutter + 平绣剪刀 + + + + embroider push + 平绣扣线 + + + + embroider clip thread + 平绣夹面线 + + + + embroider fuel charging + 平绣加油 + + + + embroider hook thread + 平绣勾线 + + + + embroider lock + 平绣锁头 + + + + All To Zero + 全部归零 + + + + Sew Anchor + 缝纫定定位点 + + + + Punch Anchor + 冲孔定定位点 + + + + Emb Start + 绣花定起始点 + + + + Emb Anchor + 绣花定定位点 + + + + Punch Spindle Jog + 冲孔主轴点动 + + + + Punch Spindle Test + 冲孔主轴研车 + + + + Set Offset + 定偏移点 + + + + Back Offset + 回偏移点 + + + + Sew Spindle Test + 缝纫主轴研车 + + + + Sew Start + 缝纫定起始点 + + + + Hook action extension + 勾线动作伸缩 + + + + Hook action opening and closing + 勾线动作开合 + + + + Back Start + 回起始点 + + + + To Work Point + 回工作点 + + + + To anchor Point + 回定位点 + + + + Back to nthreading point + 回穿线点 + + + + Check Frame + 边框检查 + + + + Forward And Back + 前进回退 + + + + Needle shuttle proofread + 针梭校对 + + + + Needle shuttle reset + 针梭复位 + + + + Needle reset + 针归零 + + + + Shuttle reset + 梭归零 + + + + Sew rotate up + 缝纫旋转+ + + + + Sew rotate down + 缝纫旋转- + + + + Single Punch + 单次冲孔 + + + + To Right Up + 去右上角 + + + + To Right Down + 去右下角 + + + + To Left Up + 去左上角 + + + + To Left Down + 去左下角 + + + + Scope Work + 定工作范围 + + + + Punch Stop Lower + 冲头停下位 + + + + Sew Head Up Dn + 缝纫机头升降 + + + + Sew Spindle Jog + 缝纫主轴点动 + + + + Sew Hook Position + 缝纫主轴去勾线位 + + + + Rotate nproofreading + 缝纫旋转校对 + + + + Punch Start + 冲孔定起始点 + + + + Switch Sew Head + 切换缝纫机头 + + + + Switch Punch Head + 切换冲孔机头 + + + + To Center point + 回中心点 + + + + Frame Zero + 框架归零 + + + + Sew trim + 缝纫剪线 + + + + Punching Change Tool + 冲孔换刀 + + + + Punch Rod Zero + 冲孔换杆归零 + + + + Rotate To Zero + 冲孔旋转去零位 + + + + Emb spindle + 平绣主轴研车 + + + + Emb Hook Position + 平绣主轴去勾线位 + + + + Emb jog + 平绣点动 + + + + Emb thread cut + 平绣剪线 + + + + Emb change color + 平绣换色 + + + + Switch Emb Head + 切换平绣机头 + + + + Back shuttle pos + 回换梭位 + + + + SensorSign + 传感器信号 + + + + Action + 控制动作 + + + + HMIUpgrade + 界面升级 + + + + MCUpgrade + 主控升级 + + + + ParaImport + 参数导入 + + + + ParaExport + 参数导出 + + + + SoftwareSet + 软件设置 + + + + SoftPower + 软件授权 + + + + Network + 网络管理 + + + + NeedleSet + 针杆设置 + + + + TimeSet + 时间设置 + + + + ShortcutSet + 常用设置 + + + + Productnum + 生产统计 + + + + Version + 版本信息 + + + + CountReset + 底线计数复位 + + + + Root + 超级用户 + + + + Select + 花样选择 + + + + Para + 花样参数 + + + + Color + 花样色序 + + + + Import + 花样导入 + + + + Export + 花样导出 + + + + Delete + 花样删除 + + + + ActionSet + 动作设定 + + + + SpeedPara + 速度参数 + + + + LimitPara + 限位参数 + + + + CutLine + 剪线调试 + + + + PunchKnife + 冲刀调试 + + + + NeedleShuttle + 缝纫针梭 + + + + Start button + 启动按钮 + + + + Pause button + 暂停按钮 + + + + Jog button + 点动按钮 + + + + Air pressure protection input + 气压保护输入 + + + + Safety light curtains protection input + 安全光幕输入 + + + + X zero position + X零位 + + + + Y zero position + Y零位 + + + + X deceleration + X降速 + + + + Y deceleration + Y降速 + + + + X negative limit + X负限位 + + + + Y negative limit + Y负限位 + + + + X positive limit + X正限位 + + + + Y positive limit + Y正限位 + + + + Sewing on the machine head rotation zero position + 缝纫上机头旋转零位 + + + + Sewing under the machine head rotation zero position + 缝纫下机头旋转零位 + + + + Punching the rotary shaft at zero + 冲孔旋转轴零位 + + + + Sewing machine head lifting upper limit + 缝纫机头升降上限位 + + + + Lower lifting limit of sewing machine head + 缝纫机头升降下限位 + + + + Sewing spindle needle - parking space + 缝纫针主轴停车位 + + + + Sewing spindle needle - thread hooking position + 缝纫针主轴勾线位 + + + + Sewing shuttle parking space + 缝纫梭主轴停车位 + + + + Sewing rotary hook thread hook position + 缝纫梭主轴勾线位 + + + + Punching spindle zero position + 冲孔主轴零位 + + + + Flat needle spindle parking space + 平绣针主轴停车位 + + + + Flat embroidery needle spindle hook position + 平绣针主轴勾线位 + + + + Flat shuttle spindle parking space + 平绣梭主轴停车位 + + + + Flat embroidery shuttle spindle hook position + 平绣梭主轴勾线位 + + + + Flat embroidery under the scissors back in place + 平绣下剪刀回位 + + + + Sewing thread breakage detection + 缝纫断线检测 + + + + Sewing scissors return + 缝纫下剪刀回位 + + + + The small plate closes signal 1 + 小台板关闭信号1 + + + + The small plate closes signal 2 + 小台板关闭信号2 + + + + The shuttle is not at zero + 旋梭不在零位 + + + + Needle and shuttle is out of sync + 针梭不同步 + + + + Rotation is out of sync + 旋转不同步 + + + + The needle is not at the high position + 机针不在高位 + + + + Head lift timeout + 机头升降超时 + + + + The head is not in the safty area + 机头不在安全区域 + + + + Punching head main shaft is not at zero + 冲孔主轴不在零位 + + + + Rotating positive limit + 正向旋转限位 + + + + Rotating negative limit + 反向旋转限位 + + + + Foot position error + 压脚位置错误 + + + + Foot moto's position is out of range + 压脚电机位置越界 + + + + The head lift moto's position is out of range + 机头升降位置越界 + + + + Rotation position out of range + 旋转位置越界 + + + + Head lift upper limit + 机头升降上限位 + + + + Head lift down limit + 机头升降下限位 + + + + Emb main shaft is not at zero + 平绣主轴不在零位 + + + + Punching color change timeout + 冲孔换色超时 + + + + Embroidered color change timeout + 平绣换色超时 + + + + Emb needle bar's position error + 平绣针位错误 + + + + Punch needle bar's position error + 冲孔针位错误 + + + + Err emb hook not zero + 平绣勾刀未回位 + + + + Err emb cut not zero + 平绣剪刀未回位 + + + + PunchSewMachine + + + HMI Configuration + 界面配置 + + + + Interface debug mode + 界面进入调试模式 + + + + Delete configure file + 删除配置文件 + + + + Import CSV file + 导入csv文件 + + + + Delete CSV file + 删除csv文件 + + + + Reset CSV file + 重置安装调试进度 + + + + Machine parameters + 机器参数 + + + + Work parameters + 工作参数 + + + + Jump stitch takes effect + 跳针生效 + + + + InternetofThings configuration + 物联网配置 + + + + Flip style + 翻转式样 + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + Horizontal flip style + 水平翻转式样 + + + + vertical flip style + 垂直翻转式样 + + + + + No:0;Yes:1 + No:0;Yes:1; + 否:0;是:1 + + + + Rotation angle + 旋转角度 + + + + Number of punching heads + 冲孔机头个数 + + + + Number of needles per head for punching + 冲孔每头冲针个数 + + + + X axis configuration + X轴配置 + + + + + + + + + + + + + + + No:0;Have:1 + 无:0;有:1 + + + + X axis motor drive selection + X轴电机驱动选择 + + + + + Single motor:0;Double motor:1 + 单驱动:0;双驱动:1 + + + + X axis coordinate system selection + X轴坐标系统选择 + + + + + Positive:0;Reverse:1 + 正:0;反:1 + + + + X axis moving object selection + X轴移动对象选择 + + + + + Head:0;Frame:1 + 机头:0;框:1 + + + + X axis zero sensor selection + X轴零位传感器选择 + + + + X axis speed reduction sensor selection + X轴降速传感器选择 + + + + X axis positive limit sensor selection + X轴正限位传感器选择 + + + + X axis negative limit sensor selection + X轴正限位传感器选择 + + + + X axis zero direction selection + X轴零位方向选择 + + + + + Negative:0;Positive:1 + 负方向:0;正方向:1 + + + + X axis sensor function selection + X轴传感器作用选择 + + + + + Zero separate:0;Zero and speed reduction:1 + 零分离:0;零点和减速:1 + + + + Y axis configuration + Y轴配置 + + + + Y axis motor drive selection + Y轴电机驱动选择 + + + + Y axis coordinate system selection + Y轴坐标系统选择 + + + + Y axis moving object selection + Y轴移动对象选择 + + + + Y axis zero sensor selection + Y轴零位传感器选择 + + + + Y axis speed reduction sensor selection + Y轴降速传感器选择 + + + + Y axis positive limit sensor selection + Y轴正限位传感器 + + + + Y axis negative limit sensor selection + Y轴负限位传感器 + + + + Y axis zero direction selection + Y轴零位方向选择 + + + + Y axis sensor function selection + Y轴传感器作用选择 + + + + Sewing spindle configuration + 缝纫主轴配置 + + + + Needle shuttle configuration + 针梭配置 + + + + Needle shuttle:0;Needle shuttle separation:1 + 针穿梭:0;针梭分离:1 + + + + Lift motor configuration + 升降电机配置 + + + + Lower scissors drive selection + 下剪刀驱动装置选择 + + + + No lower trimming device:0;Cylinder:1;AC motor:2;Stepper motor:3;Electromagnet:4 + 无下剪线装置:0;气缸:1;交流电机:2;步进电机:3;电磁铁:4 + + + + Lower trimming mode selection + 下剪线模式选择 + + + + Static trimming:0;Dynamic trimming:1;Cam trimming:2;Cam respectively trimming:3 + 静态剪线:0;动态剪线:1;凸轮剪线:2;凸轮分别剪线:3 + + + + Upper scissors drive selection + 上剪刀驱动装置选择 + + + + No Upper trimming Device:0;Cylinder:1 + 无上剪线装置:0;气缸:1 + + + + Upper thread break detection device selection + 面线断线检测装置选择 + + + + No:0;Pick wire spring:1;Electronic isolation:2 + 无:0;拣选钢丝弹簧:1;电子隔离开关:2 + + + + Wire break detection mode selection + 断线检测模式选择 + + + + Direct detection:0;EXBboard detection:1 + 直接检测:0;外围板检测:1 + + + + Hook line device selection + 勾面线装置选择 + + + + No hook line device:0;Cylinder:1;Electromagnet:2 + 无勾线装置:0;气缸:1;电磁铁:2 + + + + Loose line device selection + 松面线装置选择 + + + + No loose wire device:0;Cylinder:1;Electromagnet:2 + 无松线装置:0;气缸:1个;电磁铁:2 + + + + Ramen line device selection + 拉面线装置选择 + + + + No ramen line device:0;Cylinder:1;Electromagnet:2 + 无拉面线装置:0;气缸:1;电磁铁:2 + + + + Bottom line device selection + 扣底线装置选择 + + + + No bottom line device:0;Cylinder:1;Electromagnet:2 + 无底线装置:0;气缸:1;电磁铁:2 + + + + The hook faces the direction + 旋梭面对方向 + + + + Forward:0;Left:1;Right:2;Up:3 + 正:0;左:1;右:2;下:3 + + + + X box sensor coordinates + X框传感器坐标 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mm + mm + + + + Delete pattern configuration + 删除花样配置 + + + + Continuous motion frame compensation + 连续动框补偿 + + + + Needle tip compensation + 针尖补偿 + + + + Length of the stitch that needs to be split + 需要分割的针步长度 + + + + Y box sensor coordinates + Y框传感器坐标 + + + + Spindle parking sensor angle + 主轴停车传感器角度 + + + + Lift sensor coordinates + 升降传感器坐标 + + + + Presser foot sensor coordinates + 压脚传感器坐标 + + + + Spindle hook line sensor angle unit + 主轴勾线传感器角度 + + + + Punch parking angle + 冲头停车角度 + + + + Spindle jog parking angle + 主轴点动停车角度 + + + + X movable area negative boundary + X可移动区域负边界 + + + + X movable area positive boundary + X可移动区域正边界 + + + + Y movable area negative boundary + Y可移动区域负边界 + + + + Y movable area positive boundary + Y可移动区域正边界 + + + + Head lift can move the upper boundary + 机头升降可移动上边界 + + + + Head lift can move the lower boundary + 机头升降可移动下边界 + + + + Punching head offset X + 冲孔机头偏移X + + + + Punching head offset Y + 冲孔机头偏移Y + + + + X Sewing area Negative boundary + x可缝纫区域负边界 + + + + X Sewing area Positive margin + x可缝纫区域正边界 + + + + Y Sewing area Negative boundary + y可缝纫区域负边界 + + + + Y Sewing area Positive margin + y可缝纫区域正边界 + + + + X Can be perforated region Negative boundary + x可冲孔区域负边界 + + + + X Can be perforated region Positive margin + x可冲孔区域正边界 + + + + Y Can be perforated region Negative boundary + y可冲孔区域负边界 + + + + Y Can be perforated region Positive margin + y可冲孔区域正边界 + + + + Sewing right head offset X + 缝纫右机头偏移X + + + + Sewing right head offset Y + 缝纫右机头偏移Y + + + + XY start stop speed + xy启动停止速度 + + + + + + + + + + + + + + + mm/s + mm/s + + + + XY zero running speed + xy归零运行速度 + + + + XY Idling speed + xy空走运行速度 + + + + XY walking acceleration + xy行走加速度 + + + + + + + mm/s2 + mm/s2 + + + + XY brake acceleration + xy刹车加速度 + + + + XY manual movement speed 1 + xy手动移动速度1 + + + + XY manual movement speed 2 + xy手动移动速度2 + + + + XY manual movement speed 3 + xy手动移动速度3 + + + + XY maximum moving speed + xy最高移动速度 + + + + Spindle start stop speed + 主轴启动停止转速 + + + + + + + + + + + + + + + + + + + + + + + + + + r/min + r/min + + + + Spindle zero return speed + 主轴归零转速 + + + + Spindle running speed + 主轴运转转速 + + + + Spindle running acceleration + 主轴运转加速度 + + + + + + r/ss + r/ss + + + + Spindle brakes acceleration + 主轴刹车加速度 + + + + sewing maximum speed + 主轴缝纫最高转速 + + + + Head lift start end speed + 机头升降起停速度 + + + + Head lift and zero speed + 机头升降归零速度 + + + + Head lift walk speed + 机头升降行走速度 + + + + Head lift acceleration + 机头升降行走加速度 + + + + Head movements brake acceleration + 机头升降刹车加速度 + + + + Spindle zero compensation angle + 主轴归零补偿角度 + + + + X compensation angle + X轴归零补偿 + + + + Y compensation angle + Y轴归零补偿 + + + + X gap compensation + X间隙补偿 + + + + Y gap compensation + Y间隙补偿 + + + + Brush offset X + 画笔偏移X + + + + Brush offset Y + 画笔偏移Y + + + + Encoder coefficient molecule + 进料编码器系数分子 + + + + Encoder coefficient denominator + 进料编码器系数分母 + + + + sewing work speed + 主轴缝纫工作转速 + + + + Spindle Cut line speed + 主轴剪线转速 + + + + Spindle Back needle speed + 主轴回针转速 + + + + Spindle start slow speed + 主轴启动慢动转速 + + + + Reverse equivalent spindle speed + 倒车等效主轴转速 + + + + Sewing moving frame + 缝纫动框方式 + + + + Continuous:0;Intermittent:1 + 连续:0;间歇式:1 + + + + Sewing acceleration and deceleration mode + 缝纫加减速方式 + + + + No acceleration or deceleration:0;Xy sine acceleration and deceleration:1 + 无加速或减速:0;Xy正弦加速度和减速度:1 + + + + Sewing machine head rotating manner + 缝纫机头旋转方式 + + + + Continuous rotation:0;Xy intermittent rotation:1 + 连续旋转:0;Xy间歇旋转:1 + + + + Sewing head deceleration mode + 缝纫机头加减速方式 + + + + No acceleration or deceleration:0;Intermittent acceleration and deceleration:1 + 无加速或减速:0;间歇加减速:1 + + + + Sewing movable frame starting angle + 缝纫动框起始角度 + + + + Sewing movable frame duration angle + 缝纫动框持续角度 + + + + Start low speed needls + 起针慢动针数 + + + + + + + + + + Needles + + + + + Needle action loose line allowed + 起针动作松线允许 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Not allow:0;Allowed:1 + 不允许:0;允许:1 + + + + Needle action top line allowed + 起针动作松线允许 + + + + Needle action clamp line allowed + 起针动作夹线允许 0 + + + + Allow to embroider line allowed + 绣花起针夹线允许 + + + + Cut lines allow + 剪线允许 + + + + Do not trim: 0;Automatic thread trim:1;Data trim:2 + 不剪线:0;自动剪线:1;数据剪线:2 + + + + Trimming line angle + 剪线分线角度 + + + + Trimming completion angle + 剪线完成角度 + + + + Action loosening when thread trimming + 剪线时动作松线允许 + + + + Action wire pull when thread trimming + 剪线时动作拉线允许 + + + + Action clip line allows when trimming + 剪线时动作夹线允许 + + + + The action of lifting the presser foot during thread cutting is allowed + 剪线时动作提升压脚允许 + + + + The action of lifting the machine head during thread cutting allows for thread cutting + 剪线时动作提升机头剪线允许 + + + + The action of lifting the machine head during thread cutting allows for thread clamping + 剪线时动作提升机头夹线允许 + + + + When cutting the thread, the action is allowed to hook the thread under the pressure foot + 剪线时动作在压脚下勾线允许 + + + + Allowing for needle withdrawal during thread cutting + 剪线时动作退针允许 + + + + Action during thread cutting allows for thread loosening during thread hooking + 剪线时动作勾线时松线允许 + + + + During thread cutting, the action is allowed to lift the machine head after thread cutting + 剪线时动作剪线后提升机头允许 + + + + Number of broken wires + 断线检测针数 + + + + Broken line detection spindle angle + 断线检测主轴角度 + + + + Change bobbin Reminder function + 换梭芯提醒功能 + + + + Not:0;Delay reminder by length:1;Count by number of slices:2;Immediately reminder by length:3 + 未启用:0;按长度划分的延迟提醒:1;按切片数计数:2;按长度立即提醒:3 + + + + Bottom line length + 底线长度 + + + + Bottom line correction per stitch + 每针底线修正量 + + + + Number of shuttles + 换梭片数计数 + + + + + times + + + + + Refueling method selection + 加油方式选择 + + + + No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3 + 不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + + + + Refueling needles interval + 加油针数间隔 + + + + Refueling time interval + 加油时间间隔 + + + + + + + + + + s + + + + + Refueling duration + 加油持续时长 + + + + Parking position selection after completion + 完成后停车位置选择 + + + + Current:0;Starting:1;Anchor:2;Feeding:3;Offset:4 + 当前点:0;起始点:1;定位点:2;上料点:3;偏移点:4 + + + + Offset point coordinate valid flag + 偏移点坐标有效标志 + + + + + Invalid:0;X is valid:1;Y is valid:2;XY is valid:3 + 无效:0;X有效:1;Y有效:2;XY同时有效:3 + + + + Offset point coordinate X + 偏移点坐标X + + + + Offset point coordinate Y + 偏移点坐标Y + + + + Threading point coordinate effective mark + 穿线点坐标有效标志 + + + + Threading point coordinates X + 穿线点坐标X + + + + Threading point coordinates Y + 穿线点坐标Y + + + + Machine head low position + 机头升降低位高度 + + + + Machine head heigh position + 机头升降高位高度 + + + + Production preset + 产量预设 + + + + Illumination brightness + 照明亮度 + + + + Sewing acceleration + 缝纫加速度 + + + + Trimming frame displacement + 剪线动框位移 + + + + Sewing blow allowed + 缝纫吹气允许 + + + + Punching blow allowed + 冲孔吹气允许 + + + + Vacuum cleaner off delay + 吸尘器关闭延时 + + + + Punching spindle speed + 冲孔主轴转速 + + + + Punching acceleration + 冲孔加速度 + + + + Punching movable frame mode + 冲孔动框方式 + + + + AContinuous:0;BIntermittent:1 + 连续式:0;间歇式:1 + + + + Punching acceleration and deceleration mode + 冲孔加减速方式 + + + + No acceleration or deceleration:0;XY sine acceleration and deceleration:1 + 无加速或减速:0;XY正弦加速度和减速度:1 + + + + Punching frame starting angle + 冲孔动框起始角度 + + + + Punching frame continuous angle + 冲孔动框持续角度 + + + + Sewing move head up down + 缝纫间越框机头升降 + + + + Punching move head up down + 冲孔间越框机头升降 + + + + Moving basket Loose line + 移框松线允许 + + + + Moving basket Clamp line + 移框夹线允许 + + + + Software limit XY move allowed + 软件限位XY移动允许 + + + + Software limit sewing head lifting allowed + 软件限位缝纫头升降允许 + + + + Software limit punch head lifting allowed + 软件限位冲孔头升降允许 + + + + Software limit cutter head lift allowed + 软件限位裁刀机头升降允许 + + + + Software limit Punch drop allowed + 软件限位冲孔落杆限制允许 + + + + Software limit embroidery falling pole allowed + 软件限位绣花落杆限制允许 + + + + Number of Facial line hook + 面线勾线针数 + + + + Trimming frame direction + 剪线动框方向 + + + + Stop:0;Left:1;Forward:2;Right:3;Backward:4 + 禁止移动:0;左:1;前:2;右:3;后:4 + + + + Spindle corner speed + 主轴拐角转速 + + + + Minimum speed deviation angle + 降速最小偏差角度 + + + + Advanced dropout number + 提前降速针数 + + + + Delay speed number + 延迟提速针数 + + + + Working permission of sewing machine head + 缝纫机头工作允许 + + + + Work permit of punch head + 冲孔机头工作允许 + + + + Embroidery machine head work permit + 绣花机头工作允许 + + + + Auto Zero after power on + 开机自动归零 + + + + Color change start method + 换色启动方式 + + + + Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2 + 自动换色,自动启动:0;自动换色,手动启动:1;手动换色,手动启动:2 + + + + X frame commutation compensation + X绣框换向补偿 + + + + Y frame commutation compensation + Y绣框换向补偿 + + + + Punching jump stitches to change the number of stitches beyond the frame + 冲孔跳针变越框针数 + + + + Punching jog mode + 冲孔点动模式 + + + + Lock rotate:0;rotate Lock:1 + 先锁头,再旋转:0;先旋转,再锁头:1 + + + + Reverse operation mode + 倒车工作模式 + + + + normal:0;click:1;continue click:2 + 普通模式:0;点动模式:1;持续点动模式:2 + + + + Special needle choose + 特殊针位选择 + + + + nothing:0;one:1;two:2;three:3;four:4;five:5;six:6;seven:7;eight:8;nine:9 + 无:0;针位1:1;针位2:2;针位3:3;针位4:4;针位5:5;针位6:6;针位7:7;针位8:8;针位9:9 + + + + Special needle function + 特殊针位功能 + + + + Carved hole:0;paint brush:1 + 雕孔:0;画笔:1 + + + + Vacuum cleaner start delay + 吸尘器启动延时 + + + + Drawing offset value + 拉料偏移值 + + + + Color change speed + 换色速度 + + + + first head + 第一个机头 + + + + second head + 第二个机头 + + + + Secure input light curtain allows + 安全输入光幕允许 + + + + Safety input pressure allowed + 安全输入气压允许 + + + + Safe input power-on signal allowed + 安全输入上电信号允许 + + + + Safe input emergency door allowed + 安全输入安全门允许 + + + + Stitch offset allows + 线迹偏移允许 + + + + Loop work allowed + 循环工作允许 + + + + Shuttle refueling duration + 梭加油持续时长 + + + + Center point coordinate X + 中心点坐标X + + + + Center point coordinate Y + 中心点坐标Y + + + + Sewing spindle needle shuttle single sensor + 缝纫主轴针梭单传感器 + + + + Dual Sensor:0;Single sensor:1 + 双传感器:0;单传感器:1 + + + + Punching spindle start slow speed + 冲孔主轴启动慢动转速 + + + + Sewing speed 1 + 缝纫运行速度1 + + + + Sewing speed 2 + 缝纫运行速度2 + + + + Sewing speed 3 + 缝纫运行速度3 + + + + X working range + X工作范围 + + + + Y working range + Y工作范围 + + + + Maximum speed of punching frame + 冲孔动框最高速度 + + + + Replace the punch count value + 更换冲头计数值 + + + + Length of punching needle changing to skipping needle + 冲孔运针变跳针长度 + + + + Punching vacuum cleaner start duration + 冲孔吸尘器启动持续时间 + + + + Punching vacuum cleaner start interval + 吸尘器启动间隔 + + + + Punching spindle zeroing compensation + 冲孔主轴归零补偿 + + + + Punching color change spacing + 冲孔换色间距 + + + + speed limit 4-5mm + 冲孔运行速度限制 4-5mm + + + + speed limit 5-6mm + 冲孔运行速度限制 5-6mm + + + + speed limit 6-7mm + 冲孔运行速度限制 6-7mm + + + + speed limit 7-8mm + 冲孔运行速度限制 7-8mm + + + + speed limit 8-9mm + 冲孔运行速度限制 8-9mm + + + + speed limit 9-14mm + 冲孔运行速度限制 9-14mm + + + + speed limit 14+mm + 冲孔运行速度限制 14+mm + + + + Enable + 使能 + + + + Disable + 失能 + + + + JogP + 正转 + + + + JogN + 反转 + + + + Zero + 归零 + + + + Open + 打开 + + + + Close + 关闭 + + + + Start + 开始 + + + + Stop + 停止 + + + + Up + 上升 + + + + Down + 下降 + + + + Clamp + 夹紧 + + + + Relax + 放松 + + + + Out + 伸出 + + + + Back + 收回 + + + + X to move motor + X向移动电机 + + + + Y to move motor + Y向移动电机 + + + + Sewing 1 needle spindle motor + 缝纫1针梭电机(主轴) + + + + Sewing 1 needle motor + 缝纫1针电机 + + + + Sewing 1 shuttle motor + 缝纫1梭电机 + + + + Punching 1 spindle + 冲孔1主轴 + + + + Punching 2 spindle + 冲孔2主轴 + + + + Sew spindle 2 Motor + 缝纫2针梭电机 + + + + Sew shuttle motor 2 + 缝纫梭电机2 + + + + Sew needle motor 2 + 缝纫针电机2 + + + + Punching color changing motor + 冲孔换色电机 + + + + Punching color change motor 2 + 冲孔换色电机2 + + + + Sewing 1 cut + 缝纫1下剪刀剪线 + + + + Middle 1 foot + 缝纫1中压脚 + + + + Head 1 elastic thread 1 + 机头1松紧线1 + + + + Head 1 elastic thread 2 + 机头1松紧线2 + + + + Bobbin 1 thread + 缝纫1扣底线 + + + + Clamp 1 line + 缝纫1夹面线 + + + + Hook 1 stretch + 缝纫1勾线-伸缩 + + + + Line 1 hook + 缝纫1勾线-开合 + + + + Sewing 1 oiling + 缝纫1加油 + + + + Sewing 1 head lifting + 缝纫1机头升降 + + + + Scissors 2 cut + 缝纫2下剪刀剪线 + + + + Middle 2 foot + 缝纫2中压脚 + + + + Bobbin 2 thread + 缝纫2扣底线 + + + + Clamp 2 line + 缝纫2夹面线 + + + + Head 2 elastic thread 1 + 机头2松紧线1 + + + + Head 2 elastic thread 2 + 机头2松紧线2 + + + + Hook 2 stretch + 缝纫2勾线-伸缩 + + + + Line 2 hook + 缝纫2勾线-开合 + + + + Sewing 2 oiling + 缝纫2加油 + + + + Sewing 2 head lifting + 缝纫2机头升降 + + + + Vacum cleaner + 吸尘器 + + + + All To Zero + 全部归零 + + + + Punch Spindle Jog + 冲孔主轴点动 + + + + Head 1 trim + 机头1剪线 + + + + Head 2 trim + 机头2剪线 + + + + Punch Spindle Test + 冲孔主轴研车 + + + + Set Offset + 定偏移点 + + + + Back Offset + 回偏移点 + + + + Sew Spindle Test + 缝纫主轴研车 + + + + Sew Anchor + Sew Start + 缝纫定起始点 + + + + Back Anchor + Back Start + 回起始点 + + + + To Work Point + 回工作点 + + + + Check Frame + 边框检查 + + + + Punch Change Tool + 手动换刀 + + + + Forward And Back + 前进回退 + + + + Needle shuttle proofread + 针梭校对 + + + + Single Punch + 单次冲孔 + + + + To Right Up + 去右上角 + + + + To Right Down + 去右下角 + + + + To Left Up + 去左上角 + + + + To Left Down + 去左下角 + + + + Scope Work + 定工作范围 + + + + Punch Stop Lower + 冲头停下位 + + + + Sew Head Up Dn + 缝纫机头升降 + + + + Sew Spindle Jog + 缝纫主轴点动 + + + + Sew Hook Position + 缝纫主轴去勾线位 + + + + Punch Anchor + Punch Start + 冲孔定起始点 + + + + Switch Sew Head + 切换缝纫机头 + + + + Switch Punch Head + 切换冲孔机头 + + + + To Center point + 回中心点 + + + + SensorSign + 传感器信号 + + + + Action + 控制动作 + + + + HMIUpgrade + 界面升级 + + + + MCUpgrade + 主控升级 + + + + ParaImport + 参数导入 + + + + ParaExport + 参数导出 + + + + SoftwareSet + 软件设置 + + + + SoftPower + 软件授权 + + + + Network + 网络管理 + + + + WIFI + WIFI管理 + + + + NeedleSet + 针杆设置 + + + + TimeSet + 时间设置 + + + + ShortcutSet + 常用设置 + + + + Productnum + 生产统计 + + + + Version + 版本信息 + + + + CountReset + 底线计数复位 + + + + Root + 超级用户 + + + + Select + 花样选择 + + + + Para + 花样参数 + + + + Color + 花样色序 + + + + Import + 花样导入 + + + + Export + 花样导出 + + + + Delete + 花样删除 + + + + OperatPara + 操作参数 + + + + ActionSet + 动作设定 + + + + SpeedPara + 速度参数 + + + + LimitPara + 限位参数 + + + + MCPara + 机器参数 + + + + Start button 1 + 启动按钮1 + + + + Pause button 1 + 暂停按钮1 + + + + Jog button 1 + 点动按钮1 + + + + Air pressure protection input + 气压保护输入 + + + + X zero position + X零位 + + + + Y zero position + Y零位 + + + + X deceleration + X降速 + + + + Y deceleration + Y降速 + + + + X negative limit + X负限位 + + + + Y negative limit + Y负限位 + + + + X positive limit + X正限位 + + + + Y positive limit + Y正限位 + + + + Sewing machine head 1 lifting upper limit + 缝纫机头1升降上限位 + + + + Lower lifting limit of sewing machine head 1 + 缝纫机头1升降下限位 + + + + Sewing spindle 1 needle - parking space + 缝纫主轴1针-停车位 + + + + Sewing spindle 1 needle - thread hooking position + 缝纫主轴1针-勾线位 + + + + Sewing shuttle 1- parking space + 缝纫旋梭1-停车位 + + + + Sewing rotary hook 1-thread hook position + 缝纫旋梭1-勾线位 + + + + Punching spindle 1 zero position + 冲孔主轴1零位 + + + + Punching spindle 1 position detection + 冲孔主轴1位置检测 + + + + Punching 1 color change motor - zero position + 冲孔1换色电机-零位 + + + + Punching 1 color change motor - negative limit + 冲孔1换色电机-负限位 + + + + Punching 1 color change motor - positive limit + 冲孔1换色电机-正限位 + + + + Sewing 1 thread breakage detection + 缝纫1断线检测 + + + + Sewing 1 scissors return + 缝纫1下剪刀回位 + + + + Safety input + 安全输入 + + + + Punching 2 color change motor - zero position + 冲孔2换色电机-零位 + + + + Punching 2 color change motor - negative limit + 冲孔2换色电机-负限位 + + + + Punching 2 color change motor - positive limit + 冲孔2换色电机-正限位 + + + + Sewing machine head 2 lifting upper limit + 缝纫机头2升降上限位 + + + + Lower lifting limit of sewing machine head 2 + 缝纫机头2升降下限位 + + + + Sewing spindle 2 needle - parking space + 缝纫主轴2针-停车位 + + + + Sewing spindle 2 needle - thread hooking position + 缝纫主轴2针-勾线位 + + + + Sewing shuttle 2- parking space + 缝纫旋梭2-停车位 + + + + Sewing rotary hook 2-thread hook position + 缝纫旋梭2-勾线位 + + + + Punching spindle 2 zero position + 冲孔主轴2零位 + + + + Punching spindle 2 position detection + 冲孔主轴2位置检测 + + + + Sewing 2 thread breakage detection + 缝纫2断线检测 + + + + Sewing 2 scissors return + 缝纫2下剪刀回位 + + + + Small platen not closed + 小台板未关闭 + + + + QObject + + + + Insufficient air pressure + (0x0002)Insufficient air pressure + 气压不足 + + + + safe area error + (0x0003)safe area error + 安全区域介入 + + + + Driver alarm + (0x0005)Driver alarm + 驱动器报警 + + + + Fill data error + (0x0006)Fill data error + 填充数据错误 + + + + Not allowed to work + (0x0007)Not allowed to work + 不允许工作状态 + + + + Control error + (0x0008)Control error + 控制错误 + + + + Motion control chip version error + (0x0009)Motion control chip version error + 运动控制芯片版本错误 + + + + Waiting for button to lift timeout + (0x000A)Waiting for button to lift timeout + 等待按钮抬起超时 + + + + FPGA Reset + (0x000B)FPGA Reset + FPGA复位 + + + + Peripheral Device not ready + (0x000C)Peripheral Device not ready + 外设未就绪 + + + + Transmission data error + (0x000D)Transmission data error + 传输数据错误 + + + + Program version error + (0x000E)Program version error + 程序版本错误 + + + + Complete output + (0x000F)Complete output + 完成产量 + + + + Positive limit + (0x0010)Positive limit + 正向限位 + + + + Negative limit + (0x0011)Negative limit + 反向限位 + + + + Motion alarm + (0x0012)Motion alarm + 运动报警 + + + + Motion limit + (0x0013)Motion limit + 运动限位 + + + + Emergency stop + (0x0014)Emergency stop + 运动急停 + + + + Motion parameters error + (0x0015)Motion parameters error + 运动参数错误 + + + + Machine parameters error + (0x0016)Machine parameters error + 机器参数错误 + + + + Input parameters error + (0x0017)Input parameters error + 输入参数错误 + + + + Not in work status error + (0x001A)Not in work status error + 不能工作状态 + + + + Prohibited frame moving state + (0x001B)Prohibited frame moving state + 禁止移框状态 + + + + Zero success + (0x001F)Zero success + 归零成功 + + + + Return to zero error + (0x0020)Return to zero error + 归零错误 + + + + Target position out of bounds + (0x0022)Target position out of bounds + 目标位置越界 + + + + X Positive limit + (0x0023)X Positive limit + X正向限位 + + + + X Negative limit + (0x0024)X Negative limit + X反向限位 + + + + Y Positive limit + (0x0025)Y Positive limit + Y正向限位 + + + + Y Negative limit + (0x0026)Y Negative limit + Y反向限位 + + + + Machine is in manual state + (0x0028)Machine is in manual state + 机器处于手动状态 + + + + Machine key off + (0x0029)Machine key off + 机器钥匙开关关闭 + + + + Light curtain 1 intervention + 光幕1介入 + + + + Light curtain 2 intervention + 光幕2介入 + + + + None data + (0x0040)None data + 无数据 + + + + Data error + (0x0041)Data error + 数据错误 + + + + Graphics out of range + (0x0042)Graphics out of range + 图形超出范围 + + + + Spindle is not in zero position + (0x0050)Spindle is not in zero position + 主轴不在零位 + + + + Scissors are not in position + (0x0054)Scissors are not in position + 剪刀不在回位 + + + + Thread is broken + (0x0058)Thread is broken + 断线 + + + + Bottom thread disconnected + (0x0059)Bottom thread disconnected + 底线断线 + + + + Execution command timed out + (0x005D)Execution command timed out + 执行命令超时 + + + + Node error + 节点错误 + + + + Expiration of use (Please contact the manufacturer) + Expiration of use /n Solution: Please contact the manufacturer + 使用时限已到(请联系厂家) + + + + XYCoordinate system error (Please reset to zero again) + XYCoordinate system error /n Solution: Please reset to zero again + XY坐标系统错误(请重新归零) + + + + Cutting down lifting timeout (please check lifting sensor) + 裁切下升降超时(请检查升降传感器) + + + + Bus Error (Please check the communication connection) + Bus Error /n Solution: Please check the communication connection + 总线错误(请检查通讯连接) + + + + CAN communication timeout + CAN通讯超时 + + + + Change the bobbin + (0x00F0)Change the bobbin + 更换梭芯 + + + + Replace bobbin A + (0x00F1)Replace bobbin A + 更换梭芯A + + + + Replace bobbin B + (0x00F2)Replace bobbin B + 更换梭芯B + + + + The machine is in the state of replacing the bobbin + (0x00F3)The machine is in the state of replacing the bobbin + 机器处于更换梭芯状态 + + + + Machine is in auto state + (0x0033)Machine is in auto state + 机器处于自动状态 + + + + Password set finished + (0x0300)Password set finished + 密码设置成功 + + + + Password set failed + (0x0301)Password set failed + 密码设置失败 + + + + Error reading headboard parameters + 读取机头板参数错误 + + + + Replace punch 1 + 更换冲头1 + + + + Replace punch 2 + 更换冲头2 + + + + Replace punch 3 + 更换冲头3 + + + + Replace punch 4 + 更换冲头4 + + + + Replace punch 5 + 更换冲头5 + + + + Replace punch 6 + 更换冲头6 + + + + Normal stop + (0x0100)Normal stop + 正常停止 + + + + Find zero success + (0x0101)Find zero success + 归零成功 + + + + work pause + (0x0102)work pause + 工作暂停 + + + + End of work + (0x0103)End of work + 工作结束 + + + + Work done + (0x0104)Work done + 工作完成 + + + + Complete production + (0x0105)Complete production + 完成产量 + + + + Execute success + (0x0106)Execute success + 执行成功 + + + + Execute false + (0x0107)Execute false + 执行失败 + + + + wait file + (0x0108)wait file + 等待文件 + + + + change the bobbin + (0x0109)change the bobbin + 更换梭芯 + + + + Execute finish + (0x010A)Execute finish + 执行完成 + + + + Execute runnibng + (0x010B)Execute runnibng + 执行过程中 + + + + Automatic soft limit setting completed + 自动定软限位完成 + + + + Please feed + 请上料 + + + + RotaComWidget + + + Form + + + + + RotaZero + 旋转归零 + 旋转归零 + + + + SingleP + 单次冲孔 + 单次冲孔 + + + + CTool + 换刀位 + 换刀位 + + + + Jog + 点动 + + + + ManualC + 手动换色 + 手动换色 + + + + ManualAction: + 手动操作: + 手动操作: + + + + Needel: + 冲孔这个: + 冲头: + + + + + + 1 + 1 + + + + + + 2 + 2 + + + + + + 3 + 3 + + + + + + 4 + 4 + + + + + + 5 + 5 + + + + + + 6 + 6 + + + + Set + 设置 + + + + CLose + 关闭 + + + + Com1Angel: + 补偿1角度: + 补偿1角度: + + + + + + + Neg + 反转 + 反转 + + + + + + + Enable + 使能 + 使能 + + + + + + + Zero + 归零 + 归零 + + + + + + + Disable + 使能 + 失能 + + + + + + + Pos + 正转 + 正转 + + + + PunchingSpindle1: + 冲孔主轴1: + 冲孔主轴1: + + + + PunchingSpindle2: + 冲孔主轴2: + 冲孔主轴2: + + + + PunRotaryMotor1: + 旋转电机1: + 旋转电机1: + + + + PunRotaryMotor2: + 旋转电机2: + 旋转电机2: + + + + debugging: + 调试: + + + + Com2Angel: + 补偿2角度: + 补偿2角度: + + + + Zero compensation angle + 归零补偿角度 + + + + Network error + 网络错误 + + + + No connection + 未连接 + + + + Rotate to zero + 旋转归零 + + + + + + + The machine is about to move, please pay attention to safety! + 机器即将运动,请注意安全! + + + + Single punch + 单次冲孔 + + + + Change tool position + 换刀位 + + + + Spindle jog + 主轴点动 + + + + SensorInputWidget + + + Form + + + + + + Sensor + 传感器信号 + + + + PageNums: 1/1 + + + + + pageNum: + 页数: + + + + SetWorkArea + + + Form + + + + + Prompt + 提示 + + + + X + + X + + + + + X - + X - + + + + Y + + Y + + + + + Y - + Y - + + + + SheetWidget + + + Form + + + + + PageNums: 0/0 + 页数:0/0 + + + + X + + + + + Sub title < Title + + + + + Sub title + + + + + PageNum: 0/0 + 页数: 0/0 + + + + pageNum: + 页数: + + + + Network error + 网络错误 + + + + No connection + 未连接 + + + + Frame angle + 动框角度 + + + + deg + + + + + Prompt + 提示 + + + + Whether to recover the default parameters for the frame angle? + 是否恢复为动框角度默认参数? + + + + SystemManageDialog + + + Dialog + + + + + PageNums: 1/1 + + + + + + Update + 升级 + + + + 192.168.2.196 + 192.168.2.196 + + + + StaticIP + 静态 + + + + DynamicIP + 动态 + + + + *Before setting the static IP, you need to first set the dynamic IP. After the dynamic IP is set, you need to return to this interface to continue setting the static IP + 设置静态IP前需要先设置动态IP,动态IP设置完成后需要返回此界面继续设置静态IP + 设置静态IP前需要先设置动态IP,动态IP设置完成后需要返回此界面继续设置静态IP + + + + pageNum: 0/0 + 页数: 0/0 + + + + pageNum: + 页数: + + + + Head board + 机头板 + + + + Do you want to clear the journal? + 是否清空日志文件? + + + + Do you want to export journal? + 是否导出日志文件? + + + + + + + Prompt + 提示 + + + + The upgrade needs to restart the program. Do you need to restart to upgrade? + 升级需要重新启动程序,是否重启进行升级? + + + + Do you want to clear the production statistics? + 是否清空生产统计? + + + + TemplateSewMachine + + + HMI Configuration + 界面配置 + + + + Delete configure file + 删除配置文件 + + + + Delete pattern configuration + 删除花样配置 + + + + Import CSV file + 导入csv文件 + + + + Delete CSV file + 删除csv文件 + + + + Reset CSV file + 重置安装调试进度 + + + + Machine parameters + 机器参数 + + + + Work parameters + 工作参数 + + + + InternetofThings configuration + 物联网配置 + + + + AnchorX + 定位点x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mm + mm + + + + AnchorY + 定位点y + + + + startX + 起始点x + + + + startrY + 起始点y + + + + Continuous motion frame compensation + 连续动框补偿 + + + + Needle tip compensation + 针尖补偿 + + + + Length of the stitch that needs to be split + 需要分割的针步长度 + + + + Flip style + 翻转式样 + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + Horizontal flip style + 水平翻转式样 + + + + + No:0;Yes:1 + 否:0;是:1 + + + + vertical flip style + 垂直翻转式样 + + + + Rotation angle + 旋转角度 + + + + Number of heads + 机头个数 + + + + sewing needles per head + 每头机针个数 + + + + emb needles per head + 平绣针数 + + + + punch needles per head + 冲孔针数 + + + + X axis configuration + X轴配置 + + + + + + + + + + + + + + + + + + + + + + + + + + + No:0;Have:1 + 无:0;有:1 + + + + X axis motor drive selection + X轴电机驱动选择 + + + + + + + Single motor:0;Double motor:1 + 单驱动:0;双驱动:1 + + + + X axis coordinate system selection + X轴坐标系统选择 + + + + + + + Positive:0;Reverse:1 + 正:0;反:1 + + + + X axis moving object selection + X轴移动对象选择 + + + + + + + Head:0;Frame:1 + 机头:0;框:1 + + + + X axis zero sensor selection + X轴零位传感器选择 + + + + X axis speed reduction sensor selection + X轴降速传感器选择 + + + + X axis positive limit sensor selection + X轴正限位传感器选择 + + + + X axis negative limit sensor selection + X轴负限位传感器选择 + + + + X axis zero direction selection + X轴零位方向选择 + + + + + + + Negative:0;Positive:1 + 负方向:0;正方向:1 + + + + X axis sensor function selection + X轴传感器作用选择 + + + + + + + Zero separate:0;Zero and speed reduction:1 + 零分离:0;零点和减速:1 + + + + Y axis configuration + Y轴配置 + + + + Y axis motor drive selection + Y轴电机驱动选择 + + + + Y axis coordinate system selection + Y轴坐标系统选择 + + + + Y axis moving object selection + Y轴移动对象选择 + + + + Y axis zero sensor selection + Y轴零位传感器选择 + + + + Y axis speed reduction sensor selection + Y轴降速传感器选择 + + + + Y axis positive limit sensor selection + Y轴正限位传感器 + + + + Y axis negative limit sensor selection + Y轴负限位传感器 + + + + Y axis zero direction selection + Y轴零位方向选择 + + + + Y axis sensor function selection + Y轴传感器作用选择 + + + + X2 axis configuration + X2轴配置 + + + + X2 axis motor drive selection + X2轴电机驱动选择 + + + + X2 axis coordinate system selection + X2轴坐标系统选择 + + + + X2 axis moving object selection + X2轴移动对象选择 + + + + X2 axis zero sensor selection + X2轴零位传感器选择 + + + + X2 axis speed reduction sensor selection + X2轴降速传感器选择 + + + + X2 axis positive limit sensor selection + X2轴正限位传感器选择 + + + + X2 axis negative limit sensor selection + X2轴负限位传感器选择 + + + + X2 axis zero direction selection + X2轴零位方向选择 + + + + X2 axis sensor function selection + X2轴传感器作用选择 + + + + Y2 axis configuration + Y2轴配置 + + + + Y2 axis motor drive selection + Y2轴电机驱动选择 + + + + Y2 axis coordinate system selection + Y2轴坐标系统选择 + + + + Y2 axis moving object selection + Y2轴移动对象选择 + + + + Y2 axis zero sensor selection + Y2轴零位传感器选择 + + + + Y2 axis speed reduction sensor selection + Y2轴降速传感器选择 + + + + Y2 axis positive limit sensor selection + Y2轴正限位传感器 + + + + Y2 axis negative limit sensor selection + Y2轴负限位传感器 + + + + Y2 axis zero direction selection + Y2轴零位方向选择 + + + + Y2 axis sensor function selection + Y2轴传感器作用选择 + + + + Sewing spindle configuration + 缝纫主轴配置 + + + + Needle shuttle configuration + 针梭配置 + + + + Needle shuttle:0;Needle shuttle separation:1 + 针穿梭:0;针梭分离:1 + + + + Lift motor configuration + 升降电机配置 + + + + Presser foot motor configuration + 压脚电机配置 + + + + Rotating motor configuration + 旋转电机配置 + + + + + + Rotary motor coordinate system + 旋转电机坐标系统选择 + + + + Single motor: 0 ; Double motor: 1 + 单电机:0;双电机:1 + + + + The coordinate system is positive: 0 ; Coordinate system is reverse: 1 + 坐标系为正:0;坐标系为负:1 + + + + Machine head: 0 ; box: 1 + 机头:0;框:1 + + + + Rotation limit + 旋转限制 选择 + + + + Unlimited: 0 ; limited: 1 + 有限制:0;无限制:1 + + + + Lower scissors drive selection + 下剪刀驱动装置选择 + + + + No lower trimming device:0;Cylinder:1;AC motor:2;Stepper motor:3;Electromagnet:4 + 无下剪线装置:0;气缸:1;交流电机:2;步进电机:3;电磁铁:4 + + + + Lower trimming mode selection + 下剪线模式选择 + + + + Static trimming:0;Dynamic trimming:1;Cam trimming:2;Cam respectively trimming:3 + 静态剪线:0;动态剪线:1;凸轮剪线:2;凸轮分别剪线:3 + + + + Upper scissors drive selection + 上剪刀驱动装置选择 + + + + No Upper trimming Device:0;Cylinder:1 + 无上剪线装置:0;气缸:1 + + + + Upper thread break detection device selection + 面线断线检测装置选择 + + + + No:0;Pick wire spring:1;Electronic isolation:2 + 无:0;拣选钢丝弹簧:1;电子隔离开关:2 + + + + Bottom line break detection device selection + 底线断线检测装置选择 + + + + No device: 0 ; Grating wheel: 1 ; Magnetic encoder: 2;Immediate alarm by length:3 + 无:0;光栅轮:1;磁编码器:2;按长度即时报警:3 + + + + Wire break detection mode selection + 断线检测模式选择 + + + + Direct detection:0;EXBboard detection:1 + 直接检测:0;外围板检测:1 + + + + Hook line device selection + 勾面线装置选择 + + + + No hook line device:0;Cylinder:1;Electromagnet:2 + 无勾线装置:0;气缸:1;电磁铁:2 + + + + Loose line device selection + 松面线装置选择 + + + + No loose wire device:0;Cylinder:1;Electromagnet:2 + 无松线装置:0;气缸:1个;电磁铁:2 + + + + Ramen line device selection + 拉面线装置选择 + + + + No ramen line device:0;Cylinder:1;Electromagnet:2 + 无拉面线装置:0;气缸:1;电磁铁:2 + + + + Bottom line device selection + 扣底线装置选择 + + + + No bottom line device:0;Cylinder:1;Electromagnet:2 + 无底线装置:0;气缸:1;电磁铁:2 + + + + Second loose line device selection + 第二松面线选择 + + + + No loose wire device: 0 ; cylinder: 1 ; Electromagnet: 2 + 无松线装置:0;气缸:1;电磁铁:2 + + + + Template recognition device + 模板识别装置 + + + + No identification device: 0 ; Bar code: 1 ; Coding hole: 2 + 无识别装置:0;条形码:1;编码孔:2 + + + + The hook faces the direction + 旋梭面对方向 + + + + Forward:0;Left:1;Right:2;Up:3 + 正:0;左:1;右:2;下:3 + + + + Template detecting device + 旋梭面对方向 + + + + No detection device: 0 ; Detect: 1 + 无检测装置:0;有检测装置:1 + + + + X box sensor coordinates + X框传感器坐标 + + + + Y box sensor coordinates + Y框传感器坐标 + + + + Spindle parking sensor angle + 主轴停车传感器角度 + + + + Presser foot sensor coordinates + 压脚传感器坐标 + + + + Rotation sensor angle + 旋转传感器角度 + + + + Spindle hook line sensor angle unit + 主轴勾线传感器角度 + + + + Punch parking angle + 冲头停车角度 + + + + Knife parking angle + 裁刀停车角度 + + + + X2 box sensor coordinates + X2框传感器坐标 + + + + Y2 box sensor coordinates + Y2框传感器坐标 + + + + Spindle jog parking angle + 主轴点动停车角度 + + + + Flat embroidery spindle parking angle + 平绣主轴停车角度 + + + + X movable area negative boundary + X可移动区域负边界 + + + + X movable area positive boundary + X可移动区域正边界 + + + + Y movable area negative boundary + Y可移动区域负边界 + + + + Y movable area positive boundary + Y可移动区域正边界 + + + + Presser foot lift can move the upper boundary + 压脚升降可移动上边界 + + + + Presser foot lift can move the lower boundary + 压脚升降可移动下边界 + + + + Motor presser pulse equivalent molecule + 电机压脚脉冲当量分子 + + + + Motor presser pulse equivalent denominator + 电机压脚脉冲当量分母 + + + + Rotation range positive limit angle + 旋转范围正向限制角度 + + + + Rotation range negative limit angle + 旋转范围正向限制角度 + + + + Punching head offset X + 冲孔机头偏移X + + + + Punching head offset Y + 冲孔机头偏移Y + + + + X Sewing area Negative boundary + x可缝纫区域负边界 + + + + X Sewing area Positive margin + x可缝纫区域正边界 + + + + Y Sewing area Negative boundary + y可缝纫区域负边界 + + + + Y Sewing area Positive margin + y可缝纫区域正边界 + + + + X Can be perforated region Negative boundary + x可冲孔区域负边界 + + + + X Can be perforated region Positive margin + x可冲孔区域正边界 + + + + Y Can be perforated region Negative boundary + y可冲孔区域负边界 + + + + Y Can be perforated region Positive margin + y可冲孔区域正边界 + + + + Sewing right head offset X + 缝纫右机头偏移X + + + + Sewing right head offset Y + 缝纫右机头偏移Y + + + + Cutter head offset X + 切刀机头偏移X + + + + Cutter head offset Y + 切刀机头偏移Y + + + + x can crop the negative boundary of the area + Y可裁切区域负边界 + + + + x can crop the positive boundary of the area + X可裁切区域正边界 + + + + y can crop the negative boundary of the area + Y可裁切区域负边界 + + + + y can crop the positive boundary of the area + Y可裁切区域正边界 + + + + XY start stop speed + + + + + + + + + + + + + + + + + + + + + + + mm/s + mm/s + + + + XY zero running speed + + + + + XY Idling speed + + + + + XY walking acceleration + + + + + + + + + + + + mm/s2 + mm/s2 + + + + XY brake acceleration + + + + + XY manual movement speed 1 + xy手动移动速度1 + + + + XY manual movement speed 2 + xy手动移动速度2 + + + + XY manual movement speed 3 + + + + + XY maximum moving speed + + + + + Spindle start stop speed + 主轴启动停止转速 + + + + + + + + + + + + + + + + + + r/min + r/min + + + + Spindle zero return speed + 主轴归零转速 + + + + Spindle running speed + 主轴运转转速 + + + + Spindle running acceleration + 主轴运转加速度 + + + + + + + + r/ss + r/ss + + + + Spindle brakes acceleration + 主轴刹车加速度 + + + + sewing maximum speed + 主轴缝纫最高转速 + + + + + Head lift start end speed + 机头升降起停速度 + + + + Head lift and zero speed + 机头升降归零速度 + + + + Head lift walk speed + 机头升降行走速度 + + + + Head lift acceleration + 机头升降行走加速度 + + + + Head movements brake acceleration + 机头升降刹车加速度 + + + + Presser foot lift zero speed + 压脚升降归零速度 + + + + Presser foot lifting speed + 压脚升降行走速度 + + + + Presser foot lifting acceleration + 压脚升降行走加速度 + + + + Presser foot lift brake acceleration + 压脚升降刹车加速度 + + + + Head rotation start stop speed + 机头旋转启动停止速度 + + + + + + + + + + + deg/s + 度/秒 + + + + Head rotation zero return speed + 机头旋转归零速度 + + + + Head rotation speed + 机头旋转运转速度 + + + + Head rotation acceleration + 机头旋转运动加速度 + + + + + + + deg/s2 + 度/秒方 + + + + Head rotation brake acceleration + 机头旋转刹车加速度 + + + + Head rotation maximum speed + 机头旋转最高速度 + + + + + Left loading point X + 左上料点x + + + + + Left loading point Y + 左上料点y + + + + + Right loading point X + 右上料点x + + + + + Right loading point Y + 右上料点y + + + + + Template box width + 模板框宽度 + + + + Template frame start and stop speed + 模板框启停速度 + + + + Template frame waking speed + 模板框行走速度 + + + + Template frame waking acceleration + 模板框行走加速度 + + + + Template frame brake acceleration + 模板框刹车加速度 + + + + Compensation angle of upper machine head rotation return to zero + 上机头旋转归零补偿角度 + + + + Compensation angle of lower machine head rotation return to zero + 下机头旋转归零补偿角度 + + + + Spindle zero compensation angle + 主轴归零补偿角度 + + + + Flat embroidery head offset X + 平绣机头偏移x + + + + Flat embroidery head offset Y + 平绣机头偏移y + + + + Flat embroidery X area negative boundary + 平绣x可绣花区域正边界(X-) + + + + + + Flat embroidery X area positive boundary + 平绣x可绣花区域正边界(X+) + + + + Start speed of punching rotation + 冲孔旋转启动速度 + + + + Punch rotation zero speed + 冲孔旋转归零速度 + + + + + Rotating speed of punch + 冲头旋转运转速度 + + + + Acceleration of ram punch + 冲孔旋转运转加速度 + + + + Ram punch rotation brake acceleration + 冲孔旋转刹车加速度 + + + + X gap compensation + X间隙补偿 + + + + Y gap compensation + Y间隙补偿 + + + + Brush offset X + 画笔偏移X + + + + Brush offset Y + 画笔偏移Y + + + + Track offset X + 压枣偏移X + + + + Track offset Y + 压枣偏移Y + + + + sewing work speed + 主轴缝纫工作转速 + + + + Spindle Cut line speed + 主轴剪线转速 + + + + Spindle Back needle speed + 主轴回针转速 + + + + Spindle start slow speed + 主轴启动慢动转速 + + + + Reverse equivalent spindle speed + 倒车等效主轴转速 + + + + Sewing moving frame + 缝纫动框方式 + + + + Continuous:0;Intermittent:1 + 连续:0;间歇式:1 + + + + Sewing acceleration and deceleration mode + 缝纫加减速方式 + + + + No acceleration or deceleration:0;Xy sine acceleration and deceleration:1 + 无加速或减速:0;Xy正弦加速度和减速度:1 + + + + Sewing machine head rotating manner + 缝纫机头旋转方式 + + + + Continuous rotation:0;Xy intermittent rotation:1 + 连续旋转:0;Xy间歇旋转:1 + + + + Sewing head deceleration mode + 缝纫机头加减速方式 + + + + No acceleration or deceleration:0;Intermittent acceleration and deceleration:1 + 无加速或减速:0;间歇加减速:1 + + + + Sewing movable frame starting angle + 缝纫动框起始角度 + + + + Sewing movable frame duration angle + 缝纫动框持续角度 + + + + Start low speed needls + 起针慢动针数 + + + + + + + Needles + + + + + Needle action loose line allowed + 起针动作松线允许 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Not allow:0;Allowed:1 + 不允许:0;允许:1 + + + + Needle action top line allowed + 起针动作松线允许 + + + + Needle action clamp line allowed + 起针动作夹线允许 0 + + + + Allow to embroider line allowed + 绣花起针夹线允许 + + + + Cut lines allow + 剪线允许 + + + + Do not trim: 0;Automatic thread trim:1;Data trim:2 + 不剪线:0;自动剪线:1;数据剪线:2 + + + + Trimming line angle + 剪线分线角度 + + + + Trimming completion angle + 剪线完成角度 + + + + Action loosening when thread trimming + 剪线时动作松线允许 + + + + Action wire pull when thread trimming + 剪线时动作拉线允许 + + + + Action clip line allows when trimming + 剪线时动作夹线允许 + + + + The action of lifting the presser foot during thread cutting is allowed + 剪线时动作提升压脚允许 + + + + The action of lifting the machine head during thread cutting allows for thread cutting + 剪线时动作提升机头剪线允许 + + + + The action of lifting the machine head during thread cutting allows for thread clamping + 剪线时动作提升机头夹线允许 + + + + When cutting the thread, the action is allowed to hook the thread under the pressure foot + 剪线时动作在压脚下勾线允许 + + + + Number of broken wires + 断线检测针数 + + + + Broken line detection spindle angle + 断线检测主轴角度 + + + + Change bobbin Reminder function + 换梭芯提醒功能 + + + + Not:0;Delay reminder by length:1;Count by number of slices:2;Immediately reminder by length:3 + 未启用:0;按长度划分的延迟提醒:1;按切片数计数:2;按长度立即提醒:3 + + + + Bottom line length + 底线长度 + + + + Bottom line correction per stitch + 每针底线修正量 + + + + Number of shuttles + 换梭片数计数 + + + + times + + + + + Refueling method selection + 加油方式选择 + + + + No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3 + 不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + + + + Refueling needles interval + 加油针数间隔 + + + + Refueling time interval + 加油时间间隔 + + + + + + + + + + s + + + + + Refueling duration + + + + + Parking position selection after completion + 完成后停车位置选择 + + + + Current:0;Starting:1;Anchor:2;Feeding:3;Offset:4 + 当前点:0;起始点:1;定位点:2;上料点:3;偏移点:4 + + + + Offset point coordinate valid flag + 偏移点坐标有效标志 + + + + + Invalid:0;X is valid:1;Y is valid:2;XY is valid:3 + 无效:0;X有效:1;Y有效:2;XY同时有效:3 + + + + Offset point coordinate X + 偏移点坐标X + + + + Offset point coordinate Y + 偏移点坐标Y + + + + Threading point coordinate effective mark + 穿线点坐标有效标志 + + + + Threading point coordinates X + 穿线点坐标X + + + + Threading point coordinates Y + 穿线点坐标Y + + + + Machine head low position + 机头升降低位高度 + + + + Machine head heigh position + 机头升降高位高度 + + + + Production preset + 产量预设 + + + + Illumination brightness + 照明亮度 + + + + Delay after the air frame is closed + 气框关闭后延时 + + + + Sewing acceleration + 缝纫加速度 + + + + Trimming frame displacement + 剪线动框位移 + + + + Sewing blow allowed + 缝纫吹气允许 + + + + Sewing the needle allowed + 摆针允许 + + + + Automatic loopback point allowed + 自动回穿点允许 + + + + Sewing head rotation allowed + 机头旋转允许 + + + + Send sidebar allowed + 送边条允许 + + + + Punching blow allowed + 冲孔吹气允许 + + + + Vacuum cleaner off delay + 吸尘器关闭延时 + + + + Punching spindle speed + 冲孔主轴转速 + + + + Punching acceleration + 冲孔加速度 + + + + Punching movable frame mode + 冲孔动框方式 + + + + AContinuous:0;BIntermittent:1 + 连续式:0;间歇式:1 + + + + Punching acceleration and deceleration mode + 冲孔加减速方式 + + + + No acceleration or deceleration:0;XY sine acceleration and deceleration:1 + 无加速或减速:0;XY正弦加速度和减速度:1 + + + + Punching frame starting angle + 冲孔动框起始角度 + + + + Punching frame continuous angle + 冲孔动框持续角度 + + + + Sewing move head up down + 缝纫间越框机头升降 + + + + Punching move head up down + 冲孔间越框机头升降 + + + + Moving basket Loose line + 移框松线允许 + + + + Moving basket Clamp line + 移框夹线允许 + + + + Software limit XY move allowed + 软件限位XY移动允许 + + + + Software limit sewing head lifting allowed + 软件限位缝纫头升降允许 + + + + Software limit punch head lifting allowed + 软件限位冲孔头升降允许 + + + + Software limit cutter head lift allowed + 软件限位裁刀机头升降允许 + + + + Software limit Punch drop allowed + 软件限位冲孔落杆限制允许 + + + + Software limit embroidery falling pole allowed + 软件限位绣花落杆限制允许 + + + + + Shuttle rotation angle + 换梭旋转机头角度 + + + + Number of needle hooks + 面线勾线针数 + + + + + needle + + + + + Presser foot height during sewing work + 缝纫工作时压脚高度 + + + + Head height during simulated work + 模拟工作时机头高度 + + + + Cutter working speed + 切刀工作转速 + + + + Cutter acceleration + 切刀加速度 + + + + Trimming frame direction + 剪线动框方向 + + + + Stop:0;Left:1;Forward:2;Right:3;Backward:4 + 禁止移动:0;左:1;前:2;右:3;后:4 + + + + track formed up and down + 压枣升降行程 + + + + Spindle corner speed + 主轴拐角转速 + + + + Minimum speed deviation angle + 降速最小偏差角度 + + + + Slow down the needle step in advance + 提前降速针步 + + + + Delay speed up needle step + 延迟提速针步 + + + + Minimum deviation angle of punching rotation deceleration + 冲孔旋转减速最小偏差角度 + + + + Punch rotation duration angle + 冲孔旋转持续角度 + + + + Working permission of sewing machine head + 缝纫机头工作允许 + + + + Work permit of punch head + 冲孔机头工作允许 + + + + Embroidery machine head work permit + 绣花机头工作允许 + + + + Auto Zero after power on + 开机自动归零 + + + + Punch rotation control 1 + 冲头旋转控制1 + + + + Punch rotation control 2 + 冲头旋转控制2 + + + + Punch rotation control 3 + 冲头旋转控制3 + + + + Punch rotation control 4 + 冲头旋转控制4 + + + + Punch rotation control 5 + 冲头旋转控制5 + + + + Punch rotation control 6 + 冲头旋转控制6 + + + + Color change start method + 换色启动方式 + + + + Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2 + 自动换色,自动启动:0;自动换色,手动启动:1;手动换色,手动启动:2 + + + + X frame commutation compensation + X绣框换向补偿 + + + + Y frame commutation compensation + Y绣框换向补偿 + + + + The way of mending flat embroidery + 平绣补绣方式 + + + + mending emb off: 0 ; mending emb by hand: 1 ; mending emb auto: 2 + 补绣关闭:0;手动:1;自动:2 + + + + Locking times + 锁针次数 + + + + Number of needle locking steps + 锁针步数 + + + + Length of lock needle + 锁针针步长度 + + + + Start working position mode + 开始工作模式 + + + + From the Stop lot: 0 ; From the current location, do not save: 1 ; From the current location, save: 2 + 从停车点开始:0;从当前位置开始,不保存:1;从当前位置开始,保存:2 + + + + Punching jump stitches to change the number of stitches beyond the frame + 冲孔跳针变越框针数 + + + + Punching jog mode + 冲孔点动模式 + + + + Lock rotate:0;rotate Lock:1 + 先锁头,再旋转:0;先旋转,再锁头:1 + + + + Reverse operation mode + 倒车工作模式 + + + + normal:0;click:1;continue click:2 + 普通模式:0;点动模式:1;持续点动模式:2 + + + + Special needle choose + 特殊针位选择 + + + + nothing:0;one:1;two:2;three:3;four:4;five:5;six:6;seven:7;eight:8;nine:9 + 无:0;针位1:1;针位2:2;针位3:3;针位4:4;针位5:5;针位6:6;针位7:7;针位8:8;针位9:9 + + + + Special needle function + 特殊针位功能 + + + + Carved hole:0;paint brush:1 + 雕孔:0;画笔:1 + + + + Vacuum cleaner start delay + 吸尘器启动延时 + + + + Color change speed + 换色速度 + + + + first head + 第一个机头 + + + + second head + 第二个机头 + + + + third head + 第三个机头 + + + + fourth head + 第四个机头 + + + + fifth head + 第五个机头 + + + + sixth head + 第六个机头 + + + + seventh head + 第七个机头 + + + + eighth head + 第八个机头 + + + + ninth head + 第九个机头 + + + + tenth head + 第十个机头 + + + + eleventh head + 第十一个机头 + + + + twelfth head + 第十二个机头 + + + + thirteenth head + 第十三个机头 + + + + fourteenth head + 第十四个机头 + + + + fifteenth head + 第十五个机头 + + + + sixteent head + 第十六个机头 + + + + seventeenth head + 第十七个机头 + + + + eighteenth head + 第十八个机头 + + + + nineteenth head + 第十九个机头 + + + + twentieth head + 第二十个机头 + + + + twenty-first head + 第二十一个机头 + + + + twenty-second head + 第二十二个机头 + + + + twenty-third head + 第二十三个机头 + + + + twenty-fourth head + 第二十四个机头 + + + + twenty-fifth head + 第二十五个机头 + + + + twenty-sixth head + 第二十六个机头 + + + + twenty-seventh head + 第二十七个机头 + + + + twenty-eighth head + 第二十八个机头 + + + + twenty-ninth head + 第二十九个机头 + + + + thirtieth head + 第三十个机头 + + + + thirty-first head + 第三十一个机头 + + + + thirty-second head + 第三十二个机头 + + + + Secure input light curtain allows + 安全输入光幕允许 + + + + Safety input pressure allowed + 安全输入气压允许 + + + + Safe input power-on signal allowed + 安全输入上电信号允许 + + + + Safe input emergency door allowed + 安全输入安全门允许 + + + + Automatic air box allowed + 自动气框允许 + + + + Automatic air frame closing delay + 自动气框闭合延时 + + + + + ms + ms + + + + Stitch offset allows + 线迹偏移允许 + + + + Loop work allowed + 循环工作允许 + + + + Right Work head selection 1 + 右机头选择1 + + + + Right Work head selection 2 + 右机头选择2 + + + + Right Work head selection 3 + 右机头选择3 + + + + Right Work head selection 4 + 右机头选择4 + + + + Right Work head selection 5 + 右机头选择5 + + + + Right Work head selection 6 + 右机头选择6 + + + + Right Work head selection 7 + 右机头选择7 + + + + Right Work head selection 8 + 右机头选择8 + + + + Right Work head selection 9 + 右机头选择9 + + + + Right Work head selection 10 + 右机头选择10 + + + + Right Work head selection 11 + 右机头选择11 + + + + Right Work head selection 12 + 右机头选择12 + + + + Right Work head selection 13 + 右机头选择13 + + + + Right Work head selection 14 + 右机头选择14 + + + + Right Work head selection 15 + 右机头选择15 + + + + Right Work head selection 16 + 右机头选择16 + + + + Right Work head selection 17 + 右机头选择17 + + + + Right Work head selection 18 + 右机头选择18 + + + + Right Work head selection 19 + 右机头选择19 + + + + Right Work head selection 20 + 右机头选择20 + + + + Right Work head selection 21 + 右机头选择21 + + + + Right Work head selection 22 + 右机头选择22 + + + + Right Work head selection 23 + 右机头选择23 + + + + Right Work head selection 24 + 右机头选择24 + + + + Right Work head selection 25 + 右机头选择25 + + + + Right Work head selection 26 + 右机头选择26 + + + + Right Work head selection 27 + 右机头选择27 + + + + Right Work head selection 28 + 右机头选择28 + + + + Right Work head selection 29 + 右机头选择29 + + + + Right Work head selection 30 + 右机头选择30 + + + + Right Work head selection 31 + 右机头选择31 + + + + Right Work head selection 32 + 右机头选择32 + + + + Pulling motor pull position + 拉料电机拉料位置 + + + + Pull length + 拉料长度 + + + + Cutting length + 拉料长度 + + + + Shuttle refueling duration + 梭加油持续时长 + + + + Clamping force 1 + 夹线力度1 + + + + Clamping force 2 + 夹线力度2 + + + + Clamping force 3 + 夹线力度3 + + + + Clamping force 4 + 夹线力度4 + + + + Flat embroidery spindle working speed + 平绣主轴工作转速 + + + + Flat embroidery acceleration + 平绣加速度 + + + + Flat embroidery frame + 平绣动框方式 + + + + continuous: 0 ; intermittent: 1 + 连续:0;间歇:1 + + + + Flat embroidery acceleration mode + 平绣动框方式 xy间歇式脉冲无加减速 + + + + No acceleration or deceleration: 0 ; Xy sine acceleration and deceleration: 1 + 无加速或减速:0;Xy正弦加减速:1 + + + + Flat embroidery frame starting angle + 平绣动框起始角度 + + + + Flat embroidery frame continuous angle + 平绣动框持续角度 + + + + jump max speed + 跳针最大速度 + + + + Flat embroidery jump to offset Needles count + 平绣跳针变越框针数 + + + + Embroidery move max speed + 平绣动框最高速度 + + + + Punching spindle start slow speed + 冲孔主轴启动慢动转速 + + + + X working range + X工作范围 + + + + Y working range + Y工作范围 + + + + Punching rotation sensor angle + 冲孔旋转传感器角度 + + + + Maximum speed of punching frame + 冲孔动框最高速度 + + + + Embroidery trimming thread hooking delay + 绣花剪线勾线延迟 + + + + Length of punching needle changing to skipping needle + 冲孔运针变跳针长度 + + + + Punching vacuum cleaner start duration + 冲孔吸尘器启动持续时间 + + + + Punching vacuum cleaner start interval + 吸尘器启动间隔 + + + + Flat embroidery thread angle + 平绣扣线角度 + + + + Enable + 使能 + + + + Disable + 失能 + + + + JogP + 正转 + + + + JogN + 反转 + + + + Zero + 归零 + + + + Open + 打开 + + + + Close + 关闭 + + + + Start + 开始 + + + + Stop + 停止 + + + + Up + 上升 + + + + Down + 下降 + + + + Clamp + 夹紧 + + + + Relax + 放松 + + + + Out + 伸出 + + + + Back + 收回 + + + + X to move motor + X向移动电机 + + + + Y to move motor + Y向移动电机 + + + + Sewing needle spindle motor + 缝纫主轴电机 + + + + Needle motor + 针电机 + + + + Shuttle motor + 梭电机 + + + + Lift motor + 升降电机 + + + + ratating motor + 旋转电机 + + + + Up ratating motor + 上旋转电机 + + + + Down ratating motor + 下旋转电机 + + + + Punch main axis + 冲孔主轴电机 + + + + Embroider main axis motor + 绣花主轴电机 + + + + Punching color change motor + 冲孔换色电机 + + + + Punching color rorating motor + 冲孔旋转电机 + + + + Embroidered color rorating motor + 平绣换色电机 + + + + Embroider Needle Spindle + 平绣针主轴 + + + + Embroider shutle Spindle + 平绣梭主轴 + + + + loose thread + 松紧线 + + + + down cutter cut + 下剪刀剪线 + + + + fuel charging + 加油 + + + + light + 照明灯 + + + + mid press foot + 中压脚 + + + + kou blow thread + 扣底线 + + + + clip up thread + 夹面线 + + + + sewing head lift + 缝纫机头升降 + + + + sew blow + 缝纫吹气 + + + + cleaner + 吸尘器 + + + + Hook action extension + 勾线动作伸缩 + + + + Hook action opening and closing + 勾线动作开合 + + + + embroider cutter + 平绣剪刀 + + + + embroider push + 平绣扣线 + + + + embroider clip thread + 平绣夹面线 + + + + embroider fuel charging + 平绣加油 + + + + embroider hook thread + 平绣勾线 + + + + embroider lock + 平绣锁头 + + + + All To Zero + 全部归零 + + + + Set Offset + 定偏移点 + + + + Sew Start + 缝纫定起始点 + + + + Sew Anchor + 缝纫定定位点 + + + + Punch Start + 冲孔定起始点 + + + + Punch Anchor + 冲孔定定位点 + + + + Emb Start + 绣花定起始点 + + + + Emb Anchor + 绣花定定位点 + + + + Check Frame + 边框检查 + + + + Back Offset + 回偏移点 + + + + Back Start + 回起始点 + + + + To Work Point + 回工作点 + + + + To anchor Point + 回定位点 + + + + Back to nthreading point + 回穿线点 + + + + To Center point + 回中心点 + + + + Frame Zero + 框架归零 + + + + To Right Up + 去右上角 + + + + To Right Down + 去右下角 + + + + To Left Up + 去左上角 + + + + To Left Down + 去左下角 + + + + Scope Work + 定工作范围 + + + + Sew Spindle Test + 缝纫主轴研车 + + + + Sew trim + 缝纫剪线 + + + + Sew Head Up Dn + 缝纫机头升降 + + + + Sew Spindle Jog + 缝纫主轴点动 + + + + Sew Hook Position + 缝纫主轴去勾线位 + + + + Rotate nproofreading + 缝纫旋转校对 + + + + Switch Sew Head + 切换缝纫机头 + + + + Punch Spindle Jog + 冲孔主轴点动 + + + + Punch Spindle Test + 冲孔主轴研车 + + + + Punching Change Tool + 冲孔换刀 + + + + Punch Rod Zero + 冲孔换杆归零 + + + + Single Punch + 单次冲孔 + + + + Punch Stop Lower + 冲头停下位 + + + + Rotate To Zero + 冲孔旋转去零位 + + + + Switch Punch Head + 切换冲孔机头 + + + + Emb spindle + 平绣主轴研车 + + + + Emb Hook Position + 平绣主轴去勾线位 + + + + Emb jog + 平绣点动 + + + + Emb thread cut + 平绣剪线 + + + + Emb change color + 平绣换色 + + + + Switch Emb Head + 切换平绣机头 + + + + Forward And Back + 前进回退 + + + + Needle shuttle proofread + 针梭校对 + + + + Needle shuttle reset + 针梭复位 + + + + Back shuttle pos + 回换梭位 + + + + Needle reset + 针归零 + + + + Shuttle reset + 梭归零 + + + + Sew rotate up + 缝纫旋转+ + + + + Sew rotate down + 缝纫旋转- + + + + SensorSign + 传感器信号 + + + + Action + 控制动作 + + + + HMIUpgrade + 界面升级 + + + + MCUpgrade + 主控升级 + + + + ParaImport + 参数导入 + + + + ParaExport + 参数导出 + + + + SoftwareSet + 软件设置 + + + + SoftPower + 软件授权 + + + + Network + 网络管理 + + + + NeedleSet + 针杆设置 + + + + TimeSet + 时间设置 + + + + ShortcutSet + 常用设置 + + + + Productnum + 生产统计 + + + + Version + 版本信息 + + + + Debug + 调试功能 + + + + CountReset + 底线计数复位 + + + + Root + 超级用户 + + + + Select + 花样选择 + + + + Para + 花样参数 + + + + Color + 花样色序 + + + + Import + 花样导入 + + + + Export + 花样导出 + + + + Delete + 花样删除 + + + + WorkPara + 工作参数 + + + + OperatPara + 操作参数 + + + + ActionSet + + + + + SpeedPara + 速度参数 + + + + LimitPara + 限位参数 + + + + DetectPara + 检测参数 + + + + CutLine + 剪线调试 + + + + PunchKnife + 冲刀调试 + + + + NeedleShuttle + 缝纫针梭 + + + + Start button + 启动按钮 + + + + Pause button + 暂停按钮 + + + + Jog button + 点动按钮 + + + + Air pressure protection input + 气压保护输入 + + + + Safety light curtains protection input + 安全光幕输入 + + + + X zero position + X零位 + + + + Y zero position + Y零位 + + + + X deceleration + X降速 + + + + Y deceleration + Y降速 + + + + X negative limit + X负限位 + + + + Y negative limit + Y负限位 + + + + X positive limit + X正限位 + + + + Y positive limit + Y正限位 + + + + Sewing on the machine head rotation zero position + 缝纫上机头旋转零位 + + + + Sewing under the machine head rotation zero position + 缝纫下机头旋转零位 + + + + Punching the rotary shaft at zero + 冲孔旋转轴零位 + + + + Sewing machine head lifting upper limit + 缝纫机头升降上限位 + + + + Lower lifting limit of sewing machine head + 缝纫机头升降下限位 + + + + Sewing spindle needle - parking space + 缝纫针主轴停车位 + + + + Sewing spindle needle - thread hooking position + 缝纫针主轴勾线位 + + + + Sewing shuttle parking space + 缝纫梭主轴停车位 + + + + Sewing rotary hook thread hook position + 缝纫梭主轴勾线位 + + + + Punching spindle zero position + 冲孔主轴零位 + + + + Flat needle spindle parking space + 平绣针主轴停车位 + + + + Flat embroidery needle spindle hook position + 平绣针主轴勾线位 + + + + Flat shuttle spindle parking space + 平绣梭主轴停车位 + + + + Flat embroidery shuttle spindle hook position + 平绣梭主轴勾线位 + + + + Flat embroidery under the scissors back in place + 平绣下剪刀回位 + + + + Sewing thread breakage detection + 缝纫断线检测 + + + + Sewing scissors return + 缝纫下剪刀回位 + + + + The small plate closes signal 1 + 小台板关闭信号1 + + + + The small plate closes signal 2 + 小台板关闭信号2 + + + + The shuttle is not at zero + 旋梭不在零位 + + + + Needle and shuttle is out of sync + 针梭不同步 + + + + Rotation is out of sync + 旋转不同步 + + + + The needle is not at the high position + 机针不在高位 + + + + Head lift timeout + 机头升降超时 + + + + The head is not in the safty area + 机头不在安全区域 + + + + Punching head main shaft is not at zero + 冲孔主轴不在零位 + + + + Rotating positive limit + 正向旋转限位 + + + + Rotating negative limit + 反向旋转限位 + + + + Foot position error + 压脚位置错误 + + + + Foot moto's position is out of range + 压脚电机位置越界 + + + + The head lift moto's position is out of range + 机头升降位置越界 + + + + Rotation position out of range + 旋转位置越界 + + + + Head lift upper limit + 机头升降上限位 + + + + Head lift down limit + 机头升降下限位 + + + + Emb main shaft is not at zero + 平绣主轴不在零位 + + + + Punching color change timeout + 冲孔换色超时 + + + + Embroidered color change timeout + 平绣换色超时 + + + + Emb needle bar's position error + 平绣针位错误 + + + + Punch needle bar's position error + 冲孔针位错误 + + + + Err emb hook not zero + 平绣勾刀未回位 + + + + Err emb cut not zero + 平绣剪刀未回位 + + + + WordsInputDialog + + + Dialog + + + + + Words input + 字符输入 + + + + Name: + 名称: + + + + ← + + + + + old + 旧名称 + + + diff --git a/csvcode.h b/csvcode.h new file mode 100644 index 0000000..afbd5ba --- /dev/null +++ b/csvcode.h @@ -0,0 +1,4 @@ +#ifndef CSVCODE_H +#define CSVCODE_H + +#endif // CSVCODE_H diff --git a/datafile/datafiledsr.cpp b/datafile/datafiledsr.cpp new file mode 100644 index 0000000..8159474 --- /dev/null +++ b/datafile/datafiledsr.cpp @@ -0,0 +1,1379 @@ +#include "datafiledsr.h" + + +DataFileDsr::DataFileDsr() +{ + m_colorNum = 0;//颜色数 + m_pColor = NULL;//颜色rgb值 +} + +DataFileDsr::~DataFileDsr() +{ +} + +void DataFileDsr::initColor(int cnum, QRgb *pColor) +{ + m_colorNum = cnum;//颜色数 + m_pColor = pColor;//颜色rgb值 +} + +void DataFileDsr::initFile(const QString &fullPathName) +{ + clear(); + QFileInfo file(fullPathName); + if (file.exists() && file.isFile()) + { + m_fileFullPathName = fullPathName; + m_fileName = fullPathName; + } + else + { + qDebug() << "Init file failed path =" << m_fileFullPathName; + } +} + +//检查dsr文件版本,非5.2以上版本或5.5版本和错误格式返回-1 +int DataFileDsr::checkDsrVersion() +{ + loadFile(); // 如果数据未读取,重新读取 + + int size = m_fileData.size(); + if (size <= (int)(sizeof(DsrHead))) + { + qDebug("dsr size less then headsize"); + return -1; + } + DsrHead * dsrHead = (DsrHead *)(m_fileData.data()); + float ver = *((float*)(&dsrHead->verCode)); + if(ver < DSR_VERSION_5 || ver > DSR_VERSION_5_5)// 5.x 以下版本 + { + return -1; + } + + if (size <= (int)(sizeof(DsrHead))) + { + qDebug("dsr size less then headsize"); + return -1; + } + if(dsrHead->dataBegin > (u32)size) + { + qDebug("dsr dataBegin err"); + return -1; + } + size -= dsrHead->dataBegin; + if (size <= 0) + { + qDebug("dsr dataBegin err"); + return -1; + } + int stepsize = size/sizeof(DsrStep); + if (stepsize <= 0) + { + qDebug("dsr data size err"); + return -1; + } + if (stepsize > PATTERN_LARGE_NEEDLES)//128万针 + { + qDebug("dsr data size big"); + return -2; + } + + return stepsize; +} + +// 转换为绝对数据 +void DataFileDsr::convertDataToEmbAbs() +{ + m_embAbsData.clear(); + + getDsrMinMax();//读取dsr源文件 + + int size = m_fileData.size(); + if (size <= (int)(sizeof(DsrHead))) + { + qDebug("dsr size less then headsize"); + return; + } + DsrHead * dsrHead = (DsrHead *)(m_fileData.data());//读取dsr源文件的头文件的结构体 + if(dsrHead->dataBegin > (u32)size) + { + qDebug("dsr dataBegin err"); + return; + } + size -= dsrHead->dataBegin; + if (size <= 0) + { + qDebug("dsr dataBegin err"); + return; + } + + //异形冲孔 + //int sizeHead = sizeof(DsrHead); + float ver = *((float*)(&dsrHead->verCode)); + if(ver == DSR_VERSION_5_5 && dsrHead->shapeAddress != 0) + { + int addSize = m_fileData.size() - dsrHead->shapeAddress; + if (addSize <= 0) + { + qDebug("dsr shapeAddress err"); + return; + } + + size = dsrHead->shapeAddress - dsrHead->dataBegin; + if (size <= 0) + { + qDebug("dsr dataBegin err"); + return; + } + } + + int stepsize = size/sizeof(DsrStep); + if (stepsize <= 0) + { + qDebug("dsr data size err"); + return; + } + + DsrStep * dsrDataBeg = (DsrStep *)((m_fileData.data() + dsrHead->dataBegin)); + + // 绝对坐标数据 + DataDs16FileHead dhead; + memset(&dhead, 0, sizeof(DataDs16FileHead)); + + QByteArray absData;//绝对坐标 + absData.clear(); + DsAbsItem absItem; + memset(&absItem,0,sizeof(DsAbsItem)); + + DsrStep * dsrDataPtr = dsrDataBeg; + DsrStep * dsrDataPtrTemp = dsrDataBeg; + + int stepidx = 0; + BYTE ctrl,attr; + int colorNum = 1; + int runflag = 0; + double xfactor ; + double yfactor ; + double rfactor ; + if (dsrHead->xyUnit == 0) // 0:单位0.1mm; 1: 0.01mm; 2: mm + { + xfactor = DSR_DATADIRX*10; + yfactor = DSR_DATADIRY*10; + } + else if (dsrHead->xyUnit == 2) + { + xfactor = DSR_DATADIRX*100; + yfactor = DSR_DATADIRY*100; + } + else + { + xfactor = DSR_DATADIRX; + yfactor = DSR_DATADIRY; + } + if (dsrHead->rUnit == 0) // 0:单位0.36度; 1: 0.036度; 2: 度; 3, 1/10000弧度; + { + rfactor = 2*PI*10 * DSR_DATADIRR; + } + else if (dsrHead->rUnit == 1) + { + rfactor = 2*PI * DSR_DATADIRR; + } + else + { + rfactor = DSR_DATADIRR; + } + + int firstPunchStepFlag = 0;//第一针冲孔针步标志 + int firstPunchStepDr = 0;//第一针冲孔针步角度 + + int ax,ay,ar; + ax = ay = ar = 0; + for (int i = 0; i < stepsize; i++) + { + ctrl = dsrDataPtr->ctrl; + attr = dsrDataPtr->attr; + ax = dsrDataPtr->dx; + ay = dsrDataPtr->dy; + ar = dsrDataPtr->dr; + + if (ctrl == DATA_PAUSE_OLD) // 暂停 + { + ctrl = DATA_PAUSE; + } + if (ctrl == DATA_ANGLE_OLD) // 拐点 + { + ctrl = DATA_ANGLE; + } + if (ctrl == DATA_CUT_OLD) // 剪线 + { + ctrl = DATA_CUTTRD; + } + if (ctrl == DATA_END_OLD) // 结束码 + { + ctrl = DATA_END; + } + if (ctrl == DATA_CHGND_OLD) // 换色功能码 + { + ctrl = DATA_CHGND; + } + + if (dsrDataPtr->ctrl == DSR_CHGND) // 换色 + { + ctrl = DATA_CHGND; + colorNum++; + } + + if(firstPunchStepFlag == 0) + { + if(dsrDataPtr->ctrl == DSR_PUNCH) + { + firstPunchStepFlag = 1; + firstPunchStepDr = ar; + } + } + + //画笔与冲孔之间的转换线需要转换为偏移 + if(ctrl == DSR_PUNCH) + { + if(dsrDataPtr != dsrDataBeg) + { + dsrDataPtr--; + if(dsrDataPtr->ctrl == DSR_DRAWING) + { + ctrl = DSR_OFFSET; + runflag = 1; + } + dsrDataPtr++; + } + } + + //判断是否要改变第一针的属性 + if(ctrl == DSR_JUMP) + { + if (runflag == 0) + { + runflag = 1; + } + runflag++; + } + else if(ctrl == DSR_EMB || ctrl == DSR_SEWING || ctrl == DSR_PUNCH)//第一针不转换为跳针 + { + if ((runflag == 0 || runflag > 3) && (i >= 0)) // 第一个运针是入针 + { + dsrDataPtr++; + u8 ctl = dsrDataPtr->ctrl; + if(ctl == DSR_EMB)//下一针还为针步时才转换为跳针 + { + ctrl = DATA_JUMP; + } + dsrDataPtr--; + runflag = 1; + } + //else if (i == 0 && ddx == 0 && ddy == 0) // 第一针,入针,向后扫描,如果有连续的三个跳针,则将第一针入针转换为跳针 ljs + else if (i == 0) // 20230511 第一针,入针,向后扫描,如果有连续的三个跳针,则将第一针入针转换为跳针 ljs + { + int count = 0; + do + { + dsrDataPtrTemp++; + if (dsrDataPtr->ctrl == DSR_JUMP) + { + count++; + if (dsrDataPtrTemp->dx == 0 && dsrDataPtrTemp->dy == 0) // 空跳,直接变成跳针 + { + count += 2; + } + } + else + { + break; + } + }while(1); + if (count >= 3) + { + if(ctrl == DSR_EMB) + { + ctrl = DATA_JUMP; + } + runflag = 2; + } + else + { + runflag = 1; + } + } + else + { + runflag = 1; + } + } + else if (ctrl == DATA_CHGND) // 换色 + { + runflag = 10; + } + else + { + if(ctrl != DSR_OFFSET) + { + runflag = 0; + } + } + + absItem.ctrl = ctrl; + absItem.attr = attr; + absItem.action = dsrDataPtr->action; + absItem.ax = ax * xfactor; + absItem.ay = ay * yfactor; + absItem.ar = ar * rfactor; + + absData.append((char*)(&absItem), sizeof(DsAbsItem)); + + //插入空针,原地冲个孔 + if(ctrl == DSR_OFFSET) + { + DsrStep * tempDataPtr; + //下一针非偏移 + if(i+1 < stepsize) + { + tempDataPtr = dsrDataPtr + 1; + if(tempDataPtr->ctrl != DSR_OFFSET) + { + if(tempDataPtr->ctrl == DSR_PUNCH) + { + absItem.ctrl = tempDataPtr->ctrl; + absItem.attr = 0; + absItem.action = 0; + absItem.ax = ax * xfactor; + absItem.ay = ay * yfactor; + absItem.ar = ar * rfactor; + + absData.append((char*)(&absItem), sizeof(DsAbsItem)); + stepidx++; + } + } + } + } + + stepidx++; + dsrDataPtr++; + } + + int newstepnum = stepidx; // 转换后的数据长度 + + // 文件头转换 + QString name = getFileFullName(); + int namelen = name.size(); + if (namelen > HEAD_NAME_STR_LEN) + { + namelen = HEAD_NAME_STR_LEN; + } + memcpy(dhead.fileName, name.data(), namelen); // 文件名称 + dhead.dataSize = newstepnum*sizeof(DsAbsItem); // 数据字节数 + dhead.itemNums = newstepnum; // 数据项个数 + dhead.bytesPerItem = sizeof(DsAbsItem); // 每项占的字节数 + dhead.bytesPerBlk = MAX_EXDP_LEN; // 数据内容划分块大小 + dhead.dataChecksum = calcCheckSum32((u8 *)(absData.data()) , absData.length()); // 数据累加校验和 + dhead.checkCrc = calcCrc16((u8 *)(&dhead), HEAD_FIX_INFO_LEN); // 前面6个字段的CRC校验,(6个字段分别为:文件名称,字节数,项个数,每项字节数,每块字节数,数据累加和的CRC校验值) + u32 fileID = 0; + fileID = calcCheckSum32((u8 *)(absData.data()) , absData.length()); // 原始数据累加校验和 + dhead.fileid = fileID; //中间数据的 fileid = + + dhead.anchorX = dsrHead->anchorX;// 定位点坐标X + dhead.anchorY = dsrHead->anchorY;// 定位点坐标Y + dhead.beginX = dsrHead->startX;// 数据起点坐标X + dhead.beginY = dsrHead->startY;// 数据起点坐标Y + dhead.beginR = firstPunchStepDr; + dhead.minX = m_minX; + dhead.maxX = m_maxX; + dhead.minY = m_minY; + dhead.maxY = m_maxY; // 轮廓范围,使用重新计算之后的值 + dhead.colorNumber = colorNum; + dhead.offsetX = dsrHead->offsetX; + dhead.offsetY = dsrHead->offsetY; + + memcpy(dhead.switchTable,dsrHead->switchTable,sizeof(dhead.switchTable));//如果文件有色序会自动设置为文件中的色序 + + // 保存文件头到数组中 + m_embAbsData.append((char *)(&dhead), sizeof(DataDs16FileHead)); + + // 保存数据到数组中 + m_embAbsData.append(absData); +} + +int DataFileDsr::createPreviewImage(QImage *pImg, int saveflag, int penwidth, int reDraw) +{ +#if(1) + if(reDraw == 0)//图片存在则不重画 + { + // 图片是否存在,存在则返回 + QString previewPath = getFileFullPathName() + ".preview.png"; + QFile imageFile(previewPath); + if (imageFile.exists()) + { + return 0; + } + } +#endif + + int newimgflag = 0; + QImage * pImage; + int width, height; + if (pImg == NULL) + { + width = DSR_PREVIEW_WIDTH; + height = DSR_PREVIEW_HEIGHT; + pImage = new QImage(width, height, IMAGE_TYPE); + newimgflag = 1; + } + else + { + pImage = pImg; + } + + width = pImage->width(); + height = pImage->height(); + + if (width <= DSR_PREVIEW_SIDE*2 || height <= DSR_PREVIEW_SIDE*2) + { + if (pImage != NULL && newimgflag == 1) + { + delete pImage; + } + qDebug("preview img too small"); + return -1; + } + + memset(pImage->bits(), 0x00, pImage->byteCount()); + + QPainter painter(pImage); + QColor backcolor(255, 255, 255, 0); // 透明背景 + + // 背景 + QPen pen; + pen.setWidth(penwidth); + pen.setColor(backcolor); + painter.setPen(pen); + painter.setBrush(backcolor); + painter.drawRect(0, 0, width, height); + + QColor color = QColor(Qt::blue); + pen.setColor(color); + painter.setPen(pen); + + getDsrMinMax(); + // 图形 + int size = m_fileData.size(); + if (size <= (int)(sizeof(DsrHead))) + { + qDebug("dsr size less then headsize"); + return -1; + } + DsrHead * dsrHead = (DsrHead *)(m_fileData.data()); + if(dsrHead->dataBegin > (u32)size) + { + qDebug("dsr dataBegin err"); + return -1; + } + size -= dsrHead->dataBegin; + if (size <= 0) + { + qDebug("dsr dataBegin err"); + return -1; + } + + float ver = *((float*)(&dsrHead->verCode)); + if(ver == DSR_VERSION_5_5 && dsrHead->shapeAddress != 0) + { + int addSize = m_fileData.size() - dsrHead->shapeAddress; + if (addSize <= 0) + { + qDebug("dsr shapeAddress err"); + return -1; + } + + size = dsrHead->shapeAddress - dsrHead->dataBegin; + if (size <= 0) + { + qDebug("dsr dataBegin err"); + return -1; + } + } + + int stepsize = size/sizeof(DsrStep); + if (stepsize <= 0) + { + qDebug("dsr data size err"); + return -1; + } + + DsrStep * dsrDataBeg = (DsrStep *)((m_fileData.data() + dsrHead->dataBegin)); + + // 图形显示区域 + int dpminx = DSR_PREVIEW_SIDE; + int dpmaxx = width - DSR_PREVIEW_SIDE; + int dpminy = DSR_PREVIEW_SIDE + DSR_PREVIEW_SIDE; + int dpmaxy = height - DSR_PREVIEW_SIDE; + + // 计算缩放系数 + double factor, temp; + factor = (double)(abs(m_maxX - m_minX)) / (dpmaxx - dpminx); // 按x计算的缩放系数 + temp = (double)(abs(m_maxY - m_minY)) / (dpmaxy - dpminy); // 按轮廓计算,最小能够放下重复次数个图形 + if (temp >= factor) // 使用较大的缩放系数 + { + factor = temp; + } + + // 计算显示参数,按照图形的实际位置显示(数据坐标零点对应图形中心) + int dpx = (int)((dpminx+dpmaxx)/2 - (((m_maxX+dsrHead->startX)+(m_minX+dsrHead->startX))/factor)/2); + int dpy = (int)((dpminy+dpmaxy)/2 - (((m_maxY+dsrHead->startY)+(m_minY+dsrHead->startY))/factor)/2); + + // 显示花样图形 + BYTE ctrlByte; + int colorIdx; + int oldcolor; + colorIdx = 0; + oldcolor = -1; + + double datposx, datposy; + int curx, cury, prex, prey; + curx = cury = prex = prey = 0; + + DsrStep * dsrDataPtr = dsrDataBeg; + + for (int i = 0; i < stepsize; i++) + { + // 读入一个针步数据 + ctrlByte = dsrDataPtr->ctrl; + //attrByte = dsrDataPtr->attr; + + prex = curx; + prey = cury; + + datposx = dsrDataPtr->dx + dsrHead->startX; + datposy = dsrDataPtr->dy + dsrHead->startY; + + curx = (datposx) / factor + dpx; + cury = (datposy) / factor + dpy; + + if (DSR_SHOWDIRX == -1) + { + curx = (width)-curx; + } + if (DSR_SHOWDIRY == -1) + { + cury = (height)-cury; + } + + if(i == 0) + { + dsrDataPtr++; + continue; + } + + if ( ctrlByte == DSR_SEWING || + ctrlByte == DSR_PUNCH || + ctrlByte == DSR_CUTTING || + ctrlByte == DSR_JUMP || + ctrlByte == DSR_EMB ) + { + if (oldcolor != colorIdx) + { + int cidx = dsrHead->switchTable[colorIdx % BF_SW_ND]; + int cnum = m_colorNum; + cnum /= sizeof(QRgb); + if (cnum > BF_SW_ND) + { + cnum = BF_SW_ND; + } + QColor sewcolor; + if (cnum != 0) + { + cidx %= cnum; + QRgb * pColor = m_pColor; + if(pColor != NULL) + { + sewcolor.setRgb(pColor[cidx]); + } + else + { + sewcolor = QColor(Qt::green); + } + } + else + { + sewcolor = QColor(Qt::green); + } + + pen.setColor(sewcolor); + painter.setPen(pen); + oldcolor = colorIdx; + } + if(ctrlByte == DSR_PUNCH) + { + int cr = PUNCHRADIUS / factor; + if(cr <= 0){cr = 1;} + painter.drawEllipse(curx-cr, cury-cr, cr*2, cr*2); + } + else + { + painter.drawLine(prex, prey, curx, cury); + } + } + + else if (ctrlByte == DSR_CHGND) // 换色 + { + colorIdx++; + } + else + { + //qDebug("other type=0x%x", ctrlByte); + } + + dsrDataPtr++; + } + + // 保存成文件 + QString preview = getFileFullPathName(); + if (saveflag != 0 && preview.isEmpty() == false) + { +#if (1) + preview += ".preview.png"; + pImage->save(preview, "png"); +#endif + } + + if (pImage != NULL && newimgflag == 1) + { + delete pImage; + } + + return 0; +} + +int DataFileDsr::createPunchShapeImage(QImage *pImg, int idx) +{ + int width,height; + QImage * pImage; + pImage = pImg; + width = pImage->width() - 2; + height = pImage->height() - 2; + QPainter painter(pImage); + //背景 + QPen pen; + pen.setWidth(1); + pen.setColor(QColor("white")); + painter.setPen(pen); + painter.setBrush(QColor("white")); + painter.drawRect(0, 0, width, height); + double suofanglv; + int i; + u32 j; + suofanglv=0; + for(i = 0; i < m_punchCountList.size(); i++) + { + if(m_punchCountList.at(i).biColorID == idx) + { + KongDaoInfo chongDaoInfo = m_punchCountList.at(i).pKongDaoInfo; + ChongKongObj chongKongObj = chongDaoInfo.pChongKongObj; + pen.setColor(QColor("blue")); + painter.setPen(pen); + double n1 = chongDaoInfo.widthX/width; + double n2 = chongDaoInfo.heightY/height; + n1>n2?suofanglv = n1:suofanglv=n2; + for(j = 1; j < chongKongObj.countPt; j++) + { + tempDs16Item item0 = chongKongObj.pointList[j-1]; + tempDs16Item item1 = chongKongObj.pointList[j]; + painter.drawLine(item0.ax/suofanglv,item0.ay/suofanglv,item1.ax/suofanglv,item1.ay/suofanglv); + } + } + } + return 0; +} + +int DataFileDsr::createPunchShapeData(QString filePath) +{ + m_punchCountList.clear(); + + KongCount punchCount; + KongDaoInfo punchInfo; + ChongKongObj punchObj; + tempDs16Item item ; + + QFile file(filePath); + if(file.exists()) + { + //打开 + if(!file.open(QIODevice::ReadOnly)) + { + return -1; + } + + QByteArray fileData; + fileData.clear(); + + fileData = file.readAll(); + + int size = fileData.size(); + if (size <= (int)(sizeof(DsrHead))) + { + file.close(); + return -1; + } + + DsrHead * dsrHead = (DsrHead *)(fileData.data()); + if(dsrHead->dataBegin > (u32)size) + { + qDebug("dsr dataBegin err"); + return -1; + } + int dataSize = size - dsrHead->dataBegin; + + if (dataSize <= 0) + { + file.close(); + return -1; + } + + float ver = *((float*)(&dsrHead->verCode)); + if(ver == DSR_VERSION_5_5) + { + int shapeSize = size - dsrHead->shapeAddress; + if (shapeSize <= 0) + { + file.close(); + return -1; + } + + file.seek(dsrHead->shapeAddress); + int k; + u32 j; + double dfiFlag; + s32 iCount,iIndex; + file.read((char *)&dfiFlag, sizeof(double)); //标识开始 + file.read((char *)&iCount , sizeof(s32) ); //色号个数 + if(dfiFlag == 5.5 && iCount>=0 && iCount<50) //记号判断 + { + for (k = 0; k < iCount; k++) + { + memset(&punchCount,0,sizeof(KongCount)); + file.read((char *)&punchCount.biColorID, sizeof(u8)); //色号值 + memset(&punchInfo,0,sizeof(KongDaoInfo)); + file.read((char *)&punchInfo.colorId, sizeof(u32) ); + file.read((char *)&punchInfo.refColor,sizeof(u8)*4); + file.read((char *)&punchInfo.widthX, sizeof(float)); + file.read((char *)&punchInfo.heightY,sizeof(float)); + file.read((char *)&punchInfo.biValue, sizeof(u8)); + if(punchInfo.biValue) + { + memset(&punchObj,0,sizeof(ChongKongObj)); + file.read((char *)&punchObj.nIdKey, sizeof(u32)); + file.read((char *)&punchObj.refColor,sizeof(u8)*4); + file.read((char *)&punchObj.countPt , sizeof(u32)); + file.read((char *)&punchObj.zhuCount, sizeof(u32)); + //if (punchObj.countPt < 0 || punchObj.zhuCount < 0 || punchObj.zhuCount > 500) + if (punchObj.zhuCount > 500) + { + memset(&punchObj,0,sizeof(ChongKongObj)); + } + else + { + for (j = 0; j < punchObj.zhuCount; j++) + { + file.read((char *)&iIndex, sizeof(s32)); + punchObj.gruopIndexArray[j]=iIndex; + //punchObj.gruopIndexArray[j]=iIndex; + } + for (j = 0; j < punchObj.countPt; j++) + { + memset(&item,0,sizeof(tempDs16Item)); + file.read((char *)&item.ax, sizeof(double)); + file.read((char *)&item.ay, sizeof(double)); + punchObj.pointList[j]=item; + //punchObj.pointList.append(m_item); + } + } + } + punchInfo.pChongKongObj=punchObj; + punchCount.pKongDaoInfo=punchInfo; + m_punchCountList.append(punchCount); + } + } + return 0; + } + else + { + return -1; + } + } + else + { + file.close(); + return -1; + } + + file.close(); + return 0; +} + +void DataFileDsr::clear() +{ + m_fileFullPathName.clear(); // 文件路径 + m_fileData.clear(); // 文件数据内容 + m_embAbsData.clear(); // 转换后的数据 +} + +void DataFileDsr::loadFile() +{ + QFile rdfile(m_fileFullPathName); + if(!rdfile.open(QIODevice::ReadOnly)) + { + qDebug() << "open file fail when read, path =" << m_fileFullPathName; + return; + } + + m_fileData = rdfile.readAll(); + rdfile.close(); + + int ret = checkFileCryption(); + if(ret > 0)//已加密 + { + //解密 + int size = m_fileData.size(); + if (size <= (int)(sizeof(DsrHead))) + { + qDebug("dsr size less then headsize"); + return; + } + + DsrHead * dsrHead = (DsrHead *)(m_fileData.data()); + if(dsrHead->dataBegin > (u32)size) + { + qDebug("dsr dataBegin err"); + return ; + } + size -= dsrHead->dataBegin; + + BYTE* pCryFactors = (BYTE*)(&dsrHead->dataBegin); + BYTE* pData = (BYTE*)((m_fileData.data() + dsrHead->dataBegin)); + + DsrCryption cry; + cry.InitDsrCryptionCtrl(-1, dsrHead->cryWord, pCryFactors); + + int rslt = cry.DeCryption(pData, size); + + if (rslt == 0) + { + dsrHead->cryWord = 0; + } + } + + return; +} + +void DataFileDsr::saveFile() +{ + QFile wrfile(m_fileFullPathName); + if(!wrfile.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + qDebug() << "open file fail when wirte, path =" << m_fileFullPathName; + return; + } + else + { + wrfile.write(m_fileData); + wrfile.close(); + } +} + +//写入起始点到文件中 +void DataFileDsr::writePointToFile(int x, int y, int flag) +{ + if(m_fileData.size() <= 0) + { + return; + } + + DsrHead * pDsrHead = (DsrHead *)(m_fileData.data()); + + if(flag == 0) + { + pDsrHead->startX = x; + pDsrHead->startY = y; + } + else + { + pDsrHead->anchorX = x; + pDsrHead->anchorY = y; + } + + QFile wfile(m_fileFullPathName); + if(!wfile.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + qDebug() << "open file fail when read, path =" << m_fileFullPathName; + return; + } + + wfile.write(m_fileData); + wfile.close(); + +#ifdef Q_OS_LINUX + system("sync"); +#endif +} + +void DataFileDsr::writeOffsetXYMoveToFile(s32 offsetX, s32 offsetY) +{ + if(m_fileData.size() <= 0) + { + return; + } + + DsrHead * pDsrHead = (DsrHead *)(m_fileData.data()); + + pDsrHead->offsetX = offsetX; + pDsrHead->offsetY = offsetY; + + QFile wfile(m_fileFullPathName); + if(!wfile.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + qDebug() << "open file fail when read, path =" << m_fileFullPathName; + return; + } + + wfile.write(m_fileData); +#ifdef Q_OS_LINUX + system("sync"); +#endif + wfile.close(); +} + +QString DataFileDsr::getFileFullPath() +{ + QFileInfo file(m_fileFullPathName); + return file.absoluteFilePath(); +} + +QString DataFileDsr::getFileFullName() +{ + QFileInfo file(m_fileFullPathName); + return file.fileName(); +} + +QString DataFileDsr::getFileName() +{ + QFileInfo file(m_fileFullPathName); + return file.completeBaseName(); +} + +QString DataFileDsr::getFileSuffix() +{ + QFileInfo file(m_fileFullPathName); + return file.suffix(); +} + +int DataFileDsr::getStitchNums() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDsrHead->itemNums; +} + +int DataFileDsr::getColorNums() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDsrHead->colorNumber; +} + +//测试fileid用,目前这个函数没用到 +int DataFileDsr::getFileid() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDsrHead->fileid; +} + +int DataFileDsr::getDatWidth() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + return (pDsrHead->maxX - pDsrHead->minX); +} + +int DataFileDsr::getDatHeight() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + return (pDsrHead->maxY - pDsrHead->minY); +} + +int DataFileDsr::getMaxX() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDsrHead->maxX; +} + +int DataFileDsr::getMinX() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDsrHead->minX; +} + +int DataFileDsr::getMaxY() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDsrHead->maxY; +} + +int DataFileDsr::getMinY() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDsrHead->minY; +} + +int DataFileDsr::getAnchorX() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + int x = pDsrHead->anchorX; + return x; +} + +int DataFileDsr::getAnchorY() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + int y = pDsrHead->anchorY; + return y; +} + +int DataFileDsr::getBeginX() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + int x = pDsrHead->beginX; + return x; +} + +int DataFileDsr::getBeginY() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + int y = pDsrHead->beginY; + return y; +} + +int DataFileDsr::getBeginXYAndAnchorXY(QString path, int &beginX, int &beginY, int &anchorX, int &anchorY) +{ + QFileInfo file(path); + if (!file.exists() || !file.isFile()) + { + return -1; + } + + QFile rdfile(path); + if(!rdfile.open(QIODevice::ReadOnly)) + { + return -1; + } + + QByteArray fileData = rdfile.readAll(); + + int size = fileData.size(); + if (size <= (int)(sizeof(DsrHead))) + { + return -1; + } + + DsrHead * pDsrHead = (DsrHead *)((fileData.data())); + DsrStep * dsrDataBeg = (DsrStep *)((fileData.data() + pDsrHead->dataBegin)); + + anchorX = pDsrHead->anchorX; + anchorY = pDsrHead->anchorY; + //起始点坐标等于定位点+起始点+第一针的坐标 + beginX = pDsrHead->anchorX-pDsrHead->startX-dsrDataBeg->dx; + beginY = pDsrHead->anchorY+pDsrHead->startY+dsrDataBeg->dy; + + rdfile.close(); + + return 0; +} + +void DataFileDsr::getSwitchTable(u8 *table) +{ + if(m_embAbsData.size() <= 0) + { + return; + } + + DataDs16FileHead * pDsrHead = (DataDs16FileHead *)((m_embAbsData.data())); + memcpy(table,pDsrHead->switchTable,sizeof(pDsrHead->switchTable)); +} + +int DataFileDsr::checkFileCryption() +{ + int encryption = 0; + + int size = m_fileData.size(); + if (size <= (int)(sizeof(DsrHead))) + { + qDebug("dsr size less then headsize"); + return -1; + } + DsrHead * dsrHead = (DsrHead *)(m_fileData.data()); + if(dsrHead->dataBegin > (u32)size) + { + qDebug("dsr dataBegin err"); + return -1; + } + size -= dsrHead->dataBegin; + if (size <= 0) + { + qDebug("dsr dataBegin err"); + return -1; + } + int stepsize = size/sizeof(DsrStep); + if (stepsize <= 0) + { + qDebug("dsr data size err"); + return -1; + } + + if (dsrHead->cryWord != 0) + { + encryption = 1; + } + + return encryption; +} + +void DataFileDsr::getDsrMinMax() +{ + loadFile(); // 如果数据未读取,重新读取 + + int size = m_fileData.size(); + if (size <= (int)(sizeof(DsrHead))) + { + qDebug("dsr size less then headsize"); + return; + } + + DsrHead * dsrHead = (DsrHead *)(m_fileData.data()); + if(dsrHead->dataBegin > (u32)size) + { + qDebug("dsr dataBegin err"); + return; + } + size -= dsrHead->dataBegin; + if (size <= 0) + { + qDebug("dsr dataBegin err"); + return; + } + + float ver = *((float*)(&dsrHead->verCode)); + if(ver == DSR_VERSION_5_5 && dsrHead->shapeAddress != 0) + { + int addSize = m_fileData.size() - dsrHead->shapeAddress; + if (addSize <= 0) + { + qDebug("dsr shapeAddress err"); + return; + } + + size = dsrHead->shapeAddress - dsrHead->dataBegin; + if (size <= 0) + { + qDebug("dsr dataBegin err"); + return; + } + } + + int stepsize = size/sizeof(DsrStep); + if (stepsize <= 0) + { + qDebug("dsr data size err"); + return; + } + + DsrStep * dsrDataBeg = (DsrStep *)((m_fileData.data() + dsrHead->dataBegin)); + DsrStep * dsrDataPtr = dsrDataBeg; + m_maxX = S32_MIN; + m_maxY = S32_MIN; + m_minY = S32_MAX; + m_minX = S32_MAX; + + BYTE ctrlByte; + + long curPitX = 0; + long curPitY = 0; + + int i = 0; + do + { + if (i < stepsize) + { + ctrlByte = dsrDataPtr->ctrl; + + if ( ctrlByte == DATA_EMB || + ctrlByte == DSR_SEWING || + ctrlByte == DATA_JUMP || + ctrlByte == DATA_OFFSET || + ctrlByte == DATA_PUNCH || + ctrlByte == DATA_DRAWING || + 0 ) + { + curPitX = dsrDataPtr->dx; + curPitY = dsrDataPtr->dy; + } + dsrDataPtr++; + i++; + } + else + { + break; + } + + if (curPitX > m_maxX) + { + m_maxX = curPitX; + } + if (curPitX < m_minX) + { + m_minX = curPitX; + } + if (curPitY > m_maxY) + { + m_maxY = curPitY; + } + if (curPitY < m_minY) + { + m_minY = curPitY; + } + + }while(1); + + return; +} + +int DataFileDsr::checkDefaultSwitchTable(int colornum) +{ + //loadFile(); // 如果数据未读取,重新读取 + + int size = m_fileData.size(); + if (size <= (int)(sizeof(DsrHead))) + { + qDebug("dst size less then headsize"); + return -1; + } + DsrHead * dsrHead = (DsrHead *)(m_fileData.data()); + if(dsrHead->dataBegin > (u32)size) + { + qDebug("dsr dataBegin err"); + return -1; + } + size -= dsrHead->dataBegin; + int stepsize = size/sizeof(DsrStep); + if (stepsize <= 0) + { + qDebug("dst data size err"); + return -1; + } + + DsrHead * pDsrHead = (DsrHead *)((m_fileData.data())); + + int i; + if (colornum < 1) + { + colornum = 1; + } + if (colornum > BF_SW_ND) + { + colornum = BF_SW_ND; + } + for (i = 0; i < colornum; i++) + { + if (pDsrHead->switchTable[i] != 0x20) + { + break; + } + } + if (i < colornum) // 不全部是0x20, 可能设置过色序 + { + for (i = 0; i < colornum; i++) + { + if (pDsrHead->switchTable[i] != 0x00) + { + break; + } + } + } + + if (i >= colornum && colornum > 1) // 全部是0x20 或 全部是0, 未设置过色序 + { + for (i = 0; i < colornum; i++) + { + pDsrHead->switchTable[i] = i; // 默认色序 + } + saveFile(); // 保存文件 + } + + return 0; +} diff --git a/datafile/datafiledsr.h b/datafile/datafiledsr.h new file mode 100644 index 0000000..858cf06 --- /dev/null +++ b/datafile/datafiledsr.h @@ -0,0 +1,225 @@ +#ifndef DATAFILEDSR_H +#define DATAFILEDSR_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include "math.h" +#include +#include + +#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 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 diff --git a/datafile/datafiledst.cpp b/datafile/datafiledst.cpp new file mode 100644 index 0000000..2ec0fe3 --- /dev/null +++ b/datafile/datafiledst.cpp @@ -0,0 +1,1168 @@ +#include "datafiledst.h" + + +DataFileDst::DataFileDst() +{ + m_colorNum = 0;//颜色数 + m_pColor = NULL;//颜色rgb值 +} + +DataFileDst::~DataFileDst() +{ +} + +void DataFileDst::initColor(int cnum, QRgb *pColor) +{ + m_colorNum = cnum;//颜色数 + m_pColor = pColor;//颜色rgb值 + qDebug()<<"m_colorNum"<itemNums; +} + +int DataFileDst::getColorNums() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDstHead->colorNumber; +} + +//测试fileid用,目前这个函数没用到 +int DataFileDst::getFileid() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDstHead->fileid; +} + +int DataFileDst::getDatWidth() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + return (pDstHead->maxX - pDstHead->minX); +} + +int DataFileDst::getDatHeight() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + return (pDstHead->maxY - pDstHead->minY); +} + +int DataFileDst::getMaxX() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDstHead->maxX; +} + +int DataFileDst::getMinX() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDstHead->minX; +} + +int DataFileDst::getMaxY() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDstHead->maxY; +} + +int DataFileDst::getMinY() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + return pDstHead->minY; +} + +int DataFileDst::getAnchorX() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + int x = pDstHead->anchorX; + return x; +} + +int DataFileDst::getAnchorY() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + int y = pDstHead->anchorY; + return y; +} + +int DataFileDst::getBeginX() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + int x = pDstHead->beginX; + return x; +} + +int DataFileDst::getBeginY() +{ + if(m_embAbsData.size() <= 0) + { + return 0; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + int y = pDstHead->beginY; + return y; +} + +int DataFileDst::getBeginXYAndAnchorXY(QString path, int &beginX, int &beginY, int &anchorX, int &anchorY) +{ + QFileInfo file(path); + if (!file.exists() || !file.isFile()) + { + return -1; + } + + QFile rdfile(path); + if(!rdfile.open(QIODevice::ReadOnly)) + { + return -1; + } + + QByteArray fileData = rdfile.readAll(); + rdfile.close(); + + int size = fileData.size(); + if (size <= (int)(sizeof(DstHead))) + { + return -1; + } + + DstHead * pDstHead = (DstHead *)((fileData.data())); + beginX = pDstHead->startX; + beginY = pDstHead->startY; + anchorX = pDstHead->anchorX; + anchorY = pDstHead->anchorY; + + return 0; +} + +void DataFileDst::getSwitchTable(u8 *table) +{ + if(m_embAbsData.size() <= 0) + { + return; + } + + DataDs16FileHead * pDstHead = (DataDs16FileHead *)((m_embAbsData.data())); + memcpy(table,pDstHead->switchTable,sizeof(pDstHead->switchTable)); +} + +// 检查并设置默认换色表 +int DataFileDst::checkDefaultSwitchTable(int colornum) +{ + //loadFile(); // 如果数据未读取,重新读取 + + int size = m_fileData.size(); + if (size <= (int)(sizeof(DstHead))) + { + qDebug("dst size less then headsize"); + return -1; + } + size -= sizeof(DstHead); + int stepsize = size/sizeof(DstStep); + if (stepsize <= 0) + { + qDebug("dst data size err"); + return -1; + } + + DstHead * pDstHead = (DstHead *)((m_fileData.data())); + + int i; + if (colornum < 1) + { + colornum = 1; + } + if (colornum > BF_SW_ND) + { + colornum = BF_SW_ND; + } + for (i = 0; i < colornum; i++) + { + if (pDstHead->switchTable[i] != 0x20) + { + break; + } + } + if (i < colornum) // 不全部是0x20, 可能设置过色序 + { + for (i = 0; i < colornum; i++) + { + if (pDstHead->switchTable[i] != 0x00) + { + break; + } + } + } + + if (i >= colornum && colornum > 1) // 全部是0x20 或 全部是0, 未设置过色序 + { + for (i = 0; i < colornum; i++) + { + pDstHead->switchTable[i] = i; // 默认色序 + } + saveFile(); // 保存文件 + } + + return 0; +} + +// 转换为绝对坐标数据,同时得到最大最小值 +void DataFileDst::convertDataToAbs() +{ + QByteArray ds4Data;//相对坐标 + m_embAbsData.clear(); + loadFile(); // 如果数据未读取,重新读取 + + int size = m_fileData.size(); + if (size <= (int)(sizeof(DstHead))) + { + qDebug("dst size less then headsize"); + return; + } +// int dstHeadSize = sizeof(DstHead); +// qDebug()<<"dstHeadSize"<= 0) + { + if(ctrl == DATA_JUMP) + { + jumpNeedleNum++; + } + if (ctrl == DATA_CHGND) // 换色 + { + colornum++; + } + + memcpy(&(pData[stepidx]), &ds4Item, sizeof(Ds4Item)); + stepidx++; + } + + dstDataPtr++; + i++; + } + else + { + break; + } + }while(1); + + //qDebug()<<"Ds4Item end"; + + //再将相对坐标转换为绝对坐标---开始 + ds4Data.append((char *)pData, stepidx*sizeof(Ds4Item));//相对坐标字节数组 + u32 fileID = 0; + fileID = calcCheckSum32((u8 *)(ds4Data.data()) , ds4Data.length()); // 原始数据累加校验和 + + QByteArray absItemAry; + absItemAry.clear(); + + DsAbsItem absItem; + memset(&absItem,0,sizeof(DsAbsItem)); + u8 ctrlByte; + u8 attrByte; + int ddx, ddy; + + m_maxX = S32_MIN; + m_maxY = S32_MIN; + m_minY = S32_MAX; + m_minX = S32_MAX; + + Ds4Item * pDs4Data = (Ds4Item *)(ds4Data.data()); + Ds4Item * ds4DataPtr = pDs4Data; + + int begX = pDstHead->startX;//起始点 + int begY = pDstHead->startY; + int begR = 0; + int anchorX = pDstHead->anchorX;//定位点 + int anchorY = pDstHead->anchorY; + + s32 ax = 0;//起始点 + s32 ay = 0; + s32 ar = 0; + + Ds4Item * ds4DataTemp = (Ds4Item *)(ds4Data.data()); // ljs + + int ds4StepSize = ds4Data.size()/sizeof(Ds4Item); + + int runflag = 0; + + for (int i = 0; i < ds4StepSize; i++) + { + // 读入一个针步数据 + ctrlByte = ds4DataPtr->ctrl; + attrByte = ds4DataPtr->attr; + ddx = ds4DataPtr->dx * DATAFACTOR; + ddy = ds4DataPtr->dy * DATAFACTOR; + + if ((attrByte & 0x80) != 0) + { + ddx *= -1; + } + if ((attrByte & 0x40) != 0) + { + ddy *= -1; + } + + ddx *= DST_DATADIRX; + ddy *= DST_DATADIRY; + + ax += ddx; + ay += ddy; + //ar = atan2(ddy,ddx) * 10000; + double tar = atan2(ddy,ddx); + ar = (tar * 10000+0.5*(tar>0?1:-1)); + + if(ctrlByte == DATA_JUMP) + { + if (runflag == 0) + { + runflag = 1; + } + runflag++; + } + else if(ctrlByte == DATA_EMB || ctrlByte == DATA_PUNCH || ctrlByte == DATA_SEWING)//第一针不转换为跳针 + { + if ((runflag == 0 || runflag > 3) && (i >= 0)) // 第一个运针是入针 + { + ds4DataPtr++; + u8 ctl = ds4DataPtr->ctrl; + if(ctl == DATA_EMB || ctl == DATA_PUNCH || ctl == DATA_SEWING)//下一针还为绣花针步时才转换为跳针 + { + ctrlByte = DATA_JUMP; + } + ds4DataPtr--; + runflag = 1; + } + //else if (i == 0 && ddx == 0 && ddy == 0) // 第一针,入针,向后扫描,如果有连续的三个跳针,则将第一针入针转换为跳针 ljs + else if (i == 0) // 20230511 第一针,入针,向后扫描,如果有连续的三个跳针,则将第一针入针转换为跳针 ljs + { + int count = 0; + do + { + ds4DataTemp++; + if (ds4DataTemp->ctrl == DATA_JUMP) + { + count++; + if (ds4DataTemp->dx == 0 && ds4DataTemp->dy == 0) // 空跳,直接变成跳针 + { + count += 2; + } + } + else + { + break; + } + }while(1); + if (count >= 3) + { + ctrlByte = DATA_JUMP; + runflag = 2; + } + else + { + runflag = 1; + } + } + else + { + runflag = 1; + } + } + else if (ctrlByte == DATA_CHGND) // 换色 + { + runflag = 10; + } + else + { + runflag = 0; + } + + //第一针后面如果为大位移就将第二针下针转换为跳针 + if(i == 0) + { + ds4DataPtr++; + int cddx = ds4DataPtr->dx * DATAFACTOR; + int cddy = ds4DataPtr->dy * DATAFACTOR; + int len = sqrt(cddx*cddx+cddy*cddy); + if(len >= 600)//6毫米为界限 + { + runflag = 3; + } + ds4DataPtr--; + } + + //第一针空针转换为跳针,为了避免第一针锁针添加失败 + if(i == 0 && ddx == 0 && ddy == 0) + { + ctrlByte = DATA_JUMP; + } + + //中间数据 + absItem.ctrl = ctrlByte; + absItem.attr = attrByte & ~(0x80|0x40); + absItem.ax = ax; + absItem.ay = ay; + absItem.ar = ar; + + if (ax > m_maxX) + { + m_maxX = ax; + } + if (ax < m_minX) + { + m_minX = ax; + } + if (ay > m_maxY) + { + m_maxY = ay; + } + if (ay < m_minY) + { + m_minY = ay; + } + + absItemAry.append((char*)&absItem,sizeof(DsAbsItem)); + + ds4DataPtr++; + } + + //int newstepnum = ds4StepSize; // 转换后的数据长度 + int newstepnum = ds4StepSize; // 转换后的数据长度 ljs + + //qDebug()<<"DsAbsItem end"; + + //再将相对坐标转换为绝对坐标---结束 + + //qDebug()<<"dhead begin"; + // 文件头转换 + QString name = getFileFullName(); + int namelen = name.size(); + if (namelen > HEAD_NAME_STR_LEN) + { + namelen = HEAD_NAME_STR_LEN; + } + QByteArray array = name.toLocal8Bit().data(); + memcpy(dhead.fileName, array, namelen); // 文件名称 + dhead.dataSize = newstepnum*sizeof(DsAbsItem); // 数据字节数 + dhead.itemNums = newstepnum; // 数据项个数 + dhead.bytesPerItem = sizeof(DsAbsItem); // 每项占的字节数 + dhead.bytesPerBlk = MAX_EXDP_LEN; // 数据内容划分块大小 + dhead.dataChecksum = calcCheckSum32((u8 *)(absItemAry.data()) , dhead.dataSize); // 数据累加校验和 + dhead.checkCrc = calcCrc16((u8 *)(&dhead), HEAD_FIX_INFO_LEN); // 前面6个字段的CRC校验,(6个字段分别为:文件名称,字节数,项个数,每项字节数,每块字节数,数据累加和的CRC校验值) + dhead.fileid = fileID; + //qDebug()<<"dhead 1"; + + dhead.anchorX = anchorX; // 定位点坐标X + dhead.anchorY = anchorY; // 定位点坐标Y + dhead.beginX = begX; // 数据起点坐标X + dhead.beginY = begY; // 数据起点坐标Y, + dhead.beginR = begR; // 数据起点坐标R, + dhead.minX = m_minX; + dhead.maxX = m_maxX; + dhead.minY = m_minY; + dhead.maxY = m_maxY; // 轮廓范围,使用重新计算之后的值 + dhead.colorNumber = colornum; // 颜色数 + //dhead.jumpNeedleNum = jumpNeedleNum;// 跳针数 + dhead.offsetX = pDstHead->offsetX; + dhead.offsetY = pDstHead->offsetY; + //dst的花版 + //dhead.patternType = 1; + //qDebug()<<"m_maxX"<switchTable, BF_SW_ND); + + //qDebug()<<"dhead 3"; + // 保存文件头到数组中 + m_embAbsData.append((char *)(&dhead), sizeof(DataDs16FileHead)); + + //qDebug()<<"dhead 4"; + // 保存数据到数组中 + //qDebug()<<"newstepnum"<startX = x; + pDstHead->startY = y; + } + else + { + pDstHead->anchorX = x; + pDstHead->anchorY = y; + } + + QFile wfile(m_fileFullPathName); + if(!wfile.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + qDebug() << "open file fail when read, path =" << m_fileFullPathName; + return; + } + + wfile.write(m_fileData); + wfile.close(); +} + +//将fcg里的 偏移点XY写在dst头文件里 +void DataFileDst::writeOffsetXYMoveToFile(s32 offsetX,s32 offsetY) +{ + if(m_fileData.size() <= 0) + { + return; + } + + DstHead * pDstHead = (DstHead *)((m_fileData.data())); + + pDstHead->offsetX = offsetX; + pDstHead->offsetY = offsetY; + + QFile wfile(m_fileFullPathName); + if(!wfile.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + qDebug() << "open file fail when read, path =" << m_fileFullPathName; + return; + } + + wfile.write(m_fileData); +#ifdef Q_OS_LINUX + system("sync"); +#endif + wfile.close(); +} + +int DataFileDst::checkDstFile() +{ + loadFile(); // 如果数据未读取,重新读取 + + int size = m_fileData.size(); + if (size <= (int)(sizeof(DstHead))) + { + qDebug("dsr size less then headsize"); + return -1; + } + + size -= sizeof(DstHead); + int stepsize = size/sizeof(DstStep); + if (stepsize <= 0) + { + qDebug("dst data size err"); + return -1; + } + + if (stepsize > PATTERN_LARGE_NEEDLES)//128万针 + { + qDebug("dsr data size big"); + return -2; + } + + return stepsize; +} +//----------------------------------------------------------------------- + +// 生成预览文件 +int DataFileDst::createPreviewImage(QImage * pImg, int saveflag, int penwidth, int reDraw) +{ +#if(1) + if(reDraw == 0)//图片存在则不重画 + { + // 图片是否存在,存在则返回 + QString previewPath = getFileFullPathName() + ".preview.png"; + QFile imageFile(previewPath); + if (imageFile.exists()) + { + return 0; + } + } +#endif + + int newimgflag = 0; + QImage * pImage; + int width, height; + if (pImg == NULL) + { + width = DST_PREVIEW_WIDTH; + height = DST_PREVIEW_HEIGHT; + pImage = new QImage(width, height, IMAGE_TYPE); + newimgflag = 1; + } + else + { + pImage = pImg; + } + + width = pImage->width(); + height = pImage->height(); + if (width <= DST_PREVIEW_SIDE*2 || height <= DST_PREVIEW_SIDE*2) + { + if (pImage != NULL && newimgflag == 1) + { + delete pImage; + } + qDebug("preview img too small"); + return -1; + } + + memset(pImage->bits(), 0x00, pImage->byteCount()); + + QPainter painter(pImage); + QColor backcolor(255, 255, 255, 0); // 透明背景 + + // 背景 + QPen pen; + pen.setWidth(penwidth); + pen.setColor(backcolor); + painter.setPen(pen); + painter.setBrush(backcolor); + painter.drawRect(0, 0, width, height); + + QColor color = QColor(Qt::blue); + pen.setColor(color); + painter.setPen(pen); + + // 图形 + //qDebug()<<"convertDataToAbs defore"; + convertDataToAbs(); // 转换为绝对坐标数据 + //qDebug()<<"convertDataToAbs end"; + + // absdat数据 + int size = m_embAbsData.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("2 data less then head size"); + return -1; + } + DataDs16FileHead * pAbsHead = (DataDs16FileHead *)(m_embAbsData.data()); + int datasize = size - sizeof(DataDs16FileHead); + if (datasize <= 0) + { + qDebug("absdat dataBegin err"); + return -1; + } + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("absdat data size err"); + return -1; + } + DsAbsItem * pData = (DsAbsItem *)(m_embAbsData.data() + sizeof(DataDs16FileHead)); + DsAbsItem * absDataPtr = pData; + //-------- + + // 图形显示区域 + int dpminx = DST_PREVIEW_SIDE; + int dpmaxx = width - DST_PREVIEW_SIDE; + int dpminy = DST_PREVIEW_SIDE; + int dpmaxy = height - DST_PREVIEW_SIDE; + + // 计算缩放系数 + double factor, temp; + if ((dpmaxx - dpminx) <= 0 || (dpmaxy - dpminy) <= 0) + { + return -1; + } + + factor = (double)(fabs(m_maxX - m_minX)) / (dpmaxx - dpminx); // 按x计算的缩放系数 + temp = (double)(fabs(m_maxY - m_minY)) / (dpmaxy - dpminy); // 按x计算的缩放系数 + + if (temp >= factor) // 使用较大的缩放系数 + { + factor = temp; + } + + // 计算显示参数,按照图形的实际位置显示(数据坐标零点对应图形中心) + int dpx = (int)((dpminx+dpmaxx)/2 - ((m_maxX+m_minX)/factor)/2); + int dpy = (int)((dpminy+dpmaxy)/2 - ((m_maxY+m_minY)/factor)/2); + + // 显示花样图形 + u8 ctrlByte; + int dx; + int dy; + int colorIdx; + int oldcolor; + colorIdx = 0; + oldcolor = -1; + + double datposx, datposy; + int curx, cury, prex, prey; + + datposx = pAbsHead->beginX; + datposy = pAbsHead->beginY; + + curx = (datposx) / factor + dpx; + cury = (datposy) / factor + dpy; + + if (DST_SHOWDIRX == -1) + { + curx = (width)-curx; + } + if (DST_SHOWDIRY == -1) + { + cury = (height)-cury; + } + + absDataPtr = pData; + + for (int i = 0; i < stepsize; i++) + { + // 读入一个针步数据 + ctrlByte = absDataPtr->ctrl; + + if ( ctrlByte == DATA_EMB || + ctrlByte == DATA_SEWING || + ctrlByte == DATA_PUNCH || + 0 ) + { + prex = curx; + prey = cury; + + dx = absDataPtr->ax; + dy = absDataPtr->ay; + + datposx = dx; + datposy = dy; + + curx = (datposx) / factor + dpx; + cury = (datposy) / factor + dpy; + + if (DST_SHOWDIRX == -1) + { + curx = (width)-curx; + } + if (DST_SHOWDIRY == -1) + { + cury = (height)-cury; + } + + if (oldcolor != colorIdx) + { + int cidx = pAbsHead->switchTable[colorIdx % BF_SW_ND]; + int cnum = m_colorNum; + cnum /= sizeof(QRgb); + if (cnum > BF_SW_ND) + { + cnum = BF_SW_ND; + } + QColor embcolor; + if (cnum != 0) + { + cidx %= cnum; + QRgb * pColor = m_pColor; + if(pColor != NULL) + { + embcolor.setRgb(pColor[cidx]); + } + else + { + embcolor = QColor(Qt::green); + } + } + else + { + embcolor = QColor(Qt::green); + } + + pen.setColor(embcolor); + painter.setPen(pen); + oldcolor = colorIdx; + } + + if(i != 0) + { + painter.drawLine(prex, prey, curx, cury); + } + } + //如果连续两步都是跳针,则过滤掉 + else if (ctrlByte == DATA_JUMP) + { + DsAbsItem * JumpAbsDataPtr = pData; + JumpAbsDataPtr = absDataPtr - 1; + u8 beforectrlByte = JumpAbsDataPtr->ctrl; + + JumpAbsDataPtr = absDataPtr + 2; + u8 nextctrlByte = JumpAbsDataPtr->ctrl; + + prex = curx; + prey = cury; + + dx = absDataPtr->ax; + dy = absDataPtr->ay; + + datposx = dx; + datposy = dy; + + curx = (datposx) / factor + dpx; + cury = (datposy) / factor + dpy; + + if (DST_SHOWDIRX == -1) + { + curx = (width)-curx; + } + if (DST_SHOWDIRY == -1) + { + cury = (height)-cury; + } + + if (oldcolor != colorIdx) + { + int cidx = pAbsHead->switchTable[colorIdx % BF_SW_ND]; + int cnum = m_colorNum; + cnum /= sizeof(QRgb); + if (cnum > BF_SW_ND) + { + cnum = BF_SW_ND; + } + QColor embcolor; + if (cnum != 0) + { + cidx %= cnum; + QRgb * pColor = m_pColor; + if(pColor != NULL) + { + embcolor.setRgb(pColor[cidx]); + } + else + { + embcolor = QColor(Qt::green); + } + } + else + { + embcolor = QColor(Qt::green); + } + + pen.setColor(embcolor); + painter.setPen(pen); + oldcolor = colorIdx; + } + + if(beforectrlByte == DATA_JUMP || nextctrlByte == DATA_JUMP) + { + //该针上下两针都是跳针则不画线 + } + else + { + if(i != 0) + { + painter.drawLine(prex, prey, curx, cury); + } + } + } + //// + + absDataPtr++; + } + + // 保存成文件 + QString preview = getFileFullPathName(); + if (saveflag != 0 && preview.isEmpty() == false) + { +#if (1) + preview += ".preview.png"; + pImage->save(preview, "png"); +#endif + } + + if (pImage != NULL && newimgflag == 1) + { + delete pImage; + } + + return 0; +} + +#define DST_DAT_DIRX (-1) // X向DST数据坐标和绝对数据坐标的差异 +#define DST_DAT_DIRY (1) // Y向DST数据坐标和绝对数据坐标的差异 + +// 针步转换 +int DataFileDst::changeDstStep(DstStep * pDststep, Ds4Item & ds4step) +{ + int dx, dy; + u8 c1, c2, c3; + u8 ctrl, attr; + + if (pDststep == NULL) + { + return -1; + } + + c1 = pDststep->c1; + c2 = pDststep->c2; + c3 = pDststep->c3; + + dx = 0; + dy = 0; + + if ((c1&0x08) != 0) { dx -= 9; } + if ((c1&0x04) != 0) { dx += 9; } + if ((c1&0x02) != 0) { dx -= 1; } + if ((c1&0x01) != 0) { dx += 1; } + if ((c2&0x08) != 0) { dx -= 27; } + if ((c2&0x04) != 0) { dx += 27; } + if ((c2&0x02) != 0) { dx -= 3; } + if ((c2&0x01) != 0) { dx += 3; } + if ((c3&0x08) != 0) { dx -= 81; } + if ((c3&0x04) != 0) { dx += 81; } + + if ((c1&0x10) != 0) { dy -= 9; } + if ((c1&0x20) != 0) { dy += 9; } + if ((c1&0x40) != 0) { dy -= 1; } + if ((c1&0x80) != 0) { dy += 1; } + if ((c2&0x10) != 0) { dy -= 27; } + if ((c2&0x20) != 0) { dy += 27; } + if ((c2&0x40) != 0) { dy -= 3; } + if ((c2&0x80) != 0) { dy += 3; } + if ((c3&0x10) != 0) { dy -= 81; } + if ((c3&0x20) != 0) { dy += 81; } + + if (c3 == 0xF3 && dx == 0 && dy == 0) + { + ctrl = DATA_END; // 结束 + } + else if ((c3&0xc3) == 0x03) // 运针 + { + ctrl = DATA_PUNCH; + } + else if ((c3&0xc3) == 0x83) // 跳针 + { + ctrl = DATA_JUMP; + } + else if ((c3&0xc3) == 0xC3) // 换色 + { + ctrl = DATA_CHGND; + } + else if ((c3&0xc3) == 0x43) // 开关亮片码 + { + qDebug("Sequin switch, not support, c1=0x%x, c2=0x%x, c3=0x%x", c1, c2, c3); // 不合法的DST + return -2; + } + else + { + qDebug("not know dst step, c1=0x%x, c2=0x%x, c3=0x%x", c1, c2, c3); // 不合法的DST + return -3; + } + + // 添加针步 + attr = 0; + + dx *= DST_DAT_DIRX; // X向显示坐标和数据坐标的差异 + dy *= DST_DAT_DIRY; // Y向显示坐标和数据坐标的差异 + + if (dx < 0) { attr |= 0x80; } + if (dy < 0) { attr |= 0x40; } + + ds4step.ctrl = ctrl; + ds4step.attr = attr; + ds4step.dx = abs(dx); + ds4step.dy = abs(dy); + + return 0; +} diff --git a/datafile/datafiledst.h b/datafile/datafiledst.h new file mode 100644 index 0000000..9e10ade --- /dev/null +++ b/datafile/datafiledst.h @@ -0,0 +1,153 @@ +#ifndef DATAFILEDST_H +#define DATAFILEDST_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include "math.h" +#include +#include +#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 diff --git a/datafile/dsrcryption.cpp b/datafile/dsrcryption.cpp new file mode 100644 index 0000000..229c7d8 --- /dev/null +++ b/datafile/dsrcryption.cpp @@ -0,0 +1,319 @@ +#include "dsrcryption.h" +#include +#include + +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; +} + + + + + + + diff --git a/datafile/dsrcryption.h b/datafile/dsrcryption.h new file mode 100644 index 0000000..cc970f7 --- /dev/null +++ b/datafile/dsrcryption.h @@ -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 diff --git a/datafile/embdata.cpp b/datafile/embdata.cpp new file mode 100644 index 0000000..1a05dc9 --- /dev/null +++ b/datafile/embdata.cpp @@ -0,0 +1,2876 @@ +#include "embdata.h" + +EmbData::EmbData() +{ + m_pDs16Head = new DataDs16FileHead(); + m_tabelColorNum = 0; + m_pColor = NULL; + memset(m_needleColorTable,0,sizeof(m_needleColorTable)); + clear(); +} + +EmbData::~EmbData() +{ + clear(); + if(m_pDs16Head != NULL) + { + delete m_pDs16Head; + } +} + +void EmbData::clear() +{ + m_maxX = 0; + m_minX = 0; + m_maxY = 0; + m_minY = 0; + + m_greyColorBeg = 0; + m_greyColorEnd = 0; + + m_spaceX = 0; + m_spaceY = 0; + + m_factor = 0; + + m_penX = 0; + m_penY = 0; + m_stitchSplitLength = 0; + + m_dataAbsList.clear(); + m_ds16Data.clear(); + + m_editedflag = 0; + m_filePath.clear(); + + memset(m_pDs16Head,0,sizeof(DataDs16FileHead)); +} + +void EmbData::setNeedleColorTable(int colorIdx, int colorvalue) +{ + if(colorIdx > TOTAL_NEEDLE_NUM - 1) + { + return; + } + m_needleColorTable[colorIdx] = colorvalue; +} + +void EmbData::initColor(int cnum, QRgb *pColor) +{ + m_tabelColorNum = cnum; + m_pColor = pColor; +} + +QByteArray & EmbData::getDsDat() +{ + //qDebug()<<"m_editedflag"<fileid = fileid; + if((u32)m_ds16Data.size() > sizeof(DataDs16FileHead)) + { + memcpy(m_ds16Data.data(),(char*)m_pDs16Head, sizeof(DataDs16FileHead)); + } + } +} + + +// 添加锁针针步 +int EmbData::addLockStitchs(int locktimes, int locksteps, int lockstepsize) +{ + if (locktimes <= 0 || locksteps <= 0 || lockstepsize <= 0) + { + return -1; + } + + int size = m_absData.size(); + if (size <= 0) + { + return -1; + } + + QByteArray tgtdsdat; // 添加后的绝对坐标数据 + tgtdsdat.clear(); + + // 文件头 + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("dat size err"); + return -1; + } + + DataDs16FileHead * pHead = (DataDs16FileHead *)(m_absData.data()); + DsAbsItem * pData = (DsAbsItem *)(m_absData.data() + sizeof(DataDs16FileHead)); + DsAbsItem * absDataPtr = pData; + + tgtdsdat.append((char*)pHead, sizeof(DataDs16FileHead)); + //pHead = (DataDs16FileHead *)(tgtdsdat.data()); + + int runflag = 0; + for (int j = 0; j < stepsize; j++) + { + if (absDataPtr->ctrl == DATA_CHGND) + { + runflag = 10; + } + else if (absDataPtr->ctrl == DATA_JUMP) + { + runflag++; + } + else if (absDataPtr->ctrl == DATA_EMB || absDataPtr->ctrl == DATA_SEWING) + { + if ((runflag == 0 || runflag > 3)) + { + // 添加锁针 + int findnext = 0; + if (j > 0) + { + DsAbsItem * prePtr = absDataPtr-1; // 上一个点 + if (prePtr->ctrl != DATA_EMB) + { + double dx = absDataPtr->ax - prePtr->ax; + double dy = absDataPtr->ay - prePtr->ay; + double len = sqrt(dx*dx + dy*dy); + if (len <= 0) + { + findnext = 1; + } + else + { + int thislocktimes = locktimes; + int thislocksteps = locksteps; + int thislockstepsize = lockstepsize; + while (thislockstepsize * thislocksteps > len) + { + thislocksteps--; + } + if (thislocksteps == 0) + { + thislocktimes = 1; + thislocksteps = 1; + thislockstepsize = len; + } + DsAbsItem nitem; + memset(&nitem,0,sizeof(DsAbsItem)); + + u8 ctrl = absDataPtr->ctrl; + u8 attr = 0; // absDataPtr->attr; + double axbase = prePtr->ax; + double aybase = prePtr->ay; + double arbase = absDataPtr->ar; + + double adx = thislockstepsize * dx / len; + double ady = thislockstepsize * dy / len; + int addfst = 1; + int addlast = 1; + thislocktimes= (thislocktimes+1) / 2; + for (int k = 0; k < thislocktimes; k++) + { + if (k == thislocktimes-1) + { + addlast = 0; + } + for (int s = addfst; s <= thislocksteps; s++) + { + nitem.ctrl = ctrl; + nitem.attr = attr; + nitem.ax = axbase + adx*s; + nitem.ay = aybase + ady*s; + nitem.ar = arbase; + tgtdsdat.append((char*)(&nitem), sizeof(DsAbsItem)); + } + for (int s = thislocksteps-1; s >= addlast; s--) + { + nitem.ctrl = ctrl; + nitem.attr = attr; + nitem.ax = axbase + adx*s; + nitem.ay = aybase + ady*s; + nitem.ar = arbase; + tgtdsdat.append((char*)(&nitem), sizeof(DsAbsItem)); + } + addfst = 0; + } + } + } + } + else + { + findnext = 1; + } + + if (findnext != 0) + { + int nst = 1; + do + { + if (j+nst < stepsize) + { + DsAbsItem * nextPtr = absDataPtr+nst; // 下一个点 + if (nextPtr->ctrl == DATA_EMB) + { + int thislocktimes = locktimes; + int thislocksteps = locksteps; + int thislockstepsize = lockstepsize; + DsAbsItem nitem; + memset(&nitem,0,sizeof(DsAbsItem)); + + double dx = nextPtr->ax - absDataPtr->ax; + double dy = nextPtr->ay - absDataPtr->ay; + double len = sqrt(dx*dx + dy*dy); + if (len <= 0) + { + nst++; + continue; + } + while (thislockstepsize * thislocksteps > len) + { + thislocksteps--; + } + if (thislocksteps == 0) + { + thislocktimes = 1; + thislocksteps = 1; + thislockstepsize = len; + } + u8 ctrl = absDataPtr->ctrl; + u8 attr = 0; // absDataPtr->attr; + double axbase = absDataPtr->ax; + double aybase = absDataPtr->ay; + double arbase = absDataPtr->ar; + double adx = thislockstepsize * dx / len; + double ady = thislockstepsize * dy / len; + thislocktimes= (thislocktimes+1) / 2; + for (int k = 0; k < thislocktimes; k++) + { + for (int s = 0; s <= thislocksteps; s++) + { + nitem.ctrl = ctrl; + nitem.attr = attr; + nitem.ax = axbase + adx*s; + nitem.ay = aybase + ady*s; + nitem.ar = arbase; + tgtdsdat.append((char*)(&nitem), sizeof(DsAbsItem)); + } + for (int s = thislocksteps-1; s > 0; s--) + { + nitem.ctrl = ctrl; + nitem.attr = attr; + nitem.ax = axbase + adx*s; + nitem.ay = aybase + ady*s; + nitem.ar = arbase; + tgtdsdat.append((char*)(&nitem), sizeof(DsAbsItem)); + } + } + break; + } + else + { + break; + } + } + }while(1); + } + } + runflag = 1; + } + else if (absDataPtr->ctrl == DATA_CUTTRD) + { + runflag = 10; + } + else + { + runflag = 0;//混合绣时需要改这里 + } + + tgtdsdat.append((char*)absDataPtr, sizeof(DsAbsItem)); + + absDataPtr++; + } + + m_absData.clear(); + m_absData = tgtdsdat; + + m_editedflag = 1; + return 0; +} + +int EmbData::addContinuousRunCompensate(int value, int idx) +{ + int ptnum = 0; + int index = 0; + int idxend = 0; + + if (value == 0) + { + return 0; + } + + ptnum = m_dataAbsList.size(); + if (ptnum <= 0) + { + return 0; + } + if (idx < 0) + { + index = 0; + idxend = ptnum; + } + else + { + index = idx; + idxend = idx + 1; + } + + for (int i = index; i < idxend; i++) + { + // 文件头 + const QByteArray & ary = m_dataAbsList.at(i); + int size = ary.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("ary%d data less then head size", i); + continue; + } + + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("dat data size err"); + continue; + } + + DsAbsItem * pData = (DsAbsItem *)(ary.data() + sizeof(DataDs16FileHead)); + DsAbsItem * absDataPtr = pData; + + DsAbsItem preStep, curStep, newStep; + memset(&preStep, 0, sizeof(DsAbsItem)); + memset(&curStep, 0, sizeof(DsAbsItem)); + memset(&newStep, 0, sizeof(DsAbsItem)); + + int runflag = 0; + int cdx, cdy; + + // 数据镜像 + for (int j = 0; j < stepsize; j++) + { + memcpy(&preStep, &curStep, sizeof(DsAbsItem)); + memcpy(&curStep, absDataPtr, sizeof(DsAbsItem)); + memcpy(&newStep, &curStep, sizeof(DsAbsItem)); + + if (curStep.ctrl != preStep.ctrl) // 控制字节不同,属于不同的类型,需要停车处理 + { + if (runflag == 0) // 停车状态 + { + if (curStep.ctrl == DATA_SEWING || // 缝纫数据 + curStep.ctrl == DATA_SEWING_R || // 右机头缝纫 + curStep.ctrl == DATA_SECF_SEW || // 第二框缝纫 + curStep.ctrl == DATA_SECF_SEW_R || // 第二框右机头缝纫 + curStep.ctrl == DATA_SYNCSEW || // 同步缝纫数据 + 0) + { + cdx = 0; + cdy = 0; + runflag = 1; + } + } + else if (runflag != 0) + { + runflag = 0; + } + } + else + { + if (runflag == 1) + { + cdx = curStep.ax - preStep.ax; + cdy = curStep.ay - preStep.ay; + + newStep.ax += cdx * value / 1000; + newStep.ay += cdy * value / 1000; + + absDataPtr->ax = newStep.ax; + absDataPtr->ay = newStep.ay; + } + } + + absDataPtr++; + } + } + return 0; +} + +QByteArray EmbData::getColorTable() +{ + int colornum = 0; + QByteArray colortab; + colortab.clear(); + + if (m_editedflag != 0) + { + createDs16FromAbs(); + } + + if (m_ds16Data.size() > (int)sizeof(DataFileHead)) + { + // 文件头 + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(m_ds16Data.data()); + colornum = pDsHead->colorNumber; + colortab.append((char*)(pDsHead->switchTable), colornum); + } + + return colortab; +} + +void EmbData::appendAbsFile(QString filePath, QByteArray array, int mirror) +{ + m_filePath = filePath; + convertAbsDat(array,mirror);//是否镜像、旋转、缩放的转换 + m_dataAbsList.append(array); + m_editedflag = 1; +} + +//得到绝对坐标的maxXY和minXY +void EmbData::getAbsDatRangeXY() +{ + m_minX = S32_MAX; + m_maxX = S32_MIN; + m_minY = S32_MAX; + m_maxY = S32_MIN; + + int ptnum = m_dataAbsList.size(); + + double ax, ay; + int minx, miny, maxx, maxy; + + for (int i = 0; i < ptnum; i++) + { + const QByteArray & ary = m_dataAbsList.at(i); + int size = ary.size(); + if (size <= (int)sizeof(DataFileHead)) + { + qDebug("ary%d data less then head size", i); + continue; // 下一个 + } + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(ary.data()); + + int datasize = size - sizeof(DataDs16FileHead); + if (datasize <= 0) + { + qDebug("absdat dataBegin err"); + return; + } + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("absdat data size err"); + return; + } + DsAbsItem * pData = (DsAbsItem *)(ary.data() + sizeof(DataDs16FileHead)); + DsAbsItem * absDataPtr = pData; + //----- + + minx = S32_MAX; + maxx = S32_MIN; + miny = S32_MAX; + maxy = S32_MIN; + + // 数据区 + for (int j = 0; j < stepsize; j++) + { + ax = absDataPtr->ax; + ay = absDataPtr->ay; + + if (minx > ax) { minx = ax; } + if (maxx < ax) { maxx = ax; } + if (miny > ay) { miny = ay; } + if (maxy < ay) { maxy = ay; } + + absDataPtr++; + } + + pDsHead->minX = minx; + pDsHead->maxX = maxx; + pDsHead->minY = miny; + pDsHead->maxY = maxy; + + if (m_minX > minx) { m_minX = minx; } + if (m_minX > maxx) { m_minX = maxx; } + if (m_maxX < minx) { m_maxX = minx; } + if (m_maxX < maxx) { m_maxX = maxx; } + if (m_minY > miny) { m_minY = miny; } + if (m_minY > maxy) { m_minY = maxy; } + if (m_maxY < miny) { m_maxY = miny; } + if (m_maxY < maxy) { m_maxY = maxy; } + } +} + +void EmbData::setAbsDat(QByteArray & dat) +{ + m_absData = dat; +} + +QByteArray & EmbData::getAbsDat(void) +{ + return m_absData; +} + +void EmbData::setDs16ColorOfTable(u8 *table) +{ + if(m_pDs16Head != NULL) + { + s16 absNumber = m_dataAbsList.size(); + + QByteArray ary = m_dataAbsList.at(0); + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(ary.data()); + s16 colorNum = pDsHead->colorNumber; + + QByteArray ctable; + ctable.resize(sizeof(m_pDs16Head->switchTable)); + memset(ctable.data(),0,ctable.size()); + + for(s16 i = 0; i < absNumber; i++) + { + memcpy(ctable.data()+i*colorNum,table,colorNum); + } + + memcpy(m_pDs16Head->switchTable,ctable.data(),ctable.size());//将新的色序表重新写入文件头 + + if((u32)m_ds16Data.size() > sizeof(m_pDs16Head)) + { + memcpy(m_ds16Data.data(),(char*)m_pDs16Head, sizeof(DataDs16FileHead)); + } + } +} + +int EmbData::getPosInfoFromNeedleIdx(int stitchIdx, int &posx, int &posy, int & posr,int &colorIdx) +{ + if (m_editedflag != 0) + { + createDs16FromAbs(); + } + + posx = 0; + posy = 0; + colorIdx = 0; + + // 文件头 + int size = m_ds16Data.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("m_embDs16Data data less then head size"); + return -1; + } + + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(m_ds16Data.data()); + + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(Ds16Item); + if (stepsize <= 0) + { + qDebug("ds16 data size err"); + return -1; + } + + Ds16Item * ds16DataPtr; + Ds16Item * pData = (Ds16Item *)(m_ds16Data.data() + sizeof(DataDs16FileHead)); + ds16DataPtr = pData; + + posx = pDsHead->beginX; + posy = pDsHead->beginY; + posr = pDsHead->beginR; + + if (stitchIdx <= 0) + { + return 0; + } + + if (stitchIdx > datasize) + { + stitchIdx = datasize; + } + + int dx, dy, dr; + u8 ctrl, attr; + + for (int i = 0; i < stitchIdx; i++) + { + ctrl = ds16DataPtr->ctrl; + attr = ds16DataPtr->attr; + dx = ds16DataPtr->dx; + dy = ds16DataPtr->dy; + dr = ds16DataPtr->dr; + + if (ctrl == DATA_CHGND) + { + colorIdx++; + } + + if ((attr&0x80) != 0) + { + dx *= -1; + } + + if ((attr&0x40) != 0) + { + dy *= -1; + } + + posx += dx; + posy += dy; + posr += dr; + + ds16DataPtr++; + } + + return 0; +} + +int EmbData::getPosInfoFromColorIdx(int &stitchIdx, int &posx, int &posy, int & posr, int colorIdx) +{ + if (m_editedflag != 0) + { + createDs16FromAbs(); + } + + posx = 0; + posy = 0; + stitchIdx = 0; + int cidx = 0; + + // 文件头 + int size = m_ds16Data.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("m_embDs16Data data less then head size"); + return -1; + } + + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(m_ds16Data.data()); + + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(Ds16Item); + if (stepsize <= 0) + { + qDebug("ds16 data size err"); + return -1; + } + + Ds16Item * ds16DataPtr; + Ds16Item * pData = (Ds16Item *)(m_ds16Data.data() + sizeof(DataDs16FileHead)); + ds16DataPtr = pData; + + posx = pDsHead->beginX; + posy = pDsHead->beginY; + posr = pDsHead->beginR; + + if (colorIdx <= 0) + { + return -1; + } + + //当前颜色索引大于总的颜色数时,针数索引等于总针数 + if(colorIdx >= ((int)pDsHead->colorNumber)) + { + stitchIdx = stepsize; + return 0; + } + + int dx, dy, dr; + u8 ctrl, attr; + + cidx = 0; + for (int i = 0; i < stepsize; i++) + { + if (cidx == colorIdx) + { + stitchIdx = i; + break; + } + + ctrl = ds16DataPtr->ctrl; + attr = ds16DataPtr->attr; + dx = ds16DataPtr->dx; + dy = ds16DataPtr->dy; + dr = ds16DataPtr->dr; + + if (ctrl == DATA_CHGND) + { + cidx++; + + //最后一针为换色码时针数索引等于总针数减1 + if(i == (stepsize - 1)) + { + stitchIdx = i; + } + } + + if ((attr&0x80) != 0) + { + dx *= -1; + } + + if ((attr&0x40) != 0) + { + dy *= -1; + } + + posx += dx; + posy += dy; + posr += dr; + + ds16DataPtr++; + } + + return 0; +} + +int EmbData::getNeedleIdxFromColorIdx(int & needleIdx, int colorIdx, u8 & stepCtrl) +{ + if (m_editedflag != 0) + { + createDs16FromAbs(); + } + + needleIdx = 0; + int cidx = 0; + s16 flag = 0; + + // 文件头 + int size = m_ds16Data.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("m_embDs16Data data less then head size"); + return -1; + } + + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(Ds16Item); + if (stepsize <= 0) + { + qDebug("ds16 data size err"); + return -1; + } + + Ds16Item * ds16DataPtr; + Ds16Item * pData = (Ds16Item *)(m_ds16Data.data() + sizeof(DataDs16FileHead)); + ds16DataPtr = pData; + + if (colorIdx <= 0) + { + return -1; + } + + u8 ctrl; + cidx = 1; + for (int i = 0; i < stepsize; i++) + { + ctrl = ds16DataPtr->ctrl; + + if(i == 0) + { + stepCtrl = ctrl; + } + + if (ctrl == DATA_CHGND) + { + cidx++; + } + + if (cidx == colorIdx) + { + if(flag == 0) + { + needleIdx = i+1; + } + //针步属性等于缝纫、冲孔或绣花 + if(ctrl == DATA_SEWING || + ctrl == DATA_PUNCH || + ctrl == DATA_EMB) + { + stepCtrl = ctrl; + break; + } + flag = 1; + } + + ds16DataPtr++; + } + + return 0; +} + +//设置起始点 +void EmbData::setStartPosition(int x, int y) +{ + if(m_pDs16Head == NULL){return;} + if(m_ds16Data.size() <= 0){return;} + + //旧的起始点坐标 + int oldBeginX = m_pDs16Head->beginX; + int oldBeginY = m_pDs16Head->beginY; + + m_pDs16Head->beginX = x; + m_pDs16Head->beginY = y; + // m_pDs16Head->anchorX = x; + // m_pDs16Head->anchorY = y; + + //新的起始点坐标与旧的起始点坐标的差值 + int cx = x - oldBeginX; + int cy = y - oldBeginY; + + //重新计算最大最小XY + double maxX = m_pDs16Head->maxX + cx; + double minX = m_pDs16Head->minX + cx; + double maxY = m_pDs16Head->maxY + cy; + double minY = m_pDs16Head->minY + cy; + + //将最大最小值写入文件头 + m_pDs16Head->maxX = maxX; + m_pDs16Head->minX = minX; + m_pDs16Head->maxY = maxY; + m_pDs16Head->minY = minY; + + //修复偶尔点击中间按钮花样消失的bug + m_maxX = maxX; + m_minX = minX; + m_maxY = maxY; + m_minY = minY; + memcpy(m_ds16Data.data(),(char*)m_pDs16Head,sizeof(DataDs16FileHead)); + +#if(0) + QString suffix = ".ds16"; + QString dsFilePath = m_filePath + suffix; + QFile file(dsFilePath); + + if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + qDebug() << "open file fail when wirte, path =" << m_filePath; + return; + } + else + { + file.write(m_ds16Data); + file.close(); + } +#endif +} + +void EmbData::setAnchorPosition(int x, int y) +{ + if(m_pDs16Head == NULL){return;} + if(m_ds16Data.size() <= 0){return;} + + m_pDs16Head->anchorX = x; + m_pDs16Head->anchorY = y; + + memcpy(m_ds16Data.data(),(char*)m_pDs16Head,sizeof(DataDs16FileHead)); + +#if(0) + QString suffix = ".ds16"; + QString dsFilePath = m_filePath + suffix; + QFile file(dsFilePath); + + if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + qDebug() << "open file fail when wirte, path =" << m_filePath; + return; + } + else + { + file.write(m_ds16Data); + file.close(); + } +#endif +} + +void EmbData::setSplitStitchLength(int length) +{ + m_stitchSplitLength = length; +} + +int EmbData::setDatSizeChange(int dsx, int dsy, int idx) +{ + int ptnum = 0; + int index = 0; + int idxend = 0; + + if (dsx == 0 && dsy == 0) + { + return 0; + } + + ptnum = m_dataAbsList.size(); + if (ptnum <= 0) + { + return 0; + } + if (idx < 0) + { + index = 0; + idxend = ptnum; + } + else + { + index = idx; + idxend = idx + 1; + } + + for (int i = index; i < idxend; i++) + { + // 文件头 + const QByteArray & ary = m_dataAbsList.at(i); + int size = ary.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("ary%d data less then head size", i); + continue; + } + + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("dat data size err"); + continue; + } + + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(ary.data()); + + DsAbsItem * pData = (DsAbsItem *)(ary.data() + sizeof(DataDs16FileHead)); + DsAbsItem * absDataPtr = pData; + + int width = 0; + int height = 0; + + if(idx == -1) //整体缩放 + { + width = m_maxX - m_minX; + height = m_maxY - m_minY; + } + else + { + width = pDsHead->maxX - pDsHead->minX; + height = pDsHead->maxY - pDsHead->minY; + } + + double nw = dsx / 100.00 * width; + double nh = dsy / 100.00 * height; + + double factorx,factory; + if (width != 0) + { + factorx = (double)(width + nw)/(double)width; + } + else + { + factorx = 1; + } + + if (height != 0) + { + factory = (double)(height + nh)/(double)height; + } + else + { + factory = 1; + } + + if (idx == -1) //整体缩放,起始点也要缩放 + { + double centerx = (m_maxX + m_minX)/2; + double centery = (m_maxY + m_minY)/2; + + double rx = (pDsHead->beginX - centerx) * factorx; + double ry = (pDsHead->beginY - centery) * factory; + + double beginx = rx + centerx; + double beginy = ry + centery; + + beginx += (beginx>0?(beginx!=0?1:0):-1) * (0.500001); + beginy += (beginy>0?(beginy!=0?1:0):-1) * (0.500001); + } + + // 数据缩放 + for (int j = 0; j < stepsize; j++) + { + double ax = absDataPtr->ax; + double ay = absDataPtr->ay; + + ax *= factorx; + ay *= factory; + + absDataPtr->ax = ax; + absDataPtr->ay = ay; + + absDataPtr++; + } + } + + m_editedflag = 1; + + return 1; +} + +int EmbData::setMirror(int mirror, int idx) +{ + int ptnum = 0; + int index = 0; + int idxend = 0; + + if (mirror == 0) // 0, 无镜像; 1, 水平镜像; 2, 垂直镜像; 3, 水平和垂直镜像 + { + return 0; + } + + int mirrorx = 1; + int mirrory = 1; + int mirrorr = 0; + int mirrorrdir = 0; + + if(mirror == 1 || mirror == 3) + { + mirrorx = -1; + } + if(mirror == 2 || mirror == 3) + { + mirrory = -1; + } + + if(mirror == 1) + { + mirrorr = 1*PI*10000; + mirrorrdir = -1; + } + else if (mirror == 2) + { + mirrorr = 2*PI*10000; + mirrorrdir = -1; + } + else if (mirror == 3) + { + mirrorr = 1*PI*10000; + mirrorrdir = 1; + } + + ptnum = m_dataAbsList.size(); + if (ptnum <= 0) + { + return 0; + } + if (idx < 0) + { + index = 0; + idxend = ptnum; + } + else + { + index = idx; + idxend = idx + 1; + } + + for (int i = index; i < idxend; i++) + { + // 文件头 + const QByteArray & ary = m_dataAbsList.at(i); + int size = ary.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("ary%d data less then head size", i); + continue; + } + + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("dat data size err"); + continue; + } + + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(ary.data()); + + //beginR的旋转 + double br = pDsHead->beginR; + if (mirrorrdir > 0) + { + br = br + mirrorr; + } + else if (mirrorrdir < 0) + { + br = mirrorr - br; + } + + while (br > 2*PI * 10000) + { + br -= 2*PI * 10000; + } + while (br < -2*PI * 10000) + { + br += 2*PI * 10000; + } + pDsHead->beginR = br; + + DsAbsItem * pData = (DsAbsItem *)(ary.data() + sizeof(DataDs16FileHead)); + DsAbsItem * absDataPtr = pData; + + // 数据镜像 + for (int j = 0; j < stepsize; j++) + { + double ax = absDataPtr->ax; + double ay = absDataPtr->ay; + double ar = absDataPtr->ar; + + int rx = ax * mirrorx; + int ry = ay * mirrory; + + if (mirrorrdir > 0) + { + ar = ar + mirrorr; + } + else if (mirrorrdir < 0) + { + ar = mirrorr - ar; + } + + while (ar > 2*PI * 10000) + { + ar -= 2*PI * 10000; + } + while (ar < -2*PI * 10000) + { + ar += 2*PI * 10000; + } + + absDataPtr->ax = rx; + absDataPtr->ay = ry; + absDataPtr->ar = ar; + + absDataPtr++; + } + } + + m_editedflag = 1; + return 1; +} + +// 旋转机头针尖补偿 +// 解决旋转机头缝纫机缝制平行线时,间距不一致的问题. +// 输入:correct 补偿量,单位0.01mm,范围 -2.00mm ~ 2.00mm +int EmbData::setNeedleTipCompensation(s16 correct) +{ + int ptnum = 0; + + if (correct == 0) + { + return 0; + } + + ptnum = m_dataAbsList.size(); + if (ptnum <= 0) + { + return 0; + } + for (int i = 0; i < ptnum; i++) + { + // 文件头 + const QByteArray & ary = m_dataAbsList.at(i); + int size = ary.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("ary%d data less then head size", i); + continue; + } + + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("dat data size err"); + continue; + } + + DsAbsItem * pData = (DsAbsItem *)(ary.data() + sizeof(DataDs16FileHead)); + DsAbsItem * absDataPtr = pData; + + // 针尖补偿 + for (int j = 0; j < stepsize-1; j++) + { + if ((absDataPtr->ctrl == DATA_NULL) || (absDataPtr->ctrl == DATA_END)) + { + break; + } + + if ((absDataPtr->ctrl == DATA_SEWING) || + (absDataPtr->ctrl == DATA_SEWING_R) || + (absDataPtr->ctrl == DATA_SECF_SEW) || + (absDataPtr->ctrl == DATA_SECF_SEW_R) || + (absDataPtr->ctrl == DATA_JUMP) || + 0 ) + {// 只补偿缝纫/偏移数据 + double len ; + double r = (absDataPtr->ar) / 10000.0; // 弧度制 + if (j == 0) + { + r = (absDataPtr->ar) / 10000.0; // 弧度制 + } + else + { + absDataPtr--; + if ((absDataPtr->ctrl == DATA_SEWING) || + (absDataPtr->ctrl == DATA_SEWING_R) || + (absDataPtr->ctrl == DATA_SECF_SEW) || + (absDataPtr->ctrl == DATA_SECF_SEW_R) || + (absDataPtr->ctrl == DATA_JUMP) || + 0 ) + {// 如果当前针步的前一个针步也是缝纫数据,则按前一个针步的数据角度计算 + r = (absDataPtr->ar) / 10000.0; // 弧度制 + } + absDataPtr++; + } + + if (correct > 0) + {// 补偿量为当前机头方向逆时针转90° + len = correct; + r += PI/2; + } + else + {// 补偿量为当前机头方向顺时针转90° + len = correct * -1.0; + r -= PI/2; + } + + while (r > 2*PI) + { + r -= 2*PI; + } + + while (r < -2*PI) + { + r += 2*PI; + } + + double cosr = (double)qCos(r); + double sinr = (double)qSin(r); + + double tx = cosr * len; + double ty = sinr * len; + + absDataPtr->ax += tx; + absDataPtr->ay += ty; + + m_editedflag = 1; + } + + absDataPtr++; + } + + } + return 0; +} + +int EmbData::setRotate(int dr, int idx) +{ + int ptnum = 0; + int index = 0; + int idxend = 0; + double rr = (dr * PI / 180) * 10000; + + if (dr == 0 || dr == 360) + { + return 0; + } + + ptnum = m_dataAbsList.size(); + if (ptnum <= 0) + { + return 0; + } + if (idx < 0) + { + index = 0; + idxend = ptnum; + } + else + { + index = idx; + idxend = idx + 1; + } + + double angle, sina, cosa; + +#if (1) + + // 因为计算三角函数有问题,现在只支持 1度,10度,90度 + switch(dr) + { + case 1: + sina = 0.01745240643728351281941897851632; + cosa = 0.99984769515639123915701155881391; + break; + case 10: + sina = 0.17364817766693034885171662676931; + cosa = 0.98480775301220805936674302458952; + break; + case 90: + sina = 1; + cosa = 0; + break; + case -1: + sina = -0.01745240643728351281941897851632; + cosa = 0.99984769515639123915701155881391; + break; + case -10: + sina = -0.17364817766693034885171662676931; + cosa = 0.98480775301220805936674302458952; + break; + case -90: + sina = -1; + cosa = 0; + break; + default: + angle = (dr * PI) / 180.0; + sina = (double)qSin(angle); + cosa = (double)qCos(angle); + break; + } + +#else + angle = (dr * PI) / 180.0; + sina = (double)qSin(angle); + cosa = (double)qCos(angle); +#endif + + for (int i = index; i < idxend; i++) + { + // 文件头 + const QByteArray & ary = m_dataAbsList.at(i); + int size = ary.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("ary%d data less then head size", i); + continue; + } + + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("dat data size err"); + continue; + } + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(ary.data()); + + //beginR的旋转 + double br = pDsHead->beginR + rr; + while (br > 2*PI * 10000) + { + br -= 2*PI * 10000; + } + while (br < -2*PI * 10000) + { + br += 2*PI * 10000; + } + pDsHead->beginR = br; + + double cx; + double cy; + + int rx, ry; //这里以前是double类型,因为有的图形旋转后尺寸会加0.1,所以改为int类型 + double rcx, rcy; + + if (idx == -1) // 整体旋转 + { + cx = (m_maxX + m_minX)/2.0; + cy = (m_maxY + m_minY)/2.0; + + rx = (pDsHead->beginX - cx); + ry = (pDsHead->beginY - cy); + } + else + { + cx = pDsHead->beginX; + cy = pDsHead->beginY; + + rx = 0; + ry = 0; + } + + rcx = (rx*cosa - ry*sina); + rcy = (rx*sina + ry*cosa); + + double beginx = (rcx + cx); + double beginy = (rcy + cy); + + beginx += (beginx>0?(beginx!=0?1:0):-1) * (0.500001); + beginy += (beginy>0?(beginy!=0?1:0):-1) * (0.500001); + + DsAbsItem * pData = (DsAbsItem *)(ary.data() + sizeof(DataDs16FileHead)); + DsAbsItem * absDataPtr = pData; + + // 数据旋转 + for (int j = 0; j < stepsize; j++) + { + // 变换前点坐标 + double ax = absDataPtr->ax + rx; + double ay = absDataPtr->ay + ry; + double ar = absDataPtr->ar + rr; + + while (ar > 2*PI * 10000) + { + ar -= 2*PI * 10000; + } + while (ar < -2*PI * 10000) + { + ar += 2*PI * 10000; + } + // 变换后点的坐标 + double rax = (ax*cosa - ay*sina); + double ray = (ax*sina + ay*cosa); + + absDataPtr->ax = rax - rcx; + absDataPtr->ay = ray - rcy; + absDataPtr->ar = ar; + absDataPtr++; + } + } + + m_editedflag = 1; + + return 1; +} + +int EmbData::setToMiddle(int idx) +{ + int ptnum = 0; + int index = 0; + int idxend = 0; + + ptnum = m_dataAbsList.size(); + if (ptnum <= 0) + { + return 0; + } + if (idx < 0) + { + index = 0; + idxend = ptnum; + } + else + { + index = idx; + idxend = idx + 1; + } + + for (int i = index; i < idxend; i++) + { + // 文件头 + const QByteArray & ary = m_dataAbsList.at(i); + int size = ary.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("ary%d data less then head size", i); + continue; + } + + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("dat data size err"); + continue; + } + + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(ary.data()); + + if(idx == -1) + { + int centerx = 0 - (m_maxX + m_minX)/2; + int centery = 0 - (m_maxY + m_minY)/2; + + int beginx = pDsHead->beginX + centerx; + int beginy = pDsHead->beginY + centery; + + pDsHead->beginX = beginx; + pDsHead->beginY = beginy; + } + else + { + pDsHead->beginX = 0; + pDsHead->beginY = 0; + } + } + + m_editedflag = 1; + + return 0; +} + +int EmbData::setDatMove(int dx, int dy, int idx) +{ + int ptnum = 0; + int index = 0; + int idxend = 0; + + if (dx == 0 && dy == 0) + { + return 0; + } + + ptnum = m_dataAbsList.size(); + if (ptnum <= 0) + { + return 0; + } + if (idx < 0) + { + index = 0; + idxend = ptnum; + } + else + { + index = idx; + idxend = idx + 1; + } + + for (int i = index; i < idxend; i++) + { + // 文件头 + const QByteArray & ary = m_dataAbsList.at(i); + int size = ary.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("ary%d data less then head size", i); + continue; + } + + int datasize = size - sizeof(DataDs16FileHead); + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("dat data size err"); + continue; + } + + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(ary.data()); + + int beginx = pDsHead->beginX; + int beginy = pDsHead->beginY; + + pDsHead->beginX = beginx + dx; + pDsHead->beginY = beginy + dy; + } + + m_editedflag = 1; + + return 0; +} + +//此函数转换传入的绝对坐标值,是否取镜像及反复时数据之间的间距 +void EmbData::convertAbsDat(QByteArray &dat, int mirror) +{ + //无镜像、xy间距、角度旋转、缩放比例都为0时数据无需转换 + if(mirror == 0 && + m_spaceX == 0 && + m_spaceY == 0 ) + { + return; + } + + int size = dat.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("data less then head size"); + return; + } + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(dat.data()); + + int datasize = size - sizeof(DataDs16FileHead); + if (datasize <= 0) + { + qDebug("dat dataBegin err"); + return; + } + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("dat data size err"); + return; + } + DsAbsItem * pData = (DsAbsItem *)(dat.data() + sizeof(DataDs16FileHead)); + DsAbsItem * absDataPtr = pData; + //-------- + + //镜像数值不为0---开始 + // mirror 0, 无镜像; 1, 水平镜像; 2, 垂直镜像; 3, 水平和垂直镜像 + int mirrorx = 1; + int mirrory = 1; + int mirrorr = 1; + + if(mirror == 1 || mirror == 3) + { + mirrorx = -1; + mirrorr = -1; + } + if(mirror == 2 || mirror == 3) + { + mirrory = -1; + mirrorr = -1; + } + + // 镜像文件头转换 + if(mirror != 0) + { + pDsHead->beginX = pDsHead->beginX * mirrorx; + pDsHead->beginY = pDsHead->beginY * mirrory; + } + + // 镜像或列表间距不为0 + if(mirror != 0 || m_spaceX != 0 || m_spaceY != 0) + { + //图形先居中,起始点在加上偏移 + int centerx = (m_maxX + m_minX)/2; + int centery = (m_maxY + m_minY)/2; + + int rx = (pDsHead->beginX - centerx) * mirrorx; + int ry = (pDsHead->beginY - centery) * mirrory; + + int beginx = rx + centerx; + int beginy = ry + centery; + + //用下面两行代码,否则反复方式为Y轴对称或XY对称时不对 + pDsHead->beginX = beginx + m_spaceX; + pDsHead->beginY = beginy + m_spaceY; + } + //镜像数值不为0---结束 + + absDataPtr = pData; + + //镜像有变换时运动步才转换 + double dx, dy, dr; + + if(mirror != 0) + { + for (int i = 0; i < stepsize; i++) + { + // 读入一个针步数据 + dx = absDataPtr->ax; + dy = absDataPtr->ay; + dr = absDataPtr->ar; + + //镜像不为0 + if(mirror != 0) + { + dx = dx * mirrorx; + dy = dy * mirrory; + dr = dr * mirrorr; + } + + absDataPtr->ax = dx; + absDataPtr->ay = dy; + absDataPtr->ar = dr; + + absDataPtr++; + } + } + + return; +} + +//花版的定位点为绝对坐标数据点,起始点为相对于定位点的相对坐标点,第一针为相对于起始点的坐标点 +//有的花版起始点有偏移量,第一针偏移量为0,有的花版起始点偏移量为0,第一针有偏移量 +//所以ds16文件头定位点坐标就是花版中的定位点,起始点坐标为花版中的定位点坐标+起始点坐标+第一针的坐标,同时ds16数据的第一针坐标偏移应置为0 +//生成DS16数据 +int EmbData::createDs16FromAbs() +{ + if (m_editedflag != 0) + { + m_minX = S32_MAX; + m_maxX = S32_MIN; + m_minY = S32_MAX; + m_maxY = S32_MIN; + + int ptnum = m_dataAbsList.size(); + m_ds16Data.clear(); + + QString name; + QByteArray tgtdsdat; + tgtdsdat.clear(); + + u8 ctrlByte; + u8 attrByte; + WORD actionWord; //附加动作 + //s16 dx, dy, dr; + s32 dx, dy, dr; + u16 len; + double ax, ay, ar; + int actx, acty, actr; + int ddx, ddy,ddr; + double x1,y1,x2,y2; + x1 = y1 = x2 = y2 = 0; + + int beginx, beginy,beginr, anchorx, anchory; + int minx, miny, maxx, maxy; + int colornum = 1;// 颜色数 + int punchNum = 0;//冲孔个数 + int first = 1;//第一针 + actx = 0; + acty = 0; + actr =0; + beginx = 0; + beginy = 0; + beginr = 0; + anchorx = 0; + anchory = 0; + + int totalstepsize = 0; + memset(m_pDs16Head,0,sizeof(DataDs16FileHead)); + + for (int i = 0; i < ptnum; i++) + { + const QByteArray & ary = m_dataAbsList.at(i); + int size = ary.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("ary%d data less then head size", i); + continue; // 下一个 + } + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(ary.data()); + //dsr,dst的中间数据 + //fileId = pDsHead->fileid; + + int datasize = size - sizeof(DataDs16FileHead); + if (datasize <= 0) + { + qDebug("absdat dataBegin err"); + return -1; + } + int stepsize = datasize/sizeof(DsAbsItem); + if (stepsize <= 0) + { + qDebug("absdat data size err"); + return -1; + } + DsAbsItem * pData = (DsAbsItem *)(ary.data() + sizeof(DataDs16FileHead)); + DsAbsItem * absDataPtr = pData; //中间数据针步 + //----- + + // 文件名称 + QString str = QString::fromLocal8Bit(pDsHead->fileName); + name = str; + //str.sprintf("%s", pDsHead->fileName); + //name += " "; + //name += str; + + minx = absDataPtr->ax; + maxx = absDataPtr->ax; + miny = absDataPtr->ay; + maxy = absDataPtr->ay; + + // 数据区 + for (int j = 0; j < stepsize; j++) + { + Ds16Item ds16Item; + memset(&ds16Item,0,sizeof(Ds16Item));//清空ds16针步 + + if(i != 0 && j == 0)//反复时非第一个花样第一针应是偏移 + { + // 添加偏移 + ctrlByte = DATA_OFFSET; + } + else + { + ctrlByte = absDataPtr->ctrl; + } + + attrByte = absDataPtr->attr;//绝对数据的属性字节 + actionWord = absDataPtr->action; + + ax = absDataPtr->ax;//绝对数据的X位置 + ay = absDataPtr->ay; + ar = absDataPtr->ar; + + // 轮廓 + if (minx > ax) { minx = ax; } + if (maxx < ax) { maxx = ax; } + if (miny > ay) { miny = ay; } + if (maxy < ay) { maxy = ay; } + + if (first != 0)//first = 1第一个图元的第一针 + { + beginx = ax; + beginy = ay; + beginr = pDsHead->beginR; + + anchorx = pDsHead->anchorX; + anchory = pDsHead->anchorY; + + actx = ax; + acty = ay; + actr = ar; + + ddx = 0; + ddy = 0; + //让ddr等于0,因为在datafiledsr中将beginR置为0而非第一针的角度,所以不应该用 absDataPtr->ar - pDsHead->beginR + //如果beginR等于第一针的角度,那么第一针的ddr就应该是0 + ddr = 0; + +#if(0) + //过滤掉空针 + if(ddx== 0 && ddy == 0) + { + actx += ddx; + acty += ddy; + actr += ddr; + absDataPtr++; + first = 0;//第一个图元的第一针 + + continue; + } +#endif + } + else + { + ddx = ax - actx; + ddy = ay - acty; + ddr = ar -actr; + } + + //画笔转冲孔时,冲孔第一针的ddr置为0 + if(absDataPtr->ctrl == DATA_PUNCH) + { + if(absDataPtr != pData) + { + absDataPtr--; + if(absDataPtr->ctrl == DATA_DRAWING) + { + ddr = 0; + } + absDataPtr++; + } + } + + if( ctrlByte == DATA_END || + ctrlByte == DATA_PAUSE || + ctrlByte == DATA_CHGND || + ctrlByte == DATA_CUTTRD || + ctrlByte == DATA_ANGLE || + 0 ) + { + ddx = 0; + ddy = 0; + ddr = 0; + } + + dx = ddx; + dy = ddy; + dr = ddr; + + actx += ddx; + acty += ddy; + actr += ddr; + + while (dr < -PI10000) + { + dr += PI20000; + } + while (dr > PI10000) + { + dr -= PI20000; + } + +#if(0) + //过滤掉运针空针 + if(ddx== 0 && ddy == 0 && ddr == 0 && (ctrlByte == DATA_PUNCH || ctrlByte == DATA_EMB || ctrlByte == DATA_SEWING)) + { + absDataPtr++; + qDebug()<<"This is a empty needle"<= maxStep) + { + s16 addx,addy; + + x1 = ax; + y1 = ay; + x2 = ax; + y2 = ay; + if(j != 0) + { + absDataPtr--; + x1 = absDataPtr->ax; + y1 = absDataPtr->ay; + absDataPtr++; + } + + double tremainder =fmod(xyLen, splitVal);//取余 + s16 stepNum = xyLen / splitVal;//拆分几步 + if(tremainder != 0) + { + stepNum += 1; + } + + double k = (y2-y1)/(x2-x1); + double r = atan(k); + double stepX = 0; + double stepY = 0; + double stepDr = 0; + addx = 0; + addy = 0; + for(int m = 0; m < stepNum; m++) + { + stepX = 0; + stepY = 0; + stepDr = 0; + memset(&ds16Item,0,sizeof(Ds16Item));//初始化结构体 + + if(m == stepNum-1 && tremainder > 0)//最后一步 + { + splitVal = tremainder; + } + + stepX = splitVal * cos(r); + stepY = splitVal * sin(r); + + //stepX = cos(r) * splitVal; + if((dx < 0 && stepX > 0) || (dx > 0 && stepX < 0)) + { + stepX = 0 - stepX; + } + + //stepY = sin(r) * splitVal; + if((dy < 0 && stepY > 0) || (dy > 0 && stepY < 0)) + { + stepY = 0 - stepY; + } + + if(m == 0) + { + //stepDr = temp; + stepDr = dr; + } + + //大针步转换为跳针 + if(ctrlByte == DATA_PUNCH || ctrlByte == DATA_DRAWING)//功能码等于冲孔数据或画笔数据 + { + // if(m == stepNum - 1) + // { + // ds16Item.ctrl = ctrlByte; + // } + // else + { + ds16Item.ctrl = DATA_JUMP;//跳针 + } + } + else + { + ds16Item.ctrl = ctrlByte; + } + ds16Item.attr = attrByte; + ds16Item.action[0] = 0; + ds16Item.action[1] = 0; + ds16Item.dx = qRound(stepX);//四舍五入 + ds16Item.dy = qRound(stepY); + + if (m == stepNum-1) + {// 最后一针,消除累计误差 + ds16Item.dx = dx - addx; + ds16Item.dy = dy - addy; + } + else + { + addx += ds16Item.dx; + addy += ds16Item.dy; + } + + len = sqrt(ds16Item.dx*ds16Item.dx + ds16Item.dy*ds16Item.dy); + ds16Item.dr = stepDr; + ds16Item.len = len; + memset(ds16Item.rev,0,sizeof(ds16Item.rev)); + tgtdsdat.append((char*)(&ds16Item), sizeof(Ds16Item)); + totalstepsize++; + + //插入空针 + if(m == stepNum - 1) + { + memset(&ds16Item,0,sizeof(ds16Item)); + ds16Item.ctrl = ctrlByte; + tgtdsdat.append((char*)(&ds16Item), sizeof(Ds16Item)); + totalstepsize++; + } + } + } + else + { + len = sqrt(dx*dx + dy*dy); + + ds16Item.ctrl = ctrlByte; + ds16Item.attr = attrByte; + + memcpy(ds16Item.action,&actionWord,sizeof(actionWord)); + + ds16Item.dx = dx; + ds16Item.dy = dy; + ds16Item.dr = dr; + ds16Item.len = len; + memset(ds16Item.rev,0,sizeof(ds16Item.rev)); + tgtdsdat.append((char*)(&ds16Item), sizeof(Ds16Item));//ds16针步 + totalstepsize++; + } + + if(i != 0 && j == 0)//反复时非第一个花样第一针改为偏移后再加换色码和一针正常针步 + { + // 添加换色 + memset(&ds16Item,0,sizeof(Ds16Item)); + ds16Item.ctrl = DATA_CHGND; + tgtdsdat.append((char*)(&ds16Item), sizeof(Ds16Item)); + totalstepsize++; + colornum++; + + // 添加第一针针步 + memset(&ds16Item,0,sizeof(Ds16Item)); + ds16Item.ctrl = absDataPtr->ctrl; + tgtdsdat.append((char*)(&ds16Item), sizeof(Ds16Item)); + totalstepsize++; + } + + if (ctrlByte == DATA_CHGND) + { + colornum++; + } + + if (ds16Item.ctrl == DATA_PUNCH) + { + punchNum++;//冲孔总数加1 + } + + absDataPtr++; + first = 0;//第一针 + } + + // 添加色序表 + int cidx, cnum; + cnum = colornum; + if (cnum > BF_SW_ND) + { + cnum = BF_SW_ND; + } + + cidx = m_pDs16Head->colorNumber; + if (cidx < 0) + { + cidx = 0; + } + if (cidx > BF_SW_ND) + { + cidx = BF_SW_ND; + } + if (cidx + cnum > BF_SW_ND) + { + cnum = BF_SW_ND - cidx; + } + + memcpy(&(m_pDs16Head->switchTable[cidx]), pDsHead->switchTable, cnum); + + if (m_minX > minx) { m_minX = minx; } + if (m_minX > maxx) { m_minX = maxx; } + if (m_maxX < minx) { m_maxX = minx; } + if (m_maxX < maxx) { m_maxX = maxx; } + if (m_minY > miny) { m_minY = miny; } + if (m_minY > maxy) { m_minY = maxy; } + if (m_maxY < miny) { m_maxY = miny; } + if (m_maxY < maxy) { m_maxY = maxy; } + + m_pDs16Head->colorNumber = cnum; // 颜色数增加 + } + + // 针数 + int newstepnum = tgtdsdat.size() / sizeof(Ds16Item); + + if (newstepnum > 0) + { + // 修改文件头 + int namelen = name.size(); + if (namelen > HEAD_NAME_STR_LEN) + { + namelen = HEAD_NAME_STR_LEN; + } + + QByteArray array = name.toLocal8Bit().data(); + memcpy(m_pDs16Head->fileName, array, namelen); // 文件名称 + m_pDs16Head->dataSize = newstepnum*sizeof(Ds16Item); // 数据字节数 + m_pDs16Head->itemNums = newstepnum; // 数据项个数 + m_pDs16Head->bytesPerItem = sizeof(Ds16Item); // 每项占的字节数 + m_pDs16Head->bytesPerBlk = MAX_EXDP_LEN; // 数据内容划分块大小 + m_pDs16Head->dataChecksum = calcCheckSum32((u8 *)(tgtdsdat.data()) , m_pDs16Head->dataSize); // 数据累加校验和 + m_pDs16Head->checkCrc = calcCrc16((u8 *)(m_pDs16Head), HEAD_FIX_INFO_LEN); // 前面6个字段的CRC校验,(6个字段分别为:文件名称,字节数,项个数,每项字节数,每块字节数,数据累加和的CRC校验值) + m_pDs16Head->fileid = m_pDs16Head->checkCrc; + m_pDs16Head->anchorX = anchorx; // 定位点坐标X + m_pDs16Head->anchorY = anchory; // 定位点坐标Y, 设置为0,作为基准 + m_pDs16Head->beginX = beginx; // 数据起点坐标X + m_pDs16Head->beginY = beginy; // 数据起点坐标Y + m_pDs16Head->beginR = beginr; // 数据起点坐标R //-rq + m_pDs16Head->minX = m_minX; + m_pDs16Head->maxX = m_maxX; + m_pDs16Head->minY = m_minY; + m_pDs16Head->maxY = m_maxY; // 轮廓范围,使用重新计算之后的值 + m_pDs16Head->punchNum = punchNum;//冲孔个数 + // 添加文件头 + m_ds16Data.append((char*)m_pDs16Head, sizeof(DataDs16FileHead));//ds16头文件存在ds16中 + // 添加文件数据 + m_ds16Data.append(tgtdsdat); + } + +#if(1) + //保存成ds16文件 + QString ds16FilePath = m_filePath + ".ds16"; + QFile file(ds16FilePath); + + if(file.exists())//存在ds16文件 + { + QFile::remove(ds16FilePath); + } + + if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + qDebug() << "open file fail when wirte, path =" << m_filePath; + return -1; + } + else + { + file.write(m_ds16Data); + file.close(); + } +#endif + } + + m_editedflag = 0; + + return 0; +} + +int EmbData::reCalcDataChecksum() +{ + return 0; +} + +QByteArray EmbData::intTo2ByteArray(s16 value) +{ + QByteArray ba; + ba.resize(2); + ba[0] = (uchar)(0x000000ff & value); + ba[1] = (uchar)((0x0000ff00 & value) >> 8); + return ba; +} + +//绘制针数索引的跟踪笔 +void EmbData::drawNeedleIdxPen(int x, int y, QPainter &painter) +{ + //贴图的xy和画笔的xy值相同 + m_penX = x; + m_penY = y; + + m_penPix = m_canvas.copy(x-20,y-30,40,40);//复制画笔区域未绘制笔之前的图像 + + QPen pen; + QColor color; + + //绘制深灰色画笔 + pen.setWidth(2); + color.setRgb(60,60,60);//深灰色 + pen.setColor(color); + painter.setPen(pen); + + painter.drawLine(x-4, y-28, x-4, y-8);//画左"|" + painter.drawLine(x+4, y-28, x+4, y-8); //画右"|" + painter.drawEllipse(x-1, y-10, 2, 2);//画中心"°" + painter.drawLine(x-4, y-8, x, y);//画左"\"(笔尖) + painter.drawLine(x+4, y-8, x, y); //画右"/"(笔尖) + + //绘制深红色画笔 + pen.setWidth(1); + color.setRgb(174,60,64);//深红色 + pen.setColor(color); + painter.setPen(pen); + + painter.drawLine(x-3, y-28, x-3, y-8);//画左"|" + painter.drawLine(x+5, y-28, x+5, y-8); //画右"|" + painter.drawEllipse(x-2, y-12, 3, 3);//画中心"°" + painter.drawLine(x-3, y-8, x, y);//画左"\"(笔尖) + painter.drawLine(x+5, y-8, x, y); //画右"/"(笔尖) +} + +//擦除针数索引的跟踪笔 +void EmbData::eraseNeedleIdxPen(QPainter &painter) +{ + //贴图的xy和画笔的xy值相同 + painter.drawPixmap(m_penX-20,m_penY-30,m_penPix); +} + +//设置视图尺寸(透明背景) +int EmbData::setViewInfo(int width, int height) +{ + // if (m_viewWidth != width || + // m_viewHight != height) + { + if (width <= PREVIEW_SIDE*2 || height <= PREVIEW_SIDE*2) + { + return -1; + } + m_viewWidth = width; + m_viewHight = height; + m_canvas = QPixmap(m_viewWidth, m_viewHight); + m_canvas.fill(Qt::transparent);//用透明色填充 + //memset(m_canvas.bits(), 0x00, m_canvas.byteCount()); + } + return 0; +} + +//设置视图(带背景图片背景) +void EmbData::setViewInfo(QPixmap pix) +{ + m_canvas = pix; +} + +//重新重置ds16数据(换色点击取消后数据会变为单个图元的原数据, +//若图形经过变换数据会不对,主界面保存了最后的数据, +//若点击换色并取消后恢复为主界面最后保存的数据即可) +void EmbData::reSetEmbData(QByteArray ary) +{ + if(ary.size() <= 0) + { + return; + } + m_ds16Data.clear(); + m_ds16Data.append(ary); + //文件头也恢复为默认 + memcpy(m_pDs16Head, m_ds16Data.data(), sizeof(DataDs16FileHead)); // 文件名称 +} + +void EmbData::reSetEmbDataRange(int maxX, int minX, int maxY, int minY) +{ + m_maxX = maxX; + m_minX = minX; + m_maxY = maxY; + m_minY = minY; +} + +//重置数据 +void EmbData::setEmbData(int redraw) +{ + createDispFromDs16Dat(m_ds16Data); + if (redraw != 0) + { + drawImageByDispFile(); + } +} + +void EmbData::setDispMode(EmbData::DISP_MODE dispmode, int redraw) +{ + m_dispMode = dispmode; + if(redraw != 0) + { + drawImageByDispFile(); + } +} + +void EmbData::setDrawMode(EmbData::DRAW_MODE drawmode) +{ + m_drawMode = drawmode; +} + +void EmbData::setGreyAreaRange(int begin, int end) +{ + m_greyColorBeg = begin; + m_greyColorEnd = end; +} + +//设置区域显示参数 +void EmbData::setDispAreaRange(int begin, int end, int redraw) +{ + m_showColorBeg = begin; + m_showColorEnd = end; + + if (redraw != 0) + { + drawImageByDispFile(); + } +} + +//设置进度显示数据 +void EmbData::setExecIndex(int index) +{ + m_stitchIndex = index; + + if (m_dispMode == DISP_EXECING) + { + drawImageByDispFile(); + } +} + +void EmbData::reDraw() +{ + drawImageByDispFile(); +} + +//创建显示用的数据(为了快速显示) +int EmbData::createDispFromDs16Dat(QByteArray &ds16dat) +{ + DispItem dispItem; + m_dispDat.clear();//显示绘图用的数据(需要转换) + + m_stitchIndex = 0; + m_dispIndex = 0; + + // ds16数据 + int size = ds16dat.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("16 data less then head size"); + return -1; + } + DataDs16FileHead * pDsHead = (DataDs16FileHead *)(ds16dat.data()); + int datasize = size - sizeof(DataDs16FileHead); + if (datasize <= 0) + { + qDebug("dat dataBegin err"); + return -1; + } + int stepsize = datasize/sizeof(Ds16Item); + if (stepsize <= 0) + { + qDebug("ds16 data size err"); + return -1; + } + + Ds16Item * ds16DataPtr; + Ds16Item * pData = (Ds16Item *)(ds16dat.data() + sizeof(DataDs16FileHead)); + ds16DataPtr = pData; + + // 图形显示区域 + int width = m_canvas.width();//留4个像素的边 + int height = m_canvas.height();//留4个像素的边 + if (width <= PREVIEW_SIDE*2 || height <= PREVIEW_SIDE*2) + { + qDebug("preview img too small"); + return -1; + } + + //留边(否则实时跟踪笔会画出界) + int viewSide = PREVIEW_SIDE; + if(m_drawMode == DRAW_PREVIEW) + { + viewSide = 20;//预览模式时整区域留20像素绘制(原色显示) + } + int dpminx = viewSide; + int dpmaxx = width - viewSide; + int dpminy = viewSide; + int dpmaxy = height - viewSide; + + //1:1显示无需留边 + // int dpminx = 0; + // int dpmaxx = width; + // int dpminy = 0; + // int dpmaxy = height; + + // 计算缩放系数 + double factor, temp; + if ((dpmaxx - dpminx) <= 0 || (dpmaxy - dpminy) <= 0) + { + return -1; + } + + factor = (double)(fabs(m_maxX-m_minX)) / (dpmaxx - dpminx); // 按框尺寸x计算的缩放系数 + temp = (double)(fabs(m_maxY-m_minY)) / (dpmaxy - dpminy); // 按框尺寸y计算的缩放系数 + + if (temp >= factor) // 使用较大的缩放系数 + { + factor = temp; + } + + m_factor = factor; + + // 计算显示参数,按照图形的实际位置显示(数据坐标零点对应图形中心) + int dpx = (int)((dpminx+dpmaxx)/2 - ((m_maxX+m_minX)/factor)/2); + int dpy = (int)((dpminy+dpmaxy)/2 - ((m_maxY+m_minY)/factor)/2); + + // 显示花样图形 + u8 ctrlByte; + u8 attrByte; + int dx; + int dy; + int dr; + int colorIdx,oldcolor; + + double datposx, datposy, datposr; + int curx, cury, prex, prey; + curx = cury = prex = prey = 0; + + //用起始点绘制 + datposx = pDsHead->beginX; + datposy = pDsHead->beginY; + datposr = pDsHead->beginR; + + curx = (datposx) / factor + dpx; + cury = (datposy) / factor + dpy; + + if (SHOWDIRX == -1) + { + curx = width - curx; + } + if (SHOWDIRY == -1) + { + cury = height - cury; + } + + colorIdx = 0; + oldcolor = -1; + QRgb embcolor = 0; + + for (int i = 0; i < stepsize; i++) + { + prex = curx; + prey = cury; + + // 读入一个针步数据 + ctrlByte = ds16DataPtr->ctrl; + attrByte = ds16DataPtr->attr; + dx = ds16DataPtr->dx; + dy = ds16DataPtr->dy; + dr = ds16DataPtr->dr; + + datposx += dx; + datposy += dy; + datposr += dr; + + curx = (datposx) / factor + dpx; + cury = (datposy) / factor + dpy; + + if (SHOWDIRX == -1) + { + curx = width - curx; + } + if (SHOWDIRY == -1) + { + cury = height - cury; + } + + if (oldcolor != colorIdx) + { + //int cidx = pDsHead->switchTable[colorIdx % EMB_BF_SW_ND]; + int nidx = pDsHead->switchTable[colorIdx]; + + int cidx; + if(nidx <= 0) + { + cidx = 0;//未设置过色序时颜色索引默认为0 + } + else + { + cidx = m_needleColorTable[nidx - 1] % BF_SW_ND; + } + + int cnum = m_tabelColorNum; + cnum /= sizeof(QRgb); + if (cnum > BF_SW_ND) + { + cnum = BF_SW_ND; + } + if (cnum != 0) + { + cidx %= cnum; + QRgb * pColor = m_pColor; + if(pColor != NULL) + { + embcolor = (pColor[cidx]); + } + else + { + embcolor = 0; + } + } + else + { + embcolor = 0; + } + + oldcolor = colorIdx; + } + + if (ctrlByte == DATA_CHGND) // 换色 + { + colorIdx++; + } + + while(datposr >= PI10000) + { + datposr -= (PI20000-1); + } + while(datposr <= -PI10000) + { + datposr += (PI20000-1); + } + + dispItem.ctrl = ctrlByte; + dispItem.attr = attrByte; + dispItem.bx = prex; + dispItem.by = prey; + dispItem.ex = curx; + dispItem.ey = cury; + dispItem.rgb = embcolor; + memcpy(&dispItem.action,ds16DataPtr->action,sizeof(dispItem.action)); + + m_dispDat.append((char*)(&dispItem), sizeof(DispItem)); + + ds16DataPtr++; + } + + qDebug("CreateDispFromEmbDs16, stepsize=%d", m_dispDat.size() / sizeof(DispItem)); + + return 0; +} + +#define DRAWDR 0 + +int EmbData::drawImageByDispFile() +{ + u8 ctrl; + int bx, by, ex, ey; + bx = by = ex = ey = 0; + int i; + DispItem * pDispBuff = (DispItem *)m_dispDat.data(); + + int size = m_dispDat.size(); + int stitchCount = size/sizeof(DispItem); + + if (stitchCount <= 0) + { + stitchCount = 0; + } + if (m_stitchIndex >= stitchCount) + { + m_stitchIndex = stitchCount - 1; + } + if (m_stitchIndex < 0) + { + m_stitchIndex = 0; + } + + if (m_showColorBeg < 0) + { + m_showColorBeg = 0; + } + + if (m_showColorEnd < 0) + { + m_showColorEnd = 0; + } + + DISP_MODE dispmode = m_dispMode; + + QPainter painter(&m_canvas); + + int gary = 0; + QRgb rgb, oldrgb; + s16 ar; + QPen pen; + QColor color; + + //笔宽 + pen.setWidth(4); + oldrgb = 0; + rgb = 0; + + if (dispmode == DISP_ALL_NORMAL || // 显示所有线迹(原色显示) + dispmode == DISP_ALL_EXEC || // 显示所有线迹(执行过的显示原色,其余显示灰色) + 0) + { + int tenThousand = 0; + for (i = 0; i < stitchCount; i++) + { + tenThousand++; + if(tenThousand == TENTHOUSANDNEEDLE) + { + tenThousand = 0; + int idx = i / TENTHOUSANDNEEDLE; + //每十万针主界面加载图片的进度条走一格 + emit siDrawNeedleIdx(idx); + } + + ctrl = pDispBuff[i].ctrl; + bx = pDispBuff[i].bx; + by = pDispBuff[i].by; + ex = pDispBuff[i].ex; + ey = pDispBuff[i].ey; + ar = pDispBuff[i].ar; + rgb = pDispBuff[i].rgb; + + if (dispmode == DISP_ALL_EXEC) // 从开始到 m_stitchIndex 显示正常颜色的线迹(执行过),从 m_stitchIndex 结束显示未缝纫颜色线迹(未执行) + { + if (i >= m_stitchIndex) + { + gary = qGray(rgb); + //gary = gary/3 + 150; // 颜色变淡 + gary = COLOR_GREY;//纯灰 + rgb = qRgb(gary, gary, gary); + } + } + + if (oldrgb != rgb) + { + color.setRgb(rgb); + pen.setColor(color); + painter.setPen(pen); + oldrgb = rgb; + } + + if(ctrl == DATA_PUNCH) + { + int cr = PUNCHRADIUS / m_factor; + if(cr <= 0){cr = 1;} + painter.drawEllipse(ex-cr,ey-cr,cr*2,cr*2); + } + else + { + painter.drawLine(bx, by, ex, ey); + } + + if(ar == 0){}//为了去掉编译警告 +#if(DRAWDR) + double len = sqrt((double)(ex-bx)*(double)(ex-bx)+ (double)(ey-by)*(double)(ey-by)); + + int mx = len * cos((PI10000-ar)/10000.0); + int my = len * sin((PI10000-ar)/10000.0); + QColor color = QColor(Qt::green); + QPen pen; + pen.setColor(color); + painter.setPen(pen); + painter.drawLine(bx, by, bx+mx, by+my); + pen.setColor(QColor(Qt::red)); + painter.setPen(pen); + painter.drawEllipse(bx+mx, by+my,2,2); +#endif + } + + if (dispmode == DISP_ALL_EXEC && m_stitchIndex < stitchCount) + { + i = m_stitchIndex; + + bx = pDispBuff[i].bx; + by = pDispBuff[i].by; + drawNeedleIdxPen(bx, by, painter);//绘制跟踪笔 + m_dispIndex = m_stitchIndex; // 移动显示指针 + } + } + else if ( dispmode == DISP_ALL_AREA ) // 显示所有线迹(有效区域内的显示原色,其余显示灰色) + { + //显示为灰色 + for(int j = m_greyColorBeg; j < m_greyColorEnd; j++) + { + ctrl = pDispBuff[j].ctrl; + bx = pDispBuff[j].bx; + by = pDispBuff[j].by; + ex = pDispBuff[j].ex; + ey = pDispBuff[j].ey; + rgb = pDispBuff[j].rgb; + + gary = qGray(rgb); + //gary = gary/3 + 150; // 颜色变淡 + gary = COLOR_GREY;//纯灰 + rgb = qRgb(gary, gary, gary); + + if (oldrgb != rgb) + { + color.setRgb(rgb); + pen.setColor(color); + painter.setPen(pen); + oldrgb = rgb; + } + + if(ctrl == DATA_PUNCH) + { + int cr = PUNCHRADIUS / m_factor; + if(cr <= 0){cr = 1;} + painter.drawEllipse(ex-cr,ey-cr,cr*2,cr*2); + } + else + { + painter.drawLine(bx, by, ex, ey); + } + } + + //显示为原色 + for(int m = m_showColorBeg; m < m_showColorEnd; m++) + { + ctrl = pDispBuff[m].ctrl; + bx = pDispBuff[m].bx; + by = pDispBuff[m].by; + ex = pDispBuff[m].ex; + ey = pDispBuff[m].ey; + rgb = pDispBuff[m].rgb; + + color.setRgb(rgb); + pen.setColor(color); + painter.setPen(pen); + + if(ctrl == DATA_PUNCH) + { + int cr = PUNCHRADIUS / m_factor; + if(cr <= 0){cr = 1;} + painter.drawEllipse(ex-cr,ey-cr,cr*2,cr*2); + } + else + { + painter.drawLine(bx, by, ex, ey); + } + } + } + else if (dispmode == DISP_EXECING) // 刷新部分线迹(缝纫中进度显示) + { + //qDebug()<<"m_stitchIndex"< m_dispIndex && m_stitchIndex < stitchCount) + { + i = m_dispIndex; + + while(i < m_stitchIndex) // 显示为原线迹 + { + ctrl = pDispBuff[i].ctrl; + bx = pDispBuff[i].bx; + by = pDispBuff[i].by; + ex = pDispBuff[i].ex; + ey = pDispBuff[i].ey; + rgb = pDispBuff[i].rgb; + + if (oldrgb != rgb) + { + color.setRgb(rgb); + pen.setColor(color); + painter.setPen(pen); + oldrgb = rgb; + } + + if(ctrl == DATA_PUNCH) + { + int cr = PUNCHRADIUS / m_factor; + if(cr <= 0){cr = 1;} + painter.drawEllipse(ex-cr,ey-cr,cr*2,cr*2); + } + else + { + painter.drawLine(bx, by, ex, ey); + } + i++; + } + } + else if (m_stitchIndex < m_dispIndex && m_dispIndex < stitchCount) + { + i = m_stitchIndex; + + while(i <= m_dispIndex) // 显示为未缝纫颜色线迹 + { + ctrl = pDispBuff[i].ctrl; + bx = pDispBuff[i].bx; + by = pDispBuff[i].by; + ex = pDispBuff[i].ex; + ey = pDispBuff[i].ey; + rgb = pDispBuff[i].rgb; + + gary = qGray(rgb); + //gary = gary/3 + 150; // 颜色变淡 + gary = COLOR_GREY;//纯灰 + rgb = qRgb(gary, gary, gary); + + if (oldrgb != rgb) + { + color.setRgb(rgb); + pen.setColor(color); + painter.setPen(pen); + oldrgb = rgb; + } + + if(ctrl == DATA_PUNCH) + { + int cr = PUNCHRADIUS / m_factor; + if(cr <= 0){cr = 1;} + painter.drawEllipse(ex-cr,ey-cr,cr*2,cr*2); + } + else + { + painter.drawLine(bx, by, ex, ey); + } + i++; + } + } + + i = m_stitchIndex; + + bx = pDispBuff[i].bx; + by = pDispBuff[i].by; + drawNeedleIdxPen(bx, by, painter);//绘制跟踪笔 + m_dispIndex = m_stitchIndex; // 移动显示指针 + } + } + return 0; +} diff --git a/datafile/embdata.h b/datafile/embdata.h new file mode 100644 index 0000000..9e40ba8 --- /dev/null +++ b/datafile/embdata.h @@ -0,0 +1,190 @@ +#ifndef EMBDATA_H +#define EMBDATA_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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 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 diff --git a/english.qm b/english.qm new file mode 100644 index 0000000000000000000000000000000000000000..884ead245b68e29d9e729558ab4ddeaef5e26e57 GIT binary patch literal 121 zcmcE7ks@*G{hX<16=n7(EZlq7iGhKEgK;Y35g^Tw3B=CKK!S%Mg&_?H(-|@t@;E?J zY(OmJRFt2cny28CnU|^%P?VorP{Ixr7JvwYL|rlybMn&}JAk76j12!78UHgf{a0b; I`me + + + + AdhesiveMachine + + + HMI Configuration + + + + + Interface debug mode + + + + + Delete configure file + + + + + Import CSV file + + + + + Delete CSV file + + + + + Reset CSV file + + + + + Machine parameters + + + + + Work parameters + + + + + InternetofThings configuration + + + + + Flip style + + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + + Horizontal flip style + + + + + vertical flip style + + + + + + No:0;Yes:1 + No:0;Yes:1; + + + + + Rotation angle + + + + + startX + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mm + + + + + Delete pattern configuration + + + + + Length of the stitch that needs to be split + + + + + startY + + + + + XY motor start and stop speed + + + + + + + + + r/min + + + + + XY motor return to zero speed + + + + + XY motor running speed + + + + + XY motor operating acceleration + + + + + + r/ss + + + + + Lifting start speed + + + + + + + mm/s + + + + + Lifting and returning to zero speed + + + + + Lifting and walking speed + + + + + Lifting and walking acceleration + + + + + mm/s2 + + + + + Slow motion speed + + + + + Operating speed + + + + + Working acceleration + + + + + Maximum operating speed + + + + + Minimum operating speed + + + + + Zero position coordinate of X motor + + + + + Zero position coordinate of Y motor + + + + + Zero position coordinate of lifting motor + + + + + Zero compensation of X motor + + + + + Y motor zeroing compensation + + + + + Zero compensation of lifting motor + + + + + Offset point X coordinate + + + + + Offset point Y coordinate + + + + + Calibration point coordinate X + + + + + Calibration point coordinate Y + + + + + Calibrate sensor height + + + + + Lower position coordinate of head lifting + + + + + Head lifting high position coordinate + + + + + Head lifting upper boundary + + + + + Lower boundary of nose lifting + + + + + X1 positive soft limit + + + + + X1 negative soft limit + + + + + X2 positive soft limit + + + + + X2 Negative soft limit + + + + + Y positive direction soft limit + + + + + Y negative direction soft limit + + + + + software limit allowed + + + + + Loading point coordinate X1 + + + + + Loading point coordinate X2 + + + + + Loading point coordinate Y + + + + + Coordinate X of glue discharge point + + + + + Coordinate Y of glue discharge point + + + + + Distance between left and right stations X + + + + + Distance between left and right stations Y + + + + + Workable range X+ of station 1 + + + + + Workable range X- of station 1 + + + + + Workable range X+ of station 2 + + + + + Workable range X- of station 2 + + + + + Working range Y+ + + + + + Working range Y- + + + + + Station 1 lifting low position coordinate + + + + + Station 2 lifting low position coordinate + + + + + Head lifting height when crossing frame + + + + + Automatic glue discharge waiting time + + + + + min + + + + + Automatic glue discharge duration + + + + + s + + + + + Power on automatic reset allowed + + + + + Analog working function + + + + + Start button mode + + + + + Automatic glue filling function + + + + + Dual station mode + + + + + Enable + + + + + Disable + + + + + JogP + + + + + JogN + + + + + Zero + + + + + Open + + + + + Close + + + + + X to move motor + + + + + Y to move motor + + + + + Lifting motor + + + + + Glue gun control + + + + + A Pneumatic ball valve of large rubber pump + + + + + Feeding control of small glue pump A + + + + + B Pneumatic ball valve of large rubber pump + + + + + B Feeding control of small glue pump + + + + + Reset All + + + + + Motor Zeroing + + + + + Station1 Gluing + + + + + Station2 Gluing + + + + + Head Up And Down + + + + + To Station1 Start + + + + + To Station2 Start + + + + + Work Pause + + + + + To Waitting Point + + + + + To Adhesive Point + + + + + Arrange Adhesive Once + + + + + Set Offset + + + + + Back Offset + + + + + Sew Set Start + + + + + Back Start + + + + + Check Frame + + + + + Forward And Back + + + + + Adjust Glue Height + + + + + SensorSign + + + + + Action + + + + + HMI Upgrade + + + + + MC Upgrade + + + + + ParaImport + + + + + ParaExport + + + + + SoftwareSet + + + + + SoftPower + + + + + Network + + + + + TimeSet + + + + + Version + + + + + Root + + + + + Para + + + + + SpeedGear + + + + + HeadHeight + + + + + Import + + + + + Export + + + + + Delete + + + + + Station1Select + + + + + Station2Select + + + + + PatternSwitching + + + + + OperatPara + + + + + ActionSet + + + + + SpeedPara + + + + + LimitPara + + + + + MCPara + + + + + X motor - zero position + + + + + X motor - positive limit + + + + + X motor - negative limit + + + + + Rubber discharge position of X motor + + + + + Y motor - zero position + + + + + Y motor - positive limit + + + + + Y motor - negative limit + + + + + Rubber discharge position of Y motor + + + + + Low liquid level alarm of large rubber pump A + + + + + Low liquid level shutdown of large rubber pump A + + + + + Low liquid level alarm of large rubber pump B + + + + + Low liquid level shutdown of large rubber pump B + + + + + High liquid level replenishment of small rubber pump A is completed + + + + + Low liquid level alarm of small rubber pump A + + + + + Stop at low liquid level of small glue pump A + + + + + High liquid level replenishment of small glue pump B is completed + + + + + Low liquid level alarm of small rubber pump B + + + + + Shutdown of small glue pump B at low liquid level + + + + + Z motor - zero position + + + + + Z motor - positive limit + + + + + Z motor - negative limit + + + + + Station 1 left limit + + + + + Station 1 right limit + + + + + Station 2 left limit + + + + + Station 2 right limit + + + + + PLC is not allowed to work + + + + + Left and right stations are not ready + + + + + Left station is not ready + + + + + Right station is not ready + + + + + The device has not started to work + + + + + X motor position is abnormal + + + + + Abnormal position of Y motor + + + + + The working state is not initialized + + + + + A large glue pump is short of glue + + + + + B large rubber pump is short of glue + + + + + A small glue pump is short of glue + + + + + The small rubber pump B is short of glue + + + + + The rubber discharge position is not reached + + + + + AutoPosPunchMachine + + + HMI Configuration + + + + + Interface debug mode + + + + + Delete configure file + + + + + Import CSV file + + + + + Delete CSV file + + + + + Reset CSV file + + + + + Machine parameters + + + + + Work parameters + + + + + InternetofThings configuration + + + + + Flip style + + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + + Horizontal flip style + + + + + vertical flip style + + + + + + No:0;Yes:1 + No:0;Yes:1; + + + + + Rotation angle + + + + + punching spindle start and stop speed + + + + + + + + + + + + + + + + + + r/min + + + + + main punching shaft zeroing speed + + + + + Spindle running speed + + + + + spindle punching speed + + + + + + + r/ss + + + + + spindle punching brake acceleration + + + + + XY start stop speed + + + + + + + + + + + + mm/s + + + + + XY zero run speed + + + + + XY idle running speed + + + + + XY walking acceleration + + + + + + mm/s2 + + + + + XY braking acceleration + + + + + XY manual movement speed 1 + + + + + XY manual movement speed 2 + + + + + XY manual movement speed 3 + + + + + XY maximum movement speed + + + + + X frame sensor coordinates + + + + + + + + + + + + + + + + + + + + + + + + + + mm + + + + + Delete pattern configuration + + + + + Length of the stitch that needs to be split + + + + + Y frame sensor coordinates + + + + + Spindle zero compensation angle + + + + + X-axis zero compensation + + + + + Y-axis zero compensation + + + + + X backlash compensation + + + + + Y backlash compensation + + + + + Number of handpieces + + + + + Number of punch hand + + + + + Infrared device configuration + + + + + X movable area negative border + + + + + X movable area positive border + + + + + X Punchable area negative boundary + + + + + X Positive boundary of punchable area + + + + + Y movable area negative boundary + + + + + Y movable area positive boundary + + + + + Y negative boundary of punchable area + + + + + Y positive boundary of punchable area + + + + + Starting and stopping speed of punch rotation + + + + + + + + deg/s + + + + + Zero speed of punch rotation + + + + + Rotating speed of punch + + + + + Acceleration of punch rotation motion + + + + + + deg/ss + + + + + Ram rotation brake acceleration + + + + + Maximum speed of punch rotation + + + + + Vacuum cleaner start delay + + + + + + + + s + + + + + Vacuum cleaner off delay + + + + + Duration of vacuuming + + + + + Punching color change spacing + + + + + Working mode of punching brush + + + + + automatic:0;Manual:1 + + + + + Maximum running speed of punching spindle + + + + + Automatic start angle adjustment + + + + + Single chip working time display mode + + + + + not display:0;monolithic:1;accumulative total:2 + + + + + + adjustment angle 1000 rpm + + + + + + adjustment angle 1100 rpm + + + + + + adjustment angle 1200 rpm + + + + + + adjustment angle 1300 rpm + + + + + + adjustment angle 1400 rpm + + + + + + adjustment angle 1500 rpm + + + + + + adjustment angle 1600 rpm + + + + + + adjustment angle 1700 rpm + + + + + + adjustment angle 1800 rpm + + + + + + adjustment angle 1900 rpm + + + + + + adjustment angle 2000 rpm + + + + + + adjustment angle 2100 rpm + + + + + speed limit 4-5mm + + + + + speed limit 5-6mm + + + + + speed limit 6-7mm + + + + + speed limit 7-8mm + + + + + speed limit 8-9mm + + + + + speed limit 9-14mm + + + + + speed limit 14+mm + + + + + Punching 1 rotation angle compensation 1 + + + + + Punching 1 rotation angle compensation 2 + + + + + Punching 1 rotation angle compensation 3 + + + + + Punching 1 rotation angle compensation 4 + + + + + Punching 1 rotation angle compensation 5 + + + + + Punching 1 rotation angle compensation 6 + + + + + Punching 2 rotation angle compensation 1 + + + + + Punching 2 rotation angle compensation 2 + + + + + Punching 2 rotation angle compensation 3 + + + + + Punching 2 rotation angle compensation 4 + + + + + Punching 2 rotation angle compensation 5 + + + + + Punching 2 rotation angle compensation 6 + + + + + Punching vacuum cleaner start interval + + + + + 1 tool punching tool life alarm + + + + + 2 tool punching tool life alarm + + + + + 3 tool punching tool life alarm + + + + + 4 tool punching tool life alarm + + + + + 5 tool punching tool life alarm + + + + + 6 tool punching tool life alarm + + + + + first head + + + + + second head + + + + + third head + + + + + fourth head + + + + + Production preset + + + + + Punching spindle working speed + + + + + Punching acceleration + + + + + Punching and moving frame method + + + + + xy continuous frame:0;xy intermittent frame:1 + + + + + XY moving frame acceleration and deceleration method + + + + + xy intermittent pulse without acceleration and deceleration:0;xy intermittent pulse sine acceleration and deceleration:1 + + + + + Punching Rotation + + + + + Punching continuous rotation:0;Punching indirect rotation:1 + + + + + Starting angle of punching frame + + + + + Persistence angle of punching frame + + + + + xy move + + + + + Minimum deviation angle for punching rotation deceleration + + + + + Continuous angle of punching rotation + + + + + Punching machine head 1 rotation control + + + + + Punching machine head 2 rotation control + + + + + Punching machine head 3 rotation control + + + + + Punching machine head 4 rotation control + + + + + Punching machine head 5 rotation control + + + + + Punching machine head 6 rotation control + + + + + Replace the punch count + + + + + + bout + + + + + Color change start method + + + + + Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2 + + + + + X embroidery frame reversing compensation + + + + + Y embroidery frame reversing compensation + + + + + Punching jump stitches to change the number of frame stitches + + + + + Needle + + + + + Reversing working mode + + + + + normal mode:0;Jog mode:1;Continuous jog mode:2 + + + + + Special needle position selection + + + + + none:0;1 needle position:1;2 needle position:2;3 needle position:3;4 needle position:4;5 needle position:5;6 needle position:6;7 needle position:7;8 needle position:8;9 needle position:9 + + + + + Special needle position function + + + + + Carved hole:0;brush:1 + + + + + Color change speed + + + + + light curtain + + + + + air pressure + + + + + Safety guardrail + + + + + Tricolor lamp + + + + + Oil pump alarm + + + + + Vacuum cleaner alarm + + + + + Punching spindle start jogging speed + + + + + X Working Range + + + + + Y Working Range + + + + + Punching rotation sensor angle + + + + + Maximum speed of punching and moving frame + + + + + mm/S + + + + + Jump maximum spindle speed + + + + + Blowing allowed + + + + + X offset point + + + + + Y offset point + + + + + offset point coordinates + + + + + invalid:0;x is valid:1;y is valid:2;xy are valid:3 + + + + + The stop position of the machine head after punching + + + + + current location:0;starting point:1;location point:2;feeding point:3;offset point:4 + + + + + Spindle jog parking angle + + + + + Refueling method selection + + + + + No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3 + + + + + Refueling needles interval + + + + + Needles + + + + + Refueling time interval + + + + + h + + + + + Refueling duration + + + + + Automatic air frame allowed + + + + + + + + Not allow:0;Allowed:1 + + + + + Automatic closing of air frame allowed + + + + + Automatic opening of air frame allowed + + + + + Code scanning allowed after automatic closing of air frame + + + + + Automatic air frame closing delay + + + + + ms + + + + + Enable + + + + + Disable + + + + + JogP + + + + + JogN + + + + + Zero + + + + + Open + + + + + Close + + + + + Up + + + + + Down + + + + + All punching spindle motor + + + + + No. 1 punching spindle motor + + + + + No. 2 punching spindle motor + + + + + No. 3 punching spindle motor + + + + + No. 4 punching spindle motor + + + + + X motor + + + + + Y motor + + + + + punching color changing motor + + + + + Punch rotate motor + + + + + template positioning cylinder + + + + + Vacuum cleaner + + + + + Safety barrier 1 + + + + + Safety barrier 2 + + + + + Punching refueling + + + + + Headlamp + + + + + All To Zero + + + + + Spindle Jog + + + + + Spindle Enable + + + + + Spindle Disable + + + + + Spindle Test + + + + + Set Offset + + + + + Go Offset + + + + + Set Start + + + + + Go Start + + + + + Go Work + + + + + Check Frame + + + + + Punch Change Tool + + + + + Forward And Back + + + + + Single Punch + + + + + To Right Up + + + + + To Right Down + + + + + To Left Up + + + + + To Left Down + + + + + Head Stop Lower + + + + + Draw Outline + + + + + Oil Supply + + + + + Tool Debug + + + + + Rotate To Zero + + + + + Signal + + + + + Action + + + + + HMIUpgrade + + + + + MCUpgrade + + + + + ParaImport + + + + + ParaExport + + + + + Software + + + + + Authorize + + + + + Network + + + + + WIFI + + + + + NeedleSet + + + + + Time + + + + + Shortcut + + + + + Statistics + + + + + Version + + + + + Root + + + + + errorjounal + + + + + Select + + + + + Para + + + + + Color + + + + + Import + + + + + Export + + + + + Delete + + + + + OperatPara + + + + + ActionSet + + + + + SpeedPara + + + + + LimitPara + + + + + MCPara + + + + + Start button + + + + + stop button + + + + + jog button + + + + + open frame 1 button + + + + + open frame 2 button + + + + + Safety light curtain + + + + + Spindle 1 zero position + + + + + Spindle 2 zero position + + + + + Spindle 3 zero position + + + + + Spindle 4 zero position + + + + + Punching 1 Rotation Zero + + + + + Punching 2 Rotation Zero + + + + + Punching 3 Rotation Zero + + + + + Punching 4 Rotation Zero + + + + + X1 zero position + + + + + Y1 zero position + + + + + X2 zero position + + + + + Y2 zero position + + + + + X1 slows down + + + + + Y1 deceleration + + + + + X2 downshift + + + + + Y2 downshift + + + + + 1 limit- + + + + + Y1 limit- + + + + + X2 limit - + + + + + Y2 limit - + + + + + 1 limit+ + + + + + Y1 limit+ + + + + + X2 limit + + + + + + Y2 limit + + + + + + Color change motor 1 zero position + + + + + Color change motor 2 zero position + + + + + + Punching color changing motor - zero position + + + + + Punching Color Change Motor - Negative Limit + + + + + Safety light curtain 1 input + + + + + Safety light curtain 2 input + + + + + open frame 3 button + + + + + open frame 4 button + + + + + + Air pressure protection input + + + + + Color change zero position 3 + Color change zero position 1 + + + + + Color change zero position 4 + Color change zero position 2 + + + + + X3 zero position + + + + + Y3 zero position + + + + + X4 zero position + + + + + Y4 zero position + + + + + X3 limit - + + + + + Y3 limit - + + + + + X4 limit - + + + + + Y4 limit - + + + + + X3 limit + + + + + + Y3 limit + + + + + + X4 limit + + + + + + Y4 limit + + + + + + Spindle position detection 1 + + + + + Spindle position detection 2 + + + + + Spindle position detection 3 + + + + + Spindle position detection 4 + + + + + Punching spindle is not at zero position + + + + + Punching 1 spindle is not at zero position + + + + + Vacuum cleaner clogged + + + + + Vacuum cleaner full + + + + + Abnormal oil pump pressure + + + + + + + Punching 2 spindle is not at zero position + + + + + Punching color change timeout + + + + + Punching needle position error + + + + + Punching 3 spindle is not at zero position + + + + + Punching 4 spindle is not at zero position + + + + + Breathing valve punching cylinder is not high + + + + + Abnormality on the punching hole of the breathing valve + + + + + Abnormal under the breathing valve punching + + + + + Abnormal expansion and contraction of the stopper under the punching valve of the breathing valve + + + + + BrokenLineDialog + + + Form + + + + + + 1 + + + + + Broken Line Prompt + dffghn + + + + ColorOrderSetWidget + + + Form + + + + + + Needle: + 针杆选择: + + + + + + + 100 + + + + + + Color num: + 当前色序: + + + + + + Total color: + 总颜色数: + + + + + End needle: + 结束针数: + + + + + dst + + + + + PageNums: 0/0 + + + + + Begin needle: + 开始针数: + + + + + Total needle: + 总针数: + + + + + + color order set + + + + + + + 1000000 + + + + + One + + + + + + Many + + + + + + 0 + + + + + + + + + Punch (P): + + + + + Emb (P): + + + + + + + Sew (S): + + + + + pageNum: + + + + + + Emb (E): + + + + + P + + + + + S + + + + + E + + + + + G + + + + + Punch: + + + + + + Gear set + + + + + Punch depth + + + + + + + Gear: + + + + + Non needle step + + + + + Needle + + + + + + Not set + + + + + ControlActionWidget + + + Form + + + + + Control action + 控制动作 + + + + + Control action < Auxiliary function + 控制动作 < 辅助功能 + + + + + PageNums: 1/1 + + + + + + + + + + + + + + + + TextLabel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PushButton + + + + + pageNum: + + + + + DebugDialog + + + Dialog + + + + + DebugFun + 调试功能 + + + + + DebugInfoDialog + + + Dialog + + + + + PageNums: 1/1 + + + + + DebugInfo: + + + + + pageNum: 0/0 + + + + + pageNum: + + + + + DialogCutLine + + + Dialog + + + + + jogN + + + + + jogP + + + + + Enable + + + + + Disable + + + + + Spindle + + + + + Zero + + + + + Lower the scissors to cut the thread + + + + + Lighting + + + + + Manual operation + + + + + + Open + + + + + + Close + + + + + + Trimming line angle + 压脚振幅 + + + + + + deg + + + + + + Trimming completion angle + 压脚振幅 + + + + + Thread trimming stroke + 压脚振幅 + + + + + Sewing and thread cutting + + + + + Sewing machine head lifting and lowering + + + + + CuttingLine debug + + + + + DialogDieCutter + + + Dialog + + + + + + jogN + + + + + + jogP + + + + + + Enable + + + + + + Disable + + + + + Spindle + + + + + + Zero + + + + + Rotate + + + + + Puch Manual operation + + + + + Punch a hole + + + + + Replacing the pole to zero + + + + + Punching jog + + + + + Color Change + + + + + Rotate to zero position + + + + + DieCutter debug + + + + + DialogNeedleShuttle + + + Dialog + + + + + + + + jogN + + + + + + + + jogP + + + + + + + + Enable + + + + + + + + Disable + + + + + Spindle + + + + + + + + Zero + + + + + Needle + + + + + Shuttle + + + + + Rotate + + + + + Close + + + + + Lighting + + + + + Open + + + + + Needle shuttle proofreading + + + + + Sewing machine head lifting and lowering + + + + + Manual operation + + + + + + Spindle parking sensor angle + 压脚振幅 + + + + + + deg + + + + + Angle of spindle hook sensor + 压脚振幅 + + + + + Needle off hook position + + + + + Shuttle off hook position + + + + + Sewing needle shuttle debugging + + + + + Spindle hook line sensor angle unit + + + + + GLOBAL + + + Init windows... + + + + + Language + + + + + Chinese:0;English:1 + Chinese:0;English:1;Spanish:2;Bengal:3;Portugal:4 + + + + + Year + + + + + Month + + + + + Day + + + + + Hour + + + + + Minute + + + + + Second + + + + + Resolution + + + + + PunchMachine: + + + + + PunchSew: + + + + + PunchMachineDZ: + + + + + PunchSewEmb: + + + + + TemplateSew: + + + + + SingleHead: + + + + + + DoubleleHead: + + + + + FourHead: + + + + + RotaryPunch: + + + + + singleleHead: + + + + + High and low speed switching + + + + + Parameter is classified + + + + + HMI decrypt + + + + + + + Frequently used button1 + + + + + + + + + + + + + + + + + + + + + + + + PunchSpindleJog: + + + + + + + + + + + + + + + + + + + + + + + + SewSpindleTest: + + + + + + + + + + + + + + + + + + + + + + + + Sewing head lifting: + + + + + + + + + + + + + + + + + + + + + + + + SewSpindleJog: + + + + + + + + + + + + + + + + + + + + + + + + PunchSetStartPoint: + + + + + + + + + + + + + + + + + + + + + + + + ChangeMachineSewHead: + + + + + + + + + + + + + + + + + + + + + + + + ChangeMachinePunchHead: + + + + + + + + + + + + + + Head 1 thread trimming: + + + + + + + + + + + + + + Head 2 thread trimming: + + + + + + + + + + + + + + + + + + + + + + + + Needle shuttle proofreading: + + + + + + + + + + + + + + + + + + + + + + + + BackCenter: + + + + + + + + + + + + + + BackAnchorPoint: + + + + + + + + + + + + + + EmbSetStartPoint: + + + + + + + + + + + + + + EmbSpindleTest: + + + + + + + + + + + + + + EmbSpindleJog: + + + + + + + + + + + + + + EmbChangeColor: + + + + + + + + + + + + + + EmbCutLine: + + + + + + + + + + + + + + ChangeMachineEmbHead: + + + + + + + + + + + + + + Sew thread trimming: + + + + + + + + + + + + + + Sew rotate proofreading: + + + + + + + + + + + + + + Needle shuttle reposition: + + + + + + + + + + + + + + Needle reset: + + + + + + + + + + + + + + Shuttle reset: + + + + + + + + + + + + + + Sew rotate up: + + + + + + + + + + + + + + Sew rotate down: + + + + + Communication method + + + + + Network:0;SerialPort:1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AllToZero: + + + + + + + + + + + + + + SpindleJog: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BackWorkPoint: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SetStartPoint: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BackStartPoint: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ForwardOrBackward: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PatternSelect: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Null: + + + + + + + Frequently used button2 + + + + + + + Frequently used button3 + + + + + + + Frequently used button4 + + + + + + + Frequently used button5 + + + + + + + Frequently used button6 + + + + + + + Frequently used button7 + + + + + + + Frequently used button8 + + + + + Network port:0;Serial port:1 + + + + + AdhesivePress: + + + + + + + + + + + + + + SpindleEnable: + + + + + + + + + + + + + + SpindleDisable: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SpindleTest: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckFrame: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ManualColorChange: + + + + + + + + + + + + + + ProcessReset: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SinglePunch: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FrameZero: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MoveToRightUp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MoveToRightDown: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MoveToLeftUp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MoveToLeftDown: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SetWorkRange: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PunchStopLower: + + + + + + + + + + + + + + DrawOutline: + + + + + + + + + + + + + + ToolDebug: + + + + + + + Frequently used button9 + + + + + + + Frequently used button10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SetOffsetPoint: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BackOffsetPoint: + + + + + Server IP settings + Gateway server IP settings + + + + + Server port settings + Gateway server port settings + + + + + Local IP settings + + + + + Local port settings + + + + + Machine type + + + + + Product type + + + + + ProductNull: + + + + + Is there a Richpeace logo + + + + + Is it with WiFi + + + + + Gateway connection method + + + + + Input rack number + + + + + Network settings + + + + + Factory expects delivery time + + + + + Debugging progress + + + + + + Stroke correction + + + + + MainWidget + + + Richpeace Embroidery Control System + 富怡绣花控制系统 + + + + + 2021/03/08 8:37:16 + + + + + + PgUp + + + + + + PgDn + + + + + + page:0/0 + + + + + + + + + + + + + + + + + + PatternSet + + + + + Assist + 辅助功能 + + + + + ParaSet + 参数设定 + + + + + Shortcut + 快捷功能 + + + + + Main + 主界面 + + + + + 0min + + + + + 0 + + + + + 90° + + + + + + 30 + + + + + + 4999 + + + + + + 1000.00,1000.00 + + + + + XPlatForm-RP-HMI-L1910-V210713 + + + + + + + Root + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + shortcut + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + assist + + + + + Pattern + 花样设置 + + + + + Pattern Name + + + + + 500.0 + + + + + + 1000.0 + + + + + X + + + + + 800.0 + + + + + W + + + + + C + + + + + H + C + + + + + 999 + + + + + 1000000 + + + + + Y + + + + + N + + + + + + + + + + + + + + + + + labelParaType + + + + + labelParaType2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DebugFunction + + + + + Close + 关闭 + + + + + Forward or back + 快进快退 + + + + + Init windows... + + + + + Init communication... + + + + + Connnecting... + Status:Connnecting... + + + + + + Connected + Status:Connected + + + + + + + Not connected + Status:Not connected + 状态 + + + + + Ready + Status:Ready + + + + + Working + Status: Working + + + + + Pattern para + + + + + + + Parameter setting + + + + + Pattern selection + + + + + Richpeace PunchSew Control System + + + + + Richpeace PressGlue Control System + + + + + + Needle setting + + + + + + Accessibility > Needle setting + + + + + Pattern import + + + + + Pattern export + + + + + Pattern delete + + + + + Pattern setting > Pattern selection + + + + + + Richpeace Punching Control System + Richpeace Wire Control System + + + + + Richpeace punchSewEmb Control System + + + + + Richpeace TemplateSew Control System + + + + + Color order set + + + + + Pattern setting > Color order set + + + + + Speed gear + + + + + Pattern setting > Speed gear + + + + + Head height + + + + + Pattern setting > Head height + + + + + Auxiliary function > Sensor signal + + + + + Auxiliary function > Control action + + + + + Accessibility > Software setting + + + + + Accessibility > Network Manage + + + + + Accessibility > Time setting + + + + + Accessibility > Common functions setting + + + + + + + Accessibility > Root + + + + + Pattern setting > Pattern import + + + + + Pattern setting > Pattern export + + + + + Pattern setting > Pattern delete + + + + + Undefined error, + + + + + Pattern setting > Pattern para + + + + + Frame angle setting + + + + + Root > Frame angle setting + + + + + Position parameters + + + + + Speed parameters + + + + + Action parameters + + + + + Detect parameters + + + + + Work parameters + + + + + pageNum: + + + + + Setting parameters + + + + + Parameter setting > + + + + + Parameter setting > Parameter setting + + + + + Sensor signal + + + + + Control action + + + + + + Accessibility + + + + + Time setting + + + + + Common functions setting + + + + + MainWidgetFunction + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Prompt + + + + + + + + + USB flash drive is not detected! + + + + + The program is corrupted, please re-upgrade after replacing the program! + + + + + The file format is wrong, please select again! + + + + + + + + + + File size not match, invalid file! + + + + + + + Data check error, invalid file! + + + + + Parameters imported successfully! + + + + + + + File head not match, invalid file! + + + + + Failed to initialize wlan0! + + + + + Failed to search for WiFi list. Please try again later! + + + + + dynamic + + + + + static + + + + + Failed to obtain IP. Please check the settings! + + + + + Parameter Import + + + + + Auxiliary Function > Parameter Import + + + + + + + + MC Upgrade + + + + + Auxiliary Function > MC Upgrade + MC Upgrade < Auxiliary Function + + + + + WIFI + + + + + Auxiliary Function > WIFI + + + + + Password input **** + + + + + Whether to exit the program? + + + + + HMI Upgrade + + + + + + + EXB Upgrade + + + + + Parameters exported successfully! + + + + + All to zero + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The machine is about to move, please pay attention to safety! + + + + + Spindle jog + + + + + Back work point + + + + + Back to origin + + + + + File bytes are 0, please check the file! + + + + + Work parameters imported fail! + + + + + Work parameters imported successfully! + + + + + Frame parameters imported fail! + + + + + Frame parameters imported successfully! + + + + + WkParameter Import + + + + + Auxiliary Function > WkParameter Import + + + + + Frame parameters exported successfully! + + + + + Emb hook position + + + + + Shuttle zero + + + + + Needle zero + + + + + + + Set start point + + + + + + + Whether to set the current point as the start point? + + + + + Back start point + + + + + Border check + + + + + Cutting thread up + + + + + Cutting thread down + + + + + Upper cutter + + + + + Spindle Gear Ratio Test + + + + + Whether to test the gear ratio of the spindle? + + + + + read parameter... + + + + + + Journal exported successfully! + + + + + Password input *** + + + + + reset parameters password successfully logged in! + + + + + Network error + + + + + Moving frame parameter import + + + + + Whether to import movable frame parameters? + + + + + Frame parameter Import + + + + + Root > Frame Parameter Import + Root > Parameter Import + + + + + Moving frame parameter export + + + + + Whether to export moving frame parameters? + + + + + + The settings take effect after restarting the interface! + + + + + Import csv file successful! + + + + + Do you delete the csv file? + + + + + Reset succeeded! + + + + + Is the pattern Fcg clear? + + + + + Delete complete,please reselect the file! + + + + + Not cleaned up! + + + + + If reset the pattern Fcg data? + + + + + Reset complete,please reselect the file! + + + + + + + + The machine is about to cut the thread, please pay attention to safety! + + + + + The scissors are about to move, please pay attention to safety! + + + + + Simulate frame + + + + + Goto zero pos + + + + + Set work range + + + + + If automatically set work range? + + + + + Manual oil + + + + + If manual oil? + + + + + + Face line detection + + + + + Exit successfully! + + + + + System info + + + + + Is the bottom line count reset? + Is the bottom line count reset ? + + + + + Are you sure to ManualSwitch? + Are you sure to ManualSwitch? + + + + + Are you sure to AutoSwitch? + Are you sure to AutoSwitch? + + + + + Password input * + Password input ※ + + + + + Password input ** + Password input ※※ + + + + + Three-level password successfully logged in! + + + + + Auto set softlimit + + + + + Is the version restored? + + + + + Do you delete the configuration file? + + + + + Is the pattern clear? + + + + + Delete complete! + + + + + Whether to shut down the computer? + + + + + Production statistics + + + + + + Parameters exported failed! + + + + + + Punch spindle enable + + + + + Is the punching spindle enabled? + + + + + Is the punching spindle disabled? + + + + + Punch spindle run + + + + + Sew spindle run + + + + + embroidered spindle run + + + + + Punch spindle jog + + + + + Sew spindle jog + + + + + embroidered spindle jog + + + + + Hook position + + + + + Rotate proofread + + + + + Sewing machine head lifting + + + + + Change to the sew head + + + + + Change to the punch head + + + + + Change to the embroidered head + + + + + Needle shuttle proofreading + + + + + Needle shuttle reset + + + + + Replacing shuttle positions + + + + + Sew rotate up + + + + + Sew rotate down + + + + + Whether to change the steering! + + + + + Punch rot to zero + + + + + Back anchor point + + + + + Back thread point + + + + + Back center point + + + + + Sew head set start point + + + + + Sew head set anchor point + + + + + + + Set anchor point + + + + + + + Whether to set the current point as the anchor point? + + + + + Punch head set start point + + + + + Punch head set anchor point + + + + + Emb head set start point + + + + + Emb head set anchor point + + + + + Left side out of frame + + + + + Left side is ok + + + + + Right side out of frame + + + + + Right side is ok + + + + + Lower side out of frame + + + + + Lower side is ok + + + + + Upper side out of frame + + + + + Upper side is ok + + + + + Click OK button machine will make a frame check, click the Cancel button machine will not move and exit this interface! + + + + + Sewing machine head thread cutting + + + + + Embroidered machine head thread cutting + + + + + Punch rod zero + + + + + Manual change color + + + + + embroidered Manual change color + + + + + Single punch + + + + + Work Pause + + + + + Do you want to suspend machine operation? + + + + + Process reset + + + + + The machine is about to reset, please pay attention to safety! + + + + + Goto gorner + + + + + Test adc + + + + + Punch ms down + + + + + Draw outline + + + + + Continuous oil supply + + + + + + No connection + + + + + Warrant + + + + + Reset all + + + + + Motor zeroing + + + + + Station 1 gluing + + + + + Station 2 gluing + + + + + head Up Down + + + + + to Station 1 Apos + + + + + to Station 2 Apos + + + + + Return to material waiting point + + + + + Backflow glue point + + + + + Discharge glue once + + + + + Adjust glue height + + + + + Total number of patterns processed: + + + + + Total punchs: + + + + + Pattern name: + + + + + Pattern break line num: + + + + + Head + + + + + break line num: + + + + + Day + + + + + Hour + + + + + Minutes + + + + + The remaining available time of the machine is + + + + + Failed to upgrade the main control system! + + + + + Perparalboard system upgrade failed! + + + + + Failed to send data file! + + + + + The main control system has been successed, waiting until machine restart + + + + + System will restart %1 s later + + + + + The external board system is upgraded! + + + + + The data file is send successfully! + + + + + Main control system is being upgraded... + + + + + Auxiliary Function > HMI Upgrade + + + + + Set offset point + + + + + Whether to set the current point as the offset point? + + + + + Back offset point + + + + + Auxiliary Function > Production statistics + + + + + Error Log + + + + + Auxiliary Function > Error Log + + + + + Breakage Log + + + + + Auxiliary Function > Breakage Log + + + + + ErrorLog + + + + + Auxiliary Function > ErrorLog + + + + + + ssid is empty! + + + + + Password input + + + + + The password cannot be less than 8 digits, please check! + + + + + + Settings require screen restart to take effect! + + + + + IP input + + + + + Whether to enter debug mode? + + + + + whether to exit debug mode? + + + + + Please log in to super user again! + + + + + The external board system upgrade... + + + + + Data file sending... + + + + + Journal exported failed! + + + + + Primary password successfully logged in! + + + + + + + The password is wrong,please re-enter! + + + + + Root successfully logged in! + + + + + HMI decrypt + + + + + The interface program is licensed, and then take effect after restarting, please restart manually! + + + + + Password error, interface program authorization failed! + + + + + NeedleBarSetWidget + + + Form + + + + + + NeedleBar Set + + + + + NumSet: + 个数设置 + + + + + 1 + + + + + EmbNeedleNum: + + + + + + + + PunchNeedleNum: + + + + + SewNeedleNum: + + + + + Number set + + + + + NumerInputDialog + + + Dialog + + + + + C + + + + + (0~3000)rmp + + + + + Number input + + + + + ← + + + + + ParameterSetDialog + + + Dialog + + + + + PageNums: 1/1 + + + + + Sub title + + + + + Sub title < Title + + + + + + pageNum: + + + + + Character input + + + + + Numbers of heads + + + + + Machine parameters + + + + + Work parameters + + + + + Traverse settings + + + + + Root > Machine parameters + + + + + HMI Configuration + + + + + Root > HMI Configuration + + + + + Root > Work parameters + + + + + Root > Traverse settings + + + + + Local port settings + + + + + + Local IP settings + + + + + IOT Configuration + + + + + Root > IOT Configuration + Root >IOT Configuration + + + + + Network Settings + + + + + IOT Configuration > Network Settings + IOT Configuration >Network Settings + + + + + Pattern parameters + + + + + Root > Pattern parameters + + + + + Server IP settings + + + + + Server Port settings + + + + + Local Port settings + + + + + Board IP settings + + + + + Board port settings + + + + + Whether to recover the default parameters for the head board? + + + + + + + + + + Network error + + + + + + + read parameter... + + + + + + + No connection + + + + + + + + + + + + + + + + Prompt + + + + + Whether to start traversing settings? + + + + + + Parameters saved successfully! + + + + + + The settings take effect after restarting the interface! + + + + + + Network settings are completed, re-establish after reboot + + + + + The time setting is completed and will take effect after restart + + + + + Unreasonable time setting, please reset + + + + + Time setting failed, please reset + + + + + Connection mode changes, take effect after the reboot! + + + + + Whether to recover the default parameters for the board? + + + + + Whether to exit traversing settings? + Whether to exit traversing settings? + + + + + Whether to exit lock test? + + + + + + + + Root + + + + + + + + Accessibility > Root + + + + + PassWordDialog + + + Dialog + + + + + Password + + + + + 9 + + + + + 1 + + + + + 2 + + + + + ← + + + + + 3 + + + + + 6 + + + + + 8 + + + + + C + + + + + 0 + + + + + 5 + + + + + 7 + + + + + 4 + + + + + Prompt + + + + + IP settings are unreasonable! + + + + + PatternManageWidget + + + Form + + + + + PageNums: 0/0 + + + + + Sub title < Title + + + + + Sub title + + + + + + 1000.0 + + + + + W + + + + + 500.0 + + + + + 999 + + + + + H + + + + + 1000000 + + + + + Y + + + + + X + + + + + 800.0 + + + + + dst + + + + + C + + + + + N + + + + + pageNum: + + + + + + + + + + Prompt + + + + + Over 1.28 million stitches, can not be imported! + + + + + Format error, can not be imported! + + + + + This file already exists! + + + + + Rename + + + + + Importing + + + + + Exporting + + + + + Import complete + + + + + Export complete + + + + + USB flash drive is not detected! + + + + + Whether to delete the pattern? + + + + + Operation screen + + + + + USB + + + + + + + Pattern Import + + + + + + + Pattern Import < Pattern setting + + + + + Pattern Export + + + + + Pattern Export < Pattern setting + + + + + new folder + + + + + This folder already exists! + + + + + PatternSelectWidget + + + Form + + + + + Name: + 花样名: + + + + + N + + + + + C + + + + + H + + + + + W + + + + + + X + + + + + + Y + + + + + Width + + + + + NeedleNum + + + + + Name + + + + + Height + + + + + ColorNum + + + + + RotateAngle: + 旋转角度: + + + + + 0 + + + + + P + + + + + PatternDirect: + 图案方向: + + + + + PatternHor: + 水平镜像: + + + + + + No + + + + + + PatternVer: + 垂直镜像: + + + + + Pattern Select + 花样选择 + + + + + Pattern Select < Pattern Setting + 花样选择 < 花样设置 + + + + + PageNums: 0/0 + + + + + PageNum: 0/0 + + + + + pageNum: + + + + + Prompt + + + + + The number of stitches of the selected pattern has reached the upper limit (2 million stitches), and it cannot be embroidered! + + + + + PromptDialog + + + Dialog + + + + + Prompt + + + + + 1 + + + + + Current Punch: + Current Needle: + 当前冲刀: + + + + + ID: + + + + + Password: + 密码: + + + + + ID + + + + + DecryptInfo + + + + + DecryptInfo: + 解密信息: + + + + + New Password: + 密码: + + + + + Confirm Password: + 解密信息: + + + + + X + + + + + + X - + + + + + Y + + + + + + Y - + + + + + Board: + + + + + Unlimited time + + + + + Time has run out + + + + + Day + + + + + Hour + + + + + Minutes + + + + + ID: %1 + + + + + + Password: %1 + + + + + + Time: %1 + + + + + Warrant + + + + + New Password input + + + + + Confirm Password input + + + + + HMI decrypt + + + + + PunchMachine + + + HMI Configuration + + + + + Interface debug mode + + + + + Delete configure file + + + + + Import CSV file + + + + + Delete CSV file + + + + + Reset CSV file + + + + + Machine parameters + + + + + Work parameters + + + + + InternetofThings configuration + + + + + High speed or low speed + + + + + Flip style + + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + + Horizontal flip style + + + + + vertical flip style + + + + + + No:0;Yes:1 + No:0;Yes:1; + + + + + Rotation angle + + + + + startX + + + + + + + + + + + + + + + + + + + + + + + + + + + + mm + + + + + Delete pattern configuration + + + + + Length of the stitch that needs to be split + + + + + startrY + + + + + punching spindle start and stop speed + + + + + + + + + + + + + + + + + + r/min + + + + + main punching shaft zeroing speed + + + + + Spindle running speed + + + + + spindle punching speed + + + + + + + r/ss + + + + + spindle punching brake acceleration + + + + + XY start stop speed + + + + + + + + + + + + mm/s + + + + + XY zero run speed + + + + + XY idle running speed + + + + + XY walking acceleration + + + + + + mm/s2 + + + + + XY braking acceleration + + + + + XY manual movement speed 1 + + + + + XY manual movement speed 2 + + + + + XY manual movement speed 3 + + + + + XY maximum movement speed + + + + + X frame sensor coordinates + + + + + Y frame sensor coordinates + + + + + Spindle zero compensation angle + + + + + X-axis zero compensation + + + + + Y-axis zero compensation + + + + + X backlash compensation + + + + + Y backlash compensation + + + + + Number of handpieces + + + + + Number of punch hand + + + + + Infrared device configuration + + + + + X movable area negative border + + + + + X movable area positive border + + + + + X Punchable area negative boundary + + + + + X Positive boundary of punchable area + + + + + Y movable area negative boundary + + + + + Y movable area positive boundary + + + + + Y negative boundary of punchable area + + + + + Y positive boundary of punchable area + + + + + Starting and stopping speed of punch rotation + + + + + + + + deg/s + + + + + Zero speed of punch rotation + + + + + Rotating speed of punch + + + + + Acceleration of punch rotation motion + + + + + + deg/ss + + + + + Ram rotation brake acceleration + + + + + Maximum speed of punch rotation + + + + + Vacuum cleaner start delay + + + + + + + + s + + + + + Vacuum cleaner off delay + + + + + Duration of vacuuming + + + + + Punching color change spacing + + + + + Working mode of punching brush + + + + + automatic:0;Manual:1 + + + + + Maximum running speed of punching spindle + + + + + Automatic start angle adjustment + + + + + Single chip working time display mode + + + + + not display:0;monolithic:1;accumulative total:2 + + + + + + adjustment angle 1000 rpm + + + + + + adjustment angle 1100 rpm + + + + + + adjustment angle 1200 rpm + + + + + + adjustment angle 1300 rpm + + + + + + adjustment angle 1400 rpm + + + + + + adjustment angle 1500 rpm + + + + + + adjustment angle 1600 rpm + + + + + + adjustment angle 1700 rpm + + + + + + adjustment angle 1800 rpm + + + + + + adjustment angle 1900 rpm + + + + + + adjustment angle 2000 rpm + + + + + + adjustment angle 2100 rpm + + + + + speed limit 4-5mm + + + + + speed limit 5-6mm + + + + + speed limit 6-7mm + + + + + speed limit 7-8mm + + + + + speed limit 8-9mm + + + + + speed limit 9-14mm + + + + + speed limit 14+mm + + + + + Punching 1 rotation angle compensation 1 + + + + + Punching 1 rotation angle compensation 2 + + + + + Punching 1 rotation angle compensation 3 + + + + + Punching 1 rotation angle compensation 4 + + + + + Punching 1 rotation angle compensation 5 + + + + + Punching 1 rotation angle compensation 6 + + + + + Punching 2 rotation angle compensation 1 + + + + + Punching 2 rotation angle compensation 2 + + + + + Punching 2 rotation angle compensation 3 + + + + + Punching 2 rotation angle compensation 4 + + + + + Punching 2 rotation angle compensation 5 + + + + + Punching 2 rotation angle compensation 6 + + + + + Punching vacuum cleaner start interval + + + + + 1 tool punching tool life alarm + + + + + 2 tool punching tool life alarm + + + + + 3 tool punching tool life alarm + + + + + 4 tool punching tool life alarm + + + + + 5 tool punching tool life alarm + + + + + 6 tool punching tool life alarm + + + + + first head + + + + + second head + + + + + third head + + + + + fourth head + + + + + Production preset + + + + + Punching spindle working speed + + + + + Punching acceleration + + + + + Punching and moving frame method + + + + + xy continuous frame:0;xy intermittent frame:1 + + + + + XY moving frame acceleration and deceleration method + + + + + xy intermittent pulse without acceleration and deceleration:0;xy intermittent pulse sine acceleration and deceleration:1 + + + + + Punching Rotation + + + + + Punching continuous rotation:0;Punching indirect rotation:1 + + + + + Starting angle of punching frame + + + + + Persistence angle of punching frame + + + + + xy move + + + + + Minimum deviation angle for punching rotation deceleration + + + + + Continuous angle of punching rotation + + + + + Punching machine head 1 rotation control + + + + + Punching machine head 2 rotation control + + + + + Punching machine head 3 rotation control + + + + + Punching machine head 4 rotation control + + + + + Punching machine head 5 rotation control + + + + + Punching machine head 6 rotation control + + + + + Replace the punch count + + + + + + bout + + + + + Color change start method + + + + + Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2 + + + + + X embroidery frame reversing compensation + + + + + Y embroidery frame reversing compensation + + + + + Punching jump stitches to change the number of frame stitches + + + + + Needle + + + + + Reversing working mode + + + + + normal mode:0;Jog mode:1;Continuous jog mode:2 + + + + + Special needle position selection + + + + + none:0;1 needle position:1;2 needle position:2;3 needle position:3;4 needle position:4;5 needle position:5;6 needle position:6;7 needle position:7;8 needle position:8;9 needle position:9 + + + + + Special needle position function + + + + + Carved hole:0;brush:1 + + + + + Color change speed + + + + + light curtain + + + + + air pressure + + + + + Safety guardrail + + + + + Tricolor lamp + + + + + Oil pump alarm + + + + + Vacuum cleaner alarm + + + + + Punching spindle start jogging speed + + + + + X Working Range + + + + + Y Working Range + + + + + Punching rotation sensor angle + + + + + Maximum speed of punching and moving frame + + + + + mm/S + + + + + Jump maximum spindle speed + + + + + Blowing allowed + + + + + X offset point + + + + + Y offset point + + + + + offset point coordinates + + + + + invalid:0;x is valid:1;y is valid:2;xy are valid:3 + + + + + The stop position of the machine head after punching + + + + + current location:0;starting point:1;location point:2;feeding point:3;offset point:4 + + + + + Spindle jog parking angle + + + + + Refueling method selection + + + + + No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3 + + + + + Refueling needles interval + + + + + Needles + + + + + Refueling time interval + + + + + h + + + + + Refueling duration + + + + + Automatic air frame allowed + + + + + + + + Not allow:0;Allowed:1 + + + + + Automatic closing of air frame allowed + + + + + Automatic opening of air frame allowed + + + + + Code scanning allowed after automatic closing of air frame + + + + + Automatic air frame closing delay + + + + + ms + + + + + Enable + + + + + Disable + + + + + JogP + + + + + JogN + + + + + Zero + + + + + Open + + + + + Close + + + + + Up + + + + + Down + + + + + All punching spindle motor + + + + + No. 1 punching spindle motor + + + + + No. 2 punching spindle motor + + + + + No. 3 punching spindle motor + + + + + No. 4 punching spindle motor + + + + + X motor + + + + + Y motor + + + + + punching color changing motor + + + + + Punch rotate motor + + + + + template positioning cylinder + + + + + Vacuum cleaner + + + + + Safety barrier 1 + + + + + Safety barrier 2 + + + + + Punching refueling + + + + + Headlamp + + + + + All To Zero + + + + + Spindle Jog + + + + + Spindle Enable + + + + + Spindle Disable + + + + + Spindle Test + + + + + Set Offset + + + + + Go Offset + + + + + Set Start + + + + + Go Start + + + + + Go Work + + + + + Check Frame + + + + + Punch Change Tool + + + + + Forward And Back + + + + + Single Punch + + + + + To Right Up + + + + + To Right Down + + + + + To Left Up + + + + + To Left Down + + + + + Head Stop Lower + + + + + Draw Outline + + + + + Oil Supply + + + + + Tool Debug + + + + + Rotate To Zero + + + + + Signal + + + + + Action + + + + + HMIUpgrade + + + + + MCUpgrade + + + + + ParaImport + + + + + ParaExport + + + + + Software + + + + + Authorize + + + + + Network + + + + + WIFI + + + + + NeedleSet + + + + + Time + + + + + Shortcut + + + + + Statistics + + + + + Version + + + + + Root + + + + + errojunel + + + + + Select + + + + + Para + + + + + Color + + + + + Import + + + + + Export + + + + + Delete + + + + + OperatPara + + + + + ActionSet + + + + + SpeedPara + + + + + LimitPara + + + + + MCPara + + + + + Start button + + + + + stop button + + + + + jog button + + + + + open frame 1 button + + + + + open frame 2 button + + + + + Safety light curtain + + + + + Spindle 1 zero position + + + + + Spindle 2 zero position + + + + + Spindle 3 zero position + + + + + Spindle 4 zero position + + + + + Punching 1 Rotation Zero + + + + + Punching 2 Rotation Zero + + + + + Punching 3 Rotation Zero + + + + + Punching 4 Rotation Zero + + + + + X1 zero position + + + + + Y1 zero position + + + + + X2 zero position + + + + + Y2 zero position + + + + + X1 slows down + + + + + Y1 deceleration + + + + + X2 downshift + + + + + Y2 downshift + + + + + 1 limit- + + + + + Y1 limit- + + + + + X2 limit - + + + + + Y2 limit - + + + + + 1 limit+ + + + + + Y1 limit+ + + + + + X2 limit + + + + + + Y2 limit + + + + + + + Punching color changing motor - zero position + + + + + Punching Color Change Motor - Negative Limit + + + + + Safety light curtain 1 input + + + + + Safety light curtain 2 input + + + + + open frame 3 button + + + + + open frame 4 button + + + + + + Air pressure protection input + + + + + Color change zero position 1 + + + + + Color change zero position 2 + + + + + Color change zero position 3 + + + + + Color change zero position 4 + + + + + X3 zero position + + + + + Y3 zero position + + + + + X4 zero position + + + + + Y4 zero position + + + + + X3 limit - + + + + + Y3 limit - + + + + + X4 limit - + + + + + Y4 limit - + + + + + X3 limit + + + + + + Y3 limit + + + + + + X4 limit + + + + + + Y4 limit + + + + + + Spindle position detection 1 + + + + + Spindle position detection 2 + + + + + Spindle position detection 3 + + + + + Spindle position detection 4 + + + + + Punching spindle is not at zero position + + + + + Punching 1 spindle is not at zero position + + + + + Vacuum cleaner clogged + + + + + Vacuum cleaner full + + + + + Abnormal oil pump pressure + + + + + + + Punching 2 spindle is not at zero position + + + + + Punching color change timeout + + + + + Punching needle position error + + + + + Punching 3 spindle is not at zero position + + + + + Punching 4 spindle is not at zero position + + + + + Breathing valve punching cylinder is not high + + + + + Abnormality on the punching hole of the breathing valve + + + + + Abnormal under the breathing valve punching + + + + + Abnormal expansion and contraction of the stopper under the punching valve of the breathing valve + + + + + PunchSewEmbMachine + + + HMI Configuration + + + + + Delete configure file + + + + + Import CSV file + + + + + Delete CSV file + + + + + Reset CSV file + + + + + Machine parameters + + + + + Work parameters + + + + + InternetofThings configuration + + + + + Flip style + + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + + Horizontal flip style + + + + + + No:0;Yes:1 + No:0;Yes:1; + + + + + vertical flip style + + + + + Rotation angle + + + + + Length of the stitch that needs to be split + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mm + + + + + startX + + + + + startrY + + + + + AnchorX + + + + + Delete pattern configuration + + + + + AnchorY + + + + + Continuous motion frame compensation + + + + + Needle tip compensation + + + + + Number of heads + + + + + sewing needles per head + + + + + emb needles per head + + + + + punch needles per head + + + + + X axis configuration + + + + + + + + + + + + + + + + + + + + + + + + + + + + No:0;Have:1 + + + + + X axis motor drive selection + + + + + + + + Single motor:0;Double motor:1 + + + + + X axis coordinate system selection + + + + + + + + Positive:0;Reverse:1 + + + + + X axis moving object selection + + + + + + + + Head:0;Frame:1 + + + + + X axis zero sensor selection + + + + + X axis speed reduction sensor selection + + + + + X axis positive limit sensor selection + + + + + X axis negative limit sensor selection + + + + + X axis zero direction selection + + + + + + + + Negative:0;Positive:1 + + + + + X axis sensor function selection + + + + + + + + Zero separate:0;Zero and speed reduction:1 + + + + + Y axis configuration + + + + + Y axis motor drive selection + + + + + Y axis coordinate system selection + + + + + Y axis moving object selection + + + + + Y axis zero sensor selection + + + + + Y axis speed reduction sensor selection + + + + + Y axis positive limit sensor selection + + + + + Y axis negative limit sensor selection + + + + + Y axis zero direction selection + + + + + Y axis sensor function selection + + + + + X2 axis configuration + + + + + X2 axis motor drive selection + + + + + X2 axis coordinate system selection + + + + + X2 axis moving object selection + + + + + X2 axis zero sensor selection + + + + + X2 axis speed reduction sensor selection + + + + + X2 axis positive limit sensor selection + + + + + X2 axis negative limit sensor selection + + + + + X2 axis zero direction selection + + + + + X2 axis sensor function selection + + + + + Y2 axis configuration + + + + + Y2 axis motor drive selection + + + + + Y2 axis coordinate system selection + + + + + Y2 axis moving object selection + + + + + Y2 axis zero sensor selection + + + + + Y2 axis speed reduction sensor selection + + + + + Y2 axis positive limit sensor selection + + + + + Y2 axis negative limit sensor selection + + + + + Y2 axis zero direction selection + + + + + Y2 axis sensor function selection + + + + + Sewing spindle configuration + + + + + Needle shuttle configuration + + + + + Needle shuttle:0;Needle shuttle separation:1 + + + + + Lift motor configuration + + + + + Presser foot motor configuration + + + + + Rotating motor configuration + + + + + + + Rotary motor coordinate system + + + + + Single motor: 0 ; Double motor: 1 + + + + + The coordinate system is positive: 0 ; Coordinate system is reverse: 1 + + + + + Machine head: 0 ; box: 1 + + + + + Rotation limit + + + + + Unlimited: 0 ; limited: 1 + + + + + Lower scissors drive selection + + + + + No lower trimming device:0;Cylinder:1;AC motor:2;Stepper motor:3;Electromagnet:4 + + + + + Lower trimming mode selection + + + + + Static trimming:0;Dynamic trimming:1;Cam trimming:2;Cam respectively trimming:3 + + + + + Upper scissors drive selection + + + + + No Upper trimming Device:0;Cylinder:1 + + + + + Upper thread break detection device selection + + + + + No:0;Pick wire spring:1;Electronic isolation:2 + + + + + Bottom line break detection device selection + + + + + No device: 0 ; Grating wheel: 1 ; Magnetic encoder: 2;Immediate alarm by length:3 + + + + + Wire break detection mode selection + + + + + Direct detection:0;EXBboard detection:1 + + + + + Hook line device selection + + + + + No hook line device:0;Cylinder:1;Electromagnet:2 + + + + + Loose line device selection + + + + + No loose wire device:0;Cylinder:1;Electromagnet:2 + + + + + Ramen line device selection + + + + + No ramen line device:0;Cylinder:1;Electromagnet:2 + + + + + Bottom line device selection + + + + + No bottom line device:0;Cylinder:1;Electromagnet:2 + + + + + Second loose line device selection + + + + + No loose wire device: 0 ; cylinder: 1 ; Electromagnet: 2 + + + + + Template recognition device + + + + + No identification device: 0 ; Bar code: 1 ; Coding hole: 2 + + + + + The hook faces the direction + + + + + Forward:0;Left:1;Right:2;Up:3 + + + + + Template detecting device + + + + + No detection device: 0 ; Detect: 1 + + + + + X box sensor coordinates + + + + + Y box sensor coordinates + + + + + Spindle parking sensor angle + + + + + Presser foot sensor coordinates + + + + + Rotation sensor angle + + + + + Spindle hook line sensor angle unit + + + + + Punch parking angle + + + + + Knife parking angle + + + + + X2 box sensor coordinates + + + + + Y2 box sensor coordinates + + + + + Spindle jog parking angle + + + + + Flat embroidery spindle parking angle + + + + + X movable area negative boundary + + + + + X movable area positive boundary + + + + + Y movable area negative boundary + + + + + Y movable area positive boundary + + + + + Presser foot lift can move the upper boundary + + + + + Presser foot lift can move the lower boundary + + + + + Motor presser pulse equivalent molecule + + + + + Motor presser pulse equivalent denominator + + + + + Rotation range positive limit angle + + + + + Rotation range negative limit angle + + + + + Punching head offset X + + + + + Punching head offset Y + + + + + X Sewing area Negative boundary + + + + + X Sewing area Positive margin + + + + + Y Sewing area Negative boundary + + + + + Y Sewing area Positive margin + + + + + X Can be perforated region Negative boundary + + + + + X Can be perforated region Positive margin + + + + + Y Can be perforated region Negative boundary + + + + + Y Can be perforated region Positive margin + + + + + Sewing right head offset X + + + + + Sewing right head offset Y + + + + + Cutter head offset X + + + + + Cutter head offset Y + + + + + x can crop the negative boundary of the area + + + + + x can crop the positive boundary of the area + + + + + y can crop the negative boundary of the area + + + + + y can crop the positive boundary of the area + + + + + XY start stop speed + + + + + + + + + + + + + + + + + + + + + + + mm/s + + + + + XY zero running speed + + + + + XY Idling speed + + + + + XY walking acceleration + + + + + + + + + + + + mm/s2 + + + + + XY brake acceleration + + + + + XY manual movement speed 1 + + + + + XY manual movement speed 2 + + + + + XY manual movement speed 3 + + + + + XY maximum moving speed + + + + + Spindle start stop speed + + + + + + + + + + + + + + + + + + + r/min + + + + + Spindle zero return speed + + + + + Spindle running speed + + + + + Spindle running acceleration + + + + + + + + + r/ss + + + + + Spindle brakes acceleration + + + + + sewing maximum speed + + + + + + Head lift start end speed + + + + + Head lift and zero speed + + + + + Head lift walk speed + + + + + Head lift acceleration + + + + + Head movements brake acceleration + + + + + Presser foot lift zero speed + + + + + Presser foot lifting speed + + + + + Presser foot lifting acceleration + + + + + Presser foot lift brake acceleration + + + + + Head rotation start stop speed + + + + + + + + + + + + deg/s + + + + + Head rotation zero return speed + + + + + Head rotation speed + + + + + Head rotation acceleration + + + + + + + + deg/s2 + + + + + Head rotation brake acceleration + + + + + Head rotation maximum speed + + + + + + Left loading point X + + + + + + Left loading point Y + + + + + + Right loading point X + + + + + + Right loading point Y + + + + + + Template box width + + + + + Template frame start and stop speed + + + + + Template frame waking speed + + + + + Template frame waking acceleration + + + + + Template frame brake acceleration + + + + + Compensation angle of upper machine head rotation return to zero + + + + + Compensation angle of lower machine head rotation return to zero + + + + + Spindle zero compensation angle + + + + + Flat embroidery head offset X + + + + + Flat embroidery head offset Y + + + + + Flat embroidery X area negative boundary + + + + + + + Flat embroidery X area positive boundary + + + + + Start speed of punching rotation + + + + + Punch rotation zero speed + + + + + + Rotating speed of punch + + + + + Acceleration of ram punch + + + + + Ram punch rotation brake acceleration + + + + + X gap compensation + + + + + Y gap compensation + + + + + Brush offset X + + + + + Brush offset Y + + + + + Track offset X + + + + + Track offset Y + + + + + sewing work speed + + + + + Spindle Cut line speed + + + + + Spindle Back needle speed + + + + + Spindle start slow speed + + + + + Reverse equivalent spindle speed + + + + + Sewing moving frame + + + + + Continuous:0;Intermittent:1 + + + + + Sewing acceleration and deceleration mode + + + + + No acceleration or deceleration:0;Xy sine acceleration and deceleration:1 + + + + + Sewing machine head rotating manner + + + + + Continuous rotation:0;Xy intermittent rotation:1 + + + + + Sewing head deceleration mode + + + + + No acceleration or deceleration:0;Intermittent acceleration and deceleration:1 + + + + + Sewing movable frame starting angle + + + + + Sewing movable frame duration angle + + + + + Start low speed needls + + + + + + + + Needles + + + + + Needle action loose line allowed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Not allow:0;Allowed:1 + + + + + Needle action top line allowed + + + + + Needle action clamp line allowed + + + + + Allow to embroider line allowed + + + + + Cut lines allow + + + + + Do not trim: 0;Automatic thread trim:1;Data trim:2 + + + + + Trimming line angle + + + + + Trimming completion angle + + + + + Action loosening when thread trimming + + + + + Action wire pull when thread trimming + + + + + Action clip line allows when trimming + + + + + The action of lifting the presser foot during thread cutting is allowed + + + + + The action of lifting the machine head during thread cutting allows for thread cutting + + + + + The action of lifting the machine head during thread cutting allows for thread clamping + + + + + When cutting the thread, the action is allowed to hook the thread under the pressure foot + + + + + Number of broken wires + + + + + Broken line detection spindle angle + + + + + Change bobbin Reminder function + + + + + Not:0;Delay reminder by length:1;Count by number of slices:2;Immediately reminder by length:3 + + + + + Bottom line length + + + + + Bottom line correction per stitch + + + + + Number of shuttles + + + + + times + + + + + Refueling method selection + + + + + No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3 + + + + + Refueling needles interval + + + + + Refueling time interval + + + + + + + + + + + s + + + + + Refueling duration + + + + + Parking position selection after completion + + + + + Current:0;Starting:1;Anchor:2;Feeding:3;Offset:4 + + + + + Offset point coordinate valid flag + + + + + + Invalid:0;X is valid:1;Y is valid:2;XY is valid:3 + + + + + Offset point coordinate X + + + + + Offset point coordinate Y + + + + + Threading point coordinate effective mark + + + + + Threading point coordinates X + + + + + Threading point coordinates Y + + + + + Machine head low position + + + + + Machine head heigh position + + + + + Production preset + + + + + Illumination brightness + + + + + Delay after the air frame is closed + + + + + Sewing acceleration + + + + + Trimming frame displacement + + + + + Sewing blow allowed + + + + + Sewing the needle allowed + + + + + Automatic loopback point allowed + + + + + Sewing head rotation allowed + + + + + Send sidebar allowed + + + + + Punching blow allowed + + + + + Vacuum cleaner off delay + + + + + Punching spindle speed + + + + + Punching acceleration + + + + + Punching movable frame mode + + + + + AContinuous:0;BIntermittent:1 + + + + + Punching acceleration and deceleration mode + + + + + No acceleration or deceleration:0;XY sine acceleration and deceleration:1 + + + + + Punching frame starting angle + + + + + Punching frame continuous angle + + + + + Sewing move head up down + + + + + Punching move head up down + + + + + Moving basket Loose line + + + + + Moving basket Clamp line + + + + + Software limit XY move allowed + + + + + Software limit sewing head lifting allowed + + + + + Software limit punch head lifting allowed + + + + + Software limit cutter head lift allowed + + + + + Software limit Punch drop allowed + + + + + Software limit embroidery falling pole allowed + + + + + + Shuttle rotation angle + + + + + Number of needle hooks + + + + + + needle + + + + + Presser foot height during sewing work + + + + + Head height during simulated work + + + + + Cutter working speed + + + + + Cutter acceleration + + + + + Trimming frame direction + + + + + Stop:0;Left:1;Forward:2;Right:3;Backward:4 + + + + + track formed up and down + + + + + Spindle corner speed + + + + + Minimum speed deviation angle + + + + + Slow down the needle step in advance + + + + + Delay speed up needle step + + + + + Minimum deviation angle of punching rotation deceleration + + + + + Punch rotation duration angle + + + + + Working permission of sewing machine head + + + + + Work permit of punch head + + + + + Embroidery machine head work permit + + + + + Auto Zero after power on + + + + + Punch rotation control 1 + + + + + Punch rotation control 2 + + + + + Punch rotation control 3 + + + + + Punch rotation control 4 + + + + + Punch rotation control 5 + + + + + Punch rotation control 6 + + + + + Color change start method + + + + + Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2 + + + + + X frame commutation compensation + + + + + Y frame commutation compensation + + + + + The way of mending flat embroidery + + + + + mending emb off: 0 ; mending emb by hand: 1 ; mending emb auto: 2 + + + + + Locking times + + + + + Number of needle locking steps + + + + + Length of lock needle + + + + + Start working position mode + + + + + From the Stop lot: 0 ; From the current location, do not save: 1 ; From the current location, save: 2 + + + + + Punching jump stitches to change the number of stitches beyond the frame + + + + + Punching jog mode + + + + + Lock rotate:0;rotate Lock:1 + + + + + Reverse operation mode + + + + + normal:0;click:1;continue click:2 + + + + + Special needle choose + + + + + nothing:0;one:1;two:2;three:3;four:4;five:5;six:6;seven:7;eight:8;nine:9 + + + + + Special needle function + + + + + Carved hole:0;paint brush:1 + + + + + Vacuum cleaner start delay + + + + + Color change speed + + + + + first head + + + + + second head + + + + + third head + + + + + fourth head + + + + + fifth head + + + + + sixth head + + + + + seventh head + + + + + eighth head + + + + + ninth head + + + + + tenth head + + + + + eleventh head + + + + + twelfth head + + + + + thirteenth head + + + + + fourteenth head + + + + + fifteenth head + + + + + sixteent head + + + + + seventeenth head + + + + + eighteenth head + + + + + nineteenth head + + + + + twentieth head + + + + + twenty-first head + + + + + twenty-second head + + + + + twenty-third head + + + + + twenty-fourth head + + + + + twenty-fifth head + + + + + twenty-sixth head + + + + + twenty-seventh head + + + + + twenty-eighth head + + + + + twenty-ninth head + + + + + thirtieth head + + + + + thirty-first head + + + + + thirty-second head + + + + + Secure input light curtain allows + + + + + Safety input pressure allowed + + + + + Safe input power-on signal allowed + + + + + Safe input emergency door allowed + + + + + Automatic air box allowed + + + + + Automatic air frame closing delay + + + + + + ms + + + + + Stitch offset allows + + + + + Loop work allowed + + + + + Right Work head selection 1 + + + + + Right Work head selection 2 + + + + + Right Work head selection 3 + + + + + Right Work head selection 4 + + + + + Right Work head selection 5 + + + + + Right Work head selection 6 + + + + + Right Work head selection 7 + + + + + Right Work head selection 8 + + + + + Right Work head selection 9 + + + + + Right Work head selection 10 + + + + + Right Work head selection 11 + + + + + Right Work head selection 12 + + + + + Right Work head selection 13 + + + + + Right Work head selection 14 + + + + + Right Work head selection 15 + + + + + Right Work head selection 16 + + + + + Right Work head selection 17 + + + + + Right Work head selection 18 + + + + + Right Work head selection 19 + + + + + Right Work head selection 20 + + + + + Right Work head selection 21 + + + + + Right Work head selection 22 + + + + + Right Work head selection 23 + + + + + Right Work head selection 24 + + + + + Right Work head selection 25 + + + + + Right Work head selection 26 + + + + + Right Work head selection 27 + + + + + Right Work head selection 28 + + + + + Right Work head selection 29 + + + + + Right Work head selection 30 + + + + + Right Work head selection 31 + + + + + Right Work head selection 32 + + + + + Pulling motor pull position + + + + + Pull length + + + + + Cutting length + + + + + Shuttle refueling duration + + + + + Clamping force 1 + + + + + Clamping force 2 + + + + + Clamping force 3 + + + + + Clamping force 4 + + + + + Flat embroidery spindle working speed + + + + + Flat embroidery acceleration + + + + + Flat embroidery frame + + + + + continuous: 0 ; intermittent: 1 + + + + + Flat embroidery acceleration mode + + + + + No acceleration or deceleration: 0 ; Xy sine acceleration and deceleration: 1 + + + + + Flat embroidery frame starting angle + + + + + Flat embroidery frame continuous angle + + + + + jump max speed + + + + + Flat embroidery jump to offset Needles count + + + + + Embroidery move max speed + + + + + Punching spindle start slow speed + + + + + X working range + + + + + Y working range + + + + + Punching rotation sensor angle + + + + + Maximum speed of punching frame + + + + + Embroidery trimming thread hooking delay + + + + + Length of punching needle changing to skipping needle + + + + + Punching vacuum cleaner start duration + + + + + Punching vacuum cleaner start interval + + + + + Flat embroidery thread angle + + + + + Enable + + + + + Disable + + + + + JogP + + + + + JogN + + + + + Zero + + + + + Open + + + + + Close + + + + + Start + + + + + Stop + + + + + Up + + + + + Down + + + + + Clamp + + + + + Relax + + + + + Out + + + + + Back + + + + + X to move motor + + + + + Y to move motor + + + + + Sewing needle spindle motor + + + + + Needle motor + + + + + Shuttle motor + + + + + Lift motor + + + + + ratating motor + + + + + Up ratating motor + + + + + Down ratating motor + + + + + Punch main axis + + + + + Embroider main axis motor + + + + + Punching color change motor + + + + + Punching color rorating motor + + + + + Embroidered color rorating motor + + + + + Embroider Needle Spindle + + + + + Embroider shutle Spindle + + + + + loose thread + + + + + down cutter cut + + + + + fuel charging + + + + + light + + + + + mid press foot + + + + + kou blow thread + + + + + clip up thread + + + + + sewing head lift + + + + + sew blow + + + + + cleaner + + + + + Debug + + + + + WorkPara + + + + + embroider cutter + + + + + embroider push + + + + + embroider clip thread + + + + + embroider fuel charging + + + + + embroider hook thread + + + + + embroider lock + + + + + All To Zero + + + + + Sew Anchor + + + + + Punch Anchor + + + + + Emb Start + + + + + Emb Anchor + + + + + Punch Spindle Jog + + + + + Punch Spindle Test + + + + + Set Offset + + + + + Back Offset + + + + + Sew Spindle Test + + + + + Sew Start + + + + + Hook action extension + + + + + Hook action opening and closing + + + + + Back Start + + + + + To Work Point + + + + + To anchor Point + + + + + Back to nthreading point + + + + + Check Frame + + + + + Forward And Back + + + + + Needle shuttle proofread + + + + + Needle shuttle reset + + + + + Needle reset + + + + + Shuttle reset + + + + + Sew rotate up + + + + + Sew rotate down + + + + + Single Punch + + + + + To Right Up + + + + + To Right Down + + + + + To Left Up + + + + + To Left Down + + + + + Scope Work + + + + + Punch Stop Lower + + + + + Sew Head Up Dn + + + + + Sew Spindle Jog + + + + + Sew Hook Position + + + + + Rotate nproofreading + + + + + Punch Start + + + + + Switch Sew Head + + + + + Switch Punch Head + + + + + To Center point + + + + + Frame Zero + + + + + Sew trim + + + + + Punching Change Tool + + + + + Punch Rod Zero + + + + + Rotate To Zero + + + + + Emb spindle + + + + + Emb Hook Position + + + + + Emb jog + + + + + Emb thread cut + + + + + Emb change color + + + + + Switch Emb Head + + + + + Back shuttle pos + + + + + SensorSign + + + + + Action + + + + + HMIUpgrade + + + + + MCUpgrade + + + + + ParaImport + + + + + ParaExport + + + + + SoftwareSet + + + + + SoftPower + + + + + Network + + + + + NeedleSet + + + + + TimeSet + + + + + ShortcutSet + + + + + Productnum + + + + + Version + + + + + CountReset + + + + + Root + + + + + Select + + + + + Para + + + + + Color + + + + + Import + + + + + Export + + + + + Delete + + + + + OperatPara + + + + + ActionSet + + + + + SpeedPara + + + + + LimitPara + + + + + DetectPara + + + + + CutLine + + + + + PunchKnife + + + + + NeedleShuttle + + + + + Start button + + + + + Pause button + + + + + Jog button + + + + + Air pressure protection input + + + + + Safety light curtains protection input + + + + + X zero position + + + + + Y zero position + + + + + X deceleration + + + + + Y deceleration + + + + + X negative limit + + + + + Y negative limit + + + + + X positive limit + + + + + Y positive limit + + + + + Sewing on the machine head rotation zero position + + + + + Sewing under the machine head rotation zero position + + + + + Punching the rotary shaft at zero + + + + + Sewing machine head lifting upper limit + + + + + Lower lifting limit of sewing machine head + + + + + Sewing spindle needle - parking space + + + + + Sewing spindle needle - thread hooking position + + + + + Sewing shuttle parking space + + + + + Sewing rotary hook thread hook position + + + + + Punching spindle zero position + + + + + Flat needle spindle parking space + + + + + Flat embroidery needle spindle hook position + + + + + Flat shuttle spindle parking space + + + + + Flat embroidery shuttle spindle hook position + + + + + Flat embroidery under the scissors back in place + + + + + Sewing thread breakage detection + + + + + Sewing scissors return + + + + + The small plate closes signal 1 + + + + + The small plate closes signal 2 + + + + + The shuttle is not at zero + + + + + Needle and shuttle is out of sync + + + + + Rotation is out of sync + + + + + The needle is not at the high position + + + + + Head lift timeout + + + + + The head is not in the safty area + + + + + Punching head main shaft is not at zero + + + + + Rotating positive limit + + + + + Rotating negative limit + + + + + Foot position error + + + + + Foot moto's position is out of range + + + + + The head lift moto's position is out of range + + + + + Rotation position out of range + + + + + Head lift upper limit + + + + + Head lift down limit + + + + + Emb main shaft is not at zero + + + + + Punching color change timeout + + + + + Embroidered color change timeout + + + + + Emb needle bar's position error + + + + + Punch needle bar's position error + + + + + Err emb hook not zero + + + + + Err emb cut not zero + + + + + PunchSewMachine + + + HMI Configuration + + + + + Interface debug mode + + + + + Delete configure file + + + + + Import CSV file + + + + + Delete CSV file + + + + + Reset CSV file + + + + + Machine parameters + + + + + Work parameters + + + + + Jump stitch takes effect + + + + + InternetofThings configuration + + + + + Flip style + + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + + Horizontal flip style + + + + + vertical flip style + + + + + + No:0;Yes:1 + No:0;Yes:1; + + + + + Rotation angle + + + + + Number of punching heads + + + + + Number of needles per head for punching + + + + + X axis configuration + + + + + + + + + + + + + + + + No:0;Have:1 + + + + + X axis motor drive selection + + + + + + Single motor:0;Double motor:1 + + + + + X axis coordinate system selection + + + + + + Positive:0;Reverse:1 + + + + + X axis moving object selection + + + + + + Head:0;Frame:1 + + + + + X axis zero sensor selection + + + + + X axis speed reduction sensor selection + + + + + X axis positive limit sensor selection + + + + + X axis negative limit sensor selection + + + + + X axis zero direction selection + + + + + + Negative:0;Positive:1 + + + + + X axis sensor function selection + + + + + + Zero separate:0;Zero and speed reduction:1 + + + + + Y axis configuration + + + + + Y axis motor drive selection + + + + + Y axis coordinate system selection + + + + + Y axis moving object selection + + + + + Y axis zero sensor selection + + + + + Y axis speed reduction sensor selection + + + + + Y axis positive limit sensor selection + + + + + Y axis negative limit sensor selection + + + + + Y axis zero direction selection + + + + + Y axis sensor function selection + + + + + Sewing spindle configuration + + + + + Needle shuttle configuration + + + + + Needle shuttle:0;Needle shuttle separation:1 + + + + + Lift motor configuration + + + + + Lower scissors drive selection + + + + + No lower trimming device:0;Cylinder:1;AC motor:2;Stepper motor:3;Electromagnet:4 + + + + + Lower trimming mode selection + + + + + Static trimming:0;Dynamic trimming:1;Cam trimming:2;Cam respectively trimming:3 + + + + + Upper scissors drive selection + + + + + No Upper trimming Device:0;Cylinder:1 + + + + + Upper thread break detection device selection + + + + + No:0;Pick wire spring:1;Electronic isolation:2 + + + + + Wire break detection mode selection + + + + + Direct detection:0;EXBboard detection:1 + + + + + Hook line device selection + + + + + No hook line device:0;Cylinder:1;Electromagnet:2 + + + + + Loose line device selection + + + + + No loose wire device:0;Cylinder:1;Electromagnet:2 + + + + + Ramen line device selection + + + + + No ramen line device:0;Cylinder:1;Electromagnet:2 + + + + + Bottom line device selection + + + + + No bottom line device:0;Cylinder:1;Electromagnet:2 + + + + + The hook faces the direction + + + + + Forward:0;Left:1;Right:2;Up:3 + + + + + X box sensor coordinates + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mm + + + + + Delete pattern configuration + + + + + Continuous motion frame compensation + + + + + Needle tip compensation + + + + + Length of the stitch that needs to be split + + + + + Y box sensor coordinates + + + + + Spindle parking sensor angle + + + + + Lift sensor coordinates + + + + + Presser foot sensor coordinates + + + + + Spindle hook line sensor angle unit + + + + + Punch parking angle + + + + + Spindle jog parking angle + + + + + X movable area negative boundary + + + + + X movable area positive boundary + + + + + Y movable area negative boundary + + + + + Y movable area positive boundary + + + + + Head lift can move the upper boundary + + + + + Head lift can move the lower boundary + + + + + Punching head offset X + + + + + Punching head offset Y + + + + + X Sewing area Negative boundary + + + + + X Sewing area Positive margin + + + + + Y Sewing area Negative boundary + + + + + Y Sewing area Positive margin + + + + + X Can be perforated region Negative boundary + + + + + X Can be perforated region Positive margin + + + + + Y Can be perforated region Negative boundary + + + + + Y Can be perforated region Positive margin + + + + + Sewing right head offset X + + + + + Sewing right head offset Y + + + + + XY start stop speed + + + + + + + + + + + + + + + + mm/s + + + + + XY zero running speed + + + + + XY Idling speed + + + + + XY walking acceleration + + + + + + + + mm/s2 + + + + + XY brake acceleration + + + + + XY manual movement speed 1 + + + + + XY manual movement speed 2 + + + + + XY manual movement speed 3 + + + + + XY maximum moving speed + + + + + Spindle start stop speed + + + + + + + + + + + + + + + + + + + + + + + + + + + r/min + + + + + Spindle zero return speed + + + + + Spindle running speed + + + + + Spindle running acceleration + + + + + + + r/ss + + + + + Spindle brakes acceleration + + + + + sewing maximum speed + + + + + Head lift start end speed + + + + + Head lift and zero speed + + + + + Head lift walk speed + + + + + Head lift acceleration + + + + + Head movements brake acceleration + + + + + Spindle zero compensation angle + + + + + X compensation angle + + + + + Y compensation angle + + + + + X gap compensation + + + + + Y gap compensation + + + + + Brush offset X + + + + + Brush offset Y + + + + + Encoder coefficient molecule + + + + + Encoder coefficient denominator + + + + + sewing work speed + + + + + Spindle Cut line speed + + + + + Spindle Back needle speed + + + + + Spindle start slow speed + + + + + Reverse equivalent spindle speed + + + + + Sewing moving frame + + + + + Continuous:0;Intermittent:1 + + + + + Sewing acceleration and deceleration mode + + + + + No acceleration or deceleration:0;Xy sine acceleration and deceleration:1 + + + + + Sewing machine head rotating manner + + + + + Continuous rotation:0;Xy intermittent rotation:1 + + + + + Sewing head deceleration mode + + + + + No acceleration or deceleration:0;Intermittent acceleration and deceleration:1 + + + + + Sewing movable frame starting angle + + + + + Sewing movable frame duration angle + + + + + Start low speed needls + + + + + + + + + + + Needles + + + + + Needle action loose line allowed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Not allow:0;Allowed:1 + + + + + Needle action top line allowed + + + + + Needle action clamp line allowed + + + + + Allow to embroider line allowed + + + + + Cut lines allow + + + + + Do not trim: 0;Automatic thread trim:1;Data trim:2 + + + + + Trimming line angle + + + + + Trimming completion angle + + + + + Action loosening when thread trimming + + + + + Action wire pull when thread trimming + + + + + Action clip line allows when trimming + + + + + The action of lifting the presser foot during thread cutting is allowed + + + + + The action of lifting the machine head during thread cutting allows for thread cutting + + + + + The action of lifting the machine head during thread cutting allows for thread clamping + + + + + When cutting the thread, the action is allowed to hook the thread under the pressure foot + + + + + Allowing for needle withdrawal during thread cutting + + + + + Action during thread cutting allows for thread loosening during thread hooking + + + + + During thread cutting, the action is allowed to lift the machine head after thread cutting + + + + + Number of broken wires + + + + + Broken line detection spindle angle + + + + + Change bobbin Reminder function + + + + + Not:0;Delay reminder by length:1;Count by number of slices:2;Immediately reminder by length:3 + + + + + Bottom line length + + + + + Bottom line correction per stitch + + + + + Number of shuttles + + + + + + times + + + + + Refueling method selection + + + + + No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3 + + + + + Refueling needles interval + + + + + Refueling time interval + + + + + + + + + + + s + + + + + Refueling duration + + + + + Parking position selection after completion + + + + + Current:0;Starting:1;Anchor:2;Feeding:3;Offset:4 + + + + + Offset point coordinate valid flag + + + + + + Invalid:0;X is valid:1;Y is valid:2;XY is valid:3 + + + + + Offset point coordinate X + + + + + Offset point coordinate Y + + + + + Threading point coordinate effective mark + + + + + Threading point coordinates X + + + + + Threading point coordinates Y + + + + + Machine head low position + + + + + Machine head heigh position + + + + + Production preset + + + + + Illumination brightness + + + + + Sewing acceleration + + + + + Trimming frame displacement + + + + + Sewing blow allowed + + + + + Punching blow allowed + + + + + Vacuum cleaner off delay + + + + + Punching spindle speed + + + + + Punching acceleration + + + + + Punching movable frame mode + + + + + AContinuous:0;BIntermittent:1 + + + + + Punching acceleration and deceleration mode + + + + + No acceleration or deceleration:0;XY sine acceleration and deceleration:1 + + + + + Punching frame starting angle + + + + + Punching frame continuous angle + + + + + Sewing move head up down + + + + + Punching move head up down + + + + + Moving basket Loose line + + + + + Moving basket Clamp line + + + + + Software limit XY move allowed + + + + + Software limit sewing head lifting allowed + + + + + Software limit punch head lifting allowed + + + + + Software limit cutter head lift allowed + + + + + Software limit Punch drop allowed + + + + + Software limit embroidery falling pole allowed + + + + + Number of Facial line hook + + + + + Trimming frame direction + + + + + Stop:0;Left:1;Forward:2;Right:3;Backward:4 + + + + + Spindle corner speed + + + + + Minimum speed deviation angle + + + + + Advanced dropout number + + + + + Delay speed number + + + + + Working permission of sewing machine head + + + + + Work permit of punch head + + + + + Embroidery machine head work permit + + + + + Auto Zero after power on + + + + + Color change start method + + + + + Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2 + + + + + X frame commutation compensation + + + + + Y frame commutation compensation + + + + + Punching jump stitches to change the number of stitches beyond the frame + + + + + Punching jog mode + + + + + Lock rotate:0;rotate Lock:1 + + + + + Reverse operation mode + + + + + normal:0;click:1;continue click:2 + + + + + Special needle choose + + + + + nothing:0;one:1;two:2;three:3;four:4;five:5;six:6;seven:7;eight:8;nine:9 + + + + + Special needle function + + + + + Carved hole:0;paint brush:1 + + + + + Vacuum cleaner start delay + + + + + Drawing offset value + + + + + Color change speed + + + + + first head + + + + + second head + + + + + Secure input light curtain allows + + + + + Safety input pressure allowed + + + + + Safe input power-on signal allowed + + + + + Safe input emergency door allowed + + + + + Stitch offset allows + + + + + Loop work allowed + + + + + Shuttle refueling duration + + + + + Center point coordinate X + + + + + Center point coordinate Y + + + + + Sewing spindle needle shuttle single sensor + + + + + Dual Sensor:0;Single sensor:1 + + + + + Punching spindle start slow speed + + + + + Sewing speed 1 + + + + + Sewing speed 2 + + + + + Sewing speed 3 + + + + + X working range + + + + + Y working range + + + + + Maximum speed of punching frame + + + + + Replace the punch count value + + + + + Length of punching needle changing to skipping needle + + + + + Punching vacuum cleaner start duration + + + + + Punching vacuum cleaner start interval + + + + + Punching spindle zeroing compensation + + + + + Punching color change spacing + + + + + speed limit 4-5mm + + + + + speed limit 5-6mm + + + + + speed limit 6-7mm + + + + + speed limit 7-8mm + + + + + speed limit 8-9mm + + + + + speed limit 9-14mm + + + + + speed limit 14+mm + + + + + Enable + + + + + Disable + + + + + JogP + + + + + JogN + + + + + Zero + + + + + Open + + + + + Close + + + + + Start + + + + + Stop + + + + + Up + + + + + Down + + + + + Clamp + + + + + Relax + + + + + Out + + + + + Back + + + + + X to move motor + + + + + Y to move motor + + + + + Sewing 1 needle spindle motor + + + + + Sewing 1 needle motor + + + + + Sewing 1 shuttle motor + + + + + Punching 1 spindle + + + + + Punching 2 spindle + + + + + Sew spindle 2 Motor + + + + + Sew shuttle motor 2 + + + + + Sew needle motor 2 + + + + + Punching color changing motor + + + + + Punching color change motor 2 + + + + + Sewing 1 cut + + + + + Middle 1 foot + + + + + Head 1 elastic thread 1 + + + + + Head 1 elastic thread 2 + + + + + Bobbin 1 thread + + + + + Clamp 1 line + + + + + Hook 1 stretch + + + + + Line 1 hook + + + + + Sewing 1 oiling + + + + + Sewing 1 head lifting + + + + + Scissors 2 cut + + + + + Middle 2 foot + + + + + Bobbin 2 thread + + + + + Clamp 2 line + + + + + Head 2 elastic thread 1 + + + + + Head 2 elastic thread 2 + + + + + Hook 2 stretch + + + + + Line 2 hook + + + + + Sewing 2 oiling + + + + + Sewing 2 head lifting + + + + + Vacum cleaner + + + + + All To Zero + + + + + Punch Spindle Jog + + + + + Head 1 trim + + + + + Head 2 trim + + + + + Punch Spindle Test + + + + + Set Offset + + + + + Back Offset + + + + + Sew Spindle Test + + + + + Sew Anchor + Sew Start + + + + + Back Anchor + Back Start + + + + + To Work Point + + + + + Check Frame + + + + + Punch Change Tool + + + + + Forward And Back + + + + + Needle shuttle proofread + + + + + Single Punch + + + + + To Right Up + + + + + To Right Down + + + + + To Left Up + + + + + To Left Down + + + + + Scope Work + + + + + Punch Stop Lower + + + + + Sew Head Up Dn + + + + + Sew Spindle Jog + + + + + Sew Hook Position + + + + + Punch Anchor + Punch Start + + + + + Switch Sew Head + + + + + Switch Punch Head + + + + + To Center point + + + + + SensorSign + + + + + Action + + + + + HMIUpgrade + + + + + MCUpgrade + + + + + ParaImport + + + + + ParaExport + + + + + SoftwareSet + + + + + SoftPower + + + + + Network + + + + + WIFI + + + + + NeedleSet + + + + + TimeSet + + + + + ShortcutSet + + + + + Productnum + + + + + Version + + + + + CountReset + + + + + Root + + + + + Select + + + + + Para + + + + + Color + + + + + Import + + + + + Export + + + + + Delete + + + + + OperatPara + + + + + ActionSet + + + + + SpeedPara + + + + + LimitPara + + + + + MCPara + + + + + Start button 1 + + + + + Pause button 1 + + + + + Jog button 1 + + + + + Air pressure protection input + + + + + X zero position + + + + + Y zero position + + + + + X deceleration + + + + + Y deceleration + + + + + X negative limit + + + + + Y negative limit + + + + + X positive limit + + + + + Y positive limit + + + + + Sewing machine head 1 lifting upper limit + + + + + Lower lifting limit of sewing machine head 1 + + + + + Sewing spindle 1 needle - parking space + + + + + Sewing spindle 1 needle - thread hooking position + + + + + Sewing shuttle 1- parking space + + + + + Sewing rotary hook 1-thread hook position + + + + + Punching spindle 1 zero position + + + + + Punching spindle 1 position detection + + + + + Punching 1 color change motor - zero position + + + + + Punching 1 color change motor - negative limit + + + + + Punching 1 color change motor - positive limit + + + + + Sewing 1 thread breakage detection + + + + + Sewing 1 scissors return + + + + + Safety input + + + + + Punching 2 color change motor - zero position + + + + + Punching 2 color change motor - negative limit + + + + + Punching 2 color change motor - positive limit + + + + + Sewing machine head 2 lifting upper limit + + + + + Lower lifting limit of sewing machine head 2 + + + + + Sewing spindle 2 needle - parking space + + + + + Sewing spindle 2 needle - thread hooking position + + + + + Sewing shuttle 2- parking space + + + + + Sewing rotary hook 2-thread hook position + + + + + Punching spindle 2 zero position + + + + + Punching spindle 2 position detection + + + + + Sewing 2 thread breakage detection + + + + + Sewing 2 scissors return + + + + + Small platen not closed + + + + + QObject + + + + Insufficient air pressure + (0x0002)Insufficient air pressure + + + + + safe area error + (0x0003)safe area error + + + + + Driver alarm + (0x0005)Driver alarm + + + + + Fill data error + (0x0006)Fill data error + + + + + Not allowed to work + (0x0007)Not allowed to work + + + + + Control error + (0x0008)Control error + + + + + Motion control chip version error + (0x0009)Motion control chip version error + + + + + Waiting for button to lift timeout + (0x000A)Waiting for button to lift timeout + + + + + FPGA Reset + (0x000B)FPGA Reset + + + + + Peripheral Device not ready + (0x000C)Peripheral Device not ready + + + + + Transmission data error + (0x000D)Transmission data error + + + + + Program version error + (0x000E)Program version error + + + + + Complete output + (0x000F)Complete output + + + + + Positive limit + (0x0010)Positive limit + + + + + Negative limit + (0x0011)Negative limit + + + + + Motion alarm + (0x0012)Motion alarm + + + + + Motion limit + (0x0013)Motion limit + + + + + Emergency stop + (0x0014)Emergency stop + + + + + Motion parameters error + (0x0015)Motion parameters error + + + + + Machine parameters error + (0x0016)Machine parameters error + + + + + Input parameters error + (0x0017)Input parameters error + + + + + Not in work status error + (0x001A)Not in work status error + + + + + Prohibited frame moving state + (0x001B)Prohibited frame moving state + + + + + Zero success + (0x001F)Zero success + + + + + Return to zero error + (0x0020)Return to zero error + + + + + Target position out of bounds + (0x0022)Target position out of bounds + + + + + X Positive limit + (0x0023)X Positive limit + + + + + X Negative limit + (0x0024)X Negative limit + + + + + Y Positive limit + (0x0025)Y Positive limit + + + + + Y Negative limit + (0x0026)Y Negative limit + + + + + Machine is in manual state + (0x0028)Machine is in manual state + + + + + Machine key off + (0x0029)Machine key off + + + + + Light curtain 1 intervention + + + + + Light curtain 2 intervention + + + + + None data + (0x0040)None data + + + + + Data error + (0x0041)Data error + + + + + Graphics out of range + (0x0042)Graphics out of range + + + + + Spindle is not in zero position + (0x0050)Spindle is not in zero position + + + + + Scissors are not in position + (0x0054)Scissors are not in position + + + + + Thread is broken + (0x0058)Thread is broken + + + + + Bottom thread disconnected + (0x0059)Bottom thread disconnected + + + + + Execution command timed out + (0x005D)Execution command timed out + + + + + Node error + + + + + Expiration of use (Please contact the manufacturer) + Expiration of use /n Solution: Please contact the manufacturer + + + + + XYCoordinate system error (Please reset to zero again) + XYCoordinate system error /n Solution: Please reset to zero again + + + + + Cutting down lifting timeout (please check lifting sensor) + + + + + Bus Error (Please check the communication connection) + Bus Error /n Solution: Please check the communication connection + + + + + CAN communication timeout + + + + + Change the bobbin + (0x00F0)Change the bobbin + + + + + Replace bobbin A + (0x00F1)Replace bobbin A + + + + + Replace bobbin B + (0x00F2)Replace bobbin B + + + + + The machine is in the state of replacing the bobbin + (0x00F3)The machine is in the state of replacing the bobbin + + + + + Machine is in auto state + (0x0033)Machine is in auto state + + + + + Password set finished + (0x0300)Password set finished + + + + + Password set failed + (0x0301)Password set failed + + + + + Error reading headboard parameters + + + + + Replace punch 1 + + + + + Replace punch 2 + + + + + Replace punch 3 + + + + + Replace punch 4 + + + + + Replace punch 5 + + + + + Replace punch 6 + + + + + Normal stop + (0x0100)Normal stop + + + + + Find zero success + (0x0101)Find zero success + + + + + work pause + (0x0102)work pause + + + + + End of work + (0x0103)End of work + + + + + Work done + (0x0104)Work done + + + + + Complete production + (0x0105)Complete production + + + + + Execute success + (0x0106)Execute success + + + + + Execute false + (0x0107)Execute false + + + + + wait file + (0x0108)wait file + + + + + change the bobbin + (0x0109)change the bobbin + + + + + Execute finish + (0x010A)Execute finish + + + + + Execute runnibng + (0x010B)Execute runnibng + + + + + Automatic soft limit setting completed + + + + + Please feed + + + + + RotaComWidget + + + Form + + + + + RotaZero + 旋转归零 + + + + + SingleP + 单次冲孔 + + + + + CTool + 换刀位 + + + + + Jog + + + + + ManualC + 手动换色 + + + + + ManualAction: + 手动操作: + + + + + Needel: + 冲孔这个: + + + + + + + 1 + + + + + + + 2 + + + + + + + 3 + + + + + + + 4 + + + + + + + 5 + + + + + + + 6 + + + + + Set + + + + + CLose + + + + + Com1Angel: + 补偿1角度: + + + + + + + + Neg + 反转 + + + + + + + + Enable + 使能 + + + + + + + + Zero + 归零 + + + + + + + + Disable + 使能 + + + + + + + + Pos + 正转 + + + + + PunchingSpindle1: + 冲孔主轴1: + + + + + PunchingSpindle2: + 冲孔主轴2: + + + + + PunRotaryMotor1: + 旋转电机1: + + + + + PunRotaryMotor2: + 旋转电机2: + + + + + debugging: + + + + + Com2Angel: + 补偿2角度: + + + + + Zero compensation angle + + + + + Network error + + + + + No connection + + + + + Rotate to zero + + + + + + + + The machine is about to move, please pay attention to safety! + + + + + Single punch + + + + + Change tool position + + + + + Spindle jog + + + + + SensorInputWidget + + + Form + + + + + + Sensor + + + + + PageNums: 1/1 + + + + + pageNum: + + + + + SetWorkArea + + + Form + + + + + Prompt + + + + + X + + + + + + X - + + + + + Y + + + + + + Y - + + + + + SheetWidget + + + Form + + + + + PageNums: 0/0 + + + + + X + + + + + Sub title < Title + + + + + Sub title + + + + + PageNum: 0/0 + + + + + pageNum: + + + + + Network error + + + + + No connection + + + + + Frame angle + + + + + deg + + + + + Prompt + + + + + Whether to recover the default parameters for the frame angle? + + + + + SystemManageDialog + + + Dialog + + + + + PageNums: 1/1 + + + + + + Update + + + + + 192.168.2.196 + + + + + StaticIP + + + + + DynamicIP + + + + + *Before setting the static IP, you need to first set the dynamic IP. After the dynamic IP is set, you need to return to this interface to continue setting the static IP + 设置静态IP前需要先设置动态IP,动态IP设置完成后需要返回此界面继续设置静态IP + + + + + pageNum: 0/0 + + + + + pageNum: + + + + + Head board + + + + + + + + Prompt + + + + + The upgrade needs to restart the program. Do you need to restart to upgrade? + + + + + Do you want to clear the production statistics? + + + + + Do you want to clear the journal? + + + + + Do you want to export journal? + + + + + TemplateSewMachine + + + HMI Configuration + + + + + Delete configure file + + + + + Delete pattern configuration + + + + + Import CSV file + + + + + Delete CSV file + + + + + Reset CSV file + + + + + Machine parameters + + + + + Work parameters + + + + + InternetofThings configuration + + + + + AnchorX + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mm + + + + + AnchorY + + + + + startX + + + + + startrY + + + + + Continuous motion frame compensation + + + + + Needle tip compensation + + + + + Length of the stitch that needs to be split + + + + + Flip style + + + + + normalP:0;nRight90P:1;nRight180P:2;nRight270P:3;mirrorP:4;mRight90P:5;mRight180P:6;mRight270P:7 + + + + + Horizontal flip style + + + + + + No:0;Yes:1 + + + + + vertical flip style + + + + + Rotation angle + + + + + Number of heads + + + + + sewing needles per head + + + + + emb needles per head + + + + + punch needles per head + + + + + X axis configuration + + + + + + + + + + + + + + + + + + + + + + + + + + + + No:0;Have:1 + + + + + X axis motor drive selection + + + + + + + + Single motor:0;Double motor:1 + + + + + X axis coordinate system selection + + + + + + + + Positive:0;Reverse:1 + + + + + X axis moving object selection + + + + + + + + Head:0;Frame:1 + + + + + X axis zero sensor selection + + + + + X axis speed reduction sensor selection + + + + + X axis positive limit sensor selection + + + + + X axis negative limit sensor selection + + + + + X axis zero direction selection + + + + + + + + Negative:0;Positive:1 + + + + + X axis sensor function selection + + + + + + + + Zero separate:0;Zero and speed reduction:1 + + + + + Y axis configuration + + + + + Y axis motor drive selection + + + + + Y axis coordinate system selection + + + + + Y axis moving object selection + + + + + Y axis zero sensor selection + + + + + Y axis speed reduction sensor selection + + + + + Y axis positive limit sensor selection + + + + + Y axis negative limit sensor selection + + + + + Y axis zero direction selection + + + + + Y axis sensor function selection + + + + + X2 axis configuration + + + + + X2 axis motor drive selection + + + + + X2 axis coordinate system selection + + + + + X2 axis moving object selection + + + + + X2 axis zero sensor selection + + + + + X2 axis speed reduction sensor selection + + + + + X2 axis positive limit sensor selection + + + + + X2 axis negative limit sensor selection + + + + + X2 axis zero direction selection + + + + + X2 axis sensor function selection + + + + + Y2 axis configuration + + + + + Y2 axis motor drive selection + + + + + Y2 axis coordinate system selection + + + + + Y2 axis moving object selection + + + + + Y2 axis zero sensor selection + + + + + Y2 axis speed reduction sensor selection + + + + + Y2 axis positive limit sensor selection + + + + + Y2 axis negative limit sensor selection + + + + + Y2 axis zero direction selection + + + + + Y2 axis sensor function selection + + + + + Sewing spindle configuration + + + + + Needle shuttle configuration + + + + + Needle shuttle:0;Needle shuttle separation:1 + + + + + Lift motor configuration + + + + + Presser foot motor configuration + + + + + Rotating motor configuration + + + + + + + Rotary motor coordinate system + + + + + Single motor: 0 ; Double motor: 1 + + + + + The coordinate system is positive: 0 ; Coordinate system is reverse: 1 + + + + + Machine head: 0 ; box: 1 + + + + + Rotation limit + + + + + Unlimited: 0 ; limited: 1 + + + + + Lower scissors drive selection + + + + + No lower trimming device:0;Cylinder:1;AC motor:2;Stepper motor:3;Electromagnet:4 + + + + + Lower trimming mode selection + + + + + Static trimming:0;Dynamic trimming:1;Cam trimming:2;Cam respectively trimming:3 + + + + + Upper scissors drive selection + + + + + No Upper trimming Device:0;Cylinder:1 + + + + + Upper thread break detection device selection + + + + + No:0;Pick wire spring:1;Electronic isolation:2 + + + + + Bottom line break detection device selection + + + + + No device: 0 ; Grating wheel: 1 ; Magnetic encoder: 2;Immediate alarm by length:3 + + + + + Wire break detection mode selection + + + + + Direct detection:0;EXBboard detection:1 + + + + + Hook line device selection + + + + + No hook line device:0;Cylinder:1;Electromagnet:2 + + + + + Loose line device selection + + + + + No loose wire device:0;Cylinder:1;Electromagnet:2 + + + + + Ramen line device selection + + + + + No ramen line device:0;Cylinder:1;Electromagnet:2 + + + + + Bottom line device selection + + + + + No bottom line device:0;Cylinder:1;Electromagnet:2 + + + + + Second loose line device selection + + + + + No loose wire device: 0 ; cylinder: 1 ; Electromagnet: 2 + + + + + Template recognition device + + + + + No identification device: 0 ; Bar code: 1 ; Coding hole: 2 + + + + + The hook faces the direction + + + + + Forward:0;Left:1;Right:2;Up:3 + + + + + Template detecting device + + + + + No detection device: 0 ; Detect: 1 + + + + + X box sensor coordinates + + + + + Y box sensor coordinates + + + + + Spindle parking sensor angle + + + + + Presser foot sensor coordinates + + + + + Rotation sensor angle + + + + + Spindle hook line sensor angle unit + + + + + Punch parking angle + + + + + Knife parking angle + + + + + X2 box sensor coordinates + + + + + Y2 box sensor coordinates + + + + + Spindle jog parking angle + + + + + Flat embroidery spindle parking angle + + + + + X movable area negative boundary + + + + + X movable area positive boundary + + + + + Y movable area negative boundary + + + + + Y movable area positive boundary + + + + + Presser foot lift can move the upper boundary + + + + + Presser foot lift can move the lower boundary + + + + + Motor presser pulse equivalent molecule + + + + + Motor presser pulse equivalent denominator + + + + + Rotation range positive limit angle + + + + + Rotation range negative limit angle + + + + + Punching head offset X + + + + + Punching head offset Y + + + + + X Sewing area Negative boundary + + + + + X Sewing area Positive margin + + + + + Y Sewing area Negative boundary + + + + + Y Sewing area Positive margin + + + + + X Can be perforated region Negative boundary + + + + + X Can be perforated region Positive margin + + + + + Y Can be perforated region Negative boundary + + + + + Y Can be perforated region Positive margin + + + + + Sewing right head offset X + + + + + Sewing right head offset Y + + + + + Cutter head offset X + + + + + Cutter head offset Y + + + + + x can crop the negative boundary of the area + + + + + x can crop the positive boundary of the area + + + + + y can crop the negative boundary of the area + + + + + y can crop the positive boundary of the area + + + + + XY start stop speed + + + + + + + + + + + + + + + + + + + + + + + mm/s + + + + + XY zero running speed + + + + + XY Idling speed + + + + + XY walking acceleration + + + + + + + + + + + + mm/s2 + + + + + XY brake acceleration + + + + + XY manual movement speed 1 + + + + + XY manual movement speed 2 + + + + + XY manual movement speed 3 + + + + + XY maximum moving speed + + + + + Spindle start stop speed + + + + + + + + + + + + + + + + + + + r/min + + + + + Spindle zero return speed + + + + + Spindle running speed + + + + + Spindle running acceleration + + + + + + + + + r/ss + + + + + Spindle brakes acceleration + + + + + sewing maximum speed + + + + + + Head lift start end speed + + + + + Head lift and zero speed + + + + + Head lift walk speed + + + + + Head lift acceleration + + + + + Head movements brake acceleration + + + + + Presser foot lift zero speed + + + + + Presser foot lifting speed + + + + + Presser foot lifting acceleration + + + + + Presser foot lift brake acceleration + + + + + Head rotation start stop speed + + + + + + + + + + + + deg/s + + + + + Head rotation zero return speed + + + + + Head rotation speed + + + + + Head rotation acceleration + + + + + + + + deg/s2 + + + + + Head rotation brake acceleration + + + + + Head rotation maximum speed + + + + + + Left loading point X + + + + + + Left loading point Y + + + + + + Right loading point X + + + + + + Right loading point Y + + + + + + Template box width + + + + + Template frame start and stop speed + + + + + Template frame waking speed + + + + + Template frame waking acceleration + + + + + Template frame brake acceleration + + + + + Compensation angle of upper machine head rotation return to zero + + + + + Compensation angle of lower machine head rotation return to zero + + + + + Spindle zero compensation angle + + + + + Flat embroidery head offset X + + + + + Flat embroidery head offset Y + + + + + Flat embroidery X area negative boundary + + + + + + + Flat embroidery X area positive boundary + + + + + Start speed of punching rotation + + + + + Punch rotation zero speed + + + + + + Rotating speed of punch + + + + + Acceleration of ram punch + + + + + Ram punch rotation brake acceleration + + + + + X gap compensation + + + + + Y gap compensation + + + + + Brush offset X + + + + + Brush offset Y + + + + + Track offset X + + + + + Track offset Y + + + + + sewing work speed + + + + + Spindle Cut line speed + + + + + Spindle Back needle speed + + + + + Spindle start slow speed + + + + + Reverse equivalent spindle speed + + + + + Sewing moving frame + + + + + Continuous:0;Intermittent:1 + + + + + Sewing acceleration and deceleration mode + + + + + No acceleration or deceleration:0;Xy sine acceleration and deceleration:1 + + + + + Sewing machine head rotating manner + + + + + Continuous rotation:0;Xy intermittent rotation:1 + + + + + Sewing head deceleration mode + + + + + No acceleration or deceleration:0;Intermittent acceleration and deceleration:1 + + + + + Sewing movable frame starting angle + + + + + Sewing movable frame duration angle + + + + + Start low speed needls + + + + + + + + Needles + + + + + Needle action loose line allowed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Not allow:0;Allowed:1 + + + + + Needle action top line allowed + + + + + Needle action clamp line allowed + + + + + Allow to embroider line allowed + + + + + Cut lines allow + + + + + Do not trim: 0;Automatic thread trim:1;Data trim:2 + + + + + Trimming line angle + + + + + Trimming completion angle + + + + + Action loosening when thread trimming + + + + + Action wire pull when thread trimming + + + + + Action clip line allows when trimming + + + + + The action of lifting the presser foot during thread cutting is allowed + + + + + The action of lifting the machine head during thread cutting allows for thread cutting + + + + + The action of lifting the machine head during thread cutting allows for thread clamping + + + + + When cutting the thread, the action is allowed to hook the thread under the pressure foot + + + + + Number of broken wires + + + + + Broken line detection spindle angle + + + + + Change bobbin Reminder function + + + + + Not:0;Delay reminder by length:1;Count by number of slices:2;Immediately reminder by length:3 + + + + + Bottom line length + + + + + Bottom line correction per stitch + + + + + Number of shuttles + + + + + times + + + + + Refueling method selection + + + + + No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3 + + + + + Refueling needles interval + + + + + Refueling time interval + + + + + + + + + + + s + + + + + Refueling duration + + + + + Parking position selection after completion + + + + + Current:0;Starting:1;Anchor:2;Feeding:3;Offset:4 + + + + + Offset point coordinate valid flag + + + + + + Invalid:0;X is valid:1;Y is valid:2;XY is valid:3 + + + + + Offset point coordinate X + + + + + Offset point coordinate Y + + + + + Threading point coordinate effective mark + + + + + Threading point coordinates X + + + + + Threading point coordinates Y + + + + + Machine head low position + + + + + Machine head heigh position + + + + + Production preset + + + + + Illumination brightness + + + + + Delay after the air frame is closed + + + + + Sewing acceleration + + + + + Trimming frame displacement + + + + + Sewing blow allowed + + + + + Sewing the needle allowed + + + + + Automatic loopback point allowed + + + + + Sewing head rotation allowed + + + + + Send sidebar allowed + + + + + Punching blow allowed + + + + + Vacuum cleaner off delay + + + + + Punching spindle speed + + + + + Punching acceleration + + + + + Punching movable frame mode + + + + + AContinuous:0;BIntermittent:1 + + + + + Punching acceleration and deceleration mode + + + + + No acceleration or deceleration:0;XY sine acceleration and deceleration:1 + + + + + Punching frame starting angle + + + + + Punching frame continuous angle + + + + + Sewing move head up down + + + + + Punching move head up down + + + + + Moving basket Loose line + + + + + Moving basket Clamp line + + + + + Software limit XY move allowed + + + + + Software limit sewing head lifting allowed + + + + + Software limit punch head lifting allowed + + + + + Software limit cutter head lift allowed + + + + + Software limit Punch drop allowed + + + + + Software limit embroidery falling pole allowed + + + + + + Shuttle rotation angle + + + + + Number of needle hooks + + + + + + needle + + + + + Presser foot height during sewing work + + + + + Head height during simulated work + + + + + Cutter working speed + + + + + Cutter acceleration + + + + + Trimming frame direction + + + + + Stop:0;Left:1;Forward:2;Right:3;Backward:4 + + + + + track formed up and down + + + + + Spindle corner speed + + + + + Minimum speed deviation angle + + + + + Slow down the needle step in advance + + + + + Delay speed up needle step + + + + + Minimum deviation angle of punching rotation deceleration + + + + + Punch rotation duration angle + + + + + Working permission of sewing machine head + + + + + Work permit of punch head + + + + + Embroidery machine head work permit + + + + + Auto Zero after power on + + + + + Punch rotation control 1 + + + + + Punch rotation control 2 + + + + + Punch rotation control 3 + + + + + Punch rotation control 4 + + + + + Punch rotation control 5 + + + + + Punch rotation control 6 + + + + + Color change start method + + + + + Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2 + + + + + X frame commutation compensation + + + + + Y frame commutation compensation + + + + + The way of mending flat embroidery + + + + + mending emb off: 0 ; mending emb by hand: 1 ; mending emb auto: 2 + + + + + Locking times + + + + + Number of needle locking steps + + + + + Length of lock needle + + + + + Start working position mode + + + + + From the Stop lot: 0 ; From the current location, do not save: 1 ; From the current location, save: 2 + + + + + Punching jump stitches to change the number of stitches beyond the frame + + + + + Punching jog mode + + + + + Lock rotate:0;rotate Lock:1 + + + + + Reverse operation mode + + + + + normal:0;click:1;continue click:2 + + + + + Special needle choose + + + + + nothing:0;one:1;two:2;three:3;four:4;five:5;six:6;seven:7;eight:8;nine:9 + + + + + Special needle function + + + + + Carved hole:0;paint brush:1 + + + + + Vacuum cleaner start delay + + + + + Color change speed + + + + + first head + + + + + second head + + + + + third head + + + + + fourth head + + + + + fifth head + + + + + sixth head + + + + + seventh head + + + + + eighth head + + + + + ninth head + + + + + tenth head + + + + + eleventh head + + + + + twelfth head + + + + + thirteenth head + + + + + fourteenth head + + + + + fifteenth head + + + + + sixteent head + + + + + seventeenth head + + + + + eighteenth head + + + + + nineteenth head + + + + + twentieth head + + + + + twenty-first head + + + + + twenty-second head + + + + + twenty-third head + + + + + twenty-fourth head + + + + + twenty-fifth head + + + + + twenty-sixth head + + + + + twenty-seventh head + + + + + twenty-eighth head + + + + + twenty-ninth head + + + + + thirtieth head + + + + + thirty-first head + + + + + thirty-second head + + + + + Secure input light curtain allows + + + + + Safety input pressure allowed + + + + + Safe input power-on signal allowed + + + + + Safe input emergency door allowed + + + + + Automatic air box allowed + + + + + Automatic air frame closing delay + + + + + + ms + + + + + Stitch offset allows + + + + + Loop work allowed + + + + + Right Work head selection 1 + + + + + Right Work head selection 2 + + + + + Right Work head selection 3 + + + + + Right Work head selection 4 + + + + + Right Work head selection 5 + + + + + Right Work head selection 6 + + + + + Right Work head selection 7 + + + + + Right Work head selection 8 + + + + + Right Work head selection 9 + + + + + Right Work head selection 10 + + + + + Right Work head selection 11 + + + + + Right Work head selection 12 + + + + + Right Work head selection 13 + + + + + Right Work head selection 14 + + + + + Right Work head selection 15 + + + + + Right Work head selection 16 + + + + + Right Work head selection 17 + + + + + Right Work head selection 18 + + + + + Right Work head selection 19 + + + + + Right Work head selection 20 + + + + + Right Work head selection 21 + + + + + Right Work head selection 22 + + + + + Right Work head selection 23 + + + + + Right Work head selection 24 + + + + + Right Work head selection 25 + + + + + Right Work head selection 26 + + + + + Right Work head selection 27 + + + + + Right Work head selection 28 + + + + + Right Work head selection 29 + + + + + Right Work head selection 30 + + + + + Right Work head selection 31 + + + + + Right Work head selection 32 + + + + + Pulling motor pull position + + + + + Pull length + + + + + Cutting length + + + + + Shuttle refueling duration + + + + + Clamping force 1 + + + + + Clamping force 2 + + + + + Clamping force 3 + + + + + Clamping force 4 + + + + + Flat embroidery spindle working speed + + + + + Flat embroidery acceleration + + + + + Flat embroidery frame + + + + + continuous: 0 ; intermittent: 1 + + + + + Flat embroidery acceleration mode + + + + + No acceleration or deceleration: 0 ; Xy sine acceleration and deceleration: 1 + + + + + Flat embroidery frame starting angle + + + + + Flat embroidery frame continuous angle + + + + + jump max speed + + + + + Flat embroidery jump to offset Needles count + + + + + Embroidery move max speed + + + + + Punching spindle start slow speed + + + + + X working range + + + + + Y working range + + + + + Punching rotation sensor angle + + + + + Maximum speed of punching frame + + + + + Embroidery trimming thread hooking delay + + + + + Length of punching needle changing to skipping needle + + + + + Punching vacuum cleaner start duration + + + + + Punching vacuum cleaner start interval + + + + + Flat embroidery thread angle + + + + + Enable + + + + + Disable + + + + + JogP + + + + + JogN + + + + + Zero + + + + + Open + + + + + Close + + + + + Start + + + + + Stop + + + + + Up + + + + + Down + + + + + Clamp + + + + + Relax + + + + + Out + + + + + Back + + + + + X to move motor + + + + + Y to move motor + + + + + Sewing needle spindle motor + + + + + Needle motor + + + + + Shuttle motor + + + + + Lift motor + + + + + ratating motor + + + + + Up ratating motor + + + + + Down ratating motor + + + + + Punch main axis + + + + + Embroider main axis motor + + + + + Punching color change motor + + + + + Punching color rorating motor + + + + + Embroidered color rorating motor + + + + + Embroider Needle Spindle + + + + + Embroider shutle Spindle + + + + + loose thread + + + + + down cutter cut + + + + + fuel charging + + + + + light + + + + + mid press foot + + + + + kou blow thread + + + + + clip up thread + + + + + sewing head lift + + + + + sew blow + + + + + cleaner + + + + + Hook action extension + + + + + Hook action opening and closing + + + + + embroider cutter + + + + + embroider push + + + + + embroider clip thread + + + + + embroider fuel charging + + + + + embroider hook thread + + + + + embroider lock + + + + + All To Zero + + + + + Set Offset + + + + + Sew Start + + + + + Sew Anchor + + + + + Punch Start + + + + + Punch Anchor + + + + + Emb Start + + + + + Emb Anchor + + + + + Check Frame + + + + + Back Offset + + + + + Back Start + + + + + To Work Point + + + + + To anchor Point + + + + + Back to nthreading point + + + + + To Center point + + + + + Frame Zero + + + + + To Right Up + + + + + To Right Down + + + + + To Left Up + + + + + To Left Down + + + + + Scope Work + + + + + Sew Spindle Test + + + + + Sew trim + + + + + Sew Head Up Dn + + + + + Sew Spindle Jog + + + + + Sew Hook Position + + + + + Rotate nproofreading + + + + + Switch Sew Head + + + + + Punch Spindle Jog + + + + + Punch Spindle Test + + + + + Punching Change Tool + + + + + Punch Rod Zero + + + + + Single Punch + + + + + Punch Stop Lower + + + + + Rotate To Zero + + + + + Switch Punch Head + + + + + Emb spindle + + + + + Emb Hook Position + + + + + Emb jog + + + + + Emb thread cut + + + + + Emb change color + + + + + Switch Emb Head + + + + + Forward And Back + + + + + Needle shuttle proofread + + + + + Needle shuttle reset + + + + + Back shuttle pos + + + + + Needle reset + + + + + Shuttle reset + + + + + Sew rotate up + + + + + Sew rotate down + + + + + SensorSign + + + + + Action + + + + + HMIUpgrade + + + + + MCUpgrade + + + + + ParaImport + + + + + ParaExport + + + + + SoftwareSet + + + + + SoftPower + + + + + Network + + + + + NeedleSet + + + + + TimeSet + + + + + ShortcutSet + + + + + Productnum + + + + + Version + + + + + Debug + + + + + CountReset + + + + + Root + + + + + Select + + + + + Para + + + + + Color + + + + + Import + + + + + Export + + + + + Delete + + + + + WorkPara + + + + + OperatPara + + + + + ActionSet + + + + + SpeedPara + + + + + LimitPara + + + + + DetectPara + + + + + CutLine + + + + + PunchKnife + + + + + NeedleShuttle + + + + + Start button + + + + + Pause button + + + + + Jog button + + + + + Air pressure protection input + + + + + Safety light curtains protection input + + + + + X zero position + + + + + Y zero position + + + + + X deceleration + + + + + Y deceleration + + + + + X negative limit + + + + + Y negative limit + + + + + X positive limit + + + + + Y positive limit + + + + + Sewing on the machine head rotation zero position + + + + + Sewing under the machine head rotation zero position + + + + + Punching the rotary shaft at zero + + + + + Sewing machine head lifting upper limit + + + + + Lower lifting limit of sewing machine head + + + + + Sewing spindle needle - parking space + + + + + Sewing spindle needle - thread hooking position + + + + + Sewing shuttle parking space + + + + + Sewing rotary hook thread hook position + + + + + Punching spindle zero position + + + + + Flat needle spindle parking space + + + + + Flat embroidery needle spindle hook position + + + + + Flat shuttle spindle parking space + + + + + Flat embroidery shuttle spindle hook position + + + + + Flat embroidery under the scissors back in place + + + + + Sewing thread breakage detection + + + + + Sewing scissors return + + + + + The small plate closes signal 1 + + + + + The small plate closes signal 2 + + + + + The shuttle is not at zero + + + + + Needle and shuttle is out of sync + + + + + Rotation is out of sync + + + + + The needle is not at the high position + + + + + Head lift timeout + + + + + The head is not in the safty area + + + + + Punching head main shaft is not at zero + + + + + Rotating positive limit + + + + + Rotating negative limit + + + + + Foot position error + + + + + Foot moto's position is out of range + + + + + The head lift moto's position is out of range + + + + + Rotation position out of range + + + + + Head lift upper limit + + + + + Head lift down limit + + + + + Emb main shaft is not at zero + + + + + Punching color change timeout + + + + + Embroidered color change timeout + + + + + Emb needle bar's position error + + + + + Punch needle bar's position error + + + + + Err emb hook not zero + + + + + Err emb cut not zero + + + + + WordsInputDialog + + + Dialog + + + + + Words input + + + + + Name: + + + + + ← + + + + + old + + + + diff --git a/items/assistitem.cpp b/items/assistitem.cpp new file mode 100644 index 0000000..d09deea --- /dev/null +++ b/items/assistitem.cpp @@ -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; + } +} diff --git a/items/assistitem.h b/items/assistitem.h new file mode 100644 index 0000000..36a7192 --- /dev/null +++ b/items/assistitem.h @@ -0,0 +1,36 @@ +#ifndef ASSISTITEM_H +#define ASSISTITEM_H + +#include + +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 diff --git a/items/cmdconfig.h b/items/cmdconfig.h new file mode 100644 index 0000000..e2a2789 --- /dev/null +++ b/items/cmdconfig.h @@ -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 diff --git a/items/debugitem.cpp b/items/debugitem.cpp new file mode 100644 index 0000000..e85016b --- /dev/null +++ b/items/debugitem.cpp @@ -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; + } +} diff --git a/items/debugitem.h b/items/debugitem.h new file mode 100644 index 0000000..c1eae25 --- /dev/null +++ b/items/debugitem.h @@ -0,0 +1,36 @@ +#ifndef DEBUGITEM_H +#define DEBUGITEM_H + +#include + +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 diff --git a/items/errorcodestateitem.cpp b/items/errorcodestateitem.cpp new file mode 100644 index 0000000..db31d2c --- /dev/null +++ b/items/errorcodestateitem.cpp @@ -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 ; // 代码对应的名称 + } +} diff --git a/items/errorcodestateitem.h b/items/errorcodestateitem.h new file mode 100644 index 0000000..8eacea3 --- /dev/null +++ b/items/errorcodestateitem.h @@ -0,0 +1,33 @@ +#ifndef ERRORCODESTATEITEM_H +#define ERRORCODESTATEITEM_H + +#include + +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 diff --git a/items/fileitem.cpp b/items/fileitem.cpp new file mode 100644 index 0000000..eb77a73 --- /dev/null +++ b/items/fileitem.cpp @@ -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; // 图片路径 +} diff --git a/items/fileitem.h b/items/fileitem.h new file mode 100644 index 0000000..5e130d9 --- /dev/null +++ b/items/fileitem.h @@ -0,0 +1,48 @@ +#ifndef FILEITEM_H +#define FILEITEM_H + +#include +#include +#include + +// 文件条目项 +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 diff --git a/items/itemsmanage.cpp b/items/itemsmanage.cpp new file mode 100644 index 0000000..0a97e58 --- /dev/null +++ b/items/itemsmanage.cpp @@ -0,0 +1,1782 @@ +#include "itemsmanage.h" + +ParaItem makeAParaItem( + int64_t mcenSel, + int paraType, + int paraTypeSort, + int indexInPara, + int bitInWord, + int readonly, + int valueType, + QString paraName, + int64_t value, + int64_t minval, + int64_t maxval, + int64_t defvalue, + int afterpoint, + QString unitstr, + QString valuestr, + QString selList, + int selIdx, + int defIdx, + int showPriority, + int authority) +{ + ParaItem item; + + item.clean(); + + item.mcenSel = mcenSel; /* 机型选择 */ + item.paraType = paraType; /* 参数类型(机器参数、工作参数、花样设置参数...) */ + item.paraTypeSort = paraTypeSort; /* 参数类型分类(机器参数的速度参数、机器参数的动作参数...) */ + + item.indexInPara = indexInPara; /* 参数索引,-1,提示型显示; >= 0,该条目在参数中的位置*/ + item.bitInWord = bitInWord; /* 参数位索引 */ + item.readonly = readonly; /* 只读标志 */ + item.valueType = valueType; /* 参数值类型 = 0, 无值; = 1, 数字输入型; = 2, 开关选择型; = 3, 列表选择型 */ + + item.paraName = paraName; /* 参数名称 */ + + item.value = value; /* int输入型或选择型参数值 */ + item.minVal = minval; /* int输入型参数值范围下限 */ + item.maxVal = maxval; /* int输入型参数值范围上限 */ + item.defValue = defvalue; /* int输入型或选择型默认参数值 */ + item.afterPoint = afterpoint; /* int输入型保留小数位数 */ + item.unitStr = unitstr; /* int输入型单位字符串 */ + item.valueStr = valuestr; /* 字符输入型参数字符串 */ + + item.selList = selList; /* 列表选择型的参数列表, 通过"\n"来分割 */ + item.selIdx = selIdx; /* 当前选择项索引 */ + item.defIdx = defIdx; /* 默认选择项索引 */ + item.showPriority = showPriority; /* 显示优先级 */ + item.authority = authority; /* 显示优先级 */ + + return item; +} + +bool comparePriority(const ParaItem &item1, const ParaItem &item2) +{ + int pr1, pr2; + pr1 = item1.showPriority; + pr2 = item2.showPriority; + if (pr1 < 0) + { + pr1 = 0; + } + if (pr2 < 0) + { + pr2 = 0; + } + + return (pr1 < pr2); +} + +//各个机型通用参数-软件设置参数 +void initSoftwareParasList(QList & parasList) +{ + //软件设置参数-语言;单位:无 ,范围0-1,默认0 + parasList.append(makeAParaItem(0, + PARA_TYPE_SOFTWARESET, + 0 , + SET_LANGUAGE, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Language"),//语言 + 0, 0, 5, 0, 0, "", "", + QCoreApplication::translate("GLOBAL", "Chinese:0;English:1"), + 0, 0, 0x0002, operate)); + + //软件设置参数--------------------------- +} + +//各个机型通用参数-时间设置参数 +void initTimeParasList(QList & parasList) +{ + //时间设置参数--------------------------- + //时间设置参数-年;单位:无 ,范围1000-9999,默认1000 + parasList.append(makeAParaItem(0, + PARA_TYPE_TIMESET, + 0 , + 1, 0, 0, PARA_VALUE_TYPE_INT, + QCoreApplication::translate("GLOBAL", "Year"),//年 + 1000, 1000, 9999, 1000, 0, "", "", + "", 0, 0, 0x0000, operate)); + + //时间设置参数-月;单位:无 ,范围1-12,默认1 + parasList.append(makeAParaItem(0, + PARA_TYPE_TIMESET, + 0 , + 2, 0, 0, PARA_VALUE_TYPE_INT, + QCoreApplication::translate("GLOBAL", "Month"),//月 + 1, 1, 12, 1, 0, "", "", + "", 0, 0, 0x0001, operate)); + + //时间设置参数-日;单位:无 ,范围1-31,默认1 + parasList.append(makeAParaItem(0, + PARA_TYPE_TIMESET, + 0 , + 3, 0, 0, PARA_VALUE_TYPE_INT, + QCoreApplication::translate("GLOBAL", "Day"),//日 + 1, 1, 31, 1, 0, "", "", + "", 0, 0, 0x0002, operate)); + + //时间设置参数-时;单位:无 ,范围0-23,默认0 + parasList.append(makeAParaItem(0, + PARA_TYPE_TIMESET, + 0 , + 4, 0, 0, PARA_VALUE_TYPE_INT, + QCoreApplication::translate("GLOBAL", "Hour"),//时 + 0, 0, 23, 0, 0, "", "", + "", 0, 0, 0x0003, operate)); + + //时间设置参数-分;单位:无 ,范围0-59,默认0 + parasList.append(makeAParaItem(0, + PARA_TYPE_TIMESET, + 0 , + 5, 0, 0, PARA_VALUE_TYPE_INT, + QCoreApplication::translate("GLOBAL", "Minute"),//分 + 0, 0, 59, 0, 0, "", "", + "", 0, 0, 0x0004, operate)); + + //时间设置参数-秒;单位:无 ,范围0-59,默认0 + parasList.append(makeAParaItem(0, + PARA_TYPE_TIMESET, + 0 , + 6, 0, 0, PARA_VALUE_TYPE_INT, + QCoreApplication::translate("GLOBAL", "Second"),//秒 + 0, 0, 59, 0, 0, "", "", + "", 0, 0, 0x0005, operate)); + //时间设置参数--------------------------- +} + +//各个机型通用参数-网络管理参数 +void initNetworkParasList(QList & parasList) +{ + //网络管理参数-服务器IP设置;单位:无 ,范围无,默认192.168.16.253 + parasList.append(makeAParaItem(0, + PARA_TYPE_NETWORKSET, + 0 , + SET_MACHINE_SERVERIP, 0, 0, PARA_VALUE_TYPE_STRINPUT, + QCoreApplication::translate("GLOBAL", "Server IP settings"),//服务器IP设置 + 0, 0, 0, 0, 0, "", "192.168.16.253", + "", + 0, 0, 0x0007, operate)); + + //网络管理参数-服务器端口设置;单位:无 ,范围0-65535,默认5000 + parasList.append(makeAParaItem(0, + PARA_TYPE_NETWORKSET, + 0 , + SET_MACHINE_SERVERPORT, 0, 0, PARA_VALUE_TYPE_INT, + QCoreApplication::translate("GLOBAL", "Server port settings"),//服务器端口设置 + 5000, 0, U16_MAX, 5000, 0, "", "", + "", 0, 0,0x0008, operate)); + + //网络管理参数-本地IP设置;单位:无 ,范围无,默认192.168.16.41 + parasList.append(makeAParaItem(0, + PARA_TYPE_NETWORKSET, + 0 , + SET_LOCALIP, 0, 0, PARA_VALUE_TYPE_STRINPUT, + QCoreApplication::translate("GLOBAL", "Local IP settings"),//本地IP设置 + 0, 0, 0, 0, 0, "", "192.168.16.100", + "", + 0, 0, 0x0009, operate)); + + //网络管理参数-本地端口设置;单位:无 ,范围0-65535,默认5001 + parasList.append(makeAParaItem(0, + PARA_TYPE_NETWORKSET, + 0 , + SET_LOCALPORT, 0, 0, PARA_VALUE_TYPE_INT, + QCoreApplication::translate("GLOBAL", "Local port settings"),//本地端口设置 + 5001, 0, U16_MAX, 5001, 0, "", "", + "", 0, 0,0x000A, operate)); + //网络管理参数--------------------------- +} + +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) +{ + OutCtrlItem item; + item.clean(); + + item.m_macType = macType; + item.m_showPriority = showPriority; + item.m_name = name; + item.m_def = def; + + item.m_btn1Str = btn1Str; + item.m_btn1Visible = btn1Visible; + item.m_btn1ClickFun = btn1ClickFun; + item.m_btn1PreFun = btn1PreFun; + item.m_btn1RelFun = btn1RelFun; + + item.m_btn2Str = btn2Str; + item.m_btn2Visible = btn2Visible; + item.m_btn2ClickFun = btn2ClickFun; + item.m_btn2PreFun = btn2PreFun; + item.m_btn2RelFun = btn2RelFun; + + item.m_btn3Str = btn3Str; + item.m_btn3Visible = btn3Visible; + item.m_btn3ClickFun = btn3ClickFun; + item.m_btn3PreFun = btn3PreFun; + item.m_btn3RelFun = btn3RelFun; + + item.m_btn4Str = btn4Str; + item.m_btn4Visible = btn4Visible; + item.m_btn4ClickFun = btn4ClickFun; + item.m_btn4PreFun = btn4PreFun; + item.m_btn4RelFun = btn4RelFun; + + item.m_btn5Str = btn5Str; + item.m_btn5Visible = btn5Visible; + item.m_btn5ClickFun = btn5ClickFun; + item.m_btn5PreFun = btn5PreFun; + item.m_btn5RelFun = btn5RelFun; + + return item; +} + +ShortCutItem makeAShortCutItem(int macType, int showPriority, QString name, QString topImageName, int enumFunction) +{ + ShortCutItem item; + item.clean(); + + item.m_macType = macType; + item.m_showPriority = showPriority; + item.m_name = name; + item.m_topImageName = topImageName; + item.m_enumFunction = enumFunction; + + return item; +} + +//添加辅助功能item +AssistItem makeAAssistItem(int macType, int showPriority, QString name, QString topImageName, int enumFunction) +{ + AssistItem item; + item.clean(); + + item.m_macType = macType; + item.m_showPriority = showPriority; + item.m_name = name; + item.m_topImageName = topImageName; + item.m_enumFunction = enumFunction; + + return item; +} + +PatternSetItem makeAPatternSetItem(int macType, int showPriority, QString name, QString topImageName, int enumFunction) +{ + PatternSetItem item; + item.clean(); + + item.m_macType = macType; + item.m_showPriority = showPriority; + item.m_name = name; + item.m_topImageName = topImageName; + item.m_enumFunction = enumFunction; + + return item; +} + +void initRootHMIConfigurationList(QList ¶sList) +{ + //超级用户界面配置参数-分辨率;单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_HMICONFIGURATION, + 0 , + ROOT_RESOLUTION, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Resolution"),//分辨率 + 0, 0, 1, 0, 0, "", "", + "1920x1080:0;1024x600:1", + 0, 0, 0x0001, root)); + + //软件设置参数-通讯方式;单位:无 ,范围0-2,默认0 + parasList.append(makeAParaItem(0, + PARA_TYPE_HMICONFIGURATION, + 0 , + SET_CONNECTMODE, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Communication method"),//通讯方式 + 0, 0, 1, 0, 0, "", "", + QCoreApplication::translate("GLOBAL", "Network:0;SerialPort:1"),//网口:0;串口:1 + 0, 0, 0x0011, operate)); + + //超级用户界面配置参数-机器类型;单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_HMICONFIGURATION, + 0 , + ROOT_MACTYPE, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Machine type"),//机器类型 + MACHINE_PUNCH, MACHINE_PUNCH, MACHINE_TEMPLATE_SEW, MACHINE_PUNCH, 0, "", "", + ("000 " + QCoreApplication::translate("GLOBAL","PunchMachine:")+QString::number(MACHINE_PUNCH)+";"+//冲孔机 + "001 " + QCoreApplication::translate("GLOBAL","PunchSew:")+QString::number(MACHINE_PUNCH_SEW)+";"+//冲缝机 + "002 " + QCoreApplication::translate("GLOBAL","PunchMachineDZ:")+QString::number(MACHINE_PUNCH_AUTOPOS)+";"+//定制冲孔机 xcy 0902 + "003 " + QCoreApplication::translate("GLOBAL","AdhesivePress:")+QString::number(MACHINE_ADHESIVE)+";"+//压胶机 + "004 " + QCoreApplication::translate("GLOBAL","PunchSewEmb:")+QString::number(MACHINE_PUNCH_SEW_EMB)+";"+//冲绣缝 + "005 " + QCoreApplication::translate("GLOBAL","TemplateSew:")+QString::number(MACHINE_TEMPLATE_SEW)),//模板缝纫机 + 0, 0, 0x0012, root)); + + //超级用户界面配置参数-产品类型;单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_HMICONFIGURATION, + 0 , + ROOT_PRODUCTTYPE, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Product type"),//产品类型 + PRODUCT_PUNCH_SINGLEHEAD, PRODUCT_PUNCH_SINGLEHEAD, PRODUCT_NULL, PRODUCT_PUNCH_SINGLEHEAD, 0, "", "", + (QCoreApplication::translate("GLOBAL","SingleHead:")+QString::number(PRODUCT_PUNCH_SINGLEHEAD)+";"+//单头 + QCoreApplication::translate("GLOBAL","DoubleleHead:")+QString::number(PRODUCT_PUNCH_TWOHEAD)+";"+//双头 + QCoreApplication::translate("GLOBAL","FourHead:")+QString::number(PRODUCT_PUNCH_FOURHEAD)+";"+//四头 + QCoreApplication::translate("GLOBAL","RotaryPunch:")+QString::number(PRODUCT_PUNCH_ROTARY)+";"+//旋转冲 + QCoreApplication::translate("GLOBAL","singleleHead:")+QString::number(PRODUCT_PUNCHSEW_SINGLEHEAD)+";"+//单头 + QCoreApplication::translate("GLOBAL","DoubleleHead:")+QString::number(PRODUCT_PUNCHSEW_TWOHEAD)+";"+//双头 + QCoreApplication::translate("GLOBAL","ProductNull:")+QString::number(PRODUCT_NULL)),//无 + 0, 0, 0x0013, root)); + + //超级用户界面配置参数-高低速切换;单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_HMICONFIGURATION, + 0 , + ROOT_HIGH_SPEED_SWITCHING, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "High and low speed switching"),//高低速切换 + 1, 0, 1, 1, 0, "", "", + "Low:0;High:1", + 1, 1, 0x0013, root)); + + //超级用户界面配置参数-主背景是否带水印;单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_HMICONFIGURATION, + 0 , + ROOT_WATERMARKSET, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Is there a Richpeace logo"),//是否有富怡标志 + 1, 0, 1, 1, 0, "", "", + "No:0;Yes:1", + 1, 1, 0x0017, factory)); + + //超级用户界面配置参数-是否带wifi;单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_HMICONFIGURATION, + 0 , + ROOT_WIFI, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Is it with WiFi"),//是否带wifi + 1, 0, 1, 1, 0, "", "", + "No:0;Yes:1", + 1, 1, 0x0017, factory)); + + //超级用户界面配置参数-参数是否分类显示;单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_HMICONFIGURATION, + 0 , + ROOT_PARASORTSET, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Parameter is classified"),//参数是否分类显示 + 0, 0, 1, 0, 0, "", "", + "No:0;Yes:1", + 0, 0, 0x0018, factory)); + + //超级用户界面配置参数-界面解密;单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_HMICONFIGURATION, + 0 , + ROOT_HMIDECRYPT, 0, 0, PARA_VALUE_TYPE_CLICK, + QCoreApplication::translate("GLOBAL", "HMI decrypt"),//界面解密 + 0, 0, 0, 0, 0, "", "", "", + 0, 0, 0x0019, factory)); + +} + +//物联网配置参数 +void initRootIOTConfigurationList(QList ¶sList) +{ + //超级用户物联网配置-网关连接方式;单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_IOTCONFIGURATION, + 0 , + ROOT_GATEWAYCONNECTIONMETHOD, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Gateway connection method"),//网关连接方式 + 0, 0, 2, 0, 0, "", "", + QCoreApplication::translate("GLOBAL","Network port:0;Serial port:1"),//网口:0;串口:1 + 0, 0, 0x0011, factory)); + + //超级用户物联网配置-机架号输入; 单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_IOTCONFIGURATION, + 0 , + ROOT_RACKNUMBERINPUT, 0, 0, PARA_VALUE_TYPE_INT, + QCoreApplication::translate("GLOBAL", "Input rack number"),//机架号输入 + 111189, 0, INT_MAX, 111189, 0, "", "", + "", + 0, 0, 0x0012, factory)); + + //超级用户物联网配置-网络设置; 单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_IOTCONFIGURATION, + 0 , + ROOT_NETWORKSETTINGS, 0, 0, PARA_VALUE_TYPE_CLICK, + QCoreApplication::translate("GLOBAL", "Network settings"),//网络设置 + 0, 0, 0, 0, 0, "", "", + "", + 0, 0, 0x0013, factory)); + + //超级用户物联网配置-工厂预计交货时间; 单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_IOTCONFIGURATION, + 0 , + ROOT_DELIVERYTIME, 0, 0, PARA_VALUE_TYPE_STRINPUT, + QCoreApplication::translate("GLOBAL", "Factory expects delivery time"),//工厂预计交货时间 + 0, 0, 0, 0, 0, "", "", + "", + 0, 0, 0x0014, factory)); + + //超级用户物联网配置-调试进度; 单位:无 + parasList.append(makeAParaItem(0, + PARA_TYPE_IOTCONFIGURATION, + 0 , + ROOT_DEBUGPROGRESS, 0, 0, PARA_VALUE_TYPE_INT, + QCoreApplication::translate("GLOBAL", "Debugging progress"),//调试进度 + 0, 1, 100, 0, 0, "", "", + "", + 0, 0, 0x0015, factory)); +} + +ParaSetItem makeAParaSetItem(int macType, int showPriority, QString name, QString topImageName, int paraType) +{ + ParaSetItem item; + item.clean(); + + item.m_macType = macType; + item.m_showPriority = showPriority; + item.m_name = name; + item.m_topImageName = topImageName; + item.m_paraType = paraType; + + return item; +} + +DebugItem makeADebugItem(int macType,int showPriority,QString name,QString topImageName,int enumFunction) +{ + DebugItem item; + item.clean(); + + item.m_macType = macType; + item.m_showPriority = showPriority; + item.m_name = name; + item.m_topImageName = topImageName; + item.m_enumFunction = enumFunction; + + return item; +} + +SensorItem makeASensorItem(int byte, int bit, QString name, int type) +{ + SensorItem item; + item.clean(); + + item.m_byte_offset = byte; + item.m_bit_offset = bit; + item.m_name = name; + item.m_type = type; + + return item; +} + +ErrorCodeStateItem makeAErrorStateItem(int code, QString name) +{ + ErrorCodeStateItem item; + item.clean(); + + item.m_code = code; + item.m_name = name; + + return item; +} + +//冲孔机常用功能设置参数 +void initPunchCommonFunParasList(QList ¶sList) +{ + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮1;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 1, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button1"),//常用按钮1 + FUN_PATTERNSELECT, FUN_ALLTOZERO, FUN_NULL, FUN_PATTERNSELECT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//主轴点动 + QCoreApplication::translate("GLOBAL","SpindleEnable:")+QString::number(FUN_SPINDLEENABLE)+";"+//主轴使能 + QCoreApplication::translate("GLOBAL","SpindleDisable:")+QString::number(FUN_SPINDLEDISABLE)+";"+//主轴失能 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","ProcessReset:")+QString::number(FUN_PROCESSRESET)+";"+//流程复位 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","DrawOutline:")+QString::number(FUN_DRAWOUTLINE)+";"+//画轮廓线 + QCoreApplication::translate("GLOBAL","ToolDebug:")+QString::number(FUN_ROTATECOMPENSATE)+";"+//旋转补偿 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_PATTERNSELECT, FUN_PATTERNSELECT, 0x0001, operate)); + + //常用功能设置参数-常用按钮2;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 2, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button2"),//常用按钮2 + FUN_ALLTOZERO, FUN_ALLTOZERO, FUN_NULL, FUN_ALLTOZERO, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//主轴点动 + QCoreApplication::translate("GLOBAL","SpindleEnable:")+QString::number(FUN_SPINDLEENABLE)+";"+//主轴使能 + QCoreApplication::translate("GLOBAL","SpindleDisable:")+QString::number(FUN_SPINDLEDISABLE)+";"+//主轴失能 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","ProcessReset:")+QString::number(FUN_PROCESSRESET)+";"+//流程复位 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","DrawOutline:")+QString::number(FUN_DRAWOUTLINE)+";"+//画轮廓线 + QCoreApplication::translate("GLOBAL","ToolDebug:")+QString::number(FUN_ROTATECOMPENSATE)+";"+//旋转补偿 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + // QCoreApplication::translate("GLOBAL","SewTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + FUN_ALLTOZERO, FUN_ALLTOZERO, 0x0002, operate)); + + //常用功能设置参数-常用按钮3;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 3, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button3"),//常用按钮3 + FUN_PUNCHSPINDLEJOG, FUN_ALLTOZERO, FUN_NULL, FUN_PUNCHSPINDLEJOG, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//主轴点动 + QCoreApplication::translate("GLOBAL","SpindleEnable:")+QString::number(FUN_SPINDLEENABLE)+";"+//主轴使能 + QCoreApplication::translate("GLOBAL","SpindleDisable:")+QString::number(FUN_SPINDLEDISABLE)+";"+//主轴失能 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","ProcessReset:")+QString::number(FUN_PROCESSRESET)+";"+//流程复位 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","DrawOutline:")+QString::number(FUN_DRAWOUTLINE)+";"+//画轮廓线 + QCoreApplication::translate("GLOBAL","ToolDebug:")+QString::number(FUN_ROTATECOMPENSATE)+";"+//旋转补偿 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_PUNCHSPINDLEJOG, FUN_PUNCHSPINDLEJOG, 0x0003, operate)); + + //常用功能设置参数-常用按钮4;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 4, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button4"),//常用按钮4 + FUN_SETSTARTPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_SETSTARTPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//主轴点动 + QCoreApplication::translate("GLOBAL","SpindleEnable:")+QString::number(FUN_SPINDLEENABLE)+";"+//主轴使能 + QCoreApplication::translate("GLOBAL","SpindleDisable:")+QString::number(FUN_SPINDLEDISABLE)+";"+//主轴失能 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","ProcessReset:")+QString::number(FUN_PROCESSRESET)+";"+//流程复位 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","DrawOutline:")+QString::number(FUN_DRAWOUTLINE)+";"+//画轮廓线 + QCoreApplication::translate("GLOBAL","ToolDebug:")+QString::number(FUN_ROTATECOMPENSATE)+";"+//旋转补偿 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_SETSTARTPOINT, FUN_SETSTARTPOINT, 0x0004, operate)); + + //常用功能设置参数-常用按钮5;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 5, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button5"),//常用按钮5 + FUN_BACKSTARTPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_BACKSTARTPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//主轴点动 + QCoreApplication::translate("GLOBAL","SpindleEnable:")+QString::number(FUN_SPINDLEENABLE)+";"+//主轴使能 + QCoreApplication::translate("GLOBAL","SpindleDisable:")+QString::number(FUN_SPINDLEDISABLE)+";"+//主轴失能 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","ProcessReset:")+QString::number(FUN_PROCESSRESET)+";"+//流程复位 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","DrawOutline:")+QString::number(FUN_DRAWOUTLINE)+";"+//画轮廓线 + QCoreApplication::translate("GLOBAL","ToolDebug:")+QString::number(FUN_ROTATECOMPENSATE)+";"+//旋转补偿 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_BACKSTARTPOINT, FUN_BACKSTARTPOINT, 0x0005, operate)); + + //常用功能设置参数-常用按钮6;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 6, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button6"),//常用按钮6 + FUN_BACKWORKPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_BACKWORKPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//主轴点动 + QCoreApplication::translate("GLOBAL","SpindleEnable:")+QString::number(FUN_SPINDLEENABLE)+";"+//主轴使能 + QCoreApplication::translate("GLOBAL","SpindleDisable:")+QString::number(FUN_SPINDLEDISABLE)+";"+//主轴失能 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","ProcessReset:")+QString::number(FUN_PROCESSRESET)+";"+//流程复位 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","DrawOutline:")+QString::number(FUN_DRAWOUTLINE)+";"+//画轮廓线 + QCoreApplication::translate("GLOBAL","ToolDebug:")+QString::number(FUN_ROTATECOMPENSATE)+";"+//旋转补偿 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_BACKWORKPOINT, FUN_BACKWORKPOINT, 0x0006, operate)); + + //常用功能设置参数-常用按钮7;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 7, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button7"),//常用按钮7 + FUN_CHECKFRAME, FUN_ALLTOZERO, FUN_NULL, FUN_CHECKFRAME, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//主轴点动 + QCoreApplication::translate("GLOBAL","SpindleEnable:")+QString::number(FUN_SPINDLEENABLE)+";"+//主轴使能 + QCoreApplication::translate("GLOBAL","SpindleDisable:")+QString::number(FUN_SPINDLEDISABLE)+";"+//主轴失能 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","ProcessReset:")+QString::number(FUN_PROCESSRESET)+";"+//流程复位 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","DrawOutline:")+QString::number(FUN_DRAWOUTLINE)+";"+//画轮廓线 + QCoreApplication::translate("GLOBAL","ToolDebug:")+QString::number(FUN_ROTATECOMPENSATE)+";"+//旋转补偿 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_CHECKFRAME, FUN_CHECKFRAME, 0x0007, operate)); + + //常用功能设置参数-常用按钮8;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 8, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button8"),//常用按钮8 + FUN_PUNCHMANUALCHANGECOLOR, FUN_ALLTOZERO, FUN_NULL, FUN_PUNCHMANUALCHANGECOLOR, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//主轴点动 + QCoreApplication::translate("GLOBAL","SpindleEnable:")+QString::number(FUN_SPINDLEENABLE)+";"+//主轴使能 + QCoreApplication::translate("GLOBAL","SpindleDisable:")+QString::number(FUN_SPINDLEDISABLE)+";"+//主轴失能 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","ProcessReset:")+QString::number(FUN_PROCESSRESET)+";"+//流程复位 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","DrawOutline:")+QString::number(FUN_DRAWOUTLINE)+";"+//画轮廓线 + QCoreApplication::translate("GLOBAL","ToolDebug:")+QString::number(FUN_ROTATECOMPENSATE)+";"+//旋转补偿 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_PUNCHMANUALCHANGECOLOR, FUN_PUNCHMANUALCHANGECOLOR, 0x0008, operate)); + + //常用功能设置参数-常用按钮9;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 9, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button9"),//常用按钮9 + FUN_PROCESSRESET, FUN_ALLTOZERO, FUN_NULL, FUN_PROCESSRESET, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//主轴点动 + QCoreApplication::translate("GLOBAL","SpindleEnable:")+QString::number(FUN_SPINDLEENABLE)+";"+//主轴使能 + QCoreApplication::translate("GLOBAL","SpindleDisable:")+QString::number(FUN_SPINDLEDISABLE)+";"+//主轴失能 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","ProcessReset:")+QString::number(FUN_PROCESSRESET)+";"+//流程复位 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","DrawOutline:")+QString::number(FUN_DRAWOUTLINE)+";"+//画轮廓线 + QCoreApplication::translate("GLOBAL","ToolDebug:")+QString::number(FUN_ROTATECOMPENSATE)+";"+//旋转补偿 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_PROCESSRESET, FUN_PROCESSRESET, 0x0009, operate)); + + //常用功能设置参数-常用按钮10;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 10, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button10"),//常用按钮10 + FUN_DRAWOUTLINE, FUN_ALLTOZERO, FUN_NULL, FUN_DRAWOUTLINE, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//主轴点动 + QCoreApplication::translate("GLOBAL","SpindleEnable:")+QString::number(FUN_SPINDLEENABLE)+";"+//主轴使能 + QCoreApplication::translate("GLOBAL","SpindleDisable:")+QString::number(FUN_SPINDLEDISABLE)+";"+//主轴失能 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","ProcessReset:")+QString::number(FUN_PROCESSRESET)+";"+//流程复位 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","DrawOutline:")+QString::number(FUN_DRAWOUTLINE)+";"+//画轮廓线 xcy20220909 + QCoreApplication::translate("GLOBAL","ToolDebug:")+QString::number(FUN_ROTATECOMPENSATE)+";"+//旋转补偿 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_DRAWOUTLINE, FUN_DRAWOUTLINE, 0x000A, operate)); + //常用功能设置参数--------------------------- +} + +//冲缝机常用功能设置参数 +void initPunchSewCommonFunParasList(QList ¶sList) +{ + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮1;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 1, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button1"),//常用按钮1 + FUN_PATTERNSELECT, FUN_ALLTOZERO, FUN_NULL, FUN_PATTERNSELECT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Head 1 thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//机头1剪线 + QCoreApplication::translate("GLOBAL","Head 2 thread trimming:")+QString::number(FUN_SEWHEADCUTLINET)+";"+//机头2剪线 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_PATTERNSELECT, FUN_PATTERNSELECT, 0x0001, operate)); + + //常用功能设置参数-常用按钮2;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 2, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button2"),//常用按钮2 + FUN_SETSTARTPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_SETSTARTPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Head 1 thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//机头1剪线 + QCoreApplication::translate("GLOBAL","Head 2 thread trimming:")+QString::number(FUN_SEWHEADCUTLINET)+";"+//机头2剪线 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_SETSTARTPOINT, FUN_SETSTARTPOINT, 0x0002, operate)); + + //常用功能设置参数-常用按钮3;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 3, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button3"),//常用按钮3 + FUN_BACKSTARTPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_BACKSTARTPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Head 1 thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//机头1剪线 + QCoreApplication::translate("GLOBAL","Head 2 thread trimming:")+QString::number(FUN_SEWHEADCUTLINET)+";"+//机头2剪线 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_BACKSTARTPOINT, FUN_BACKSTARTPOINT, 0x0003, operate)); + + //常用功能设置参数-常用按钮4;单位:无 ,范围全部,默认FUN_BACKOFFSETPOINT + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 4, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button4"),//常用按钮4 + FUN_CHECKFRAME, FUN_ALLTOZERO, FUN_NULL, FUN_CHECKFRAME, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Head 1 thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//机头1剪线 + QCoreApplication::translate("GLOBAL","Head 2 thread trimming:")+QString::number(FUN_SEWHEADCUTLINET)+";"+//机头2剪线 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_CHECKFRAME, FUN_CHECKFRAME, 0x0004, operate)); + + //常用功能设置参数-常用按钮5;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 5, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button5"),//常用按钮5 + FUN_BACKWORKPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_BACKWORKPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Head 1 thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//机头1剪线 + QCoreApplication::translate("GLOBAL","Head 2 thread trimming:")+QString::number(FUN_SEWHEADCUTLINET)+";"+//机头2剪线 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_BACKWORKPOINT, FUN_BACKWORKPOINT, 0x0005, operate)); + + //常用功能设置参数-常用按钮6;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 6, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button6"),//常用按钮6 + FUN_SETOFFSETPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_SETOFFSETPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Head 1 thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//机头1剪线 + QCoreApplication::translate("GLOBAL","Head 2 thread trimming:")+QString::number(FUN_SEWHEADCUTLINET)+";"+//机头2剪线 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_SETOFFSETPOINT, FUN_SETOFFSETPOINT, 0x0006, operate)); + + //常用功能设置参数-常用按钮7;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 7, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button7"),//常用按钮7 + FUN_BACKOFFSETPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_BACKOFFSETPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Head 1 thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//机头1剪线 + QCoreApplication::translate("GLOBAL","Head 2 thread trimming:")+QString::number(FUN_SEWHEADCUTLINET)+";"+//机头2剪线 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_BACKOFFSETPOINT, FUN_BACKOFFSETPOINT, 0x0007, operate)); + + //常用功能设置参数-常用按钮8;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 8, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button8"),//常用按钮8 + FUN_PUNCHSPINDLEJOG, FUN_ALLTOZERO, FUN_NULL, FUN_PUNCHSPINDLEJOG, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Head 1 thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//机头1剪线 + QCoreApplication::translate("GLOBAL","Head 2 thread trimming:")+QString::number(FUN_SEWHEADCUTLINET)+";"+//机头2剪线 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_PUNCHSPINDLEJOG, FUN_PUNCHSPINDLEJOG, 0x0008, operate)); + + //常用功能设置参数-常用按钮9;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 9, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button9"),//常用按钮9 + FUN_PUNCHMANUALCHANGECOLOR, FUN_ALLTOZERO, FUN_NULL, FUN_PUNCHMANUALCHANGECOLOR, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Head 1 thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//机头1剪线 + QCoreApplication::translate("GLOBAL","Head 2 thread trimming:")+QString::number(FUN_SEWHEADCUTLINET)+";"+//机头2剪线 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_PUNCHMANUALCHANGECOLOR, FUN_PUNCHMANUALCHANGECOLOR, 0x0009, operate)); + + //常用功能设置参数-常用按钮10;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 10, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button10"),//常用按钮10 + FUN_SINGLEPUNCH, FUN_ALLTOZERO, FUN_NULL, FUN_SINGLEPUNCH, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Head 1 thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//机头1剪线 + QCoreApplication::translate("GLOBAL","Head 2 thread trimming:")+QString::number(FUN_SEWHEADCUTLINET)+";"+//机头2剪线 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_SINGLEPUNCH, FUN_SINGLEPUNCH, 0x000A, operate)); + //常用功能设置参数--------------------------- +} +void initPunchEmbSewCommonFunParasList(QList ¶sList) +{ + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮1;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 1, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button1"),//常用按钮1 + FUN_PATTERNSELECT, FUN_ALLTOZERO, FUN_NULL, FUN_PATTERNSELECT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","BackAnchorPoint:")+QString::number(FUN_BACKANCHORPOINT)+";"+//回定位点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","EmbSetStartPoint:")+QString::number(FUN_THRIDSETSTARTPOINT)+";"+//平绣定起始点 + QCoreApplication::translate("GLOBAL","EmbSpindleTest:")+QString::number(FUN_SEWEMBSPINDLETEST)+";"+//平绣主轴研车 + QCoreApplication::translate("GLOBAL","EmbSpindleJog:")+QString::number(FUN_SEWEMBSPINDLEJOG)+";"+//平绣主轴点动 + QCoreApplication::translate("GLOBAL","EmbChangeColor:")+QString::number(FUN_SEWEMBCHANGECOLOR)+";"+//平绣换色 + QCoreApplication::translate("GLOBAL","EmbCutLine:")+QString::number(FUN_SEWEMBCUTLINE)+";"+//平绣剪线 + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachineEmbHead:")+QString::number(FUN_SELECTEMBHEAD)+";"+//切换平绣机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Sew thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//缝纫剪线 + QCoreApplication::translate("GLOBAL","Sew rotate proofreading:")+QString::number(FUN_ROTATEPROOFREAD)+";"+//缝纫旋转校对 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","Needle shuttle reposition:")+QString::number(FUN_NEEDLESHUTTLERESET)+";"+//针梭复位 + QCoreApplication::translate("GLOBAL","Needle reset:")+QString::number(FUN_NEEDLERESET)+";"+//针复位 + QCoreApplication::translate("GLOBAL","Shuttle reset:")+QString::number(FUN_SHUTTLERESET)+";"+//梭复位 + QCoreApplication::translate("GLOBAL","Sew rotate up:")+QString::number(FUN_SEWROTATEUP)+";"+//缝纫旋转+ + QCoreApplication::translate("GLOBAL","Sew rotate down:")+QString::number(FUN_SEWROTATEDOWN)+";"+//缝纫旋转- + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_PATTERNSELECT, FUN_PATTERNSELECT, 0x0001, operate)); + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮2;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 2, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button2"),//常用按钮2 + FUN_SETSTARTPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_SETSTARTPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","BackAnchorPoint:")+QString::number(FUN_BACKANCHORPOINT)+";"+//回定位点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","EmbSetStartPoint:")+QString::number(FUN_THRIDSETSTARTPOINT)+";"+//平绣定起始点 + QCoreApplication::translate("GLOBAL","EmbSpindleTest:")+QString::number(FUN_SEWEMBSPINDLETEST)+";"+//平绣主轴研车 + QCoreApplication::translate("GLOBAL","EmbSpindleJog:")+QString::number(FUN_SEWEMBSPINDLEJOG)+";"+//平绣主轴点动 + QCoreApplication::translate("GLOBAL","EmbChangeColor:")+QString::number(FUN_SEWEMBCHANGECOLOR)+";"+//平绣换色 + QCoreApplication::translate("GLOBAL","EmbCutLine:")+QString::number(FUN_SEWEMBCUTLINE)+";"+//平绣剪线 + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachineEmbHead:")+QString::number(FUN_SELECTEMBHEAD)+";"+//切换平绣机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Sew thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//缝纫剪线 + QCoreApplication::translate("GLOBAL","Sew rotate proofreading:")+QString::number(FUN_ROTATEPROOFREAD)+";"+//缝纫旋转校对 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","Needle shuttle reposition:")+QString::number(FUN_NEEDLESHUTTLERESET)+";"+//针梭复位 + QCoreApplication::translate("GLOBAL","Needle reset:")+QString::number(FUN_NEEDLERESET)+";"+//针复位 + QCoreApplication::translate("GLOBAL","Shuttle reset:")+QString::number(FUN_SHUTTLERESET)+";"+//梭复位 + QCoreApplication::translate("GLOBAL","Sew rotate up:")+QString::number(FUN_SEWROTATEUP)+";"+//缝纫旋转+ + QCoreApplication::translate("GLOBAL","Sew rotate down:")+QString::number(FUN_SEWROTATEDOWN)+";"+//缝纫旋转- + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_SETSTARTPOINT, FUN_SETSTARTPOINT, 0x0002, operate)); + + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮3;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 3, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button3"),//常用按钮3 + FUN_BACKSTARTPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_BACKSTARTPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","BackAnchorPoint:")+QString::number(FUN_BACKANCHORPOINT)+";"+//回定位点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","EmbSetStartPoint:")+QString::number(FUN_THRIDSETSTARTPOINT)+";"+//平绣定起始点 + QCoreApplication::translate("GLOBAL","EmbSpindleTest:")+QString::number(FUN_SEWEMBSPINDLETEST)+";"+//平绣主轴研车 + QCoreApplication::translate("GLOBAL","EmbSpindleJog:")+QString::number(FUN_SEWEMBSPINDLEJOG)+";"+//平绣主轴点动 + QCoreApplication::translate("GLOBAL","EmbChangeColor:")+QString::number(FUN_SEWEMBCHANGECOLOR)+";"+//平绣换色 + QCoreApplication::translate("GLOBAL","EmbCutLine:")+QString::number(FUN_SEWEMBCUTLINE)+";"+//平绣剪线 + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachineEmbHead:")+QString::number(FUN_SELECTEMBHEAD)+";"+//切换平绣机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Sew thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//缝纫剪线 + QCoreApplication::translate("GLOBAL","Sew rotate proofreading:")+QString::number(FUN_ROTATEPROOFREAD)+";"+//缝纫旋转校对 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","Needle shuttle reposition:")+QString::number(FUN_NEEDLESHUTTLERESET)+";"+//针梭复位 + QCoreApplication::translate("GLOBAL","Needle reset:")+QString::number(FUN_NEEDLERESET)+";"+//针复位 + QCoreApplication::translate("GLOBAL","Shuttle reset:")+QString::number(FUN_SHUTTLERESET)+";"+//梭复位 + QCoreApplication::translate("GLOBAL","Sew rotate up:")+QString::number(FUN_SEWROTATEUP)+";"+//缝纫旋转+ + QCoreApplication::translate("GLOBAL","Sew rotate down:")+QString::number(FUN_SEWROTATEDOWN)+";"+//缝纫旋转- + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_BACKSTARTPOINT, FUN_BACKSTARTPOINT, 0x0003, operate)); + + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮4;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 4, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button4"),//常用按钮4 + FUN_CHECKFRAME, FUN_ALLTOZERO, FUN_NULL, FUN_CHECKFRAME, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","BackAnchorPoint:")+QString::number(FUN_BACKANCHORPOINT)+";"+//回定位点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","EmbSetStartPoint:")+QString::number(FUN_THRIDSETSTARTPOINT)+";"+//平绣定起始点 + QCoreApplication::translate("GLOBAL","EmbSpindleTest:")+QString::number(FUN_SEWEMBSPINDLETEST)+";"+//平绣主轴研车 + QCoreApplication::translate("GLOBAL","EmbSpindleJog:")+QString::number(FUN_SEWEMBSPINDLEJOG)+";"+//平绣主轴点动 + QCoreApplication::translate("GLOBAL","EmbChangeColor:")+QString::number(FUN_SEWEMBCHANGECOLOR)+";"+//平绣换色 + QCoreApplication::translate("GLOBAL","EmbCutLine:")+QString::number(FUN_SEWEMBCUTLINE)+";"+//平绣剪线 + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachineEmbHead:")+QString::number(FUN_SELECTEMBHEAD)+";"+//切换平绣机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Sew thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//缝纫剪线 + QCoreApplication::translate("GLOBAL","Sew rotate proofreading:")+QString::number(FUN_ROTATEPROOFREAD)+";"+//缝纫旋转校对 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","Needle shuttle reposition:")+QString::number(FUN_NEEDLESHUTTLERESET)+";"+//针梭复位 + QCoreApplication::translate("GLOBAL","Needle reset:")+QString::number(FUN_NEEDLERESET)+";"+//针复位 + QCoreApplication::translate("GLOBAL","Shuttle reset:")+QString::number(FUN_SHUTTLERESET)+";"+//梭复位 + QCoreApplication::translate("GLOBAL","Sew rotate up:")+QString::number(FUN_SEWROTATEUP)+";"+//缝纫旋转+ + QCoreApplication::translate("GLOBAL","Sew rotate down:")+QString::number(FUN_SEWROTATEDOWN)+";"+//缝纫旋转- + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_CHECKFRAME, FUN_CHECKFRAME, 0x0004, operate)); + + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮5;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 5, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button5"),//常用按钮5 + FUN_BACKWORKPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_BACKWORKPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","BackAnchorPoint:")+QString::number(FUN_BACKANCHORPOINT)+";"+//回定位点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","EmbSetStartPoint:")+QString::number(FUN_THRIDSETSTARTPOINT)+";"+//平绣定起始点 + QCoreApplication::translate("GLOBAL","EmbSpindleTest:")+QString::number(FUN_SEWEMBSPINDLETEST)+";"+//平绣主轴研车 + QCoreApplication::translate("GLOBAL","EmbSpindleJog:")+QString::number(FUN_SEWEMBSPINDLEJOG)+";"+//平绣主轴点动 + QCoreApplication::translate("GLOBAL","EmbChangeColor:")+QString::number(FUN_SEWEMBCHANGECOLOR)+";"+//平绣换色 + QCoreApplication::translate("GLOBAL","EmbCutLine:")+QString::number(FUN_SEWEMBCUTLINE)+";"+//平绣剪线 + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachineEmbHead:")+QString::number(FUN_SELECTEMBHEAD)+";"+//切换平绣机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Sew thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//缝纫剪线 + QCoreApplication::translate("GLOBAL","Sew rotate proofreading:")+QString::number(FUN_ROTATEPROOFREAD)+";"+//缝纫旋转校对 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","Needle shuttle reposition:")+QString::number(FUN_NEEDLESHUTTLERESET)+";"+//针梭复位 + QCoreApplication::translate("GLOBAL","Needle reset:")+QString::number(FUN_NEEDLERESET)+";"+//针复位 + QCoreApplication::translate("GLOBAL","Shuttle reset:")+QString::number(FUN_SHUTTLERESET)+";"+//梭复位 + QCoreApplication::translate("GLOBAL","Sew rotate up:")+QString::number(FUN_SEWROTATEUP)+";"+//缝纫旋转+ + QCoreApplication::translate("GLOBAL","Sew rotate down:")+QString::number(FUN_SEWROTATEDOWN)+";"+//缝纫旋转- + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_BACKWORKPOINT, FUN_BACKWORKPOINT, 0x0005, operate)); + + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮6;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 6, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button6"),//常用按钮6 + FUN_SETOFFSETPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_SETOFFSETPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","BackAnchorPoint:")+QString::number(FUN_BACKANCHORPOINT)+";"+//回定位点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","EmbSetStartPoint:")+QString::number(FUN_THRIDSETSTARTPOINT)+";"+//平绣定起始点 + QCoreApplication::translate("GLOBAL","EmbSpindleTest:")+QString::number(FUN_SEWEMBSPINDLETEST)+";"+//平绣主轴研车 + QCoreApplication::translate("GLOBAL","EmbSpindleJog:")+QString::number(FUN_SEWEMBSPINDLEJOG)+";"+//平绣主轴点动 + QCoreApplication::translate("GLOBAL","EmbChangeColor:")+QString::number(FUN_SEWEMBCHANGECOLOR)+";"+//平绣换色 + QCoreApplication::translate("GLOBAL","EmbCutLine:")+QString::number(FUN_SEWEMBCUTLINE)+";"+//平绣剪线 + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachineEmbHead:")+QString::number(FUN_SELECTEMBHEAD)+";"+//切换平绣机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Sew thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//缝纫剪线 + QCoreApplication::translate("GLOBAL","Sew rotate proofreading:")+QString::number(FUN_ROTATEPROOFREAD)+";"+//缝纫旋转校对 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","Needle shuttle reposition:")+QString::number(FUN_NEEDLESHUTTLERESET)+";"+//针梭复位 + QCoreApplication::translate("GLOBAL","Needle reset:")+QString::number(FUN_NEEDLERESET)+";"+//针复位 + QCoreApplication::translate("GLOBAL","Shuttle reset:")+QString::number(FUN_SHUTTLERESET)+";"+//梭复位 + QCoreApplication::translate("GLOBAL","Sew rotate up:")+QString::number(FUN_SEWROTATEUP)+";"+//缝纫旋转+ + QCoreApplication::translate("GLOBAL","Sew rotate down:")+QString::number(FUN_SEWROTATEDOWN)+";"+//缝纫旋转- + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_SETOFFSETPOINT, FUN_SETOFFSETPOINT, 0x0006, operate)); + + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮7;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 7, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button7"),//常用按钮7 + FUN_BACKOFFSETPOINT, FUN_ALLTOZERO, FUN_NULL, FUN_BACKOFFSETPOINT, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","BackAnchorPoint:")+QString::number(FUN_BACKANCHORPOINT)+";"+//回定位点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","EmbSetStartPoint:")+QString::number(FUN_THRIDSETSTARTPOINT)+";"+//平绣定起始点 + QCoreApplication::translate("GLOBAL","EmbSpindleTest:")+QString::number(FUN_SEWEMBSPINDLETEST)+";"+//平绣主轴研车 + QCoreApplication::translate("GLOBAL","EmbSpindleJog:")+QString::number(FUN_SEWEMBSPINDLEJOG)+";"+//平绣主轴点动 + QCoreApplication::translate("GLOBAL","EmbChangeColor:")+QString::number(FUN_SEWEMBCHANGECOLOR)+";"+//平绣换色 + QCoreApplication::translate("GLOBAL","EmbCutLine:")+QString::number(FUN_SEWEMBCUTLINE)+";"+//平绣剪线 + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachineEmbHead:")+QString::number(FUN_SELECTEMBHEAD)+";"+//切换平绣机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Sew thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//缝纫剪线 + QCoreApplication::translate("GLOBAL","Sew rotate proofreading:")+QString::number(FUN_ROTATEPROOFREAD)+";"+//缝纫旋转校对 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","Needle shuttle reposition:")+QString::number(FUN_NEEDLESHUTTLERESET)+";"+//针梭复位 + QCoreApplication::translate("GLOBAL","Needle reset:")+QString::number(FUN_NEEDLERESET)+";"+//针复位 + QCoreApplication::translate("GLOBAL","Shuttle reset:")+QString::number(FUN_SHUTTLERESET)+";"+//梭复位 + QCoreApplication::translate("GLOBAL","Sew rotate up:")+QString::number(FUN_SEWROTATEUP)+";"+//缝纫旋转+ + QCoreApplication::translate("GLOBAL","Sew rotate down:")+QString::number(FUN_SEWROTATEDOWN)+";"+//缝纫旋转- + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_BACKOFFSETPOINT, FUN_BACKOFFSETPOINT, 0x0007, operate)); + + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮8;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 8, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button8"),//常用按钮8 + FUN_PUNCHSPINDLEJOG, FUN_ALLTOZERO, FUN_NULL, FUN_PUNCHSPINDLEJOG, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","BackAnchorPoint:")+QString::number(FUN_BACKANCHORPOINT)+";"+//回定位点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","EmbSetStartPoint:")+QString::number(FUN_THRIDSETSTARTPOINT)+";"+//平绣定起始点 + QCoreApplication::translate("GLOBAL","EmbSpindleTest:")+QString::number(FUN_SEWEMBSPINDLETEST)+";"+//平绣主轴研车 + QCoreApplication::translate("GLOBAL","EmbSpindleJog:")+QString::number(FUN_SEWEMBSPINDLEJOG)+";"+//平绣主轴点动 + QCoreApplication::translate("GLOBAL","EmbChangeColor:")+QString::number(FUN_SEWEMBCHANGECOLOR)+";"+//平绣换色 + QCoreApplication::translate("GLOBAL","EmbCutLine:")+QString::number(FUN_SEWEMBCUTLINE)+";"+//平绣剪线 + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachineEmbHead:")+QString::number(FUN_SELECTEMBHEAD)+";"+//切换平绣机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Sew thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//缝纫剪线 + QCoreApplication::translate("GLOBAL","Sew rotate proofreading:")+QString::number(FUN_ROTATEPROOFREAD)+";"+//缝纫旋转校对 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","Needle shuttle reposition:")+QString::number(FUN_NEEDLESHUTTLERESET)+";"+//针梭复位 + QCoreApplication::translate("GLOBAL","Needle reset:")+QString::number(FUN_NEEDLERESET)+";"+//针复位 + QCoreApplication::translate("GLOBAL","Shuttle reset:")+QString::number(FUN_SHUTTLERESET)+";"+//梭复位 + QCoreApplication::translate("GLOBAL","Sew rotate up:")+QString::number(FUN_SEWROTATEUP)+";"+//缝纫旋转+ + QCoreApplication::translate("GLOBAL","Sew rotate down:")+QString::number(FUN_SEWROTATEDOWN)+";"+//缝纫旋转- + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_PUNCHSPINDLEJOG, FUN_PUNCHSPINDLEJOG, 0x0008, operate)); + + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮9;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 9, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button9"),//常用按钮9 + FUN_PROCESSRESET, FUN_ALLTOZERO, FUN_NULL, FUN_PROCESSRESET, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","BackAnchorPoint:")+QString::number(FUN_BACKANCHORPOINT)+";"+//回定位点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","EmbSetStartPoint:")+QString::number(FUN_THRIDSETSTARTPOINT)+";"+//平绣定起始点 + QCoreApplication::translate("GLOBAL","EmbSpindleTest:")+QString::number(FUN_SEWEMBSPINDLETEST)+";"+//平绣主轴研车 + QCoreApplication::translate("GLOBAL","EmbSpindleJog:")+QString::number(FUN_SEWEMBSPINDLEJOG)+";"+//平绣主轴点动 + QCoreApplication::translate("GLOBAL","EmbChangeColor:")+QString::number(FUN_SEWEMBCHANGECOLOR)+";"+//平绣换色 + QCoreApplication::translate("GLOBAL","EmbCutLine:")+QString::number(FUN_SEWEMBCUTLINE)+";"+//平绣剪线 + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachineEmbHead:")+QString::number(FUN_SELECTEMBHEAD)+";"+//切换平绣机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Sew thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//缝纫剪线 + QCoreApplication::translate("GLOBAL","Sew rotate proofreading:")+QString::number(FUN_ROTATEPROOFREAD)+";"+//缝纫旋转校对 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","Needle shuttle reposition:")+QString::number(FUN_NEEDLESHUTTLERESET)+";"+//针梭复位 + QCoreApplication::translate("GLOBAL","Needle reset:")+QString::number(FUN_NEEDLERESET)+";"+//针复位 + QCoreApplication::translate("GLOBAL","Shuttle reset:")+QString::number(FUN_SHUTTLERESET)+";"+//梭复位 + QCoreApplication::translate("GLOBAL","Sew rotate up:")+QString::number(FUN_SEWROTATEUP)+";"+//缝纫旋转+ + QCoreApplication::translate("GLOBAL","Sew rotate down:")+QString::number(FUN_SEWROTATEDOWN)+";"+//缝纫旋转- + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_PROCESSRESET, FUN_PROCESSRESET, 0x0009, operate)); + + //常用功能设置参数--------------------------- + //常用功能设置参数-常用按钮10;单位:无 ,范围全部,默认 + parasList.append(makeAParaItem(0, + PARA_TYPE_COMMONFUN, + 0 , + 10, 0, 0, PARA_VALUE_TYPE_LIST, + QCoreApplication::translate("GLOBAL", "Frequently used button10"),//常用按钮10 + FUN_DRAWOUTLINE, FUN_ALLTOZERO, FUN_NULL, FUN_DRAWOUTLINE, 0, "", "", + (QCoreApplication::translate("GLOBAL", "AllToZero:")+QString::number(FUN_ALLTOZERO)+";"+//全部归零 + QCoreApplication::translate("GLOBAL","SpindleTest:")+QString::number(FUN_SPINDLETEST)+";"+//冲孔主轴研车 + QCoreApplication::translate("GLOBAL","SetOffsetPoint:")+QString::number(FUN_SETOFFSETPOINT)+";"+//定偏移点 + QCoreApplication::translate("GLOBAL","BackOffsetPoint:")+QString::number(FUN_BACKOFFSETPOINT)+";"+//回偏移点 + QCoreApplication::translate("GLOBAL","SetStartPoint:")+QString::number(FUN_SETSTARTPOINT)+";"+//定起始点 + QCoreApplication::translate("GLOBAL","BackStartPoint:")+QString::number(FUN_BACKSTARTPOINT)+";"+//回起始点 + QCoreApplication::translate("GLOBAL","BackWorkPoint:")+QString::number(FUN_BACKWORKPOINT)+";"+//回工作点 + QCoreApplication::translate("GLOBAL","BackAnchorPoint:")+QString::number(FUN_BACKANCHORPOINT)+";"+//回定位点 + QCoreApplication::translate("GLOBAL","CheckFrame:")+QString::number(FUN_CHECKFRAME)+";"+//边框检查 + QCoreApplication::translate("GLOBAL","ForwardOrBackward:")+QString::number(FUN_FORWARDORBACK)+";"+//前进回退 + QCoreApplication::translate("GLOBAL","PunchSpindleJog:")+QString::number(FUN_PUNCHSPINDLEJOG)+";"+//冲孔主轴点动 + QCoreApplication::translate("GLOBAL","ManualColorChange:")+QString::number(FUN_PUNCHMANUALCHANGECOLOR)+";"+//手动换色 + QCoreApplication::translate("GLOBAL","SinglePunch:")+QString::number(FUN_SINGLEPUNCH)+";"+//单次冲孔 + QCoreApplication::translate("GLOBAL","FrameZero:")+QString::number(FUN_FRAMEZERO)+";"+//框架归零 + QCoreApplication::translate("GLOBAL","MoveToRightUp:")+QString::number(FUN_MOVETORIGHTUP)+";"+//去右上角 + QCoreApplication::translate("GLOBAL","MoveToRightDown:")+QString::number(FUN_MOVETORIGHTDOWN)+";"+//去右下角 + QCoreApplication::translate("GLOBAL","MoveToLeftUp:")+QString::number(FUN_MOVETOLEFTUP)+";"+//去左上角 + QCoreApplication::translate("GLOBAL","MoveToLeftDown:")+QString::number(FUN_MOVETOLEFTDOWN)+";"+//去左下角 + QCoreApplication::translate("GLOBAL","SetWorkRange:")+QString::number(FUN_SETWORKRANGE)+";"+//定工作范围 + QCoreApplication::translate("GLOBAL","PatternSelect:")+QString::number(FUN_PATTERNSELECT)+";"+//花样选择 + QCoreApplication::translate("GLOBAL","PunchStopLower:")+QString::number(FUN_PUNCHSTOPLOWER)+";"+//冲头停下位 + QCoreApplication::translate("GLOBAL","SewSpindleTest:")+QString::number(FUN_SEWSPINDLETEST)+";"+//缝纫主轴研车 + QCoreApplication::translate("GLOBAL","Sewing head lifting:")+QString::number(FUN_SEWMOTORUPDOWN)+";"+//缝纫机头升降 + QCoreApplication::translate("GLOBAL","SewSpindleJog:")+QString::number(FUN_SEWSPINDLEJOG)+";"+//缝纫主轴点动 + QCoreApplication::translate("GLOBAL","PunchSetStartPoint:")+QString::number(FUN_SECSETSTARTPOINT)+";"+//冲孔定起始点(第二机头定起始点) + QCoreApplication::translate("GLOBAL","EmbSetStartPoint:")+QString::number(FUN_THRIDSETSTARTPOINT)+";"+//平绣定起始点 + QCoreApplication::translate("GLOBAL","EmbSpindleTest:")+QString::number(FUN_SEWEMBSPINDLETEST)+";"+//平绣主轴研车 + QCoreApplication::translate("GLOBAL","EmbSpindleJog:")+QString::number(FUN_SEWEMBSPINDLEJOG)+";"+//平绣主轴点动 + QCoreApplication::translate("GLOBAL","EmbChangeColor:")+QString::number(FUN_SEWEMBCHANGECOLOR)+";"+//平绣换色 + QCoreApplication::translate("GLOBAL","EmbCutLine:")+QString::number(FUN_SEWEMBCUTLINE)+";"+//平绣剪线 + QCoreApplication::translate("GLOBAL","ChangeMachineSewHead:")+QString::number(FUN_SELECTSEWHEAD)+";"+//切换缝纫机头 + QCoreApplication::translate("GLOBAL","ChangeMachineEmbHead:")+QString::number(FUN_SELECTEMBHEAD)+";"+//切换平绣机头 + QCoreApplication::translate("GLOBAL","ChangeMachinePunchHead:")+QString::number(FUN_SELECTPUCNHHEAD)+";"+//切换冲孔机头 + QCoreApplication::translate("GLOBAL","Sew thread trimming:")+QString::number(FUN_SEWHEADCUTLINEO)+";"+//缝纫剪线 + QCoreApplication::translate("GLOBAL","Sew rotate proofreading:")+QString::number(FUN_ROTATEPROOFREAD)+";"+//缝纫旋转校对 + QCoreApplication::translate("GLOBAL","Needle shuttle proofreading:")+QString::number(FUN_NEEDLECONTRAST)+";"+//针梭校对 + QCoreApplication::translate("GLOBAL","Needle shuttle reposition:")+QString::number(FUN_NEEDLESHUTTLERESET)+";"+//针梭复位 + QCoreApplication::translate("GLOBAL","Needle reset:")+QString::number(FUN_NEEDLERESET)+";"+//针复位 + QCoreApplication::translate("GLOBAL","Shuttle reset:")+QString::number(FUN_SHUTTLERESET)+";"+//梭复位 + QCoreApplication::translate("GLOBAL","Sew rotate up:")+QString::number(FUN_SEWROTATEUP)+";"+//缝纫旋转+ + QCoreApplication::translate("GLOBAL","Sew rotate down:")+QString::number(FUN_SEWROTATEDOWN)+";"+//缝纫旋转- + QCoreApplication::translate("GLOBAL","BackCenter:")+QString::number(FUN_RETURNTOCENTERPOINT)+";"+//回中心点 + QCoreApplication::translate("GLOBAL","Null:")+QString::number(FUN_NULL)+";"),//无功能 + FUN_DRAWOUTLINE, FUN_DRAWOUTLINE, 0x000A, operate)); + +} diff --git a/items/itemsmanage.h b/items/itemsmanage.h new file mode 100644 index 0000000..a6978be --- /dev/null +++ b/items/itemsmanage.h @@ -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 +#include + +//添加快捷功能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 & parasList);//软件参数 +void initTimeParasList(QList & parasList);//时间设置参数 +void initPunchCommonFunParasList(QList & parasList);//冲孔机常用功能参数 +void initPunchSewCommonFunParasList(QList & parasList);//冲缝机常用功能参数 +void initPunchEmbSewCommonFunParasList(QList & parasList); +void initNetworkParasList(QList & parasList);//网络管理参数 +void initRootHMIConfigurationList(QList & parasList);//界面配置参数 +void initRootIOTConfigurationList(QList ¶sList); //物联网配置参数 +#endif // ITEMSMANAGE_H diff --git a/items/outctrlitem.cpp b/items/outctrlitem.cpp new file mode 100644 index 0000000..f02181c --- /dev/null +++ b/items/outctrlitem.cpp @@ -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; + } +} diff --git a/items/outctrlitem.h b/items/outctrlitem.h new file mode 100644 index 0000000..388d39b --- /dev/null +++ b/items/outctrlitem.h @@ -0,0 +1,68 @@ +#ifndef OUTCTRLITEM_H +#define OUTCTRLITEM_H + +#include +#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 diff --git a/items/paraitem.cpp b/items/paraitem.cpp new file mode 100644 index 0000000..a58bbe1 --- /dev/null +++ b/items/paraitem.cpp @@ -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; + } +} diff --git a/items/paraitem.h b/items/paraitem.h new file mode 100644 index 0000000..9646fbc --- /dev/null +++ b/items/paraitem.h @@ -0,0 +1,101 @@ +#ifndef PARAITEM_H +#define PARAITEM_H + +#include +#include +#include +#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 diff --git a/items/parasetitem.cpp b/items/parasetitem.cpp new file mode 100644 index 0000000..9d798b4 --- /dev/null +++ b/items/parasetitem.cpp @@ -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; + } +} + diff --git a/items/parasetitem.h b/items/parasetitem.h new file mode 100644 index 0000000..92122cd --- /dev/null +++ b/items/parasetitem.h @@ -0,0 +1,36 @@ +#ifndef PARASETITEM_H +#define PARASETITEM_H + +#include + +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 diff --git a/items/patternsetitem.cpp b/items/patternsetitem.cpp new file mode 100644 index 0000000..d24a25c --- /dev/null +++ b/items/patternsetitem.cpp @@ -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; + } +} diff --git a/items/patternsetitem.h b/items/patternsetitem.h new file mode 100644 index 0000000..c9579ac --- /dev/null +++ b/items/patternsetitem.h @@ -0,0 +1,36 @@ +#ifndef PATTERNSETITEM_H +#define PATTERNSETITEM_H + +#include + +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 diff --git a/items/sensoritem.cpp b/items/sensoritem.cpp new file mode 100644 index 0000000..90d657e --- /dev/null +++ b/items/sensoritem.cpp @@ -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; // 传感器类型 +} diff --git a/items/sensoritem.h b/items/sensoritem.h new file mode 100644 index 0000000..1404f3b --- /dev/null +++ b/items/sensoritem.h @@ -0,0 +1,34 @@ +#ifndef __SENSORITEM_H__ +#define __SENSORITEM_H__ + +#include + +#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__ diff --git a/items/shortcutitem.cpp b/items/shortcutitem.cpp new file mode 100644 index 0000000..3e5cf44 --- /dev/null +++ b/items/shortcutitem.cpp @@ -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; + } +} diff --git a/items/shortcutitem.h b/items/shortcutitem.h new file mode 100644 index 0000000..069cf37 --- /dev/null +++ b/items/shortcutitem.h @@ -0,0 +1,35 @@ +#ifndef SHORTCUTITEM_H +#define SHORTCUTITEM_H + +#include + +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 diff --git a/machine/comm/comm.cpp b/machine/comm/comm.cpp new file mode 100644 index 0000000..97917cc --- /dev/null +++ b/machine/comm/comm.cpp @@ -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"< 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; +} + +//-------------------------------------------------------------------------------------------------- + + diff --git a/machine/comm/comm.h b/machine/comm/comm.h new file mode 100644 index 0000000..1925382 --- /dev/null +++ b/machine/comm/comm.h @@ -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 +#include +#include +//------------------------------------------------------------------------ + +// 通讯数据包定义 + +//------------------------------------ +/* +一、数据包格式 + + 1. 固定长度数据包格式 + + |-------------------------------------------------------------------|-----------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 B8 B9 B10 B11 B12 B13 | B14 B15 | + |-------------------------------------------------------------------|-----------| + | 固定序列如下 | | 参数,不同命令定义不同 | B4--B13的 | + | | 数据包ID | 具体定义参考命令详细说明 | | + | 'F','L','D','P' | | | 16位CRC | + |-------------------------------------------------------------------|-----------| + + 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' | | 长度 | 校验字 | 参考命令详细说明 | 16位CRC | | + |---------------------------------------------------------------------------|-----------|---------------| + + 附加数据长度取值范围为 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 diff --git a/machine/comm/config.h b/machine/comm/config.h new file mode 100644 index 0000000..548eaa8 --- /dev/null +++ b/machine/comm/config.h @@ -0,0 +1,13 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#include "typedef.h" +#include + +#define BF_SW_ND 448 // 最大换色数 +#define MAX_EXDP_LEN 1024 // 最大附加数据长度 + + +#define IMAGE_TYPE (QImage::Format_ARGB32) + +#endif diff --git a/machine/comm/crc16.cpp b/machine/comm/crc16.cpp new file mode 100644 index 0000000..8fbf1f7 --- /dev/null +++ b/machine/comm/crc16.cpp @@ -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; + +} + + diff --git a/machine/comm/crc16.h b/machine/comm/crc16.h new file mode 100644 index 0000000..25dc808 --- /dev/null +++ b/machine/comm/crc16.h @@ -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 + diff --git a/machine/comm/crc32.cpp b/machine/comm/crc32.cpp new file mode 100644 index 0000000..bb93930 --- /dev/null +++ b/machine/comm/crc32.cpp @@ -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; +} diff --git a/machine/comm/crc32.h b/machine/comm/crc32.h new file mode 100644 index 0000000..c89f3d8 --- /dev/null +++ b/machine/comm/crc32.h @@ -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 diff --git a/machine/comm/datadef.h b/machine/comm/datadef.h new file mode 100644 index 0000000..fe71a56 --- /dev/null +++ b/machine/comm/datadef.h @@ -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.2mm),单位0.1mm + 0 1 空走数据,数据范围从-128 -- +126, 只有偶数可用(精度0.2mm),单位0.1mm + 1 0 大步空走数据,数据范围从-128 -- +126, 只有偶数可用(精度2mm),单位1mm + 1 1 控制数据,数据位定义为控制码和参数 cdx 为控制码, cdx 为参数 + +*/ +}__attribute__ ((packed)) ToBItem, Ds2Item; + +#define PUNCHRADIUS 100 //冲孔半径(用于绘制图形) + +// ctrl 定义 +// 控制字节, 作为功能码,定义如下 + +#define DATA_NULL 0x00 // 文件结束 +#define DATA_SEWING 0x01 // 缝纫数据, 该数据需要缝纫机针扎一次(主轴可以转动多圈(如果有跳针功能的话)), 同时 X, Y,R 偏移运动dx,dy,dr, 框步进式运动或连续运动 +#define DATA_OFFSET 0x02 // 偏移数据, 该数据只移动 X, Y,R 偏移 dx,dy,dr,连续运动 +#define DATA_CUTTING 0x03 // 切刀数据, 该数据需要切刀先运转,同时 X, Y,R 偏移 dx,dy,dr,根据切刀类型选择动框方式 +#define DATA_LASER 0x04 // 激光数据, 该数据需要激光出光, 同时X, Y,R偏移 dx,dy,dr,框连续运动,激光强度和运动线速度有关系 +#define DATA_DRAWING 0x05 // 记号数据, 该数据需要记号笔先放下来, 同时X, Y,R偏移dx,dy,dr,框连续运动 +#define DATA_SEWING_R 0x06 // 右机头缝纫,该数据需要缝纫机针扎一次(主轴可以转动多圈(如果有跳针功能的话)), 同时 X, Y,R 偏移运动dx,dy,dr, 框步进式运动或连续运动 + +#define DATA_SECF_SEW 0x11 // 第二框缝纫 +#define DATA_SECF_OFST 0x12 // 第二框偏移 + +#define DATA_SECF_SEW_R 0x16 // 第二框右机头缝纫,该数据需要缝纫机针扎一次(主轴可以转动多圈(如果有跳针功能的话)), 同时 X, Y,R 偏移运动dx,dy,dr, 框步进式运动或连续运动 + +// 兼容DSR控制码 +#define DATA_SYNCSEW 0x07 // 同步缝纫数据, 该数据需要缝纫机针扎一次, 同时 X, Y,R 偏移运动 dx,dy,dr,X2, Y2 也运动 dx,dy,框步进式运动或连续运动 +#define DATA_PAUSE_OLD 0x08 // 暂停 +#define DATA_ANGLE_OLD 0x09 // 拐点 +#define DATA_CUT_OLD 0x0A // 剪线 +#define DATA_END_OLD 0x10 // 结束码 + +#define DATA_JUMP 0x0B // 跳针数据,该数据要求缝纫机主轴不动, 但 X, Y,R 偏移运动 dx,dy,dr, 框步进式运动或连续运动 +#define DATA_PUNCH 0x0C // 冲孔数据, 该数据需要冲孔主轴运转一圈,同时 X, Y,R 偏移 dx,dy,dr, +#define DATA_EMB 0x0D // 绣花数据,该数据需要平绣针扎一次, 同时 X, Y,偏移运动dx,dy, 框步进式运动 +#define DATA_CHGND_OLD 0x0E // 换色功能码 lxs 20220628添加 +#define DATA_SYNCOFST 0x0F // 同步偏移数据 + +#define DATA_MILLING 0x21 // 铣刀数据 +#define DATA_DRILL 0x22 // 钻孔数据 +#define DATA_RKNIFE 0x23 // 圆刀数据, 该数据需要震刀先运转,同时 X, Y,R 偏移 dx,dy,dr, +#define DATA_SKNIFE 0x24 // 震刀数据, 该数据需要震刀先运转,同时 X, Y,R 偏移 dx,dy,dr, + +#define DATA_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 + + diff --git a/machine/comm/protocol.h b/machine/comm/protocol.h new file mode 100644 index 0000000..c1b5487 --- /dev/null +++ b/machine/comm/protocol.h @@ -0,0 +1,1929 @@ +#ifndef __PROTOCOL_H__ +#define __PROTOCOL_H__ + +#include "comm.h" +#include "datadef.h" + +#pragma pack(1)//设定为1字节对齐 + +// 和下位机的通讯协议 + +/* +// 通讯数据包定义 + +一、数据包格式 + + 1. 固定长度数据包格式 + + |-------------------------------------------------------------------|-----------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 B8 B9 B10 B11 B12 B13 | B14 B15 | + |-------------------------------------------------------------------|-----------| + | 固定序列如下 | | 参数,不同命令定义不同 | B4--B13的 | + | | 数据包ID | 具体定义参考命令详细说明 | | + | 'F','L','D','P' | | | 16位CRC | + |-------------------------------------------------------------------|-----------| + + 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' | | 长度 | 校验字 | 参考命令详细说明 | 16位CRC | | + |---------------------------------------------------------------------------|-----------|---------------| + + 附加数据长度取值范围为 0--1024 + + +//------------------------------------ +二、通讯命令一览表 + + 1. 上位机发送命令 + + 名称 符号 代码 类型 回复 说明 + 读取机器信息 UCMD_GET_MC_INFO 0x0001 FLDP 有 机器信息包括机器种类,配置,控制系统版本等信息 + 读取机器状态 UCMD_GET_MC_STATUS 0x0002 FLDP 有 读取机器的运行状态,包括机器工作状态,常用输入状态,电机位置,工作进度,文件信息等。 + 读取机器参数 UCMD_GET_MC_PARAS 0x0003 FLDP 有 读取内存中机器参数列表 + 读取内存数据 UCMD_GET_MEM_DATA 0x0004 FLDP 有 读取机器存储器数据,包括片内SRAM,片外SRAM,NAND FLASH等的内容 + 读取传感信号 UCMD_GET_SENSORS 0x0005 FLDP 有 读取IO信号状态及电机位置,编码器位置等信息 + 读取文件信息 UCMD_GET_FILE_INFO 0x0006 FLDP 有 读取数据文件的信息 + 读取传输结果 UCMD_GET_TRANS_RESULT 0x0007 FLDP 有 读取文件传输的结果位图,包括数据文件和升级文件 + 读取传感器位图 UCMD_GET_SENSOR_BMP 0x0008 FLDP 有 读取传感器配置位图 + + 设置机器配置 UCMD_SET_MC_CONFIG 0x0101 VLDP 无 设置机器的配置,包括信号使用的端口等信息 + 设置机器状态 UCMD_SET_MC_STATUS 0x0102 FLDP 无 设置机器的工作状态,包括是否允许工作,清除报警等。 + 设置机器参数 UCMD_SET_MC_PARAS 0x0103 VLDP 无 传输机器参数列表到下位机 + 设置内存数据 UCMD_SET_MEM_DATA 0x0104 FLDP 无 改变某个内存单元的数据内容 + 设置文件参数 UCMD_SET_FILE_PARAS 0x0105 FLDP 无 设置文件参数 + 设置执行进度 UCMD_SET_EXEC_PROGRESS 0x0106 FLDP 无 设置文件执行进度 + 设置分期密码 UCMD_SET_INSTALLMENT 0x0107 FLDP 无 设置分期密码 + 设置经过的时间 UCMD_SET_ELAPSED_TIME 0x0108 FLDP 无 设置经过的时间 + 设置默认参数 UCMD_SET_DEF_PARA 0x0109 FLDP 无 设置默认参数 + + 手动控制命令 UCMD_ACT_BYHAND 0x0201 FLDP 无 手动控制电机转动,OUTPUT信号开关等动作 + 机器工作命令 UCMD_MC_WORK 0x0202 FLDP 无 控制机器的工作命令,包括启动,停止,结束,或运动到某个位置等 + 移动XY命令 UCMD_MOVE_TO 0x0203 FLDP 无 移动XY到坐标 + + 启动文件传输 UCMD_START_TRANS 0x0301 VLDP 无 启动文件传输 + 文件传输命令 UCMD_TRANS_FILE_DATA 0x0302 VLDP 无 传输文件数据包 + 设置文件列表 UCMD_SET_FILE_LIST 0x0304 VLDP 无 设置文件列表 + 获取文件列表 UCMD_GET_FILE_LIST 0x0305 FLDP 有 获取下位机文件列表 + + 下位机升级 UCMD_MC_UPDATE 0x0401 VLDP 无 包括升级主控,外围板控制器等 + + 2. 下位机发送命令 + + 名称 符号 代码 类型 回复 说明 + 发送机器信息 DCMD_SEND_MC_INFO 0x8001 VLDP 无 发送机器信息包括机器种类,配置,控制系统版本等信息 + 发送机器状态 DCMD_SEND_MC_STATUS 0x8002 VLDP 无 发送取机器的运行状态,包括机器工作状态,常用输入状态,电机位置,工作进度,文件信息等。 + 发送机器参数 DCMD_SEND_MC_PARAS 0x8003 VLDP 无 发送内存中机器参数列表 + 发送内存数据 DCMD_SEND_MEM_DATA 0x8004 VLDP 无 发送机器存储器数据,包括片内SRAM,片外SRAM,NAND FLASH等的内容 + 发送传感信号 DCMD_SEND_SENSORS 0x8005 VLDP 无 发送IO信号状态及电机位置,编码器位置等信息 + 发送文件信息 DCMD_SEND_FILE_INFO 0x8006 VLDP 无 发送数据文件的信息 + 发送传输结果 DCMD_SEND_TRANS_RESULT 0x8007 VLDP 无 发送文件传输的结果位图 + 发送传感器位图 DCMD_SEND_SENSOR_BMP 0x8008 VLDP 无 发送传感器配置位图 + 发送张力传感器值 DCMD_SEND_TENSION 0x8009 VLDP 无 发送张力传感器值 +*/ + +// 上位机发送命令 +#define UCMD_GET_MC_INFO 0x0001 // 读取机器信息 +#define UCMD_GET_MC_STATUS 0x0002 // 读取机器状态 +#define UCMD_GET_MC_PARAS 0x0003 // 读取机器参数 +#define UCMD_GET_SENSORS 0x0005 // 读取传感信号 +#define UCMD_GET_TRANS_RESULT 0x0007 // 读取传输结果 +#define UCMD_GET_SENSOR_BMP 0x0008 // 读取传感器位图 +#define UCMD_GET_BOARD_VER 0x000A // 读取外围板程序版本 +#define UCMD_GET_LOT_DATA 0x000D // 读取物联网数据 +#define UCMD_SET_MC_CONFIG 0x0101 // 设置机器配置 +#define UCMD_SET_MC_STATUS 0x0102 // 设置机器状态 +#define UCMD_SET_MC_PARAS 0x0103 // 设置机器参数 +#define UCMD_SET_MEM_DATA 0x0104 // 设置内存数据 +#define UCMD_SET_FILE_PARAS 0x0105 // 设置文件参数 +#define UCMD_SET_EXEC_PROGRESS 0x0106 // 设置执行进度 +#define UCMD_SET_INSTALLMENT 0x0107 // 设置分期密码 +#define UCMD_SET_ELAPSED_TIME 0x0108 // 设置经过的时间 +#define UCMD_SET_DEF_PARA 0x0109 // 设置默认参数 +#define UCMD_SET_HEADDEF_PARA 0x010A // 设置机头板默认参数 +#define UCMD_SET_HEAD_PARA 0x010B // 设置机头板参数 +#define UCMD_SET_MVANGDEF_PARA 0x010D // 设置动框角度默认参数 +#define UCMD_GET_HEAD_PARA 0x000B // 读取机头板参数 +#define UCMD_ACT_BYHAND 0x0201 // 手动控制命令 +#define UCMD_MC_WORK 0x0202 // 机器工作命令 +#define UCMD_MOVE_TO 0x0203 // 移动XY到坐标 +#define UCMD_MOVE_OFST 0x0205 // XY移动偏移量 +#define UCMD_START_TRANS 0x0301 // 启动文件传输 +#define UCMD_TRANS_FILE_DATA 0x0302 // 文件传输命令 +//#define UCMD_TRANS_FILE_DATA 0x0303 // 文件失效命令 +#define UCMD_SET_FILE_LIST 0x0304 // 设置文件列表 +#define UCMD_GET_FILE_LIST 0x0305 // 获取下位机文件列表 +#define UCMD_MC_UPDATE 0x0401 // 下位机升级 +#define UCMD_BOARD_UPDATE 0x0402 // 外围板升级 +#define UCMD_TRA_BOARD 0x0501 // 遍历命令 + +// 下位机发送命令 +#define DCMD_REQUEST_DAT 0x8000 // 请求文件数据 +#define DCMD_SEND_MC_INFO 0x8001 // 发送机器信息 +#define DCMD_SEND_MC_STATUS 0x8002 // 发送机器状态 +#define DCMD_SEND_MC_PARAS 0x8003 // 发送机器参数 +#define DCMD_SEND_SENSORS 0x8005 // 发送传感信号 +#define DCMD_SEND_FILE_INFO 0x8006 // 发送文件信息 +#define DCMD_SEND_TRANS_RESULT 0x8007 // 发送传输结果 +#define DCMD_SEND_SENSOR_BMP 0x8008 // 发送传感器位图 +#define DCMD_SEND_BOARDVER 0x800A // 发送外围板程序版本 +#define DCMD_SEND_HEADPARA 0x800B // 发送机头板参数 +#define DCMD_SEND_LOTDATA 0x800D // 发送物联网数据 +#define DCMD_SEND_DEBUG_INFO 0x8010 // 调试信息发送 + + + + + +// 三、命令详解 +/* + 工作流程 + 1. 上位机发送 UCMD_GET_MC_INFO 命令, 命令格式如下: + + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|-----------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | + |-------------------|-------------------|-------------------|-------------------------------|-----------| + | 固定序列如下 | 数据包ID | 命令切换标志字 | 保留 | B4--B13的 | + | |-------------------|-------------------|-------------------------------| | + | 'F','L','D','P' | UCMD_GET_MC_INFO | 可能是随机数 | | 16位CRC | + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + + 2. 下位机收到后,回复 DCMD_SEND_MC_INFO 命令, 格式定义如下 + + |-----------------------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |-------------------------------------------------------------------------------------------|-----------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | B16--Bn | + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 固定序列如下 | | 附加 | 附加 | 和上位机命令 | | B4--B13的 | 机器信息结构 | + | | DCMD_SEND_MC_INFO | 数据 | 数据 | 相同的 | 保留 | | | + | 'V','L','D','P' | | 长度 | 校验字 | 命令切换标志字 | | 16位CRC | | + |-------------------------------------------------------------------------------------------|-----------|---------------| + |-----------------------------------------------------------------------------------------------------------------------| + + 3. 上位机收到下位机的回复命令后,通过比对 命令标志切换字 , 可以确认是否是刚刚发送命令的回复(对于连续发送命令有用),根据情况确定是否重新发送命令。 + + 注意: + 对于没有时序要求的数据包,可以不在意 命令标志切换字。 +*/ + +// 机器信息结构定义 +typedef struct +{ +// 0 + char mBoardVerStr[16]; // 主板(n1)板卡版本 + char exBoardVerStr[16]; // 扩展板(n1-1)板卡版本 + char softwareVerStr[32]; // 软件版本 + char buildInfoStr[32]; // 编译日期信息 + char boardId[32]; // 板卡ID + char installment[32]; // 最后一次的分期密码字符串 +// 160 + char rev1[512-160]; + +// 512 + u32 localIP; // 板卡IP地址 + u32 submask; // 子网掩码 + u32 gateIP; // 网关IP + +// 524 + u8 rev2[1024-524]; + +} __attribute__ ((packed)) MCInfo; + +typedef struct +{ + char debugInfoStr[1024]; // 调试信息 + +} __attribute__ ((packed)) DebugInfo; // 调试信息 + +typedef struct +{ + // 0 + char mBoardVerStr[16]; // 主板(n1)板卡版本 + + // 4 + char exBoardVerStr[16]; // 扩展板(n1-1)板卡版本 + + // 8 + char softwareVerStr[32]; // 软件版本 + + // 16 + char boardId[32]; // 板卡ID + + // 24 + char installment[32]; // 最后一次的分期密码字符串 + + // 32 + u32 rev10[32]; + + // 64 + u32 errorCode; // 报警信息 + s32 workableTimer; // 可工作时间计数器,剩余时间计数(分钟为单位) + u32 bootTimer; // 开机时间(单位分钟) + u32 workTimer; // 工作时间(单位分钟) + u32 workRpm; // 工作转速 + u32 curOutCounter; // 当前产量计数,由界面记录 + u32 totalOutCounter; // 累计产量计数 + u32 expectedOutput; // 产量预设 + + u32 spindleZeroSta; // 主轴零位状态 + u32 spindleAngle; // 主轴角度 + s32 motosPos[6]; // 电机坐标 + + // 80 + u32 sensorSignal[8]; // 传感器信号 + + // 88 + u32 machinecfg; //机器配置 + //勾线模式 bit0 0:单独勾线;1:集中勾线 + //锁头模式 bit1 0:电机锁头;1电磁铁锁头 + //89 + u32 sewHeadNumbers;//缝纫机头个数 + //90 + u32 embHeadNumbers; //绣花机头个数 + //91 + u32 embneedleNumbers;//绣花机针个数 + //92 + u32 punchHeadNumbers;//冲孔机头个数 + //93 + u32 punchneedleNumbers;//冲孔机针个数 + //94 + u32 sensonNumbers;//传感器信号总数 + + + u32 rev20[128-95]; + + // 128 + u32 rev30[192-128]; + + //192 + u32 rev40[256-192]; + +} __attribute__ ((packed)) McLotData; // 主控物联网数据 + + +#define BOARD_VER_LEN 32 // 外围板程序版本长度 +#define MAX_SUPPORT_N5 48 +#define MAX_SUPPORT_N6 2 +#define MAX_SUPPORT_D86 1 + +#define PARA_NUM 256 + +//动框角度参数 +#define MAX_HOR 12 // 横,下标2最大值,针步 +#define MAX_VER 21 // 竖,下标1最大值,转速 + +typedef struct +{ + char softwareVerStr[BOARD_VER_LEN]; // 机头板程序版本 + u32 paraBuf[PARA_NUM]; //机头板参数 + u8 nodeType; // 节点类型 + +}__attribute__ ((packed)) HeadInfo; + +typedef struct +{ + HeadInfo headInfo[MAX_SUPPORT_N5]; //最大支持32个机头 + +}__attribute__ ((packed)) ExBoardInfo; + + +/* + 流程 + 1. 上位机发送命令 UCMD_SET_MC_CONFIG, 命令结构定义如下: + + |---------------------------------------------------------------------------------------------------------------| + |-----------------------------------------------------------------------------------|-----------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |-----------------------------------------------------------------------------------|-----------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | B16--Bn | + |-----------------------------------------------------------------------------------|-----------|---------------| + | 固定序列如下 | | 附加 | 附加数据 | | B4--B13的 | 机器信息结构 | + | | UCMD_SET_MC_CONFIG | 数据 | 校验字或 | 保留 | | | + | 'V','L','D','P' | | 长度 | 字段ID | | 16位CRC | | + |-----------------------------------------------------------------------------------|-----------|---------------| + |---------------------------------------------------------------------------------------------------------------| + + 附加数据结构定义和MCInfo相同。不过前面512字节是只读的信息,不能改变。 + + 2. 下位机收到命令后,设置相关配置。 + +*/ + +// 读取机器状态 +/* + 工作流程 + 1. 上位机发送 UCMD_GET_MC_STATUS 命令, 命令格式如下: + + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|-----------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | + |-------------------|---------------------|-----------------|-------------------------------|-----------| + | 固定序列如下 | 数据包ID | 命令切换标志字 | 保留 | B4--B13的 | + | |---------------------|-----------------|-------------------------------| | + | 'F','L','D','P' | UCMD_GET_MC_STATUS | 可能是随机数 | | 16位CRC | + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + + 2. 下位机收到后,回复 DCMD_SEND_MC_STATUS 命令, 格式定义如下 + + |-----------------------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |-------------------------------------------------------------------------------------------|-----------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | B16--Bn | + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 固定序列如下 | | 附加 | 附加 | 和上位机命令 | | B4--B13的 | 机器状态结构 | + | | DCMD_SEND_MC_STATUS | 数据 | 数据 | 相同的 | 保留 | | | + | 'V','L','D','P' | | 长度 | 校验字 | 命令切换标志字 | | 16位CRC | | + |-------------------------------------------------------------------------------------------|-----------|---------------| + |-----------------------------------------------------------------------------------------------------------------------| + + 3. 上位机收到下位机的回复命令后,通过比对 命令标志切换字 , 可以确认是否是刚刚发送命令的回复(对于连续发送命令有用),根据情况确定是否重新发送命令。 + + 注意: + 1. 对于没有时序要求的数据包,可以不在意 命令标志切换字。 + 2. 下位机会在状态发生变化的时候主动发送 DCMD_SEND_MC_STATUS 命令 + +*/ + +// 机器状态数据结构定义 + +typedef struct +{ + // 0 + u32 workStatus; // 工作状态位图 + // .0 允许时限。=0,使用时限已到,不允许下位机工作;=1,允许下位机工作; + // .1 允许状态。=0,界面钳制,不允许下位机工作;=1,允许下位机工作; + // .2 机器状态。=0,手动工作状态; =1,自动工作状态 + // .3 钥匙状态。=0,关闭状态; =1,打开状态 + // .4 文件接收标志。= 0,初始状态。= 1,收到了文件 + // .5 参数接收标志。= 0,初始状态。= 1,收到了参数 + // .6 正在忙标志。= 0,空闲(可以接收文件和参数)。= 1,工作中(不会接收文件和参数) + // .7 上料状态。=0,手动上料状态; =1,自动上料状态 + // .8 参数更新标志。 =1,下位机更新了参数 + // .9 模拟工作标志。=1, 处于模拟工作状态 + // .10 允许扫描条码状态。=1, 允许 + // .11 允许拍照状态。=1, 允许 + // .12 正在工作标志 + // .13 传感信号扫描中标志 + // .14 相机校准模式中标志 + // .15 调试输出中标志. = 0,初始状态。= 1,上位机正在测试输出信号,不响应程序内输出控制 + // .16 等待标志. = 0,初始状态。= 1,等待外设就绪 + // .17 换梭标志,0,初始状态,1,换梭中 + // .18 软件遍历功能标志. =1,不允许遍历 + // .19 取模板框状态 + // .20 放模板框状态 + // .21 匹绣, 0:退出匹绣,主轴归零 1:进入匹绣,扎针,允许移框 + // .22 断线检测, 0:退出断线检测状态, 1:进入断线检测状态 + // .23 喷墨主板文件有效标志, 0:无效, 1:有效 + + // 1 + u32 errorCode; // 错误代码 + s32 fileIdx; // 文件序号 + u32 dataIdx; // 数据索引 + u32 runSpeed; // 运动速度 + u32 runAction; // 执行动作代码 * + u32 runSteps; // 当前执行步骤 * + u32 outCounter; // 产量计数 + + // 8 + s32 xPos; // x电机当前坐标 + s32 yPos; // y电机当前坐标 + u32 tempdat1[3]; // 自定义状态1 + s32 embSpindleAngle; // 平绣主轴角度 + u32 traverseState; // 机头板遍历状态 + u32 workTimer; // 工作时长 + u32 showSta; // bit0是平绣ZP主轴是否在位,0是在位,1是不在位 + u32 UThreadBkSta; // 面线断线状态,每一位对应一个机头 + u32 DThreadBkSta; // 底线断线状态,每一位对应一个机头 + u32 tempdat2; // 自定义状态2 + + // 20 + s32 btrdPics; // 底线片数计数 + s32 btrdLength; // 底线长度计数 // 激光器剩余寿命 + + // 22 + u32 colorIdx; // 色序编码 + s32 needleIdx; // 针位号 + + // 24 + u32 msAnlge; // 主轴角度 + u32 potVal; // 电位器值 + + // 26 + u32 laserIntensity; // 激光强度(距离传感器值(脚垫包边机)) + + // 27 + s32 workableTimer; // 可工作时间计数器(分钟) + + // 28 + u32 embNeedleNum; // 刺绣针数 + + // 29 + u32 workTimeRecord; // 单片工作时间 + + u32 tempdat3[32-30]; + +} __attribute__ ((packed)) MCStatus; + + +#define WORK_STA_ENTIME 0x00000001 // 允许时限 +#define WORK_STA_ENSTATE 0x00000002 // 允许状态 +#define WORK_STA_WKAUTO 0x00000004 // 工作状态,手动自动 +#define WORK_STA_KEYEN 0x00000008 // 钥匙开关状态 +#define WORK_STA_FILEOK 0x00000010 // 文件接收标志。= 0,初始状态。= 1,收到了文件 +#define WORK_STA_PARAOK 0x00000020 // 参数接收标志。= 0,初始状态。= 1,收到了参数 +#define WORK_STA_BUSY 0x00000040 // 正在忙标志。= 0,空闲(可以接收文件和参数)。= 1,忙中(不会接收文件和参数) +#define WORK_STA_FEED 0x00000080 // 上料状态。=0,手动上料状态; =1,自动上料状态 +#define WORK_STA_NEW_PARA 0x00000100 // 参数更新标志。 =1,下位机更新了参数。上位机需要读取下位机的参数文件并更新 +#define WORK_STA_SIMULATE 0x00000200 // 模拟工作标志。 =1,机器处于模拟工作 +#define WORK_STA_EN_SCAN 0x00000400 // 扫码允许。 =1,允许扫码状态 +#define WORK_STA_EN_PHOTO 0x00000800 // 拍照允许。 =1,允许拍照状态 +#define WORK_STA_WORKING 0x00001000 // 工作标志。= 1,工作中 + + +//错误代码-通用 +#define ERR_NONE 0x0000 // 没有错误 +#define ERR_NO_AIR 0x0002 // 气压不足 +#define ERR_NOT_SAFE 0x0003 // 安全区域介入 +#define ERR_EXPIRATION 0x0004 // 使用时限已到 +#define ERR_DRIVER 0x0005 // 驱动器报警 +#define ERR_FILL_DATA 0x0006 // 填充数据错误 +#define ERR_NOT_ALLOWED 0x0007 // 不允许工作状态 +#define ERR_CTRL_ERR 0x0008 // 控制错误 +#define ERR_FPGA_ERR 0x0009 // 运动控制芯片版本错误 +#define ERR_BUTTON_NOUP 0x000A // 等待按钮抬起超时 +#define ERR_FPGA_RESET 0x000B // FPGA复位错误 +#define ERR_NO_READY 0x000C // 外设未就绪 +#define ERR_NO_SEND_ERR 0x000D // 传输数据错误 +#define ERR_EDTION_ERR 0x000E // 程序版本错误 +#define ERR_WORK_DONE 0x000F // 完成产量 +#define ERR_LMT_POSITIVE 0x0010 // 正向限位 +#define ERR_LMT_NEGATIVE 0x0011 // 反向限位 +#define ERR_RUN_ALM 0x0012 // 运动报警 +#define ERR_RUN_LIMIT 0x0013 // 运动限位 +#define ERR_RUN_EMS 0x0014 // 运动急停 +#define ERR_MV_PARA 0x0015 // 运动参数错误 +#define ERR_MC_PARA 0x0016 // 机器参数错误 +#define ERR_IN_PARA 0x0017 // 输入参数错误 +#define ERR_NOT_WORKSTA 0x001A // 不能工作状态 +#define ERR_NOT_MOVESTA 0x001B // 禁止移框状态 +#define ERR_MTZ_RIGHT 0x001F // 归零成功 +#define ERR_MTZ_ERROR 0x0020 // 归零错误 +#define ERR_COOR_SYSTM 0x0021 // XY坐标系统错误 +#define ERR_OUT_RANGE 0x0022 // 目标位置越界 +#define ERR_X_LIT_POSI 0x0023 // X正向限位 +#define ERR_X_LIT_NEGA 0x0024 // X反向限位 +#define ERR_Y_LIT_POSI 0x0025 // Y正向限位 +#define ERR_Y_LIT_NEGA 0x0026 // Y反向限位 +#define ERR_FEED_MANUAL 0x0027 // 进料处于手动状态 +#define ERR_MC_MANUAL 0x0028 // 机器处于手动状态 +#define ERR_KEY_SW_OFF 0x0029 // 机器钥匙开关关闭 +#define ERR_SPT_NCE 0x002B // 小台板未关闭 +#define ERR_LIGHTCURTAINS1 0x002C // 光幕1介入 +#define ERR_LIGHTCURTAINS2 0x002D // 光幕2介入 +#define ERR_AIR_POWER 0x002E // 气压不足 +#define ERR_NO_MATERIEL 0x0031 // 缺料报警 +#define ERR_CUTFRAME 0x0032 // 边框切割错误 +#define ERR_MC_AUTO 0x0033 // 机器处于自动状态 +#define ERR_NOT_AT_OFFSET 0x0035 // 不在偏移点 +#define ERR_FEED_AUTO 0x0037 // 进料处于自动状态 +#define ERR_NO_DATA 0x0040 // 无数据 +#define ERR_DATA_ERROR 0x0041 // 数据错误 +#define ERR_GRAPH_OUT_RANGE 0x0042 // 图形超出范围 +#define ERR_MS_NOT_ZERO 0x0050 // 主轴不在零位 +#define ERR_HK_NOT_ZERO 0x0051 // 旋梭不在零位 +#define ERR_MS_NOT_SYNC 0x0052 // 针梭不同步 +#define ERR_RO_NOT_SYNC 0x0053 // 旋转不同步 +#define ERR_CUTTER_NOT_POS 0x0054 // 剪刀不在回位 +#define ERR_UPER_TBREAK 0x0058 // 面线断线 +#define ERR_BOBBIN_TBREAK 0x0059 // 底线断线 +#define ERR_NEEDLE_NOT_HIGH 0x005A // 机针不在高位 +#define ERR_SEND_N1CMD_TIMOUT 0x005B // 发送主轴命令超时 +#define ERR_SEND_N1CMD_FAIL 0x005C // 发送主轴命令失败 +#define ERR_TRANS_TIMEOUT 0x005D // 执行命令超时 +#define ERR_LIFT_TIMEOUT 0x005F // 机头升降超时 +#define ERR_HEAD_NOT_SAFE 0x0060 // 机头不在安全区域 +#define ERR_HD1_ND_NOT_ZERO 0x0061 // 机头1针不在零位 +#define ERR_HD1_CUTTER_NOT_POS 0x0071 // 机头1剪刀不在回位 +#define ERR_PUNCH_NOT_ZERO 0x0080 // 冲孔主轴不在零位 +#define ERR_R_LIT_POSI 0x0081 // 旋转正向限位 +#define ERR_R_LIT_NEGA 0x0082 // 旋转反向限位 +#define ERR_PUNCH2_NOT_ZERO 0x0083 // 冲孔2主轴不在零位 +#define ERR_CUTTER_NOT_ZERO 0x0084 // 裁刀主轴不在零位 +#define ERR_XY_NOT_WP 0x0085 // XY不在工作位置 +#define ERR_HEAD_NOT_POS 0x0086 // 机头不到位 +#define ERR_TO_ZERO_TIMOUT 0x008E // 等待运动结束超时 +#define ERR_MOVE_POS_ERR 0x008F // 移动位置错误 +#define ERR_FOOT_POS 0x0093 // 压脚位置错误 +#define ERR_FOOT_OUT_RANGE 0x0094 // 压脚电机位置越界 +#define ERR_LIFT_OUT_RANGE 0x0095 // 机头升降位置越界 +#define ERR_ROT_OUT_RANGE 0x0096 // 旋转位置越界 +#define ERR_ROT_ECD_ERROR 0x0097 // 旋转编码器错误 +#define ERR_LIFT_ULIMIT 0x0098 // 机头升降上限位 +#define ERR_LIFT_DLIMIT 0x0099 // 机头升降下限位 +#define ERR_LIFT_SYNC_ERR 0x009A // 机头升降同步错误 +#define ERR_IN_NO_MAT 0x009B // 进料无物料 +#define ERR_IN_MAT_ERR 0x009C // 进料物料检测异常 +#define ERR_OUT_MAT_ERR 0x009D // 出料物料检测异常 +#define ERR_NOTIN_SAFE_AREA 0x009E // 机头不在安全区域 +#define ERR_EMB_NOT_ZERO 0x009F // 绣花主轴不在零位 +#define ERR_EMB_SWND_TIMOUT 0x00A0 // 平绣换色超时 +#define ERR_PUNCH_SWND_TIMOUT 0x00A1 // 冲孔换色超时 +#define ERR_HD1W_LIT_POSI 0x00A2 // 机头1摆针正向限位 +#define ERR_HD1W_LIT_NEGA 0x00A3 // 机头1摆针反向限位 +#define ERR_HD2W_LIT_POSI 0x00A4 // 机头2摆针正向限位 +#define ERR_HD2W_LIT_NEGA 0x00A5 // 机头2摆针反向限位 +#define ERR_EMB_ND_ERR 0x00A6 // 平绣针位错误 +#define ERR_PUNCH_ND_ERR 0x00A7 // 冲孔针位错误 +#define ERR_UPER_TBREAK_A 0x00A8 // 机头A面线断线 +#define ERR_UPER_TBREAK_B 0x00A9 // 机头B面线断线 +#define ERR_HEAD_NOT_AT_GAP_A 0x00AA // 机头A面线断线 +#define ERR_HEAD_NOT_AT_GAP_B 0x00AB // 机头B面线断线 +#define ERR_NODE_ERR 0x00AC // 节点错误 +#define ERR_BUS_ERR 0x00AD // 总线错误 +#define ERR_ND_NUM_ERR 0x00AE // 针位数量错误 +#define ERR_CAN_TIMEOUT 0x00AF // CAN通讯超时 +#define ERR_EMB_HOOK_NOT_ZERO 0x00B0 // 平绣勾刀未回位 +#define ERR_EMB_CUT_NOT_ZERO 0x00B1 // 平绣剪刀未回位 +#define ERR_SCBE_ALM 0x00D1 // 散珠报警 +#define ERR_SCBE_NO_MATERIAL 0x00D2 // 散珠缺料 +#define ERR_HEAD_NUM 0x00D3 // 机头个数错误 +#define ERR_READ_HEAD_PARA 0x00D4 // 读取机头板参数错误 +#define ERR_CHANGE_BOBBIN 0x00F0 // 更换梭芯 +#define ERR_CHANGE_BOBBIN_A 0x00F1 // 更换梭芯A +#define ERR_CHANGE_BOBBIN_B 0x00F2 // 更换梭芯B +#define ERR_CHANGE_BOBBIN_STA 0x00F3 // 机器处于更换梭芯状态 +#define ERR_CHANGE_PNHPIN1 0x00F4 // 更换冲头1 lxs220607 +#define ERR_CHANGE_PNHPIN2 0x00F5 // 更换冲头2 +#define ERR_CHANGE_PNHPIN3 0x00F6 // 更换冲头3 +#define ERR_CHANGE_PNHPIN4 0x00F7 // 更换冲头4 +#define ERR_CHANGE_PNHPIN5 0x00F8 // 更换冲头5 +#define ERR_CHANGE_PNHPIN6 0x00F9 // 更换冲头6 +#define ERR_CHANGE_SEWND 0x00FA // 更换缝纫针 +#define ERR_PUNCH3_NOT_ZERO 0x0232 // 冲孔3主轴不在零位 +#define ERR_PUNCH4_NOT_ZERO 0x0233 // 冲孔4主轴不在零位 +#define ERR_PUNCH_NOT_BACK 0x029F // 呼吸阀冲孔气缸不在高位 +#define ERR_CMK_BTP 0x02DA // 呼吸阀冲孔上,异常 +#define ERR_CMK_BBP 0x02DB // 呼吸阀冲孔下,异常 +#define ERR_CMK_BPB 0x02DC // 呼吸阀冲孔下挡块伸缩,异常 +#define ERR_INSTALLMENT_OK 0x0300 // 密码设置成功 +#define ERR_INSTALLMENT_FAIL 0x0301 // 密码设置失败 +#define ERR_MT_DRIVER_X 0x0601 // X电机驱动器报警 +#define ERR_MT_DRIVER_Y 0x0602 // Y电机驱动器报警 +#define ERR_MT_DRIVER_Y2 0x0603 // Y2电机驱动器报警 +#define ERR_MT_DRIVER_U 0x0604 // 升降电机驱动器报警 +#define ERR_MT_DRIVER_M 0x0605 // 主轴驱动器报警 +#define ERR_MT_DRIVER_M2 0x0606 // 主轴2驱动器报警 +#define ERR_MT_DRIVER_R 0x0607 // 旋转驱动器报警 +#define ERR_MT_DRIVER_R2 0x0608 // 旋转2驱动器报警 +#define ERR_CLR_BLK 0x0801 // 吸尘器阻塞 +#define ERR_CLR_FULL 0x0802 // 吸尘器满料 +#define ERR_OIL_AIR 0x0803 // 油泵压力异常 + + +//机器状态判断 +#define STA_NORMAL_STOP 0x0100 // 正常停止 +#define STA_MTZ_SUCCESS 0x0101 // 归零成功 +#define STA_WORK_PAUSE 0x0102 // 工作暂停 +#define STA_WORK_OVER 0x0103 // 工作结束 +#define STA_WORK_FINISH 0x0104 // 工作完成 +#define STA_WORK_DONE 0x0105 // 完成产量 +#define STA_EXEC_SUCCESS 0x0106 // 执行成功 +#define STA_EXEC_FAILED 0x0107 // 执行失败 +#define STA_WAIT_FILE 0x0108 // 等待文件 +#define STA_CHANGE_BOBBIN 0x0109 // 更换梭芯 +#define STA_PROCESS_FINISH 0x010A // 执行完成 +#define STA_PROCESS_RUNNING 0x010B // 执行过程中 +#define STA_FEED_CMPT 0x0110 // 送料完成 +#define STA_EMB_CHNGCL_STOP 0x0111 // 换色停止 +#define STA_EMB_FRAME_FINISH 0x0151 // 边框刺绣完成 +#define STA_LINE_TBREAK 0x0152 // 断线停止 +#define STA_AUTO_SOFTLIMIT 0x0153 // 自动定软限位完成 +#define STA_SPINDLERATIO 0x0154 // 主轴齿轮比正常 + + +// 设置机器状态 +/* + 工作流程 + 1. 上位机发送命令 UCMD_SET_MC_STATUS, 命令结构定义如下: + + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|-----------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | + |-------------------|--------------------|------------------|-----------|-------------------|-----------| + | 固定序列如下 | 数据包ID | 状态码 | 参数 | 保留 | B4--B13的 | + | |--------------------|------------------|-----------|-------------------| | + | 'F','L','D','P' | UCMD_SET_MC_STATUS | | | | 16位CRC | + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + + + 2. 下位机收到命令后,根据状态码设置相关状态。 + +*/ + +// 状态码定义如下-设置 +#define MC_STA_CLENA_ERR 0x0000 // 清除错误 +#define MC_STA_EN_WORK 0x0001 // 允许工作(状态) +#define MC_STA_DIS_WORK 0x0002 // 禁止工作(状态) +#define MC_STA_EN_TIME 0x0003 // 允许工作(时间) +#define MC_STA_DIS_TIME 0x0004 // 禁止工作(时间) +#define MC_CLEAN_COUNT 0x0005 // 产量计数清零 +#define MC_STA_MANUAL 0x0006 // 手动工作状态 +#define MC_STA_AUTO 0x0007 // 自动工作状态 +#define MC_FILE_SWITCH 0x0008 // 文件切换 +#define MC_INVALID_FILE 0x0009 // 文件失效命令 +#define MC_CLEAN_PARA_REF 0x000A // 清除刷新参数标志 +#define MC_SET_TO_NORMAL 0x000B // 设置为正常工作状态 +#define MC_SET_TO_SIMULATE 0x000C // 设置为模拟工作状态 +#define MC_SET_ERR_STA 0x000D // 设置为错误状态(报错) +#define MC_CLEAN_FIDX 0x000F // 索引复位 +#define MC_CLEAN_BOBBIN 0x0010 // 底线计数复位 +#define MC_SET_ENTRY_SCAN_SENSOR 0x0011 // 设置为 进入 扫描传感器状态 +#define MC_SET_EXIT_SCAN_SENSOR 0x0012 // 设置为 退出 扫描传感器状态 +#define MC_SET_ENTER_TEST_OUTPUT 0x0013 // 设置为 进入 测试输出状态 +#define MC_SET_EXIT_TEST_OUTPUT 0x0014 // 设置为 退出 测试输出状态 +#define MC_STA_EXIT_TRA 0x0023 // 退出遍历状态 +#define MC_STA_EXIT_THREADBK 0x0024 // 退出断线测试 + + +/* + 读取参数工作流程 + 1. 上位机发送 UCMD_GET_MC_PARAS 命令, 命令格式如下: + + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|-----------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | + |-------------------|---------------------|-----------------|-------------------------------|-----------| + | 固定序列如下 | 数据包ID | 参数类型 | 保留 | B4--B13的 | + | |---------------------|-----------------|-------------------------------| | + | 'F','L','D','P' | UCMD_GET_MC_PARAS | | | 16位CRC | + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + + 2. 下位机收到后,回复 DCMD_SEND_MC_PARAS 命令, 格式定义如下 + + |-----------------------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |-------------------------------------------------------------------------------------------|-----------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | B16--Bn | + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 固定序列如下 | | 附加 | 附加 | 和上位机命令 | | B4--B13的 | 参数结构 | + | | DCMD_SEND_MC_PARAS | 数据 | 数据 | 相同的 | 保留 | | | + | 'V','L','D','P' | | 长度 | 校验字 | 参数类型 | | 16位CRC | | + |-------------------------------------------------------------------------------------------|-----------|---------------| + |-----------------------------------------------------------------------------------------------------------------------| + + 3. 上位机收到下位机的回复命令后,验证参数类型是否相同。 + +*/ + +typedef struct +{ + u32 buf[PARA_NUM]; +} __attribute__ ((packed)) ParaStruct; + +//动框角度参数结构体 +typedef struct +{ + // 行按照转速100--2100,每100转一个档; 列按照1mm--12mm每个mm一个档 + u16 xMvStAng[MAX_VER][MAX_HOR]; + u16 yMvStAng[MAX_VER][MAX_HOR]; + u16 enFlag; // 参数有效标志 + u16 rev[0x200-MAX_VER*MAX_HOR*2-1]; // 预留 +} __attribute__ ((packed)) EmbMvAng; + + + +// 参数类型定义 + +#define SEW_MCPARA_MACH 0 // 缝纫机器参数 +#define SEW_MCPARA_WORK 1 // 缝纫工作参数 +#define SEW_MCPARA_DEF_MC 2 // 出厂默认机器配置参数(读取有效) +#define SEW_MCPARA_DEF_WK 3 // 出厂默认机器工作参数(读取有效) +#define MVSTANG_PARA 0x06 // 起始动框角度 +#define SEW_REVMCPARA_MACH 0x07 // 预留机器配置参数 +#define SEW_REVMCPARA_WORK 0x08 // 预留机器工作参数 + + +// 设置机器参数 +/* + 工作流程 + 1. 上位机发送命令 UCMD_SET_MC_STATUS, 命令结构定义如下: + + |---------------------------------------------------------------------------------------------------------------| + |---------------------------------------------------------------------------------------|-----------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |---------------------------------------------------------------------------|-----------|-----------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | B16--Bn | + |---------------------------------------------------------------|-----------|-----------|-----------|---------------| + | 固定序列如下 | | 附加 | 附加数据 | | | B4--B13的 | 机器参数结构 | + | | UCMD_SET_MC_STATUS | 数据 | 校验字 | 参数类型 | 保留 | | | + | 'V','L','D','P' | | 长度 | | | | 16位CRC | | + |---------------------------------------------------------------|-----------|-----------|-----------|---------------| + |-------------------------------------------------------------------------------------------------------------------| + + + 2. 下位机收到命令后,根据参数类型,设置相关的参数。 +*/ + + + +// 读取传感信号 +/* + 读取传感器信号位图的工作流程 + 1. 上位机发送 UCMD_GET_SENSOR_BMP 命令, 命令格式如下: + + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|-----------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | + |-------------------|---------------------|-----------------|-------------------------------|-----------| + | 固定序列如下 | 数据包ID | 保留 | 保留 | B4--B13的 | + | |---------------------|-----------------|-------------------------------| | + | 'F','L','D','P' | UCMD_GET_SENSOR_BMP | | | 16位CRC | + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + + 2. 下位机收到后,根据当前机器的信号配置,返回 DCMD_SEND_SENSOR_BMP 命令, 格式定义如下 + + |-----------------------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |-------------------------------------------------------------------------------------------|-----------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | B16--Bn | + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 固定序列如下 | | 附加 | 附加 | | B4--B13的 | 信号结构 | + | | DCMD_SEND_SENSOR_BMP| 数据 | 数据 | 保留 | | | + | 'V','L','D','P' | | 长度 | 校验字 | | 16位CRC | | + |-------------------------------------------------------------------------------------------|-----------|---------------| + |-----------------------------------------------------------------------------------------------------------------------| + + 3. 上位机收到下位机的回复命令后,根据信号配置情况,配置需要显示的信号名称 + + 这个过程只需要开机读取一次即可(下位机开机后不会再变化)。 + +*/ + +/* + + 读取传感器信号的工作流程 + 1. 上位机发送 UCMD_GET_SENSORS 命令, 命令格式如下: + + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|-----------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | + |-------------------|---------------------|-----------------|-------------------------------|-----------| + | 固定序列如下 | 数据包ID | 回复形式 | 保留 | B4--B13的 | + | |---------------------|-----------------|-------------------------------| | + | 'F','L','D','P' | UCMD_GET_SENSORS | | | 16位CRC | + |-------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------| + + 2. 下位机收到后,根据回复形式,单次或多次回复 DCMD_SEND_MC_PARAS 命令, 格式定义如下 + + |-----------------------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |-------------------------------------------------------------------------------------------|-----------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | B16--Bn | + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 固定序列如下 | | 附加 | 附加 | | B4--B13的 | 信号结构 | + | | DCMD_SEND_SENSORS | 数据 | 数据 | 保留 | | | + | 'V','L','D','P' | | 长度 | 校验字 | | 16位CRC | | + |-------------------------------------------------------------------------------------------|-----------|---------------| + |-----------------------------------------------------------------------------------------------------------------------| + + 3. 上位机收到下位机的回复命令后,根据信号刷新显示 + +*/ + +//-------------------------------- +// 回复形式定义 + +#define REV_TYPE_ONCE 0 // 单次回复;下位机收到命令后发送一次回复数据 +#define REV_TYPE_BEGIN 1 // 多次回复;下位机收到命令后,会主动开始发送回复数据,直到被其他命令打断。 + + +// 传感信号位定义,传感器信号位图和传感器信号的位定义相同 +typedef struct +{ + // 0 + u8 bitmap[1024]; + +} __attribute__ ((packed)) SensorsBitmap; + + +/* + 发送文件工作流程 + 1. 上位机发送 UCMD_START_TRANS 命令, 命令格式如下: + + 读取参数工作流程 + 1. 上位机发送 UCMD_START_TRANS 命令, 命令格式如下: + + |-----------------------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------|-----------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |-----------------------------------------------------------------------|-------|-----------|-----------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 | B11 | B12 B13 | B14 B15 | B16--Bn | + |---------------------------------------------------------------|-------|-------|-----------|-----------|---------------| + | 固定序列如下 | | 附加 | 附加数据 | | | | B4--B13的 | 文件 | + | | UCMD_START_TRANS | 数据 | 校验字 | 文件 | 文件 | 文件ID | | 控制结构 | + | 'V','L','D','P' | | 长度 | | 类型 | IDX | | 16位CRC | | + |---------------------------------------------------|-----------|-------|-------|-----------|-----------|---------------| + |-----------------------------------------------------------------------------------------------------------------------| + + (1) 文件类型在下面有定义,一般分为数据文件和升级文件 + (2) 文件IDX是传输多个数据文件时的索引号 + (3) 文件ID是文件传输中的标识,在此次传输中,可以作为该文件的代号 + (4) 文件传输控制结构是文件头,标识了文件的所有属性,参考 DataFileHead 结构 + + 2. 下位机收到后,准备好接收数据 + + 3. 上位机发送 UCMD_GET_TRANS_RESULT 命令, 命令格式如下: + |---------------------------------------------------------------------------------------------------------| + |---------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|-------------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 B12 B13 | B14 B15 | + |-------------------|-----------------------|-------------------|-----------------------------|-----------| + | 固定序列如下 | 数据包ID | 文件ID | 保留 | B4--B13的 | + | |-----------------------|-------------------|-----------------------------| | + | 'F','L','D','P' | UCMD_GET_TRANS_RESULT | 启动传输命令中的ID | | 16位CRC | + |---------------------------------------------------------------------------------------------------------| + |---------------------------------------------------------------------------------------------------------| + + 4. 下位机收到 UCMD_GET_TRANS_RESULT 后回复 DCMD_SEND_TRANS_RESULT 命令,命令格式如下 + + |---------------------------------------------------------------------------------------------------------------------------| + |----------------------------------------------------------------------------------------------|------------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |----------------------------------------------------------------------------------------------|------------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 | B13 | B14 B15 | B16--Bn | + |----------------------------------------------------------------------------------------------|------------|---------------| + | 固定序列如下 | | 附加 | 附加 | | 传输 | 传输 | B4--B13的 | 结果位图 | + | | DCMD_SEND_TRANS_RESULT | 数据 | 数据 | 文件ID | 有效 | 结果 | | | + | 'V','L','D','P' | | 长度 | 校验字 | | 标志 | | 16位CRC | | + |----------------------------------------------------------------------------------------------|------------|---------------| + |---------------------------------------------------------------------------------------------------------------------------| + + (1) 文件ID是 标识 那一个文件的传输命令,返回当前文件传输控制中的ID + (2) 传输有效标志 标识 是否收到过启动文件传输的命令。 + (3) 传输结果 标识 文件传输处于的阶段 + (4) 结果位图 标识 传输文件块的完整性,每个位表示一个数据包 + + 5. 上位机收到 DCMD_SEND_TRANS_RESULT 命令后,根据 传输有效标志 和 传输结果来决定下一步的动作。 + (1) 如果收到 TRANS_NOT_BEG, 说明下位机没有收到 UCMD_START_TRANS 命令,上位机需要重新发送 UCMD_START_TRANS 命令。 + (2) 如果收到 TRANS_READY, 说明下位机已经正确接收到 UCMD_START_TRANS 命令,可以开始传输文件内容。 + (3) 如果收到 TRANS_DOING, 说明下位机已经开始接收 UCMD_TRANS_FILE_DATA 命令,但是还没有完成数据的接收。 + (4) 如果收到 TRANS_DONE, 说明下位机 已经 接收完成文件的所有数据。 + + 6. 上位机在确认下位机能够接收文件数据后,通过发送UCMD_TRANS_FILE_DATA来发送文件内容。可以按照文件包的顺序发送,也可以乱序发送。 + 7. 上位机在发送完所有数据包后,需要发送UCMD_GET_TRANS_RESULT 命令来查询下位机的接收情况。也可以在传输过程中发送该命令查询传输结果 + 8. 上位机收到 DCMD_SEND_TRANS_RESULT 命令后, + (1) 如果收到 TRANS_DONE, 并且位图中所有的数据包标志位都正确,说明下位机 已经 接收完成文件的所有数据。 + (2) 如果收到 TRANS_DOING, 说明在传输数据的过程中有数据包丢失的情况,接收结果位图中标识了有那些数据包没有接收到,上位机需要把没有收到的数据包重新传输。 + 9. 重复步骤 6--8, 直到发送成功。 +*/ + + +// 传输文件类型 +#define FILE_TYPE_DAT 0x00 // 数据文件 +#define FILE_TYPE_PGM 0x02 // 升级文件 +#define FILE_TYPE_BOARD 0x03 // 外围板文件 +#define FILE_TYPE_FRAME 0x04 // 边框刺绣文件 + +// 文件控制结构 +// 文件传输控制结构 +#define LEN_RSV_BMP MAX_EXDP_LEN // 位图大小 +#define MAX_FILE_SIZE (LEN_RSV_BMP*MAX_EXDP_LEN*16) // 最大文件字节数 按位图大小设定 + +typedef struct +{ + int transphase; + int filetransing; + int waitcount; + + u8 transActive; // 传输结构有效 + u8 transflag; // 接收进度标志 = 0, 接收未开始; = 1, 正在接收; = 2,接收完成。 + u8 fileType; // 文件类型 + u8 fileIdx; // 为文件编号,最多支持16个文件 + u16 fileId; // 文件ID + u16 packetSize; // 包的大小 + u32 packetNum; // 包的个数 + + DataDs16FileHead * pFileHead; + AppFileHead * pAppHead; + BoardFileHead * pBoardHead; + + u8 * pDatBuff; + + u16 lenBmp; // 位图有效长度 + u8 rsvBitmap[LEN_RSV_BMP]; // 文件接收进度标志位图 + +}FileTransCtrl; + + +// 传输有效标志定义 +#define TRANS_NONE 0x00 // 无效 +#define TRANS_ACTIVE 0x5A // 有效 + +// 传输结果代码定义 +#define TRANS_NOT_BEG 0x00 // 没有收到启动命令 +#define TRANS_READY 0x01 // 准备好接收 +#define TRANS_DOING 0x02 // 正在接收 +#define TRANS_DONE 0x03 // 接收完成 +#define TRANS_REQUEST 0x04 // 请求传输模式 + + +/* + + 发送文件参数工作流程 + + 1. 上位机发送 UCMD_SET_FILE_PARAS 命令,定义如下 + + |---------------------------------------------------------------------------------------------------------------------------| + |-----------------------------------------------------------------------------------------------|-----------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |---------------------------------------------------------------------------|-------|-----------|-----------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 | B11 | B12 B13 | B14 B15 | B16--Bn | + |-------------------------------------------------------|-----------|-------|-------|-----------|-----------|---------------| + | 固定序列如下 | | 附加 | 附加数据 | | | | B4--B13的 | 文件参数 | + | | UCMD_SET_FILE_PARAS | 数据 | 校验字 | 文件 | 文件 | 文件ID | | 结构 | + | 'V','L','D','P' | | 长度 | | 类型 | IDX | | 16位CRC | | + |--------------------------------------------|----------|-----------|-------|-------|-----------|-----------|---------------| + |---------------------------------------------------------------------------------------------------------------------------| + + (1) 文件类型为数据文件,暂时不支持别的选项 + (2) 文件IDX是文件的索引号(根据之前文件传输中的文件的IDX) + (3) 文件ID是文件的代号(根据之前文件传输中的文件的代号) + (4) 文件执行控制结构 参考 DataFilePara 结构 + + 2. 下位机收到命令后,按照 DataFilePara 结构中的参数设置文件相关参数。 + + +*/ + + + +// 设置执行进度 +/* + + 设置执行进度工作流程 + + 1. 上位机发送 UCMD_SET_EXEC_PROGRESS 命令,定义如下 + + |---------------------------------------------------------------------------------------------------------------------------| + |-----------------------------------------------------------------------------------------------|-----------|---------------| + | 数据识别序列 | 数据内容 | 校验字 | 附加数据 | + |---------------------------------------------------------------------------|-------|-----------|-----------|---------------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 | B11 | B12 B13 | B14 B15 | B16--Bn | + |-------------------------------------------------------|-----------|-------|-------|-----------|-----------|---------------| + | 固定序列如下 | | 附加 | 附加数据 | | | | B4--B13的 | 文件执行 | + | | UCMD_SET_EXEC_PROGRESS | 数据 | 校验字 | 文件 | 文件 | 文件ID | | 控制结构 | + | 'V','L','D','P' | | 长度 | | 类型 | IDX | | 16位CRC | | + |--------------------------------------------|----------|-----------|-------|-------|-----------|-----------|---------------| + |---------------------------------------------------------------------------------------------------------------------------| + + (1) 文件类型为数据文件,暂时不支持别的选项 + (2) 文件IDX是文件的索引号(根据之前文件传输中的文件的IDX) + (3) 文件ID是文件的代号(根据之前文件传输中的文件的代号) + (4) 文件执行控制结构 参考 FileExecPara 结构 + + 2. 下位机收到命令后,按照 FileExecPara 结构中的参数设置,改变下位机的执行流程。 + +*/ + + + +/* + + 设置默认参数工作流程 + + 1. 上位机发送 UCMD_SET_DEF_PARA 命令,定义如下 + + |-------------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|-----------------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | + |-------------------|-----------------------|-------------------|---------------------------------|-----------| + | 固定序列如下 | 数据包ID | 保留 | 控制参数1 | 控制参数2 | 控制参数3 | B4--B13的 | + | |-----------------------|-------------------|---------------------------------| | + | 'F','L','D','P' | UCMD_SET_DEF_PARA | | | | | 16位CRC | + |-------------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------------| + + + 2. 下位机收到命令后,按照 恢复下位机参数为默认的参数。 + + + +*/ + +// 手动控制命令 +/* + 手动控制工作流程 + + 1. 上位机发送命令 UCMD_ACT_BYHAND 定义如下 + + |-------------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|-----------------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 | B12 B13 | B14 B15 | + |-------------------|-----------------------|-------------------|---------------------------------|-----------| + | 固定序列如下 | 数据包ID | 控制动作代码 | 控制参数1 | 控制参数2 | 控制参数3 | B4--B13的 | + | |-----------------------|-------------------|---------------------------------| | + | 'F','L','D','P' | UCMD_ACT_BYHAND | | | | | 16位CRC | + |-------------------------------------------------------------------------------------------------------------| + |-------------------------------------------------------------------------------------------------------------| + + 控制动作代码 以及参数1,2,3 见下面定义 + + 2. 下位机收到该命令后,执行相应的动作 + +*/ + +//---------------------------------------------------------------------------------------------------- + +// 控制动作定义 + +#define MOTO_TO_ZERO 0x0001 // 电机归零(辅助调试的功能,无安全保护和逻辑关系) +#define MOVE_BY_HAND 0x0002 // 电机手动移动(辅助调试的功能,无安全保护和逻辑关系) +#define OUTPUT_CTRL 0x0003 // 输出控制(辅助调试的功能,无安全保护和逻辑关系) +#define MOTO_EN_CTRL 0x0004 // 电机使能控制(辅助调试的功能,无安全保护和逻辑关系) + +#define MANUAL_ACTION 0x0005 // 手动动作功能(日常使用功能,有安全保护和逻辑时序关系) +#define TEST_OUTPUT 0x0006 // 测试输出OUTPUT端口(obj输出端口 1~26:主板output1~26 101~356:扩展板output1~256) +#define TEST_THREADBK 0x0007// 测试断线检测 + + +// 归零和手动移动和电机使能的 控制参数1 定义 +#define MT_LX 0x0001 // X向移动电机 +#define MT_LY 0x0002 // Y向移动电机 +#define MT_LM 0x0003 // 升降(压胶机)// 主轴电机 +#define MT_LN 0x0004 // 针电机 +#define MT_LH 0x0005 // 梭电机 +#define MT_LU 0x0006 // 升降电机 +#define MT_LF 0x0007 // 压脚电机 +#define MT_LR 0x0008 // 旋转电机 +#define MT_LRU 0x0009 // 上旋转电机 +#define MT_LRD 0x000A// 下旋转电机 +#define MT_LPM 0x000B // 冲孔主轴 +#define MT_LP2 0x000C // 冲孔2主轴 +#define MT_LCM 0x000D// 裁刀主轴 +#define MT_LU2 0x000E // 升降电机2 +#define MT_LW 0x000F // 摆动电机 +#define MT_LMS 0x0010 // 主轴 +#define MT_PR1 0x0073 // 冲孔旋转电机1 +#define MT_PR2 0x0074 // 冲孔旋转电机2 + +// 手动移动的 控制参数2 定义 +#define MT_MOVE_DIR_STOP 0x0000 // 停止转动 +#define MT_MOVE_DIR_POSI 0x0001 // 正向移动(x向右,y向上,升降向上) +#define MT_MOVE_DIR_NEGA 0x0002 // 反向移动(x向左,y向下,升降向下) + +// 电机使能的 控制参数2 定义 +#define MT_SERVO_ON 0x0001 // 电机使能开 +#define MT_SERVO_OFF 0x0002 // 电机使能关 + + +// 输出控制参数1代码定义 +#define OT_LOOSE_THREAD 0x0001 // 松紧线 +#define OT_FOLLOW_EN 0x0002 // 随动允许 +#define OT_UCUT_THREAD 0x0003 // 压脚 //上剪刀剪线 +#define OT_DCUT_THREAD 0x0004 // 下剪刀剪线 +#define OT_CLIP_UPLINE 0x0005 // 夹面线 +#define OT_OIL 0x0006 // 加油 +#define OT_LIGHT 0x0007 // 照明灯 +#define OT_CUT_UP 0x0008 // 上剪线 +#define OT_MID_FOOT 0x0009 // 中压脚 +#define OT_LOOSE_UTRD2 0x000D// 松紧线2 +#define OT_PUSH_BTRD 0x000A// 扣底线 +#define OT_STAND_BTRD 0x000B // 顶底线 +#define OT_CLIP_UTRD 0x000C // 夹面线 +#define OT_LOOSE_UTRD2 0x000D// 松紧线2 +#define OT_SEW_LIFT 0x000E // 缝纫机头升降 +#define OT_PUNCH_LIFT 0x000F // 冲孔机头升降 +#define OT_SEW_BLOW 0x0010 // 缝纫吹气 +#define OT_PUNCH_BLOW 0x0011 // 冲孔吹气 +#define OT_CLEANER 0x0012 // 吸尘器 +#define OT_DCUT_THREAD_R 0x0013 // 右机头下剪刀剪线 +#define OT_BIT_FOOT_R 0x0014 // 右机头大压脚 +#define OT_MID_FOOT_R 0x0015 // 右机头中压脚 +#define OT_PUSH_BTRD_R 0x0016 // 右机头扣底线 +#define OT_STAND_BTRD_R 0x0017 // 右机头顶底线 +#define OT_CLIP_UTRD_R 0x0018 // 右机头夹面线 +#define OT_SEW_BLOW_R 0x0019 // 右机头缝纫吹气 +#define OT_HEAD_L_CLUTH 0x001A// 左机头主轴离合 +#define OT_HEAD_R_CLUTH 0x001B // 右机头主轴离合 +#define OT_HEAD_R_LOOSE_THREAD 0x001C // 右机头松紧线 +#define OT_HEAD_R_LOOSE_UTRD2 0x001D // 右机头松紧线2 +#define OT_CUTTER_LIFT 0x001E // 切刀机头 +#define OT_PRESS_KNOT 0x001F // 压枣控制 +#define OT_FRAME 0x0020// 气框开合 +#define OT_FRAME_TEN 0x0021 // 气框拉伸 +#define OT_FRAME_PRE 0x0022 // 气框压紧 +#define OT_CLIP_EXTEND 0x0024 // 勾线动作 伸缩 +#define OT_CLIP_EXTEND_R 0x0025 // 右机头勾线动作 伸缩 +#define OT_CLIP_OPEN 0x0026 // 勾线动作 开合 +#define OT_CLIP_OPEN_R 0x0027 // 右机头勾线动作 开合 +#define OT_CUTDW_LIFT 0x0030 // 裁切机头下升降 +#define OT_CUTUP_LIFT 0x0031 // 裁切机头上升降 +#define OT_CUT_KNIFE 0x0032 // 切刀 +#define OT_EMB_CUT 0x0040 // 平绣剪刀 +#define OT_EMB_PUSH 0x0041 // 平绣扣线 +#define OT_EMB_CLIP 0x0042 // 平绣夹面线 +#define OT_EMB_OIL 0x0043 // 平绣加油 +#define OT_EMB_HOOK 0x0044 // 平绣勾线 +#define OT_EMB_LOCK 0x0045 // 平绣锁头 +#define OT_PUNCH_OIL 0x0050 // 冲孔加油 +#define OT_PUNCH_LOCK 0x0051 // 冲孔锁头 +#define OT_SAFE_DOOR1 0x0054 // 安全护栏1 +#define OT_SAFE_DOOR2 0x0055 // 安全护栏2 +#define OT_OIL_R 0x00EB // 加油2 + +//控制动作 +#define MT_CU 0x0010 // 裁刀升降电机 ++ +#define MT_LX2 0x0011 // X2向移动电机 +#define MT_LY2 0x0012 // Y2向移动电机 +#define MT_LM2 0x0013 // 主轴2电机 +#define MT_LB 0x0014 // 传送带 +#define MT_LPU 0x0015 // 压枣升降 +#define MT_LIN 0x0016 // 进料电机 +#define MT_LOT 0x0018 // 出料电机 +#define MT_LHM 0x0019 // 横切移动电机 +#define MT_LHX 0x001A // 横切旋刀电机 +#define MT_LBQ 0x001B // 边切刀电机 +#define MT_LJB 0x001C // 夹布移动电机 +#define MT_LH2 0x001D // 梭电机2 +#define MT_LN2 0x001E // 针电机2 +#define MT_LEM 0x0020 // 平绣主轴 +#define MT_LLSL 0x0021 // 左上料电机 +#define MT_LRSL 0x0022 // 右上料电机 +#define MT_LYZR 0x0023 // 零等待 右侧Y电机 +#define MT_RTN 0x0026 // 退料电机 +#define MT_LPS 0x0027 // 冲孔换色电机 +#define MT_LPR 0x0028 // 冲孔旋转电机 +#define MT_ECM 0x0040 //平绣换色电机 +#define MT_LPS2 0x0045 // 冲孔换色电机 +#define MT_LMA 0x0050 // 所有主轴电机 +#define MT_LP3 0x0051 // 冲孔3主轴 +#define MT_LP4 0x0052 // 冲孔4主轴 +#define MT_EMN 0x0077 // 平绣针主轴 +#define MT_EMH 0x0078 // 平绣梭主轴 + +// 输出参数2 +#define OT_STOP 0x0000 // 停止 +#define UP_OPEN_ON 0x0001 // 上升、打开、放松、伸出 +#define DOWN_CLOSE_OFF 0x0002 // 下降、关闭、加紧、收回 +#define OT_ACTION 0x0003 // 动作 + + +// 手动控制功能的代码(控制参数1) 定义-冲孔机系列 +#define CUT_THREAD 0x0001 // 手动剪线 +#define MAINSHAFT_ADJUST 0x0002 // 针梭校对(主轴点动) +#define ROTATE_ADJUST 0x0003 // 旋转校对 +#define HEAD_LIFT_UP 0x0004 // 机头上升 +#define SET_WORK_AREA 0x0005 // 设置可工作区域 +#define CHANGE_WORK_HEAD 0X0006 //机头切换 +#define SEWING_MS_RUN 0x0009 // 缝纫主轴研车 +#define PUNCH_MS_RUN 0x000A // 冲孔主轴研车 +#define ALL_MS_RUN 0x000B // 所有主轴研车 +#define CUT_UP 0x0010 // 剪上线 +#define CUT_DOWN 0x0011 // 剪下线 +#define SEW_HEAD_LIFT 0x0012 // 缝纫机头升降(根据传感器状态确定上升还是下降) +#define MS_JOG 0x0013 // 点动 +#define M_TO_ANGLE 0x0014 // M轴去指定角度 +#define WIRE_MS_RUN 0x0015 // 主轴研车 +#define XY_MOVE_LEFT 0x0016 // X左移 +#define XY_MOVE_RIGHT 0x0017 // X右移 +#define XY_MOVE_FRONT 0x0018 // Y前移 +#define XY_MOVE_BACK 0x0019 // Y后移 +#define XY_MOVE_STOP 0x001A // XY停止 +#define ROT_MOVE_POSI 0x001D // 逆时针旋转 +#define ROT_MOVE_MEGA 0x001E // 顺时针旋转 +#define ROT_MOVE_STOP 0x001F // 旋转停止 +#define AUTO_SET_START 0x0021 // 自动定起点 +#define XY_AUTO_SOFTLIMIT 0x0022 // 自动定软限位 +#define CHECK_CANBUS 0x0023 // 总线检测 +#define PUNCH_MS_JOG 0x0030 // 多头冲孔点动 +#define PUNCH_SW_KN 0x0031 // 多头冲孔换刀 +#define PUNCH_CHANGE_ZERO 0x0032 // 冲孔换色0 +#define PUNCH_MS_POH 0x0035 //单次冲孔 +#define PUNCH_MS_CD 0x0036 //冲头停下位 +#define AUTO_SET_RANGE 0x0038 // 自动设定工作范围 +#define PUNCH_DRAW_OUTLINE 0x003A //画轮廓线 +#define PUNCH_CON_OIL 0x0077 // 冲孔连续供油 +#define PUNCH_ROT_TO_ZERO 0x0078 // 冲孔旋转去零位 +#define SEWING_MS_JOG 0x0084 // 缝纫机头点动 +#define NEEDLE_TO_CUSP 0x0085 // 缝纫主轴去勾线位 +#define HOOK_TO_CUSP 0x0086 // 梭去勾线位 +#define EMB_TO_CUSP 0x0087 // 绣花主轴去勾线位 +#define SHOW_M_ABSECD_VAL 0x0100 // 显示M轴绝对值编码器值 +#define TEST_ADC_POTVAL 0x0102 // 测试电位器 + +#define EMB_MS_JOG 0x0020 // 平绣点动 +#define EMB_SW_COLOR 0x0021 // 平绣换色 +#define EMB_MS_RUN 0x0022 // 平绣主轴研车 +#define EMB_CUT_THREAD 0x0023 // 平绣剪线 + +// 手动动作(压胶机) +#define ALL_TO_RESET 0x0001 // 全部复位 +#define MOTO_TO_ZERO_YJ 0x0002 // 电机归零 +#define STATION1_START_GLUE 0x0003 // 工位1涂胶 +#define STATION2_START_GLUE 0x0004 // 工位2涂胶 +#define HEAD_UP_DOWN 0x0005 // 机头升降 +#define TO_STATION1_APOS 0x0006 // 回工位1起始点 +#define TO_STATION2_APOS 0x0007 // 回工位2起始点 +#define TO_WAITTING_POS 0x0008 // 回等料点 +#define TO_REMOVE_GLUE_POS 0x0009 // 回排胶点 +#define REMOVE_GLUE_ONCE 0x000A // 排一次胶 +#define ADJUST_GLUE_HEGHT 0x000B // 校准胶管高度 + +// 机器工作命令 +/* + 工作命令执行流程 + + 1. 上位机发送命令 UCMD_MC_WORK 定义如下 + + |--------------------------------------------------------------------------------------------------------| + |--------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|-------------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 B10 B11 | B12 B13 | B14 B15 | + |-------------------|-----------------------|-------------------|-----------------------------|-----------| + | 固定序列如下 | 数据包ID | 工作控制功能 | 控制参数1 | 控制参数2 | B4--B13的 | + | |-----------------------|-------------------|------------------------------| | + | 'F','L','D','P' | UCMD_MC_WORK | | | | 16位CRC | + |---------------------------------------------------------------------------------------------------------| + |---------------------------------------------------------------------------------------------------------| + + 工作控制功能代码 以及参数1,2见下面定义 + + 2. 下位机收到该命令后,执行相应的动作 + +*/ + +// 工作控制功能 + +#define WORK_START 0x0001 // 启动工作 +#define WORK_PAUSE 0x0002 // 暂停工作 +#define WORK_FINISH 0x0003 // 结束工作(流程复位) +#define WORK_FIND_ZERO 0x0004 // 自动找零 + +#define WORK_GOTO_START 0x0005 // 回起点 +#define WORK_GOTO_ANCHOR 0x0006 // 回定位点 +#define WORK_GOTO_OFFSET 0x0007 // 回偏移点 +#define WORK_CHECK_FRAME 0x0008 // 边框检查 +#define WORK_FAST_JUMP 0x000B // 快速进退 +#define WORK_GOTO_WKPOS 0x000C // 回工作点 +#define WORK_GOTO_FEEDT 0x000D // 回穿线点 +#define WORK_GOTO_CHGBO 0x000E // 回换梭位 +#define WORK_GOTO_ZERO 0x0012 // 回零点(框架归零) +#define WORK_GOTO_GORNER 0x0013 // 回角点 +#define WORK_FIX_MVFRAME 0x0017 // 定量移框 +#define WORK_RPM_CHG 0x0020 // 速度改变 +#define WORK_FILE_IDX_CHG 0x0021 // 文件序号改变 +#define WORK_SIMULATION_FRAME 0x0026 // 空走边框 +#define WORK_GOTO_FEED 0x0027 // 回上料点 +#define WORK_SET_OFFSET 0x0028 // 定偏移点 +#define WORK_GOTO_FRMMP 0x0029 // 回中心点 +#define WORK_ACT_OIL 0x0050 // 工作中加油 + + + +/* + 移动到位置 命令 执行流程 + + 1. 上位机发送命令 UCMD_MOVE_TO 定义如下 + + |----------------------------------------------------------------------------------------------| + |---------------------------------------------------------------------------------- -----------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|---------------------------------------------------------------|----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 B8 B9 | B10 B11 B12 B13 | B14 B15 | + |-------------------|-----------------------|-------------------|-------------------|----------| + | 固定序列如下 | 数据包ID | 坐标X | 坐标Y | B4--B13的 | + | |-----------------------|-------------------|-------------------| 16位CRC | + | 'F','L','D','P' | UCMD_MOVE_TO | | | | + |----------------------------------------------------------------------------------------------| + |----------------------------------------------------------------------------------------------| + + + + 2. 下位机收到该命令后,移动 XY 到响应坐标位置 + +*/ + + +// 下位机升级 +/* + 移动到位置 命令 执行流程 + + 1. 上位机发送升级文件到下位机,参考文件发送的流程。 + + 2. 如果升级文件发送成功,那么接下来上位机发送 UCMD_MC_UPDATE 命令,定义如下 + + |----------------------------------------------------------------------------------------------------------| + |----------------------------------------------------------------------------------------------------------| + | 数据识别序列 | 数据内容 | 校验字 | + |-------------------|--------------------------------------------------------------------------|-----------| + | B0 B1 B2 B3 | B4 B5 | B6 B7 | B8 B9 | B10 B11 B12 B13 | B14 B15 | + |-------------------|-----------------------|-------------------|------------------------------|-----------| + | 固定序列如下 | 数据包ID | 升级对象 | 升级文件ID | 升级文件校验 | B4--B13的 | + | |-----------------------|-------------------|------------------------------| 16位CRC | + | 'F','L','D','P' | UCMD_MC_UPDATE | | | | | + |----------------------------------------------------------------------------------------------------------| + |----------------------------------------------------------------------------------------------------------| + + (1) 升级对象,选择要升级的板卡,暂时只支持主板升级 + (2) 升级文件ID,步骤1中发送的升级文件的ID + (3) 升级文件校验,步骤1中发送的升级文件的校验值(CRC32) + + 3. 下位机收到该命令后,检测升级文件是否正确,如果正确那么开始执行升级步骤,升级完成后会自动重启。 + +*/ + + +// 命令结构定义 +typedef union +{ + DataPacket packet; + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 toggle; + u8 rev[6]; + u16 crc; + } __attribute__ ((packed)) getMcInfo; // UCMD_GET_MC_INFO 读取机器信息 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 toggle; + u8 rev[6]; + u16 crc; + } __attribute__ ((packed)) getMcStatus; // UCMD_GET_MC_STATUS 读取机器状态 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 paraType; + u16 paraId; + u8 rev[4]; + u16 crc; + } __attribute__ ((packed)) getMcParas; // UCMD_GET_MC_PARAS 读取机器参数 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 fromObj; + u32 begAddr; + u16 rdSize; + u16 crc; + } __attribute__ ((packed)) getMemData; // UCMD_GET_MEM_DATA 读取内存数据 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 backType; + u8 rev[6]; + u16 crc; + } __attribute__ ((packed)) getSensors; // UCMD_GET_SENSORS 读取传感信号 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u8 fileType; + u8 fileIdx; + u8 rev[6]; + u16 crc; + } __attribute__ ((packed)) getFileInfo; // UCMD_GET_FILE_INFO 读取文件信息 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 fileId; + u8 rev[6]; + u16 crc; + } __attribute__ ((packed)) getTransResult; // UCMD_GET_TRANS_RESULT 读取传输结果 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u8 rev[8]; + u16 crc; + } __attribute__ ((packed)) getSensorBmp; // UCMD_GET_SENSOR_BMP 读取传感信号 + + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u16 cfgItem; + u8 rev[2]; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) setMcConfig; // UCMD_SET_MC_CONFIG 设置机器配置 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 staCode; + u16 para; + u8 rev[4]; + u16 crc; + } __attribute__ ((packed)) setMcStatus; // UCMD_SET_MC_STATUS 设置机器状态 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u16 paraType; + u16 paraId; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) setParas; // UCMD_SET_MC_PARAS 设置下位机参数 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u8 setObj; + u8 setWord; + u32 setAddr; + u16 setData; + u16 crc; + } __attribute__ ((packed)) setMemData; // UCMD_SET_MEM_DATA 设置内存数据 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u8 fileType; + u8 fileIdx; + u16 fileId; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) setFileParas; // UCMD_SET_FILE_PARAS 设置文件参数 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u8 fileType; + u8 fileIdx; + u16 fileId; + + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + + } __attribute__ ((packed)) setExecProgress; // UCMD_SET_EXEC_PROGRESS 设置进度命令 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u8 rev[4]; + + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + + } __attribute__ ((packed)) setInstallment; // UCMD_SET_INSTALLMENT 设置分期密码 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u8 type; + u32 time; + + u8 rev[3]; + u16 crc; + + } __attribute__ ((packed)) setElapsedTime; // UCMD_SET_ELAPSED_TIME 设置经过的时间 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + u8 id; + u8 nodeType; + u8 rev[6]; + u16 crc; + + } __attribute__ ((packed)) setDefParas; // UCMD_SET_DEF_PARA 设置默认参数 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 actCode; + u16 para1; + u16 para2; + u16 para3; + u16 crc; + } __attribute__ ((packed)) actByhand; // UCMD_ACT_BYHAND 手动动作功能 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 workCode; + u32 para1; + u16 para2; + u16 crc; + } __attribute__ ((packed)) mcWork; // UCMD_MC_WORK 机器工作命令 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + s32 posx; + s32 posy; + u16 crc; + } __attribute__ ((packed)) moveFrameTo; // UCMD_MOVE_TO 移动框架到位置命令 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u8 fileType; + u8 fileIdx; + u16 fileId; + + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) startTrans; // UCMD_START_TRANS 启动文件传输 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u16 pktIdx; + u16 fileId; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) transFileData; // UCMD_TRANS_FILE_DATA 文件数据传输 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u32 fileIdxMap; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) setFilesList; // UCMD_SET_FILE_LIST 设置文件列表 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u8 rev[8]; + + u16 crc; + + } __attribute__ ((packed)) getFilesList; // UCMD_GET_FILE_LIST 读取文件列表 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 upObj; + u16 upFileID; + u32 checksum; + u16 crc; + } __attribute__ ((packed)) mcUpdate; // UCMD_MC_UPDATE 系统升级 + + + //---------------------------------- + // 下位机发送命令 + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u8 fileType; + u8 fileIdx; + u16 fileId; + u32 datBlockIdx; // 数据包索引(每个包1024字节) + + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) dRequestDatBlock; // DCMD_REQUEST_DAT 请求文件数据 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u16 toggle; + u8 rev[2]; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) dSendMcInfo; // DCMD_SEND_MC_INFO 发送机器信息 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + u16 exLen; + u16 exCrc; + u8 rev[4]; + u16 crc; + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) sendDebugInfo; // 发送调试信息 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u16 toggle; + u8 rev[2]; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) dSendMcStatus; // DCMD_SEND_MC_STATUS 发送机器状态 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u16 paraType; + u16 paraId; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) dSendMcParas; // DCMD_SEND_MC_PARAS 发送机器参数 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u32 begAddr; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) dSendMemData; // DCMD_SEND_MEM_DATA 发送内存数据 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u8 rev[4]; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) dSendSensors; // DCMD_SEND_SENSORS 发送传感信号 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u8 fileType; + u8 fileIdx; + u8 rev[2]; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) dSendFileInfo; // DCMD_SEND_FILE_INFO 发送文件信息 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u16 fileId; + u8 active; + u8 result; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) dSendTransResult; // DCMD_SEND_TRANS_RESULT 发送传输结果 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u8 rev[4]; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) dSendSensorBmp; // DCMD_SEND_SENSOR_BMP 发送传输结果 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u8 fileType; + u8 fileIdx; + u16 fileId; + + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + + } __attribute__ ((packed)) setMacKey; // setMacKey + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u8 protocolType; // 协议类型 + u8 nodeType; // 遍历节点类型 + u8 traNum; // 遍历个数 + u8 nodeId; // 遍历起始节点ID + u8 rev[4]; + u16 crc; + } __attribute__ ((packed)) traverse; // 遍历命令 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u8 rev[8]; + u16 crc; + } __attribute__ ((packed)) rdBoardVer; // 读取外围板程序版本 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u8 protocolType; // 协议类型 + u8 nodeId; // 节点ID + u8 nodeType; + u8 rev[5]; + u16 crc; + } __attribute__ ((packed)) updateBoard; // 升级外围板 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u8 protocolType; + u8 nodeId; //节点ID + u8 nodeType; //节点类型 -rq + u8 rev; + u16 crc; + + u32 ver[8]; + u8 exData[MAX_EXDP_LEN-32]; + } __attribute__ ((packed)) sendBoardVer; // 发送外围板程序版本 + + struct + { + u8 sync[DP_SYNC_LEN]; + u16 cmdCode; + + u16 exLen; + u16 exCrc; + + u8 nodeId; + u8 nodeType; // 节点类型 + u8 rev[2]; + u16 crc; + + u8 exData[MAX_EXDP_LEN]; + } __attribute__ ((packed)) boardPara; // 发送外围板非易失性参数 + +}OperPacket; + +#pragma pack(1)//设定为1字节对齐 + +#endif diff --git a/machine/comm/typedef.h b/machine/comm/typedef.h new file mode 100644 index 0000000..cf4918e --- /dev/null +++ b/machine/comm/typedef.h @@ -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 diff --git a/machine/comport.cpp b/machine/comport.cpp new file mode 100644 index 0000000..6539881 --- /dev/null +++ b/machine/comport.cpp @@ -0,0 +1,153 @@ +#include "comport.h" +#include +#include + +//----------------------------------------------------------------------------------------------------- + +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(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()="<write(dat.data(), dat.size()); + } +} diff --git a/machine/comport.h b/machine/comport.h new file mode 100644 index 0000000..6b32e0f --- /dev/null +++ b/machine/comport.h @@ -0,0 +1,43 @@ +#ifndef COMPORT_H +#define COMPORT_H + + +#include +#include +#include + +#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 diff --git a/machine/error.cpp b/machine/error.cpp new file mode 100644 index 0000000..3215f5a --- /dev/null +++ b/machine/error.cpp @@ -0,0 +1,119 @@ + +#include "error.h" +#include "comm/protocol.h" +#include + +#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; +} diff --git a/machine/error.h b/machine/error.h new file mode 100644 index 0000000..124086c --- /dev/null +++ b/machine/error.h @@ -0,0 +1,12 @@ +#ifndef ERROR_H +#define ERROR_H + +#include +#include "comm/typedef.h" + + +QString getErrStr(u32 code); +QString getPromptStr(u32 code); + + +#endif // ERROR_H diff --git a/machine/gatewaytcpclient.cpp b/machine/gatewaytcpclient.cpp new file mode 100644 index 0000000..cef65a6 --- /dev/null +++ b/machine/gatewaytcpclient.cpp @@ -0,0 +1,335 @@ +#include "gatewaytcpclient.h" + +#include +#include +#include + +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"); +} + + + + + + + diff --git a/machine/gatewaytcpclient.h b/machine/gatewaytcpclient.h new file mode 100644 index 0000000..6840275 --- /dev/null +++ b/machine/gatewaytcpclient.h @@ -0,0 +1,72 @@ +#ifndef GATEWAYTCPCLIENT_H +#define GATEWAYTCPCLIENT_H + +#include +#include +#include +#include +#include +#include +#include + +#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 diff --git a/machine/lotmachine.cpp b/machine/lotmachine.cpp new file mode 100644 index 0000000..0c7d09d --- /dev/null +++ b/machine/lotmachine.cpp @@ -0,0 +1,289 @@ +#include "lotmachine.h" +#include +#include + +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)); +} diff --git a/machine/lotmachine.h b/machine/lotmachine.h new file mode 100644 index 0000000..f47c28c --- /dev/null +++ b/machine/lotmachine.h @@ -0,0 +1,73 @@ +#ifndef LOTMACHINE_H +#define LOTMACHINE_H + +#include "gatewaytcpclient.h" +#include "comport.h" +#include "comm/typedef.h" + +#include +#include +#include +#include + +#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 + diff --git a/machine/machine.cpp b/machine/machine.cpp new file mode 100644 index 0000000..67d65d2 --- /dev/null +++ b/machine/machine.cpp @@ -0,0 +1,2481 @@ +#include "machine.h" +#include +#include + +/* +Machine的dll如果是Release版本的在应用程序中只能在Release下调用, +否则调用不成功(连接不上),Machine的dll如果是Debug版本, +应用程序中在Debug下调用成功; +*/ + +//------------------------------------------ + +QByteArray g_receiveBuff; +DataExFuns g_exfuns = {NULL,NULL,NULL,NULL,NULL}; + +// 发送数据 +int operatorSendData(u8 * pDatBuf, int len) +{ + if (pDatBuf != NULL && len != 0) + { + // 不准备通过该函数发送数据 + } + return 0; +} + +// 得到发送缓冲区空闲长度 +int operatorGetSdFreeLen(void) +{ + return 0; // 认没有空间 +} + +// 接收数据 +int operatorGetData(u8 * pDat, int expectLen) +{ + int len = g_receiveBuff.size(); + if (len > expectLen) + { + len = expectLen; + } + + //if (len != 0 && pDat != NULL) + if (len == expectLen && pDat != NULL) //使len等于expectLen(串口下接收数据暴露的问题) + { + memcpy(pDat, g_receiveBuff.data(), len); + g_receiveBuff.remove(0, len); + } + else + { + len = 0; + } + + return len; +} + +// 已接收数据长度 +int operatorGetRsLen(void) +{ + return g_receiveBuff.size(); +} + +void delayMs(u32 ms) +{ + QDateTime oldTime, curTime; + oldTime = QDateTime::currentDateTime(); + while(1) + { + curTime = QDateTime::currentDateTime(); + if(oldTime.msecsTo(curTime) > ms) + { + break; + } + } +} + +void initDataExFuns(void) +{ + g_exfuns.sendCommData = operatorSendData; + g_exfuns.getCommData = operatorGetData; + g_exfuns.getRsvLen = operatorGetRsLen; + g_exfuns.getTrsFreeLen = operatorGetSdFreeLen; + + g_exfuns.delay = delayMs; +} + +//------------------------------------------ + + +Machine::Machine(QObject *parent) : + QObject(parent), + m_pTcpThread(NULL), + m_pTcpClient(NULL), + m_pComThread(NULL), + m_pComPort(NULL), + m_startComm(0) +{ + memset(&m_mcStatus, 0, sizeof(MCStatus)); // 机器状态 + memset(&m_mcPara, 0, sizeof(ParaStruct)); // 机器参数信息 + memset(&m_wkPara, 0, sizeof(ParaStruct)); // 工作参数信息 + memset(&m_mcPrePara, 0, sizeof(ParaStruct)); // 机器预留参数信息 + memset(&m_wkPrePara, 0, sizeof(ParaStruct)); // 工作预留参数信息 + memset(&m_frameAnglePara, 0, sizeof(EmbMvAng)); //动框角度参数 + memset(&m_mcInfo,0,sizeof(MCInfo)); // 机器信息 + memset(&m_lotData,0,sizeof(McLotData)); // 物联数据 + memset(&m_exboardInfo,0,sizeof(ExBoardInfo)); // 外围板信息 + + memset(&m_sensorsStaDat, 0, sizeof(SensorsBitmap)); // 传感器信号状态位图 + memset(&m_sensorEnBmp, 0, sizeof(SensorsBitmap)); // 传感器信号有效位图 + + memset(&m_transCtrl, 0, sizeof(FileTransCtrl)); // 文件传输信息 + + m_pSendTimer = new QTimer(this); + m_pSendTimer->setInterval(100); // 设置定时间隔100毫秒 + connect(m_pSendTimer, SIGNAL(timeout()), this, SLOT(onSendTimer())); + m_transCtrl.pFileHead = new DataDs16FileHead; + m_transCtrl.pAppHead = new AppFileHead; + m_transCtrl.pBoardHead = new BoardFileHead; + m_transCtrl.pDatBuff = new u8[MAX_FILE_SIZE]; + m_startComm = 0; + m_connected = 0; + m_statusEn = 0; + m_mcParaEn = 0; + m_wkParaEn = 0; + m_mcPreParaEn = 0; + m_wkPreParaEn = 0; + m_frameAngleParaEn = 0; + m_sensorStaEn = 0; + m_sensorBmpEn = 0; + + m_statusToggle = 0; + m_fileTransEn = 0; + m_transBreak = 0; + m_totalSendNum = 0; + m_totalPacketNum = 0; + m_connectMode = 0; + + initDataExFuns(); +} + +Machine::~Machine() +{ + 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_transCtrl.pFileHead != NULL) + { + delete []m_transCtrl.pFileHead; + m_transCtrl.pFileHead = NULL; + } + if (m_transCtrl.pDatBuff != NULL) + { + delete []m_transCtrl.pDatBuff; + m_transCtrl.pDatBuff = NULL; + } + + 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 Machine::initConnectMode(s16 val) +{ + m_connectMode = val; + if(m_connectMode == USE_TCP_COMM)//网口 + { + m_pTcpThread = new QThread(); + m_pTcpClient = new TcpClient(); + } + else if(m_connectMode == USE_SERIAL_COMM)//串口 + { + m_pComThread = new QThread(); + m_pComPort = new ComPort(); + connect(m_pComPort, SIGNAL(siSerialPortOpenState(int)), this, SLOT(slIfOpenSerialPort(int)) ); + } +} + +void Machine::setConfigFileName(QString configfilename) +{ + m_configFileName = configfilename; + if(m_connectMode == USE_TCP_COMM)//网口 + { + m_pTcpClient->setConfigFileName(m_configFileName); + } +} + +//设置串口名称 +void Machine::setComportName(QString portName) +{ + if(m_pComPort == NULL) + { + return; + } + + if(m_connectMode == USE_SERIAL_COMM)//串口 + { + m_pComPort->setComPortName(portName); + } +} + +QString Machine::getConfigFileName() +{ + return m_configFileName; +} + +int Machine::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 Machine::slotConnectSta(int sta) +{ + // qDebug() << "SlotConnectSta" << sta; + m_connected = sta; +} + +// 接收到通讯错误槽函数 +void Machine::slotConnectErr(QString errinfo) +{ + if(errinfo.length() <= 0){} + //qDebug() << "SlotConnectErr" << errinfo; +} + +void Machine::setMcStatusAsMc(u8 * buff, u16 len, int toggle) +{ + //memcpy(&m_mcStatus, buff, sizeof(MCStatus)); + memcpy(&m_mcStatus, buff, len); + m_statusEn = 1; + emit(siStatusChange(toggle)); +} + +// 接收到数据的槽函数 +void Machine::slotReceiveData(QByteArray dat) +{ + int rslt; + DataPacket packet; + OperPacket * operpkt = (OperPacket *)(&packet); + + // qDebug() << "SlotReceiveData size=" << dat.size(); + + g_receiveBuff.append(dat); + //qDebug()<<"append dat size"< 0) // 收到数据包 + { + //qDebug()<<"getANormalPacket rslt="<packet.fldp.cmd; + switch(operpkt->packet.fldp.cmd) // 先按固定长度解析 + { + case DCMD_REQUEST_DAT: // 请求文件数据 + { + if (m_transCtrl.transActive == TRANS_ACTIVE) + { + if (1 && + m_transCtrl.transflag == TRANS_REQUEST && // 请求传输数据模式 + m_transCtrl.fileType == operpkt->dRequestDatBlock.fileType && + m_transCtrl.fileIdx == operpkt->dRequestDatBlock.fileIdx && + m_transCtrl.fileId == operpkt->dRequestDatBlock.fileId && + 1 ) + { + qDebug("in request mode, send block idx=%d", operpkt->dRequestDatBlock.datBlockIdx); + transFileData(m_transCtrl, operpkt->dRequestDatBlock.datBlockIdx); + } + } + break; + } + case DCMD_SEND_MC_INFO: // 发送机器信息 + { + memcpy(&m_mcInfo, operpkt->dSendMcInfo.exData, sizeof(MCInfo)); + emit(siMcInfoChange( )); + + break; + } + + case DCMD_SEND_DEBUG_INFO: // 发送调试信息 + { + memcpy(&m_debugInfo, operpkt->sendDebugInfo.exData, sizeof(DebugInfo)); + emit(siDebugInfo( )); + break; + } + + case DCMD_SEND_BOARDVER: // 发送外围板程序版本 + { + if (operpkt->sendBoardVer.protocolType == BN_PROTOCOL_HEAD) // 机头板 + { + memcpy(&m_exboardInfo.headInfo[operpkt->sendBoardVer.nodeId - 1].softwareVerStr, + operpkt->sendBoardVer.ver, BOARD_VER_LEN*sizeof(char)); //复制版本 + + memcpy(&m_exboardInfo.headInfo[operpkt->sendBoardVer.nodeId - 1].nodeType, + &operpkt->sendBoardVer.nodeType, sizeof(u8)); //复制节点类型 -rq + } + + emit(siEXBInfoChange()); + break; + } + + case DCMD_SEND_MC_STATUS: // 发送机器状态 + { + setMcStatusAsMc(operpkt->dSendMcStatus.exData, operpkt->dSendMcStatus.exLen, operpkt->dSendMcStatus.toggle); + break; + } + + case DCMD_SEND_MC_PARAS: // 发送机器参数 + { + int type; + + type = operpkt->dSendMcParas.paraType; + if (operpkt->dSendMcParas.exLen == sizeof(ParaStruct) || + operpkt->dSendMcParas.exLen == sizeof(EmbMvAng)) + { + if (type == SEW_MCPARA_MACH || type == SEW_MCPARA_DEF_MC) + { + memcpy(&m_mcPara, operpkt->dSendMcParas.exData, sizeof(ParaStruct)); + m_mcParaEn = 1; + } + else if (type == SEW_MCPARA_WORK || type == SEW_MCPARA_DEF_WK) + { + memcpy(&m_wkPara, operpkt->dSendMcParas.exData, sizeof(ParaStruct)); + m_wkParaEn = 1; + } + else if (type == SEW_REVMCPARA_MACH || type == SEW_MCPARA_DEF_MC) + { + memcpy(&m_mcPrePara, operpkt->dSendMcParas.exData, sizeof(ParaStruct)); + m_mcPreParaEn = 1; + } + else if (type == SEW_REVMCPARA_WORK || type == SEW_MCPARA_DEF_WK) + { + memcpy(&m_wkPrePara, operpkt->dSendMcParas.exData, sizeof(ParaStruct)); + m_wkPreParaEn = 1; + } + else if(type == MVSTANG_PARA) + { + memcpy(&m_frameAnglePara, operpkt->dSendMcParas.exData, sizeof(EmbMvAng)); + m_frameAngleParaEn = 1; + } + else + { + break; + } + + //因为之前请求了机器参数和工作参数,所以当两个参数都返回时,再触发信号和槽 + // if( m_mcParaEn==1 && m_wkParaEn==1) + { + printf("emit SiParaChange\r\n"); + emit(siParaChange(type, 0)); + } + } + else if (operpkt->dSendMcParas.exLen == sizeof(u32)) + { + int id, idx; + id = operpkt->dSendMcParas.paraId; + idx = id - 1; + if (idx > 0 && idx < PARA_NUM) + { + idx *= sizeof(u32); + if (type == SEW_MCPARA_MACH) + { + memcpy((u8*)(&m_mcPara)+idx, operpkt->dSendMcParas.exData, sizeof(u32)); + m_mcParaEn = 1; + } + else if (type == SEW_MCPARA_WORK) + { + memcpy((u8*)(&m_wkPara)+idx, operpkt->dSendMcParas.exData, sizeof(u32)); + m_wkParaEn = 1; + } + else if (type == SEW_REVMCPARA_MACH) + { + memcpy((u8*)(&m_mcPrePara)+idx, operpkt->dSendMcParas.exData, sizeof(u32)); + m_mcPreParaEn = 1; + } + else if (type == SEW_REVMCPARA_WORK) + { + memcpy((u8*)(&m_wkPrePara)+idx, operpkt->dSendMcParas.exData, sizeof(u32)); + m_wkPreParaEn = 1; + } + else + { + break; + } + emit(siParaChange(type, id)); + } + } + + break; + } + + case DCMD_SEND_SENSORS: // 发送传感信号 + { + int len; + len = sizeof(SensorsBitmap); + if (len > operpkt->dSendSensors.exLen) + { + len = operpkt->dSendSensors.exLen; + } + memset(m_sensorsStaDat.bitmap, 0, sizeof(SensorsBitmap)); + memcpy(m_sensorsStaDat.bitmap, operpkt->dSendSensors.exData, len); + m_sensorStaEn = 1; + //qDebug("get DCMD_SEND_SENSORS"); + emit(siSensorChange(m_sensorsStaDat)); + break; + } + case DCMD_SEND_FILE_INFO: // 发送文件信息 + { + + break; + } + case DCMD_SEND_TRANS_RESULT: // 发送传输结果 + { + printf("get DCMD_SEND_TRANS_RESULT\r\n"); + m_transCtrl.lenBmp = operpkt->dSendTransResult.exLen; + m_transCtrl.transActive = operpkt->dSendTransResult.active; + m_transCtrl.transflag = operpkt->dSendTransResult.result; + if (m_transCtrl.lenBmp != 0) + { + memcpy(m_transCtrl.rsvBitmap, operpkt->dSendTransResult.exData, m_transCtrl.lenBmp); + } + m_fileTransEn = 1; + + emit (siTransResultChange()); + + break; + } + case DCMD_SEND_SENSOR_BMP: // 传感器信号有效位图 + { + int len; + len = sizeof(SensorsBitmap); + if (len > operpkt->dSendSensorBmp.exLen) + { + len = operpkt->dSendSensorBmp.exLen; + } + memset(m_sensorEnBmp.bitmap, 0, sizeof(SensorsBitmap)); + memcpy(m_sensorEnBmp.bitmap, operpkt->dSendSensorBmp.exData, len); + m_sensorBmpEn = 1; + qDebug("get DCMD_SEND_SENSOR_BMP"); + + emit (siSensorEnBitmap(m_sensorEnBmp)); + break; + } + + case DCMD_SEND_HEADPARA:// 发送机头板参数 + { + if (operpkt->dSendMcParas.exLen == PARA_NUM) + { + memcpy(&m_exboardInfo.headInfo[operpkt->boardPara.nodeId - 1].paraBuf, &operpkt->boardPara.exData, operpkt->boardPara.exLen); + //节点类型 + memcpy(&m_exboardInfo.headInfo[operpkt->boardPara.nodeId - 1].nodeType, &operpkt->boardPara.nodeType,sizeof(u8)); + emit(siEXBParaChange()); + break; + } + else if (operpkt->dSendMcParas.exLen == sizeof(u32)) + { + int id, idx; + id = operpkt->dSendMcParas.paraId; + idx = id - 1; + if (idx > 0 && idx < PARA_NUM) + { + idx *= sizeof(u32); + memcpy((u8*)&m_exboardInfo.headInfo[operpkt->sendBoardVer.nodeId - 1].paraBuf+idx, operpkt->boardPara.exData, sizeof(u32)); + emit(siEXBParaChange()); + break; + } + } + break; + } + + case DCMD_SEND_LOTDATA:// 发送物联网数据 + { + memcpy(&m_lotData, operpkt->dSendMcInfo.exData, sizeof(McLotData)); + //再定义一个结构体 + emit(siReceiveLotData()); + + break; + } + + case UCMD_SET_FILE_PARAS://边框检查超限后重新设置起始点 + { + DataFilePos newPos; + memset(&newPos, 0, sizeof(DataFilePos)); + memcpy((u8*)&newPos, operpkt->setFileParas.exData, sizeof(DataFilePos)); + //qDebug()<<"siDataFilePos"; + emit(siDataFilePos(newPos)); + break; + } + + default: + break; + } + } + else + { + break; + } + }while(1); +} + +//------------------------------------------------------------------- +// 读取机器信息 +void Machine::getInfoFromMachine() +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.getMcInfo.cmdCode = UCMD_GET_MC_INFO; + + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +// 读取外围板程序版本 +void Machine::getExboardInfoFromMachine() +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.rdBoardVer.cmdCode = UCMD_GET_BOARD_VER; + + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +// 读取机器状态 +int Machine::getStatusFromMachine() +{ + int rslt; + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.getMcStatus.cmdCode = UCMD_GET_MC_STATUS; + sendPacket.getMcStatus.toggle = m_statusToggle; + rslt = m_statusToggle; + m_statusToggle++; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); + return rslt; +} + +// 读取机器物联数据 +void Machine::getNetDataFromMachine() +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.boardPara.cmdCode = UCMD_GET_LOT_DATA; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +// 读取机器参数 +void Machine::getParasFromMachine(int type, int id) +{ + int mctype = -1; + int wktype = -1; + int frametype = -1;//动框角度 + if (type == -1) + { + mctype = SEW_MCPARA_MACH; + wktype = SEW_MCPARA_WORK; + frametype = MVSTANG_PARA; + m_mcParaEn = 0; + m_wkParaEn = 0; + m_frameAngleParaEn = 0; + } + else + { + if(type == SEW_MCPARA_MACH ) + { + mctype = SEW_MCPARA_MACH; + m_mcParaEn = 0; + } + if(type == SEW_MCPARA_WORK ) + { + wktype = SEW_MCPARA_WORK; + m_wkParaEn = 0; + } + if(type == MVSTANG_PARA) + { + frametype = MVSTANG_PARA; + m_frameAngleParaEn = 0; + } + } + + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.getMcParas.cmdCode = UCMD_GET_MC_PARAS; + + if (mctype == SEW_MCPARA_MACH) + { + sendPacket.getMcParas.paraType = (u16)mctype; + sendPacket.getMcParas.paraId = (u16)id; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); + } + + if (wktype == SEW_MCPARA_WORK) + { + sendPacket.getMcParas.paraType = (u16)wktype; + sendPacket.getMcParas.paraId = id; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); + } + + if (frametype == MVSTANG_PARA) + { + sendPacket.getMcParas.paraType = (u16)frametype; + sendPacket.getMcParas.paraId = id; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); + } +} + +// 读取外围板参数 (根据节点类型 ,发送读取机头板参数) +void Machine::getHeadParasFromMachine(int id,int nodeType) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.boardPara.cmdCode = UCMD_GET_HEAD_PARA; + sendPacket.boardPara.nodeId = id; + sendPacket.boardPara.nodeType = nodeType; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +// 读取传感信号 +void Machine::getSensorsFromMachine(int backtype) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.getSensors.cmdCode = UCMD_GET_SENSORS; + sendPacket.getSensors.backType = (u16)backtype; + + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +// 读取传输结果 +void Machine::getTransResultFromMachine(int fileid) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.getTransResult.cmdCode = UCMD_GET_TRANS_RESULT; + sendPacket.getTransResult.fileId = (u16)fileid; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +// 获取传感器有效标志位图 +void Machine::getSensorEnBmpFromMachine() +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.getSensorBmp.cmdCode = UCMD_GET_SENSOR_BMP; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +//------------------------------------------------------------------- +//----------------------------设置状态命令 +#ifdef UCMD_SET_MC_STATUS +// 清除错误 + +void Machine::setMcStatus(int stacode, int para) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.setMcStatus.cmdCode = UCMD_SET_MC_STATUS; + sendPacket.setMcStatus.staCode = (u16)stacode; + sendPacket.setMcStatus.para = (u16)para; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +void Machine::cleanError() +{ + setMcStatus(MC_STA_CLENA_ERR); +} + +// 设置允许工作状态 +void Machine::setEnableWorkSta() +{ + setMcStatus(MC_STA_EN_WORK); +} + +// 设置禁止工作状态 +void Machine::setDisableWorkSta() +{ + setMcStatus(MC_STA_DIS_WORK); +} + +// 设置允许工作时间状态 +void Machine::setEnableWorkTime() +{ + setMcStatus(MC_STA_EN_TIME); +} + +// 设置禁止工作时间状态 +void Machine::setDisableWorkTime() +{ + setMcStatus(MC_STA_DIS_TIME); +} + +// 重置产量 +void Machine::resetOutput() +{ + setMcStatus(MC_CLEAN_COUNT); +} + +// 手动工作状态 +void Machine::setToManualWork() +{ + setMcStatus(MC_STA_MANUAL); +} + +// 自动工作状态 +void Machine::setToAutoWork() +{ + setMcStatus(MC_STA_AUTO); +} + +// 文件切换 +void Machine::switchWorkFile(int idx) +{ + setMcStatus(MC_FILE_SWITCH, idx); +} + +// 设置经过的时间(即关机时间) +void Machine::setShutDownTime(u8 type, u32 time) +{ + int rslt; + OperPacket sendPacket; + //int size = sizeof(ParaStruct); + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.setElapsedTime.cmdCode = UCMD_SET_ELAPSED_TIME; + sendPacket.setElapsedTime.type = type; + sendPacket.setElapsedTime.time = time; + + rslt = packetAFLDP(&sendPacket.packet); + + if (rslt == 0) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); + } +} + +// 文件失效 +void Machine::invalidateWorkFile(int idx) +{ + setMcStatus(MC_INVALID_FILE, idx); +} + +// 清除刷新参数标志 +void Machine::cleanNewParaFlag() +{ + setMcStatus(MC_CLEAN_PARA_REF); +} + +// 模拟工作状态 +void Machine::setSimulateWork() +{ + setMcStatus(MC_SET_TO_SIMULATE); +} + +// 正常工作状态 +void Machine::setNormalWork() +{ + setMcStatus(MC_SET_TO_NORMAL); +} + +//退出遍历状态 +void Machine::exitTraverStates() +{ + setMcStatus(MC_STA_EXIT_TRA); +} + +//退出断线测试 +void Machine::exitDetectTest() +{ + setMcStatus(MC_STA_EXIT_THREADBK); +} + +// 底线计数复位 +void Machine::resetBobbinCounter() +{ + setMcStatus(MC_CLEAN_BOBBIN); +} + +// 设置为 进入 扫描传感器状态 +void Machine::entrySensorScan() +{ + setMcStatus(MC_SET_ENTRY_SCAN_SENSOR); +} + +// 设置为 退出 扫描传感器状态 +void Machine::exitSensorScan() +{ + setMcStatus(MC_SET_EXIT_SCAN_SENSOR); +} + + +#endif + +//---------------------------- + +void Machine::setParasToMachine(int type, ParaStruct & para) +{ + int rslt; + OperPacket sendPacket; + int size = sizeof(ParaStruct); + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.setParas.cmdCode = UCMD_SET_MC_PARAS; + sendPacket.setParas.paraType = (u16)type; + + rslt = packetAVLDP(&sendPacket.packet, (u8*)¶, size); + + if (rslt == 0) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET + size); + emit(siSendData(dat)); + } +} + +//设置动框角度参数 +void Machine::setFrameAngleParasToMachine(int type, EmbMvAng ¶) +{ + int rslt; + OperPacket sendPacket; + int size = sizeof(EmbMvAng); + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.setParas.cmdCode = UCMD_SET_MC_PARAS; + sendPacket.setParas.paraType = (u16)type; + + rslt = packetAVLDP(&sendPacket.packet, (u8*)¶, size); + + if (rslt == 0) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET + size); + emit(siSendData(dat)); + } +} + +void Machine::setAParasToMachine(int type, int idx, u32 value) +{ + int rslt; + OperPacket sendPacket; + int size = sizeof(value); + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.setParas.cmdCode = UCMD_SET_MC_PARAS; + sendPacket.setParas.paraType = (u16)type; + sendPacket.setParas.paraId = idx; + + rslt = packetAVLDP(&sendPacket.packet, (u8*)&value, size); + + if (rslt == 0) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET + size); + emit(siSendData(dat)); + } +} + +//设置机头板参数 +void Machine::setEXBHeadParasToMachine(HeadInfo ¶,int id) +{ + int rslt; + OperPacket sendPacket; + int size = sizeof(u32)*PARA_NUM; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.boardPara.cmdCode = UCMD_SET_HEAD_PARA; + sendPacket.boardPara.nodeId = id; + sendPacket.boardPara.nodeType = WIREHEAD; + rslt = packetAVLDP(&sendPacket.packet, (u8*)¶.paraBuf, size); + + if (rslt == 0) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET + size); + emit(siSendData(dat)); + } +} + +void Machine::setMcPara(ParaStruct * pPara) +{ + if (pPara == NULL) + { + return; + } + int size = sizeof(ParaStruct); + memcpy(&m_mcPara, pPara, size); + setParasToMachine(SEW_MCPARA_MACH, m_mcPara); +} + +void Machine::setWkPara(ParaStruct * pPara) +{ + if (pPara == NULL) + { + return; + } + int size = sizeof(ParaStruct); + memcpy(&m_wkPara, pPara, size); + setParasToMachine(SEW_MCPARA_WORK, m_wkPara); +} + +void Machine::setMcPrePara(ParaStruct *pPara) +{ + if (pPara == NULL) + { + return; + } + int size = sizeof(ParaStruct); + memcpy(&m_mcPrePara, pPara, size); + setParasToMachine(SEW_REVMCPARA_MACH, m_mcPrePara); +} + +void Machine::setWkPrePara(ParaStruct *pPara) +{ + if (pPara == NULL) + { + return; + } + int size = sizeof(ParaStruct); + memcpy(&m_wkPrePara, pPara, size); + setParasToMachine(SEW_REVMCPARA_WORK, m_wkPrePara); +} + +//动框角度参数设置 +void Machine::setFrameAnglePara(EmbMvAng *pPara) +{ + if (pPara == NULL) + { + return; + } + int size = sizeof(EmbMvAng); + memcpy(&m_frameAnglePara, pPara, size); + setFrameAngleParasToMachine(MVSTANG_PARA, m_frameAnglePara); +} + +void Machine::setAMcPara(int id, u32 value) +{ + setAParasToMachine(SEW_MCPARA_MACH, id, value); +} + +void Machine::setAWkPara(int id, u32 value) +{ + setAParasToMachine(SEW_MCPARA_WORK, id, value); +} + +void Machine::setAMcPrePara(int id, u32 value) +{ + setAParasToMachine(SEW_REVMCPARA_MACH, id, value); +} + +void Machine::setAWkPrePara(int id, u32 value) +{ + setAParasToMachine(SEW_REVMCPARA_WORK, id, value); +} + +//设置机头板参数 +void Machine::setHeadBoardPara(HeadInfo *pPara, int id) +{ + int temp = 0; + if (pPara == NULL) + { + return; + } + int size = sizeof(HeadInfo); + + if (id == 0) + { + temp = 1; // 广播时以第一个机头板的参数为准 + } + else + { + temp = id; + } + + memcpy(&m_exboardInfo.headInfo[temp-1], pPara, size); + setEXBHeadParasToMachine(m_exboardInfo.headInfo[temp-1], id); +} + +//设置机头参数 +void Machine::setHeadPara(ParaStruct *pPara,u16 ID) +{ + if (pPara == NULL && ID == 0) + { + return; + } + ParaStruct headPara; + int size = sizeof(ParaStruct); + memcpy(&headPara, pPara, size); + //setHeadPatchParasToMachine(EMB_SEPTUM_DATA, headPara,ID); +} + +// 设置文件参数 +void Machine::setFilePara(int fileidx, int fileid, DataFilePara & filePara) +{ + int rslt; + OperPacket sendPacket; + int size = sizeof(DataFilePara); + + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.setFileParas.cmdCode = UCMD_SET_FILE_PARAS; + sendPacket.setFileParas.fileType = FILE_TYPE_DAT; + sendPacket.setFileParas.fileIdx = (u8)fileidx; + sendPacket.setFileParas.fileId = (u16)fileid; + + rslt = packetAVLDP(&sendPacket.packet, (u8*)&filePara, size); + + if (rslt == 0) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET + size); + emit(siSendData(dat)); + } +} + +// 设置执行进度 +void Machine::setFileExecProgress(int fileidx, int fileid, FileExecPara & fileExecPara) +{ + int rslt; + OperPacket sendPacket; + int size = sizeof(FileExecPara); + + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.setFileParas.cmdCode = UCMD_SET_EXEC_PROGRESS; + sendPacket.setFileParas.fileType = FILE_TYPE_DAT; + sendPacket.setFileParas.fileIdx = (u8)fileidx; + sendPacket.setFileParas.fileId = (u16)fileid; + + rslt = packetAVLDP(&sendPacket.packet, (u8*)&fileExecPara, size); + if (rslt == 0) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET + size); + emit(siSendData(dat)); + } +} + +// 设置默认参数 +void Machine::setToDefaultParas(int type, u8 id, u8 nodeType) +{ + int rslt; + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.setDefParas.cmdCode = (u16)type; + sendPacket.setDefParas.id = id; + sendPacket.setDefParas.nodeType = nodeType; + rslt = packetAFLDP(&sendPacket.packet); + + if(rslt != 0) + { + //为了去掉构建警告 + } + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +//------------------------------------------------------------------- +// 手动动作 +void Machine::actionByhand(int actcode, int para1, int para2, int para3) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.actByhand.cmdCode = UCMD_ACT_BYHAND; + sendPacket.actByhand.actCode = (u16)actcode; + sendPacket.actByhand.para1 = (u16)para1; + sendPacket.actByhand.para2 = (u16)para2; + sendPacket.actByhand.para3 = (u16)para3; + + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} +//------------------------------------------------------------------- + +// 电机归零(辅助调试的功能,无安全保护和逻辑关系) +void Machine::motoToZero(int obj) +{ + actionByhand(MOTO_TO_ZERO, obj); +} + +// 电机移动(辅助调试的功能,无安全保护和逻辑关系) +void Machine::motoMove(int obj, int dir, int spd) +{ + actionByhand(MOVE_BY_HAND, obj, dir, spd); +} + +// 输出控制(辅助调试的功能,无安全保护和逻辑关系) +void Machine::outputCtrl(int obj, int act, int para) +{ + actionByhand(OUTPUT_CTRL, obj, act, para); +} + +// 电机使能控制(辅助调试的功能,无安全保护和逻辑关系) +void Machine::motoServoCtrl(int obj, int onoff) +{ + actionByhand(MOTO_EN_CTRL, obj, onoff); +} + +void Machine::sewingMsServoOn() +{ + motoServoCtrl(MT_LM, MT_SERVO_ON); +} + +void Machine::sewingMsServoOff() +{ + motoServoCtrl(MT_LM, MT_SERVO_OFF); +} + +void Machine::sewingMsRun() +{ + manualAction(SEWING_MS_RUN); +} + +void Machine::punchMsServoOn() +{ + motoServoCtrl(MT_LPM, MT_SERVO_ON); +} + +void Machine::punchMsServoOff() +{ + motoServoCtrl(MT_LPM, MT_SERVO_OFF); +} + +void Machine::punchMsRun() +{ + manualAction(PUNCH_MS_RUN); +} + +void Machine::embMsServoOn() +{ + motoServoCtrl(MT_LEM, MT_SERVO_ON); +} + +void Machine::embMsServoOff() +{ + motoServoCtrl(MT_LEM, MT_SERVO_OFF); +} + +void Machine::embMsRun() +{ + manualAction(EMB_MS_RUN); +} + +void Machine::punchJog() +{ + manualAction(PUNCH_MS_JOG); +} + +// 冲孔换刀 +void Machine::punchSwitchNeedle(int nNum) +{ + manualAction(PUNCH_SW_KN, nNum); +} + +// 绣花换色 +void Machine::embSwitchNeedle(int nNum) +{ + manualAction(EMB_SW_COLOR, nNum); +} + +void Machine::singlePunch() +{ + manualAction(PUNCH_MS_POH); +} + +void Machine::punchMsDown() +{ + manualAction(PUNCH_MS_CD); +} + +void Machine::punchDrawOutline() +{ + manualAction(PUNCH_DRAW_OUTLINE); +} + +void Machine::continuousOilSupply() +{ + manualAction(PUNCH_CON_OIL); +} + +void Machine::sewJog() +{ + manualAction(SEWING_MS_JOG); +} + +void Machine::embJog() +{ + manualAction(EMB_MS_JOG); +} + +void Machine::hookPos() +{ + manualAction(NEEDLE_TO_CUSP); +} + +void Machine::embHookPos() +{ + manualAction(EMB_TO_CUSP); +} + +void Machine::rotateProofread() +{ + manualAction(ROTATE_ADJUST); +} + +void Machine::sewHeadLift() +{ + manualAction(SEW_HEAD_LIFT); +} + +// 手动动作功能(日常使用功能,有安全保护和逻辑时序关系) +void Machine::manualAction(int obj, int para2, int para3) +{ + actionByhand(MANUAL_ACTION, obj, para2, para3); +} + +// 定工作范围 +void Machine::setWorkRange() +{ + manualAction(SET_WORK_AREA); +} + + // 自动定工作范围 +void Machine::autoSetWorkRange() +{ + manualAction(AUTO_SET_RANGE); +} + +// 手动加油 +void Machine::manualOil(int nNum) +{ + mcWorkCmd(WORK_ACT_OIL,nNum); +} + +// 手动移框 +void Machine::moveFrameByHand(char xy, char dir, int spd) +{ + int para1, para2; + + if (xy == 'x' || xy == 'X') + { + if (dir == 'l' || dir == 'L') + { + para1 = XY_MOVE_LEFT; + } + else if (dir == 'r' || dir == 'R') + { + para1 = XY_MOVE_RIGHT; + } + else + { + para1 = XY_MOVE_STOP; + } + } + else if (xy == 'y' || xy == 'Y') + { + if (dir == 'f' || dir == 'F') + { + para1 = XY_MOVE_FRONT; + } + else if (dir == 'b' || dir == 'B') + { + para1 = XY_MOVE_BACK; + } + else + { + para1 = XY_MOVE_STOP; + } + } + else + { + para1 = XY_MOVE_STOP; + } + + para2 = spd; + manualAction(para1, para2); +} + + +// 主轴点动 +void Machine::spindleJog() +{ + manualAction(MS_JOG); +} + +void Machine::spindleTest(s32 para1, s32 para2) +{ + manualAction(WIRE_MS_RUN, para1, para2); +} + +//显示M轴绝对值编码器值 +void Machine::encoderVal(int para) +{ + manualAction(SHOW_M_ABSECD_VAL, para); +} + +// 剪上线 +void Machine::cutThreadUp() +{ + manualAction(CUT_UP); +} + +// 剪下线 +void Machine::cutThreadDn() +{ + manualAction(CUT_DOWN); +} + +void Machine::testADC(int num) +{ + manualAction(TEST_ADC_POTVAL,num); +} + +//遍历设置(进入遍历状态和退出遍历状态、断线检测、退出勾刀测试) +void Machine::enterOrExitStates(int obj, int para1, int para2, int para3, int para4) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.traverse.cmdCode = obj; + sendPacket.traverse.protocolType = (u8)para1; + sendPacket.traverse.nodeType = (u8)para2; + sendPacket.traverse.traNum = (u8)para3; + sendPacket.traverse.nodeId = (u8)para4; + + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +//------------------------------------------------------- +#ifdef UCMD_MC_WORK + +void Machine::mcWorkCmd(int workcode, int para1, int para2) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.mcWork.cmdCode = UCMD_MC_WORK; + sendPacket.mcWork.workCode = (u16)workcode; + sendPacket.mcWork.para1 = (u32)para1; + sendPacket.mcWork.para2 = (u16)(para2); + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +// 启动工作 +void Machine::startWork() +{ + mcWorkCmd(WORK_START); +} + +// 暂停工作 +void Machine::pauseWork() +{ + mcWorkCmd(WORK_PAUSE); +} + +// 流程复位(结束工作) +void Machine::allToReset() +{ + mcWorkCmd(WORK_FINISH); +} + +// 自动找零(全部归零) +void Machine::allToZero() +{ + mcWorkCmd(WORK_FIND_ZERO); +} + +// 回起针点 +void Machine::gotoStartPos() +{ + mcWorkCmd(WORK_GOTO_START); +} + +// 边框检查 +void Machine::checkFrame() +{ + mcWorkCmd(WORK_CHECK_FRAME); +} + +void Machine::sewCutThread(int nNum) +{ + manualAction(CUT_THREAD,0,nNum); // 加0的原因是主控上用的是para3 +} + +void Machine::embCutThread() +{ + manualAction(EMB_CUT_THREAD); // 加0的原因是主控上用的是para3 +} + +// 空走边框 +void Machine::simulateFrame() +{ + mcWorkCmd(WORK_SIMULATION_FRAME); +} + +//进入匹绣 +void Machine::enterClothEmbroidery() +{ + //manualAction(EMB_ENTER_CLOTH); +} + +//退出匹绣 +void Machine::exitClothEmbroidery() +{ + //manualAction(EMB_EXIT_CLOTH); +} +//自动定起点 +void Machine::autoSetStart() +{ + manualAction(AUTO_SET_START); +} + +// 定偏移点 +void Machine::setOffsetPos() +{ + mcWorkCmd(WORK_SET_OFFSET); +} + +// 回偏移点 +void Machine::gotoOffsetPos() +{ + mcWorkCmd(WORK_GOTO_OFFSET); +} + +void Machine::punchRotToZero() +{ + manualAction(PUNCH_ROT_TO_ZERO); +} + +// 回上料点 +void Machine::gotoFeedPos() +{ + mcWorkCmd(WORK_GOTO_FEED); +} + +// 机头切换 +void Machine::headSwitch(int para) +{ + manualAction(CHANGE_WORK_HEAD,para); +} + +// 针梭校对 +// step是指执行针梭校对的第几步 +// 1表示高位提升 2表示梭归零, 3表示针归零 4表示针梭复位 0表示自动执行步骤1234 +void Machine::msAdjust(int step) +{ + manualAction(MAINSHAFT_ADJUST, step); +} + +// 手动旋转 +void Machine::moveRotByHand(char dir, int spd) +{ + int para1, para2; + + if (dir == 'p' || dir == 'P') + { + para1 = ROT_MOVE_POSI; + } + else if (dir == 'n' || dir == 'N') + { + para1 = ROT_MOVE_MEGA; + } + else + { + para1 = ROT_MOVE_STOP; + } + + para2 = spd; + manualAction(para1, para2); +} + +//自动定软限位 +void Machine::autoSetSoftLimit() +{ + manualAction(XY_AUTO_SOFTLIMIT); +} + +/* +#define WORK_CUT_FRAME 0x0009 // 边框切割 +#define WORK_CUT_XLINE 0x000A // 手动断布 +*/ + +// 快速进退 +void Machine::fastJump(int idx) +{ + mcWorkCmd(WORK_FAST_JUMP, idx); +} + +// 回工作点 +void Machine::gotoWorkPos() +{ + mcWorkCmd(WORK_GOTO_WKPOS); +} + +// 回定位点 +void Machine::gotoAnchorPos() +{ + mcWorkCmd(WORK_GOTO_ANCHOR); +} + +// 回穿线点 +void Machine::gotoThreadPos() +{ + mcWorkCmd(WORK_GOTO_FEEDT); +} + +void Machine::gotoCenterPos() +{ + mcWorkCmd(WORK_GOTO_FRMMP); +} + +void Machine::gotoShuttlePos() +{ + mcWorkCmd(WORK_GOTO_CHGBO); +} + +/* +#define WORK_GOTO_CHGBO 0x000E // 回换梭位 +#define WORK_FEED_MOVE 0x000F // 进料退料 +#define WORK_DRAW_LATTICE 0x0010 // 画格子图 +#define WORK_GOTO_FINISH 0x0011 // 回结束点 +*/ + +// 回零点(框架归零) +void Machine::gotoZeroPos() +{ + mcWorkCmd(WORK_GOTO_ZERO); +} + +// 回角点 +void Machine::gotoGorner(int nNum) +{ + mcWorkCmd(WORK_GOTO_GORNER,nNum); +} + +//机头板总线检测 +void Machine::headBoardBusDetect() +{ + manualAction(CHECK_CANBUS); +} + +// 速度改变 +// chgram 主轴转速改变值。例如:参数为10表示速度加10(升速),参数为-10表示速度减10(降速) +void Machine::msRpmChange(int chgram, int flag) +{ + mcWorkCmd(WORK_RPM_CHG, chgram, flag); +} +#endif + +//---------------------------- +// 移动到XY坐标命令 +void Machine::moveFrameTo(int x, int y) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.moveFrameTo.cmdCode = UCMD_MOVE_TO; + sendPacket.moveFrameTo.posx = x; + sendPacket.moveFrameTo.posy = y; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +void Machine::breakFileTrans() +{ + m_transBreak = 1; +} + +#define SEND_STEP0 0 +#define SEND_STEP1 1 +#define SEND_STEP2 2 +#define SEND_STEP3 3 +#define SEND_STEP4 4 +#define SEND_STEP5 5 + +#define SEND_STEP_MAX 10 + +#define SEND_ANSWER 100 + +void Machine::onSendTimer(void) +{ + int rslt; + rslt = 0; + + //qDebug("file trans timer"); + + if (m_transBreak != 0) // 中断传输 + { + qDebug("break file trans"); + m_transCtrl.transphase = SEND_STEP5; + } + + if (m_transCtrl.transphase == SEND_STEP0) // 文件失效 + { + m_fileTransEn = 0; + qDebug("SEND_STEP1 InvalidateWorkFile "); + invalidateWorkFile(m_transCtrl.fileIdx); // 文件失效 + m_transCtrl.transphase = SEND_STEP1; + rslt = 1; + } + else if (m_transCtrl.transphase == SEND_STEP1) // 启动文件传输 + { + m_fileTransEn = 0; + startFileTrans(m_transCtrl); + + qDebug("StartFileTrans "); + + qDebug("trans progress %d/%d", 0, m_transCtrl.packetNum); + m_totalSendNum = 0; + m_totalPacketNum = m_transCtrl.packetNum; + emit(siTransProgress(m_transCtrl.fileType, m_totalSendNum, m_totalPacketNum)); // 发送进度信号 + m_transCtrl.transphase = SEND_STEP2; + rslt = 1; + + if (m_transCtrl.fileType == FILE_TYPE_BOARD) + { + //如果是外围板升级需要增加延时,等待外围板noflash擦除 + QDateTime oldTime, curTime; + oldTime = QDateTime::currentDateTime(); + while(1) + { + curTime = QDateTime::currentDateTime(); + if(oldTime.msecsTo(curTime) > 6000) + { + break; + } + } + } + } + else if (m_transCtrl.transphase == SEND_STEP2) // 读取传输结果 + { + qDebug("SEND_STEP2 send GetTransResult cmd "); + + m_fileTransEn = 0; + getTransResultFromMachine(m_transCtrl.fileId); + m_transCtrl.transphase = SEND_STEP3; + rslt = 1; + } + else if (m_transCtrl.transphase == SEND_STEP3) // 根据传输结果传输文件数据 + { + if (m_fileTransEn == 1) + { + qDebug("GetTransResult from machine"); + + if (m_transCtrl.transActive == TRANS_ACTIVE) + { + if ( m_transCtrl.transflag == TRANS_READY || // 准备好接收 + m_transCtrl.transflag == TRANS_DOING || // 正在接收 + 0 ) + { + qDebug("trans sta = TRANS_READY or TRANS_DOING flag=%d", m_transCtrl.transflag); + +#if (1) + int i, j; + int thissendnum = 0; + int totalsendnum = 0; + int send_count = 1000; + +#if(1)//发一个包查询一次结果 + if ( m_transCtrl.fileType == FILE_TYPE_DAT )//花样文件(大文件) + { + if(m_connectMode == USE_TCP_COMM)//网口 + { + send_count = 400; + } + else if(m_connectMode == USE_SERIAL_COMM)//串口 + { + send_count = 10; + } + } + else if ( m_transCtrl.fileType == FILE_TYPE_PGM || //升级等文件(小文件) + m_transCtrl.fileType == FILE_TYPE_FRAME || + m_transCtrl.fileType == FILE_TYPE_BOARD ) + { + send_count = 25; + } +#endif + + u8 mod, temp; + for (i = 0; i < m_transCtrl.lenBmp; i++) + { + temp = m_transCtrl.rsvBitmap[i]; + mod = 0x01; + for (j = 0; j < 8; j++) + { + if ((temp & mod) == 0) + { + if (thissendnum < send_count ) // 每发送send_count个包,查询一次结果 + { + thissendnum++; + + transFileData(m_transCtrl, i*8+j); + + if (m_transCtrl.fileType == FILE_TYPE_BOARD) + { + //如果是外围板升级需要增加延时,否则主控和外围板CAN缓存区会溢出 + QDateTime oldTime, curTime; + oldTime = QDateTime::currentDateTime(); + while(1) + { + curTime = QDateTime::currentDateTime(); + if(oldTime.msecsTo(curTime) > 100) + { + break; + } + } + } + } + } + else + { + totalsendnum++; + } + mod <<= 1; + } + } + m_totalSendNum = totalsendnum; + m_totalPacketNum = m_transCtrl.packetNum; + emit(siTransProgress(m_transCtrl.fileType, m_totalSendNum, m_totalPacketNum)); // 发送进度信号 + m_transCtrl.transphase = SEND_STEP2; // 重新发送查询命令 +#else + int i, j; + int thissendnum = 0; + int totalsendnum = 0; + u8 mod, temp; + for (i = 0; i < m_transCtrl.lenBmp; i++) + { + temp = m_transCtrl.rsvBitmap[i]; + mod = 0x01; + for (j = 0; j < 8; j++) + { + if ((temp & mod) == 0) + { + if (thissendnum < 200) // 每发送200个包,查询一次结果, + { + thissendnum++; + TransFileData(m_transCtrl, i*8+j); + qDebug("TransFileData idx=%d", i*8+j); + } + } + else + { + totalsendnum++; + } + mod <<= 1; + } + } + qDebug("trans progress = %d/%d", totalsendnum , m_transCtrl.packetNum); + + emit(SiTransProgress(totalsendnum, m_transCtrl.packetNum)); // 发送进度信号 + m_transCtrl.transphase = SEND_STEP2; // 重新发送查询命令 +#endif + } + else if (m_transCtrl.transflag == TRANS_DONE) // 接收完成 + { + qDebug("trans sta = TRANS_DONE"); + + emit siSendDataDone(); + + m_totalSendNum = m_transCtrl.packetNum; + m_totalPacketNum = m_transCtrl.packetNum; + emit(siTransProgress(m_transCtrl.fileType, m_totalSendNum, m_totalPacketNum)); // 发送进度信号 + m_transCtrl.transphase = SEND_STEP4; + + //qDebug()<<"m_transCtrl.fileType"<protocol, m_transCtrl.pBoardHead->nodeid,m_transCtrl.pBoardHead->nodeType); + } + } + else if (m_transCtrl.transflag == TRANS_REQUEST) // 请求传输数据模式 + { + qDebug("trans sta = TRANS_REQUEST, sta=%d", m_transCtrl.transflag); + m_transCtrl.transphase = SEND_ANSWER; + } + else // if (m_transCtrl.transflag == TRANS_NOT_BEG) // 没有收到启动命令 + { + qDebug("trans sta = TRANS_NOT_BEG, sta=%d, back to SEND_STEP1", m_transCtrl.transflag); + m_transCtrl.transphase = SEND_STEP1; // 重新发送启动文件传输 + } + } + else + { + qDebug("transActive != TRANS_ACTIVE, back to SEND_STEP1 "); + m_transCtrl.transphase = SEND_STEP1; // 重新发送启动文件传输 + } + rslt = 1; + } + else + { + if (m_transCtrl.waitcount > SEND_STEP_MAX) // 1秒没有回复 + { + qDebug("waitcount > SEND_STEP_MAX, back to SEND_STEP2 "); + m_transCtrl.transphase = SEND_STEP2; // 重新发送查询命令 + rslt = 1; + } + } + } + + if (rslt == 0) + { + m_transCtrl.waitcount++; + } + else + { + m_transCtrl.waitcount = 0; + } + + if ( m_transCtrl.transphase != SEND_STEP1 && + m_transCtrl.transphase != SEND_STEP2 && + m_transCtrl.transphase != SEND_STEP3 ) // 结束 + { + qDebug("trans file over, step=%d", m_transCtrl.transphase); + if (m_transCtrl.transphase == SEND_STEP4) + { + m_totalSendNum = 0; + m_totalPacketNum = 0; + emit(siTransProgress(m_transCtrl.fileType, m_totalSendNum, m_totalPacketNum)); // 发送结束信号(成功) + } + else + { + m_totalSendNum = -1; + m_totalPacketNum = -1; + emit(siTransProgress(m_transCtrl.fileType, m_totalSendNum, m_totalPacketNum)); // 发送结束信号(失败) + } + m_pSendTimer->stop(); // 停止定时器 + m_transCtrl.filetransing = 0; + } +} + +//串口是否打开 +void Machine::slIfOpenSerialPort(int val) +{ + if(val != 0) + { + if(m_connectMode == USE_SERIAL_COMM) + { + m_connected = 3;//串口已打开 + } + } +} + +// 发送文件过程 +int Machine::sendFileProc(int type, int idx, int id, DataDs16FileHead & fileHead, u8 * pDatBuff) +{ + return sendFileProc(type, idx, id, &fileHead, pDatBuff); +} + +int Machine::sendFileProc(int type, int idx, int id, DataDs16FileHead * pfileHead, u8 * pDatBuff) +{ + if (pDatBuff == NULL || pfileHead == NULL) + { + return -1; + } + + if ( pfileHead->dataSize <= 0 || pfileHead->dataSize > MAX_FILE_SIZE) + { + qDebug("pfileHead->dataSize <= 0 || pfileHead->dataSize > MAX_FILE_SIZE, not support"); + return -2; + } + + QTime delayTime; + int counter = 0; + delayTime.start(); + + if (m_transCtrl.filetransing != 0) // 已经有文件在传输 + { + return -3; + } + + while (m_transCtrl.filetransing != 0) // 已经有文件在传输 + { + if (delayTime.elapsed() > 1000) + { + counter++; + qDebug("%d. wait old file trans over", counter); + delayTime.restart(); + } + + QCoreApplication::processEvents(QEventLoop::AllEvents, 100); + } + + m_transBreak = 0; + + m_transCtrl.fileType = (u8)type; + m_transCtrl.fileIdx = (u8)idx; + m_transCtrl.fileId = (u16)id; + memcpy(m_transCtrl.pFileHead, pfileHead, sizeof(DataDs16FileHead)); + memcpy(m_transCtrl.pDatBuff, pDatBuff, pfileHead->dataSize); + m_transCtrl.packetSize = MAX_EXDP_LEN; + m_transCtrl.packetNum = (pfileHead->dataSize + MAX_EXDP_LEN - 1) / MAX_EXDP_LEN; + + qDebug("StartFileTrans, fileType=%d, fileIdx=%d, fileId=%d, packetNum=%d, ", + m_transCtrl.fileType, m_transCtrl.fileIdx, m_transCtrl.fileId, m_transCtrl.packetNum); + + m_transCtrl.transphase = SEND_STEP1; + m_transCtrl.filetransing = 1; + + m_pSendTimer->start(); + return 0; +} + +// 发送文件过程 +int Machine::sendAPPFileProc(int type, int idx, int id, AppFileHead & fileHead, u8 * pDatBuff) +{ + if (pDatBuff == NULL || fileHead.dataSize <= 0) + { + return -1; + } + + if (fileHead.dataSize > MAX_FILE_SIZE) + { + qDebug("fileHead.dataSize > MAX_FILE_SIZE, not support"); + return -2; + } + + QTime delayTime; + int counter = 0; + delayTime.start(); + + while (m_transCtrl.filetransing != 0) // 已经有文件在传输 + { + if (delayTime.elapsed() > 1000) + { + counter++; + qDebug("%d. wait old file trans over", counter); + delayTime.restart(); + } + + QCoreApplication::processEvents(QEventLoop::AllEvents, 100); + } + + m_transBreak = 0; + + // 拷贝数据到传输控制结构 + m_transCtrl.fileType = (u8)type; + m_transCtrl.fileIdx = (u8)idx; + m_transCtrl.fileId = (u16)id; + memcpy(m_transCtrl.pAppHead, &fileHead, sizeof(AppFileHead)); + memcpy(m_transCtrl.pDatBuff, pDatBuff, fileHead.dataSize); + m_transCtrl.packetSize = MAX_EXDP_LEN; + m_transCtrl.packetNum = (fileHead.dataSize + MAX_EXDP_LEN - 1 ) / MAX_EXDP_LEN; + + qDebug("StartFileTrans, fileType=%d, fileIdx=%d, fileId=%d, packetNum=%d, ", + m_transCtrl.fileType, m_transCtrl.fileIdx, m_transCtrl.fileId, m_transCtrl.packetNum); + + m_transCtrl.transphase = SEND_STEP1; + m_transCtrl.filetransing = 1; + + // 启动定时器 + m_pSendTimer->start(); + return 0; +} + +// 发送外围板文件过程 +int Machine::sendBoardFileProc(int type, int idx, int id, BoardFileHead & fileHead, u8 * pDatBuff) +{ + if (pDatBuff == NULL || fileHead.dataSize <= 0) + { + return -1; + } + + if (fileHead.dataSize > MAX_FILE_SIZE) + { + qDebug("fileHead.dataSize > MAX_FILE_SIZE, not support"); + return -2; + } + + QTime delayTime; + int counter = 0; + delayTime.start(); + + while (m_transCtrl.filetransing != 0) // 已经有文件在传输 + { + if (delayTime.elapsed() > 1000) + { + counter++; + qDebug("%d. wait old file trans over", counter); + delayTime.restart(); + } + + QCoreApplication::processEvents(QEventLoop::AllEvents, 100); + } + + m_transBreak = 0; + + // 拷贝数据到传输控制结构 + m_transCtrl.fileType = (u8)type; + m_transCtrl.fileIdx = (u8)idx; + m_transCtrl.fileId = (u16)id; + memcpy(m_transCtrl.pBoardHead, &fileHead, sizeof(BoardFileHead)); + memcpy(m_transCtrl.pDatBuff, pDatBuff, fileHead.dataSize); + m_transCtrl.packetSize = MAX_EXDP_LEN; + m_transCtrl.packetNum = (fileHead.dataSize + MAX_EXDP_LEN - 1 ) / MAX_EXDP_LEN; + + qDebug("StartFileTrans, fileType=%d, fileIdx=%d, fileId=%d, packetNum=%d, ", + m_transCtrl.fileType, m_transCtrl.fileIdx, m_transCtrl.fileId, m_transCtrl.packetNum); + + m_transCtrl.transphase = SEND_STEP1; + m_transCtrl.filetransing = 1; + + // 启动定时器 + m_pSendTimer->start(); + return 0; +} + +// 启动文件传输 +void Machine::startFileTrans(FileTransCtrl & transCtrl) +{ + int rslt; + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.startTrans.cmdCode = UCMD_START_TRANS; + sendPacket.startTrans.fileType = transCtrl.fileType; + sendPacket.startTrans.fileIdx = transCtrl.fileIdx; + sendPacket.startTrans.fileId = transCtrl.fileId; + + if( transCtrl.fileType == FILE_TYPE_DAT || transCtrl.fileType == FILE_TYPE_FRAME) + { + rslt = packetAVLDP(&sendPacket.packet, (u8*)transCtrl.pFileHead, sizeof(DataDs16FileHead)); + } + else if( transCtrl.fileType == FILE_TYPE_PGM ) + { + rslt = packetAVLDP(&sendPacket.packet, (u8*)transCtrl.pAppHead, sizeof(AppFileHead)); + } + else if ( transCtrl.fileType == FILE_TYPE_BOARD ) + { + rslt = packetAVLDP(&sendPacket.packet, (u8*)transCtrl.pBoardHead, sizeof(BoardFileHead)); + } + else + { + return ; + } + + if (rslt == 0) + { + if( transCtrl.fileType == FILE_TYPE_DAT || transCtrl.fileType == FILE_TYPE_FRAME) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET+sizeof(DataDs16FileHead)); + emit(siSendData(dat)); + } + else if( transCtrl.fileType == FILE_TYPE_PGM ) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET+sizeof(AppFileHead)); + emit(siSendData(dat)); + } + else if ( transCtrl.fileType == FILE_TYPE_BOARD ) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET+sizeof(BoardFileHead)); + emit(siSendData(dat)); + } + } +} + +// 文件数据传输 +void Machine::transFileData(FileTransCtrl & transCtrl, int pktidx) +{ + int rslt; + int actsize; + u8 buff[MAX_EXDP_LEN]; + + if (pktidx < 0 || transCtrl.pDatBuff == NULL) + { + return; + } + + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.transFileData.cmdCode = UCMD_TRANS_FILE_DATA; + sendPacket.transFileData.fileId = transCtrl.fileId; + sendPacket.transFileData.pktIdx = pktidx; + + if (pktidx < (int)transCtrl.packetNum) + { + if( transCtrl.fileType == FILE_TYPE_DAT || transCtrl.fileType == FILE_TYPE_FRAME) + { + actsize = transCtrl.pFileHead->dataSize - pktidx*transCtrl.packetSize; + + if (actsize >= transCtrl.packetSize) + { + actsize = transCtrl.packetSize; + } + else + { + memset(buff, 0, MAX_EXDP_LEN); + } + } + else if( transCtrl.fileType == FILE_TYPE_PGM ) + { + actsize = transCtrl.pAppHead->dataSize - pktidx*transCtrl.packetSize; + + if (actsize >= transCtrl.packetSize) + { + actsize = transCtrl.packetSize; + } + else + { + memset(buff, 0XFF, MAX_EXDP_LEN); + } + } + else if ( transCtrl.fileType == FILE_TYPE_BOARD ) + { + actsize = transCtrl.pBoardHead->dataSize - pktidx*transCtrl.packetSize; + + if (actsize >= transCtrl.packetSize) + { + actsize = transCtrl.packetSize; + } + else + { + memset(buff, 0XFF, MAX_EXDP_LEN); + } + } + else + { + actsize = 0; + } + + memcpy(buff, &(transCtrl.pDatBuff[pktidx*transCtrl.packetSize]), actsize); + //qDebug("TransFileData pktidx=%d", pktidx); +#if (0) + int i; + for (i = 0; i < MAX_EXDP_LEN/16; i++) + { + qDebug("0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x", + buff[i*16+0], buff[i*16+1],buff[i*16+2],buff[i*16+3],buff[i*16+4],buff[i*16+5],buff[i*16+6],buff[i*16+7], + buff[i*16+8],buff[i*16+9],buff[i*16+10],buff[i*16+11],buff[i*16+12],buff[i*16+13],buff[i*16+14],buff[i*16+15]); + } + +#endif + rslt = packetAVLDP(&sendPacket.packet, buff, MAX_EXDP_LEN); + if (rslt == 0) + { + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET+MAX_EXDP_LEN); + emit(siSendData(dat)); + } + } +} + +// 下位机升级 +void Machine::updateFirmware() +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.mcUpdate.cmdCode = UCMD_MC_UPDATE; + sendPacket.mcUpdate.upObj = 0; + sendPacket.mcUpdate.upFileID = 0; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +// 外围板升级 +void Machine::updateExBoard(u8 protocolType, u8 nodeId,u8 nodeType) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.updateBoard.cmdCode = UCMD_BOARD_UPDATE; + sendPacket.updateBoard.protocolType = protocolType; + sendPacket.updateBoard.nodeId = nodeId; + sendPacket.updateBoard.nodeType = nodeType; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +// 恢复出厂设置 +void Machine::restoreFactorySetting(int type) +{ + int mctype = -1; + int wktype = -1; + if (type == -1) + { + mctype = SEW_MCPARA_DEF_MC; + wktype = SEW_MCPARA_DEF_WK; + m_mcParaEn = 0; + m_wkParaEn = 0; + } + else + { + if(type == SEW_MCPARA_DEF_MC ) + { + mctype = SEW_MCPARA_DEF_MC; + m_mcParaEn = 0; + } + if(type == SEW_MCPARA_DEF_WK ) + { + wktype = SEW_MCPARA_DEF_WK; + m_wkParaEn = 0; + } + } + + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.getMcParas.cmdCode = UCMD_GET_MC_PARAS; + + if (mctype == SEW_MCPARA_DEF_MC) + { + sendPacket.getMcParas.paraType = (u16)mctype; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); + } + + if (wktype == SEW_MCPARA_DEF_WK) + { + sendPacket.getMcParas.paraType = (u16)wktype; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); + } + + sleep(3); + setMcPara(&m_mcPara); + setWkPara(&m_wkPara); + setMcPara(&m_mcPrePara); + setWkPara(&m_wkPrePara); +} + +void Machine::sleep(int sec) +{ + QTime dieTime = QTime::currentTime().addSecs(sec);//延时sec秒 + //QTime dieTime = QTime::currentTime().addMSecs(msec);//延时msec毫秒 + while( QTime::currentTime() < dieTime ) + QCoreApplication::processEvents(QEventLoop::AllEvents, 100); +} + +void Machine::resetAll() +{ + manualAction(ALL_TO_RESET); +} + +void Machine::motorZeroing() +{ + manualAction(MOTO_TO_ZERO_YJ); +} + +void Machine::station1Gluing() +{ + manualAction(STATION1_START_GLUE); +} + +void Machine::station2Gluing() +{ + manualAction(STATION2_START_GLUE); +} + +void Machine::headUpDown() +{ + manualAction(HEAD_UP_DOWN); +} + +void Machine::toStation1Apos() +{ + manualAction(TO_STATION1_APOS); +} + +void Machine::toStation2Apos() +{ + manualAction(TO_STATION2_APOS); +} + +void Machine::toWaittingPos() +{ + manualAction(TO_WAITTING_POS); +} + +void Machine::toRemoveGluePos() +{ + manualAction(TO_REMOVE_GLUE_POS); +} + +void Machine::removeGlueOnce() +{ + manualAction(REMOVE_GLUE_ONCE); +} + +void Machine::adjustGlueHeight() +{ + manualAction(ADJUST_GLUE_HEGHT); +} + +//定量移框 +void Machine::quantityMoveFrame(s32 x, s32 y) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.moveFrameTo.cmdCode = UCMD_MOVE_OFST; + sendPacket.moveFrameTo.posx = x; + sendPacket.moveFrameTo.posy = y; + packetAFLDP(&sendPacket.packet); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +void Machine::setTcpConnectState(int state) +{ + if(state == 0){}//为了去掉串口下的构建警告 + if(m_connectMode == USE_TCP_COMM) + { + if(m_pTcpClient != NULL) + { + m_pTcpClient->m_connected = state; + } + } + else if(m_connectMode == USE_SERIAL_COMM)//串口 + { + //注释掉此行代码,因为串口发送文件较慢,若是超过5秒不给上位机返状态就会检测断开,其实并未断开 + //m_connected = state;//改变连接状态 + } +} + +// 设置经过的时间 +void Machine::setElapsed(unsigned char i_type , unsigned char i_time) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.setElapsedTime.cmdCode = UCMD_SET_ELAPSED_TIME; + + sendPacket.setElapsedTime.type = i_type ; + sendPacket.setElapsedTime.time = i_time ; + + packetAFLDP(&sendPacket.packet); + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET); + emit(siSendData(dat)); +} + +// 测试断线检测,1是面线,2是底线 +void Machine::testThreadBK(int type,int needle) +{ + actionByhand(TEST_THREADBK, type, needle); +} + +// 设置机器的密钥 +void Machine::setMacKey(unsigned char * p_dat , int i_size) +{ + OperPacket sendPacket; + memset(&sendPacket, 0, sizeof(OperPacket)); + sendPacket.setMacKey.cmdCode = UCMD_SET_INSTALLMENT; + + memcpy( sendPacket.setMacKey.exData , p_dat , i_size); + + packetAVLDP(&sendPacket.packet, (u8*)p_dat, i_size); + + QByteArray dat((char*)(&sendPacket.packet), LEN_NORMAL_PACKET + i_size ); + + emit(siSendData(dat)); +} + +//idx 现在默认是0,读第一个机头的机头板参数,方便以后读其他机头的机头板的参数 + HeadInfo* Machine::getHeadPara(int idx) +{ + int i; + for (i = 0; i < MAX_SUPPORT_N5; i++) + { + // 若广播,则读取相应节点类型的第一个节点 + if (idx <= 1) + { + break; + } + else + { + idx--; + } + } + if (i +#include +#include + +#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 + diff --git a/machine/qbindtcpsocket.cpp b/machine/qbindtcpsocket.cpp new file mode 100644 index 0000000..740c43f --- /dev/null +++ b/machine/qbindtcpsocket.cpp @@ -0,0 +1,186 @@ +#include "qbindtcpsocket.h" + +#include + +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; +} diff --git a/machine/qbindtcpsocket.h b/machine/qbindtcpsocket.h new file mode 100644 index 0000000..b433b66 --- /dev/null +++ b/machine/qbindtcpsocket.h @@ -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 + +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 diff --git a/machine/qextserial/posix_qextserialport.cpp b/machine/qextserial/posix_qextserialport.cpp new file mode 100644 index 0000000..ce92fae --- /dev/null +++ b/machine/qextserial/posix_qextserialport.cpp @@ -0,0 +1,1117 @@ + +/*! +\class Posix_QextSerialPort +\version 1.0.0 +\author Stefan Sander + +A cross-platform serial port class. +This class encapsulates the POSIX 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 _TTY_NOWARN_ will also turn off portability warnings. +*/ + +#include +#include "posix_qextserialport.h" + +/*! +\fn Posix_QextSerialPort::Posix_QextSerialPort() +Default constructor. Note that the name of the device 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 + Linux /dev/ttyS0, /dev/ttyS1 +\endverbatim + +This constructor assigns the device name to the name of the first port on the specified system. +See the other constructors if you need to open a different port. +*/ +Posix_QextSerialPort::Posix_QextSerialPort() +: QextSerialBase() +{ + Posix_File=new QFile(); +} + +/*! +\fn Posix_QextSerialPort::Posix_QextSerialPort(const Posix_QextSerialPort&) +Copy constructor. +*/ +Posix_QextSerialPort::Posix_QextSerialPort(const Posix_QextSerialPort& s) + : QextSerialBase(s.port) +{ + setOpenMode(s.openMode()); + port = s.port; + Settings.BaudRate=s.Settings.BaudRate; + Settings.DataBits=s.Settings.DataBits; + Settings.Parity=s.Settings.Parity; + Settings.StopBits=s.Settings.StopBits; + Settings.FlowControl=s.Settings.FlowControl; + lastErr=s.lastErr; + + Posix_File=new QFile(); + Posix_File=s.Posix_File; + memcpy(&Posix_Timeout, &s.Posix_Timeout, sizeof(struct timeval)); + memcpy(&Posix_Copy_Timeout, &s.Posix_Copy_Timeout, sizeof(struct timeval)); + memcpy(&Posix_CommConfig, &s.Posix_CommConfig, sizeof(struct termios)); +} + +/*! +\fn Posix_QextSerialPort::Posix_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". +*/ +Posix_QextSerialPort::Posix_QextSerialPort(const QString & name) + : QextSerialBase(name) +{ + Posix_File=new QFile(); +} + +/*! +\fn Posix_QextSerialPort::Posix_QextSerialPort(const PortSettings& settings) +Constructs a port with default name and specified settings. +*/ +Posix_QextSerialPort::Posix_QextSerialPort(const PortSettings& settings) + : QextSerialBase() +{ + setBaudRate(settings.BaudRate); + setDataBits(settings.DataBits); + setParity(settings.Parity); + setStopBits(settings.StopBits); + setFlowControl(settings.FlowControl); + + Posix_File=new QFile(); + setTimeout(settings.Timeout_Sec, settings.Timeout_Millisec); +} + +/*! +\fn Posix_QextSerialPort::Posix_QextSerialPort(const QString & name, const PortSettings& settings) +Constructs a port with specified name and settings. +*/ +Posix_QextSerialPort::Posix_QextSerialPort(const QString & name, const PortSettings& settings) + : QextSerialBase(name) +{ + setBaudRate(settings.BaudRate); + setDataBits(settings.DataBits); + setParity(settings.Parity); + setStopBits(settings.StopBits); + setFlowControl(settings.FlowControl); + + Posix_File=new QFile(); + setTimeout(settings.Timeout_Sec, settings.Timeout_Millisec); +} + +/*! +\fn Posix_QextSerialPort& Posix_QextSerialPort::operator=(const Posix_QextSerialPort& s) +Override the = operator. +*/ +Posix_QextSerialPort& Posix_QextSerialPort::operator=(const Posix_QextSerialPort& s) +{ + setOpenMode(s.openMode()); + port = s.port; + Settings.BaudRate=s.Settings.BaudRate; + Settings.DataBits=s.Settings.DataBits; + Settings.Parity=s.Settings.Parity; + Settings.StopBits=s.Settings.StopBits; + Settings.FlowControl=s.Settings.FlowControl; + lastErr=s.lastErr; + + Posix_File=s.Posix_File; + memcpy(&Posix_Timeout, &(s.Posix_Timeout), sizeof(struct timeval)); + memcpy(&Posix_Copy_Timeout, &(s.Posix_Copy_Timeout), sizeof(struct timeval)); + memcpy(&Posix_CommConfig, &(s.Posix_CommConfig), sizeof(struct termios)); + return *this; +} + +/*! +\fn Posix_QextSerialPort::~Posix_QextSerialPort() +Standard destructor. +*/ +Posix_QextSerialPort::~Posix_QextSerialPort() +{ + if (isOpen()) { + close(); + } + Posix_File->close(); + delete Posix_File; +} + +/*! +\fn void Posix_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. + +\note +BAUD76800 may not be supported on all POSIX systems. SGI/IRIX systems do not support +BAUD1800. + +\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 Posix_QextSerialPort::setBaudRate(BaudRateType baudRate) +{ + LOCK_MUTEX(); + if (Settings.BaudRate!=baudRate) { + switch (baudRate) { + case BAUD14400: + Settings.BaudRate=BAUD9600; + break; + + case BAUD56000: + Settings.BaudRate=BAUD38400; + break; + + case BAUD76800: + +#ifndef B76800 + Settings.BaudRate=BAUD57600; +#else + Settings.BaudRate=baudRate; +#endif + break; + + case BAUD128000: + case BAUD256000: + Settings.BaudRate=BAUD115200; + break; + + default: + Settings.BaudRate=baudRate; + break; + } + } + if (isOpen()) { + switch (baudRate) { + + /*50 baud*/ + case BAUD50: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 50 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B50; +#else + cfsetispeed(&Posix_CommConfig, B50); + cfsetospeed(&Posix_CommConfig, B50); +#endif + break; + + /*75 baud*/ + case BAUD75: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 75 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B75; +#else + cfsetispeed(&Posix_CommConfig, B75); + cfsetospeed(&Posix_CommConfig, B75); +#endif + break; + + /*110 baud*/ + case BAUD110: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B110; +#else + cfsetispeed(&Posix_CommConfig, B110); + cfsetospeed(&Posix_CommConfig, B110); +#endif + break; + + /*134.5 baud*/ + case BAUD134: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 134.5 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B134; +#else + cfsetispeed(&Posix_CommConfig, B134); + cfsetospeed(&Posix_CommConfig, B134); +#endif + break; + + /*150 baud*/ + case BAUD150: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 150 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B150; +#else + cfsetispeed(&Posix_CommConfig, B150); + cfsetospeed(&Posix_CommConfig, B150); +#endif + break; + + /*200 baud*/ + case BAUD200: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 200 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B200; +#else + cfsetispeed(&Posix_CommConfig, B200); + cfsetospeed(&Posix_CommConfig, B200); +#endif + break; + + /*300 baud*/ + case BAUD300: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B300; +#else + cfsetispeed(&Posix_CommConfig, B300); + cfsetospeed(&Posix_CommConfig, B300); +#endif + break; + + /*600 baud*/ + case BAUD600: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B600; +#else + cfsetispeed(&Posix_CommConfig, B600); + cfsetospeed(&Posix_CommConfig, B600); +#endif + break; + + /*1200 baud*/ + case BAUD1200: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B1200; +#else + cfsetispeed(&Posix_CommConfig, B1200); + cfsetospeed(&Posix_CommConfig, B1200); +#endif + break; + + /*1800 baud*/ + case BAUD1800: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows and IRIX do not support 1800 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B1800; +#else + cfsetispeed(&Posix_CommConfig, B1800); + cfsetospeed(&Posix_CommConfig, B1800); +#endif + break; + + /*2400 baud*/ + case BAUD2400: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B2400; +#else + cfsetispeed(&Posix_CommConfig, B2400); + cfsetospeed(&Posix_CommConfig, B2400); +#endif + break; + + /*4800 baud*/ + case BAUD4800: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B4800; +#else + cfsetispeed(&Posix_CommConfig, B4800); + cfsetospeed(&Posix_CommConfig, B4800); +#endif + break; + + /*9600 baud*/ + case BAUD9600: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B9600; +#else + cfsetispeed(&Posix_CommConfig, B9600); + cfsetospeed(&Posix_CommConfig, B9600); +#endif + break; + + /*14400 baud*/ + case BAUD14400: + TTY_WARNING("Posix_QextSerialPort: POSIX does not support 14400 baud operation. Switching to 9600 baud."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B9600; +#else + cfsetispeed(&Posix_CommConfig, B9600); + cfsetospeed(&Posix_CommConfig, B9600); +#endif + break; + + /*19200 baud*/ + case BAUD19200: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B19200; +#else + cfsetispeed(&Posix_CommConfig, B19200); + cfsetospeed(&Posix_CommConfig, B19200); +#endif + break; + + /*38400 baud*/ + case BAUD38400: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B38400; +#else + cfsetispeed(&Posix_CommConfig, B38400); + cfsetospeed(&Posix_CommConfig, B38400); +#endif + break; + + /*56000 baud*/ + case BAUD56000: + TTY_WARNING("Posix_QextSerialPort: POSIX does not support 56000 baud operation. Switching to 38400 baud."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B38400; +#else + cfsetispeed(&Posix_CommConfig, B38400); + cfsetospeed(&Posix_CommConfig, B38400); +#endif + break; + + /*57600 baud*/ + case BAUD57600: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B57600; +#else + cfsetispeed(&Posix_CommConfig, B57600); + cfsetospeed(&Posix_CommConfig, B57600); +#endif + break; + + /*76800 baud*/ + case BAUD76800: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows and some POSIX systems do not support 76800 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + +#ifdef B76800 + Posix_CommConfig.c_cflag|=B76800; +#else + TTY_WARNING("Posix_QextSerialPort: Posix_QextSerialPort was compiled without 76800 baud support. Switching to 57600 baud."); + Posix_CommConfig.c_cflag|=B57600; +#endif //B76800 +#else //CBAUD +#ifdef B76800 + cfsetispeed(&Posix_CommConfig, B76800); + cfsetospeed(&Posix_CommConfig, B76800); +#else + TTY_WARNING("Posix_QextSerialPort: Posix_QextSerialPort was compiled without 76800 baud support. Switching to 57600 baud."); + cfsetispeed(&Posix_CommConfig, B57600); + cfsetospeed(&Posix_CommConfig, B57600); +#endif //B76800 +#endif //CBAUD + break; + + /*115200 baud*/ + case BAUD115200: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B115200; +#else + cfsetispeed(&Posix_CommConfig, B115200); + cfsetospeed(&Posix_CommConfig, B115200); +#endif + break; + + /*128000 baud*/ + case BAUD128000: + TTY_WARNING("Posix_QextSerialPort: POSIX does not support 128000 baud operation. Switching to 115200 baud."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B115200; +#else + cfsetispeed(&Posix_CommConfig, B115200); + cfsetospeed(&Posix_CommConfig, B115200); +#endif + break; + + /*256000 baud*/ + case BAUD256000: + TTY_WARNING("Posix_QextSerialPort: POSIX does not support 256000 baud operation. Switching to 115200 baud."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B115200; +#else + cfsetispeed(&Posix_CommConfig, B115200); + cfsetospeed(&Posix_CommConfig, B115200); +#endif + break; + } + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_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 + 8 data bits cannot be used with space parity on POSIX systems. + +*/ +void Posix_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) || + (Settings.Parity==PAR_SPACE && dataBits==DATA_8)) { + } + else { + Settings.DataBits=dataBits; + } + } + if (isOpen()) { + switch(dataBits) { + + /*5 data bits*/ + case DATA_5: + if (Settings.StopBits==STOP_2) { + TTY_WARNING("Posix_QextSerialPort: 5 Data bits cannot be used with 2 stop bits."); + } + else { + Settings.DataBits=dataBits; + Posix_CommConfig.c_cflag&=(~CSIZE); + Posix_CommConfig.c_cflag|=CS5; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + + /*6 data bits*/ + case DATA_6: + if (Settings.StopBits==STOP_1_5) { + TTY_WARNING("Posix_QextSerialPort: 6 Data bits cannot be used with 1.5 stop bits."); + } + else { + Settings.DataBits=dataBits; + Posix_CommConfig.c_cflag&=(~CSIZE); + Posix_CommConfig.c_cflag|=CS6; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + + /*7 data bits*/ + case DATA_7: + if (Settings.StopBits==STOP_1_5) { + TTY_WARNING("Posix_QextSerialPort: 7 Data bits cannot be used with 1.5 stop bits."); + } + else { + Settings.DataBits=dataBits; + Posix_CommConfig.c_cflag&=(~CSIZE); + Posix_CommConfig.c_cflag|=CS7; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + + /*8 data bits*/ + case DATA_8: + if (Settings.StopBits==STOP_1_5) { + TTY_WARNING("Posix_QextSerialPort: 8 Data bits cannot be used with 1.5 stop bits."); + } + else { + Settings.DataBits=dataBits; + Posix_CommConfig.c_cflag&=(~CSIZE); + Posix_CommConfig.c_cflag|=CS8; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + } + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_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 + +\note +This function is subject to the following limitations: +\par +POSIX systems do not support mark parity. +\par +POSIX systems support space parity only if tricked into doing so, and only with + fewer than 8 data bits. Use space parity very carefully with POSIX systems. + +*/ +void Posix_QextSerialPort::setParity(ParityType parity) +{ + LOCK_MUTEX(); + if (Settings.Parity!=parity) { + if (parity==PAR_MARK || (parity==PAR_SPACE && Settings.DataBits==DATA_8)) { + } + else { + Settings.Parity=parity; + } + } + if (isOpen()) { + switch (parity) { + + /*space parity*/ + case PAR_SPACE: + if (Settings.DataBits==DATA_8) { + TTY_PORTABILITY_WARNING("Posix_QextSerialPort: Space parity is only supported in POSIX with 7 or fewer data bits"); + } + else { + + /*space parity not directly supported - add an extra data bit to simulate it*/ + Posix_CommConfig.c_cflag&=~(PARENB|CSIZE); + switch(Settings.DataBits) { + case DATA_5: + Settings.DataBits=DATA_6; + Posix_CommConfig.c_cflag|=CS6; + break; + + case DATA_6: + Settings.DataBits=DATA_7; + Posix_CommConfig.c_cflag|=CS7; + break; + + case DATA_7: + Settings.DataBits=DATA_8; + Posix_CommConfig.c_cflag|=CS8; + break; + + case DATA_8: + break; + } + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + + /*mark parity - WINDOWS ONLY*/ + case PAR_MARK: + TTY_WARNING("Posix_QextSerialPort: Mark parity is not supported by POSIX."); + break; + + /*no parity*/ + case PAR_NONE: + Posix_CommConfig.c_cflag&=(~PARENB); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + + /*even parity*/ + case PAR_EVEN: + Posix_CommConfig.c_cflag&=(~PARODD); + Posix_CommConfig.c_cflag|=PARENB; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + + /*odd parity*/ + case PAR_ODD: + Posix_CommConfig.c_cflag|=(PARENB|PARODD); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + } + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_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 + POSIX does not support 1.5 stop bits. + +*/ +void Posix_QextSerialPort::setStopBits(StopBitsType stopBits) +{ + LOCK_MUTEX(); + if (Settings.StopBits!=stopBits) { + if ((Settings.DataBits==DATA_5 && stopBits==STOP_2) || stopBits==STOP_1_5) {} + else { + Settings.StopBits=stopBits; + } + } + if (isOpen()) { + switch (stopBits) { + + /*one stop bit*/ + case STOP_1: + Settings.StopBits=stopBits; + Posix_CommConfig.c_cflag&=(~CSTOPB); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + + /*1.5 stop bits*/ + case STOP_1_5: + TTY_WARNING("Posix_QextSerialPort: 1.5 stop bit operation is not supported by POSIX."); + break; + + /*two stop bits*/ + case STOP_2: + if (Settings.DataBits==DATA_5) { + TTY_WARNING("Posix_QextSerialPort: 2 stop bits cannot be used with 5 data bits"); + } + else { + Settings.StopBits=stopBits; + Posix_CommConfig.c_cflag|=CSTOPB; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + } + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_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 +\note +FLOW_HARDWARE may not be supported on all versions of UNIX. In cases where it is +unsupported, FLOW_HARDWARE is the same as FLOW_OFF. + +*/ +void Posix_QextSerialPort::setFlowControl(FlowType flow) +{ + LOCK_MUTEX(); + if (Settings.FlowControl!=flow) { + Settings.FlowControl=flow; + } + if (isOpen()) { + switch(flow) { + + /*no flow control*/ + case FLOW_OFF: + Posix_CommConfig.c_cflag&=(~CRTSCTS); + Posix_CommConfig.c_iflag&=(~(IXON|IXOFF|IXANY)); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + + /*software (XON/XOFF) flow control*/ + case FLOW_XONXOFF: + Posix_CommConfig.c_cflag&=(~CRTSCTS); + Posix_CommConfig.c_iflag|=(IXON|IXOFF|IXANY); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + + case FLOW_HARDWARE: + Posix_CommConfig.c_cflag|=CRTSCTS; + Posix_CommConfig.c_iflag&=(~(IXON|IXOFF|IXANY)); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + } + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_QextSerialPort::setTimeout(ulong sec, ulong millisec); +Sets the read and write timeouts for the port to sec seconds and millisec milliseconds. +Note that this is a per-character timeout, i.e. the port will wait this long for each +individual character, not for the whole read operation. This timeout also applies to the +bytesWaiting() function. + +\note +POSIX does not support millisecond-level control for I/O timeout values. Any +timeout set using this function will be set to the next lowest tenth of a second for +the purposes of detecting read or write timeouts. For example a timeout of 550 milliseconds +will be seen by the class as a timeout of 500 milliseconds for the purposes of reading and +writing the port. However millisecond-level control is allowed by the select() system call, +so for example a 550-millisecond timeout will be seen as 550 milliseconds on POSIX systems for +the purpose of detecting available bytes in the read buffer. + +*/ +void Posix_QextSerialPort::setTimeout(ulong sec, ulong millisec) +{ + LOCK_MUTEX(); + Settings.Timeout_Sec=sec; + Settings.Timeout_Millisec=millisec; + Posix_Copy_Timeout.tv_sec=sec; + Posix_Copy_Timeout.tv_usec=millisec; + if (isOpen()) { + tcgetattr(Posix_File->handle(), &Posix_CommConfig); + Posix_CommConfig.c_cc[VTIME]=sec*10+millisec/100; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + UNLOCK_MUTEX(); +} + +/*! +\fn bool Posix_QextSerialPort::open(OpenMode mode) +Opens the serial port associated to this class. +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 Posix_QextSerialPort::open(OpenMode mode) +{ + LOCK_MUTEX(); + if (mode == QIODevice::NotOpen) + return isOpen(); + if (!isOpen()) { + /*open the port*/ + Posix_File->setFileName(port); + qDebug("Trying to open File"); + if (Posix_File->open(QIODevice::ReadWrite|QIODevice::Unbuffered)) { + qDebug("Opened File succesfully"); + /*set open mode*/ + QIODevice::open(mode); + + /*configure port settings*/ + tcgetattr(Posix_File->handle(), &Posix_CommConfig); + + /*set up other port settings*/ + Posix_CommConfig.c_cflag|=CREAD|CLOCAL; + Posix_CommConfig.c_lflag&=(~(ICANON|ECHO|ECHOE|ECHOK|ECHONL|ISIG)); + Posix_CommConfig.c_iflag&=(~(INPCK|IGNPAR|PARMRK|ISTRIP|ICRNL|IXANY)); + Posix_CommConfig.c_oflag&=(~OPOST); + Posix_CommConfig.c_cc[VMIN]=0; + Posix_CommConfig.c_cc[VINTR] = _POSIX_VDISABLE; + Posix_CommConfig.c_cc[VQUIT] = _POSIX_VDISABLE; + Posix_CommConfig.c_cc[VSTART] = _POSIX_VDISABLE; + Posix_CommConfig.c_cc[VSTOP] = _POSIX_VDISABLE; + Posix_CommConfig.c_cc[VSUSP] = _POSIX_VDISABLE; + setBaudRate(Settings.BaudRate); + setDataBits(Settings.DataBits); + setParity(Settings.Parity); + setStopBits(Settings.StopBits); + setFlowControl(Settings.FlowControl); + setTimeout(Settings.Timeout_Sec, Settings.Timeout_Millisec); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } else { + qDebug("Could not open File! Error code : %d", Posix_File->error()); + } + } + UNLOCK_MUTEX(); + return isOpen(); +} + +/*! +\fn void Posix_QextSerialPort::close() +Closes a serial port. This function has no effect if the serial port associated with the class +is not currently open. +*/ +void Posix_QextSerialPort::close() +{ + LOCK_MUTEX(); + Posix_File->close(); + QIODevice::close(); + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_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 Posix_QextSerialPort::flush() +{ + LOCK_MUTEX(); + if (isOpen()) { + Posix_File->flush(); + } + UNLOCK_MUTEX(); +} + +/*! +\fn qint64 Posix_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 Posix_QextSerialPort::bytesWaiting() instead. +*/ +qint64 Posix_QextSerialPort::size() const +{ + int numBytes; + if (ioctl(Posix_File->handle(), FIONREAD, &numBytes)<0) { + numBytes=0; + } + return (qint64)numBytes; +} + +/*! +\fn qint64 Posix_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 +Posix_QextSerialPort::getLastError(). +*/ +qint64 Posix_QextSerialPort::bytesAvailable() +{ + LOCK_MUTEX(); + if (isOpen()) { + int bytesQueued; + fd_set fileSet; + FD_ZERO(&fileSet); + FD_SET(Posix_File->handle(), &fileSet); + + /*on Linux systems the Posix_Timeout structure will be altered by the select() call. + Make sure we use the right timeout values*/ + //memcpy(&Posix_Timeout, &Posix_Copy_Timeout, sizeof(struct timeval)); + Posix_Timeout = Posix_Copy_Timeout; + int n=select(Posix_File->handle()+1, &fileSet, NULL, &fileSet, &Posix_Timeout); + if (!n) { + lastErr=E_PORT_TIMEOUT; + UNLOCK_MUTEX(); + return -1; + } + if (n==-1 || ioctl(Posix_File->handle(), FIONREAD, &bytesQueued)==-1) { + translateError(errno); + UNLOCK_MUTEX(); + return -1; + } + lastErr=E_NO_ERROR; + UNLOCK_MUTEX(); + return bytesQueued + QIODevice::bytesAvailable(); + } + UNLOCK_MUTEX(); + return 0; +} + +/*! +\fn void Posix_QextSerialPort::ungetChar(char) +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 Posix_QextSerialPort::ungetChar(char) +{ + /*meaningless on unbuffered sequential device - return error and print a warning*/ + TTY_WARNING("Posix_QextSerialPort: ungetChar() called on an unbuffered sequential device - operation is meaningless"); +} + +/*! +\fn void Posix_QextSerialPort::translateError(ulong error) +Translates a system-specific error code to a QextSerialPort error code. Used internally. +*/ +void Posix_QextSerialPort::translateError(ulong error) +{ + switch (error) { + case EBADF: + case ENOTTY: + lastErr=E_INVALID_FD; + break; + + case EINTR: + lastErr=E_CAUGHT_NON_BLOCKED_SIGNAL; + break; + + case ENOMEM: + lastErr=E_NO_MEMORY; + break; + } +} + +/*! +\fn void Posix_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 Posix_QextSerialPort::setDtr(bool set) +{ + LOCK_MUTEX(); + if (isOpen()) { + int status; + ioctl(Posix_File->handle(), TIOCMGET, &status); + if (set) { + status|=TIOCM_DTR; + } + else { + status&=~TIOCM_DTR; + } + ioctl(Posix_File->handle(), TIOCMSET, &status); + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_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 Posix_QextSerialPort::setRts(bool set) +{ + LOCK_MUTEX(); + if (isOpen()) { + int status; + ioctl(Posix_File->handle(), TIOCMGET, &status); + if (set) { + status|=TIOCM_RTS; + } + else { + status&=~TIOCM_RTS; + } + ioctl(Posix_File->handle(), TIOCMSET, &status); + } + UNLOCK_MUTEX(); +} + +/*! +\fn unsigned long Posix_QextSerialPort::lineStatus() +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 +LS_RTS RTS (POSIX only) +LS_DTR DTR (POSIX only) +LS_ST Secondary TXD (POSIX only) +LS_SR Secondary RXD (POSIX only) +\endverbatim + +This function will return 0 if the port associated with the class is not currently open. +*/ +unsigned long Posix_QextSerialPort::lineStatus() +{ + unsigned long Status=0, Temp=0; + LOCK_MUTEX(); + if (isOpen()) { + ioctl(Posix_File->handle(), TIOCMGET, &Temp); + if (Temp&TIOCM_CTS) { + Status|=LS_CTS; + } + if (Temp&TIOCM_DSR) { + Status|=LS_DSR; + } + if (Temp&TIOCM_RI) { + Status|=LS_RI; + } + if (Temp&TIOCM_CD) { + Status|=LS_DCD; + } + if (Temp&TIOCM_DTR) { + Status|=LS_DTR; + } + if (Temp&TIOCM_RTS) { + Status|=LS_RTS; + } + if (Temp&TIOCM_ST) { + Status|=LS_ST; + } + if (Temp&TIOCM_SR) { + Status|=LS_SR; + } + } + UNLOCK_MUTEX(); + return Status; +} + +/*! +\fn qint64 Posix_QextSerialPort::readData(char * data, qint64 maxSize) +Reads a block of data from the serial port. This function will read at most maxSize 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 Posix_QextSerialPort::readData(char * data, qint64 maxSize) +{ + LOCK_MUTEX(); + int retVal=0; + retVal=Posix_File->read(data, maxSize); + if (retVal==-1) + lastErr=E_READ_FAILED; + UNLOCK_MUTEX(); + + return retVal; +} + +/*! +\fn qint64 Posix_QextSerialPort::writeData(const char * data, qint64 maxSize) +Writes a block of data to the serial port. This function will write maxSize 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 Posix_QextSerialPort::writeData(const char * data, qint64 maxSize) +{ + LOCK_MUTEX(); + int retVal=0; + retVal=Posix_File->write(data, maxSize); + if (retVal==-1) + lastErr=E_WRITE_FAILED; + UNLOCK_MUTEX(); + + flush(); + return retVal; +} diff --git a/machine/qextserial/posix_qextserialport.h b/machine/qextserial/posix_qextserialport.h new file mode 100644 index 0000000..559d2f6 --- /dev/null +++ b/machine/qextserial/posix_qextserialport.h @@ -0,0 +1,57 @@ + +#ifndef _POSIX_QEXTSERIALPORT_H_ +#define _POSIX_QEXTSERIALPORT_H_ + +#include +#include +#include +#include +#include +#include +#include +#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 diff --git a/machine/qextserial/qextserialbase.cpp b/machine/qextserial/qextserialbase.cpp new file mode 100644 index 0000000..027913d --- /dev/null +++ b/machine/qextserial/qextserialbase.cpp @@ -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; +} diff --git a/machine/qextserial/qextserialbase.h b/machine/qextserial/qextserialbase.h new file mode 100644 index 0000000..cd8fcac --- /dev/null +++ b/machine/qextserial/qextserialbase.h @@ -0,0 +1,196 @@ + +#ifndef _QEXTSERIALBASE_H_ +#define _QEXTSERIALBASE_H_ + +#include +#include + +#ifdef QT_THREAD_SUPPORT +#include +#include +#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 diff --git a/machine/qextserial/qextserialport.cpp b/machine/qextserial/qextserialport.cpp new file mode 100644 index 0000000..1c0d9bf --- /dev/null +++ b/machine/qextserial/qextserialport.cpp @@ -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 +#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 + 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() +{} diff --git a/machine/qextserial/qextserialport.h b/machine/qextserial/qextserialport.h new file mode 100644 index 0000000..c1c296e --- /dev/null +++ b/machine/qextserial/qextserialport.h @@ -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 diff --git a/machine/qextserial/win_qextserialport.cpp b/machine/qextserial/win_qextserialport.cpp new file mode 100644 index 0000000..9c2434d --- /dev/null +++ b/machine/qextserial/win_qextserialport.cpp @@ -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 +#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 + 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(); +} diff --git a/machine/qextserial/win_qextserialport.h b/machine/qextserial/win_qextserialport.h new file mode 100644 index 0000000..46efe80 --- /dev/null +++ b/machine/qextserial/win_qextserialport.h @@ -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 + +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 diff --git a/machine/tcpclient.cpp b/machine/tcpclient.cpp new file mode 100644 index 0000000..f94519b --- /dev/null +++ b/machine/tcpclient.cpp @@ -0,0 +1,501 @@ +#include "tcpclient.h" + +#include +#include +#include + +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 + + + + + + diff --git a/machine/tcpclient.h b/machine/tcpclient.h new file mode 100644 index 0000000..1547255 --- /dev/null +++ b/machine/tcpclient.h @@ -0,0 +1,102 @@ +#ifndef TCPCLIENT_H +#define TCPCLIENT_H + +#include +#include +#include +#include +#include +#include +#include + +#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 diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..a3aa527 --- /dev/null +++ b/main.cpp @@ -0,0 +1,437 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#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; +} diff --git a/main.h b/main.h new file mode 100644 index 0000000..4481e76 --- /dev/null +++ b/main.h @@ -0,0 +1,249 @@ +#ifndef MAIN_H +#define MAIN_H + +#include +#include +#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 diff --git a/mctype/machinetypefun.cpp b/mctype/machinetypefun.cpp new file mode 100644 index 0000000..62d0043 --- /dev/null +++ b/mctype/machinetypefun.cpp @@ -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 MachineTypeFun::getSensorList() +{ + return m_allSensorList; +} + +//获取错误代码列表 +QList MachineTypeFun::getErrorCodeAndStateList() +{ + return m_allErrorCodeAndStateList; +} + +//获取调试功能 +QList 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 MachineTypeFun::getParaSetListByFilter() +{ + return m_allParaSetList; +} + +QList MachineTypeFun::getPatternSetListByFilter() +{ + return m_allPatternSetList; +} + +QList MachineTypeFun::getAssistListByFilter() +{ + return m_allAssistList; +} + +QList MachineTypeFun::getShortCutListByFilter() +{ + return m_allShortCutList; +} + +QList MachineTypeFun::getOutCtrlListByFilter() +{ + return m_allOutCtrlList; +} + +QList MachineTypeFun::getParasListByMcSel() +{ + QList 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; +} diff --git a/mctype/machinetypefun.h b/mctype/machinetypefun.h new file mode 100644 index 0000000..4ee9316 --- /dev/null +++ b/mctype/machinetypefun.h @@ -0,0 +1,45 @@ +#ifndef MACHINETYPEFUN_H +#define MACHINETYPEFUN_H + +#include +#include +#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 getParasListByMcSel(); + virtual QList getOutCtrlListByFilter(); + virtual QList getShortCutListByFilter(); + virtual QList getAssistListByFilter(); + virtual QList getPatternSetListByFilter(); + virtual QList getParaSetListByFilter(); + virtual QList getSensorList(); + virtual QList getErrorCodeAndStateList(); + virtual QList getDebugFunList(); + +public: + QList m_allParasList; + QList m_allOutCtrlList; + + QList m_allShortCutList; + QList m_allAssistList; + QList m_allPatternSetList; + QList m_allParaSetList; + QList m_allSensorList; + QList m_allErrorCodeAndStateList; + QList m_allDebugFunList; + +private: + void initAllSensorList();//初始化全部传感器列表 +}; + +#endif // MACHINETYPEFUN_H diff --git a/mctype/mainwidgetfunction.cpp b/mctype/mainwidgetfunction.cpp new file mode 100644 index 0000000..ae3714f --- /dev/null +++ b/mctype/mainwidgetfunction.cpp @@ -0,0 +1,5507 @@ +#include "mainwidgetfunction.h" + +MainWidgetFunction::MainWidgetFunction(QObject *parent) : + QObject(parent), + m_pPromptDlg(NULL), + m_pSystemManageDlg(NULL), + m_pBrokenLineDialog(NULL) +{ + initialize(); + initializeLotData();//初始化物联网数据 + + m_pPromptDlg = new PromptDialog(); + m_pPromptDlg->hide(); + + connect(m_pPromptDlg, SIGNAL(siUpdataCancel()),g_pMachine, SLOT(breakFileTrans())); + connect(g_pMachine, SIGNAL(siTransProgress(u8,int,int)),this, SLOT(slotTransProgress(u8,int,int)));//升级主控进度条 + + // connect(g_pLotMachine,SIGNAL(siConnectToMqtt()),this,SLOT(slotSendJsonToMqtt())); + connect(g_pLotMachine,SIGNAL(siRunLotDataAction(QString)),this,SLOT(slotRunLotDataAction(QString))); + + //机器信息改变 + connect(g_pMachine, SIGNAL(siMcInfoChange()), this, SLOT(slotMCInfoChange())); + //接收物联数据 + //connect(g_pMachine, SIGNAL(siReceiveLotData()), this, SLOT(slotReceiveLotData())); + + m_pSystemManageDlg = new SystemManageDialog(); + connect(m_pSystemManageDlg,SIGNAL(siClearProductStatis()),this,SLOT(slotClearProductStatis())); + connect(m_pSystemManageDlg,SIGNAL(siCsvExport(int)),this,SLOT(slotCsvExport(int))); + connect(m_pSystemManageDlg,SIGNAL(siCsvChangeErro( )),this,SLOT(slotJournalError())); + connect(m_pSystemManageDlg,SIGNAL(siCsvChangeBrea( )),this,SLOT(slotJournalBreakage())); + connect(m_pSystemManageDlg,SIGNAL(siClearJournal()),this,SLOT(slotClearJournal())); + connect(m_pSystemManageDlg,SIGNAL(siRefreshWifiList()),this,SLOT(slotRefreshWifiList())); + + connect(m_pSystemManageDlg,SIGNAL(siSetDynamicIP(QString)),this,SLOT(slotSetDynamicIP(QString))); + connect(m_pSystemManageDlg,SIGNAL(siSetStaticIP(QString,QString,QString)),this,SLOT(slotSetStaticIP(QString,QString,QString))); + + m_pSystemManageDlg->hide(); + + m_pBrokenLineDialog = new BrokenLineDialog(); + m_pBrokenLineDialog->hide(); + + m_pTipsTimer = new QTimer(this); + m_pTipsTimer->setInterval(14400000);//设置定时器时间间隔 4小时 + connect(m_pTipsTimer, SIGNAL(timeout()), this, SLOT(onTipsTimer())); + + // 测试物联网用 + // connect(&timer, SIGNAL(timeout()), this, SLOT(slotReceiveLotData())); + // timer.setInterval(1000); + // timer.start(); +#if(IFOPENGATEWAY) + //物联网 + m_pLotTimer = new QTimer(this); + connect(m_pLotTimer, SIGNAL(timeout()), this, SLOT(slotSendLotData())); + m_pLotTimer->setInterval(5000); + m_pLotTimer->start(); +#endif +} + +MainWidgetFunction::~MainWidgetFunction() +{ + if(m_pPromptDlg != NULL) + { + delete m_pPromptDlg; + } + if(m_pSystemManageDlg != NULL) + { + delete m_pSystemManageDlg; + } + if(m_pBrokenLineDialog != NULL) + { + delete m_pBrokenLineDialog; + } +} + +void MainWidgetFunction::initialize() +{ + //读取配置文件,初始化机头断线次数 + memset(&m_headBreakLine,0,sizeof(HeadBreakLine)); + for(u16 i = 0; i < sizeof(m_headBreakLine.headBreakLineNum)/sizeof(s32); i++) + //for(u16 i = 0; i < sizeof(HeadBreakLine)/sizeof(s32); i++) + { + int breakLineNum = 0; + breakLineNum = g_pSettings->readFromIniFile("HeadBreakLineNum/head"+QString::number(i+1)).toInt(); + m_headBreakLine.headBreakLineNum[i] = breakLineNum; + + //xcy 0314 机头针位断线 + for(int j = 0; j < 15; j++) + { + int needelBreakLineNum = 0; + needelBreakLineNum = g_pSettings->readFromIniFile("Head" + QString::number(i+1) + "NeedleBreakLine/needle" + QString::number(j+1)).toInt(); + m_headBreakLine.headNeedleBreakLine[i][j] = needelBreakLineNum; + //qDebug() <<"m_headBreakLine.headNeedleBreakLine[" << i << "]["<< j << "]=" <applicationDirPath()); + QString iniPath = apppath.path() + apppath.separator() + "config.ini"; + QSettings setting(iniPath, QSettings::IniFormat); //QSettings能记录一些程序中的信息,下次再打开时可以读取出来 + m_getScore = setting.value("Progress/getScore").toInt(); + + QString path = apppath.path() + apppath.separator() + CSV_PROGRESS; + QFile file(path); + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + qDebug() << "Open CSV file failed!"; + return; + } + + QStringList strlist; + strlist.clear(); + QTextStream out(&file); + out.setCodec("GB2312"); //支持读取中文信息 + + //遍历行 + for(int i = 0; !out.atEnd(); i++) + { + QString strLine = out.readLine(); + if(strLine.size() <= 0) + { + continue; + } + m_csvFileStrList.append(strLine); + strlist = strLine.split(",", QString::SkipEmptyParts); //根据","分隔开每行的列 + if(i > 0) //第一行不执行操作 + { + if (strlist.size() > COLUMN_SCORE) + { + int score = strlist.at(COLUMN_SCORE).toInt(); + m_totalScore += score; + } + } + } + + file.close();//关闭文件 +} + +//初始化物联网数据 +void MainWidgetFunction::initializeLotData() +{ + memset(&m_mcLotData,0,sizeof(McLotData)); + memset(&m_HMILotData,0,sizeof(HMILotData)); + + QString verStr = getVersionStr(); + memcpy(m_HMILotData.HMIVerStr, verStr.data(), verStr.length()); // 版本号 + + u32 rackNum = g_pSettings->readFromIniFile("IOT/rackNumber").toInt();//机架号 + m_HMILotData.machineNumber = rackNum; // 机架号 + + u16 dProgress = g_pSettings->readFromIniFile("IOT/debugProgress").toInt();//调试进度 + m_HMILotData.debugProgress = dProgress; //调试进度 + + QString deliveryTime = g_pSettings->readFromIniFile("IOT/deliveryTime").toString();//工厂预计交货时间 + QByteArray arr = deliveryTime.toLocal8Bit(); + memcpy(m_HMILotData.deliveryTime, arr.data(), arr.size()); //交货日期 + + //电机总数-先固定写为4个,如果后续变动较大,可把电机个数写为全局变量或从其他cpp中传参 + m_HMILotData.motorNum = 4; + + QString fileName = m_fileName; + memcpy(m_HMILotData.fileName, fileName.data(), fileName.length()); // 文件名称 +} + +//优盘检测 +QString MainWidgetFunction::detectUsb() +{ + QString usbPath = ""; + +#ifdef Q_OS_LINUX + QDir dir(LINUXUSBPATH); + if(!dir.exists()) + { + usbPath = ""; + } + else + { + usbPath = LINUXUSBPATH; + } +#endif + +#ifdef Q_OS_WIN + QFileInfoList list = QDir::drives(); + + for(int i = 0; i= 2) + { + QString str1 = lineStr[0]; + //qDebug()<initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("USB flash drive is not detected!");//未检测到优盘! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + QDir apppath(qApp->applicationDirPath()); + QString targetDir = apppath.absolutePath() + apppath.separator(); + + QDir dir (usbPath); + dir.setFilter(QDir::Files | QDir::NoSymLinks); // 设置类型过滤器,只为文件格式 + QFileInfoList fileList = dir.entryInfoList(); + + if(type == HMI_UPDATA)//界面升级 + { + qDebug()<<"update 1"; + //界面文件、语言文件、RCC资源文件、打包的AUT文件 + for (int var = 0; var < fileList.size(); var++) + { +#ifdef Q_OS_WIN + if((fileList.at(var).fileName().toUpper().indexOf(APPNAME) != -1 && + fileList.at(var).suffix().toUpper() == "EXE") || + fileList.at(var).fileName().toUpper().indexOf(".QM") != -1 || + fileList.at(var).fileName().toUpper().indexOf(".RCC") != -1 || + fileList.at(var).fileName().toUpper().indexOf(".AUT") != -1) + { + m_pSystemManageDlg->addItem(fileList.at(var).fileName()); + } +#endif + +#ifdef Q_OS_LINUX + if((fileList.at(var).fileName().toUpper().indexOf(APPNAME) != -1 && + fileList.at(var).suffix().toUpper().length() == 0) || + fileList.at(var).fileName().toUpper().indexOf(".QM") != -1 || + fileList.at(var).fileName().toUpper().indexOf(".RCC") != -1 || + fileList.at(var).fileName().toUpper().indexOf(".AUT") != -1) + { + m_pSystemManageDlg->addItem(fileList.at(var).fileName()); + } +#endif + } + qDebug()<<"update 2"; + } + else if(type == MC_UPDATA)//主控升级 + { + for (int var = 0; var < fileList.size(); var++) + { + if( fileList.at(var).suffix().toUpper() == "RNPU") + { + m_pSystemManageDlg->addItem(fileList.at(var).fileName()); + } + } + qDebug()<<"update 3"; + } + else if(type == EXBOARD_UPDATA)//外围板升级 + { + for (int var = 0; var < fileList.size(); var++) + { + if( fileList.at(var).suffix().toUpper() == "RNPU") + { + m_pSystemManageDlg->addItem(fileList.at(var).fileName()); + } + } + qDebug()<<"update 5"; + } + else if(type == PARA_IMPORT || + type == WKPARA_IMPORT)//参数导入或工作参数导入 + { + for (int var = 0; var < fileList.size(); var++) + { + if( fileList.at(var).suffix().toUpper() == "PARADAT") + { + m_pSystemManageDlg->addItem(fileList.at(var).fileName()); + } + } + qDebug()<<"update 4"; + } + else if(type == FRAMEPARA_IMPORT)//动框参数导入 + { + for (int var = 0; var < fileList.size(); var++) + { + if( fileList.at(var).suffix().toUpper() == "FRAMEPARADAT") + { + m_pSystemManageDlg->addItem(fileList.at(var).fileName()); + } + } + } + //点击了确认按钮 + if(m_pSystemManageDlg->exec(type) == 1) + { + QString fileName = m_pSystemManageDlg->getCurFile(); + + if(type == HMI_UPDATA)//界面升级 + { + QString sPath,tPath; +#ifdef Q_OS_WIN + if(fileName.toUpper().indexOf(APPNAME) != -1 && + fileName.toUpper().indexOf(".EXE") != -1) + { + sPath = usbPath + fileName; + tPath = targetDir + WIN_APPNAME; + + qDebug()<<"HMI Update"; + qDebug()<<"sPath"<exit(); + } +#endif + +#ifdef Q_OS_LINUX + if(fileName.toUpper().indexOf(APPNAME) != -1 && + fileName.toUpper().indexOf(".EXE") == -1 && + fileName.toUpper().indexOf(".AUT") == -1)//非aut打包文件 + { + sPath = usbPath + fileName; + tPath = targetDir + LINUX_APPNAME; + + qDebug()<<"HMI Update"; + qDebug()<<"sPath"<exit(); +#endif +#ifdef Q_OS_LINUX + system("sync"); + system("reboot"); +#endif + } + + else if(fileName.toUpper().indexOf(".RCC") != -1 ) + { + QString sPath = usbPath + fileName ; + QString tPath = targetDir + "nxcui.rcc"; + + qDebug()<<"RCC Update"; + qDebug()<<"sPath"<exit(); +#endif + +#ifdef Q_OS_LINUX + system("sync"); + system("reboot"); +#endif + } + + else if(fileName.toUpper().indexOf(".AUT") != -1)//界面打包文件(包括升级文件、语言包、RCC等) + { + QString strFile = usbPath + fileName; + QFile file(strFile); + file.open(QIODevice::ReadOnly); + + QByteArray AllData = file.readAll(); + HMIFileHead *fhead = (HMIFileHead*)(AllData.data()); + int filenum = fhead->fileNum; + + int bSize = 0; + for(int j = 0; j < filenum; j++) + { + int cSize = j*sizeof(HMIItemFileHead) + sizeof(HMIFileHead) + bSize; + HMIItemFileHead *ahead; + ahead = (HMIItemFileHead*)(AllData.data() + cSize); + QString fName = ahead->fileName; + + int fileSize = ahead->fileSize; + if(fileSize <= 0) + { + return; + } + int sDataCheck = ahead->dataCheck; + + cSize = cSize + sizeof(HMIItemFileHead); + QByteArray buf = AllData.mid(cSize,fileSize); + int tDataCheck = calcCheckSum32((u8*)buf.data(),fileSize); + + bSize = bSize + fileSize; + + //校验相同,查找相同的文件替换 + if(sDataCheck == tDataCheck) + { + QString uFileName = targetDir + fName; + QFile uFile(uFileName); + QString cName = fName; + + if(uFile.exists())//执行目录中存在U盘中的文件fileName + { + QString targetPath; + targetPath.clear(); + +#ifdef Q_OS_WIN + if(fName.toUpper().indexOf(APPNAME) != -1 && + fName.toUpper().indexOf(".EXE") != -1) + { + targetPath = targetDir + WIN_APPNAME; + } +#endif + +#ifdef Q_OS_LINUX + if(fName.toUpper().indexOf(APPNAME) != -1 && + fName.toUpper().indexOf(".EXE") == -1) + { + targetPath = targetDir + LINUX_APPNAME; + cName = LINUX_APPNAME; + } +#endif + +#if(0) + if(fName.toUpper().indexOf(APPNAME) != -1) + { +#ifdef Q_OS_WIN + targetPath = targetDir + WIN_APPNAME; +#endif +#ifdef Q_OS_LINUX + + targetPath = targetDir + LINUX_APPNAME; + cName = LINUX_APPNAME; +#endif + } +#endif + else//其他文件 + { + targetPath = uFileName; + } + + QFile::remove(targetPath); + QFile tFile(targetPath); + + if(tFile.open(QIODevice::WriteOnly) == false) + { + return; + } + tFile.write(buf); + + qDebug()<<"AUT Update"; + qDebug()<<"targetPath"<initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("The program is corrupted, please re-upgrade after replacing the program!")); //程序已损坏,请更换程序后重新升级! + m_pPromptDlg->exec(); + return; + } + } + file.close(); + +#ifdef Q_OS_LINUX + qDebug()<<"reboot before"; + system("sync"); + system("reboot"); + qDebug()<<"reboot end"; +#endif + + //需放在linux重启命令后面 +#ifdef Q_OS_WIN + qDebug()<<"qApp->exit()"; + qApp->exit(); +#endif + } + else + { + //所选文件非升级文件 + //文件格式错误,请重新选择! + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("The file format is wrong, please select again!");//文件格式错误,请重新选择! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + } + } + else if(type == MC_UPDATA)//主控升级 + { + if(fileName.toUpper().indexOf(".RNPU") != -1) + { + QString uPath = usbPath + fileName; + + qDebug()<<"RNPU update"; + qDebug()<<"uPath"<initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("File bytes are 0, please check the file!");//文件字节为0,请检查文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + file.open(QIODevice::ReadOnly); + file.read( (char *)pBuff , file.size()) ; + file.close(); + + int nameSize = uPath.toUtf8().size() ; + if( nameSize > 32 ) + { + nameSize = 32; + } + memcpy(appHead.fileName , uPath.toUtf8().data() , nameSize); + appHead.dataSize = file.size(); + appHead.dataChecksum = calcCheckSum32(pBuff , file.size()); + + static int nID = 0; + + if( g_pMachine->isConnected() == 3) + { + g_pMachine->sendAPPFileProc(FILE_TYPE_PGM, + 0, + nID++, + appHead , + pBuff + ); + } + free(pBuff); + } + } + else if(type == EXBOARD_UPDATA)//外围板升级 + { + if(fileName.toUpper().indexOf(".RNPU") != -1) + { + QString uPath = usbPath + fileName; + + qDebug()<<"RNPU update"; + qDebug()<<"uPath"< 32 ) + { + nameSize = 32; + } + memcpy(boardHead.fileName , uPath.toUtf8().data() , nameSize); + boardHead.dataSize = file.size(); + boardHead.dataChecksum = calcCheckSum32(pBuff , file.size()); + boardHead.protocol = protocol; + boardHead.nodeid = nodeid; + boardHead.nodeType = nodeType; + boardHead.fileType = FILE_TYPE_PGM; + + static int eID = 0; + + if( g_pMachine->isConnected() == 3) + { + g_pMachine->sendBoardFileProc(FILE_TYPE_BOARD, + 0, + eID++, + boardHead, + pBuff + ); + } + + free(pBuff); + } + } + else if(type == PARA_IMPORT)//参数导入 + { + QString uPath = usbPath + fileName; + + qDebug()<<"Para Import"; + qDebug()<<"uPath"<initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("File size not match, invalid file!"));//文件大小不匹配,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + if( readSize != sizeof(ParaFile) ) + { + //文件大小不匹配,无效的参数文件 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("File size not match, invalid file!"));//文件大小不匹配,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + // 参数被正确的读取 + if( + ( paraFileStruct.s_head[0] == 'P' ) + && ( paraFileStruct.s_head[1] == 'A' ) + && ( paraFileStruct.s_head[2] == 'R' ) + && ( paraFileStruct.s_head[3] == 'A' ) + && ( paraFileStruct.s_type == 0 ) + && ( paraFileStruct.s_len == 4096 ) + ) + { + unsigned short i_crc = calcCrc16( (unsigned char *) paraFileStruct.s_para_buff , paraFileStruct.s_len); + + if( paraFileStruct.s_crc != i_crc ) + { + //数据校验错误,无效的参数文件 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("Data check error, invalid file!"));//数据校验错误,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + //将 一个文件 拆分成两个 缓冲区 + unsigned char mac_config [1024] ; + unsigned char work_config [1024] ; + unsigned char pre_mac_config [1024] ; + unsigned char pre_work_config [1024] ; + + // 清空 + memset( mac_config , 0 , 1024 ) ; + memset( work_config , 0 , 1024 ) ; + memset( pre_mac_config , 0 , 1024 ) ; + memset( pre_work_config , 0 , 1024 ) ; + + memcpy( work_config , paraFileStruct.s_para_buff , 1024 ) ; + memcpy( mac_config , ((char*)paraFileStruct.s_para_buff) + 1024 , 1024 ) ; + memcpy( pre_mac_config , ((char*)paraFileStruct.s_para_buff) + 2048 , 1024 ) ; + memcpy( pre_work_config , ((char*)paraFileStruct.s_para_buff) + 3072 , 1024 ) ; + + QString str; + g_pMachine->setMcPara((ParaStruct *) mac_config); + g_pMachine->setWkPara((ParaStruct *) work_config); + g_pMachine->setMcPrePara((ParaStruct *) pre_mac_config); + g_pMachine->setWkPrePara((ParaStruct *) pre_work_config); + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + str = (tr("Parameters imported successfully!"));//参数导入成功! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + else + { + //文件头不匹配,无效的参数文件! + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("File head not match, invalid file!"));//文件头不匹配,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + } + } + else if (type == WKPARA_IMPORT) //工作参数导入 + { + QString uPath = usbPath + fileName; + QFile paraFile(uPath); + if(!paraFile.exists()) + { + return; + } + + paraFile.open(QIODevice::ReadOnly); + + if(paraFile.size() != 0) + { + // 将文件 读取成结构体 + ParaFile paraFileStruct; + memset(¶FileStruct,0,sizeof(ParaFile)); + int readSize = paraFile.read((char*)¶FileStruct,sizeof(ParaFile)); + paraFile.close(); + + if(readSize != paraFile.size()) + { + //文件大小不匹配,无效的参数文件 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("File size not match, invalid file!"));//文件大小不匹配,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + if( readSize != sizeof(ParaFile) ) + { + //文件大小不匹配,无效的参数文件 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("File size not match, invalid file!"));//文件大小不匹配,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + // 参数被正确的读取 + if( ( paraFileStruct.s_head[0] == 'P' ) + && ( paraFileStruct.s_head[1] == 'A' ) + && ( paraFileStruct.s_head[2] == 'R' ) + && ( paraFileStruct.s_head[3] == 'A' ) + && ( paraFileStruct.s_type == 0 ) + && ( paraFileStruct.s_len == 4096 ) + ) + { + unsigned short i_crc = calcCrc16( (unsigned char *) paraFileStruct.s_para_buff , paraFileStruct.s_len); + + if( paraFileStruct.s_crc != i_crc ) + { + //数据校验错误,无效的参数文件 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("Data check error, invalid file!"));//数据校验错误,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + //将 一个文件 拆分成两个 缓冲区 + unsigned char mac_config [1024] ; + unsigned char work_config [1024] ; + unsigned char pre_mac_config [1024] ; + unsigned char pre_work_config [1024] ; + + // 清空 + memset( mac_config , 0 , 1024 ) ; + memset( work_config , 0 , 1024 ) ; + memset( pre_mac_config , 0 , 1024 ) ; + memset( pre_work_config , 0 , 1024 ) ; + + memcpy( work_config , paraFileStruct.s_para_buff , 1024 ) ; + memcpy( mac_config , ((char*)paraFileStruct.s_para_buff) + 1024 , 1024 ) ; + memcpy( pre_mac_config , ((char*)paraFileStruct.s_para_buff) + 2048 , 1024 ) ; + memcpy( pre_work_config , ((char*)paraFileStruct.s_para_buff) + 3072 , 1024 ) ; + + QString str; + g_pMachine->setWkPara((ParaStruct *) work_config); + str = (tr("Work parameters imported fail!"));//工作参数导入失败! + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + str = (tr("Work parameters imported successfully!"));//工作参数导入成功! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + else + { + //文件头不匹配,无效的参数文件! + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("File head not match, invalid file!"));//文件头不匹配,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + } + } + else if(type == FRAMEPARA_IMPORT)//动框参数导入 + { + QString uPath = usbPath + fileName; + QFile paraFile(uPath); + if(!paraFile.exists()) + { + return; + } + + paraFile.open(QIODevice::ReadOnly); + if(paraFile.size() != 0) + { + // 将文件 读取成结构体 + ParaFile paraFileStruct; + memset(¶FileStruct,0,sizeof(ParaFile)); + int readSize = paraFile.read((char*)¶FileStruct,sizeof(ParaFile)); + paraFile.close(); + + if(readSize != paraFile.size()) + { + //文件大小不匹配,无效的参数文件 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("File size not match, invalid file!"));//文件大小不匹配,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + if( readSize != sizeof(ParaFile) ) + { + //文件大小不匹配,无效的参数文件 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("File size not match, invalid file!"));//文件大小不匹配,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + // 参数被正确的读取 + if( + ( paraFileStruct.s_head[0] == 'P' ) + && ( paraFileStruct.s_head[1] == 'A' ) + && ( paraFileStruct.s_head[2] == 'R' ) + && ( paraFileStruct.s_head[3] == 'A' ) + && ( paraFileStruct.s_type == 0 ) + && ( paraFileStruct.s_len == 4096 ) + ) + { + unsigned short i_crc = calcCrc16( (unsigned char *) paraFileStruct.s_para_buff , paraFileStruct.s_len); + + if( paraFileStruct.s_crc != i_crc ) + { + //数据校验错误,无效的参数文件 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("Data check error, invalid file!"));//数据校验错误,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + //将 一个文件 拆分成两个 缓冲区 + unsigned char frame1_config [1024] ; + //unsigned char frame2_config [1024] ; + unsigned char pre_frame1_config [1024] ; + // unsigned char pre_frame2_config [1024] ; + + // 清空 + memset( frame1_config , 0 , 1024 ) ; + //memset( frame2_config , 0 , 1024 ) ; + memset( pre_frame1_config , 0 , 1024 ) ; + //memset( pre_frame2_config , 0 , 1024 ) ; + + memcpy( frame1_config , paraFileStruct.s_para_buff , 1024 ) ; + // memcpy( frame2_config , ((char*)paraFileStruct.s_para_buff) + 1024 , 1024 ) ; + memcpy( pre_frame1_config , ((char*)paraFileStruct.s_para_buff) + 1024 , 1024 ) ; + //memcpy( pre_frame2_config , ((char*)paraFileStruct.s_para_buff) + 3072 , 1024 ) ; + + QString str; + g_pMachine->setFrameAnglePara((EmbMvAng *) frame1_config); + g_pMachine->setFrameAnglePara((EmbMvAng *) pre_frame1_config); + + str = (tr("Frame parameters imported fail!"));//动框参数导入失败! + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + str = (tr("Frame parameters imported successfully!"));//动框参数导入成功! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + else + { + //文件头不匹配,无效的参数文件! + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = (tr("File head not match, invalid file!"));//文件头不匹配,无效的参数文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + } + } + } +} + +s16 MainWidgetFunction::refreshWifiList(QStringList &wifiStrList,s16 scan) +{ + if(scan == 0){}//为了去掉编译警告 + wifiStrList.clear(); + + QProcess cmd; + QString cmdStr; + cmdStr.clear(); + QString strCmdOut; + strCmdOut.clear(); + QStringList lineStrList; + lineStrList.clear(); + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + +#ifdef Q_OS_LINUX + cmdStr = "ifconfig";//查看wlan0初始化是否成功 + cmd.start(cmdStr); + cmd.waitForStarted(); + cmd.waitForFinished(); + strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput()); + lineStrList = strCmdOut.split("\n", QString::SkipEmptyParts); //换行符 + int initFlag = 0; + for(int i = 0; i < lineStrList.size(); i++) + { + QString lineStr = lineStrList[i]; + if(lineStr.indexOf("wlan0") != -1) + { + initFlag = 1; + break; + } + } + if(initFlag == 0) + { + m_pPromptDlg->setContentStr(tr("Failed to initialize wlan0!"));//初始化wlan0失败! + m_pPromptDlg->exec(); + return -1; + } + + if(scan != 0) + { + cmdStr = "wpa_cli -i wlan0 scan";//搜索可见wifi + cmd.start(cmdStr); + cmd.waitForStarted(); + cmd.waitForFinished(); + strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput()); + int flag = 0; + while(strCmdOut.toUpper().indexOf("OK") == -1) + { + cmdStr = "wpa_cli -i wlan0 scan";//搜索可见wifi + cmd.start(cmdStr); + cmd.waitForStarted(); + cmd.waitForFinished(); + strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput()); + flag++; + if(flag >= 100) + { + break; + } + } + } + + cmdStr = "wpa_cli -i wlan0 scan_result";//获取搜索结果 + cmd.start(cmdStr); + cmd.waitForStarted(); + cmd.waitForFinished(); + strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput()); + lineStrList = strCmdOut.split("\n", QString::SkipEmptyParts);//换行符 + for(int i = 0; i < lineStrList.size(); i++) + { + //qDebug()<= 2 && lineStr[lineStr.size()-1].indexOf("]") == -1) + { + QString str = lineStr[lineStr.size()-1].remove(QRegExp("^ +\\s*"));//正则表达式去掉空格 + s16 ifExist = 0; + for(s16 m = 0; m < wifiStrList.size(); m++) + { + if(wifiStrList[m] == str) + { + ifExist = 1; + break; + } + } + if(ifExist == 0) + { + wifiStrList.append(str); + } + } + } + if(wifiStrList.size() <= 0) + { + m_pPromptDlg->setContentStr(tr("Failed to search for WiFi list. Please try again later!"));//搜索wifi列表失败,请稍后重试! + m_pPromptDlg->exec(); + return -1; + } +#endif + return 1; +} + +QString MainWidgetFunction::getIpSegment(bool bl) +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString ipStr; + ipStr.clear(); + if(bl == true){}//为了去掉编译警告 + //linux下查询wifi连接状态 +#ifdef Q_OS_LINUX + s16 value = -1; + QProcess cmd; + QString cmdStr; + cmdStr.clear(); + + QString strCmdOut; + strCmdOut.clear(); + + QStringList lineStrList; + lineStrList.clear(); + + cmdStr = "wpa_cli -i wlan0 status";//查询wifi连接状态 + cmd.start(cmdStr); + cmd.waitForStarted(); + cmd.waitForFinished(); + strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput()); + //qDebug()<<"strCmdOut"<= 2) + { + QString str1 = lineStr[0]; + //qDebug()<= 0) + { + QString modeStr; + modeStr.clear(); + if(bl == false) + { + modeStr = tr("dynamic");//动态 + } + else if(bl == true) + { + modeStr = tr("static");//静态 + } + + ipStr = ipStr + "(" + modeStr + ")"; + } + else + { + if(bl == true) + { + m_pPromptDlg->setContentStr(tr("Failed to obtain IP. Please check the settings!"));//获取IP失败,请检查设置! + m_pPromptDlg->exec(); + } + } +#endif + return ipStr; +} + +//工作参数导入 +void MainWidgetFunction::funImportWkParameter(QString tStyle) +{ + m_pSystemManageDlg->setTypeLogo(tStyle); + m_pSystemManageDlg->setMainTitle(tr("WkParameter Import")); + m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > WkParameter Import")); + m_pSystemManageDlg->initDialog(); + + systemUpgrade(WKPARA_IMPORT); +} + +//参数导入 +void MainWidgetFunction::funImportParameter(QString tStyle) +{ + m_pSystemManageDlg->setTypeLogo(tStyle); + m_pSystemManageDlg->setMainTitle(tr("Parameter Import")); + m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > Parameter Import")); + m_pSystemManageDlg->initDialog(); + + systemUpgrade(PARA_IMPORT); +} + +//主控升级 +void MainWidgetFunction::funMCUpgrade(QString tStyle) +{ + m_pSystemManageDlg->setTypeLogo(tStyle); + m_pSystemManageDlg->setMainTitle(tr("MC Upgrade")); + m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > MC Upgrade")); + m_pSystemManageDlg->initDialog(); + + systemUpgrade(MC_UPDATA); +} + +//界面升级 +void MainWidgetFunction::funHMIUpgrade(QString tStyle) +{ + m_pSystemManageDlg->setTypeLogo(tStyle); + m_pSystemManageDlg->setMainTitle(tr("HMI Upgrade")); + m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > HMI Upgrade")); + m_pSystemManageDlg->initDialog(); + + systemUpgrade(HMI_UPDATA); +} + +void MainWidgetFunction::funWIFI(QString tStyle) +{ + QStringList wifiStrList; + wifiStrList.clear(); + s16 rel = refreshWifiList(wifiStrList); + if(rel > 0) + { + m_pSystemManageDlg->setTypeLogo(tStyle); + m_pSystemManageDlg->setMainTitle(tr("WIFI")); + m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > WIFI")); + + bool mode = false;//动态获取IP方式 + QString iniPath = WIFIINIPATH; + QSettings setting(iniPath,QSettings::IniFormat); + QString wifiName = QByteArray::fromBase64(setting.value("WIFI/default_ssid").toByteArray()); + QString wifiPass = QByteArray::fromBase64(setting.value("WIFI/default_passwd").toByteArray()); + mode = setting.value("WIFI/static_mode").toBool(); + + QString ip = getIpSegment(mode); + if(ip.length() > 0)//已连接 + { + m_pSystemManageDlg->setWifiInfo(ip,wifiName,wifiPass,mode); + m_pSystemManageDlg->initDialog(1); + for(s16 i = 0; i < wifiStrList.size(); i++) + { + m_pSystemManageDlg->addItem(wifiStrList.at(i)); + } + emit siWifiState(true); + } + else//未连接 + { + m_pSystemManageDlg->initDialog(1); + for(s16 i = 0; i < wifiStrList.size(); i++) + { + m_pSystemManageDlg->addItem(wifiStrList.at(i)); + } + emit siWifiState(false); + } + m_pSystemManageDlg->exec(); + } +} + +//参数导出 +void MainWidgetFunction::funExportParameter() +{ + QString usbPath = detectUsb(); + if(usbPath.length() <= 0) + { + //优盘不存在 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("USB flash drive is not detected!");//未检测到优盘! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + //导出参数文件时文件名自动生成 + QString i_para = "Ppara_"; + QString paradat = ".paradat"; + QString i_time = QDateTime::currentDateTime().toString("_yyMMdd_hhmmss");//时间日期 + + QString strName = i_para + i_time + paradat; + QString paraFileName = usbPath + strName; + QFile::remove (paraFileName) ; + +#ifdef Q_OS_LINUX + system("sync"); +#endif + + char para_mc [ 1024 ]; + char para_wk [ 1024 ]; + + char pre_para_mc [ 1024 ]; + char pre_para_wk [ 1024 ]; + + memcpy(para_mc , (u8*) (&(g_pMachine->getMcPara())) , 1024 ); + memcpy(para_wk , (u8*) (&(g_pMachine->getWkPara())) , 1024 ); + + memcpy(pre_para_mc , (u8*) (&(g_pMachine->getPreMcPara())) , 1024 ); + memcpy(pre_para_wk , (u8*) (&(g_pMachine->getPreWkPara())) , 1024 ); + + //两个缓冲区,输出成一个参数文件 + // 转换结构体 开始 + ParaFile paraFileStruct ; + memset(¶FileStruct,0,sizeof(ParaFile)) ; + + paraFileStruct.s_head[0] = 'P'; + paraFileStruct.s_head[1] = 'A'; + paraFileStruct.s_head[2] = 'R'; + paraFileStruct.s_head[3] = 'A'; + + paraFileStruct.s_type = 0 ; + paraFileStruct.s_len = 4096 ; + + memcpy( paraFileStruct.s_para_buff , para_wk , 1024 ); + memcpy( (char *) (paraFileStruct.s_para_buff) + 1024 , para_mc , 1024 ); + memcpy( (char *) (paraFileStruct.s_para_buff) + 2048 , pre_para_mc , 1024 ); + memcpy( (char *) (paraFileStruct.s_para_buff) + 3072 , pre_para_wk , 1024 ); + + paraFileStruct.s_crc = calcCrc16( (u8 * ) paraFileStruct.s_para_buff , 4096 ) ; + // 转换结构体 结束 + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + QString str; + + // 保存文件 开始 + QFile file(paraFileName); + bool bl = file.open(QIODevice::ReadWrite | QIODevice::Truncate); + if(bl == false) + { + //参数导出失败! + str = tr("Parameters exported failed!");//参数导出失败! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + file.close(); + return; + } + + bl = file.write((char*)¶FileStruct,sizeof(ParaFile)); + if(bl == false) + { + //参数导出失败! + str = tr("Parameters exported failed!");//参数导出失败! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + file.close(); + return; + } + file.flush(); + file.close(); + // 保存文件 结束 + +#ifdef Q_OS_LINUX + system("sync"); +#endif + + //参数导出成功 + str = tr("Parameters exported successfully!");//参数导出成功! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; +} + +//动框参数导出 +void MainWidgetFunction::funExportFrameParameter() +{ + QString usbPath = detectUsb(); + if(usbPath.length() <= 0) + { + //优盘不存在 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("USB flash drive is not detected!");//未检测到优盘! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + //导出参数文件时文件名自动生成 + MCInfo info1 = g_pMachine->getMcInfo(); + QString software_ver; + software_ver.sprintf("%s",info1.softwareVerStr); + + QStringList i_sof = software_ver.split(" ");//读取空格之前的版本信息 + QString i_info = i_sof[0] ; + QString i_para = "FrameEpara_"; + QString paradat = ".frameparadat"; + QString i_time = QDateTime::currentDateTime().toString("_yyMMdd_hhmmss");//时间日期 + + QString strName = i_para + i_info + i_time + paradat; + QString paraFileName = usbPath + strName; + QFile::remove (paraFileName) ; + +#ifdef Q_OS_LINUX + system("sync"); +#endif + + char para_frame1 [ 1024 ]; + //char para_frame2 [ 1024 ]; + + char pre_para_frame1 [ 1024 ]; + // char pre_para_frame2 [ 1024 ]; + + memcpy(para_frame1 , (u8*) (&(g_pMachine->getFrameAnglePara())) , 1024 ); + memcpy(pre_para_frame1 , (u8*) (&(g_pMachine->getFrameAnglePara())) , 1024 ); + + //两个缓冲区,输出成一个参数文件 + // 转换结构体 开始 + ParaFile paraFileStruct ; + memset(¶FileStruct,0,sizeof(ParaFile)) ; + + paraFileStruct.s_head[0] = 'P'; + paraFileStruct.s_head[1] = 'A'; + paraFileStruct.s_head[2] = 'R'; + paraFileStruct.s_head[3] = 'A'; + + paraFileStruct.s_type = 0 ; + paraFileStruct.s_len = 4096 ; + + memcpy( paraFileStruct.s_para_buff , para_frame1 , 1024 ); + memcpy( (char *) (paraFileStruct.s_para_buff) + 1024 , pre_para_frame1 , 1024 ); + + paraFileStruct.s_crc = calcCrc16( (u8 * ) paraFileStruct.s_para_buff , 4096 ) ; + // 转换结构体 结束 + + // 保存文件 开始 + QFile file(paraFileName); + file.open(QIODevice::ReadWrite | QIODevice::Truncate); + file.write((char*)¶FileStruct,sizeof(ParaFile)); + file.flush(); + file.close(); + // 保存文件 结束 + +#ifdef Q_OS_LINUX + system("sync"); +#endif + + //参数导出成功 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("Frame parameters exported successfully!");//动框参数导出成功! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; +} + +//全部归零 +void MainWidgetFunction::funAllToZero() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("All to zero"));//全部归零 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->allToZero(); + } + } +} + +//主轴点动 +void MainWidgetFunction::funSpindleJog() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Spindle jog"));//主轴点动 + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->spindleJog(); + } + } +} + +void MainWidgetFunction::funPunchMsSeverOn() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Punch spindle enable"));//冲孔主轴使能 + + QString str; + str = tr("Is the punching spindle enabled?");//冲孔主轴是否使能? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->punchMsServoOn(); + } + } +} + +void MainWidgetFunction::funPunchMsSeverOff() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Punch spindle enable"));//冲孔主轴失能 + + QString str; + str = tr("Is the punching spindle disabled?");//冲孔主轴是否失能? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->punchMsServoOff(); + } + } +} + +void MainWidgetFunction::funPunchMsRun() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Punch spindle run"));//冲孔主轴研车 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->punchMsRun(); + } + } +} + +void MainWidgetFunction::funSewMsRun() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Sew spindle run"));//缝纫主轴研车 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) // 界面点击确认按钮要执行下面的问题 + { + if(g_pMachine != NULL) + { + g_pMachine->sewingMsRun(); + } + } +} + +void MainWidgetFunction::funEmbMsRun() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("embroidered spindle run"));//平绣主轴研车 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->embMsRun(); + } + } +} + +void MainWidgetFunction::funPunchSpindleJog() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Punch spindle jog"));//冲孔主轴点动 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->punchJog(); + } + } +} + +void MainWidgetFunction::funSewSpindleJog() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Sew spindle jog"));//缝纫主轴点动 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->sewJog(); + } + } +} + +void MainWidgetFunction::funEmbSpindleJog() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("embroidered spindle jog"));//平绣主轴点动 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->embJog(); + } + } +} + +void MainWidgetFunction::funToHookPosition() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Hook position"));//缝纫主轴去勾线位 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->hookPos(); + } + } +} + +void MainWidgetFunction::funEmbToHookPosition() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Emb hook position"));//平绣主轴去勾线位 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->embHookPos(); + } + } +} + +//缝纫旋转校对 +void MainWidgetFunction::funRotateProofread() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Rotate proofread"));//缝纫旋转校对 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->rotateProofread(); + } + } +} + +void MainWidgetFunction::funSewheadUpDown() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Sewing machine head lifting"));//缝纫机头升降 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->sewHeadLift(); + } + } +} + +void MainWidgetFunction::switchMachineHead(int nNum) +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(nNum == 1) + { + m_pPromptDlg->setTitleStr(tr("Change to the sew head"));//切换缝纫机头 + } + else if(nNum == 2) + { + m_pPromptDlg->setTitleStr(tr("Change to the punch head"));//切换冲孔机头 + } + else if(nNum == 3) + { + m_pPromptDlg->setTitleStr(tr("Change to the embroidered head"));//切换平绣机头 + } + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->headSwitch(nNum); + } + } +} + +void MainWidgetFunction::funNeedleContrast(int step) +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(step == 0) + { + m_pPromptDlg->setTitleStr(tr("Needle shuttle proofreading"));//针梭校对 + } + else if(step == 2) + { + m_pPromptDlg->setTitleStr(tr("Shuttle zero"));//梭归零 + } + else if(step == 3) + { + m_pPromptDlg->setTitleStr(tr("Needle zero"));//针归零 + } + else if(step == 4) + { + m_pPromptDlg->setTitleStr(tr("Needle shuttle reset"));//针梭复位 + } + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->msAdjust(step); + } + } +} + +//回换梭位 +void MainWidgetFunction::funBackShuttlePos() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Replacing shuttle positions"));//回换梭位 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->gotoShuttlePos(); + } + } +} + +//缝纫旋转 +void MainWidgetFunction::funSewRotate(int flag) +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(flag == 1) + { + m_pPromptDlg->setTitleStr(tr("Sew rotate up"));//缝纫旋转+ + } + else if(flag == 2) + { + m_pPromptDlg->setTitleStr(tr("Sew rotate down"));//缝纫旋转- + } + + QString str; + str = tr("Whether to change the steering!");//是否改变转向! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + if(flag == 1) + { + g_pMachine->moveRotByHand('p',2); + } + else if(flag == 2) + { + g_pMachine->moveRotByHand('n',2); + } + } + } +} + +//定偏移点 +void MainWidgetFunction::funSetOffsetPoint() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Set offset point"));//定偏移点 + + QString str; + str = tr("Whether to set the current point as the offset point?");//是否将当前点设置为偏移点? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->setOffsetPos(); + } + } +} + +//回偏移点 +void MainWidgetFunction::funBackOffsetPoint() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Back offset point"));//回偏移点 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->gotoOffsetPos(); + } + } +} + +void MainWidgetFunction::funPunchRotToZero() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Punch rot to zero"));//冲孔旋转去零位 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->punchRotToZero(); + } + } +} + +//回工作点 +void MainWidgetFunction::funBackWorkPoint() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Back work point"));//回工作点 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->gotoWorkPos(); + } + } +} + +//回定位点 +void MainWidgetFunction::funBackAnchorPoint() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Back anchor point"));//回定位点 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->gotoAnchorPos(); + } + } +} +//回穿线点 +void MainWidgetFunction::funBackThreadPoint() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Back thread point"));//回穿线点 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->gotoWorkPos(); + } + } +} + +//回原点 +void MainWidgetFunction::funBackToOrigin() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Back to origin"));//回原点 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->gotoZeroPos(); + } + } +} + +void MainWidgetFunction::funBackCenterPoint() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Back center point"));//回中心点 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->gotoCenterPos(); + } + } +} + +//第一机头定起始点 +void MainWidgetFunction::funFirstHeadSetStartPoint(QString filePath) +{ + if(filePath.length() <= 0) + { + return; + } + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + m_pPromptDlg->setTitleStr(tr("Sew head set start point"));//缝纫头定起始点 + } + else + { + m_pPromptDlg->setTitleStr(tr("Set start point"));//定起始点 + } + QString str = tr("Whether to set the current point as the start point?");//是否将当前点设置为起始点? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + s32 x,y; + x = y = 0; + if(g_pMachine != NULL) + { + m_mcStatus = g_pMachine->getMcStatus(); + x = m_mcStatus.xPos; + y = m_mcStatus.yPos; + } + int oldBeginX, oldBeginY; + oldBeginX = oldBeginY = 0; + + if(g_pCurEmbData != NULL) + { + oldBeginX = g_pCurEmbData->getBeginX(); + oldBeginY = g_pCurEmbData->getBeginY(); + g_pCurEmbData->setStartPosition(x,y); + //改变中间数据(ds16)的头文件 + } + sendPatternHead(filePath);//发送花样ds16头文件 + + //每次点击选择花样的时候才会生成ds16数据,其他时候就是给下位机发头文件 + //dsr,dst整个文件->中间数据->ds16 + //冲孔机起始点-保存到fcg,不改变源文件 + //垫板冲孔机-自动定起始点 + //压胶机-保存到fcg,不改变源文件 + //冲缝机-保存到源文件 + //将新的起始点写回到(dst,dsr)源文件中 + if(g_emMacType == MACHINE_PUNCH || g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB)//等于冲缝机 + { + int wx = x - oldBeginX - g_pCurEmbData->getAnchorX(); + int wy = y - oldBeginY - g_pCurEmbData->getAnchorY(); + writePonitToFile(filePath,wx,wy); + } + + //等于压胶机或冲孔机 + if(g_emMacType == MACHINE_ADHESIVE || g_emMacType == MACHINE_PUNCH_SEW || + g_emMacType == MACHINE_PUNCH || g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + DataFileHead fileHead; + getPatternHeadConfig(filePath,fileHead); + fileHead.beginX = x; + fileHead.beginY = y; + setPatternHeadConfig(filePath,fileHead); + } + + m_beginX = x; + m_beginY = y; + + //流程复位 + g_pMachine->allToReset(); + } +} + +//主机头设置定位点(冲缝机时主机头为缝纫机头) +void MainWidgetFunction::funFirstHeadSetAnchorPoint(QString filePath) +{ + if(filePath.length() <= 0) + { + return; + } + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + m_pPromptDlg->setTitleStr(tr("Sew head set anchor point"));//缝纫头定定位点 + } + else + { + m_pPromptDlg->setTitleStr(tr("Set anchor point"));//定定位点 + } + QString str = tr("Whether to set the current point as the anchor point?");//是否将当前点设置为定位点? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + s32 x,y; + x = y = 0; + if(g_pMachine != NULL) + { + m_mcStatus = g_pMachine->getMcStatus(); + x = m_mcStatus.xPos; + y = m_mcStatus.yPos; + } + if(g_pCurEmbData != NULL) + { + g_pCurEmbData->setAnchorPosition(x,y); + //改变中间数据(ds16)的头文件 + } + sendPatternHead(filePath);//发送花样ds16头文件 + + //每次点击选择花样的时候才会生成ds16数据,其他时候就是给下位机发头文件 + //将新的起始点写回到(dst,dsr)源文件中 + //等于冲缝机或冲缝绣 + if(g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB ) + { + writePonitToFile(filePath,x,y,1); + } + + //等于压胶机或冲孔机 + if(g_emMacType == MACHINE_ADHESIVE || g_emMacType == MACHINE_PUNCH_SEW || + g_emMacType == MACHINE_PUNCH || g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + DataFileHead fileHead; + getPatternHeadConfig(filePath,fileHead); + fileHead.anchorX = x; + fileHead.anchorY = y; + setPatternHeadConfig(filePath,fileHead); + } + } +} + +//第二机头设置起始点(冲缝机时次机头为冲孔机头) +void MainWidgetFunction::funSecHeadSetStartPoint(QString filePath) +{ + if(filePath.length() <= 0) + { + return; + } + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + m_pPromptDlg->setTitleStr(tr("Punch head set start point"));//冲孔头定起始点 + } + else + { + m_pPromptDlg->setTitleStr(tr("Set start point"));//定起始点 + } + QString str = tr("Whether to set the current point as the start point?");//是否将当前点设置为起始点? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + s32 x,y; + x = y = 0; + if(g_pMachine != NULL) + { + m_mcStatus = g_pMachine->getMcStatus(); + x = m_mcStatus.xPos - g_pMachine->getMcPara().buf[82]; + y = m_mcStatus.yPos - g_pMachine->getMcPara().buf[83]; + } + int oldBeginX,oldBeginY; + oldBeginX = oldBeginY = 0; + if(g_pCurEmbData != NULL) + { + oldBeginX = g_pCurEmbData->getBeginX(); + oldBeginY = g_pCurEmbData->getBeginY(); + g_pCurEmbData->setStartPosition(x,y); + //改变中间数据(ds16)的头文件 + } + sendPatternHead(filePath);//发送花样ds16头文件 + + //每次点击选择花样的时候才会生成ds16数据,其他时候就是给下位机发头文件 + //dsr,dst整个文件->中间数据->ds16 + //冲孔机起始点-保存到fcg,不改变源文件 + //垫板冲孔机-自动定起始点 + //压胶机-保存到fcg,不改变源文件 + //冲缝机-保存到源文件 + //将新的起始点写回到(dst,dsr)源文件中 + if(g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB)//等于冲缝机 + { + int wx = x - oldBeginX - g_pCurEmbData->getAnchorX(); + int wy = y - oldBeginY - g_pCurEmbData->getAnchorY(); + writePonitToFile(filePath,wx,wy); + } + //冲缝绣 + if(g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + DataFileHead fileHead; + getPatternHeadConfig(filePath,fileHead); + fileHead.beginX = x; + fileHead.beginY = y; + setPatternHeadConfig(filePath,fileHead); + } + m_beginX = x; + m_beginY = y; + + //流程复位 + g_pMachine->allToReset(); + } +} + +//次机头设置定位点(冲缝机时次机头为冲孔机头) +void MainWidgetFunction::funSecHeadSetAnchorPoint(QString filePath) +{ + if(filePath.length() <= 0) + { + return; + } + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + m_pPromptDlg->setTitleStr(tr("Punch head set anchor point"));//冲孔头定定位点 + } + else + { + m_pPromptDlg->setTitleStr(tr("Set anchor point"));//定定位点 + } + QString str = tr("Whether to set the current point as the anchor point?");//是否将当前点设置为定位点? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + s32 x,y; + x = y = 0; + if(g_pMachine != NULL) + { + m_mcStatus = g_pMachine->getMcStatus(); + x = m_mcStatus.xPos - g_pMachine->getMcPara().buf[82]; + y = m_mcStatus.yPos - g_pMachine->getMcPara().buf[83]; + } + if(g_pCurEmbData != NULL) + { + g_pCurEmbData->setAnchorPosition(x,y); + //改变中间数据(ds16)的头文件 + } + sendPatternHead(filePath);//发送花样ds16头文件 + + //每次点击选择花样的时候才会生成ds16数据,其他时候就是给下位机发头文件 + //将新的起始点写回到(dst,dsr)源文件中 + //等于冲缝机或冲缝绣 + if(g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB ) + { + writePonitToFile(filePath,x,y,1); + } + + //等于压胶机或冲孔机 + if(g_emMacType == MACHINE_ADHESIVE || g_emMacType == MACHINE_PUNCH_SEW || + g_emMacType == MACHINE_PUNCH || g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + DataFileHead fileHead; + getPatternHeadConfig(filePath,fileHead); + fileHead.anchorX = x; + fileHead.anchorY = y; + setPatternHeadConfig(filePath,fileHead); + } + } +} + +//第三机头设置起始点(冲绣缝时三机头为绣花机头) +void MainWidgetFunction::funThrHeadSetStartPoint(QString filePath) +{ + if(filePath.length() <= 0) + { + return; + } + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + m_pPromptDlg->setTitleStr(tr("Emb head set start point"));//绣花头定起始点 + } + else + { + m_pPromptDlg->setTitleStr(tr("Set start point"));//定起始点 + } + QString str = tr("Whether to set the current point as the start point?");//是否将当前点设置为起始点? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + s32 x,y; + x = y = 0; + if(g_pMachine != NULL) + { + m_mcStatus = g_pMachine->getMcStatus(); + x = m_mcStatus.xPos - g_pMachine->getMcPara().buf[150]; + y = m_mcStatus.yPos - g_pMachine->getMcPara().buf[151]; + } + int oldBeginX,oldBeginY; + oldBeginX = oldBeginY = 0; + if(g_pCurEmbData != NULL) + { + oldBeginX = g_pCurEmbData->getBeginX(); + oldBeginY = g_pCurEmbData->getBeginY(); + g_pCurEmbData->setStartPosition(x,y); + //改变中间数据(ds16)的头文件 + } + sendPatternHead(filePath);//发送花样ds16头文件 + + //每次点击选择花样的时候才会生成ds16数据,其他时候就是给下位机发头文件 + //dsr,dst整个文件->中间数据->ds16 + //冲孔机起始点-保存到fcg,不改变源文件 + //冲绣缝起始点-保存到fcg,不改变源文件 + //垫板冲孔机-自动定起始点 + //压胶机-保存到fcg,不改变源文件 + //冲缝机-保存到源文件 + //将新的起始点写回到(dst,dsr)源文件中 + if(g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB)//等于冲缝机 + { + int wx = x - oldBeginX - g_pCurEmbData->getAnchorX(); + int wy = y - oldBeginY - g_pCurEmbData->getAnchorY(); + writePonitToFile(filePath,wx,wy); + } + + if(g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + DataFileHead fileHead; + getPatternHeadConfig(filePath,fileHead); + fileHead.beginX = x; + fileHead.beginY = y; + setPatternHeadConfig(filePath,fileHead); + } + + m_beginX = x; + m_beginY = y; + + //流程复位 + g_pMachine->allToReset(); + } +} + +//三机头设置定位点(冲绣缝时三机头为平绣机头) +void MainWidgetFunction::funThrHeadSetAnchorPoint(QString filePath) +{ + if(filePath.length() <= 0) + { + return; + } + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + m_pPromptDlg->setTitleStr(tr("Emb head set anchor point"));//绣花头定定位点 + } + else + { + m_pPromptDlg->setTitleStr(tr("Set anchor point"));//定定位点 + } + QString str = tr("Whether to set the current point as the anchor point?");//是否将当前点设置为定位点? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + s32 x,y; + x = y = 0; + if(g_pMachine != NULL) + { + m_mcStatus = g_pMachine->getMcStatus(); + x = m_mcStatus.xPos - g_pMachine->getMcPara().buf[150]; + y = m_mcStatus.yPos - g_pMachine->getMcPara().buf[151]; + } + if(g_pCurEmbData != NULL) + { + g_pCurEmbData->setAnchorPosition(x,y); + //改变中间数据(ds16)的头文件 + } + sendPatternHead(filePath);//发送花样ds16头文件 + + //每次点击选择花样的时候才会生成ds16数据,其他时候就是给下位机发头文件 + //将新的起始点写回到(dst,dsr)源文件中 + //等于冲缝机或冲缝绣 + if(g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB ) + { + writePonitToFile(filePath,x,y,1); + } + } +} + +//边框检查超限后重新自动设置起始点 +void MainWidgetFunction::funResetStartPoint(QString filePath,DataFilePos pos) +{ + if(filePath.length() <= 0) + { + return; + } + + s32 beginX,beginY; + beginX = beginY = 0; + + beginX = pos.beginX; + beginY = pos.beginY; + + if(g_pCurEmbData != NULL) + { + g_pCurEmbData->setStartPosition(beginX,beginY); + } + + //边框检查后自动定起始点总是不成功(数据发送失败),所以加了延时已临时解决 + QDateTime oldTime = QDateTime::currentDateTime(); + while(1) + { + QDateTime curTime = QDateTime::currentDateTime(); + if(oldTime.msecsTo(curTime) > 200) + { + break; + } + } + + sendPatternHead(filePath); + + m_beginX = beginX; + m_beginY = beginY; + + //流程复位 + g_pMachine->allToReset(); +} + +void MainWidgetFunction::funSetStartPoint(QString filePath, s32 x, s32 y) +{ + if(filePath.length() <= 0) + { + return; + } + + int oldBeginX, oldBeginY; + oldBeginX = oldBeginY = 0; + if(g_pCurEmbData != NULL) + { + oldBeginX = g_pCurEmbData->getBeginX(); + oldBeginY = g_pCurEmbData->getBeginY(); + g_pCurEmbData->setStartPosition(x,y); + } + + //将新的起始点写回到文件中 + //非定位冲时写入 + if(g_emMacType != MACHINE_PUNCH_AUTOPOS) + { + int wx = x - oldBeginX - g_pCurEmbData->getAnchorX();//数据起始点坐标-数据起始点坐标-数据定位点坐标 + int wy = y - oldBeginY - g_pCurEmbData->getAnchorY(); + writePonitToFile(filePath,wx,wy); + } + + m_beginX = x; + m_beginY = y; + +#ifdef Q_OS_LINUX + system("sync"); +#endif +} + +void MainWidgetFunction::funSetAnchorPoint(QString filePath, s32 x, s32 y) +{ + if(filePath.length() <= 0) + { + return; + } + + if(g_pCurEmbData != NULL) + { + g_pCurEmbData->setAnchorPosition(x,y); + } + + //将新的定位点写回到文件中 + //等于冲缝绣或冲缝机 + if(g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + writePonitToFile(filePath,x,y,1); + } + +#ifdef Q_OS_LINUX + system("sync"); +#endif +} + +//回起始点 +void MainWidgetFunction::funBackStartPoint() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Back start point"));//回起始点 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->gotoStartPos(); + } + } +} + +//边框检查 +void MainWidgetFunction::funBorderCheck() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Border check"));//边框检查 + + int punchXN,punchXP,punchYN,punchYP; + punchXN = punchXP = punchYN = punchYP = 0; + + if(g_pMachine != NULL) + { + ParaStruct mcParaValues; + mcParaValues = g_pMachine->getMcPara(); + + //等于冲缝机或压胶机 + if(g_emMacType == MACHINE_ADHESIVE || g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + punchXN = mcParaValues.buf[84]; // x可缝纫区域负边界(X-) + punchXP = mcParaValues.buf[85]; // x可缝纫区域正边界(X+) + punchYN = mcParaValues.buf[86]; // y可缝纫区域负边界(Y-) + punchYP = mcParaValues.buf[87]; // y可缝纫区域正边界(Y+) + } + + //等于冲孔机或垫板冲孔机 + if(g_emMacType == MACHINE_PUNCH || g_emMacType == MACHINE_PUNCH_AUTOPOS) + { +// punchXN = 0; // x可冲孔区域负边界(X-) +// punchXP = 90000; // x可冲孔区域正边界(X+) +// punchYN = 0; // y可冲孔区域负边界(Y-) +// punchYP = 60000; // y可冲孔区域正边界(Y+) + + punchXN = mcParaValues.buf[88]; // x可冲孔区域负边界(X-) + punchXP = mcParaValues.buf[89]; // x可冲孔区域正边界(X+) + punchYN = mcParaValues.buf[90]; // y可冲孔区域负边界(Y-) + punchYP = mcParaValues.buf[91]; // y可冲孔区域正边界(Y+) + } + } + + QString str1,str2,str3,str4; + if((g_pCurEmbData->getMaxX() / 100) > punchXP / 100) //x+ + { + //左边界超限 + str1 = tr("Left side out of frame ") + QString::number(g_pCurEmbData->getMaxX() / 100 - punchXP / 100) + " mm"; // 原为m_maxX + } + else + { + str1 = tr("Left side is ok");//左边界正常 + } + + if((g_pCurEmbData->getMinX() / 100) < punchXN / 100) //x- + { + //右边界超限 + str2 = tr("Right side out of frame ") + QString::number(punchXN / 100 - g_pCurEmbData->getMinX() / 100) + " mm"; // yuanwei m_minX + } + else + { + str2 = tr("Right side is ok");//右边界正常 + } + + if((g_pCurEmbData->getMaxY() / 100) > punchYP / 100) //y+ + { + //下边界超限 + str3 = tr("Lower side out of frame ") + QString::number(g_pCurEmbData->getMaxY() / 100 - punchYP / 100) + " mm"; // 原为m_maxY + } + else + { + str3 = tr("Lower side is ok");//下边界正常 + } + + if((g_pCurEmbData->getMinY() / 100) < punchYN / 100) //y- m_minY + { + //上边界超限 + str4 = tr("Upper side out of frame ") + QString::number(punchYN / 100 - g_pCurEmbData->getMinY() / 100) + " mm"; // 原为m_minY,上面那句也一样 + } + else + { + str4 = tr("Upper side is ok");//上边界正常 + } + + QString str; + str = str1 + "\n" + str2 + "\n" + str3 + "\n"+ str4 + "\n"; // 原为"\n\n",lxs20220627改为\n + //点击确定按钮机器将进行边框检查的动作,点击取消按钮机器不会动作并退出此界面! + str += tr("Click OK button machine will make a frame check, click the Cancel button machine will not move and exit this interface!"); + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if((m_mcStatus.workStatus & WORK_STA_BUSY) != 0) // 下位机在执行动作 + { + return; + } + + g_pMachine->checkFrame(); // 发给下位机,边框检查 + } +} + +void MainWidgetFunction::funSewHeadCutLine(int nNum) +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Sewing machine head thread cutting"));//缝纫机头剪线 + + QString str; + str = tr("The machine is about to cut the thread, please pay attention to safety!");//机器即将剪线,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->sewCutThread(nNum); + } + } +} + +void MainWidgetFunction::funEmbHeadCutLine() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Embroidered machine head thread cutting"));//绣花机头剪线 + + QString str; + str = tr("The machine is about to cut the thread, please pay attention to safety!");//机器即将剪线,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->embCutThread(); + } + } +} + +//手动剪线-剪上线 +void MainWidgetFunction::funManualTrimUp() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Cutting thread up"));//剪上线 + + QString str; + str = tr("The machine is about to cut the thread, please pay attention to safety!");//机器即将剪线,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->cutThreadUp(); + } + } +} + +//手动剪线-剪下线 +void MainWidgetFunction::funManualTrimDn() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Cutting thread down"));//剪下线 + + QString str; + str = tr("The machine is about to cut the thread, please pay attention to safety!");//机器即将剪线,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->cutThreadDn(); + } + } +} + +//剪刀开合 +void MainWidgetFunction::funCutterOpenAndClose() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Upper cutter"));//上剪线 + QString str; + str = tr("The scissors are about to move, please pay attention to safety!");//剪刀即将动作,请注意安全! + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->manualAction(OT_CUT_UP); + } + } +} + +//冲孔换杆归零 +void MainWidgetFunction::funPunchRodZero() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Punch rod zero"));//冲孔换杆归零 + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->manualAction(PUNCH_CHANGE_ZERO); + } + } +} + +void MainWidgetFunction::funPunchManualChangeColor() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_M_C_C); + m_pPromptDlg->setTitleStr(tr("Manual change color")); + m_pPromptDlg->setCurNeedleStrVisible(true);//当前针杆label是否可见 -rq + m_pPromptDlg->initNeedleBar(MACHINE_PUNCH); + + if (m_pPromptDlg->exec() == 1) + { + s32 val = m_pPromptDlg->getNeedleSelectIdx(); + + if(g_pMachine != NULL) + { + g_pMachine->punchSwitchNeedle(val); + } + } +} + +void MainWidgetFunction::funEmbManualChangeColor() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_M_C_C); + m_pPromptDlg->setTitleStr(tr("embroidered Manual change color")); + m_pPromptDlg->setCurNeedleStrVisible(true);//当前针杆label是否可见 -rq + m_pPromptDlg->initNeedleBar(MACHINE_PUNCH_SEW_EMB); + + if (m_pPromptDlg->exec() == 1) + { + s32 val = m_pPromptDlg->getNeedleSelectIdx(); + + if(g_pMachine != NULL) + { + g_pMachine->embSwitchNeedle(val); + } + } +} + +void MainWidgetFunction::funSinglePunch() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Single punch"));//单次冲孔 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->singlePunch(); + } + } +} + +void MainWidgetFunction::funWorkPause() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Work Pause"));//暂停工作 + + QString str; + str = tr("Do you want to suspend machine operation?");//是否暂停机器工作? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->pauseWork(); + } + } +} + +//空走边框 +void MainWidgetFunction::funSimulateFrame() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Simulate frame"));//空走边框 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if((m_mcStatus.workStatus & WORK_STA_BUSY) != 0) // 下位机在执行动作 + { + return; + } + + g_pMachine->simulateFrame(); // 发给下位机,空走边框 + } +} + +void MainWidgetFunction::funProcessReset() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Process reset"));//流程复位 + + QString str; + str = tr("The machine is about to reset, please pay attention to safety!");//机器即将流程复位,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->allToReset(); + } + } +} + +//框架归零 +void MainWidgetFunction::funGotoZeroPos() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Goto zero pos"));//框架归零 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->gotoZeroPos(); + } + } +} + +//回角点 1、右上,2、右下,3、左上,4、左下 +void MainWidgetFunction::funGotoGorner(int nNum) +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Goto gorner"));//回角点 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->gotoGorner(nNum); + } + } +} + +//定工作范围 +void MainWidgetFunction::funSetWorkRange() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Set work range"));//定工作范围 + + QString str; + str = tr("If automatically set work range?");//是否自动定工作范围? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->autoSetWorkRange(); + } + } +} + +void MainWidgetFunction::funTestADC() +{ + if(g_pMachine != NULL) + { + g_pMachine->testADC(2); + } + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Test adc"));//测试电位器 + + m_pPromptDlg->setADCContentStr(); + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine!=NULL) + { + g_pMachine->testADC(0); + } + } +} + +void MainWidgetFunction::funPunchMsDown() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Punch ms down"));//冲头停下位 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->punchMsDown(); + } + } +} + +void MainWidgetFunction::funDrawOutline() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Draw outline"));//画轮廓线 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->punchDrawOutline(); + } + } +} + +//自动设置起始点-只有垫板冲孔机(自动定位冲孔机)有这个功能 +void MainWidgetFunction::funAutoSetStartPoint(QString filePath) +{ + s32 x,y; + x = y = 0; + + //等于垫板冲孔机 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS) + { + DataFileHead fileHead; + getPatternHeadConfig(filePath,fileHead); + x = fileHead.beginX ; + y = fileHead.beginY ; + } + + int oldBeginX, oldBeginY; + oldBeginX = oldBeginY = 0; + if(g_pCurEmbData != NULL) + { + oldBeginX = g_pCurEmbData->getBeginX(); + oldBeginY = g_pCurEmbData->getBeginY(); + g_pCurEmbData->setStartPosition(x,y); + } + + sendPatternHead(filePath); + //将新的起始点写回到文件中 + if(g_emMacType == MACHINE_PUNCH_SEW || g_emMacType == MACHINE_PUNCH_SEW_EMB)//等于冲缝机 + { + int wx = x - oldBeginX - g_pCurEmbData->getAnchorX(); + int wy = y - oldBeginY - g_pCurEmbData->getAnchorY(); + writePonitToFile(filePath,wx,wy); + } + + m_beginX = x; + m_beginY = y; + + //流程复位 + if(g_pMachine != NULL) + { + g_pMachine->allToReset(); + } +} + +void MainWidgetFunction::funContinuousOilSupply() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Continuous oil supply"));//连续供油 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->continuousOilSupply(); + } + } +} + +//手动加油 +void MainWidgetFunction::funManualOil(int nNum) +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Manual oil"));//手动加油 + + QString str; + str = tr("If manual oil?");//是否手动加油? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->manualOil(nNum); + } + } +} + +void MainWidgetFunction::sendPatternHead(QString filePath) +{ + if(DATA_FORMATE == DATA_DS16) + { + //获取文件头并重新发送文件头 + DataDs16FileHead *pDs16Head = g_pCurEmbData->getDsDatHead(); + g_pMachine->setFilePara(0, m_curFileID, (DataFilePara&)*pDs16Head); + } + else if(DATA_FORMATE == DATA_DS8) + { + QString ds8FilePath = filePath + ".ds8"; + QFile file(ds8FilePath); + + if(file.exists())//存在ds8文件 + { + if(!file.open(QIODevice::ReadOnly)) + { + qDebug() << "open file fail when read"; + return; + } + + QByteArray ary = file.readAll(); + DataDs16FileHead *pDs8Head = (DataDs16FileHead *)(ary.data()); + + DataDs16FileHead *pDs16Head = g_pCurEmbData->getDsDatHead(); + pDs8Head->anchorX = pDs16Head->anchorX; + pDs8Head->anchorY = pDs16Head->anchorY; + pDs8Head->beginX = pDs16Head->beginX; + pDs8Head->beginY = pDs16Head->beginY; + pDs8Head->beginR = pDs16Head->beginR; + //pDs8Head->combineMode = pDs16Head->combineMode; + pDs8Head->maxX = pDs16Head->maxX; + pDs8Head->maxY = pDs16Head->maxY; + pDs8Head->minX = pDs16Head->minX; + pDs8Head->minY = pDs16Head->minY; + memcpy(pDs8Head->switchTable,pDs16Head->switchTable,sizeof(pDs8Head->switchTable)); + + g_pMachine->setFilePara(0, m_curFileID, (DataFilePara&)*pDs8Head); + + file.close(); + } + else + { + QByteArray ds16dat = g_pCurEmbData->getDsDat();//获得ds16数据 + + QByteArray ds8dat; + ds8dat.clear(); + + // ds16数据 + int size = ds16dat.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("data less then head size"); + return; + } + DataDs16FileHead * pDs16Head = (DataDs16FileHead *)(ds16dat.data()); + ds8dat.append((char*)pDs16Head,sizeof(DataDs16FileHead)); + + int datasize = size - sizeof(DataDs16FileHead); + if (datasize <= 0) + { + qDebug("ds16 dataBegin err"); + return; + } + int stepsize = datasize/sizeof(Ds16Item); + if (stepsize <= 0) + { + qDebug("ds16 data size err"); + return; + } + Ds16Item *pData = (Ds16Item *)(ds16dat.data() + sizeof(DataDs16FileHead)); + Ds16Item * dataPtr = pData; + + u8 ctrl,attr; + s16 dx,dy,dr; + Ds8Item ds8Item; + + for (int i = 0; i < stepsize; i++) + { + ctrl = dataPtr->ctrl; + attr = dataPtr->attr; + dx = dataPtr->dx; + dy = dataPtr->dy; + dr = dataPtr->dr; + + ds8Item.ctrl = ctrl; + ds8Item.attr = attr; + ds8Item.dx = dx; + ds8Item.dy = dy; + ds8Item.dr = dr; + + ds8dat.append((char*)&ds8Item,sizeof(Ds8Item)); + + dataPtr++; + } + + //发送ds8数据 + DataDs16FileHead * pDs8Head = (DataDs16FileHead *)(ds8dat.data()); + Ds8Item *tData = (Ds8Item *)(ds8dat.data() + sizeof(DataDs16FileHead)); + + //重新生成文件头 + pDs8Head->dataSize = pDs8Head->itemNums*sizeof(Ds8Item); // 数据字节数 + pDs8Head->bytesPerItem = sizeof(Ds8Item); // 每项占的字节数 + pDs8Head->dataChecksum = calcCheckSum32((u8 *)(tData) , pDs8Head->dataSize);; // 数据累加校验和 + pDs8Head->checkCrc = calcCrc16((u8 *)(pDs8Head), HEAD_FIX_INFO_LEN); // 前面6个字段的CRC校验,(6个字段分别为:文件名称,字节数,项个数,每项字节数,每块字节数,数据累加和的CRC校验值) + + g_pMachine->setFilePara(0, m_curFileID, (DataFilePara&)*pDs8Head); + } + } +} + +//选择花样后发送数据并显示大图 +void MainWidgetFunction::sendPatternData(QString filePath,int type) +{ + m_filePath = filePath; + + //保存最后一次的花样路径到配置文件中 + if(g_pSettings != NULL) + { + g_pSettings->writeToIniFile("Pattern/name",filePath); + } + + if(DATA_FORMATE == DATA_DS16) + { + sendDs16PatternData(type);//发送ds16数据 + } + else if(DATA_FORMATE == DATA_DS8) + { + convertDs16ToDs8AndSend(filePath,type);//将ds16数据转换为ds8数据并发送 + } +} + +void MainWidgetFunction::funFaceDetect() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_FACE); + m_pPromptDlg->setTitleStr(tr("Face line detection"));//面线检测 + m_pPromptDlg->setContentStr(tr("Face line detection")); + + m_pPromptDlg->exec(); +} + +void MainWidgetFunction::funExitRoot() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + g_emUser = operate; + m_pPromptDlg->setContentStr(tr("Exit successfully!"));//成功退出! + m_pPromptDlg->exec(); +} + +void MainWidgetFunction::funGetMCVersionInfo() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("System info")); + m_pPromptDlg->setContentInfoShow(); + + m_pPromptDlg->exec(); +} + +void MainWidgetFunction::funProductStatistics(QString tStyle,QString filePath,int patternBreakLineNum) +{ + m_pSystemManageDlg->setTypeLogo(tStyle); + m_pSystemManageDlg->setMainTitle(tr("Production statistics"));//生产统计 + m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > Production statistics"));//辅助功能 > 生产统计 + m_pSystemManageDlg->initDialog(); + + m_filePath = filePath; + QFileInfo file(m_filePath); + QString fileName = file.fileName(); + m_fileName = fileName; + addProductStatisInfo(patternBreakLineNum); + m_pSystemManageDlg->exec(PRODUCTSTATIS); +} + +//错误日志 +void MainWidgetFunction::slotJournalError() +{ + //m_pSystemManageDlg->setTypeLogo(tStyle); + m_pSystemManageDlg->setMainTitle(tr("Error Log"));//错误日志 + m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > Error Log"));//辅助功能 > 错误日志 + m_pSystemManageDlg->initDialog(); + addJournalInfoError(); + //m_pSystemManageDlg->exec(JOURNALERROR);//显示窗体 +} + +//断线日志 +void MainWidgetFunction::slotJournalBreakage() +{ + //m_pSystemManageDlg->setTypeLogo(tStyle); + m_pSystemManageDlg->setMainTitle(tr("Breakage Log"));//断线日志 + m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > Breakage Log"));//辅助功能 > 断线日志 + m_pSystemManageDlg->initDialog(); + addJournalInfoBreakage(); + //m_pSystemManageDlg->exec(JOURNALBREAKAGE);//显示窗体 +} + +void MainWidgetFunction::slotSpindleTest() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Spindle Gear Ratio Test"));//主轴齿轮比测试 + + QString str; + str = tr("Whether to test the gear ratio of the spindle?");//是否测试齿轮比? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->spindleTest(0,0); + } + } +} +//错误日志 +void MainWidgetFunction::funJournalError(QString tStyle) +{ + m_pSystemManageDlg->setTypeLogo(tStyle); + m_pSystemManageDlg->setMainTitle(tr("ErrorLog"));//错误日志 + m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > ErrorLog"));//辅助功能 > 错误日志 + m_pSystemManageDlg->initDialog(); + addJournalInfoError(); + m_pSystemManageDlg->exec(JOURNAL);//显示窗体 +} + +void MainWidgetFunction::funSoftwareAuthor() +{ + if (g_pMachine != NULL) + { + if(g_pMachine->isConnected() == 3) + { + g_pMachine->getInfoFromMachine(); + } + else + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("No connection")); + m_pPromptDlg->exec(); + return; + } + } + + // 设置板卡ID值的显示 + m_pPromptDlg->initDialog(PromptDialog::BTN_WARRANT); + m_pPromptDlg->setTitleStr(tr("Warrant")); + m_pPromptDlg->setContentWarrantShow(); + m_pPromptDlg->exec(); +} + +//报错信息 +int MainWidgetFunction::funErrorPrompt(u32 errcode,QString info) +{ + int ret = 0; + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + //QString errInfo= errcode+info; + m_pPromptDlg->setContentStr(info); + if(m_pPromptDlg->exec() == 1) + { + if(errcode == ERR_CHANGE_BOBBIN) + { + g_pMachine->resetBobbinCounter();// 底线计数复位 + } + + g_pMachine->cleanError(); + } + return ret; +} + + +void MainWidgetFunction::funSetPromptDlgVisibleFalse() +{ + if(m_pPromptDlg->isVisible()) + { + m_pPromptDlg->done(1); + } + if(m_pBrokenLineDialog->isVisible())//断线检测弹窗消失 + { + m_pBrokenLineDialog->hide(); + } +} + +//底线计数复位 +void MainWidgetFunction::funBottomLineCountReset() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("Is the bottom line count reset?")); //是否底线计数复位? + if(m_pPromptDlg->exec() == 1) + { + g_pMachine->resetBobbinCounter(); // 底线计数复位 + } +} + +void MainWidgetFunction::funResetAll() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Reset all"));//全部复位 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->resetAll(); + } + } +} + +void MainWidgetFunction::funMotorZeroing() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Motor zeroing"));//电机归零 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->motorZeroing(); + } + } +} + +void MainWidgetFunction::funStationGluing(int idx) +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(idx == 1) + { + m_pPromptDlg->setTitleStr(tr("Station 1 gluing"));//工位1涂胶 + } + else if(idx == 2) + { + m_pPromptDlg->setTitleStr(tr("Station 2 gluing"));//工位2涂胶 + } + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + if(idx == 1) + { + g_pMachine->station1Gluing(); + } + else if(idx == 2) + { + g_pMachine->station2Gluing(); + } + } + } +} + +void MainWidgetFunction::funHeadUpDown() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("head Up Down"));//机头升降 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->headUpDown(); + } + } +} + +void MainWidgetFunction::funToStationApos(int idx) +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + if(idx == 1) + { + m_pPromptDlg->setTitleStr(tr("to Station 1 Apos"));//回工位1起始点 + } + else if(idx == 2) + { + m_pPromptDlg->setTitleStr(tr("to Station 2 Apos"));//回工位2起始点 + } + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + if(idx == 1) + { + g_pMachine->toStation1Apos(); + } + else if(idx == 2) + { + g_pMachine->toStation2Apos(); + } + } + } +} + +void MainWidgetFunction::funToWaittingPos() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Return to material waiting point"));//回等料点 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->toWaittingPos(); + } + } +} + +void MainWidgetFunction::funToRemoveGluePos() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Backflow glue point"));//回排胶点 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->toRemoveGluePos(); + } + } +} + +void MainWidgetFunction::funRemoveGlueOnce() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Discharge glue once"));//排一次胶 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->removeGlueOnce(); + } + } +} + +void MainWidgetFunction::funAdjustGlueHeight() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Adjust glue height"));//校准胶管高度 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->adjustGlueHeight(); + } + } +} + +//手自动工作状态切换 0:手动 1:自动 +void MainWidgetFunction::funManualOrAutoSwitch(s16 val) +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt")); + if(val == 0) + { + m_pPromptDlg->setContentStr(tr("Are you sure to ManualSwitch?")); //是否手动工作状态切换? + if(m_pPromptDlg->exec() == 1) + { + g_pMachine->setToManualWork(); + } + } + else if( val ==1) + { + m_pPromptDlg->setContentStr(tr("Are you sure to AutoSwitch?")); //是否自动工作状态切换? + if(m_pPromptDlg->exec() == 1) + { + g_pMachine->setToAutoWork(); + } + } +} + +void MainWidgetFunction::getPatternHeadConfig(QString path,DataFileHead & head) +{ + memset(&head,0,sizeof(DataFileHead)); + + QString filePath = path + ".fcg"; + QFile file(filePath); + if(file.exists())//存在fcg文件 + { + if(file.open(QIODevice::ReadOnly)) + { + QByteArray ary = file.readAll(); + if((u32)ary.size() >= sizeof(DataFileHead)) + { + memcpy(&head,ary.data(),sizeof(DataFileHead)); + } + } + file.close(); + } +} + +void MainWidgetFunction::slotCalMachineProgress(s16 csvCode,s16 type) +{ + int per = 0; + int ifPress = 0; + + for(int i = 1; i < m_csvFileStrList.size(); i++) + { + QStringList strlist = m_csvFileStrList[i].split(",", QString::SkipEmptyParts); //根据","分隔开每行的列 + if(strlist.size() > 0) + { + QString code = strlist.at(COLUMN_CODE); + QStringList strlist1 = code.split("_", QString::SkipEmptyParts); //根据"_"分隔开每行的列 + int infoCode = 0; + int csvType = 0; + if(strlist1.size() >= 2) + { + char *bufCode = strdup(strlist1[2].toLatin1().data()); + sscanf (bufCode, "%x", &infoCode); + + char *bufType = strdup(strlist1[1].toLatin1().data()); + sscanf (bufType, "%x", &csvType); + } + + if(infoCode == csvCode && type == csvType) + { + QStringList strlist2 = m_csvFileStrList[i].split(",", QString::SkipEmptyParts); //根据","分隔开每行的列 + if(COLUMN_PRESSNUM < strlist2.size()) + { + ifPress = strlist2.at(COLUMN_PRESSNUM).toInt()+1; + strlist2[COLUMN_PRESSNUM] = QString::number(ifPress); + QString str; + for(int m = 0; m < strlist2.size(); m++) + { + str.append(strlist2[m]); + if(m != strlist2.size() - 1) + { + str.append(","); + } + } + m_csvFileStrList[i] = str; + + //如果按钮没被点击过就加入百分比的计算 + if(ifPress == 1) + { + per += strlist2.at(COLUMN_SCORE).toInt(); + } + } + + m_getScore += per; + + if(per != 0) + { + if(m_totalScore == 0) + { + m_totalScore = 1; + } + + sendDataToGateway(csvCode,type); + } + + break; + } + } + } + + if(ifPress == 1) + { + QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK")); + + QByteArray array; + array.clear(); + for(int j = 0; j < m_csvFileStrList.size(); j++) + { + QString str = m_csvFileStrList[j]; + array.append(str.toLocal8Bit()); + if(j != m_csvFileStrList.size() - 1) + { + array.append('\n'); + } + } + + QDir apppath(qApp->applicationDirPath()); + QString path = apppath.path() + apppath.separator() + CSV_PROGRESS; + QFile file(path); + if (file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) + { + file.write(array); +#ifdef Q_OS_LINUX + system("sync"); +#endif + } + file.close(); + + QString iniPath = apppath.path() + apppath.separator() + "config.ini"; + QSettings setting(iniPath, QSettings::IniFormat); //QSettings能记录一些程序中的信息,下次再打开时可以读取出来 + setting.setValue("Progress/getScore",m_getScore); //记录路径到QSetting中保存 + + QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); + } +} + +void MainWidgetFunction::setPatternHeadConfig(QString path, DataFileHead head) +{ + QFile patternFile(path);//花样文件 + + if(patternFile.exists() == false)//花样文件不存在 + { + return; + } + + QByteArray fileAry; + fileAry.resize(sizeof(DataFileHead));//数组大小 + memset(fileAry.data(),0,fileAry.length());//清空数组 + + QFile file(path+".fcg");//path当前选择的花样路径//创建 QFile 对象,同时指定要操作的文件 + + if(file.exists())//存在fcg文件 + { + if(file.open(QIODevice::ReadOnly))//只能对文件进行读操作 + { + QByteArray ary = file.readAll(); + memcpy(fileAry.data(),ary.data(),ary.length()); + } + file.close(); + } + + DataFileHead wHead; + memcpy(&wHead,&head,sizeof(wHead)); + + //WriteOnly:只能对文件进行写操作,如果目标文件不存在,会自行创建一个新文件。 + //Truncate:以重写模式打开,写入的数据会将原有数据全部清除。注意,此打开方式不能单独使用,通常会和 ReadOnly 或 WriteOnly 搭配。 + if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + qDebug() << "open file fail when wirte, path =" << path;//文件打开失败 + return; + } + else + { + memcpy(fileAry.data(),(char*)&wHead,sizeof(DataFileHead)); + file.write(fileAry.data(),fileAry.length()); + file.close(); + } +} + +//发送ds16花样数据 +void MainWidgetFunction::sendDs16PatternData(int type) +{ + QByteArray & ds16dat = g_pCurEmbData->getDsDat(); + + // ds16数据(转换的) + int size = ds16dat.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("data less then head size"); + return; + } + DataDs16FileHead * pDs16Head = (DataDs16FileHead *)(ds16dat.data()); + + qDebug()<<"fileid 2"<fileid; + + int datasize = size - sizeof(DataDs16FileHead); + if (datasize <= 0) + { + qDebug("ds16 dataBegin err"); + return; + } + int stepsize = datasize/sizeof(Ds16Item); + if (stepsize <= 0) + { + qDebug("ds16 data size err"); + return; + } + Ds16Item *pData = (Ds16Item *)(ds16dat.data() + sizeof(DataDs16FileHead)); + +#if(0) + Ds16Item item; + item.dx = pData->dx; + item.dy = pData->dy; + item.dr = pData->dr; + if(item.dx == 0 && item.dy == 0) + { + ds16dat.remove(0,sizeof(Ds16Item)); + pData = (Ds16Item *)(ds16dat.data() + sizeof(DataDs16FileHead)); + } +#endif + + //发送ds16数据 + m_curFileID++; + if ((m_curFileID & 0xffff) == 0) + { + m_curFileID = 1; + } + if(g_pMachine != NULL) + { + g_pMachine->sendFileProc(type, 0, m_curFileID, pDs16Head, (u8*)pData); + } + + m_beginX = pDs16Head->beginX; + m_beginY = pDs16Head->beginY; +} + +//将ds16数据转换为ds8数据并发送 +void MainWidgetFunction::convertDs16ToDs8AndSend(QString filePath,int type) +{ + QByteArray ds16dat = g_pCurEmbData->getDsDat();//获得ds16数据 + + QByteArray ds8dat; + ds8dat.clear(); + + // ds16数据 + int size = ds16dat.size(); + if (size <= (int)sizeof(DataDs16FileHead)) + { + qDebug("data less then head size"); + return; + } + DataDs16FileHead * pDs16Head = (DataDs16FileHead *)(ds16dat.data()); + ds8dat.append((char*)pDs16Head,sizeof(DataDs16FileHead)); + + int datasize = size - sizeof(DataDs16FileHead); + if (datasize <= 0) + { + qDebug("ds16 dataBegin err"); + return; + } + int stepsize = datasize/sizeof(Ds16Item); + if (stepsize <= 0) + { + qDebug("ds16 data size err"); + return; + } + Ds16Item *pData = (Ds16Item *)(ds16dat.data() + sizeof(DataDs16FileHead)); + Ds16Item * dataPtr = pData; + + u8 ctrl,attr; + s16 dx,dy,dr; + Ds8Item ds8Item; + + for (int i = 0; i < stepsize; i++) + { + ctrl = dataPtr->ctrl; + attr = dataPtr->attr; + dx = dataPtr->dx; + dy = dataPtr->dy; + dr = dataPtr->dr; + + ds8Item.ctrl = ctrl; + ds8Item.attr = attr; + ds8Item.dx = dx; + ds8Item.dy = dy; + ds8Item.dr = dr; + + ds8dat.append((char*)&ds8Item,sizeof(Ds8Item)); + dataPtr++; + } + +#if(1) + //保存成ds8文件 + QString ds8FilePath = filePath + ".ds8"; + QFile file(ds8FilePath); + + //边框刺绣不保存ds8数据,避免边框刺绣完成后自动加载花样获得ds8文件头不对(还是边框刺绣的文件头) + if(type != FILE_TYPE_FRAME) + { + if(file.exists())//存在ds8文件 + { + QFile::remove(ds8FilePath); + } + } +#endif + + //发送ds8数据 + DataDs16FileHead * pDs8Head = (DataDs16FileHead *)(ds8dat.data()); + Ds8Item *tData = (Ds8Item *)(ds8dat.data() + sizeof(DataDs16FileHead)); + + //重新生成文件头 + pDs8Head->dataSize = pDs8Head->itemNums*sizeof(Ds8Item); // 数据字节数 + pDs8Head->bytesPerItem = sizeof(Ds8Item); // 每项占的字节数 + pDs8Head->dataChecksum = calcCheckSum32((u8 *)(tData) , pDs8Head->dataSize);; // 数据累加校验和 + pDs8Head->checkCrc = calcCrc16((u8 *)(pDs8Head), HEAD_FIX_INFO_LEN); // 前面6个字段的CRC校验,(6个字段分别为:文件名称,字节数,项个数,每项字节数,每块字节数,数据累加和的CRC校验值) + + m_curFileID++; + if ((m_curFileID & 0xffff) == 0) + { + m_curFileID = 1; + } + g_pMachine->sendFileProc(type, 0, m_curFileID, pDs8Head, (u8*)tData); + + m_beginX = pDs8Head->beginX; + m_beginY = pDs8Head->beginY; + +#if(1) + //边框刺绣不保存ds8数据,避免边框刺绣完成后自动加载花样获得ds8文件头不对(还是边框刺绣的文件头) + if(type != FILE_TYPE_FRAME) + { + if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + qDebug() << "open file fail when wirte, path =" << filePath; + return; + } + else + { + file.write(ds8dat); + file.close(); + } + } +#endif +} + +void MainWidgetFunction::addProductStatisInfo(int patternBreakLineNum) +{ + //刷新生产统计信息 + m_pSystemManageDlg->initDialog(); + + QString itemStr = tr("Total number of patterns processed: ") + QString::number(m_mcStatus.outCounter);//总共加工花样数量: + m_pSystemManageDlg->addItem(itemStr); + + itemStr = tr("Total punchs: ") + QString::number(m_mcStatus.embNeedleNum);//总冲孔数: + m_pSystemManageDlg->addItem(itemStr); + + itemStr = tr("Pattern name: ") + m_fileName;//花样名称: + m_pSystemManageDlg->addItem(itemStr); + + itemStr = tr("Pattern break line num: ") + QString::number(patternBreakLineNum);//花样断线次数: + m_pSystemManageDlg->addItem(itemStr); + + ParaStruct mcParaValues; + mcParaValues = g_pMachine->getMcPara(); + int headNum = mcParaValues.buf[HEADNUMBERIDX];//机头个数 + for(int i= 0; i < headNum; i++) + { + //机头断线次数: + itemStr = tr("Head ") + QString::number(i+1) + tr(" break line num: ") + QString::number(m_headBreakLine.headBreakLineNum[i]);// 机头断线次数: + m_pSystemManageDlg->addItem(itemStr); + } +} + + + +void MainWidgetFunction::addJournalInfoError() +{ + //刷新信息 + m_pSystemManageDlg->initDialog(); + m_pSystemManageDlg->addListError();//读取csv列表 +} + +void MainWidgetFunction::addJournalInfoBreakage() +{ + //刷新信息 + m_pSystemManageDlg->initDialog(); + m_pSystemManageDlg->addListBreakage();//读取csv列表 +} + +QString MainWidgetFunction::getCompileDateTime() +{ + const char *pMonth[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + const char date[12] = __DATE__; // 取编译日期 + + int i; + int month, year, day; + month = year = day = 0; + for(i = 0; i < 12; i++) + { + if(memcmp(date, pMonth[i], 3) == 0) + { + month = i + 1; + break; + } + } + year = (unsigned char)atoi(date + 9); // date[9]为2位年份, date[7]为完整年份 + day = (unsigned char)atoi(date + 4); // 日期 + + QString str; + str.sprintf("%02d%02d%02d", year, month, day); + return str; +} + +//组成json键值对 +QString MainWidgetFunction::compositionJson(QString key, QString value) +{ + QString mStr="\"";//引号的字符串 + QString str = mStr + key + mStr + ":" + mStr + value + mStr + ","; + return str; +} + +HMILotData MainWidgetFunction::getHMILotData() +{ + HMILotData lotFata; + memset(&lotFata, 0, sizeof(HMILotData)); + + memcpy(lotFata.HMIVerStr, getVersionStr().data(), getVersionStr().length()); // 版本信息 + memcpy(lotFata.fileName, m_fileName.data(), m_fileName.length()); // 文件名称 + + u32 rackNum = g_pSettings->readFromIniFile("IOT/rackNumber").toInt();//机架号 + lotFata.machineNumber = rackNum; // 机架号 + + QString deliveryTime = g_pSettings->readFromIniFile("IOT/deliveryTime").toString();//工厂预计交货时间 + QByteArray arr = deliveryTime.toLocal8Bit(); + memcpy(lotFata.deliveryTime, arr.data(), arr.size()); //交货日期 + + u16 debugProgress = g_pSettings->readFromIniFile("IOT/debugProgress").toInt();//调试进度 + lotFata.debugProgress = debugProgress; //调试进度 + + //电机总数-先固定写为4个,如果后续变动较大,可把电机个数写为全局变量或从其他cpp中传参 + lotFata.motorNum = 4; + + return lotFata; +} + +void MainWidgetFunction::sendDataToGateway(s16 code,s16 type) +{ + QString mStr="\"";//引号的字符串 + + QString mcType = mStr+U00016+mStr+":"+mStr+"Emb"+mStr+","; + + QString mcStr1; + mcStr1.clear(); + QString mcStr2; + mcStr2.clear(); + + if(code == 0 || type == 0){} + + QString sensorMotorStr; + sensorMotorStr.clear(); + + + QString timeStr; + timeStr.clear(); + +#ifdef Q_OS_LINUX + timeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch() - 28800000);//mcgs下时间差8个小时 +#endif + +#ifdef Q_OS_WIN + timeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch()); +#endif + + QString lotStr; + lotStr.clear(); + lotStr = "{" + mStr + QString::number(m_HMILotData.machineNumber) + "#" + mStr + ":[{" + + mStr + "ts" + mStr + ":" + timeStr + "," + + mStr + "values" + mStr + ":{\"timestamp" + mStr + ":" + timeStr + ",\"RackNumber\":\"" + QString::number(m_HMILotData.machineNumber) + "#\"" + "," + + mcType + mcStr1 + mcStr2 + sensorMotorStr; + + lotStr.chop(1); + + lotStr += "}}]}"; + //qDebug()<sendLotDataToGateway(lotStr); +} + +void MainWidgetFunction::setErrorCodeAndStateList(QList list) +{ + m_errorCodeAndStateItemList.clear(); + m_errorCodeAndStateItemList.append(list); +} + +//上电计算 关机时间 并发送给主控 +void MainWidgetFunction::setShutDownTime() +{ + int oldSecond = g_pSettings->readFromIniFile("DateTime/second").toInt();//上次上电的系统时间 + + QDateTime dateTime = QDateTime::currentDateTime(); //当前时间 + int curSecond = dateTime.toTime_t();//单位为秒 //新的时间 + int diff = curSecond - oldSecond;//关机秒数 + if (diff >= 0) + { + } + else//小于0 + { + diff = 5000*3600; + } + qDebug()<<"shutdown second"<setShutDownTime(0, diff);//可能这个diff太大了 + } +} + +//设置机器状态 +void MainWidgetFunction::setMcStates(MCStatus mcStatus) +{ + memset((char*)&m_mcStatus,0,sizeof(MCStatus)); + memcpy((char*)&m_mcStatus,(char*)&mcStatus,sizeof(MCStatus)); + + u32 potval = m_mcStatus.potVal; + float potValue = potval*0.01; + QString potValueStr; + potValueStr.sprintf("%.2f",potValue); + m_pPromptDlg->setPosValueStr(potValueStr);//电位器值 + + m_pPromptDlg->setCurNeedleStr(QString("%1").arg(m_mcStatus.needleIdx));//当前针杆 +} + +QString MainWidgetFunction::getVersionStr() +{ + QString str; + str.sprintf("RPCE-ALL-XPlatformP-LAUTO-V"); + str += getCompileDateTime(); + return str; +} + +//将起始点或定位点写回到文件中 +void MainWidgetFunction::writePonitToFile(QString filePath,int x, int y,int flag) +{ + QFileInfo fileInfo(filePath); + QString suffix = fileInfo.suffix().toUpper();//后缀大写 + + if(suffix == "DST") + { + DataFileDst dst; + dst.initFile(filePath); + dst.loadFile(); + dst.writePointToFile(x,y,flag); + } + else if(suffix == "DSR") + { + DataFileDsr dsr; + dsr.initFile(filePath); + dsr.loadFile(); + dsr.writePointToFile(x,y,flag); + } +} + +//机器信息改变 +void MainWidgetFunction::slotMCInfoChange() +{ + static int fID = 0; + m_mcStatus = g_pMachine->getMcStatus(); + + //可使用时长 + int workTime = m_mcStatus.workableTimer; + if( workTime > 0 && workTime < INT_MAX ) + { + QString strTime; + QString strDay; + QString strHour; + QString strSec; + + int day = workTime/(60 *24); + + //使用时长不足5天就主动提示用户 + if(day < 5 && fID == 0) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + + strDay = QString::number(workTime/(60 *24) , 10); + strHour = QString::number((workTime%(60 *24))/60 , 10) ; + strSec = QString::number(workTime%60 , 10); + + strTime = strDay + " " + tr("Day") + " " + strHour + " " + tr("Hour") + " " + strSec + " " + tr("Minutes") ; // 天 小时 分钟 + + //机器剩余可用时间为 + str = tr("The remaining available time of the machine is ") + strTime; + + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + //开启一个定时器,隔4个小时就发一次查询机器状态 + m_pTipsTimer->start(); + fID++; + } + } +} + +//给主控发查询机器信息 +void MainWidgetFunction::onTipsTimer() +{ + if (g_pMachine != NULL) + { + g_pMachine->getInfoFromMachine(); + } + m_pTipsTimer->stop(); //关定时器 +} + +void MainWidgetFunction::slotSetDynamicIP(QString ssid) +{ + if(ssid.length() <= 0) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("ssid is empty!"));//ssid为空! + m_pPromptDlg->exec(); + return; + } + + WordsInputDialog wordInputDlg; + wordInputDlg.wifiClean(); + wordInputDlg.setTitleStr(tr("Password input"));//密码输入 + wordInputDlg.setOldWordsStr(""); + if(wordInputDlg.exec() == 1) + { +#ifdef Q_OS_LINUX + QString psd = wordInputDlg.getInputStr(); + //密码不能小于8位(一般密码不允许少于8位),如果写入小于8位的密码,系统文件会写入失败造成文件内容丢失,会造成wifi列表获取失败 + //wifi不需要密码登录的时候,也可以点击确认按钮,连接wifi + if(psd.length() < 8 && psd.length() > 0) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("The password cannot be less than 8 digits, please check!");//密码不能小于8位,请检查! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + //base64解密 + //向配置文件写入加密结果,设置动态IP + QString iniPath = WIFIINIPATH; + QSettings setting(iniPath,QSettings::IniFormat); + setting.beginGroup("WIFI"); + setting.setValue("default_passwd",psd.toLatin1().toBase64()); + setting.setValue("default_ssid",ssid.toLatin1().toBase64()); + setting.setValue("static_ip",""); + setting.setValue("static_mask",""); + setting.setValue("static_mode","false"); + setting.endGroup(); + + system("sync"); + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("Settings require screen restart to take effect!");//设置需要重启屏幕才生效! + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + system("reboot"); + } +#endif + } +} + +void MainWidgetFunction::slotSetStaticIP(QString ssid, QString psd,QString dnip) +{ + if(ssid.length() <= 0) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("ssid is empty!"));//ssid为空! + m_pPromptDlg->exec(); + return; + } + if(psd.length() <= 0){}//为了去掉编译警告 + + PassWordDialog passWordDlg; + QString ip; + ip.clear(); + passWordDlg.setTitleStr(tr("IP input"),-1);//IP输入 + passWordDlg.setShowIfVisible(true); + passWordDlg.setIpStr(dnip); + int rslt = passWordDlg.exec(); + if(rslt == 1) + { + ip = passWordDlg.getInputStr(); + } + +#ifdef Q_OS_LINUX + if(ip.length() <= 0) + { + return; + } + + //base64解密 + //向配置文件写入加密结果,设置静态IP + QString iniPath = WIFIINIPATH; + QSettings setting(iniPath,QSettings::IniFormat); + setting.beginGroup("WIFI"); + setting.setValue("default_passwd",psd.toLatin1().toBase64()); + setting.setValue("default_ssid",ssid.toLatin1().toBase64()); + setting.setValue("static_ip",ip); + setting.setValue("static_mask","255.255.255.0"); + setting.setValue("static_mode","true"); + setting.endGroup(); + + system("sync"); + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("Settings require screen restart to take effect!");//设置需要重启屏幕才生效! + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + system("reboot"); + } + return; + +#endif +} + +void MainWidgetFunction::slotDebugMode() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + + QString str; + if (g_emDebugMode == nodebugMode) + { + str = tr("Whether to enter debug mode?");//是否进入调试模式? + } + else + { + str = tr("whether to exit debug mode?");//是否退出调试模式? + } + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + if (g_emDebugMode == nodebugMode) + { + g_emDebugMode = debugMode; + } + else //退出了调试模式 + { + g_emDebugMode = nodebugMode;//全局的 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + QString str2; + str2 = tr("Please log in to super user again!");//请重新登录超级用户! + m_pPromptDlg->setContentStr(str2); + if(m_pPromptDlg->exec() == 1) //退出超级用户界面 + { + emit siCloseRootPara();//关闭超级用户参数界面 + } + } + g_pSettings->writeToIniFile("HMI/debugMode",g_emDebugMode);//写入配置文件 + emit siDebugState();//主界面接收信号,调试模式时,界面不需要密码,界面标题变红 + } +} + +void MainWidgetFunction::slotParaReadPrompt(s16 type, s16 value) +{ + if(type == PARA_TYPE_HEADPARAMETER && value == 0) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + QString str2; + str2 = tr("read parameter...");//读取参数中... + m_pPromptDlg->setContentStr(str2); + m_pPromptDlg->exec(); + } + else if(type == PARA_TYPE_HEADPARAMETER && value != 0) + { + if(m_pPromptDlg->isVisible()) + { + m_pPromptDlg->done(1); + } + } +} + + +//接收到主板的物联网数据 +void MainWidgetFunction::slotSendLotData() +{ + QString mStr="\"";//引号的字符串 + QString lotStr; + lotStr.clear(); + + QString timeStr; + timeStr.clear(); + +#ifdef Q_OS_LINUX + //imeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch() - 28800000);//mcgs下时间差8个小时 + timeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch()); +#endif + +#ifdef Q_OS_WIN + timeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch()); +#endif + + lotStr.clear(); + lotStr = "{" + mStr + QString::number(m_HMILotData.machineNumber) + mStr + ":[{" + + mStr + "ts" + mStr + ":" + timeStr + "," + + mStr + "values" + mStr + ":{\"RackNumber\":\"" + QString::number(m_HMILotData.machineNumber) + "\"" + ","; + + QString keyStr; + keyStr.clear(); + + if(g_pLotMachine != NULL) + { + if(g_pMachine == NULL) + { + return; + } + + if(m_HMILotData.workState == S0505) + { + m_HMILotData.workState = S0507; + + qint64 time = 0; +#ifdef Q_OS_LINUX + time = QDateTime::currentDateTime().toMSecsSinceEpoch() - 28800000;//mcgs下时间差8个小时 +#endif + +#ifdef Q_OS_WIN + time = QDateTime::currentDateTime().toMSecsSinceEpoch(); +#endif + m_HMILotData.endTime = time; + m_HMILotData.startTime = time; + } + + if((m_mcStatus.workStatus & WORK_STA_WORKING) == WORK_STA_WORKING) + { + if(m_HMILotData.workState != S0506) + { + qint64 time = 0; +#ifdef Q_OS_LINUX + time = QDateTime::currentDateTime().toMSecsSinceEpoch() - 28800000;//mcgs下时间差8个小时 +#endif + +#ifdef Q_OS_WIN + time = QDateTime::currentDateTime().toMSecsSinceEpoch(); +#endif + m_HMILotData.workState = S0506; + m_HMILotData.startTime = time; + } + keyStr = compositionJson(U00048, QString::number(S0506)); //设备状态 + lotStr += keyStr; + } + else + { + if(m_HMILotData.workState != S0507) + { + qint64 time = 0; +#ifdef Q_OS_LINUX + time = QDateTime::currentDateTime().toMSecsSinceEpoch() - 28800000;//mcgs下时间差8个小时 +#endif + +#ifdef Q_OS_WIN + time = QDateTime::currentDateTime().toMSecsSinceEpoch(); +#endif + m_HMILotData.endTime = time; + m_HMILotData.workState = S0507; + } + keyStr = compositionJson(U00049, QString::number(m_HMILotData.startTime)); //开始时间 + lotStr += keyStr; + keyStr = compositionJson(U00050, QString::number(m_HMILotData.endTime)); //结束时间 + lotStr += keyStr; + int pins = m_HMILotData.endPins - m_HMILotData.startPins; + keyStr = compositionJson(U00051, QString::number(pins)); //区间针数 + lotStr += keyStr; + keyStr = compositionJson(U00048, QString::number(S0507)); //设备状态 + lotStr += keyStr; + keyStr = compositionJson(U00052, QString::number(m_mcStatus.outCounter)); //产量统计 + lotStr += keyStr; + } + + keyStr = compositionJson("ts", timeStr); //时间戳 + lotStr += keyStr; + + if(lotStr.at(lotStr.length()-1) == ',')//去除最后一个逗号 + { + lotStr.chop(1); //删除字符串右边n个字符 + } + lotStr += "}}]}"; + //qDebug()<sendLotDataToGateway(lotStr); + } +} +//执行网关数据动作 +void MainWidgetFunction::slotRunLotDataAction(QString str) +{ + int cmd = str.toInt(); + if(cmd == 1)//点动 + { + funSpindleJog(); + } + else if(cmd == 2)//剪线 + { + funManualTrimUp(); + } +} + +#if(0) +//当界面与网关建立连接时需要向网关发送固定的键值对 +void MainWidgetFunction::slotSendJsonToMqtt() +{ + QString mStr="\"";//引号的字符串 + QString lotStr; + lotStr.clear(); + lotStr += "{" + mStr + "device" + mStr + ":" + mStr + QString::number(m_HMILotData.machineNumber) + "#" + mStr + "}"; + if(g_pLotMachine != NULL) + { + g_pLotMachine->sendLotDataToGateway(lotStr); + } +} +#endif + +void MainWidgetFunction::slotTransProgress(u8 fileType, int send, int total) +{ + int csend = 0; + int ctotal = 0; + + if(fileType == FILE_TYPE_PGM)//主控升级文件 + { + csend += g_pMachine->getTotalSendNum(); + ctotal += g_pMachine->getTotalPacketNum(); + + if (csend < 0 && ctotal < 0) + { + // 失败 + m_pPromptDlg->initDialog(PromptDialog::BTN_UCANCEL); + m_pPromptDlg->setTitleStr(tr("MC Upgrade"));//主控升级 + //m_pPromptDlg->setButtonUCancelStr(tr("Close"));//关闭 + m_pPromptDlg->setContentProcessStr(tr("Failed to upgrade the main control system!")); //主控系统升级失败! + } + else if (csend == 0 && ctotal == 0) + { + // 成功 + m_pPromptDlg->initDialog(PromptDialog::BTN_RESTART); + m_pPromptDlg->setTitleStr(tr("MC Upgrade"));//主控升级 + m_pPromptDlg->setContentProcessStr(tr("The main control system has been successed, waiting until machine restart")); + int seconds = 10;//界面重启时间改成10秒 + for(int i = 0; i < seconds; i++) + { + QString str = QString(tr("System will restart %1 s later")).arg(seconds-i);//系统将在 %1 秒后重启 + m_pPromptDlg->setContentProcessStr(str); + g_pMachine->sleep(1); + } + +#ifdef Q_OS_WIN + qApp->exit(); +#endif + +#ifdef Q_OS_LINUX + system("reboot"); +#endif + + m_pPromptDlg->hide(); + } + else if(csend >= 0 && csend <= ctotal) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_UCANCEL); + m_pPromptDlg->setTitleStr(tr("MC Upgrade"));//主控升级 + m_pPromptDlg->setContentProcessStr(tr("Main control system is being upgraded...")); //主控系统升级中... + //m_pPromptDlg->setButtonUCancelStr(tr("Cancel"));//取消 + m_pPromptDlg->setRange(0, total); + m_pPromptDlg->setValue(send); + m_pPromptDlg->show(); + QCoreApplication::processEvents(QEventLoop::AllEvents); + } + else + { + m_pPromptDlg->hide(); + } + } + else + { + if (send < 0 && total < 0) + { + // 失败 + m_pPromptDlg->initDialog(PromptDialog::BTN_UCANCEL); + + if(fileType == FILE_TYPE_BOARD)//外围板升级文件 + { + m_pPromptDlg->setTitleStr(tr("EXB Upgrade"));//外围板升级 + //m_pPromptDlg->setButtonUCancelStr(tr("Close"));//关闭 + m_pPromptDlg->setContentProcessStr(tr("Perparalboard system upgrade failed!")); //外围板系统升级失败! + } + else if(fileType == FILE_TYPE_DAT || fileType == FILE_TYPE_FRAME)//花样数据文件(边框刺绣文件) + { + m_pPromptDlg->setTitleStr(tr("Prompt")); + //m_pPromptDlg->setButtonUCancelStr(tr("Close"));//关闭 + m_pPromptDlg->setContentStr(tr("Failed to send data file!")); //发送数据文件失败! + } + } + else if (send == 0 && total == 0) + { + if(fileType == FILE_TYPE_BOARD)//外围板升级文件 + { + // 成功 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("EXB Upgrade"));//外围板升级 + //外围板系统升级成功! + m_pPromptDlg->setContentProcessStr(tr("The external board system is upgraded!")); + } + else if(fileType == FILE_TYPE_DAT || fileType == FILE_TYPE_FRAME)//花样数据文件(边框刺绣文件) + { + // 成功 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt"));//主控升级 + m_pPromptDlg->setContentProcessStr(tr("The data file is send successfully!")); //数据文件发送成功! + } + m_pPromptDlg->hide(); + } + else if(send >= 0 && send <= total) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_UCANCEL); + if(fileType == FILE_TYPE_BOARD)//外围板升级文件 + { + m_pPromptDlg->setTitleStr(tr("EXB Upgrade"));//外围板升级 + m_pPromptDlg->setContentProcessStr(tr("The external board system upgrade...")); //外围板系统升级中... + } + else if(fileType == FILE_TYPE_DAT || fileType == FILE_TYPE_FRAME)//花样数据文件(边框刺绣文件) + { + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentProcessStr(tr("Data file sending...")); //数据文件发送中... + } + //m_pPromptDlg->setButtonUCancelStr(tr("Cancel"));//取消 + m_pPromptDlg->setRange(0, total); + m_pPromptDlg->setValue(send); + m_pPromptDlg->show(); + QCoreApplication::processEvents(QEventLoop::AllEvents); + } + else + { + m_pPromptDlg->hide(); + } + } +} + +//导出csv文件到U盘 +void MainWidgetFunction::slotCsvExport(int logType) +{ + QString usbPath = detectUsb();//U盘路径 + if(usbPath.length() <= 0) + { + //优盘不存在 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("USB flash drive is not detected!");//未检测到优盘! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + QDir apppath(qApp->applicationDirPath());//D:/work/workQT/XPlatform/Windows/debug + QString newName = usbPath + apppath.separator();//G + QString timeStr = QDateTime::currentDateTime().toString("_yyMMdd_hhmmss");//时间日期 _230215_144121 + + QString astr; + if(logType == TYPE_ERROR) + { + astr = "error"; + } + else if(logType == TYPE_BREAK) + { + astr = "break"; + } + + QString newFileName = newName+astr+timeStr+".csv"; + + //csv文件路径 + QString csvfile; + if(logType == TYPE_ERROR) + { + csvfile = apppath.path() + apppath.separator() + CSV_ERROR; + } + else if(logType == TYPE_BREAK) + { + csvfile = apppath.path() + apppath.separator() + CSV_BREAK; + } + QString csvfilePath = QDir(csvfile).absolutePath();//为了将"\"变为"/" + bool bl = QFile::copy(csvfilePath,newFileName); + + //强制写入 + //linux下写入文件或者拷贝、删除文件的情况 +#ifdef Q_OS_LINUX + system("sync"); +#endif + + QString str; + if(bl == true) + { + str = tr("Journal exported successfully!");//文件日志导出成功! + } + else + { + str = tr("Journal exported failed!");//文件日志导出失败! + } + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + str = tr("Journal exported successfully!");//文件日志导出成功! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; +} + +void MainWidgetFunction::slotClearJournal() +{ + QDir apppath(qApp->applicationDirPath()); + QString csvfile = apppath.path() + apppath.separator(); + g_pSettings->fileClear(csvfile+CSV_BREAK);//清空文件日志内容,但文件还在 + memset(&m_headBreakLine,0,sizeof(HeadBreakLine)); + // 刷新文件日志界面信息 + m_pSystemManageDlg->initDialog(); + m_pSystemManageDlg->exec(JOURNAL);//显示窗体 +} + +void MainWidgetFunction::slotRefreshWifiList() +{ + QStringList wifiStrList; + wifiStrList.clear(); + s16 rel = refreshWifiList(wifiStrList,1); + if(rel > 0) + { + m_pSystemManageDlg->setItemList(wifiStrList); + } +} + +//清空产量统计 +void MainWidgetFunction::slotClearProductStatis() +{ + if(g_pMachine != NULL) + { + g_pMachine->resetOutput();//清除产量统计(主控计数) + } + + //清空花版断线计数和机头断线计数(花版参数文件.fcg和config.ini中的机头断线次数) + //读取配置文件,初始化机头断线次数 + memset(&m_headBreakLine,0,sizeof(HeadBreakLine)); + for(u16 i = 0; i < sizeof(m_headBreakLine.headBreakLineNum)/sizeof(s32); i++) + //for(u16 i = 0; i < sizeof(HeadBreakLine)/sizeof(s32); i++) + { + g_pSettings->writeToIniFile(("HeadBreakLineNum/head"+QString::number(i+1)),0); + } + + emit siClearPatternBreakLineNum(); + + addProductStatisInfo(0);//花版断线次数清零 + m_pSystemManageDlg->refreshUi(); +} + +//用户登录 +void MainWidgetFunction::slotUserLogin(s16 user) +{ + // QTextCodec *cod = QTextCodec::codecForLocale(); + PassWordDialog passWordDlg; + QString str(""); + if(user == repair) + { + passWordDlg.setTitleStr(tr("Password input *"));//密码输入 + } + else if(user == factory) + { + passWordDlg.setTitleStr(tr("Password input **"));//密码输入 + } + else if(user == root) + { + passWordDlg.setTitleStr(tr("Password input ***"));//密码输入 + } + else if(user == resetpara) + { + passWordDlg.setTitleStr(tr("Password input ****"));//密码输入 + } + int rslt = passWordDlg.exec(); + if(rslt == 1) + { + str = passWordDlg.getInputStr(); + + if(user == repair) + { + if (str == g_passwordOne) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + g_emUser = repair; + m_pPromptDlg->setContentStr(tr("Primary password successfully logged in!"));//一级密码成功登入! + m_pPromptDlg->exec(); + emit siSetButtonUserLogo(1); + } + else + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("The password is wrong,please re-enter!"));//密码错误,请重新输入密码! + m_pPromptDlg->exec(); + return; + } + } + else if(user == factory) + { + if (str == PASSWORD_TWO) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + g_emUser = factory; + m_pPromptDlg->setContentStr(tr("Root successfully logged in!"));//超级用户成功登入! + m_pPromptDlg->exec(); + emit siSetButtonUserLogo(2); + } + else if (str == PASSWORD_THREE) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + g_emUser = root; + m_pPromptDlg->setContentStr(tr("Three-level password successfully logged in!"));//三级密码成功登入! + m_pPromptDlg->exec(); + emit siSetButtonUserLogo(2); + } + else + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("The password is wrong,please re-enter!"));//密码错误,请重新输入密码! + m_pPromptDlg->exec(); + return; + } + + } + else if(user == resetpara) + { + if (str == PASSWORD_RESETPARA) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + g_emUser = resetpara; + m_pPromptDlg->setContentStr(tr("reset parameters password successfully logged in!"));//重置参数密码成功登入! + m_pPromptDlg->exec(); + emit siSetButtonUserLogo(2); + } + else + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("The password is wrong,please re-enter!"));//密码错误,请重新输入密码! + m_pPromptDlg->exec(); + return; + } + } + } +} + +//界面解密 +void MainWidgetFunction::slotHMIDecrypt(QString id) +{ + // 获取网卡号并输入序列号 + m_pPromptDlg->initDialog(PromptDialog::BTN_HMI_DECRYPT); + m_pPromptDlg->setTitleStr(tr("HMI decrypt")); + m_pPromptDlg->setContentHMIDecryptShow(id); + if(m_pPromptDlg->exec() == 1) + { + QString inputStr = m_pPromptDlg->getInputPassword(); + QByteArray inputAry = inputStr.toLatin1(); + + QString idStr = m_pPromptDlg->getNetworkCardID(); + QByteArray idAry = idStr.toLatin1(); + + char inputBuf[20]; //输入的注册码 + u8 idBuf[12]; //id号16进制字符串 + memset(inputBuf,0,sizeof(inputBuf)); + memset(idBuf,0,sizeof(idBuf)); + memcpy(inputBuf,inputAry.data(),inputStr.toLatin1().length()); + memcpy(idBuf,idAry.data(),idStr.toLatin1().length()); + + char outputBuf[20]; //生成的注册码 + int num,i; + u8 anBuf[16],chanBuf[16]; + memset(anBuf,0,sizeof(anBuf)); + memset(chanBuf,0,sizeof(chanBuf)); + memset(outputBuf,0,sizeof(outputBuf)); + for(i = 0; i < 4; i++) + { + if((inputBuf[i] >= '0') && (inputBuf[i] <= '9')) + anBuf[i]=inputBuf[i] - '0'; + else if((inputBuf[i] >= 'a') && (inputBuf[i] <= 'f')) + anBuf[i]=inputBuf[i] - 'a' + 10; + else if((inputBuf[i] >= 'A') && (inputBuf[i] <= 'F')) + anBuf[i]=inputBuf[i] - 'A' + 10; + else + break; + } + + for(u16 i = 0; i < sizeof(idBuf);) + { + if((idBuf[i] >= '0') && (idBuf[i] <= '9')) + idBuf[i]=idBuf[i] - '0'; + else if((idBuf[i] >= 'a') && (idBuf[i] <= 'f')) + idBuf[i]=idBuf[i] - 'a' + 10; + else if((idBuf[i] >= 'A') && (idBuf[i] <= 'F')) + idBuf[i]=idBuf[i] - 'A' + 10; + + if((idBuf[i+1] >= '0') && (idBuf[i+1] <= '9')) + idBuf[i+1]=idBuf[i+1] - '0'; + else if((idBuf[i+1] >= 'a') && (idBuf[i+1] <= 'f')) + idBuf[i+1]=idBuf[i+1] - 'a' + 10; + else if((idBuf[i+1] >= 'A') && (idBuf[i+1] <= 'F')) + idBuf[i+1]=idBuf[i+1] - 'A' + 10; + + i += 2; + } + + num=((u8)(anBuf[0]*16 + anBuf[1]))*256 + (u8)(anBuf[2]*16 + anBuf[3]); + anBuf[4]=(u8)(((idBuf[0] << 4) | idBuf[1]) + num) >> 4; + anBuf[5]=(u8)(((idBuf[0] << 4) | idBuf[1]) + num) & 0x0f; + anBuf[6]=(u8)(((idBuf[2] << 4) | idBuf[3]) + num) >> 4; + anBuf[7]=(u8)(((idBuf[2] << 4) | idBuf[3]) + num) & 0x0f; + anBuf[8]=(u8)(((idBuf[4] << 4) | idBuf[5]) + num) >> 4; + anBuf[9]=(u8)(((idBuf[4] << 4) | idBuf[5]) + num) & 0x0f; + anBuf[10]=(u8)(((idBuf[6] << 4) | idBuf[7]) + num) >> 4; + anBuf[11]=(u8)(((idBuf[6] << 4) | idBuf[7]) + num) & 0x0f; + anBuf[12]=(u8)(((idBuf[8] << 4) | idBuf[9]) + num) >> 4; + anBuf[13]=(u8)(((idBuf[8] << 4) | idBuf[9]) + num) & 0x0f; + anBuf[14]=(u8)(((idBuf[10] << 4) | idBuf[11]) + num) >> 4; + anBuf[15]=(u8)(((idBuf[10] << 4) | idBuf[11]) + num) & 0x0f; + + chanBuf[0]=(u8)(anBuf[0]*16 + anBuf[1]); + chanBuf[1]=(u8)(anBuf[2]*16 + anBuf[3]); + chanBuf[2]=(u8)(anBuf[7]*16 + anBuf[9]); + chanBuf[3]=(u8)(anBuf[6]*16 + anBuf[8]); + chanBuf[4]=(u8)(anBuf[10]*16 + anBuf[15]); + chanBuf[5]=(u8)(anBuf[5]*16 + anBuf[11]); + chanBuf[6]=(u8)(anBuf[13]*16 + anBuf[4]); + chanBuf[7]=(u8)(anBuf[14]*16 + anBuf[12]); + + //id号长度大于12,以此类推 + //chanbuf[8]=(u8)(anbuf[17]*16 + anbuf[16]); + //chanbuf[9]=(u8)(anbuf[19]*16 + anbuf[18]); + //chanbuf[10]=(u8)(anbuf[21]*16 + anbuf[20]); + sprintf(outputBuf,"%02x%02x%02x%02x%02x%02x%02x%02x",chanBuf[0], + chanBuf[1],chanBuf[2],chanBuf[3],chanBuf[4],chanBuf[5],chanBuf[6],chanBuf[7]); + + QDir apppath(qApp->applicationDirPath()); + QString HMIDecryptConfigfile; + HMIDecryptConfigfile = apppath.path() + apppath.separator() + "HMIDecryptConfig.ini"; + QSettings iniSetting(HMIDecryptConfigfile, QSettings::IniFormat); + + if( 0 == memcmp(inputBuf, outputBuf, sizeof(inputBuf)) ) // 比较两个缓存区内容是否相同(等于0相等) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("The interface program is licensed, and then take effect after restarting, please restart manually!");//界面程序授权成功,重启后生效,请手动重启! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + + iniSetting.setValue("HMIDecrypt/ifdecrypt",1); + + return; + } + else + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("Password error, interface program authorization failed!");//密码错误,界面程序授权失败! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + + //iniSetting.setValue("HMIDecrypt/ifdecrypt",0); + + return; + } + } +} + +void MainWidgetFunction::slotStrokeCorrection() +{ + if(g_pMachine->isConnected() == Connected)//已连接 + { + int punchXS = 0; + if(g_pMachine != NULL) + { + ParaStruct mcParaValues; + mcParaValues = g_pMachine->getMcPara(); + punchXS = mcParaValues.buf[89]; //x可冲孔区域正边界(X+) 0920 异形旋转冲 + } + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("The settings take effect after restarting the interface!");//重启界面后设置生效! + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + if(punchXS != 0) + g_pSettings->writeToIniFile("AUFUS/zeroXcoordinate",punchXS);//归零x坐标 + +#ifdef Q_OS_WIN + qApp->exit(); +#endif + +#ifdef Q_OS_LINUX + system("sync"); + system("reboot"); +#endif + } + } + else + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Network error")); + m_pPromptDlg->setContentStr(tr("No connection")); + m_pPromptDlg->exec(); + } +} + +//自动定软限位 +void MainWidgetFunction::slotAutoSetSoftLimit() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Auto set softlimit"));//自动定软限位 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->autoSetSoftLimit(); + } + } +} + +//动框参数导入 +void MainWidgetFunction::slotFrameParaImport() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Moving frame parameter import"));//动框参数导入 + + QString str; + str = tr("Whether to import movable frame parameters?");//是否动框参数导入? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + m_pSystemManageDlg->setTypeLogo(""); + m_pSystemManageDlg->setMainTitle(tr("Frame parameter Import")); + m_pSystemManageDlg->setSubTitle(tr("Root > Frame Parameter Import")); + m_pSystemManageDlg->initDialog(); + systemUpgrade(FRAMEPARA_IMPORT); + } +} + +//动框参数导出 +void MainWidgetFunction::slotFrameParaExport() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Moving frame parameter export"));//动框参数导出 + + QString str; + str = tr("Whether to export moving frame parameters?");//是否动框参数导出? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { + funExportFrameParameter(); + } +} + +//超级用户退出程序 +void MainWidgetFunction::slotExitApp() +{ + //是否退出程序 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + + QString str; + str = tr("Whether to exit the program?");//是否退出程序? + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + QApplication* app; + app->exit(0); + } +} + +//超级用户版本恢复 +void MainWidgetFunction::slotVerRecovery() +{ + //是否版本恢复 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + + QString str; + str = tr("Is the version restored?");//是否版本恢复? + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + } +} + +//删除执行目录下的config.ini +void MainWidgetFunction::slotDeleteIni() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + + QString str; + str = tr("Do you delete the configuration file?");//是否删除配置文件? + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + QDir apppath(qApp->applicationDirPath()); + + //配置文件路径 + QString configfile; + configfile = apppath.path() + apppath.separator() + "config.ini"; + QFile::remove(configfile); + + QString HMIConfigfile; + HMIConfigfile = apppath.path() + apppath.separator() + "HMIConfig.ini"; + QFile::remove(HMIConfigfile); + + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("The settings take effect after restarting the interface!");//重启界面后设置生效! + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + +#ifdef Q_OS_WIN + qApp->exit(); +#endif + +#ifdef Q_OS_LINUX + system("reboot"); +#endif + } + } +} + +//导入csv文件 +void MainWidgetFunction::slotImportCSV() +{ + QString usbPath = detectUsb(); + if(usbPath.length() <= 0) + { + //优盘不存在 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("USB flash drive is not detected!");//未检测到优盘! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); + return; + } + + QString sPath = usbPath + CSV_PROGRESS; + QDir apppath(qApp->applicationDirPath()); + QString tPath= apppath.absolutePath() + apppath.separator() + CSV_PROGRESS; + QFile::remove(tPath); + QFile::copy(sPath,tPath); + +#ifdef Q_OS_LINUX + system("sync"); +#endif + + //成功导入csv文件! + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("Import csv file successful!");//成功导入csv文件! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); +} + +//删除csv文件 +void MainWidgetFunction::slotDeleteCSV() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + + QString str; + str = tr("Do you delete the csv file?");//是否删除csv文件? + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + QDir apppath(qApp->applicationDirPath()); + + //配置文件路径 + QString csvfile; + csvfile = apppath.path() + apppath.separator() + CSV_PROGRESS; + QFile::remove(csvfile); + +#ifdef Q_OS_LINUX + system("sync"); +#endif + } +} + +//重置csv文件 +void MainWidgetFunction::slotResetCSV() +{ + m_csvFileStrList.clear(); + + QDir apppath(qApp->applicationDirPath()); + QString path = apppath.path() + apppath.separator() + CSV_PROGRESS; + QFile file(path); + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + qDebug() << "Open file failed!"; + return; + } + + QTextStream out(&file); + out.setCodec("GB2312"); //支持读取中文信息 + + //遍历行 + for(int i = 0; !out.atEnd(); i++) + { + QString strLine = out.readLine(); + if(strLine.size() <= 0) + { + continue; + } + + QStringList strlist = strLine.split(",", QString::SkipEmptyParts); //根据","分隔开每行的列 + if(COLUMN_PRESSNUM < strlist.size()) + { + if(i != 0) + { + strlist[COLUMN_PRESSNUM] = "0"; + } + QString str; + for(int m = 0; m < strlist.size(); m++) + { + str.append(strlist[m]); + if(m != strlist.size() - 1) + { + str.append(","); + } + } + m_csvFileStrList.append(str); + } + } + file.close(); + + QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK")); + + QByteArray array; + array.clear(); + for(int j = 0; j < m_csvFileStrList.size(); j++) + { + QString str = m_csvFileStrList[j]; + array.append(str.toLocal8Bit()); + if(j != m_csvFileStrList.size() - 1) + { + array.append('\n'); + } + } + + QFile wfile(path); + if (wfile.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) + { + wfile.write(array); +#ifdef Q_OS_LINUX + system("sync"); +#endif + } + wfile.close(); + + QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); + + QString iniPath = apppath.path() + apppath.separator() + "config.ini"; + QSettings setting(iniPath, QSettings::IniFormat); + setting.setValue("Progress/getScore",0); + m_getScore = 0; + + //成功导入csv文件! + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + + QString str; + str = tr("Reset succeeded!");//重置成功! + m_pPromptDlg->setContentStr(str); + m_pPromptDlg->exec(); +} + +//超级用户花样总清 +void MainWidgetFunction::slotPatternClear() +{ + //是否花样总清 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + QString str; + str = tr("Is the pattern clear?");//是否花样总清? + m_pPromptDlg->setContentStr(str); + + if(m_pPromptDlg->exec() == 1) + { //删除文件 + QDir apppath(qApp->applicationDirPath()); + QString targetDir = apppath.absolutePath() + apppath.separator(); + QString tPath = targetDir + PATTERNPATH; + deleteDir(tPath); + } +} + +void MainWidgetFunction:: deleteDir(QString tPath) +{ + QDir dir(tPath);//项目中所保存的路径 + dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤 + QFileInfoList fileList = dir.entryInfoList();// 获取所有的文件信息 + foreach (QFileInfo file,fileList)//遍历文件信息 + { + if (file.isFile()) //是文件,删除,文件夹也要删除 + { + file.dir().remove(file.fileName()); + } + else //递归删除 + { + deleteDir(file.absoluteFilePath()); + } + } + dir.rmpath(dir.absolutePath()); + //检测是否删除 + QDir dir1(tPath); + dir1.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤 + QFileInfoList fileList_1 = dir1.entryInfoList();//获取所有的文件信息 + if(fileList_1.size() == 0) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("Delete complete!"));//删除完成! + m_pPromptDlg->exec(); + emit siClearPattern();//清空当前选择的花样 + return; + } + else + { + deleteDir(tPath); + // m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + // m_pPromptDlg->setTitleStr(tr("Prompt")); + // m_pPromptDlg->setContentStr(tr("Not cleaned up!"));//未清理完成! + // m_pPromptDlg->exec(); + // return; + } +} +void MainWidgetFunction::slotPatternFcgClear() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + QString str; + str = tr("Is the pattern Fcg clear?");//是否删除花样fcg文件? + m_pPromptDlg->setContentStr(str); + //清除所有的fcg,花样参数点了确认按钮,才会生成新的fcg文件,没有fcg文件时,花样参数是默认值 + if(m_pPromptDlg->exec() == 1) + { + //删除文件 + QDir apppath(qApp->applicationDirPath()); + QString targetDir = apppath.absolutePath() + apppath.separator(); + QString tPath = targetDir + PATTERNPATH; + QDir dir(tPath);//项目中所保存的路径 + 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()); + } + } + //检测是否删除 + QDir dir1(tPath); + dir1.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤 + QFileInfoList fileList_1 = dir1.entryInfoList(QStringList()<<"*.fcg");//获取.fcg的文件信息 + if(fileList_1.size() == 0) + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("Delete complete,please reselect the file!"));//删除完成,请重新选择文件! + m_pPromptDlg->exec(); + emit siClearPatternFcg();//清空当前选择的花样 + return; + } + else + { + m_pPromptDlg->initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("Not cleaned up!"));//未清理完成! + m_pPromptDlg->exec(); + return; + } + } +} + +void MainWidgetFunction::slotPatternFcgClearFileid() +{ + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + QString str; + str = tr("If reset the pattern Fcg data?");//是否重置花样fcg文件数据? + m_pPromptDlg->setContentStr(str); + //重置所有的fcg数据 + if(m_pPromptDlg->exec() == 1) + { + QDir apppath(qApp->applicationDirPath()); + QString targetDir = apppath.absolutePath() + apppath.separator(); + QString tPath = targetDir + PATTERNPATH; + QDir dir(tPath);//项目中所保存的路径 + dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤 + QFileInfoList fileList = dir.entryInfoList(QStringList()<<"*.fcg");// 获取.fcg的文件列表 + foreach (QFileInfo file,fileList)//遍历文件信息 + { + if (file.isFile()) //是文件,重置 + { + //优化,不删除,将影响fileid的属性置为默认 + qDebug() <<"fileList=" <initDialog(PromptDialog::BTN_OK); + m_pPromptDlg->setTitleStr(tr("Prompt")); + m_pPromptDlg->setContentStr(tr("Reset complete,please reselect the file!"));//重置完成,请重新选择文件! + m_pPromptDlg->exec(); + emit siAfterDeleteFileid();//清空当前选择的花样 + return; + } +} + +//win下关机按钮 +void MainWidgetFunction::funShutDown() +{ + //是否关闭计算机 + m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL); + m_pPromptDlg->setTitleStr(tr("Prompt"));//提示 + + QString str; + str = tr("Whether to shut down the computer?");//是否关闭计算机? + m_pPromptDlg->setContentStr(str); + if(m_pPromptDlg->exec() == 1) + { + system("shutdown -s -t 00");//电脑关机 + } +} diff --git a/mctype/mainwidgetfunction.h b/mctype/mainwidgetfunction.h new file mode 100644 index 0000000..3af3737 --- /dev/null +++ b/mctype/mainwidgetfunction.h @@ -0,0 +1,273 @@ +#ifndef MAINWIDGETFUNCTION_H +#define MAINWIDGETFUNCTION_H + +#include +#include +#include +#include +#include +#include +#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 +#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 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 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 diff --git a/mctype/patternsingleboard/function/adhesivemachine.cpp b/mctype/patternsingleboard/function/adhesivemachine.cpp new file mode 100644 index 0000000..dcf721f --- /dev/null +++ b/mctype/patternsingleboard/function/adhesivemachine.cpp @@ -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)); + + // 双工位模式,0,关,1,开 + 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 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")));// 未到排胶位 +} + diff --git a/mctype/patternsingleboard/function/adhesivemachine.h b/mctype/patternsingleboard/function/adhesivemachine.h new file mode 100644 index 0000000..5008ddd --- /dev/null +++ b/mctype/patternsingleboard/function/adhesivemachine.h @@ -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 diff --git a/mctype/patternsingleboard/function/autopospunchmachine.cpp b/mctype/patternsingleboard/function/autopospunchmachine.cpp new file mode 100644 index 0000000..f3a87a8 --- /dev/null +++ b/mctype/patternsingleboard/function/autopospunchmachine.cpp @@ -0,0 +1,2020 @@ +#include "AutoPosPunchMachine.h" +//定制冲孔机(自动定位冲孔机)单头 双头 四头 旋转 +AutoPosPunchMachine::AutoPosPunchMachine() +{ + //添加各种参数到列表中 + initRootParasList(); + initRootHMIConfigurationList(m_allParasList);//超级用户界面配置 + initRootIOTConfigurationList(m_allParasList); //超级用户物联网配置 + initPatternsParasList(); + initSoftwareParasList(m_allParasList); + initTimeParasList(m_allParasList); + initPunchCommonFunParasList(m_allParasList); + initMcParasList(); + initWkParasList(); + + //初始化控制动作列表 + initOutCtrlList(); + + //初始化快捷功能列表 + initShortCutList(); + + //初始化辅助功能列表 + initAssistList(); + + //初始化花样设置功能列表 + initPatternSetList(); + + //初始化参数设置功能列表 + initParaSetList(); + + //初始化传感器列表 + initSensorList(); + + //初始化错误代码和状态列表 + initErrorCodeAndStateList(); +} + +AutoPosPunchMachine::~AutoPosPunchMachine() +{ + +} + +//超级用户参数(包括机器参数、工作参数) +void AutoPosPunchMachine::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)); + + //超级用户界面配置参数-行程矫正;单位:无 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_ROOT, + 0 , + ROOT_TROKECORRECTION, 0, 0, PARA_VALUE_TYPE_CLICK, + QCoreApplication::translate("GLOBAL", "Stroke correction"),//行程矫正 + 0, 0, 0, 0, 0, "", "", "", + 0, 0, 0x000D, factory)); +} + +//花样参数 +void AutoPosPunchMachine::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)); + + //花样参数--------------------------- +} + +void AutoPosPunchMachine::initMcParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + // 主轴启动停止转速, 范围 1--300,单位r/min,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 109, 0, 0, PARA_VALUE_TYPE_INT, + tr("punching spindle start and stop speed"),//冲孔主轴启动停止转速 + 100, 1, 300, 100, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0001, operate)); + + // 主轴归零转速, 范围 1--3000,单位r/min,默认 120 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 110, 0, 0, PARA_VALUE_TYPE_INT, + tr("main punching shaft zeroing speed"),//主冲孔轴归零转速 + 120, 1, 3000, 120, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴运转转速, 范围 1--3000,单位r/min,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 111, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle running speed"),//主轴运转转速 + 300, 1, 3000, 300, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴运转加速度, 范围 1--100,单位r/ss,默认 50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 112, 0, 0, PARA_VALUE_TYPE_INT, + tr("spindle punching speed"),//主轴冲孔运转加速度 + 50, 1, 100, 50, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴刹车加速度, 范围 1--100,单位r/ss,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 113, 0, 0, PARA_VALUE_TYPE_INT, + tr("spindle punching brake acceleration"),//主轴冲孔刹车加速度 + 100, 1, 100, 100, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy启动停止速度, 范围 1--100,单位mm/s,默认 10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 100, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY start stop speed"),//XY启动停止速度 + 10, 1, 100, 10, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy归零运行速度, 范围 1--100,单位mm/s,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 101, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY zero run speed"),//XY归零运行速度 + 100, 1, 100, 100, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy空走运行速度, 范围 1--1000,单位mm/s,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 102, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY idle running speed"),//XY空走运行速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy行走加速度, 范围 1--10000,单位mm/s2,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 103, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY walking acceleration"),//XY行走加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy刹车加速度 1--10000,单位mm/s2,默认 10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 104, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY braking acceleration"),//XY刹车加速度 + 10000, 1, 10000, 10000, 0, tr("mm/s2"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy手动移动速度1, 范围 1--1000,单位mm/s,默认 10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 105, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 1"),//XY手动移动速度1 + 10, 1, 1000, 10, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy手动移动速度2, 范围 1--1000,单位mm/s,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 106, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 2"),//XY手动移动速度2 + 100, 1, 1000, 100, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy手动移动速度3, 范围 1--1000,单位mm/s,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 107, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 3"),//XY手动移动速度3 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy最高移动速度, 范围 1--1000,单位mm/s,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 108, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY maximum movement speed"),//XY最高移动速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // x框传感器坐标, 范围 S32_MIN--S32_MAX,单位0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 50, 0, 0, PARA_VALUE_TYPE_INT, + tr("X frame sensor coordinates"),//x框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // y框传感器坐标, 范围 S32_MIN--S32_MAX,单位0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 51, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y frame sensor coordinates"),//y框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴归零补偿角度, -1000--1000, 单位 0.01度,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 146, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle zero compensation angle"),//主轴归零补偿角度 + 200, -1000, 1000, 200, 2,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // X轴归零补偿, -1000--1000, 单位 0.01mm,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 147, 0, 0, PARA_VALUE_TYPE_INT, + tr("X-axis zero compensation"),//X轴归零补偿 + 200, -1000, 1000, 200, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + //y轴归零补偿, -1000--1000, 单位 0.01mm,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 148, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y-axis zero compensation"),//Y轴归零补偿 + 200, -1000, 1000, 200, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // X间隙补偿,范围-200--200 单位 0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("X backlash compensation"),//X间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // Y间隙补偿,范围-200--200 单位 0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y backlash compensation"),//Y间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // 机头个数,范围0-100 单位 个,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 2, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of handpieces"),//机头个数 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 冲孔每头机针个数,范围0-100 单位 个,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 5, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of punch hand"),//冲孔每头机针个数 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 36, 0, 0, PARA_VALUE_TYPE_SW, + tr("Infrared device configuration"),// 红外装置配置 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + ///限位参数 + // x可移动区域负边界(X-), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 70, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area negative border"),//X可移动区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // x可移动区域正边界(X+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 71, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area positive border"),//X可移动区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // x可冲孔区域负边界(X-), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 88, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Punchable area negative boundary"),//X可冲孔区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // x可冲孔区域正边界(X+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 89, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Positive boundary of punchable area"),//X可冲孔区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // y可移动区域负边界(Y-), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area negative boundary"),//Y可移动区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // y可移动区域正边界(Y+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area positive boundary"),//Y可移动区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + // y可冲孔区域负边界(Y-), 范围 -2147483648--2147483647,单位0.01mm + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 90, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y negative boundary of punchable area"),//Y可冲孔区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // y可冲孔区域正边界(Y+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 91, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y positive boundary of punchable area"),//Y可冲孔区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + // 冲头旋转启动停止速度, 范围 1--720, 单位 deg/s(度/秒),默认 10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 156, 0, 0, PARA_VALUE_TYPE_INT, + tr("Starting and stopping speed of punch rotation"),//冲头旋转启动停止速度 + 10, 1, 720, 10, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转归零速度, 1--720, 单位 deg/s(度/秒),默认 50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 157, 0, 0, PARA_VALUE_TYPE_INT, + tr("Zero speed of punch rotation"),//冲头旋转归零速度 + 50, 1, 720, 50, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转运转速度, 范围 1--720, 单位 deg/s(度/秒),默认 360 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 158, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotating speed of punch"),//冲头旋转运转速度 + 360, 1, 720, 360, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转运动加速度, 范围 1--10000, 单位 deg/s(度/秒方),默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 159, 0, 0, PARA_VALUE_TYPE_INT, + tr("Acceleration of punch rotation motion"),//冲头旋转运动加速度 + 500, 1, 10000, 500, 0, tr("deg/ss"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转刹车加速度, 范围 1--10000, 单位 deg/s(度/秒方),默认 5000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 160, 0, 0, PARA_VALUE_TYPE_INT, + tr("Ram rotation brake acceleration"),//冲头旋转刹车加速度 + 5000, 1, 10000, 5000, 0, tr("deg/ss"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转最高速度, 范围 1--2000,单位 deg/s,默认 720 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 161, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum speed of punch rotation"),//冲头旋转最高速度 + 720, 1, 2000, 720, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + } +} + +void AutoPosPunchMachine::initWkParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + int highFlag = g_pSettings->readFromIniFile("AUFUS/highSpeed").toInt() ; + + //操作参数 + // 吸尘器启动延时,单位秒,,0--10s,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 84, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner start delay"),//吸尘器启动延时 + 0, 0, 10, 0, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0001, operate)); + + // 吸尘器关闭延时,单位秒,0--10s,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 40, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner off delay"),//吸尘器关闭延时 + 0, 0, 10, 0, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0002, operate)); + + // 冲孔吸尘器启动持续时间,范围0-100,单位s,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 181, 0, 0, PARA_VALUE_TYPE_INT, + tr("Duration of vacuuming"),//吸尘持续时长 + 5, 0, 100, 5, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0003, operate)); + + // 冲孔换色间距,范围0-10000,单位mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 186, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching color change spacing"),// 冲孔换色间距 + 0, 0, 10000, 0, 0, tr("mm"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔画笔工作模式,0,自动;1,手动,默认0. + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 187, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Working mode of punching brush"),// 冲孔画笔工作模式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("automatic:0;Manual:1"), 0, 0, 0x018A, operate)); + + // 冲孔主轴最大运行速度,范围0-2000,单位r/min,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 188, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum running speed of punching spindle"),// 冲孔主轴最大运行速度 + 1000, 0, 2000, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 197, 0, 0, PARA_VALUE_TYPE_SW, + tr("Automatic start angle adjustment"),//自动起始角度调整 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 单片工作时间显示模式,0,不显示;1,单片工作时间;2,累计工作时间 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 199, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Single chip working time display mode"),// 单片工作时间显示模式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("not display:0;monolithic:1;accumulative total:2"), + 0, 0, 0x018A, operate)); + + if(highFlag == 0) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 220, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1000 rpm"),//冲孔自动调整角度 1000 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 221, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1100 rpm"),//冲孔自动调整角度 1100 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 222, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1200 rpm"),//冲孔自动调整角度 1200 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 223, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1300 rpm"),//冲孔自动调整角度 1300 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 224, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1400 rpm"),//冲孔自动调整角度 1400 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 225, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1500 rpm"),//冲孔自动调整角度 1500 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + else if(highFlag == 1) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 220, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1600 rpm"),//冲孔自动调整角度 1600 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 221, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1700 rpm"),//冲孔自动调整角度 1700 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 222, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1800 rpm"),//冲孔自动调整角度 1800 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 223, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1900 rpm"),//冲孔自动调整角度 1900 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 224, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 2000 rpm"),//冲孔自动调整角度 2000 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 225, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 2100 rpm"),//冲孔自动调整角度 2100 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 226, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 4-5mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 227, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 5-6mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 228, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 6-7mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 229, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 7-8mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 230, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 8-9mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 231, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 9-14mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 232, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 14+mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 233, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 1"),//冲孔旋转角度补偿1 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 234, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 2"),//冲孔旋转角度补偿2 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 235, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 3"),//冲孔旋转角度补偿3 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 236, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 4"),//冲孔旋转角度补偿4 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 237, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 5"),//冲孔旋转角度补偿5 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 238, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 6"),//冲孔旋转角度补偿6 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 245, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 1"),//冲孔2旋转角度补偿1 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 246, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 2"),//冲孔2旋转角度补偿2 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 247, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 3"),//冲孔2旋转角度补偿3 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 248, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 4"),//冲孔2旋转角度补偿4 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 249, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 5"),//冲孔2旋转角度补偿5 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 250, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 6"),//冲孔2旋转角度补偿6 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + } + + if(highFlag == 0) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 239, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1000 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 240, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1100 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 241, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1200 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 242, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1300 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 243, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1400 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 244, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1500 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + else if(highFlag == 1) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 239, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1600 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 240, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1700 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 241, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1800 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 242, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1900 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 243, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 2000 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 244, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 2100 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + + // 冲孔吸尘器启动间隔,范围0-500,单位s,默认60 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 182, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching vacuum cleaner start interval"),//吸尘器启动间隔 + 60, 0, 500, 60, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0004, operate)); + + //拉料偏移值,范围0-500000,默认90000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 89, 0, 0, PARA_VALUE_TYPE_INT, + tr("1 tool punching tool life alarm"),//1刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0005, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 90, 0, 0, PARA_VALUE_TYPE_INT, + tr("2 tool punching tool life alarm"),//2刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0006, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 91, 0, 0, PARA_VALUE_TYPE_INT, + tr("3 tool punching tool life alarm"),//3刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0007, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 92, 0, 0, PARA_VALUE_TYPE_INT, + tr("4 tool punching tool life alarm"),//4刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0008, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 93, 0, 0, PARA_VALUE_TYPE_INT, + tr("5 tool punching tool life alarm"),//5刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0009, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 94, 0, 0, PARA_VALUE_TYPE_INT, + tr("6 tool punching tool life alarm"),//6刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0010, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 1, 0, PARA_VALUE_TYPE_SW, + tr("first head"),// 第一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0170, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 2, 0, PARA_VALUE_TYPE_SW, + tr("second head"),// 第二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0171, operate)); + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 3, 0, PARA_VALUE_TYPE_SW, + tr("third head"),// 第三个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0172, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 4, 0, PARA_VALUE_TYPE_SW, + tr("fourth head"),// 第四个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0173, operate)); + } + + // 产量预设, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 33, 0, 0, PARA_VALUE_TYPE_INT, + tr("Production preset"),// 产量预设 + 0, 0, S32_MAX, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x012A, operate)); + + // 冲孔主轴工作转速, 范围 1--3000,单位r/min,默认 2000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 41, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle working speed"),//冲孔主轴工作转速 + 2000, 1, 3000, 2000, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0011, operate)); + // 冲孔加速度, 1--200, 单位r/ss , 默认20 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 42, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching acceleration"),//冲孔加速度 + 20, 1, 200, 20, 0, tr("r/ss"), tr(""), + tr(""), + 0, 0, 0x0011, operate)); + + // 冲孔动框方式, 位图 + // bit0 = 0, xy连续动框; bit0 = 1, xy间歇式动框; + // bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速; + // bit2 = 0, 冲孔连续旋转; bit2 = 1,冲孔间接旋转; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 43, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Punching and moving frame method"),// 冲孔动框方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("xy continuous frame:0;xy intermittent frame:1"), 0, 0, 0x0012, operate)); // bit0 = 0, xy连续动框; bit0 = 1, xy间歇式动框; + + // bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 43, 2, 0, PARA_VALUE_TYPE_LIST, + tr("XY moving frame acceleration and deceleration method"),// XY动框加减速方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("xy intermittent pulse without acceleration and deceleration:0;xy intermittent pulse sine acceleration and deceleration:1"), 0, 0, 0x0013, operate)); // bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速; + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 43, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Punching Rotation"),// 冲孔旋转方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Punching continuous rotation:0;Punching indirect rotation:1"), 0, 0, 0x0014, operate)); // bit2 = 0, 冲孔连续旋转; bit2 = 1,冲孔间接旋转; + + // 冲孔动框起始角度, 0--36000, 单位 0.01度,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 44, 0, 0, PARA_VALUE_TYPE_INT, + tr("Starting angle of punching frame"),//冲孔动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + // 冲孔动框持续角度, 0--36000, 单位 0.01度,默认 15000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 45, 0, 0, PARA_VALUE_TYPE_INT, + tr("Persistence angle of punching frame"),//冲孔动框持续角度 + 15000, 0, 36000,15000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + // 软件限位; 位图选择, 0, 不允许; 1, 允许; + // bit0, xy移动; + // bit4, 冲孔落杆限制; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 49, 1, 0, PARA_VALUE_TYPE_SW, + tr("xy move"),// xy移动 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0017, factory)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + // 冲孔旋转减速最小偏差角度,单位度,范围0--180,默认 180 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 63, 0, 0, PARA_VALUE_TYPE_INT, + tr("Minimum deviation angle for punching rotation deceleration"),//冲孔旋转减速最小偏差角度 + 180, 0, 180,180, 0, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + // 冲孔旋转持续角度, 0--36000, 单z位 0.01度,默认 36000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 64, 0, 0, PARA_VALUE_TYPE_INT, + tr("Continuous angle of punching rotation"),//冲孔旋转持续角度 + 36000, 0, 36000,36000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 1, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 1 rotation control"),//冲孔机头1旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 2, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 2 rotation control"),//冲孔机头2旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 3, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 3 rotation control"),//冲孔机头3旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 4, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 4 rotation control"),//冲孔机头4旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 5, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 5 rotation control"),//冲孔机头5旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 6, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 6 rotation control"),//冲孔机头6旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + } + + // 更换冲头计数值,范围0-1000000,单位 次,默认500000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 178, 0, 0, PARA_VALUE_TYPE_INT, + tr("Replace the punch count"),// 更换冲头计数值 + 500000, 0, 1000000, 500000, 0, tr("bout"), tr(""), + tr(""), + 0, 0, 0x0020, operate)); + + // 换色启动方式,0,自动换色,自动启动;1,自动换色,手动启动;2,手动换色,手动启动 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 71, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Color change start method"),//换色启动方式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2"), + 0, 0, 0x0020, operate)); + + // X绣框换向补偿,范围-1000--1000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("X embroidery frame reversing compensation"),//X绣框换向补偿 + 0, -1000, 1000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // Y绣框换向补偿,范围-1000--1000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y embroidery frame reversing compensation"),//Y绣框换向补偿 + 0, -1000, 1000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // 冲孔跳针变越框针数,范围0-100,单位,针,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 79, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching jump stitches to change the number of frame stitches"),//冲孔跳针变越框针数 + 5, 0, 100, 5, 0, tr("Needle"), tr(""), + tr(""), + 0, 0, 0x0021, operate)); + + // 倒车工作模式,0,普通模式;1,点动模式;2,持续点动模式 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 81, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Reversing working mode"),//倒车工作模式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("normal mode:0;Jog mode:1;Continuous jog mode:2"), + 0, 0, 0x0022, operate)); + + // 特殊针位选择,0,无;1-9,1-9针位 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 82, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle position selection"),//特殊针位选择 + 0, 0, 9, 0, 0, tr(""), tr(""), + tr("none:0;1 needle position:1;2 needle position:2;3 needle position:3;4 needle position:4;5 needle position:5;6 needle position:6;7 needle position:7;8 needle position:8;9 needle position:9"), + 0, 0, 0x0023, operate)); + + // 特殊针位功能,0,雕孔;1,画笔 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 83, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle position function"),//特殊针位功能 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Carved hole:0;brush:1"), + 0, 0, 0x0024, operate)); + + // 换色速度,范围1-2000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 99, 0, 0, PARA_VALUE_TYPE_INT, + tr("Color change speed"),// 换色速度 + 200, 1, 2000, 200, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0025, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 1, 0, PARA_VALUE_TYPE_SW, + tr("light curtain"),// 光幕 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0026, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 2, 0, PARA_VALUE_TYPE_SW, + tr("air pressure"),// 气压 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 7, 0, PARA_VALUE_TYPE_SW, + tr("Safety guardrail"),// 安全护栏 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 8, 0, PARA_VALUE_TYPE_SW, + tr("Tricolor lamp"),// 三色灯 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 9, 0, PARA_VALUE_TYPE_SW, + tr("Oil pump alarm"),// 油泵报警 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 10, 0, PARA_VALUE_TYPE_SW, + tr("Vacuum cleaner alarm"),// 吸尘器报警 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + // 冲孔主轴启动慢动转速, 范围 1--2000,单位r/min,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 169, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle start jogging speed"),// 冲孔主轴启动慢动转速 + 500, 1, 2000, 500, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0028, operate)); + + // X工作范围,范围0-500000,单位0.01mm,默认90000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 174, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Working Range"),// X工作范围 + 90000, 0, 500000, 90000, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0029, operate)); + + // Y工作范围,范围0-500000,单位0.01mm,默认60000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Working Range"),// Y工作范围 + 60000, 0, 500000, 60000, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0030, operate)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + // 冲孔旋转传感器角度,范围-36000--36000,单位0.01度,默认9000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 176, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching rotation sensor angle"),//冲孔旋转传感器角度 + 9000, -36000, 36000,9000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0030, operate)); + } + + // 冲孔动框最高速度,范围1-1000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum speed of punching and moving frame"),// 冲孔动框最高速度 + 200, 0, 1000, 200, 0, tr("mm/S"), tr(""), + tr(""), + 0, 0, 0x0031, operate)); + + // 跳针最高主轴转速,范围 1--3000,单位r/min,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 120, 0, 0, PARA_VALUE_TYPE_INT, + tr("Jump maximum spindle speed"),// 跳针最高主轴转速 + 1, 0, 3000, 1, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0032, operate)); + + // 冲孔时动作允许 0, 不允许; 1, 允许; + // bit0 吹气允许; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 39, 1, 0, PARA_VALUE_TYPE_SW, + tr("Blowing allowed"),// 吹气允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0033, operate)); + + ////////////////////////////////////动作设定 + //X偏移点 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 26, 0, 0, PARA_VALUE_TYPE_INT, + tr("X offset point"),//X偏移点 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + //Y偏移点 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 27, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y offset point"),//Y偏移点 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 偏移点坐标有效标志; 0, 无效; 1, x有效; 2, y有效; 3, xy同时有效 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 25, 0, 0, PARA_VALUE_TYPE_LIST, + tr("offset point coordinates"),//偏移点坐标 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("invalid:0;x is valid:1;y is valid:2;xy are valid:3"),//无:0;有:1 + 0, 0, 0x0003, operate)); + + // 完成后停车位置选择, 0, 当前位置; 1,起点,2,定位点,3,上料点; 4,偏移点 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 24, 0, 0, PARA_VALUE_TYPE_LIST, + tr("The stop position of the machine head after punching"),//冲孔完毕机头停止位置 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("current location:0;starting point:1;location point:2;feeding point:3;offset point:4"), + 0, 0, 0x0004, operate)); + + // 主轴点动停车角度,单位 0.01度 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_ACTION, + 62, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle jog parking angle"),//主轴点动停车角度 + 0, 0, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0004, operate)); + + // 加油方式选择, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 20, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Refueling method selection"),// 加油方式选择 + 0, 0, 3, 0, 0, tr(""), tr(""),//不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + tr("No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3"), 0, 0, 0x0120, operate)); + + // 加油针数间隔, 范围 S32_MIN--S32_MAX,默认 10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 21, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling needles interval"),// 加油针数间隔 + 10000, S32_MIN, S32_MAX, 10000, 0, tr("Needles"), tr(""), + tr(""), 10000, 10000, 0x0120, operate)); + + // 加油时间间隔, 范围 1--S32_MAX,默认 1 加油时间间隔, 单位小时, 加油方式为按工作时间加油时有用; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 22, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling time interval"),// 加油时间间隔 + 1, 1, S32_MAX, 1, 0, tr("h"), tr(""), + tr(""), 1, 1, 0x0120, operate)); + + // 加油持续次数, 单位次 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 23, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling duration"),// 加油持续次数 + 1, 1, S32_MAX, 1, 0, tr("bout"), tr(""), + tr(""), 1, 1, 0x0120, operate)); + + // 自动气框允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic air frame allowed"),// 自动气框允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 气框自动关闭允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic closing of air frame allowed"),// 气框自动关闭允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 气框自动打开允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic opening of air frame allowed"),// 气框自动打开允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 气框自动关闭后扫码允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Code scanning allowed after automatic closing of air frame"),// 气框自动关闭后扫码允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 自动气框闭合延时, 范围 0--5000,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 103, 0, 0, PARA_VALUE_TYPE_INT, + tr("Automatic air frame closing delay"),// 自动气框闭合延时 + 0, 0, 5000, 0, 0, tr("ms"), tr(""), + tr(""), 0, 0, 0x0120, operate)); +} + +void AutoPosPunchMachine::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 upStr = tr("Up"); //上升 + QString downStr= tr("Down");//下降 + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0001,tr("All punching spindle motor"),MT_LMA,// 所有主轴电机 + 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,0x0001,tr("No. 1 punching spindle motor"),MT_LPM,// 1号头冲孔主轴电机 + 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)); + + if(g_emMacType == MACHINE_PUNCH_AUTOPOS && g_emProductType == PRODUCT_PUNCH_TWOHEAD)//双头 + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0002,tr("No. 2 punching spindle motor"),MT_LP2,// 2号头冲孔主轴电机 + 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)); + } + + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0003,tr("No. 3 punching spindle motor"),MT_LP3,// 3号头冲孔主轴电机 + 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("No. 4 punching spindle motor"),MT_LP4,// 4号头冲孔主轴电机 + 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("X 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,0x0004,tr("Y 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,0x0004,tr("punching color changing motor"),MT_LPS,// 冲孔换色电机 + 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)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0005,tr("Punch rotate motor"),MT_LPR,// 冲孔旋转电机 + enableStr,true,OUTCONTROL_MS_ENABLE,-1,-1, + disableStr,true,OUTCONTROL_MS_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,0x0008,tr("template positioning cylinder"),OT_FRAME,// 模板定位气缸 + "",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,0x000A,tr("Vacuum cleaner"),OT_CLEANER,// 吸尘器 + "",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,0x000B,tr("Safety barrier 1"),OT_SAFE_DOOR1,// 安全护栏1 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + upStr,true,OUTCONTROL_UP,-1,-1, + downStr,true,OUTCONTROL_DOWN,-1,-1)); + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000C,tr("Safety barrier 2"),OT_SAFE_DOOR2,// 安全护栏2 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + upStr,true,OUTCONTROL_UP,-1,-1, + downStr,true,OUTCONTROL_DOWN,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000C,tr("Punching refueling"),OT_PUNCH_OIL,// 冲孔加油 + "",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,0x000C,tr("Headlamp"),OT_LIGHT,// 照明灯 + "",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 AutoPosPunchMachine::initShortCutList() +{ + m_allShortCutList.clear(); + + m_allShortCutList.append(makeAShortCutItem(0,0x0001,tr("All To Zero"),"buttonAllToZero",FUN_ALLTOZERO));//全部归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0002,tr("Spindle Jog"),"buttonSpindleJog",FUN_PUNCHSPINDLEJOG));//主轴点动 + m_allShortCutList.append(makeAShortCutItem(0,0x0003,tr("Spindle Enable"),"buttonSpindleEnable",FUN_SPINDLEENABLE));//主轴使能 + m_allShortCutList.append(makeAShortCutItem(0,0x0004,tr("Spindle Disable"),"buttonSpindleDisable",FUN_SPINDLEDISABLE));//主轴失能 + m_allShortCutList.append(makeAShortCutItem(0,0x0005,tr("Spindle Test"),"buttonSpindleTest",FUN_SPINDLETEST));//主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x0006,tr("Set Offset"),"buttonSetOffsetPoint",FUN_SETOFFSETPOINT));//定偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x0007,tr("Go Offset"),"buttonBackOffsetPoint",FUN_BACKOFFSETPOINT));//回偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x000A,tr("Set Start"),"buttonSetAnchorPoint",FUN_SETSTARTPOINT));//定起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x000B,tr("Go Start"),"buttonBackAnchorPoint",FUN_BACKSTARTPOINT));//回起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x000C,tr("Go Work"),"buttonBackWorkPoint",FUN_BACKWORKPOINT));//回工作点 + m_allShortCutList.append(makeAShortCutItem(0,0x000D,tr("Check Frame"),"buttonBorderCheck",FUN_CHECKFRAME));//边框检查 + m_allShortCutList.append(makeAShortCutItem(0,0x000E,tr("Punch Change Tool"),"buttonManualChangeColor",FUN_PUNCHMANUALCHANGECOLOR));//手动换刀 + m_allShortCutList.append(makeAShortCutItem(0,0x000F,tr("Forward And Back"),"buttonForwardOrBack",FUN_FORWARDORBACK));//前进回退 + //m_allShortCutList.append(makeAShortCutItem(0,0x0010,tr("Reset"),"buttonProcessReset",FUN_PROCESSRESET));//流程复位 + m_allShortCutList.append(makeAShortCutItem(0,0x0011,tr("Single Punch"),"buttonSinglePunch",FUN_SINGLEPUNCH));//单次冲孔 + //m_allShortCutList.append(makeAShortCutItem(0,0x0012,tr("FrameZero"),"buttonFrameZero",FUN_FRAMEZERO));//框架归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0013,tr("To Right Up"),"buttonMoveToRightUp",FUN_MOVETORIGHTUP));//去右上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0014,tr("To Right Down"),"buttonMoveToRightDown",FUN_MOVETORIGHTDOWN));//去右下角 + m_allShortCutList.append(makeAShortCutItem(0,0x0015,tr("To Left Up"),"buttonMoveToLeftUp",FUN_MOVETOLEFTUP));//去左上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0016,tr("To Left Down"),"buttonMoveToLeftDown",FUN_MOVETOLEFTDOWN));//去左下角 + //m_allShortCutList.append(makeAShortCutItem(0,0x0017,tr("Scope Work"),"buttonSetWorkRange",FUN_SETWORKRANGE));//定工作范围 + m_allShortCutList.append(makeAShortCutItem(0,0x0018,tr("Head Stop Lower"),"buttonPunchStopLower",FUN_PUNCHSTOPLOWER));//冲头停下位 + m_allShortCutList.append(makeAShortCutItem(0,0x0019,tr("Draw Outline"),"buttonDrawOutline",FUN_DRAWOUTLINE));//画轮廓线 + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("Oil Supply"),"buttonManualOil",FUN_OILSUPPLY));//冲孔连续供油 + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("Tool Debug"),"buttonSpindleEnable",FUN_ROTATECOMPENSATE));//旋转补偿 冲刀调试 + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("Rotate To Zero"),"buttonRotToZero",FUN_PUNCH_ROT_TO_ZERO));//冲孔旋转去零位 + } +} + +void AutoPosPunchMachine::initAssistList() +{ + m_allAssistList.clear(); + + m_allAssistList.append(makeAAssistItem(0,0x0001,tr("Signal"),"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("Software"),"buttonSoftwareSet",ASSIST_SOFTWARESET));//软件设置 + m_allAssistList.append(makeAAssistItem(0,0x0009,tr("Authorize"),"buttonSoftwareAuthor",ASSIST_AUTHORIZATION));//软件授权 + m_allAssistList.append(makeAAssistItem(0,0x000A,tr("Network"),"buttonNetworkManage",ASSIST_NETWORK));//网络管理 + + s16 wifi = g_pSettings->readFromIniFile("HMI/wifi").toInt();//是否有wifi + if(wifi == 1) + { + m_allAssistList.append(makeAAssistItem(0,0x000A,tr("WIFI"),"buttonSensor",ASSIST_WIFI));//WIFI管理 + } + + m_allAssistList.append(makeAAssistItem(0,0x000B,tr("NeedleSet"),"buttonNeedleSet",ASSIST_NEEDLESET));//针杆设置 + m_allAssistList.append(makeAAssistItem(0,0x000C,tr("Time"),"buttonTimeSet",ASSIST_TIMESET));//时间设置 + m_allAssistList.append(makeAAssistItem(0,0x000D,tr("Shortcut"),"buttonCommonFunction",ASSIST_SHORTCUTSET));//常用设置 + m_allAssistList.append(makeAAssistItem(0,0x000E,tr("Statistics"),"buttonProductStatistics",ASSIST_PRODUCTSTATICS));//生产统计 + m_allAssistList.append(makeAAssistItem(0,0x000F,tr("Version"),"buttonVersionInfo",ASSIST_MCVERSION));//版本信息 + m_allAssistList.append(makeAAssistItem(0,0x0014,tr("Root"),"buttonRoot",ASSIST_ROOT));//超级用户 + m_allAssistList.append(makeAAssistItem(0,0x0015,tr("errorjounal"),"buttonAgingTest",ASSIST_ERRORLOG));//超级用户 +} + +void AutoPosPunchMachine::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,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));//花样删除 +} + +void AutoPosPunchMachine::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 AutoPosPunchMachine::initSensorList() +{ + QList sensorList; + sensorList.append(makeASensorItem(0x0000, 0, tr("Start button")));//启动按钮 + sensorList.append(makeASensorItem(0x0001, 0, tr("stop button")));//停止按钮 + sensorList.append(makeASensorItem(0x0002, 0, tr("jog button")));//点动按钮 + sensorList.append(makeASensorItem(0x0003, 0, tr("open frame 1 button")));//开框1按钮 + sensorList.append(makeASensorItem(0x0003, 1, tr("open frame 2 button")));//开框2按钮 + sensorList.append(makeASensorItem(0x0008, 0, tr("Safety light curtain")));//安全光幕 + + sensorList.append(makeASensorItem(0x0090, 0, tr("Spindle 1 zero position")));//主轴1零位 + sensorList.append(makeASensorItem(0x0090, 1, tr("Spindle 2 zero position")));//主轴2零位 + sensorList.append(makeASensorItem(0x0090, 2, tr("Spindle 3 zero position")));//主轴3零位 + sensorList.append(makeASensorItem(0x0090, 3, tr("Spindle 4 zero position")));//主轴4零位 + sensorList.append(makeASensorItem(0x003E, 0, tr("Punching 1 Rotation Zero")));//冲孔1旋转零位 + sensorList.append(makeASensorItem(0x003E, 1, tr("Punching 2 Rotation Zero")));//冲孔2旋转零位 + sensorList.append(makeASensorItem(0x003E, 2, tr("Punching 3 Rotation Zero")));//冲孔3旋转零位 + sensorList.append(makeASensorItem(0x003E, 3, tr("Punching 4 Rotation Zero")));//冲孔4旋转零位 + + sensorList.append(makeASensorItem(0x0020, 0, tr("X1 zero position")));//X1零位 + sensorList.append(makeASensorItem(0x0020, 1, tr("Y1 zero position")));//Y1零位 + sensorList.append(makeASensorItem(0x0020, 2, tr("X2 zero position")));// X2零位 + sensorList.append(makeASensorItem(0x0020, 3, tr("Y2 zero position")));// Y2零位 + + sensorList.append(makeASensorItem(0x0021, 0, tr("X1 slows down")));//X1降速 + sensorList.append(makeASensorItem(0x0021, 1, tr("Y1 deceleration")));//Y1降速 + sensorList.append(makeASensorItem(0x0021, 2, tr("X2 downshift")));//X2降速 + sensorList.append(makeASensorItem(0x0021, 3, tr("Y2 downshift")));// Y2降速 + + sensorList.append(makeASensorItem(0x0022, 0, tr("1 limit-")));//X1限位- + sensorList.append(makeASensorItem(0x0022, 1, tr("Y1 limit-")));// Y1限位- + sensorList.append(makeASensorItem(0x0022, 2, tr("X2 limit -")));//X2限位- + sensorList.append(makeASensorItem(0x0022, 3, tr("Y2 limit -")));//Y2限位- + + sensorList.append(makeASensorItem(0x0023, 0, tr("1 limit+")));//X1限位+ + sensorList.append(makeASensorItem(0x0023, 1, tr("Y1 limit+")));// Y1限位+ + sensorList.append(makeASensorItem(0x0023, 2, tr("X2 limit +")));//X2限位+ + sensorList.append(makeASensorItem(0x0023, 3, tr("Y2 limit +")));//Y2限位+ + sensorList.append(makeASensorItem(0x002C, 0, tr("Color change motor 1 zero position")));//换色电机1零位 + sensorList.append(makeASensorItem(0x002C, 1, tr("Color change motor 2 zero position")));//换色电机2零位 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Punching color changing motor - zero position")));//冲孔换色电机-零位 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Punching color changing motor - zero position")));//冲孔换色电机-零位 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Punching Color Change Motor - Negative Limit")));//冲孔换色电机-负限位 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Safety light curtain 1 input")));//安全光幕1输入 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Safety light curtain 2 input")));//安全光幕2输入 + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + sensorList.append(makeASensorItem(0x0003, 2, tr("open frame 3 button")));//开框3按钮 + sensorList.append(makeASensorItem(0x0003, 3, tr("open frame 4 button")));//开框4按钮 + + sensorList.append(makeASensorItem(0x0007, 0, tr("Air pressure protection input")));// 气压保护输入 + } + else + { + sensorList.append(makeASensorItem(0x0007, 0, tr("Air pressure protection input")));// 气压保护输入 + } + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + // xcy 0918 添加传感器 + sensorList.append(makeASensorItem(0x002C, 2, tr("Color change zero position 3")));//换色电机3-零位 + sensorList.append(makeASensorItem(0x002C, 3, tr("Color change zero position 4")));//换色电机4-零位 + sensorList.append(makeASensorItem(0x002C, 4, tr("X3 zero position")));// X3零位 + sensorList.append(makeASensorItem(0x002C, 5, tr("Y3 zero position")));// Y3零位 + sensorList.append(makeASensorItem(0x002C, 6, tr("X4 zero position")));// X4零位 + sensorList.append(makeASensorItem(0x002C, 7, tr("Y4 zero position")));// Y4零位 + + sensorList.append(makeASensorItem(0x002E, 4, tr("X3 limit -")));//X3限位- + sensorList.append(makeASensorItem(0x002E, 5, tr("Y3 limit -")));//Y3限位- + sensorList.append(makeASensorItem(0x002E, 6, tr("X4 limit -")));//X4限位- + sensorList.append(makeASensorItem(0x002E, 7, tr("Y4 limit -")));//Y4限位- + + sensorList.append(makeASensorItem(0x002F, 4, tr("X3 limit +")));//X3限位+ + sensorList.append(makeASensorItem(0x002F, 5, tr("Y3 limit +")));//Y3限位+ + sensorList.append(makeASensorItem(0x002F, 6, tr("X4 limit +")));//X4限位+ + sensorList.append(makeASensorItem(0x002F, 7, tr("Y4 limit +")));//Y4限位+ + + sensorList.append(makeASensorItem(0x00A0, 0, tr("Spindle position detection 1")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x00A0, 1, tr("Spindle position detection 2")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x00A0, 2, tr("Spindle position detection 3")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x00A0, 3, tr("Spindle position detection 4")));//冲孔主轴零位 + } + + //将机型所需的传感器列表替换到传感器整体列表中 + 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 AutoPosPunchMachine::initErrorCodeAndStateList() +{ + m_allErrorCodeAndStateList.clear(); + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_ZERO, tr("Punching spindle is not at zero position")));// 冲孔主轴不在零位 + } + //等于冲孔机并为4头end + else + { + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_ZERO, tr("Punching 1 spindle is not at zero position")));// 冲孔1主轴不在零位 + } + + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CLR_BLK, tr("Vacuum cleaner clogged")));// 吸尘器阻塞 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CLR_FULL, tr("Vacuum cleaner full")));// 吸尘器满料 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_OIL_AIR, tr("Abnormal oil pump pressure")));// 油泵压力异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH2_NOT_ZERO, tr("Punching 2 spindle is not at zero position")));// 冲孔2主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_SWND_TIMOUT, tr("Punching color change timeout")));// 冲孔换色超时 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_ND_ERR, tr("Punching needle position error")));// 冲孔针位错误 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH3_NOT_ZERO, tr("Punching 3 spindle is not at zero position")));// 冲孔3主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH4_NOT_ZERO, tr("Punching 4 spindle is not at zero position")));// 冲孔4主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_BACK, tr("Breathing valve punching cylinder is not high")));// 呼吸阀冲孔气缸不在高位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CMK_BTP, tr("Abnormality on the punching hole of the breathing valve")));// 呼吸阀冲孔上异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CMK_BBP, tr("Abnormal under the breathing valve punching")));// 呼吸阀冲孔下异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CMK_BPB, tr("Abnormal expansion and contraction of the stopper under the punching valve of the breathing valve")));// 呼吸阀冲孔下挡块伸缩异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH2_NOT_ZERO, tr("Punching 2 spindle is not at zero position")));// 冲孔2主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH2_NOT_ZERO, tr("Punching 2 spindle is not at zero position")));// 冲孔2主轴不在零位 +} + diff --git a/mctype/patternsingleboard/function/autopospunchmachine.h b/mctype/patternsingleboard/function/autopospunchmachine.h new file mode 100644 index 0000000..55636dc --- /dev/null +++ b/mctype/patternsingleboard/function/autopospunchmachine.h @@ -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 diff --git a/mctype/patternsingleboard/function/punchmachine.cpp b/mctype/patternsingleboard/function/punchmachine.cpp new file mode 100644 index 0000000..fa2ba72 --- /dev/null +++ b/mctype/patternsingleboard/function/punchmachine.cpp @@ -0,0 +1,2053 @@ +#include "punchmachine.h" +//冲孔机 +PunchMachine::PunchMachine() +{ + //添加各种参数到列表中 + initRootParasList(); + initRootHMIConfigurationList(m_allParasList);//超级用户界面配置 + initRootIOTConfigurationList(m_allParasList); //超级用户物联网配置 + initPatternsParasList(); + initSoftwareParasList(m_allParasList); + initTimeParasList(m_allParasList); + initPunchCommonFunParasList(m_allParasList); + initMcParasList(); + initWkParasList(); + + //初始化控制动作列表 + initOutCtrlList(); + + //初始化快捷功能列表 + initShortCutList(); + + //初始化辅助功能列表 + initAssistList(); + + //初始化花样设置功能列表 + initPatternSetList(); + + //初始化参数设置功能列表 + initParaSetList(); + + //初始化传感器列表 + initSensorList(); + + //初始化错误代码和状态列表 + initErrorCodeAndStateList(); +} + +PunchMachine::~PunchMachine() +{ + +} + +//超级用户参数(包括机器参数、工作参数) +void PunchMachine::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)); + + //超级用户参数-高速低速;单位:无 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_ROOT, + 0 , + ROOT_HIGH_SPEED_SWITCHING, 0, 0, PARA_VALUE_TYPE_CLICK, + tr("High speed or low speed"),//高速低速 + 0, 0, 0, 0, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x000D, factory)); + + //超级用户界面配置参数-行程矫正;单位:无 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_ROOT, + 0 , + ROOT_TROKECORRECTION, 0, 0, PARA_VALUE_TYPE_CLICK, + QCoreApplication::translate("GLOBAL", "Stroke correction"),//行程矫正 + 0, 0, 0, 0, 0, "", "", "", + 0, 0, 0x000D, factory)); +} + +//花样参数 +void PunchMachine::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("startrY"),//起始点y + 0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm + tr(""), 0, 0,0x0004, operate)); + + //花样参数--------------------------- +} + +void PunchMachine::initMcParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + // 主轴启动停止转速, 范围 1--300,单位r/min,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 109, 0, 0, PARA_VALUE_TYPE_INT, + tr("punching spindle start and stop speed"),//冲孔主轴启动停止转速 + 100, 1, 300, 100, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0001, operate)); + + // 主轴归零转速, 范围 1--3000,单位r/min,默认 120 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 110, 0, 0, PARA_VALUE_TYPE_INT, + tr("main punching shaft zeroing speed"),//主冲孔轴归零转速 + 120, 1, 3000, 120, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴运转转速, 范围 1--3000,单位r/min,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 111, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle running speed"),//主轴运转转速 + 300, 1, 3000, 300, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴运转加速度, 范围 1--100,单位r/ss,默认 50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 112, 0, 0, PARA_VALUE_TYPE_INT, + tr("spindle punching speed"),//主轴冲孔运转加速度 + 50, 1, 100, 50, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴刹车加速度, 范围 1--100,单位r/ss,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 113, 0, 0, PARA_VALUE_TYPE_INT, + tr("spindle punching brake acceleration"),//主轴冲孔刹车加速度 + 100, 1, 100, 100, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy启动停止速度, 范围 1--100,单位mm/s,默认 10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 100, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY start stop speed"),//XY启动停止速度 + 10, 1, 100, 10, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy归零运行速度, 范围 1--100,单位mm/s,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 101, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY zero run speed"),//XY归零运行速度 + 100, 1, 100, 100, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy空走运行速度, 范围 1--1000,单位mm/s,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 102, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY idle running speed"),//XY空走运行速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy行走加速度, 范围 1--10000,单位mm/s2,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 103, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY walking acceleration"),//XY行走加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy刹车加速度 1--10000,单位mm/s2,默认 10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 104, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY braking acceleration"),//XY刹车加速度 + 10000, 1, 10000, 10000, 0, tr("mm/s2"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy手动移动速度1, 范围 1--1000,单位mm/s,默认 10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 105, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 1"),//XY手动移动速度1 + 10, 1, 1000, 10, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy手动移动速度2, 范围 1--1000,单位mm/s,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 106, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 2"),//XY手动移动速度2 + 100, 1, 1000, 100, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy手动移动速度3, 范围 1--1000,单位mm/s,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 107, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 3"),//XY手动移动速度3 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy最高移动速度, 范围 1--1000,单位mm/s,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 108, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY maximum movement speed"),//XY最高移动速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // x框传感器坐标, 范围 S32_MIN--S32_MAX,单位0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 50, 0, 0, PARA_VALUE_TYPE_INT, + tr("X frame sensor coordinates"),//x框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // y框传感器坐标, 范围 S32_MIN--S32_MAX,单位0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 51, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y frame sensor coordinates"),//y框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴归零补偿角度, -1000--1000, 单位 0.01度,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 146, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle zero compensation angle"),//主轴归零补偿角度 + 200, -1000, 1000, 200, 2,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // X轴归零补偿, -1000--1000, 单位 0.01mm,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 147, 0, 0, PARA_VALUE_TYPE_INT, + tr("X-axis zero compensation"),//X轴归零补偿 + 200, -1000, 1000, 200, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + //y轴归零补偿, -1000--1000, 单位 0.01mm,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 148, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y-axis zero compensation"),//Y轴归零补偿 + 200, -1000, 1000, 200, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // X间隙补偿,范围-200--200 单位 0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("X backlash compensation"),//X间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // Y间隙补偿,范围-200--200 单位 0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y backlash compensation"),//Y间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // 机头个数,范围0-100 单位 个,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 2, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of handpieces"),//机头个数 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 冲孔每头机针个数,范围0-100 单位 个,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 5, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of punch hand"),//冲孔每头机针个数 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 36, 0, 0, PARA_VALUE_TYPE_SW, + tr("Infrared device configuration"),// 红外装置配置 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // x可移动区域负边界(X-), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 70, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area negative border"),//X可移动区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // x可移动区域正边界(X+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 71, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area positive border"),//X可移动区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // x可冲孔区域负边界(X-), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 88, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Punchable area negative boundary"),//X可冲孔区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // x可冲孔区域正边界(X+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 89, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Positive boundary of punchable area"),//X可冲孔区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // y可移动区域负边界(Y-), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area negative boundary"),//Y可移动区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // y可移动区域正边界(Y+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area positive boundary"),//Y可移动区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + // y可冲孔区域负边界(Y-), 范围 -2147483648--2147483647,单位0.01mm + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 90, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y negative boundary of punchable area"),//Y可冲孔区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // y可冲孔区域正边界(Y+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 91, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y positive boundary of punchable area"),//Y可冲孔区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + // 冲头旋转启动停止速度, 范围 1--720, 单位 deg/s(度/秒),默认 10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 156, 0, 0, PARA_VALUE_TYPE_INT, + tr("Starting and stopping speed of punch rotation"),//冲头旋转启动停止速度 + 10, 1, 720, 10, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转归零速度, 1--720, 单位 deg/s(度/秒),默认 50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 157, 0, 0, PARA_VALUE_TYPE_INT, + tr("Zero speed of punch rotation"),//冲头旋转归零速度 + 50, 1, 720, 50, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转运转速度, 范围 1--720, 单位 deg/s(度/秒),默认 360 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 158, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotating speed of punch"),//冲头旋转运转速度 + 360, 1, 720, 360, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转运动加速度, 范围 1--10000, 单位 deg/s(度/秒方),默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 159, 0, 0, PARA_VALUE_TYPE_INT, + tr("Acceleration of punch rotation motion"),//冲头旋转运动加速度 + 500, 1, 10000, 500, 0, tr("deg/ss"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转刹车加速度, 范围 1--10000, 单位 deg/s(度/秒方),默认 5000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 160, 0, 0, PARA_VALUE_TYPE_INT, + tr("Ram rotation brake acceleration"),//冲头旋转刹车加速度 + 5000, 1, 10000, 5000, 0, tr("deg/ss"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转最高速度, 范围 1--2000,单位 deg/s,默认 720 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 161, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum speed of punch rotation"),//冲头旋转最高速度 + 720, 1, 2000, 720, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + } +} + +void PunchMachine::initWkParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + int highFlag = g_pSettings->readFromIniFile("AUFUS/highSpeed").toInt(); + + // 吸尘器启动延时,单位秒,,0--10s,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 84, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner start delay"),//吸尘器启动延时 + 0, 0, 10, 0, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0001, operate)); + + // 吸尘器关闭延时,单位秒,0--10s,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 40, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner off delay"),//吸尘器关闭延时 + 0, 0, 10, 0, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0002, operate)); + + // 冲孔吸尘器启动持续时间,范围0-100,单位s,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 181, 0, 0, PARA_VALUE_TYPE_INT, + tr("Duration of vacuuming"),//吸尘持续时长 + 5, 0, 100, 5, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0003, operate)); + + // 冲孔换色间距,范围0-10000,单位mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 186, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching color change spacing"),// 冲孔换色间距 + 0, 0, 10000, 0, 0, tr("mm"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔画笔工作模式,0,自动;1,手动,默认0. + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 187, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Working mode of punching brush"),// 冲孔画笔工作模式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("automatic:0;Manual:1"), 0, 0, 0x018A, operate)); + + // 冲孔主轴最大运行速度,范围0-2000,单位r/min,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 188, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum running speed of punching spindle"),// 冲孔主轴最大运行速度 + 1000, 0, 2000, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 自动起始角度调整,范围0--1,单位 度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 197, 0, 0, PARA_VALUE_TYPE_SW, + tr("Automatic start angle adjustment"),//自动起始角度调整 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 单片工作时间显示模式,0,不显示;1,单片工作时间;2,累计工作时间 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 199, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Single chip working time display mode"),// 单片工作时间显示模式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("not display:0;monolithic:1;accumulative total:2"), + 0, 0, 0x018A, operate)); + + if(highFlag == 0) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 220, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1000 rpm"),//冲孔自动调整角度 1000 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 221, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1100 rpm"),//冲孔自动调整角度 1100 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 222, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1200 rpm"),//冲孔自动调整角度 1200 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 223, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1300 rpm"),//冲孔自动调整角度 1300 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 224, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1400 rpm"),//冲孔自动调整角度 1400 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 225, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1500 rpm"),//冲孔自动调整角度 1500 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + else if(highFlag == 1) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 220, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1600 rpm"),//冲孔自动调整角度 1600 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 221, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1700 rpm"),//冲孔自动调整角度 1700 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 222, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1800 rpm"),//冲孔自动调整角度 1800 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 223, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1900 rpm"),//冲孔自动调整角度 1900 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 224, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 2000 rpm"),//冲孔自动调整角度 2000 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 225, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 2100 rpm"),//冲孔自动调整角度 2100 rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 226, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 4-5mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 227, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 5-6mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 228, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 6-7mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 229, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 7-8mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 230, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 8-9mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 231, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 9-14mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 232, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 14+mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 233, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 1"),//冲孔旋转角度补偿1 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 234, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 2"),//冲孔旋转角度补偿2 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 235, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 3"),//冲孔旋转角度补偿3 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 236, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 4"),//冲孔旋转角度补偿4 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 237, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 5"),//冲孔旋转角度补偿5 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 238, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 6"),//冲孔旋转角度补偿6 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 245, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 1"),//冲孔2旋转角度补偿1 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 246, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 2"),//冲孔2旋转角度补偿2 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 247, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 3"),//冲孔2旋转角度补偿3 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 248, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 4"),//冲孔2旋转角度补偿4 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 249, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 5"),//冲孔2旋转角度补偿5 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 250, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 6"),//冲孔2旋转角度补偿6 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + } + + if(highFlag == 0) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 239, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1000 rpm"),//冲孔自动调整角度 1000rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 240, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1100 rpm"),//冲孔自动调整角度 1100rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 241, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1200 rpm"),//冲孔自动调整角度 1200rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 242, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1300 rpm"),//冲孔自动调整角度 1300rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 243, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1400 rpm"),//冲孔自动调整角度 1400rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 244, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1500 rpm"),//冲孔自动调整角度 1500rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + else if(highFlag == 1) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 239, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1600 rpm"),//冲孔自动调整角度 1600rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 240, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1700 rpm"),//冲孔自动调整角度 1700rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 241, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1800 rpm"),//冲孔自动调整角度 1800rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 242, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1900 rpm"),//冲孔自动调整角度 1900rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 243, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 2000 rpm"),//冲孔自动调整角度 2000rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 244, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 2100 rpm"),//冲孔自动调整角度 2100rpm + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + } + + // 冲孔吸尘器启动间隔,范围0-500,单位s,默认60 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 182, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching vacuum cleaner start interval"),//吸尘器启动间隔 + 60, 0, 500, 60, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0004, operate)); + + //拉料偏移值,范围0-500000,默认90000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 89, 0, 0, PARA_VALUE_TYPE_INT, + tr("1 tool punching tool life alarm"),//1刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0005, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 90, 0, 0, PARA_VALUE_TYPE_INT, + tr("2 tool punching tool life alarm"),//2刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0006, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 91, 0, 0, PARA_VALUE_TYPE_INT, + tr("3 tool punching tool life alarm"),//3刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0007, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 92, 0, 0, PARA_VALUE_TYPE_INT, + tr("4 tool punching tool life alarm"),//4刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0008, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 93, 0, 0, PARA_VALUE_TYPE_INT, + tr("5 tool punching tool life alarm"),//5刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0009, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 94, 0, 0, PARA_VALUE_TYPE_INT, + tr("6 tool punching tool life alarm"),//6刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0010, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 1, 0, PARA_VALUE_TYPE_SW, + tr("first head"),// 第一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0170, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 2, 0, PARA_VALUE_TYPE_SW, + tr("second head"),// 第二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0171, operate)); + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 3, 0, PARA_VALUE_TYPE_SW, + tr("third head"),// 第三个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0172, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 4, 0, PARA_VALUE_TYPE_SW, + tr("fourth head"),// 第四个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0173, operate)); + } + //等于冲孔机并为4头end + + // 产量预设, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 33, 0, 0, PARA_VALUE_TYPE_INT, + tr("Production preset"),// 产量预设 + 0, 0, S32_MAX, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x012A, operate)); + + // 冲孔主轴工作转速, 范围 1--3000,单位r/min,默认 2000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 41, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle working speed"),//冲孔主轴工作转速 + 2000, 1, 3000, 2000, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0011, operate)); + + // 冲孔加速度, 1--200, 单位r/ss , 默认20 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 42, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching acceleration"),//冲孔加速度 + 20, 1, 200, 20, 0, tr("r/ss"), tr(""), + tr(""), + 0, 0, 0x0011, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 43, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Punching and moving frame method"),// 冲孔动框方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("xy continuous frame:0;xy intermittent frame:1"), 0, 0, 0x0012, operate)); // bit0 = 0, xy连续动框; bit0 = 1, xy间歇式动框; + + // bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 43, 2, 0, PARA_VALUE_TYPE_LIST, + tr("XY moving frame acceleration and deceleration method"),// XY动框加减速方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("xy intermittent pulse without acceleration and deceleration:0;xy intermittent pulse sine acceleration and deceleration:1"), 0, 0, 0x0013, operate)); // bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速; + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 43, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Punching Rotation"),// 冲孔旋转方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Punching continuous rotation:0;Punching indirect rotation:1"), 0, 0, 0x0014, operate)); // bit2 = 0, 冲孔连续旋转; bit2 = 1,冲孔间接旋转; + + // 冲孔动框起始角度, 0--36000, 单位 0.01度,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 44, 0, 0, PARA_VALUE_TYPE_INT, + tr("Starting angle of punching frame"),//冲孔动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + // 冲孔动框持续角度, 0--36000, 单位 0.01度,默认 15000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 45, 0, 0, PARA_VALUE_TYPE_INT, + tr("Persistence angle of punching frame"),//冲孔动框持续角度 + 15000, 0, 36000,15000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + // 软件限位; 位图选择, 0, 不允许; 1, 允许; + // bit0, xy移动; + // bit4, 冲孔落杆限制; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 49, 1, 0, PARA_VALUE_TYPE_SW, + tr("xy move"),// xy移动 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0017, factory)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + // 冲孔旋转减速最小偏差角度,单位度,范围0--180,默认 180 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 63, 0, 0, PARA_VALUE_TYPE_INT, + tr("Minimum deviation angle for punching rotation deceleration"),//冲孔旋转减速最小偏差角度 + 180, 0, 180,180, 0, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + // 冲孔旋转持续角度, 0--36000, 单z位 0.01度,默认 36000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 64, 0, 0, PARA_VALUE_TYPE_INT, + tr("Continuous angle of punching rotation"),//冲孔旋转持续角度 + 36000, 0, 36000,36000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 1, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 1 rotation control"),//冲孔机头1旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 2, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 2 rotation control"),//冲孔机头2旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 3, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 3 rotation control"),//冲孔机头3旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 4, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 4 rotation control"),//冲孔机头4旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 5, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 5 rotation control"),//冲孔机头5旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 6, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 6 rotation control"),//冲孔机头6旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + } + // 更换冲头计数值,范围0-1000000,单位 次,默认500000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 178, 0, 0, PARA_VALUE_TYPE_INT, + tr("Replace the punch count"),// 更换冲头计数值 + 500000, 0, 1000000, 500000, 0, tr("bout"), tr(""), + tr(""), + 0, 0, 0x0020, operate)); + + // 换色启动方式,0,自动换色,自动启动;1,自动换色,手动启动;2,手动换色,手动启动 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 71, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Color change start method"),//换色启动方式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2"), + 0, 0, 0x0020, operate)); + + // X绣框换向补偿,范围-1000--1000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("X embroidery frame reversing compensation"),//X绣框换向补偿 + 0, -1000, 1000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // // Y绣框换向补偿,范围-1000--1000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y embroidery frame reversing compensation"),//Y绣框换向补偿 + 0, -1000, 1000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // 冲孔跳针变越框针数,范围0-100,单位,针,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 79, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching jump stitches to change the number of frame stitches"),//冲孔跳针变越框针数 + 5, 0, 100, 5, 0, tr("Needle"), tr(""), + tr(""), + 0, 0, 0x0021, operate)); + + // 倒车工作模式,0,普通模式;1,点动模式;2,持续点动模式 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 81, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Reversing working mode"),//倒车工作模式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("normal mode:0;Jog mode:1;Continuous jog mode:2"), + 0, 0, 0x0022, operate)); + + // 特殊针位选择,0,无;1-9,1-9针位 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 82, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle position selection"),//特殊针位选择 + 0, 0, 9, 0, 0, tr(""), tr(""), + tr("none:0;1 needle position:1;2 needle position:2;3 needle position:3;4 needle position:4;5 needle position:5;6 needle position:6;7 needle position:7;8 needle position:8;9 needle position:9"), + 0, 0, 0x0023, operate)); + + // 特殊针位功能,0,雕孔;1,画笔 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 83, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle position function"),//特殊针位功能 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Carved hole:0;brush:1"), + 0, 0, 0x0024, operate)); + + // 换色速度,范围1-2000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 99, 0, 0, PARA_VALUE_TYPE_INT, + tr("Color change speed"),// 换色速度 + 200, 1, 2000, 200, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0025, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 1, 0, PARA_VALUE_TYPE_SW, + tr("light curtain"),// 光幕 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0026, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 2, 0, PARA_VALUE_TYPE_SW, + tr("air pressure"),// 气压 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 7, 0, PARA_VALUE_TYPE_SW, + tr("Safety guardrail"),// 安全护栏 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 8, 0, PARA_VALUE_TYPE_SW, + tr("Tricolor lamp"),// 三色灯 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 9, 0, PARA_VALUE_TYPE_SW, + tr("Oil pump alarm"),// 油泵报警 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 10, 0, PARA_VALUE_TYPE_SW, + tr("Vacuum cleaner alarm"),// 吸尘器报警 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + // 冲孔主轴启动慢动转速, 范围 1--2000,单位r/min,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 169, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle start jogging speed"),// 冲孔主轴启动慢动转速 + 500, 1, 2000, 500, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0028, operate)); + + // X工作范围,范围0-500000,单位0.01mm,默认90000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 174, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Working Range"),// X工作范围 + 90000, 0, 500000, 90000, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0029, operate)); + + // Y工作范围,范围0-500000,单位0.01mm,默认60000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Working Range"),// Y工作范围 + 60000, 0, 500000, 60000, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0030, operate)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + // 冲孔旋转传感器角度,范围-36000--36000,单位0.01度,默认9000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 176, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching rotation sensor angle"),//冲孔旋转传感器角度 + 9000, -36000, 36000,9000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0030, operate)); + } + + // 冲孔动框最高速度,范围1-1000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum speed of punching and moving frame"),// 冲孔动框最高速度 + 200, 0, 1000, 200, 0, tr("mm/S"), tr(""), + tr(""), + 0, 0, 0x0031, operate)); + + // 跳针最高主轴转速,范围 1--3000,单位r/min,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 120, 0, 0, PARA_VALUE_TYPE_INT, + tr("Jump maximum spindle speed"),// 跳针最高主轴转速 + 1, 0, 3000, 1, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0032, operate)); + + // 冲孔时动作允许 0, 不允许; 1, 允许; + // bit0 吹气允许; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 39, 1, 0, PARA_VALUE_TYPE_SW, + tr("Blowing allowed"),// 吹气允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0033, operate)); + + //X偏移点 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 26, 0, 0, PARA_VALUE_TYPE_INT, + tr("X offset point"),//X偏移点 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + //Y偏移点 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 27, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y offset point"),//Y偏移点 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 偏移点坐标有效标志; 0, 无效; 1, x有效; 2, y有效; 3, xy同时有效 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 25, 0, 0, PARA_VALUE_TYPE_LIST, + tr("offset point coordinates"),//偏移点坐标 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("invalid:0;x is valid:1;y is valid:2;xy are valid:3"),//无:0;有:1 + 0, 0, 0x0003, operate)); + + // 完成后停车位置选择, 0, 当前位置; 1,起点,2,定位点,3,上料点; 4,偏移点 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 24, 0, 0, PARA_VALUE_TYPE_LIST, + tr("The stop position of the machine head after punching"),//冲孔完毕机头停止位置 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("current location:0;starting point:1;location point:2;feeding point:3;offset point:4"), + 0, 0, 0x0004, operate)); + + // 主轴点动停车角度,单位 0.01度 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_ACTION, + 62, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle jog parking angle"),//主轴点动停车角度 + 0, 0, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0004, operate)); + + // 加油方式选择, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 20, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Refueling method selection"),// 加油方式选择 + 0, 0, 3, 0, 0, tr(""), tr(""),//不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + tr("No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3"), 0, 0, 0x0120, operate)); + + // 加油针数间隔, 范围 S32_MIN--S32_MAX,默认 10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 21, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling needles interval"),// 加油针数间隔 + 10000, S32_MIN, S32_MAX, 10000, 0, tr("Needles"), tr(""), + tr(""), 10000, 10000, 0x0120, operate)); + + // 加油时间间隔, 范围 1--S32_MAX,默认 1 加油时间间隔, 单位小时, 加油方式为按工作时间加油时有用; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 22, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling time interval"),// 加油时间间隔 + 1, 1, S32_MAX, 1, 0, tr("h"), tr(""), + tr(""), 1, 1, 0x0120, operate)); + + // 加油持续次数, 单位次 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 23, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling duration"),// 加油持续次数 + 1, 1, S32_MAX, 1, 0, tr("bout"), tr(""), + tr(""), 1, 1, 0x0120, operate)); + + // 自动气框允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic air frame allowed"),// 自动气框允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 气框自动关闭允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic closing of air frame allowed"),// 气框自动关闭允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 气框自动打开允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic opening of air frame allowed"),// 气框自动打开允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 气框自动关闭后扫码允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Code scanning allowed after automatic closing of air frame"),// 气框自动关闭后扫码允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 自动气框闭合延时, 范围 0--5000,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 103, 0, 0, PARA_VALUE_TYPE_INT, + tr("Automatic air frame closing delay"),// 自动气框闭合延时 + 0, 0, 5000, 0, 0, tr("ms"), tr(""), + tr(""), 0, 0, 0x0120, operate)); +} + +void PunchMachine::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 upStr = tr("Up"); //上升 + QString downStr= tr("Down");//下降 + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0001,tr("All punching spindle motor"),MT_LMA,// 所有主轴电机 + 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,0x0001,tr("No. 1 punching spindle motor"),MT_LPM,// 1号头冲孔主轴电机 + 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("No. 2 punching spindle motor"),MT_LP2,// 2号头冲孔主轴电机 + 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)); + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0003,tr("No. 3 punching spindle motor"),MT_LP3,// 3号头冲孔主轴电机 + 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("No. 4 punching spindle motor"),MT_LP4,// 4号头冲孔主轴电机 + 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("X 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,0x0004,tr("Y 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,0x0004,tr("punching color changing motor"),MT_LPS,// 冲孔换色电机 + 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)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0005,tr("Punch rotate motor"),MT_LPR,// 冲孔旋转电机 + enableStr,true,OUTCONTROL_MS_ENABLE,-1,-1, + disableStr,true,OUTCONTROL_MS_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,0x0008,tr("template positioning cylinder"),OT_FRAME,// 模板定位气缸 + "",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,0x000A,tr("Vacuum cleaner"),OT_CLEANER,// 吸尘器 + "",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,0x000B,tr("Safety barrier 1"),OT_SAFE_DOOR1,// 安全护栏1 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + upStr,true,OUTCONTROL_UP,-1,-1, + downStr,true,OUTCONTROL_DOWN,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000C,tr("Safety barrier 2"),OT_SAFE_DOOR2,// 安全护栏2 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + upStr,true,OUTCONTROL_UP,-1,-1, + downStr,true,OUTCONTROL_DOWN,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000C,tr("Punching refueling"),OT_PUNCH_OIL,// 冲孔加油 + "",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,0x000C,tr("Headlamp"),OT_LIGHT,// 照明灯 + "",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 PunchMachine::initShortCutList() +{ + m_allShortCutList.clear(); + + m_allShortCutList.append(makeAShortCutItem(0,0x0001,tr("All To Zero"),"buttonAllToZero",FUN_ALLTOZERO));//全部归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0002,tr("Spindle Jog"),"buttonSpindleJog",FUN_PUNCHSPINDLEJOG));//主轴点动 + m_allShortCutList.append(makeAShortCutItem(0,0x0003,tr("Spindle Enable"),"buttonSpindleEnable",FUN_SPINDLEENABLE));//主轴使能 + m_allShortCutList.append(makeAShortCutItem(0,0x0004,tr("Spindle Disable"),"buttonSpindleDisable",FUN_SPINDLEDISABLE));//主轴失能 + m_allShortCutList.append(makeAShortCutItem(0,0x0005,tr("Spindle Test"),"buttonSpindleTest",FUN_SPINDLETEST));//主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x0006,tr("Set Offset"),"buttonSetOffsetPoint",FUN_SETOFFSETPOINT));//定偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x0007,tr("Go Offset"),"buttonBackOffsetPoint",FUN_BACKOFFSETPOINT));//回偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x000A,tr("Set Start"),"buttonSetAnchorPoint",FUN_SETSTARTPOINT));//定起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x000B,tr("Go Start"),"buttonBackAnchorPoint",FUN_BACKSTARTPOINT));//回起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x000C,tr("Go Work"),"buttonBackWorkPoint",FUN_BACKWORKPOINT));//回工作点 + m_allShortCutList.append(makeAShortCutItem(0,0x000D,tr("Check Frame"),"buttonBorderCheck",FUN_CHECKFRAME));//边框检查 + m_allShortCutList.append(makeAShortCutItem(0,0x000E,tr("Punch Change Tool"),"buttonManualChangeColor",FUN_PUNCHMANUALCHANGECOLOR));//手动换刀(冲孔手动换色) + m_allShortCutList.append(makeAShortCutItem(0,0x000F,tr("Forward And Back"),"buttonForwardOrBack",FUN_FORWARDORBACK));//前进回退 + //m_allShortCutList.append(makeAShortCutItem(0,0x0010,tr("Reset"),"buttonProcessReset",FUN_PROCESSRESET));//流程复位 + m_allShortCutList.append(makeAShortCutItem(0,0x0011,tr("Single Punch"),"buttonSinglePunch",FUN_SINGLEPUNCH));//单次冲孔 + //m_allShortCutList.append(makeAShortCutItem(0,0x0012,tr("FrameZero"),"buttonFrameZero",FUN_FRAMEZERO));//框架归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0013,tr("To Right Up"),"buttonMoveToRightUp",FUN_MOVETORIGHTUP));//去右上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0014,tr("To Right Down"),"buttonMoveToRightDown",FUN_MOVETORIGHTDOWN));//去右下角 + m_allShortCutList.append(makeAShortCutItem(0,0x0015,tr("To Left Up"),"buttonMoveToLeftUp",FUN_MOVETOLEFTUP));//去左上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0016,tr("To Left Down"),"buttonMoveToLeftDown",FUN_MOVETOLEFTDOWN));//去左下角 + //m_allShortCutList.append(makeAShortCutItem(0,0x0017,tr("Scope Work"),"buttonSetWorkRange",FUN_SETWORKRANGE));//定工作范围 + m_allShortCutList.append(makeAShortCutItem(0,0x0018,tr("Head Stop Lower"),"buttonPunchStopLower",FUN_PUNCHSTOPLOWER));//冲头停下位 + m_allShortCutList.append(makeAShortCutItem(0,0x0019,tr("Draw Outline"),"buttonDrawOutline",FUN_DRAWOUTLINE));//画轮廓线 + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("Oil Supply"),"buttonManualOil",FUN_OILSUPPLY));//冲孔连续供油 + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("Tool Debug"),"buttonToolDebug",FUN_ROTATECOMPENSATE));//旋转补偿 冲刀调试 + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("Rotate To Zero"),"buttonRotToZero",FUN_PUNCH_ROT_TO_ZERO));//冲孔旋转去零位 + } +} + +void PunchMachine::initAssistList() +{ + m_allAssistList.clear(); + + m_allAssistList.append(makeAAssistItem(0,0x0001,tr("Signal"),"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("Software"),"buttonSoftwareSet",ASSIST_SOFTWARESET));//软件设置 + m_allAssistList.append(makeAAssistItem(0,0x0009,tr("Authorize"),"buttonSoftwareAuthor",ASSIST_AUTHORIZATION));//软件授权 + m_allAssistList.append(makeAAssistItem(0,0x000A,tr("Network"),"buttonNetworkManage",ASSIST_NETWORK));//网络管理 + + s16 wifi = g_pSettings->readFromIniFile("HMI/wifi").toInt();//是否有wifi + if(wifi == 1) + { + m_allAssistList.append(makeAAssistItem(0,0x000A,tr("WIFI"),"buttonSensor",ASSIST_WIFI));//WIFI管理 + } + + m_allAssistList.append(makeAAssistItem(0,0x000B,tr("NeedleSet"),"buttonNeedleSet",ASSIST_NEEDLESET));//针杆设置 + m_allAssistList.append(makeAAssistItem(0,0x000C,tr("Time"),"buttonTimeSet",ASSIST_TIMESET));//时间设置 + m_allAssistList.append(makeAAssistItem(0,0x000D,tr("Shortcut"),"buttonCommonFunction",ASSIST_SHORTCUTSET));//常用设置 + m_allAssistList.append(makeAAssistItem(0,0x000E,tr("Statistics"),"buttonProductStatistics",ASSIST_PRODUCTSTATICS));//生产统计 + m_allAssistList.append(makeAAssistItem(0,0x000F,tr("Version"),"buttonVersionInfo",ASSIST_MCVERSION));//版本信息 + m_allAssistList.append(makeAAssistItem(0,0x0014,tr("Root"),"buttonRoot",ASSIST_ROOT));//超级用户 + m_allAssistList.append(makeAAssistItem(0,0x0015,tr("errojunel"),"buttonAgingTest",ASSIST_ERRORLOG));//错误日志 + +#ifdef Q_OS_LINUX + //m_allAssistList.append(makeAAssistItem(0,0x0015,tr("Reboot"),"buttonShutDown",ASSIST_REBOOT));//关机重启 +#endif +} + +void PunchMachine::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,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));//花样删除 +} + +void PunchMachine::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 PunchMachine::initSensorList() +{ + QList sensorList; + sensorList.append(makeASensorItem(0x0000, 0, tr("Start button")));//启动按钮 + + sensorList.append(makeASensorItem(0x0001, 0, tr("stop button")));//停止按钮 + + sensorList.append(makeASensorItem(0x0002, 0, tr("jog button")));//点动按钮 + + sensorList.append(makeASensorItem(0x0003, 0, tr("open frame 1 button")));//开框1按钮 + sensorList.append(makeASensorItem(0x0003, 1, tr("open frame 2 button")));//开框2按钮 + + sensorList.append(makeASensorItem(0x0008, 0, tr("Safety light curtain")));//安全光幕 + + sensorList.append(makeASensorItem(0x0090, 0, tr("Spindle 1 zero position")));//主轴1零位 + sensorList.append(makeASensorItem(0x0090, 1, tr("Spindle 2 zero position")));//主轴2零位 + sensorList.append(makeASensorItem(0x0090, 2, tr("Spindle 3 zero position")));//主轴3零位 + sensorList.append(makeASensorItem(0x0090, 3, tr("Spindle 4 zero position")));//主轴4零位 + + sensorList.append(makeASensorItem(0x003E, 0, tr("Punching 1 Rotation Zero")));//冲孔1旋转零位 + sensorList.append(makeASensorItem(0x003E, 1, tr("Punching 2 Rotation Zero")));//冲孔2旋转零位 + sensorList.append(makeASensorItem(0x003E, 2, tr("Punching 3 Rotation Zero")));//冲孔3旋转零位 + sensorList.append(makeASensorItem(0x003E, 3, tr("Punching 4 Rotation Zero")));//冲孔4旋转零位 + + sensorList.append(makeASensorItem(0x0020, 0, tr("X1 zero position")));//X1零位 + sensorList.append(makeASensorItem(0x0020, 1, tr("Y1 zero position")));//Y1零位 + sensorList.append(makeASensorItem(0x0020, 2, tr("X2 zero position")));// X2零位 + sensorList.append(makeASensorItem(0x0020, 3, tr("Y2 zero position")));// Y2零位 + + sensorList.append(makeASensorItem(0x0021, 0, tr("X1 slows down")));//X1降速 + sensorList.append(makeASensorItem(0x0021, 1, tr("Y1 deceleration")));//Y1降速 + sensorList.append(makeASensorItem(0x0021, 2, tr("X2 downshift")));//X2降速 + sensorList.append(makeASensorItem(0x0021, 3, tr("Y2 downshift")));// Y2降速 + + sensorList.append(makeASensorItem(0x0022, 0, tr("1 limit-")));//X1限位- + sensorList.append(makeASensorItem(0x0022, 1, tr("Y1 limit-")));// Y1限位- + sensorList.append(makeASensorItem(0x0022, 2, tr("X2 limit -")));//X2限位- + sensorList.append(makeASensorItem(0x0022, 3, tr("Y2 limit -")));//Y2限位- + + sensorList.append(makeASensorItem(0x0023, 0, tr("1 limit+")));//X1限位+ + sensorList.append(makeASensorItem(0x0023, 1, tr("Y1 limit+")));// Y1限位+ + sensorList.append(makeASensorItem(0x0023, 2, tr("X2 limit +")));//X2限位+ + sensorList.append(makeASensorItem(0x0023, 3, tr("Y2 limit +")));//Y2限位+ + + sensorList.append(makeASensorItem(0x03FE, 0, tr("Punching color changing motor - zero position")));//冲孔换色电机-零位 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Punching color changing motor - zero position")));//冲孔换色电机-零位 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Punching Color Change Motor - Negative Limit")));//冲孔换色电机-负限位 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Safety light curtain 1 input")));//安全光幕1输入 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Safety light curtain 2 input")));//安全光幕2输入 + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + sensorList.append(makeASensorItem(0x0003, 2, tr("open frame 3 button")));//开框3按钮 + sensorList.append(makeASensorItem(0x0003, 3, tr("open frame 4 button")));//开框4按钮 + + sensorList.append(makeASensorItem(0x0007, 0, tr("Air pressure protection input")));// 气压保护输入 + } + else + { + sensorList.append(makeASensorItem(0x0007, 0, tr("Air pressure protection input")));// 气压保护输入 + } + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + // xcy 0918 添加传感器 + sensorList.append(makeASensorItem(0x002C, 0, tr("Color change zero position 1")));//冲孔换色零位 + sensorList.append(makeASensorItem(0x002C, 1, tr("Color change zero position 2")));//冲孔换色零位 + sensorList.append(makeASensorItem(0x002C, 2, tr("Color change zero position 3")));//冲孔换色零位 + sensorList.append(makeASensorItem(0x002C, 3, tr("Color change zero position 4")));//冲孔换色零位 + sensorList.append(makeASensorItem(0x002C, 4, tr("X3 zero position")));// X3零位 + sensorList.append(makeASensorItem(0x002C, 5, tr("Y3 zero position")));// Y3零位 + sensorList.append(makeASensorItem(0x002C, 6, tr("X4 zero position")));// X4零位 + sensorList.append(makeASensorItem(0x002C, 7, tr("Y4 zero position")));// Y4零位 + + sensorList.append(makeASensorItem(0x002E, 4, tr("X3 limit -")));//X3限位- + sensorList.append(makeASensorItem(0x002E, 5, tr("Y3 limit -")));//Y3限位- + sensorList.append(makeASensorItem(0x002E, 6, tr("X4 limit -")));//X4限位- + sensorList.append(makeASensorItem(0x002E, 7, tr("Y4 limit -")));//Y4限位- + + sensorList.append(makeASensorItem(0x002F, 4, tr("X3 limit +")));//X3限位+ + sensorList.append(makeASensorItem(0x002F, 5, tr("Y3 limit +")));//Y3限位+ + sensorList.append(makeASensorItem(0x002F, 6, tr("X4 limit +")));//X4限位+ + sensorList.append(makeASensorItem(0x002F, 7, tr("Y4 limit +")));//Y4限位+ + + sensorList.append(makeASensorItem(0x00A0, 0, tr("Spindle position detection 1")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x00A0, 1, tr("Spindle position detection 2")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x00A0, 2, tr("Spindle position detection 3")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x00A0, 3, tr("Spindle position detection 4")));//冲孔主轴零位 + } + + //将机型所需的传感器列表替换到传感器整体列表中 + 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 PunchMachine::initErrorCodeAndStateList() +{ + m_allErrorCodeAndStateList.clear(); + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_ZERO, tr("Punching spindle is not at zero position")));// 冲孔主轴不在零位 + } + //等于冲孔机并为4头end + else + { + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_ZERO, tr("Punching 1 spindle is not at zero position")));// 冲孔1主轴不在零位 + } + + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CLR_BLK, tr("Vacuum cleaner clogged")));// 吸尘器阻塞 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CLR_FULL, tr("Vacuum cleaner full")));// 吸尘器满料 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_OIL_AIR, tr("Abnormal oil pump pressure")));// 油泵压力异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH2_NOT_ZERO, tr("Punching 2 spindle is not at zero position")));// 冲孔2主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_SWND_TIMOUT, tr("Punching color change timeout")));// 冲孔换色超时 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_ND_ERR, tr("Punching needle position error")));// 冲孔针位错误 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH3_NOT_ZERO, tr("Punching 3 spindle is not at zero position")));// 冲孔3主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH4_NOT_ZERO, tr("Punching 4 spindle is not at zero position")));// 冲孔4主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_BACK, tr("Breathing valve punching cylinder is not high")));// 呼吸阀冲孔气缸不在高位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CMK_BTP, tr("Abnormality on the punching hole of the breathing valve")));// 呼吸阀冲孔上异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CMK_BBP, tr("Abnormal under the breathing valve punching")));// 呼吸阀冲孔下异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CMK_BPB, tr("Abnormal expansion and contraction of the stopper under the punching valve of the breathing valve")));// 呼吸阀冲孔下挡块伸缩异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH2_NOT_ZERO, tr("Punching 2 spindle is not at zero position")));// 冲孔2主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH2_NOT_ZERO, tr("Punching 2 spindle is not at zero position")));// 冲孔2主轴不在零位 +} + diff --git a/mctype/patternsingleboard/function/punchmachine.h b/mctype/patternsingleboard/function/punchmachine.h new file mode 100644 index 0000000..3d255b6 --- /dev/null +++ b/mctype/patternsingleboard/function/punchmachine.h @@ -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 diff --git a/mctype/patternsingleboard/function/punchmachineAutoPos.cpp.autosave b/mctype/patternsingleboard/function/punchmachineAutoPos.cpp.autosave new file mode 100644 index 0000000..b49f484 --- /dev/null +++ b/mctype/patternsingleboard/function/punchmachineAutoPos.cpp.autosave @@ -0,0 +1,1996 @@ +#include "PunchMachineAutoPos.h" + +PunchMachineAutoPos::PunchMachineAutoPos() +{ + //添加各种参数到列表中 + initRootParasList(); + initRootHMIConfigurationList(m_allParasList);//超级用户界面配置 + initRootIOTConfigurationList(m_allParasList); //超级用户物联网配置 + initPatternsParasList(); + initSoftwareParasList(m_allParasList); + initTimeParasList(m_allParasList); + initPunchCommonFunParasList(m_allParasList); + initMcParasList(); + initWkParasList(); + + //初始化控制动作列表 + initOutCtrlList(); + + //初始化快捷功能列表 + initShortCutList(); + + //初始化辅助功能列表 + initAssistList(); + + //初始化花样设置功能列表 + initPatternSetList(); + + //初始化参数设置功能列表 + initParaSetList(); + + //初始化传感器列表 + initSensorList(); + + //初始化错误代码和状态列表 + initErrorCodeAndStateList(); +} + +PunchMachineAutoPos::~PunchMachineAutoPos() +{ + +} + +//超级用户参数(包括机器参数、工作参数) +void PunchMachineAutoPos::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)); + + //超级用户界面配置参数-行程矫正;单位:无 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_ROOT, + 0 , + ROOT_TROKECORRECTION, 0, 0, PARA_VALUE_TYPE_CLICK, + QCoreApplication::translate("GLOBAL", "Stroke correction"),//行程矫正 + 0, 0, 0, 0, 0, "", "", "", + 0, 0, 0x000D, factory)); +} + +//花样参数 +void PunchMachineAutoPos::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)); + + //花样参数--------------------------- +} + +void PunchMachineAutoPos::initMcParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + // 主轴启动停止转速, 范围 1--300,单位r/min,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 109, 0, 0, PARA_VALUE_TYPE_INT, + tr("punching spindle start and stop speed"),//冲孔主轴启动停止转速 + 100, 1, 300, 100, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0001, operate)); + + // 主轴归零转速, 范围 1--3000,单位r/min,默认 120 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 110, 0, 0, PARA_VALUE_TYPE_INT, + tr("main punching shaft zeroing speed"),//主冲孔轴归零转速 + 120, 1, 3000, 120, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴运转转速, 范围 1--3000,单位r/min,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 111, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle running speed"),//主轴运转转速 + 300, 1, 3000, 300, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴运转加速度, 范围 1--100,单位r/ss,默认 50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 112, 0, 0, PARA_VALUE_TYPE_INT, + tr("spindle punching speed"),//主轴冲孔运转加速度 + 50, 1, 100, 50, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴刹车加速度, 范围 1--100,单位r/ss,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 113, 0, 0, PARA_VALUE_TYPE_INT, + tr("spindle punching brake acceleration"),//主轴冲孔刹车加速度 + 100, 1, 100, 100, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy启动停止速度, 范围 1--100,单位mm/s,默认 10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 100, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY start stop speed"),//XY启动停止速度 + 10, 1, 100, 10, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy归零运行速度, 范围 1--100,单位mm/s,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 101, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY zero run speed"),//XY归零运行速度 + 100, 1, 100, 100, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy空走运行速度, 范围 1--1000,单位mm/s,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 102, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY idle running speed"),//XY空走运行速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy行走加速度, 范围 1--10000,单位mm/s2,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 103, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY walking acceleration"),//XY行走加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy刹车加速度 1--10000,单位mm/s2,默认 10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 104, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY braking acceleration"),//XY刹车加速度 + 10000, 1, 10000, 10000, 0, tr("mm/s2"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy手动移动速度1, 范围 1--1000,单位mm/s,默认 10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 105, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 1"),//XY手动移动速度1 + 10, 1, 1000, 10, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy手动移动速度2, 范围 1--1000,单位mm/s,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 106, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 2"),//XY手动移动速度2 + 100, 1, 1000, 100, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy手动移动速度3, 范围 1--1000,单位mm/s,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 107, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 3"),//XY手动移动速度3 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // xy最高移动速度, 范围 1--1000,单位mm/s,默认 300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 108, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY maximum movement speed"),//XY最高移动速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // x框传感器坐标, 范围 S32_MIN--S32_MAX,单位0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 50, 0, 0, PARA_VALUE_TYPE_INT, + tr("X frame sensor coordinates"),//x框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // y框传感器坐标, 范围 S32_MIN--S32_MAX,单位0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 51, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y frame sensor coordinates"),//y框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 主轴归零补偿角度, -1000--1000, 单位 0.01度,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 146, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle zero compensation angle"),//主轴归零补偿角度 + 200, -1000, 1000, 200, 2,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // X轴归零补偿, -1000--1000, 单位 0.01mm,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 147, 0, 0, PARA_VALUE_TYPE_INT, + tr("X-axis zero compensation"),//X轴归零补偿 + 200, -1000, 1000, 200, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + //y轴归零补偿, -1000--1000, 单位 0.01mm,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 148, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y-axis zero compensation"),//Y轴归零补偿 + 200, -1000, 1000, 200, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // X间隙补偿,范围-200--200 单位 0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("X backlash compensation"),//X间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // Y间隙补偿,范围-200--200 单位 0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y backlash compensation"),//Y间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // 机头个数,范围0-100 单位 个,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 2, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of handpieces"),//机头个数 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 冲孔每头机针个数,范围0-100 单位 个,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 5, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of punch hand"),//冲孔每头机针个数 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_DETECT, + 36, 0, 0, PARA_VALUE_TYPE_SW, + tr("Infrared device configuration"),// 红外装置配置 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + ///限位参数 + // x可移动区域负边界(X-), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 70, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area negative border"),//X可移动区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // x可移动区域正边界(X+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 71, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area positive border"),//X可移动区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // x可冲孔区域负边界(X-), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 88, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Punchable area negative boundary"),//X可冲孔区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // x可冲孔区域正边界(X+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 89, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Positive boundary of punchable area"),//X可冲孔区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // y可移动区域负边界(Y-), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area negative boundary"),//Y可移动区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // y可移动区域正边界(Y+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area positive boundary"),//Y可移动区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + // y可冲孔区域负边界(Y-), 范围 -2147483648--2147483647,单位0.01mm + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 90, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y negative boundary of punchable area"),//Y可冲孔区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // y可冲孔区域正边界(Y+), 范围 -2147483648--2147483647,单位0.01mm + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 91, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y positive boundary of punchable area"),//Y可冲孔区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + // 冲头旋转启动停止速度, 范围 1--720, 单位 deg/s(度/秒),默认 10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 156, 0, 0, PARA_VALUE_TYPE_INT, + tr("Starting and stopping speed of punch rotation"),//冲头旋转启动停止速度 + 10, 1, 720, 10, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转归零速度, 1--720, 单位 deg/s(度/秒),默认 50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 157, 0, 0, PARA_VALUE_TYPE_INT, + tr("Zero speed of punch rotation"),//冲头旋转归零速度 + 50, 1, 720, 50, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转运转速度, 范围 1--720, 单位 deg/s(度/秒),默认 360 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 158, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotating speed of punch"),//冲头旋转运转速度 + 360, 1, 720, 360, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转运动加速度, 范围 1--10000, 单位 deg/s(度/秒方),默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 159, 0, 0, PARA_VALUE_TYPE_INT, + tr("Acceleration of punch rotation motion"),//冲头旋转运动加速度 + 500, 1, 10000, 500, 0, tr("deg/ss"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转刹车加速度, 范围 1--10000, 单位 deg/s(度/秒方),默认 5000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 160, 0, 0, PARA_VALUE_TYPE_INT, + tr("Ram rotation brake acceleration"),//冲头旋转刹车加速度 + 5000, 1, 10000, 5000, 0, tr("deg/ss"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + + // 冲头旋转最高速度, 范围 1--2000,单位 deg/s,默认 720 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 161, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum speed of punch rotation"),//冲头旋转最高速度 + 720, 1, 2000, 720, 0, tr("deg/s"), tr(""), + tr(""), 0, 0, 0x000E, operate)); + } +} + +void PunchMachineAutoPos::initWkParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + //操作参数 + // 吸尘器启动延时,单位秒,,0--10s,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 84, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner start delay"),//吸尘器启动延时 + 0, 0, 10, 0, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0001, operate)); + + // 吸尘器关闭延时,单位秒,0--10s,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 40, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner off delay"),//吸尘器关闭延时 + 0, 0, 10, 0, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0002, operate)); + + // 冲孔吸尘器启动持续时间,范围0-100,单位s,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 181, 0, 0, PARA_VALUE_TYPE_INT, + tr("Duration of vacuuming"),//吸尘持续时长 + 5, 0, 100, 5, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0003, operate)); + + // 冲孔换色间距,范围0-10000,单位mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 186, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching color change spacing"),// 冲孔换色间距 + 0, 0, 10000, 0, 0, tr("mm"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔画笔工作模式,0,自动;1,手动,默认0. + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 187, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Working mode of punching brush"),// 冲孔画笔工作模式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("automatic:0;Manual:1"), 0, 0, 0x018A, operate)); + + // 冲孔主轴最大运行速度,范围0-2000,单位r/min,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 188, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum running speed of punching spindle"),// 冲孔主轴最大运行速度 + 1000, 0, 2000, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 197, 0, 0, PARA_VALUE_TYPE_SW, + tr("Automatic start angle adjustment"),//自动起始角度调整 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 单片工作时间显示模式,0,不显示;1,单片工作时间;2,累计工作时间 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 199, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Single chip working time display mode"),// 单片工作时间显示模式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("not display:0;monolithic:1;accumulative total:2"), + 0, 0, 0x018A, operate)); + + if(g_pSettings->readFromInHMIiFile("AUFUS/highSpeed").toInt() == 0) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 220, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1000 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 221, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1100 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 222, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1200 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 223, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1300 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 224, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1400 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 225, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1500 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + else if(g_pSettings->readFromInHMIiFile("AUFUS/highSpeed").toInt() == 1) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 220, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1600 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 221, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1700 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 222, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1800 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 223, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 1900 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 224, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 2000 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 225, 0, 0, PARA_VALUE_TYPE_INT, + tr("adjustment angle 2100 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 226, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 4-5mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 227, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 5-6mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 228, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 6-7mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 229, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 7-8mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 230, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 8-9mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 231, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 9-14mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 232, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 14+mm"),// 冲孔运行速度限制 + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 233, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 1"),//冲孔旋转角度补偿1 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 234, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 2"),//冲孔旋转角度补偿2 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 235, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 3"),//冲孔旋转角度补偿3 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 236, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 4"),//冲孔旋转角度补偿4 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 237, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 5"),//冲孔旋转角度补偿5 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔1旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 238, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 1 rotation angle compensation 6"),//冲孔旋转角度补偿6 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 245, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 1"),//冲孔2旋转角度补偿1 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 246, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 2"),//冲孔2旋转角度补偿2 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 247, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 3"),//冲孔2旋转角度补偿3 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 248, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 4"),//冲孔2旋转角度补偿4 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 249, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 5"),//冲孔2旋转角度补偿5 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + + // 冲孔2旋转角度补偿,范围-36000--36000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 250, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching 2 rotation angle compensation 6"),//冲孔2旋转角度补偿6 + 0, -36000, 36000,0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x018A, operate)); + } + + if(g_pSettings->readFromInHMIiFile("AUFUS/highSpeed").toInt() == 0) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 239, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 1000 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 240, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 1100 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 241, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 1200 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 242, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 1300 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 243, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 1400 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 244, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 1500 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + else if(g_pSettings->readFromInHMIiFile("AUFUS/highSpeed").toInt() == 1) + { + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 239, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 1600 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 240, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 1700 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 241, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 1800 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 242, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 1900 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 243, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 2000 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔自动调整角度,单位度,范围0-360,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 244, 0, 0, PARA_VALUE_TYPE_INT, + tr("sustain adjustment angle 2100 rpm"),//冲孔自动调整角度 + 0, 0, 360, 0, 0,cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + } + + // 冲孔吸尘器启动间隔,范围0-500,单位s,默认60 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 182, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching vacuum cleaner start interval"),//吸尘器启动间隔 + 60, 0, 500, 60, 0, tr("s"), tr(""), + tr(""), + 0, 0, 0x0004, operate)); + + //拉料偏移值,范围0-500000,默认90000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 89, 0, 0, PARA_VALUE_TYPE_INT, + tr("1 tool punching tool life alarm"),//1刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0005, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 90, 0, 0, PARA_VALUE_TYPE_INT, + tr("2 tool punching tool life alarm"),//2刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0006, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 91, 0, 0, PARA_VALUE_TYPE_INT, + tr("3 tool punching tool life alarm"),//3刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0007, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 92, 0, 0, PARA_VALUE_TYPE_INT, + tr("4 tool punching tool life alarm"),//4刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0008, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 93, 0, 0, PARA_VALUE_TYPE_INT, + tr("5 tool punching tool life alarm"),//5刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0009, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 94, 0, 0, PARA_VALUE_TYPE_INT, + tr("6 tool punching tool life alarm"),//6刀位冲刀寿命报警 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x0010, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 1, 0, PARA_VALUE_TYPE_SW, + tr("first head"),// 第一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0170, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 2, 0, PARA_VALUE_TYPE_SW, + tr("second head"),// 第二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0171, operate)); + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_DZ && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 3, 0, PARA_VALUE_TYPE_SW, + tr("third head"),// 第三个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0172, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 4, 0, PARA_VALUE_TYPE_SW, + tr("fourth head"),// 第四个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0173, operate)); + } + + // 产量预设, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 33, 0, 0, PARA_VALUE_TYPE_INT, + tr("Production preset"),// 产量预设 + 0, 0, S32_MAX, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x012A, operate)); + + // 冲孔主轴工作转速, 范围 1--3000,单位r/min,默认 2000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 41, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle working speed"),//冲孔主轴工作转速 + 2000, 1, 3000, 2000, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0011, operate)); + // 冲孔加速度, 1--200, 单位r/ss , 默认20 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 42, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching acceleration"),//冲孔加速度 + 20, 1, 200, 20, 0, tr("r/ss"), tr(""), + tr(""), + 0, 0, 0x0011, operate)); + + // 冲孔动框方式, 位图 + // bit0 = 0, xy连续动框; bit0 = 1, xy间歇式动框; + // bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速; + // bit2 = 0, 冲孔连续旋转; bit2 = 1,冲孔间接旋转; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 43, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Punching and moving frame method"),// 冲孔动框方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("xy continuous frame:0;xy intermittent frame:1"), 0, 0, 0x0012, operate)); // bit0 = 0, xy连续动框; bit0 = 1, xy间歇式动框; + + // bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 43, 2, 0, PARA_VALUE_TYPE_LIST, + tr("XY moving frame acceleration and deceleration method"),// XY动框加减速方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("xy intermittent pulse without acceleration and deceleration:0;xy intermittent pulse sine acceleration and deceleration:1"), 0, 0, 0x0013, operate)); // bit1 = 0, xy间歇式脉冲无加减速; bit1 = 1, xy间歇式脉冲正弦加减速; + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 43, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Punching Rotation"),// 冲孔旋转方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Punching continuous rotation:0;Punching indirect rotation:1"), 0, 0, 0x0014, operate)); // bit2 = 0, 冲孔连续旋转; bit2 = 1,冲孔间接旋转; + + // 冲孔动框起始角度, 0--36000, 单位 0.01度,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 44, 0, 0, PARA_VALUE_TYPE_INT, + tr("Starting angle of punching frame"),//冲孔动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + // 冲孔动框持续角度, 0--36000, 单位 0.01度,默认 15000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 45, 0, 0, PARA_VALUE_TYPE_INT, + tr("Persistence angle of punching frame"),//冲孔动框持续角度 + 15000, 0, 36000,15000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + // 软件限位; 位图选择, 0, 不允许; 1, 允许; + // bit0, xy移动; + // bit4, 冲孔落杆限制; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 49, 1, 0, PARA_VALUE_TYPE_SW, + tr("xy move"),// xy移动 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0017, factory)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + // 冲孔旋转减速最小偏差角度,单位度,范围0--180,默认 180 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 63, 0, 0, PARA_VALUE_TYPE_INT, + tr("Minimum deviation angle for punching rotation deceleration"),//冲孔旋转减速最小偏差角度 + 180, 0, 180,180, 0, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + // 冲孔旋转持续角度, 0--36000, 单z位 0.01度,默认 36000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 64, 0, 0, PARA_VALUE_TYPE_INT, + tr("Continuous angle of punching rotation"),//冲孔旋转持续角度 + 36000, 0, 36000,36000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 1, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 1 rotation control"),//冲孔机头1旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 2, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 2 rotation control"),//冲孔机头2旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 3, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 3 rotation control"),//冲孔机头3旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 4, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 4 rotation control"),//冲孔机头4旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 5, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 5 rotation control"),//冲孔机头5旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 68, 6, 0, PARA_VALUE_TYPE_SW, + tr("Punching machine head 6 rotation control"),//冲孔机头6旋转控制 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0015, operate)); + } + + // 更换冲头计数值,范围0-1000000,单位 次,默认500000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 178, 0, 0, PARA_VALUE_TYPE_INT, + tr("Replace the punch count"),// 更换冲头计数值 + 500000, 0, 1000000, 500000, 0, tr("bout"), tr(""), + tr(""), + 0, 0, 0x0020, operate)); + + // 换色启动方式,0,自动换色,自动启动;1,自动换色,手动启动;2,手动换色,手动启动 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 71, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Color change start method"),//换色启动方式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2"), + 0, 0, 0x0020, operate)); + + // X绣框换向补偿,范围-1000--1000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("X embroidery frame reversing compensation"),//X绣框换向补偿 + 0, -1000, 1000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // Y绣框换向补偿,范围-1000--1000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y embroidery frame reversing compensation"),//Y绣框换向补偿 + 0, -1000, 1000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // 冲孔跳针变越框针数,范围0-100,单位,针,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 79, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching jump stitches to change the number of frame stitches"),//冲孔跳针变越框针数 + 5, 0, 100, 5, 0, tr("Needle"), tr(""), + tr(""), + 0, 0, 0x0021, operate)); + + // 倒车工作模式,0,普通模式;1,点动模式;2,持续点动模式 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 81, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Reversing working mode"),//倒车工作模式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("normal mode:0;Jog mode:1;Continuous jog mode:2"), + 0, 0, 0x0022, operate)); + + // 特殊针位选择,0,无;1-9,1-9针位 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 82, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle position selection"),//特殊针位选择 + 0, 0, 9, 0, 0, tr(""), tr(""), + tr("none:0;1 needle position:1;2 needle position:2;3 needle position:3;4 needle position:4;5 needle position:5;6 needle position:6;7 needle position:7;8 needle position:8;9 needle position:9"), + 0, 0, 0x0023, operate)); + + // 特殊针位功能,0,雕孔;1,画笔 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 83, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle position function"),//特殊针位功能 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Carved hole:0;brush:1"), + 0, 0, 0x0024, operate)); + + // 换色速度,范围1-2000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 99, 0, 0, PARA_VALUE_TYPE_INT, + tr("Color change speed"),// 换色速度 + 200, 1, 2000, 200, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0025, operate)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 1, 0, PARA_VALUE_TYPE_SW, + tr("light curtain"),// 光幕 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0026, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 2, 0, PARA_VALUE_TYPE_SW, + tr("air pressure"),// 气压 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 7, 0, PARA_VALUE_TYPE_SW, + tr("Safety guardrail"),// 安全护栏 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 8, 0, PARA_VALUE_TYPE_SW, + tr("Tricolor lamp"),// 三色灯 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 9, 0, PARA_VALUE_TYPE_SW, + tr("Oil pump alarm"),// 油泵报警 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 10, 0, PARA_VALUE_TYPE_SW, + tr("Vacuum cleaner alarm"),// 吸尘器报警 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0027, factory)); + + // 冲孔主轴启动慢动转速, 范围 1--2000,单位r/min,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 169, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle start jogging speed"),// 冲孔主轴启动慢动转速 + 500, 1, 2000, 500, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0028, operate)); + + // X工作范围,范围0-500000,单位0.01mm,默认90000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 174, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Working Range"),// X工作范围 + 90000, 0, 500000, 90000, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0029, operate)); + + // Y工作范围,范围0-500000,单位0.01mm,默认60000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Working Range"),// Y工作范围 + 60000, 0, 500000, 60000, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0030, operate)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + // 冲孔旋转传感器角度,范围-36000--36000,单位0.01度,默认9000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 176, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching rotation sensor angle"),//冲孔旋转传感器角度 + 9000, -36000, 36000,9000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0030, operate)); + } + + // 冲孔动框最高速度,范围1-1000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum speed of punching and moving frame"),// 冲孔动框最高速度 + 200, 0, 1000, 200, 0, tr("mm/S"), tr(""), + tr(""), + 0, 0, 0x0031, operate)); + + // 跳针最高主轴转速,范围 1--3000,单位r/min,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 120, 0, 0, PARA_VALUE_TYPE_INT, + tr("Jump maximum spindle speed"),// 跳针最高主轴转速 + 1, 0, 3000, 1, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0032, operate)); + + // 冲孔时动作允许 0, 不允许; 1, 允许; + // bit0 吹气允许; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 39, 1, 0, PARA_VALUE_TYPE_SW, + tr("Blowing allowed"),// 吹气允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0033, operate)); + + ////////////////////////////////////动作设定 + //X偏移点 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 26, 0, 0, PARA_VALUE_TYPE_INT, + tr("X offset point"),//X偏移点 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + //Y偏移点 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 27, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y offset point"),//Y偏移点 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0002, operate)); + + // 偏移点坐标有效标志; 0, 无效; 1, x有效; 2, y有效; 3, xy同时有效 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 25, 0, 0, PARA_VALUE_TYPE_LIST, + tr("offset point coordinates"),//偏移点坐标 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("invalid:0;x is valid:1;y is valid:2;xy are valid:3"),//无:0;有:1 + 0, 0, 0x0003, operate)); + + // 完成后停车位置选择, 0, 当前位置; 1,起点,2,定位点,3,上料点; 4,偏移点 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 24, 0, 0, PARA_VALUE_TYPE_LIST, + tr("The stop position of the machine head after punching"),//冲孔完毕机头停止位置 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("current location:0;starting point:1;location point:2;feeding point:3;offset point:4"), + 0, 0, 0x0004, operate)); + + // 主轴点动停车角度,单位 0.01度 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_ACTION, + 62, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle jog parking angle"),//主轴点动停车角度 + 0, 0, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0004, operate)); + + // 加油方式选择, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 20, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Refueling method selection"),// 加油方式选择 + 0, 0, 3, 0, 0, tr(""), tr(""),//不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + tr("No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3"), 0, 0, 0x0120, operate)); + + // 加油针数间隔, 范围 S32_MIN--S32_MAX,默认 10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 21, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling needles interval"),// 加油针数间隔 + 10000, S32_MIN, S32_MAX, 10000, 0, tr("Needles"), tr(""), + tr(""), 10000, 10000, 0x0120, operate)); + + // 加油时间间隔, 范围 1--S32_MAX,默认 1 加油时间间隔, 单位小时, 加油方式为按工作时间加油时有用; + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 22, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling time interval"),// 加油时间间隔 + 1, 1, S32_MAX, 1, 0, tr("h"), tr(""), + tr(""), 1, 1, 0x0120, operate)); + + // 加油持续次数, 单位次 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 23, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling duration"),// 加油持续次数 + 1, 1, S32_MAX, 1, 0, tr("bout"), tr(""), + tr(""), 1, 1, 0x0120, operate)); + + // 自动气框允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic air frame allowed"),// 自动气框允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 气框自动关闭允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic closing of air frame allowed"),// 气框自动关闭允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 气框自动打开允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic opening of air frame allowed"),// 气框自动打开允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 气框自动关闭后扫码允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 102, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Code scanning allowed after automatic closing of air frame"),// 气框自动关闭后扫码允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0120, operate)); + + // 自动气框闭合延时, 范围 0--5000,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 103, 0, 0, PARA_VALUE_TYPE_INT, + tr("Automatic air frame closing delay"),// 自动气框闭合延时 + 0, 0, 5000, 0, 0, tr("ms"), tr(""), + tr(""), 0, 0, 0x0120, operate)); +} + +void PunchMachineAutoPos::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 upStr = tr("Up"); //上升 + QString downStr= tr("Down");//下降 + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_DZ && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0001,tr("All punching spindle motor"),MT_LMA,// 所有主轴电机 + 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,0x0001,tr("No. 1 punching spindle motor"),MT_LPM,// 1号头冲孔主轴电机 + 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("No. 2 punching spindle motor"),MT_LP2,// 2号头冲孔主轴电机 + 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)); + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_DZ && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0003,tr("No. 3 punching spindle motor"),MT_LP3,// 3号头冲孔主轴电机 + 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("No. 4 punching spindle motor"),MT_LP4,// 4号头冲孔主轴电机 + 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("X 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,0x0004,tr("Y 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,0x0004,tr("punching color changing motor"),MT_LPS,// 冲孔换色电机 + 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)); + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0005,tr("Punch rotate motor"),MT_LPR,// 冲孔旋转电机 + enableStr,true,OUTCONTROL_MS_ENABLE,-1,-1, + disableStr,true,OUTCONTROL_MS_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,0x0008,tr("template positioning cylinder"),OT_FRAME,// 模板定位气缸 + "",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,0x000A,tr("Vacuum cleaner"),OT_CLEANER,// 吸尘器 + "",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,0x000B,tr("Safety barrier 1"),OT_SAFE_DOOR1,// 安全护栏1 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + upStr,true,OUTCONTROL_UP,-1,-1, + downStr,true,OUTCONTROL_DOWN,-1,-1)); + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000C,tr("Safety barrier 2"),OT_SAFE_DOOR2,// 安全护栏2 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + upStr,true,OUTCONTROL_UP,-1,-1, + downStr,true,OUTCONTROL_DOWN,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000C,tr("Punching refueling"),OT_PUNCH_OIL,// 冲孔加油 + "",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,0x000C,tr("Headlamp"),OT_LIGHT,// 照明灯 + "",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 PunchMachineAutoPos::initShortCutList() +{ + m_allShortCutList.clear(); + + m_allShortCutList.append(makeAShortCutItem(0,0x0001,tr("AllToZero"),"buttonAllToZero",FUN_ALLTOZERO));//全部归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0002,tr("AxleJog"),"buttonSpindleJog",FUN_PUNCHSPINDLEJOG));//主轴点动 + m_allShortCutList.append(makeAShortCutItem(0,0x0003,tr("AxleEnable"),"buttonSpindleEnable",FUN_SPINDLEENABLE));//主轴使能 + m_allShortCutList.append(makeAShortCutItem(0,0x0004,tr("AxleDisable"),"buttonSpindleDisable",FUN_SPINDLEDISABLE));//主轴失能 + m_allShortCutList.append(makeAShortCutItem(0,0x0005,tr("AxleTest"),"buttonSpindleTest",FUN_SPINDLETEST));//主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x0006,tr("SetOffset"),"buttonSetOffsetPoint",FUN_SETOFFSETPOINT));//定偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x0007,tr("GoOffset"),"buttonBackOffsetPoint",FUN_BACKOFFSETPOINT));//回偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x000A,tr("SetStart"),"buttonSetAnchorPoint",FUN_SETSTARTPOINT));//定起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x000B,tr("GoStart"),"buttonBackAnchorPoint",FUN_BACKSTARTPOINT));//回起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x000C,tr("GoWork"),"buttonBackWorkPoint",FUN_BACKWORKPOINT));//回工作点 + m_allShortCutList.append(makeAShortCutItem(0,0x000D,tr("CheckFrame"),"buttonBorderCheck",FUN_CHECKFRAME));//边框检查 + m_allShortCutList.append(makeAShortCutItem(0,0x000E,tr("PunchColor"),"buttonManualChangeColor",FUN_PUNCHMANUALCHANGECOLOR));//手动换刀(冲孔手动换色) + m_allShortCutList.append(makeAShortCutItem(0,0x000F,tr("GoOrBack"),"buttonForwardOrBack",FUN_FORWARDORBACK));//前进回退 + //m_allShortCutList.append(makeAShortCutItem(0,0x0010,tr("Reset"),"buttonProcessReset",FUN_PROCESSRESET));//流程复位 + m_allShortCutList.append(makeAShortCutItem(0,0x0011,tr("SinglePunch"),"buttonSinglePunch",FUN_SINGLEPUNCH));//单次冲孔 + //m_allShortCutList.append(makeAShortCutItem(0,0x0012,tr("FrameZero"),"buttonFrameZero",FUN_FRAMEZERO));//框架归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0013,tr("ToRightUp"),"buttonMoveToRightUp",FUN_MOVETORIGHTUP));//去右上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0014,tr("ToRightDown"),"buttonMoveToRightDown",FUN_MOVETORIGHTDOWN));//去右下角 + m_allShortCutList.append(makeAShortCutItem(0,0x0015,tr("ToLeftUp"),"buttonMoveToLeftUp",FUN_MOVETOLEFTUP));//去左上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0016,tr("ToLeftDown"),"buttonMoveToLeftDown",FUN_MOVETOLEFTDOWN));//去左下角 + m_allShortCutList.append(makeAShortCutItem(0,0x0017,tr("ScopeWork"),"buttonSetWorkRange",FUN_SETWORKRANGE));//定工作范围 + m_allShortCutList.append(makeAShortCutItem(0,0x0018,tr("StopLower"),"buttonPunchStopLower",FUN_PUNCHSTOPLOWER));//冲头停下位 + m_allShortCutList.append(makeAShortCutItem(0,0x0019,tr("DrawOutline"),"buttonDrawOutline",FUN_DRAWOUTLINE));//画轮廓线 + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("OilSupply"),"buttonManualOil",FUN_OILSUPPLY));//冲孔连续供油 + + if(g_emProductType == PRODUCT_PUNCH_ROTARY)//旋转冲 + { + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("ToolDebug"),"buttonSpindleEnable",FUN_ROTATECOMPENSATE));//旋转补偿 冲刀调试 + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("RotToZero"),"buttonRotToZero",FUN_PUNCH_ROT_TO_ZERO));//冲孔旋转去零位 + } +} + +void PunchMachineAutoPos::initAssistList() +{ + m_allAssistList.clear(); + + m_allAssistList.append(makeAAssistItem(0,0x0001,tr("Signal"),"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("Software"),"buttonSoftwareSet",ASSIST_SOFTWARESET));//软件设置 + m_allAssistList.append(makeAAssistItem(0,0x0009,tr("Authorize"),"buttonSoftwareAuthor",ASSIST_AUTHORIZATION));//软件授权 + m_allAssistList.append(makeAAssistItem(0,0x000A,tr("Network"),"buttonNetworkManage",ASSIST_NETWORK));//网络管理 + + s16 wifi = g_pSettings->readFromInHMIiFile("HMI/wifi").toInt();//是否有wifi + if(wifi == 1) + { + m_allAssistList.append(makeAAssistItem(0,0x000A,tr("WIFI"),"buttonSensor",ASSIST_WIFI));//WIFI管理 + } + + m_allAssistList.append(makeAAssistItem(0,0x000B,tr("NeedleSet"),"buttonNeedleSet",ASSIST_NEEDLESET));//针杆设置 + m_allAssistList.append(makeAAssistItem(0,0x000C,tr("Time"),"buttonTimeSet",ASSIST_TIMESET));//时间设置 + m_allAssistList.append(makeAAssistItem(0,0x000D,tr("Shortcut"),"buttonCommonFunction",ASSIST_SHORTCUTSET));//常用设置 + m_allAssistList.append(makeAAssistItem(0,0x000E,tr("Statistics"),"buttonProductStatistics",ASSIST_PRODUCTSTATICS));//生产统计 + m_allAssistList.append(makeAAssistItem(0,0x000F,tr("Version"),"buttonVersionInfo",ASSIST_MCVERSION));//版本信息 + m_allAssistList.append(makeAAssistItem(0,0x0014,tr("Root"),"buttonRoot",ASSIST_ROOT));//超级用户 +} + +void PunchMachineAutoPos::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,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));//花样删除 +} + +void PunchMachineAutoPos::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 PunchMachineAutoPos::initSensorList() +{ + QList sensorList; + sensorList.append(makeASensorItem(0x0000, 0, tr("Start button")));//启动按钮 + sensorList.append(makeASensorItem(0x0001, 0, tr("stop button")));//停止按钮 + sensorList.append(makeASensorItem(0x0002, 0, tr("jog button")));//点动按钮 + sensorList.append(makeASensorItem(0x0003, 0, tr("open frame 1 button")));//开框1按钮 + sensorList.append(makeASensorItem(0x0003, 1, tr("open frame 2 button")));//开框2按钮 + sensorList.append(makeASensorItem(0x0008, 0, tr("Safety light curtain")));//安全光幕 + + sensorList.append(makeASensorItem(0x0090, 0, tr("Spindle 1 zero position")));//主轴1零位 + sensorList.append(makeASensorItem(0x0090, 1, tr("Spindle 2 zero position")));//主轴2零位 + sensorList.append(makeASensorItem(0x0090, 2, tr("Spindle 3 zero position")));//主轴3零位 + sensorList.append(makeASensorItem(0x0090, 3, tr("Spindle 4 zero position")));//主轴4零位 + sensorList.append(makeASensorItem(0x003E, 0, tr("Punching 1 Rotation Zero")));//冲孔1旋转零位 + sensorList.append(makeASensorItem(0x003E, 1, tr("Punching 2 Rotation Zero")));//冲孔2旋转零位 + sensorList.append(makeASensorItem(0x003E, 2, tr("Punching 3 Rotation Zero")));//冲孔3旋转零位 + sensorList.append(makeASensorItem(0x003E, 3, tr("Punching 4 Rotation Zero")));//冲孔4旋转零位 + + sensorList.append(makeASensorItem(0x0020, 0, tr("X1 zero position")));//X1零位 + sensorList.append(makeASensorItem(0x0020, 1, tr("Y1 zero position")));//Y1零位 + sensorList.append(makeASensorItem(0x0020, 2, tr("X2 zero position")));// X2零位 + sensorList.append(makeASensorItem(0x0020, 3, tr("Y2 zero position")));// Y2零位 + + sensorList.append(makeASensorItem(0x0021, 0, tr("X1 slows down")));//X1降速 + sensorList.append(makeASensorItem(0x0021, 1, tr("Y1 deceleration")));//Y1降速 + sensorList.append(makeASensorItem(0x0021, 2, tr("X2 downshift")));//X2降速 + sensorList.append(makeASensorItem(0x0021, 3, tr("Y2 downshift")));// Y2降速 + + sensorList.append(makeASensorItem(0x0022, 0, tr("1 limit-")));//X1限位- + sensorList.append(makeASensorItem(0x0022, 1, tr("Y1 limit-")));// Y1限位- + sensorList.append(makeASensorItem(0x0022, 2, tr("X2 limit -")));//X2限位- + sensorList.append(makeASensorItem(0x0022, 3, tr("Y2 limit -")));//Y2限位- + + sensorList.append(makeASensorItem(0x0023, 0, tr("1 limit+")));//X1限位+ + sensorList.append(makeASensorItem(0x0023, 1, tr("Y1 limit+")));// Y1限位+ + sensorList.append(makeASensorItem(0x0023, 2, tr("X2 limit +")));//X2限位+ + sensorList.append(makeASensorItem(0x0023, 3, tr("Y2 limit +")));//Y2限位+ + + sensorList.append(makeASensorItem(0x03FE, 0, tr("Punching color changing motor - zero position")));//冲孔换色电机-零位 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Punching color changing motor - zero position")));//冲孔换色电机-零位 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Punching Color Change Motor - Negative Limit")));//冲孔换色电机-负限位 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Safety light curtain 1 input")));//安全光幕1输入 + sensorList.append(makeASensorItem(0x03FE, 0, tr("Safety light curtain 2 input")));//安全光幕2输入 + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_DZ && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + sensorList.append(makeASensorItem(0x0003, 2, tr("open frame 3 button")));//开框3按钮 + sensorList.append(makeASensorItem(0x0003, 3, tr("open frame 4 button")));//开框4按钮 + + sensorList.append(makeASensorItem(0x0007, 0, tr("Air pressure protection input")));// 气压保护输入 + } + else + { + sensorList.append(makeASensorItem(0x0007, 0, tr("Air pressure protection input")));// 气压保护输入 + } + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_DZ && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + // xcy 0918 添加传感器 + sensorList.append(makeASensorItem(0x002C, 0, tr("Color change zero position 1")));//冲孔换色零位 + sensorList.append(makeASensorItem(0x002C, 1, tr("Color change zero position 2")));//冲孔换色零位 + sensorList.append(makeASensorItem(0x002C, 2, tr("Color change zero position 3")));//冲孔换色零位 + sensorList.append(makeASensorItem(0x002C, 3, tr("Color change zero position 4")));//冲孔换色零位 + sensorList.append(makeASensorItem(0x002C, 4, tr("X3 zero position")));// X3零位 + sensorList.append(makeASensorItem(0x002C, 5, tr("Y3 zero position")));// Y3零位 + sensorList.append(makeASensorItem(0x002C, 6, tr("X4 zero position")));// X4零位 + sensorList.append(makeASensorItem(0x002C, 7, tr("Y4 zero position")));// Y4零位 + + sensorList.append(makeASensorItem(0x002E, 4, tr("X3 limit -")));//X3限位- + sensorList.append(makeASensorItem(0x002E, 5, tr("Y3 limit -")));//Y3限位- + sensorList.append(makeASensorItem(0x002E, 6, tr("X4 limit -")));//X4限位- + sensorList.append(makeASensorItem(0x002E, 7, tr("Y4 limit -")));//Y4限位- + + sensorList.append(makeASensorItem(0x002F, 4, tr("X3 limit +")));//X3限位+ + sensorList.append(makeASensorItem(0x002F, 5, tr("Y3 limit +")));//Y3限位+ + sensorList.append(makeASensorItem(0x002F, 6, tr("X4 limit +")));//X4限位+ + sensorList.append(makeASensorItem(0x002F, 7, tr("Y4 limit +")));//Y4限位+ + + sensorList.append(makeASensorItem(0x00A0, 0, tr("Spindle position detection 1")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x00A0, 1, tr("Spindle position detection 2")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x00A0, 2, tr("Spindle position detection 3")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x00A0, 3, tr("Spindle position detection 4")));//冲孔主轴零位 + } + + //将机型所需的传感器列表替换到传感器整体列表中 + 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 PunchMachineAutoPos::initErrorCodeAndStateList() +{ + m_allErrorCodeAndStateList.clear(); + + //等于冲孔机并为4头 + if(g_emMacType == MACHINE_PUNCH_DZ && g_emProductType == PRODUCT_PUNCH_FOURHEAD) + { + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_ZERO, tr("Punching spindle is not at zero position")));// 冲孔主轴不在零位 + } + //等于冲孔机并为4头end + else + { + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_ZERO, tr("Punching 1 spindle is not at zero position")));// 冲孔1主轴不在零位 + } + + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CLR_BLK, tr("Vacuum cleaner clogged")));// 吸尘器阻塞 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CLR_FULL, tr("Vacuum cleaner full")));// 吸尘器满料 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_OIL_AIR, tr("Abnormal oil pump pressure")));// 油泵压力异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH2_NOT_ZERO, tr("Punching 2 spindle is not at zero position")));// 冲孔2主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_SWND_TIMOUT, tr("Punching color change timeout")));// 冲孔换色超时 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_ND_ERR, tr("Punching needle position error")));// 冲孔针位错误 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH3_NOT_ZERO, tr("Punching 3 spindle is not at zero position")));// 冲孔3主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH4_NOT_ZERO, tr("Punching 4 spindle is not at zero position")));// 冲孔4主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_BACK, tr("Breathing valve punching cylinder is not high")));// 呼吸阀冲孔气缸不在高位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CMK_BTP, tr("Abnormality on the punching hole of the breathing valve")));// 呼吸阀冲孔上异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CMK_BBP, tr("Abnormal under the breathing valve punching")));// 呼吸阀冲孔下异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_CMK_BPB, tr("Abnormal expansion and contraction of the stopper under the punching valve of the breathing valve")));// 呼吸阀冲孔下挡块伸缩异常 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH2_NOT_ZERO, tr("Punching 2 spindle is not at zero position")));// 冲孔2主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH2_NOT_ZERO, tr("Punching 2 spindle is not at zero position")));// 冲孔2主轴不在零位 +} + diff --git a/mctype/patternsingleboard/function/punchmachineAutoPos.h.autosave b/mctype/patternsingleboard/function/punchmachineAutoPos.h.autosave new file mode 100644 index 0000000..446d2e1 --- /dev/null +++ b/mctype/patternsingleboard/function/punchmachineAutoPos.h.autosave @@ -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 diff --git a/mctype/patternsingleboard/function/punchsewembmachine.cpp b/mctype/patternsingleboard/function/punchsewembmachine.cpp new file mode 100644 index 0000000..f4ea51c --- /dev/null +++ b/mctype/patternsingleboard/function/punchsewembmachine.cpp @@ -0,0 +1,4499 @@ +#include "punchsewembmachine.h" +//冲缝绣 +PunchSewEmbMachine::PunchSewEmbMachine() +{ + //添加各种参数到列表中 + initRootParasList(); + initRootHMIConfigurationList(m_allParasList);//超级用户界面配置 + initRootIOTConfigurationList(m_allParasList); //超级用户物联网配置 + initPatternsParasList(); + initSoftwareParasList(m_allParasList); + initTimeParasList(m_allParasList); + initPunchEmbSewCommonFunParasList(m_allParasList); + initMcParasList(); + initWkParasList(); + + //初始化控制动作列表 + initOutCtrlList(); + + //初始化快捷功能列表 + initShortCutList(); + + //初始化辅助功能列表 + initAssistList(); + + //初始化花样设置功能列表 + initPatternSetList(); + + //初始化参数设定列表 + initParaSetList(); + + //初始化传感器列表 + initSensorList(); + + //初始化错误代码和状态列表 + initErrorCodeAndStateList(); + + //初始化调试功能列表 + initDebugFunList(); +} + +PunchSewEmbMachine::~PunchSewEmbMachine() +{ + +} + +//超级用户参数(包括机器参数、工作参数) +void PunchSewEmbMachine::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)); + + //超级用户参数-删除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 PunchSewEmbMachine::initPatternsParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + //花样参数-花样设置参数-定位点x;范围-1000000--1000000,单位0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_PATTERN, + 0 , + SET_ANCHORX, 0, 0, PARA_VALUE_TYPE_INT, + tr("AnchorX"),//定位点X + 0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm + tr(""), 0, 0,0x0001, operate)); + + //花样参数-花样设置参数-定位点y;范围-1000000--1000000,单位0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_PATTERN, + 0 , + SET_ANCHORY, 0, 0, PARA_VALUE_TYPE_INT, + tr("AnchorY"),//定位点Y + 0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm + tr(""), 0, 0,0x0002, 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,0x0003, 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("startrY"),//起始点Y + 0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm + tr(""), 0, 0,0x0004, operate)); + + //花样参数-花样设置参数-连续动框补偿;单位:无,范围0-1000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_PATTERN, + 0 , + SET_CONTINURUNCOMP, 0, 0, PARA_VALUE_TYPE_INT, + tr("Continuous motion frame compensation"),//连续动框补偿 + 0, 0, 1000, 0, 0, tr(""), tr(""),// + tr(""), 0, 0,0x0005, operate)); + + //花样参数-花样设置参数-针尖补偿;单位:mm,范围-200-200,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_PATTERN, + 0 , + SET_NEEDLETIPCOMP, 0, 0, PARA_VALUE_TYPE_INT, + tr("Needle tip compensation"),//针尖补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""),// + tr(""), 0, 0,0x0006, 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,0x0007, operate)); + + //花样参数-花样设置参数-翻转式样;单位:无 ,范围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, 0x0008, 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, 0x0009, 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, 0x000A, 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,0x000B, operate)); + //花样参数--------------------------- +} + +//主控机器参数 +void PunchSewEmbMachine::initMcParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + // 冲孔机头个数,无单位, 范围1-32,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 2, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of heads"),// 机头个数 + 1, 1, 32, 1, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0000, factory)); + + // 每头机针个数,无单位, 范围1-32,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 3, 0, 0, PARA_VALUE_TYPE_INT, + tr("sewing needles per head"),// 每头机针个数 + 1, 1, 32, 1, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0000, factory)); + + // 平绣针数,无单位, 范围1-32,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 4, 0, 0, PARA_VALUE_TYPE_INT, + tr("emb needles per head"),// 平绣针数 + 1, 1, 32, 1, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0000, factory)); + + // 冲孔针数,无单位, 范围1-32,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 5, 0, 0, PARA_VALUE_TYPE_INT, + tr("punch needles per head"),// 冲孔针数 + 1, 1, 32, 1, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0000, factory)); + + // X轴配置,无单位, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 1, 0, PARA_VALUE_TYPE_LIST, + tr("X axis configuration"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0002, factory)); + + // X轴电机驱动选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 2, 0, PARA_VALUE_TYPE_LIST, + tr("X axis motor drive selection"), + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Single motor:0;Double motor:1"),//单驱动:0;双驱动:1 + 0, 0, 0x0003, factory)); + + // X轴坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 3, 0, PARA_VALUE_TYPE_LIST, + tr("X axis coordinate system selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Positive:0;Reverse:1"),//正:0;反:1 + 1, 1, 0x0004, factory)); + + // X轴移动对象选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 4, 0, PARA_VALUE_TYPE_LIST, + tr("X axis moving object selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Head:0;Frame:1"),//机头:0;框:1 + 1, 1, 0x0005, factory)); + + // X轴零位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 5, 0, PARA_VALUE_TYPE_LIST, + tr("X axis zero sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0006, factory)); + + // X轴降速传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 6, 0, PARA_VALUE_TYPE_LIST, + tr("X axis speed reduction sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0007, factory)); + + // X轴正限位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 7, 0, PARA_VALUE_TYPE_LIST, + tr("X axis positive limit sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0008, factory)); + + // X轴负限位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 8, 0, PARA_VALUE_TYPE_LIST, + tr("X axis negative limit sensor selection"),//X轴负限位传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0009, factory)); + + // X轴零位方向选择, 范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 9, 0, PARA_VALUE_TYPE_LIST, + tr("X axis zero direction selection"),//X轴零位方向选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Negative:0;Positive:1"),//负方向:0;正方向:1 + 0, 0, 0x0010, factory)); + + // X轴传感器作用选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 10, 0, PARA_VALUE_TYPE_LIST, + tr("X axis sensor function selection"),//X轴传感器作用选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Zero separate:0;Zero and speed reduction:1"),//零分离:0;零点和减速:1 + 1, 1, 0x0011, factory)); + + // Y轴配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis configuration"),//Y轴配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0012, factory)); + + // Y轴电机驱动选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis motor drive selection"),//Y轴电机驱动选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Single motor:0;Double motor:1"),//单驱动:0;双驱动:1 + 0, 0, 0x0013, factory)); + + // Y轴坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis coordinate system selection"),//Y轴坐标系统选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Positive:0;Reverse:1"),//正:0;反:1 + 1, 1, 0x0014, factory)); + + // Y轴移动对象选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis moving object selection"),//Y轴移动对象选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Head:0;Frame:1"),//机头:0;框:1 + 1, 1, 0x0015, factory)); + + // Y轴零位传感器选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis zero sensor selection"),//Y轴零位传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0016, factory)); + + // Y轴降速传感器选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 6, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis speed reduction sensor selection"),//Y轴降速传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0017, factory)); + + // Y轴正限位传感器, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 7, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis positive limit sensor selection"),//Y轴正限位传感器 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0020, factory)); + + // Y轴负限位传感器, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 8, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis negative limit sensor selection"),//Y轴负限位传感器 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0021, factory)); + + //Y轴零位方向选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 9, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis zero direction selection"),//Y轴零位方向选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Negative:0;Positive:1"),//负方向:0;正方向:1 + 0, 0, 0x0022, factory)); + + //Y轴传感器作用选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 10, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis sensor function selection"),//Y轴传感器作用选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Zero separate:0;Zero and speed reduction:1"),//零分离:0;零点和减速:1 + 1, 1, 0x0023, factory)); + + // X2轴配置,无单位, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 1, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis configuration"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0024, factory)); + + // X2轴电机驱动选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 2, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis motor drive selection"), + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Single motor:0;Double motor:1"),//单驱动:0;双驱动:1 + 0, 0, 0x0024, factory)); + + // X2轴坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 3, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis coordinate system selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Positive:0;Reverse:1"),//正:0;反:1 + 1, 1, 0x0025, factory)); + + // X2轴移动对象选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 4, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis moving object selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Head:0;Frame:1"),//机头:0;框:1 + 1, 1, 0x0026, factory)); + + // X2轴零位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 5, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis zero sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0027, factory)); + + // X2轴降速传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 6, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis speed reduction sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0028, factory)); + + // X2轴正限位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 7, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis positive limit sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0029, factory)); + + // X2轴负限位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 8, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis negative limit sensor selection"),//X轴负限位传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x002A, factory)); + + // X2轴零位方向选择, 范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 9, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis zero direction selection"),//X轴零位方向选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Negative:0;Positive:1"),//负方向:0;正方向:1 + 0, 0, 0x002B, factory)); + + // X2轴传感器作用选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 10, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis sensor function selection"),//X轴传感器作用选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Zero separate:0;Zero and speed reduction:1"),//零分离:0;零点和减速:1 + 1, 1, 0x002C, factory)); + + // Y2轴配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis configuration"),//Y轴配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x002D, factory)); + + // Y2轴电机驱动选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis motor drive selection"),//Y轴电机驱动选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Single motor:0;Double motor:1"),//单驱动:0;双驱动:1 + 0, 0, 0x002E, factory)); + + // Y2轴坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis coordinate system selection"),//Y轴坐标系统选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Positive:0;Reverse:1"),//正:0;反:1 + 1, 1, 0x002F, factory)); + + // Y2轴移动对象选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis moving object selection"),//Y轴移动对象选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Head:0;Frame:1"),//机头:0;框:1 + 1, 1, 0x0031, factory)); + + // Y2轴零位传感器选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis zero sensor selection"),//Y轴零位传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0032, factory)); + + // Y2轴降速传感器选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 6, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis speed reduction sensor selection"),//Y轴降速传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0033, factory)); + + // Y2轴正限位传感器, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 7, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis positive limit sensor selection"),//Y轴正限位传感器 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0034, factory)); + + // Y2轴负限位传感器, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 8, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis negative limit sensor selection"),//Y轴负限位传感器 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0035, factory)); + + //Y2轴零位方向选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 9, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis zero direction selection"),//Y轴零位方向选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Negative:0;Positive:1"),//负方向:0;正方向:1 + 0, 0, 0x0036, factory)); + + //Y2轴传感器作用选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 10, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis sensor function selection"),//Y轴传感器作用选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Zero separate:0;Zero and speed reduction:1"),//零分离:0;零点和减速:1 + 1, 1, 0x0037, factory)); + + //缝纫主轴配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 14, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing spindle configuration"),//缝纫主轴配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0038, factory)); + + //针梭配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 14, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Needle shuttle configuration"),//针梭配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Needle shuttle:0;Needle shuttle separation:1"),//针穿梭:0;针梭分离:1 + 1, 1, 0x0039, factory)); + + //升降电机配置,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 15, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Lift motor configuration"),//升降电机配置 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 0, 0, 0x003A, factory)); + + //压脚电机配置,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 16, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Presser foot motor configuration"),//压脚电机配置 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 0, 0, 0x003B, factory)); + + //旋转电机配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 17, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Rotating motor configuration"),//旋转电机配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x003C, factory)); + + //旋转电机坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 17, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Rotary motor coordinate system"),//旋转电机坐标系统选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Single motor: 0 ; Double motor: 1"),//单电机:0;双电机:1 + 1, 1, 0x003D, factory)); + + //旋转电机坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 17, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Rotary motor coordinate system"),//旋转电机坐标系统选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("The coordinate system is positive: 0 ; Coordinate system is reverse: 1"),//坐标系为正:0;坐标系为负:1 + 1, 1, 0x003E, factory)); + + //旋转电机转动对象 选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 17, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Rotary motor coordinate system"),//旋转电机转动对象选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Machine head: 0 ; box: 1"),//机头:0;框:1 + 0, 0, 0x003F, factory)); + + //旋转限制 选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 17, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Rotation limit"),//旋转限制 选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Unlimited: 0 ; limited: 1"),//有限制:0;无限制:1 + 1, 1, 0x0040, factory)); + + //下剪刀驱动装置选择,范围0-4,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 18, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Lower scissors drive selection"),//下剪刀驱动装置选择 + 1, 0, 4, 1, 0, tr(""), tr(""), + tr("No lower trimming device:0;Cylinder:1;AC motor:2;Stepper motor:3;Electromagnet:4"),//无下剪线装置:0;气缸:1;交流电机:2;步进电机:3;电磁铁:4 + 1, 1, 0x0041, factory)); + + //下剪线模式选择,范围0-3,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 19, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Lower trimming mode selection"),//下剪线模式选择 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Static trimming:0;Dynamic trimming:1;Cam trimming:2;Cam respectively trimming:3"),//静态剪线:0;动态剪线:1;凸轮剪线:2;凸轮分别剪线:3 + 0, 0, 0x0042, factory)); + + //上剪刀驱动装置选择, 范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 20, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Upper scissors drive selection"),//上剪刀驱动装置选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("No Upper trimming Device:0;Cylinder:1"),//无上剪线装置:0;气缸:1 + 0, 0, 0x0043, factory)); + + //面线断线检测装置选择,范围0-2,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 21, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Upper thread break detection device selection"),//面线断线检测装置选择 + 1, 0, 2, 1, 0, tr(""), tr(""), + tr("No:0;Pick wire spring:1;Electronic isolation:2"),//无:0;拣选钢丝弹簧:1;电子隔离开关:2 + 1, 1, 0x0044, factory)); + + //底线断线检测装置选择,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 22, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Bottom line break detection device selection"),//底线断线检测装置选择 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No device: 0 ; Grating wheel: 1 ; Magnetic encoder: 2;Immediate alarm by length:3"),//无:0;光栅轮:1;磁编码器:2;按长度即时报警:3 + 0, 0, 0x0045, factory)); + + //断线检测模式选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 23, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Wire break detection mode selection"),//断线检测模式选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Direct detection:0;EXBboard detection:1"),//直接检测:0;外围板检测:1 + 0, 0, 0x0046, factory)); + + //勾面线装置选择,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 24, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Hook line device selection"),//勾面线装置选择 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No hook line device:0;Cylinder:1;Electromagnet:2"),//无勾线装置:0;气缸:1;电磁铁:2 + 0, 0, 0x0047, factory)); + + //松面线装置选择,范围0-2,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 25, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Loose line device selection"),//松面线装置选择 + 1, 0, 2, 1, 0, tr(""), tr(""), + tr("No loose wire device:0;Cylinder:1;Electromagnet:2"),//无松线装置:0;气缸:1个;电磁铁:2 + 1, 1, 0x0048, factory)); + + //拉面线装置选择,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 26, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Ramen line device selection"),//拉面线装置选择 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No ramen line device:0;Cylinder:1;Electromagnet:2"),//无拉面线装置:0;气缸:1;电磁铁:2 + 0, 0, 0x0049, factory)); + + //扣底线装置选择,范围0-2,默认2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 27, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Bottom line device selection"),//扣底线装置选择 + 2, 0, 2, 2, 0, tr(""), tr(""), + tr("No bottom line device:0;Cylinder:1;Electromagnet:2"),//无底线装置:0;气缸:1;电磁铁:2 + 2, 2, 0x004A, factory)); + + //第二松面线选择,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 28, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Second loose line device selection"),//第二松面线选择 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No loose wire device: 0 ; cylinder: 1 ; Electromagnet: 2"),//无松线装置:0;气缸:1;电磁铁:2 + 0, 0, 0x004B, factory)); + + //模板识别装置,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 29, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Template recognition device"),//模板识别装置 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No identification device: 0 ; Bar code: 1 ; Coding hole: 2"),//无识别装置:0;条形码:1;编码孔:2 + 0, 0, 0x004C, factory)); + + //旋梭面对方向,范围0-3,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 30, 0, 0, PARA_VALUE_TYPE_LIST, + tr("The hook faces the direction"),//旋梭面对方向 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Forward:0;Left:1;Right:2;Up:3"),//正:0;左:1;右:2;下:3 + 0, 0, 0x004D, factory)); + + //模板检测装置,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 31, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Template detecting device"),//旋梭面对方向 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("No detection device: 0 ; Detect: 1"),//无检测装置:0;有检测装置:1 + 0, 0, 0x004E, factory)); + + // X框传感器坐标, 范围S32_MIN--S32_MAX, 默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 50, 0, 0, PARA_VALUE_TYPE_INT, + tr("X box sensor coordinates"),//X框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 0, tr("mm"), tr(""), + tr(""), + 0, 0, 0x004F, factory)); + + // Y框传感器坐标, 范围S32_MIN--S32_MAX, 默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 51, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y box sensor coordinates"),//Y框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 0, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0050, factory)); + + //主轴停车传感器角度, 范围0-36000,默认4500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 52, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle parking sensor angle"),//主轴停车传感器角度 + 4500, 0, 36000, 4500, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0051, factory)); + +// //升降传感器坐标, 范围S32_MIN--S32_MAX, 默认0 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_POSITION, +// 53, 4, 0, PARA_VALUE_TYPE_INT, +// tr("Lift sensor coordinates"),//升降传感器坐标 +// 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), +// tr(""), +// 0, 0, 0x0052, factory)); + + //压脚传感器坐标, 范围S32_MIN--S32_MAX, 默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 54, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot sensor coordinates"),//压脚传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0053, factory)); + + //旋转传感器角度, 范围-36000-36000, 默认18000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 55, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotation sensor angle"),//旋转传感器角度 + 18000, -36000, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0054, factory)); + + //主轴勾线传感器角度, 范围0-36000,默认20200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 56, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle hook line sensor angle unit"),//主轴勾线传感器角度 + 20200, 0, 36000, 20200, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0055, repair)); + + //冲头停车角度, 范围0-36000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 57, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punch parking angle"),//冲头停车角度 + 0, 0, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0056, repair)); + + //裁刀停车角度, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 58, 0, 0, PARA_VALUE_TYPE_INT, + tr("Knife parking angle"),//裁刀停车角度 + 0, S32_MIN, S32_MAX, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0057, repair)); + + //X2框传感器坐标, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 59, 0, 0, PARA_VALUE_TYPE_INT, + tr("X2 box sensor coordinates"),//X2框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0057, factory)); + + //Y2框传感器坐标, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 60, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y2 box sensor coordinates"),//Y2框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0057, factory)); + + //拉料电机传感器坐标, 范围S32_MIN--S32_MAX,默认0 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_POSITION, +// 61, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Pull motor sensor coordinates"),//拉料电机传感器坐标 +// 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), +// tr(""), +// 0, 0, 0x0058, factory)); + + //主轴点动停车角度, 范围-36000-36000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 62, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle jog parking angle"),//主轴点动停车角度 + 0, -36000, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x005B, repair)); + + //平绣主轴停车角度, 范围0-36000,默认10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 63, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery spindle parking angle"),//平绣主轴停车角度 + 10000, 0, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x005C, repair)); + + //X可移动区域负边界, 范围S32_MIN--S32_MAX, 默认6800 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 70, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area negative boundary"),//X可移动区域负边界 + 6800, S32_MIN, S32_MAX, 6800, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x005D, factory)); + + //X可移动区域正边界, 范围S32_MIN--S32_MAX,默认207500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 71, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area positive boundary"),//X可移动区域正边界 + 207500, S32_MIN, S32_MAX, 207500, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x005E, factory)); + + //Y可移动区域负边界, 范围S32_MIN--S32_MAX,默认4500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area negative boundary"),//Y可移动区域负边界 + 4500, S32_MIN, S32_MAX, 4500, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x005F, factory)); + + //Y可移动区域正边界, 范围S32_MIN--S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area positive boundary"),//Y可移动区域正边界 + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0060, factory)); + +// //机头升降可移动上边界, 范围S32_MIN--S32_MAX,默认0 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_POSITION, +// 74, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Head lift can move the upper boundary"),//机头升降可移动上边界 +// 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), +// tr(""), +// 0, 0, 0x0061, factory)); + +// //机头升降可移动下边界, 范围S32_MIN--S32_MAX,默认0 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_POSITION, +// 75, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Head lift can move the lower boundary"),//机头升降可移动下边界 +// 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), +// tr(""), +// 0, 0, 0x0062, factory)); + + //压脚升降可移动上边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 76, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lift can move the upper boundary"),//压脚升降可移动上边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0063, factory)); + + //压脚升降可移动下边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 77, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lift can move the lower boundary"),//压脚升降可移动下边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0064, factory)); + + //电机压脚脉冲当量分子, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 78, 0, 0, PARA_VALUE_TYPE_INT, + tr("Motor presser pulse equivalent molecule"),//电机压脚脉冲当量分子 + 0, S32_MIN, S32_MAX, 0, 2, tr(""), tr(""), + tr(""), + 0, 0, 0x0065, factory)); + + //电机压脚脉冲当量分母, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 79, 0, 0, PARA_VALUE_TYPE_INT, + tr("Motor presser pulse equivalent denominator"),//电机压脚脉冲当量分母 + 0, S32_MIN, S32_MAX, 0, 2, tr(""), tr(""), + tr(""), + 0, 0, 0x0066, factory)); + + //旋转范围正向限制角度, 范围S32_MIN--S32_MAX,默认49000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 80, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotation range positive limit angle"),//旋转范围正向限制角度 + 0, S32_MIN, S32_MAX, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0067, factory)); + + //旋转范围反向限制角度, 范围S32_MIN--S32_MAX,默认-31000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 81, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotation range negative limit angle"),//旋转范围正向限制角度 + -31000, S32_MIN, S32_MAX, -31000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0068, factory)); + + //冲孔机头偏移X, 范围S32_MIN--S32_MAX,默认-20630 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 82, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching head offset X"),//冲孔机头偏移X + -20630, S32_MIN, S32_MAX, -20630, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0069, factory)); + + //冲孔机头偏移Y, 范围S32_MIN--S32_MAX,默认-30 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 83, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching head offset Y"),//冲孔机头偏移Y + -30, S32_MIN, S32_MAX, -30, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006A, factory)); + + //x可缝纫区域负边界, 范围S32_MIN--S32_MAX,默认6800 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 84, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Sewing area Negative boundary"),//x可缝纫区域负边界 + 6800, S32_MIN, S32_MAX, 6800, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006B, factory)); + + //x可缝纫区域正边界, 范围S32_MIN--S32_MAX,默认128800 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 85, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Sewing area Positive margin"),//x可缝纫区域正边界 + 128800, S32_MIN, S32_MAX, 128800, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006C, factory)); + + //y可缝纫区域负边界, 范围S32_MIN--S32_MAX,默认20300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 86, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Sewing area Negative boundary"),//y可缝纫区域负边界 + 20300, S32_MIN, S32_MAX, 20300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006D, factory)); + + //y可缝纫区域正边界, 范围S32_MIN--S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 87, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Sewing area Positive margin"),//y可缝纫区域正边界 + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006E, factory)); + + //x可冲孔区域负边界, 范围S32_MIN--S32_MAX,默认56500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 88, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Can be perforated region Negative boundary"),//x可冲孔区域负边界 + 56500, S32_MIN, S32_MAX, 56500, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006F, factory)); + + //x可冲孔区域正边界, 范围S32_MIN--S32_MAX,默认178500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 89, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Can be perforated region Positive margin"),//x可冲孔区域正边界 + 178500, S32_MIN, S32_MAX, 178500, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0070, factory)); + + //y可冲孔区域负边界, 范围S32_MIN--S32_MAX,默认20300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 90, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Can be perforated region Negative boundary"),//y可冲孔区域负边界 + 20300, S32_MIN, S32_MAX, 20300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0071, factory)); + + //y可冲孔区域正边界, 范围S32_MIN--S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 91, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Can be perforated region Positive margin"),//y可冲孔区域正边界 + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0072, factory)); + + //缝纫右机头偏移X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 92, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing right head offset X"),//缝纫右机头偏移X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0073, factory)); + + //缝纫右机头偏移Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 93, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing right head offset Y"),//缝纫右机头偏移Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0074, factory)); + + //切刀机头偏移X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 94, 0, 0, PARA_VALUE_TYPE_INT, + tr("Cutter head offset X"),//切刀机头偏移X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0075, factory)); + + //切刀机头偏移Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 95, 0, 0, PARA_VALUE_TYPE_INT, + tr("Cutter head offset Y"),//切刀机头偏移Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0075, factory)); + + //x可裁切区域负边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 96, 0, 0, PARA_VALUE_TYPE_INT, + tr("x can crop the negative boundary of the area"),//x可裁切区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0076, factory)); + + //x可裁切区域正边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 97, 0, 0, PARA_VALUE_TYPE_INT, + tr("x can crop the positive boundary of the area"),//x可裁切区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0077, factory)); + + //y可裁切区域负边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 98, 0, 0, PARA_VALUE_TYPE_INT, + tr("y can crop the negative boundary of the area"),//x可裁切区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0078, factory)); + + //y可裁切区域正边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 99, 0, 0, PARA_VALUE_TYPE_INT, + tr("y can crop the positive boundary of the area"),//x可裁切区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0079, factory)); + + //xy启动停止速度, 范围1-100,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 100, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY start stop speed"),//xy启动停止速度 + 10, 1, 100, 10, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x007B, factory)); + + //xy归零运行速度, 范围1-100,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 101, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY zero running speed"),//xy归零运行速度 + 100, 1, 100, 100, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x007C, factory)); + + //xy空走运行速度, 范围1-1000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 102, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY Idling speed"),//xy空走运行速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x007D, factory)); + + //xy行走加速度, 范围1-10000,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 103, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY walking acceleration"),//xy行走加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x007E, factory)); + + //xy刹车加速度, 范围1-10000,默认10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 104, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY brake acceleration"),//xy刹车加速度 + 10000, 1, 10000, 10000, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x007F, factory)); + + //xy手动移动速度1, 范围1-1000,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 105, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 1"),//xy手动移动速度1 + 10, 1, 1000, 10, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0080, factory)); + + //xy手动移动速度2, 范围1-1000,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 106, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 2"),//xy手动移动速度2 + 100, 1, 1000, 100, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0081, factory)); + + //xy手动移动速度3, 范围1-1000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 107, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 3"),//xy手动移动速度3 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0082, factory)); + + //xy最高移动速度, 范围1-1000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 108, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY maximum moving speed"),//xy最高移动速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0083, factory)); + + //主轴启动停止转速, 范围1-300,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 109, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle start stop speed"),//主轴启动停止转速 + 100, 1, 300, 100, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0084, factory)); + + //主轴归零转速, 范围1-3000,默认120 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 110, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle zero return speed"),//主轴归零转速 + 120, 1, 3000, 120, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0085, factory)); + + //主轴运转转速, 范围1-3000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 111, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle running speed"),//主轴运转转速 + 300, 1, 3000, 300, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0086, factory)); + + //主轴运转加速度, 范围1-100,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 112, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle running acceleration"),//主轴运转加速度 + 50, 1, 100, 50, 0, tr("r/ss"), tr(""), + tr(""), + 0, 0, 0x0087, factory)); + + //主轴刹车加速度, 范围1-100,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 113, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle brakes acceleration"),//主轴刹车加速度 + 100, 1, 100, 100, 0, tr("r/ss"), tr(""), + tr(""), + 0, 0, 0x0088, factory)); + + //主轴缝纫最高转速, 范围1-3000,默认1200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 114, 0, 0, PARA_VALUE_TYPE_INT, + tr("sewing maximum speed"),//主轴缝纫最高转速 + 1200, 1, 3000, 1200, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0089, factory)); + + //机头升降起停速度, 范围1-250,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 115, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift start end speed"),//机头升降起停速度 + 10, 1, 250, 10, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x008A, factory)); + + //机头升降归零速度, 范围1-250,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 116, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift and zero speed"),//机头升降归零速度 + 50, 1, 250, 50, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x008B, factory)); + + //机头升降行走速度, 范围1-250,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 117, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift walk speed"),//机头升降行走速度 + 200, 1, 250, 200, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x008C, factory)); + + //机头升降行走加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 118, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift acceleration"),//机头升降行走加速度 + 500, 1, 10000, 500, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x008D, factory)); + + //机头升降刹车加速度, 范围1-10000,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 119, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head movements brake acceleration"),//机头升降刹车加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x008E, factory)); + + //压脚升降起停速度, 范围1-100,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 120, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift start end speed"),//压脚升降起停速度 + 10, 1, 100, 10, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x008F, factory)); + + //压脚升降归零速度, 范围1-100,默认30 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 121, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lift zero speed"),//压脚升降归零速度 + 30, 1, 100, 30, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0090, factory)); + + //压脚升降行走速度, 范围1-100,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 122, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lifting speed"),//压脚升降行走速度 + 100, 1, 100, 100, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0091, factory)); + + //压脚升降行走加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 123, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lifting acceleration"),//压脚升降行走加速度 + 500, 1, 10000, 500, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x0092, factory)); + + //压脚升降刹车加速度, 范围1-10000,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 124, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lift brake acceleration"),//压脚升降刹车加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x0093, factory)); + + //机头旋转启动停止速度, 范围1-720,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 125, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation start stop speed"),//机头旋转启动停止速度 + 10, 1, 720, 10, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x0094, factory)); + + //机头旋转归零速度, 范围1-720,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 126, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation zero return speed"),//机头旋转归零速度 + 50, 1, 720, 50, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x0095, factory)); + + //机头旋转运转速度, 范围1-720,默认360 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 127, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation speed"),//机头旋转运转速度 + 360, 1, 720, 360, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x0096, factory)); + + //机头旋转运动加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 128, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation acceleration"),//机头旋转运动加速度 + 500, 1, 10000, 500, 0, tr("deg/s2"), tr(""), + tr(""), + 0, 0, 0x0097, factory)); + + //机头旋转刹车加速度, 范围1-10000,默认5000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 129, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation brake acceleration"),//机头旋转刹车加速度 + 5000, 1, 10000, 5000, 0, tr("deg/s2"), tr(""), + tr(""), + 0, 0, 0x0098, factory)); + + //机头旋转最高速度, 范围1-720,默认720 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 130, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation maximum speed"),//机头旋转最高速度 + 720, 1, 720, 720, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x0099, factory)); + +// //最小画笔绘画速度, 范围1-100,默认10 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_SPEED, +// 131, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Minimum brush painting speed"),//最小画笔绘画速度 +// 10, 1, 100, 10, 0, tr("mm/s"), tr(""), +// tr(""), +// 0, 0, 0x009A, factory)); + +// //最大画笔绘画速度, 范围1-1200,默认1000 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_SPEED, +// 132, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Maximum brush painting speed"),//最大画笔绘画速度 +// 1000, 1, 1200, 1000, 0, tr("mm/s"), tr(""), +// tr(""), +// 0, 0, 0x009B, factory)); + +// //画笔绘画加速度, 范围1-4000,默认500 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_SPEED, +// 133, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Brush painting acceleration"),//画笔绘画加速度 +// 500, 1, 4000, 500, 0, tr("mm/s2"), tr(""), +// tr(""), +// 0, 0, 0x009C, factory)); + +// //画笔绘画降速最小偏差角度, 范围1-18000,默认3000 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_ACTION, +// 134, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Brush painting slowdown minimum deviation angle"),//画笔绘画降速最小偏差角度 +// 3000, 1, 18000, 3000, 0, cod->toUnicode("°"), tr(""), +// tr(""), +// 0, 0, 0x009D, factory)); + + //左上料点x, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 135, 0, 0, PARA_VALUE_TYPE_INT, + tr("Left loading point X"),//左上料点x + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x009E, factory)); + + //左上料点y, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 136, 0, 0, PARA_VALUE_TYPE_INT, + tr("Left loading point Y"),//左上料点y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x009F, factory)); + + //右上料点x, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 137, 0, 0, PARA_VALUE_TYPE_INT, + tr("Right loading point X"),//右上料点x + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00A0, factory)); + + //右上料点y, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 138, 0, 0, PARA_VALUE_TYPE_INT, + tr("Right loading point Y"),//右上料点y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00A1, factory)); + + //模板框宽度, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 139, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template box width"),//模板框宽度 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00A2, factory)); + + //模板框启停速度, 范围1-100,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 140, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template frame start and stop speed"),//模板框启停速度 + 10, 1, 100, 10, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x00A3, factory)); + + //模板框行走速度, 范围1-500,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 141, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template frame waking speed"),//模板框行走速度 + 100, 1, 500, 100, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x00A4, factory)); + + //模板框行走加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 142, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template frame waking acceleration"),//模板框行走加速度 + 500, 1, 10000, 500, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x00A5, factory)); + + //模板框刹车加速度, 范围1-10000,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 143, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template frame brake acceleration"),//模板框刹车加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x00A6, factory)); + + //上机头旋转归零补偿角度, 范围-1000-1000,默认342 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 144, 0, 0, PARA_VALUE_TYPE_INT, + tr("Compensation angle of upper machine head rotation return to zero"),//上机头旋转归零补偿角度 + 342, -1000, 1000, 342, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x00A7, factory)); + + //下机头旋转归零补偿角度, 范围-1000-1000,默认385 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 145, 0, 0, PARA_VALUE_TYPE_INT, + tr("Compensation angle of lower machine head rotation return to zero"),//下机头旋转归零补偿角度 + 385, -1000, 1000, 385, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x00A8, factory)); + + //主轴归零补偿角度, 范围-1000--1000,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 146, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle zero compensation angle"),//主轴归零补偿角度 + 200, -1000, 1000, 200, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x00A9, factory)); + + //平绣机头偏移x, 范围S32_MIN-S32_MAX,默认80000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 150, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery head offset X"),//平绣机头偏移x + 80000, S32_MIN, S32_MAX, 80000, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AA, factory)); + + //平绣机头偏移y, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 151, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery head offset Y"),//平绣机头偏移y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AB, factory)); + + //平绣x可绣花区域正边界(X-), 范围S32_MIN-S32_MAX,默认85600 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 152, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery X area negative boundary"),//平绣x可绣花区域正边界(X-) + 85600, S32_MIN, S32_MAX, 85600, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AC, factory)); + + + //平绣x可绣花区域正边界(X+), 范围S32_MIN-S32_MAX,默认207500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 153, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery X area positive boundary"),//平绣x可绣花区域正边界(X+) + 207500, S32_MIN, S32_MAX, 207500, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AD, factory)); + + //平绣Y可绣花区域负边界(Y-), 范围S32_MIN-S32_MAX,默认20300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 154, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery X area positive boundary"),//平绣Y可绣花区域负边界(Y-) + 20300, S32_MIN, S32_MAX, 20300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AE, factory)); + + //平绣Y可绣花区域负边界(Y+), 范围S32_MIN-S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 155, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery X area positive boundary"),//平绣Y可绣花区域负边界(Y-) + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AF, factory)); + + //冲孔旋转启动速度, 范围1-720,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 156, 0, 0, PARA_VALUE_TYPE_INT, + tr("Start speed of punching rotation"),//冲孔旋转启动速度 + 10, 1, 720, 10, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x00B0, factory)); + + //冲孔旋转归零速度, 范围1-720,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 157, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punch rotation zero speed"),//冲孔旋转归零速度 + 50, 1, 720, 50, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x00B1, factory)); + + //冲孔旋转运转速度, 范围1-720,默认360 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 158, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotating speed of punch"),//冲孔旋转运转速度 + 360, 1, 720, 360, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x00B2, factory)); + + //冲孔旋转运转加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 159, 0, 0, PARA_VALUE_TYPE_INT, + tr("Acceleration of ram punch"),//冲孔旋转运转加速度 + 500, 1, 10000, 500, 0, tr("deg/s2"), tr(""), + tr(""), + 0, 0, 0x00B3, factory)); + + //冲孔旋转刹车加速度, 范围1-10000,默认5000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 160, 0, 0, PARA_VALUE_TYPE_INT, + tr("Ram punch rotation brake acceleration"),//冲孔旋转刹车加速度 + 5000, 1, 10000, 5000, 0, tr("deg/s2"), tr(""), + tr(""), + 0, 0, 0x00B4, factory)); + + //冲孔旋转最高速度, 范围1-3600,默认720 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 161, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotating speed of punch"),//冲孔旋转最高速度 + 720, 1, 3600, 720, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x00B5, factory)); + + //X间隙补偿, 范围-200-200,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("X gap compensation"),//X间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BC, repair)); + + //Y间隙补偿, 范围-200-200,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y gap compensation"),//Y间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BD, repair)); + + //画笔偏移X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 200, 0, 0, PARA_VALUE_TYPE_INT, + tr("Brush offset X"),//画笔偏移X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BE, factory)); + + //画笔偏移Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 201, 0, 0, PARA_VALUE_TYPE_INT, + tr("Brush offset Y"),//画笔偏移Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BF, factory)); + + //压枣偏移X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 202, 0, 0, PARA_VALUE_TYPE_INT, + tr("Track offset X"),//压枣偏移X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C0, factory)); + + //压枣偏移Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 203, 0, 0, PARA_VALUE_TYPE_INT, + tr("Track offset Y"),//压枣偏移Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C1, factory)); + + //左上料点X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 208, 0, 0, PARA_VALUE_TYPE_INT, + tr("Left loading point X"),//左上料点X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C2, factory)); + + //左上料点Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 209, 0, 0, PARA_VALUE_TYPE_INT, + tr("Left loading point Y"),//左上料点Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C3, factory)); + + //右上料点X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 210, 0, 0, PARA_VALUE_TYPE_INT, + tr("Right loading point X"),//右上料点X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C4, factory)); + + //右上料点Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 211, 0, 0, PARA_VALUE_TYPE_INT, + tr("Right loading point Y"),//右上料点Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C5, factory)); + + //模板框宽度, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 212, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template box width"),//模板框宽度 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C6, factory)); + +} + +//主控工作参数 +void PunchSewEmbMachine::initWkParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + // 缝纫工作转速, 范围 1--2000,单位r/min,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_SPEED, + 0, 0, 0, PARA_VALUE_TYPE_INT, + tr("sewing work speed"),// 缝纫工作转速 + 1000, 1, 2000, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0100, repair)); + + // 主轴剪线转速, 范围 1--500,单位r/min,默认120 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 1, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle Cut line speed"),// 主轴剪线转速 + 120, 1, 500, 120, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0101, repair)); + + // 主轴回针转速, 范围 1--500,单位r/min,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 2, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle Back needle speed"),// 主轴回针转速 + 200, 1, 500, 200, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0102, repair)); + + // 主轴启动慢动转速, 范围 1--500,单位r/min,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 3, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle start slow speed"),// 主轴启动慢动转速 + 200, 1, 500, 200, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0103, repair)); + + // 倒车等效主轴转速, 范围 1--3000,单位r/min,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 4, 0, 0, PARA_VALUE_TYPE_INT, + tr("Reverse equivalent spindle speed"),// 倒车等效主轴转速 + 1000, 1, 3000, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0104, repair)); + + // 缝纫动框方式, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 5, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing moving frame"),// 缝纫动框方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Continuous:0;Intermittent:1"), 0, 0, 0x0105, repair));//连续:0;间歇式:1 + + // 缝纫加减速方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 5, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing acceleration and deceleration mode"),// 缝纫加减速方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No acceleration or deceleration:0;Xy sine acceleration and deceleration:1"), //无加速或减速:0;Xy正弦加速度和减速度:1 + 1, 1, 0x0106, repair)); + + // 缝纫机头旋转方式, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 5, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing machine head rotating manner"),// 缝纫机头旋转方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Continuous rotation:0;Xy intermittent rotation:1"),//连续旋转:0;Xy间歇旋转:1 + 0, 0, 0x0107, repair)); + + // 缝纫机头加减速方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 5, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing head deceleration mode"),// 缝纫机头加减速方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No acceleration or deceleration:0;Intermittent acceleration and deceleration:1"), //无加速或减速:0;间歇加减速:1 + 1, 1, 0x0108, repair));//无加速或减速:0;间歇加减速:1 + + // 缝纫动框起始角度, 范围 0--36000,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 6, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing movable frame starting angle"),// 缝纫动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0109, repair)); + + // 缝纫动框持续角度, 范围 0--36000,默认 15000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 7, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing movable frame duration angle"),// 缝纫动框持续角度 + 15000, 0, 36000, 15000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x010A, repair)); + + // 起针慢动针数, 范围 0--10,默认 3 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 8, 0, 0, PARA_VALUE_TYPE_INT, + tr("Start low speed needls"),// 起针慢动针数 + 3, 0, 10, 3, 0, tr("Needles"), tr(""), + tr(""), 0, 0, 0x010B, repair)); + + // 起针动作松线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 9, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Needle action loose line allowed"),// 起针动作松线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x010C, operate)); + + // 起针动作顶线允许 0, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 9, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Needle action top line allowed"),// 起针动作顶线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x010D, operate)); + + // 起针动作夹线允许 0, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 9, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Needle action clamp line allowed"),// 起针动作夹线允许 0 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x010E, operate)); + + // 绣花起针夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 9, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Allow to embroider line allowed"),// 绣花起针夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0110, operate)); + + // 剪线允许, 范围 0--2,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 10, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Cut lines allow"),// 剪线允许 + 1, 0, 2, 1, 0, tr(""), tr(""), + tr("Do not trim: 0;Automatic thread trim:1;Data trim:2"),//不剪线:0;自动剪线:1;数据剪线:2 + 1, 1, 0x0111, operate)); + + // 剪线分线角度, 范围 0--36000,默认 20000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 11, 0, 0, PARA_VALUE_TYPE_INT, + tr("Trimming line angle"),// 剪线分线角度 + 20000, 0, 36000, 20000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0112, repair)); + + // 剪线完成角度, 范围 0--36000,默认 6000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 12, 0, 0, PARA_VALUE_TYPE_INT, + tr("Trimming completion angle"),// 剪线完成角度 + 6000, 0, 36000, 6000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0113, repair)); + + // 剪线时动作松线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Action loosening when thread trimming"),// 剪线时动作松线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0114, operate)); + + // 剪线时动作拉线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Action wire pull when thread trimming"),// 剪线时动作拉线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0115, operate)); + + // 剪线时动作夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Action clip line allows when trimming"),// 剪线时动作夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作提升压脚允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 4, 0, PARA_VALUE_TYPE_LIST, + tr("The action of lifting the presser foot during thread cutting is allowed"),// 剪线时动作提升压脚允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作提升机头剪线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 5, 0, PARA_VALUE_TYPE_LIST, + tr("The action of lifting the machine head during thread cutting allows for thread cutting"),// 剪线时动作提升机头剪线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作提升机头夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 6, 0, PARA_VALUE_TYPE_LIST, + tr("The action of lifting the machine head during thread cutting allows for thread clamping"),// 剪线时动作提升机头夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作在压脚下勾线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 7, 0, PARA_VALUE_TYPE_LIST, + tr("When cutting the thread, the action is allowed to hook the thread under the pressure foot"),// 剪线时动作在压脚下勾线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 断线检测针数, 范围 0--10,默认 3 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_DETECT, + 14, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of broken wires"),// 断线检测针数 + 3, 0, 10, 3, 0, tr("Needles"), tr(""), + tr(""), 0, 0, 0x0117, operate)); + + // 断线检测主轴角度, 范围 0--36000,默认 3000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 15, 0, 0, PARA_VALUE_TYPE_INT, + tr("Broken line detection spindle angle"),// 断线检测主轴角度 + 3000, 0, 36000, 3000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0118, repair)); + + // 换梭芯提醒功能, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_DETECT, + 16, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Change bobbin Reminder function"),// 换梭芯提醒功能 + 0, 0, 3, 0, 0, tr(""), tr(""), //未启用:0;按长度划分的延迟提醒:1;按切片数计数:2;按长度立即提醒:3 + tr("Not:0;Delay reminder by length:1;Count by number of slices:2;Immediately reminder by length:3"), + 0, 0, 0x0119, operate)); + + // 底线长度, 范围 0--S32_MAX,默认 10000000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_DETECT, + 17, 0, 0, PARA_VALUE_TYPE_INT, + tr("Bottom line length"),// 底线长度 + 10000000, 0, S32_MAX, 10000000, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x011A, operate)); + + // 每针底线修正量, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 18, 0, 0, PARA_VALUE_TYPE_INT, + tr("Bottom line correction per stitch"),// 每针底线修正量 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x011B, operate)); + + // 换梭片数计数, 范围 0--1000,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_DETECT, + 19, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of shuttles"),// 换梭片数计数 + 0, 0, 1000, 0, 0, tr("times"), tr(""), + tr(""), 0, 0, 0x011C, operate)); + + // 加油方式选择, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 20, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Refueling method selection"),// 加油方式选择 + 0, 0, 3, 0, 0, tr(""), tr(""),//不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + tr("No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3"), + 0, 0, 0x011D, operate)); + + // 加油针数间隔, 范围 S32_MIN--S32_MAX,默认 10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 21, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling needles interval"),// 加油针数间隔 + 10000, S32_MIN, S32_MAX, 10000, 0, tr("Needles"), tr(""), + tr(""), 0, 0, 0x011E, operate)); + + // 加油时间间隔, 范围 1--S32_MAX,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 22, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling time interval"),// 加油时间间隔 + 1, 1, S32_MAX, 1, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x011F, operate)); + + // 加油持续时长, 范围 1--S32_MAX,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 23, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling duration"),// 加油持续时长 + 1, 1, S32_MAX, 1, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x0120, operate)); + + // 完成后停车位置选择, 范围 0--4,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 24, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Parking position selection after completion"),// 完成后停车位置选择 + 0, 0, 4, 0, 0, tr(""), tr(""), + tr("Current:0;Starting:1;Anchor:2;Feeding:3;Offset:4"),//当前点:0;起始点:1;定位点:2;上料点:3;偏移点:4 + 0, 0, 0x0121, operate)); + + // 偏移点坐标有效标志, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 25, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Offset point coordinate valid flag"),// 偏移点坐标有效标志 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Invalid:0;X is valid:1;Y is valid:2;XY is valid:3"),//无效:0;X有效:1;Y有效:2;XY同时有效:3 + 0, 0, 0x0122, operate)); + + // 偏移点坐标X, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 26, 0, 0, PARA_VALUE_TYPE_INT, + tr("Offset point coordinate X"),// 偏移点坐标X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0123, operate)); + + // 偏移点坐标Y, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 27, 0, 0, PARA_VALUE_TYPE_INT, + tr("Offset point coordinate Y"),// 偏移点坐标Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0124, operate)); + + // 穿线点坐标有效标志, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 28, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Threading point coordinate effective mark"),// 穿线点坐标有效标志 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Invalid:0;X is valid:1;Y is valid:2;XY is valid:3"),//无效:0;X有效:1;Y有效:2;XY同时有效:3 + 0, 0, 0x0125, operate)); + + // 穿线点坐标X, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 29, 0, 0, PARA_VALUE_TYPE_INT, + tr("Threading point coordinates X"),// 穿线点坐标X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0126, operate)); + + // 穿线点坐标 Y, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 30, 0, 0, PARA_VALUE_TYPE_INT, + tr("Threading point coordinates Y"),// 穿线点坐标Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0127, operate)); + + // 机头升降低位高度, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 31, 0, 0, PARA_VALUE_TYPE_INT, + tr("Machine head low position"),// 机头升降低位高度 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0128, repair)); + + // 机头升降高位高度, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 32, 0, 0, PARA_VALUE_TYPE_INT, + tr("Machine head heigh position"),// 机头升降高位高度 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0129, repair)); + + // 产量预设, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK, + 33, 0, 0, PARA_VALUE_TYPE_INT, + tr("Production preset"),// 产量预设 + 0, 0, S32_MAX, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x012A, operate)); + + // 照明亮度, 范围 0--255,默认 128 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 34, 0, 0, PARA_VALUE_TYPE_INT, + tr("Illumination brightness"),// 照明亮度 + 128, 0, 255, 128, 0, tr(""), tr(""), + tr(""), 0, 0, 0x012B, operate)); + + // 气框关闭后延时, 范围 0--2000,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 35, 0, 0, PARA_VALUE_TYPE_INT, + tr("Delay after the air frame is closed"),// 气框关闭后延时 + 500, 0, 2000, 500, 0, tr(""), tr(""), + tr(""), 0, 0, 0x012C, operate)); + + // 缝纫加速度, 范围 1--100,默认 5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 36, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing acceleration"),// 缝纫加速度 + 5, 1, 100, 5, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x012D, repair)); + + // 剪线动框位移, 范围 1--1000,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 37, 0, 0, PARA_VALUE_TYPE_INT, + tr("Trimming frame displacement"),// 剪线动框位移 + 500, 1, 1000, 500, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x012E, operate)); + + // 缝纫吹气允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 38, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing blow allowed"),// 缝纫吹气允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, operate)); + + // 摆针允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 38, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing the needle allowed"),// 摆针允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, operate)); + + // 自动回穿线点允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 38, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic loopback point allowed"),// 自动回穿点允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, operate)); + + // 机头旋转允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 38, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing head rotation allowed"),// 机头旋转允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, repair)); + + // 送边条允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 38, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Send sidebar allowed"),// 送边条允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, operate)); + + // 冲孔吹气允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 39, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Punching blow allowed"),// 冲孔吹气允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0130, operate)); + + // 吸尘器关闭延时, 范围 0--120,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 40, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner off delay"),// 吸尘器关闭延时 + 0, 0, 120, 0, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x0131, operate)); + + // 冲孔主轴转速, 范围 1--1200,默认 1200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_SPEED, + 41, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle speed"),// 冲孔主轴转速 + 1200, 1, 1200, 1200, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0132, operate)); + + // 冲孔加速度, 范围 1--100,默认 20 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 42, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching acceleration"),// 冲孔加速度 + 20, 1, 100, 20, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0133, operate)); + + // 冲孔动框方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 43, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Punching movable frame mode"),// 冲孔动框方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("AContinuous:0;BIntermittent:1"), 1, 1, 0x0134, repair));//连续式:0;间歇式:1 + + // 冲孔加减速方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 43, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Punching acceleration and deceleration mode"),// 冲孔加减速方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No acceleration or deceleration:0;XY sine acceleration and deceleration:1"), 1, 1, 0x0135, repair));//无加速或减速:0;XY正弦加速度和减速度:1 + + // 冲孔动框起始角度, 范围 0--36000,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 44, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching frame starting angle"),// 冲孔动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0136, repair)); + + // 冲孔动框持续角度, 范围 0--36000,默认 15000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 45, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching frame continuous angle"),// 冲孔动框持续角度 + 15000, 0, 36000, 15000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0137, repair)); + + // 缝纫间越框机头升降, 范围 0--max,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 46, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing move head up down"),// 缝纫间越框机头升降 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0138, operate)); + + // 冲孔间越框机头升降, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 47, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Punching move head up down"),// 冲孔间越框机头升降 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0139, operate)); + + // 移框松线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 48, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Moving basket Loose line"),// 移框松线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013A, operate)); + + // 移框夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 48, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Moving basket Clamp line"),// 移框夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013B, operate)); + + // 软件限位XY移动允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit XY move allowed"),// 软件限位XY移动允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013C, factory)); + + // 软件限位缝纫头升降允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit sewing head lifting allowed"),// 软件限位缝纫头升降允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013D, factory)); + + // 软件限位冲孔头升降允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit punch head lifting allowed"),// 软件限位冲孔头升降允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013E, factory)); + + // 软件限位裁刀机头升降允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit cutter head lift allowed"),// 软件限位裁刀机头升降允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0140, factory)); + + // 软件限位冲孔落杆限制允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit Punch drop allowed"),// 软件限位冲孔落杆限制允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0141, factory)); + + // 软件限位绣花落杆限制允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 6, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit embroidery falling pole allowed"),// 软件限位绣花落杆限制允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0142, factory)); + + // 换梭旋转机头角度, 范围 0--36000,默认 18000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 50, 0, 0, PARA_VALUE_TYPE_INT, + tr("Shuttle rotation angle"),// 换梭旋转机头角度 + 18000, 0, 36000, 18000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0143, factory)); + + // 旋转持续角度, 范围 0--36000,默认 36000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 51, 0, 0, PARA_VALUE_TYPE_INT, + tr("Shuttle rotation angle"),// 旋转持续角度 + 36000, 0, 36000, 36000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0144, operate)); + + // 面线勾线针数, 范围 0--5,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 52, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of needle hooks"),// 面线勾线针数 + 1, 0, 5, 1, 0, tr("needle"), tr(""), + tr(""), 0, 0, 0x0145, operate)); + + // 缝纫工作时压脚高度, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 53, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot height during sewing work"),// 缝纫工作时压脚高度 + 0, 0, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0146, repair)); + + // 模拟工作时机头高度, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 54, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head height during simulated work"),// 模拟工作时机头高度 + 0, 0, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0147, repair)); + + // 切刀工作转速, 范围 1--3000,默认 1200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_SPEED, + 55, 0, 0, PARA_VALUE_TYPE_INT, + tr("Cutter working speed"),// 切刀工作转速 + 1200, 1, 3000, 1200, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0148, operate)); + + // 切刀加速度, 范围 1--100,默认 30 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 56, 0, 0, PARA_VALUE_TYPE_INT, + tr("Cutter acceleration"),// 切刀加速度 + 30, 1, 100, 30, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x0148, operate)); + + // 剪线动框方向, 范围 0--4,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 57, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Trimming frame direction"),// 剪线动框方向 + 0, 0, 4, 0, 0, tr(""), tr(""), + tr("Stop:0;Left:1;Forward:2;Right:3;Backward:4"),// 禁止移动:0;左:1;前:2;右:3;后:4 + 0, 0, 0x014A, repair)); + + // 压枣升降行程, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 58, 0, 0, PARA_VALUE_TYPE_INT, + tr("track formed up and down"),// 压枣升降行程 + 0, 0, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x014B, repair)); + + // 主轴拐角转速, 范围 1--3000,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 59, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle corner speed"),// 主轴拐角转速 + 1000, 1, 3000, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x014C, operate)); + + // 降速最小偏差角度, 范围 0--180,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 60, 0, 0, PARA_VALUE_TYPE_INT, + tr("Minimum speed deviation angle"),// 降速最小偏差角度 + 0, 0, 180, 0, 0, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x014D, operate)); + + // 提前降速针步, 范围 0--10,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 61, 0, 0, PARA_VALUE_TYPE_INT, + tr("Slow down the needle step in advance"),// 提前降速针步 + 0, 0, 10, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x014E, operate)); + + // 延迟提速针步, 范围 0--10,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 62, 0, 0, PARA_VALUE_TYPE_INT, + tr("Delay speed up needle step"),// 延迟提速针步 + 0, 0, 10, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x014F, operate)); + + // 冲孔旋转减速最小偏差角度, 范围 0--180,默认 90 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 63, 0, 0, PARA_VALUE_TYPE_INT, + tr("Minimum deviation angle of punching rotation deceleration"),// 冲孔旋转减速最小偏差角度 + 90, 0, 180, 90, 0, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0150, operate)); + + // 冲孔旋转持续角度, 范围 0--36000,默认 22000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 64, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punch rotation duration angle"),// 冲孔旋转持续角度 + 22000, 0, 36000, 22000, 0, cod->toUnicode("°"), tr(""), + tr(""), 22000, 22000, 0x0151, operate)); + + // 缝纫机头工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 65, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Working permission of sewing machine head"),// 缝纫机头工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0152, operate)); + + // 冲孔机头工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 65, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Work permit of punch head"),// 冲孔机头工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0153, operate)); + + // 绣花机头工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 65, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Embroidery machine head work permit"),// 绣花机头工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0154, operate)); + + // 开机自动找零开启, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 67, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Auto Zero after power on"),// 绣花机头工作允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0155, repair)); + + // 冲头旋转控制1, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 1"),// 冲头旋转控制1 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0156, repair)); + + // 冲头旋转控制2, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 2"),// 冲头旋转控制2 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0157, repair)); + + // 冲头旋转控制3, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 3"),// 冲头旋转控制3 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0158, repair)); + + // 冲头旋转控制4, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 4"),// 冲头旋转控制4 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0159, repair)); + + // 冲头旋转控制5, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 5"),// 冲头旋转控制5 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x015A, repair)); + + // 冲头旋转控制6, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 6, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 6"),// 冲头旋转控制6 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x015B, repair)); + + // 换色启动方式,0,自动换色,自动启动;1,自动换色,手动启动;2,手动换色,手动启动 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 71, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Color change start method"),//换色启动方式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2"), + 0, 0, 0x015C, operate)); + + // X绣框换向补偿, 范围 -100--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("X frame commutation compensation"),// X绣框换向补偿 + 0, -100, 100, 0, 0, tr("mm"), tr(""), + tr(""), 0, 0, 0x015D, repair)); + + // Y绣框换向补偿, 范围 -100--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y frame commutation compensation"),// Y绣框换向补偿 + 0, -100, 100, 0, 0, tr("mm"), tr(""), + tr(""), 0, 0, 0x015F, repair)); + + // 平绣补绣方式, 范围 0--2,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 74, 0, 0, PARA_VALUE_TYPE_LIST, + tr("The way of mending flat embroidery"),// 平绣补绣方式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("mending emb off: 0 ; mending emb by hand: 1 ; mending emb auto: 2"), //补绣关闭:0;手动:1;自动:2 + 0, 0, 0x0160, operate)); + + // 锁针次数, 范围 0--5,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 75, 0, 0, PARA_VALUE_TYPE_INT, + tr("Locking times"),// 锁针次数 + 0, 0, 5, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0161, operate)); + + // 锁针步数, 范围 0--5,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 76, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of needle locking steps"),// 锁针步数 + 0, 0, 5, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0162, operate)); + + // 锁针针步长度, 范围 0--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 77, 0, 0, PARA_VALUE_TYPE_INT, + tr("Length of lock needle"),// 锁针针步长度 + 0, 0, 100, 0, 0, tr("mm"), tr(""), + tr(""), 0, 0, 0x0163, operate)); + + // 开始工作模式, 0,从停车点开始;1,从当前位置开始,不保存;2,从当前位置开始,保存 , 默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 78, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Start working position mode"),// 锁针针步长度 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("From the Stop lot: 0 ; From the current location, do not save: 1 ; From the current location, save: 2"), + 0, 0, 0x0164, operate)); + + // 冲孔跳针变越框针数 ,范围0-100,单位,针,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 79, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching jump stitches to change the number of stitches beyond the frame"),// 冲孔跳针变越框针数 + 5, 0, 100, 5, 0, tr("Needles"), tr(""), + tr(""), 0, 0, 0x0165, repair)); + + // 冲孔点动模式, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 80, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Punching jog mode"),// 冲孔点动模式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Lock rotate:0;rotate Lock:1"), 0, 0, 0x0161, repair));//0,先锁头,再旋转;1,先旋转,再锁头 + + // 倒车工作模式, 范围 0--2,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 81, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Reverse operation mode"),// 倒车工作模式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("normal:0;click:1;continue click:2"), 0, 0, 0x0162, repair));//0,普通模式;1,点动模式;2,持续点动模式 + + // 特殊针位选择, 范围 0--9,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 82, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle choose"),// 特殊针位选择 + 0, 0, 9, 0, 0, tr(""), tr(""), + tr("nothing:0;one:1;two:2;three:3;four:4;five:5;six:6;seven:7;eight:8;nine:9"), + 0, 0, 0x0163, factory));//0,无;1-9,1-9针位 + + // 特殊针位功能, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 83, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle function"),// 特殊针位功能 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Carved hole:0;paint brush:1"), 0, 0, 0x0164, factory));//0,雕孔;1,画笔 + + // 吸尘器启动延时, 范围 0--S32_MAX,单位秒,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 84, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner start delay"),// 吸尘器启动延时 + 0, 0, S32_MAX, 0, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x0165, operate)); + + // 换色速度,范围1-2000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 99, 0, 0, PARA_VALUE_TYPE_INT, + tr("Color change speed"),// 换色速度 + 200, 1, 2000, 200, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0167, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 1, 0, PARA_VALUE_TYPE_SW, + tr("first head"),// 第一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0170, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 2, 0, PARA_VALUE_TYPE_SW, + tr("second head"),// 第二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0171, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 3, 0, PARA_VALUE_TYPE_SW, + tr("third head"),// 第三个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0172, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 4, 0, PARA_VALUE_TYPE_SW, + tr("fourth head"),// 第四个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0173, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 5, 0, PARA_VALUE_TYPE_SW, + tr("fifth head"),// 第五个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0174, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 6, 0, PARA_VALUE_TYPE_SW, + tr("sixth head"),// 第六个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0175, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 7, 0, PARA_VALUE_TYPE_SW, + tr("seventh head"),// 第七个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0176, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 8, 0, PARA_VALUE_TYPE_SW, + tr("eighth head"),// 第八个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0177, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 9, 0, PARA_VALUE_TYPE_SW, + tr("ninth head"),// 第九个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0178, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 10, 0, PARA_VALUE_TYPE_SW, + tr("tenth head"),// 第十个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0179, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 11, 0, PARA_VALUE_TYPE_SW, + tr("eleventh head"),// 第十一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017A, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 12, 0, PARA_VALUE_TYPE_SW, + tr("twelfth head"),// 第十二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017B, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 13, 0, PARA_VALUE_TYPE_SW, + tr("thirteenth head"),// 第十三个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017C, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 14, 0, PARA_VALUE_TYPE_SW, + tr("fourteenth head"),// 第十四个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017D, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 15, 0, PARA_VALUE_TYPE_SW, + tr("fifteenth head"),// 第十五个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017E, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 16, 0, PARA_VALUE_TYPE_SW, + tr("sixteent head"),// 第十六个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017F, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 17, 0, PARA_VALUE_TYPE_SW, + tr("seventeenth head"),// 第十七个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0180, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 18, 0, PARA_VALUE_TYPE_SW, + tr("eighteenth head"),// 第十八个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0181, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 19, 0, PARA_VALUE_TYPE_SW, + tr("nineteenth head"),// 第十九个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0182, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 20, 0, PARA_VALUE_TYPE_SW, + tr("twentieth head"),// 第二十个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0183, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 21, 0, PARA_VALUE_TYPE_SW, + tr("twenty-first head"),// 第二十一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0184, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 22, 0, PARA_VALUE_TYPE_SW, + tr("twenty-second head"),// 第二十二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0185, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 23, 0, PARA_VALUE_TYPE_SW, + tr("twenty-third head"),// 第二十三个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0186, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 24, 0, PARA_VALUE_TYPE_SW, + tr("twenty-fourth head"),// 第二十四个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0187, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 25, 0, PARA_VALUE_TYPE_SW, + tr("twenty-fifth head"),// 第二十五个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0188, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 26, 0, PARA_VALUE_TYPE_SW, + tr("twenty-sixth head"),// 第二十六个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0189, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 27, 0, PARA_VALUE_TYPE_SW, + tr("twenty-seventh head"),// 第二十七个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018A, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 28, 0, PARA_VALUE_TYPE_SW, + tr("twenty-eighth head"),// 第二十八个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018B, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 29, 0, PARA_VALUE_TYPE_SW, + tr("twenty-ninth head"),// 第二十九个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018C, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 30, 0, PARA_VALUE_TYPE_SW, + tr("thirtieth head"),// 第三十个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018D, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 31, 0, PARA_VALUE_TYPE_SW, + tr("thirty-first head"),// 第三十一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018E, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 32, 0, PARA_VALUE_TYPE_SW, + tr("thirty-second head"),// 第三十二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018F, repair)); + + // 安全输入光幕允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 101, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Secure input light curtain allows"),// 安全输入光幕允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0190, repair)); + + // 安全输入气压允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 101, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Safety input pressure allowed"),// 安全输入气压允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0191, repair)); + + // 安全输入上电信号允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 101, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Safe input power-on signal allowed"),// 安全输入上电信号允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0192, repair)); + + // 安全输入安全门允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 101, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Safe input emergency door allowed"),// 安全输入安全门允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0193, repair)); + + // 自动气框允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 102, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic air box allowed"),// 自动气框允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0194, operate)); + + // 自动气框延时闭合, 范围 0--5000,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 103, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic air frame closing delay"),// 自动气框延时闭合 + 0, 0, 5000, 0, 0, tr("ms"), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0195, operate)); + + // 线迹偏移允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 104, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Stitch offset allows"),// 线迹偏移允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0196, operate)); + + // 循环工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 105, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Loop work allowed"),// 循环工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0197, operate)); + + // 右机头选择1, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 1, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 1"),// 右机头选择1 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0198, repair)); + + // 右机头选择2, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 2, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 2"),// 右机头选择2 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0199, repair)); + + // 右机头选择3, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 3, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 3"),// 右机头选择3 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019A, repair)); + + // 右机头选择4, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 4, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 4"),// 右机头选择4 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019B, repair)); + + // 右机头选择5, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 5, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 5"),// 右机头选择5 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019C, repair)); + + // 右机头选择6, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 6, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 6"),// 右机头选择6 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019D, repair)); + + // 右机头选择7, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 7, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 7"),// 右机头选择7 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019E, repair)); + + // 右机头选择8, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 8, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 8"),// 右机头选择8 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019F, repair)); + + // 右机头选择9, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 9, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 9"),// 右机头选择9 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A0, repair)); + + // 右机头选择10, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 10, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 10"),// 右机头选择10 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A1, repair)); + + // 右机头选择11, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 11, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 11"),// 右机头选择11 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A2, repair)); + + // 右机头选择12, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 12, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 12"),// 右机头选择12 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A3, repair)); + + // 右机头选择13, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 13, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 13"),// 右机头选择13 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A4, repair)); + + // 右机头选择14, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 14, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 14"),// 右机头选择14 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A5, repair)); + + // 右机头选择15, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 15, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 15"),// 右机头选择15 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A6, repair)); + + // 右机头选择16, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 16, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 16"),// 右机头选择16 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A7, repair)); + + // 右机头选择17, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 17, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 17"),// 右机头选择17 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A8, repair)); + + // 右机头选择18, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 18, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 18"),// 右机头选择18 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A9, repair)); + + // 右机头选择19, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 19, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 19"),// 右机头选择19 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AA, repair)); + + // 右机头选择20, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 20, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 20"),// 右机头选择20 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AB, repair)); + + // 右机头选择21, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 21, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 21"),// 右机头选择21 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AC, repair)); + + // 右机头选择22, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 22, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 22"),// 右机头选择22 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AD, repair)); + + // 右机头选择23, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 23, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 23"),// 右机头选择23 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AE, repair)); + + // 右机头选择24, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 24, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 24"),// 右机头选择24 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AF, repair)); + + // 右机头选择25, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 25, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 25"),// 右机头选择25 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B0, repair)); + + // 右机头选择26, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 26, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 26"),// 右机头选择26 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B1, repair)); + + // 右机头选择27, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 27, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 27"),// 右机头选择27 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B2, repair)); + + // 右机头选择28, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 28, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 28"),// 右机头选择28 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B3, repair)); + + // 右机头选择29, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 29, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 29"),// 右机头选择29 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B4, repair)); + + // 右机头选择30, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 30, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 30"),// 右机头选择30 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B5, repair)); + + // 右机头选择31, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 31, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 31"),// 右机头选择31 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B6, repair)); + + // 右机头选择32, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 32, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 32"),// 右机头选择32 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B7, repair)); + + // 拉料电机拉料位置, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 107, 0, 0, PARA_VALUE_TYPE_INT, + tr("Pulling motor pull position"),// 拉料电机拉料位置 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01B8, repair)); + + // 拉料长度, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 108, 0, 0, PARA_VALUE_TYPE_INT, + tr("Pull length"),// 拉料长度 + 0, 0, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01BA, operate)); + + // 裁切长度, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 109, 0, 0, PARA_VALUE_TYPE_INT, + tr("Cutting length"),// 裁切长度 + 0, 0, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01BB, operate)); + + // 梭加油持续时间, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 110, 0, 0, PARA_VALUE_TYPE_INT, + tr("Shuttle refueling duration"),// 梭加油持续时间 + 0, 0, S32_MAX, 0, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x01BC, operate)); + + // 夹线力度1, 范围 0--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 111, 0, 0, PARA_VALUE_TYPE_INT, + tr("Clamping force 1"),// 夹线力度1 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01BD, operate)); + + // 夹线力度2, 范围 0--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 112, 0, 0, PARA_VALUE_TYPE_INT, + tr("Clamping force 2"),// 夹线力度2 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01BE, operate)); + + // 夹线力度3, 范围 0--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 113, 0, 0, PARA_VALUE_TYPE_INT, + tr("Clamping force 3"),// 夹线力度3 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01BF, operate)); + + // 夹线力度4, 范围 0--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 114, 0, 0, PARA_VALUE_TYPE_INT, + tr("Clamping force 4"),// 夹线力度4 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01C0, operate)); + + // 平绣主轴工作转速, 范围 1--1200,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_SPEED, + 115, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery spindle working speed"),// 平绣主轴工作转速 + 1000, 1, 1200, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x01C1, operate)); + + // 平绣加速度, 范围 1--100,默认 5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 116, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery acceleration"),// 平绣加速度 + 5, 1, 100, 5, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x01C2, operate)); + + // 平绣动框方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 117, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Flat embroidery frame"),// 平绣动框方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("continuous: 0 ; intermittent: 1"), 1, 1, 0x01C3, repair));//连续:0;间歇:1 + + // 平绣动框方式 xy间歇式脉冲无加减速, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 117, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Flat embroidery acceleration mode"),// 平绣动框方式 xy间歇式脉冲无加减速 + 1, 0, 1, 1, 0, tr(""), tr(""), //无加速或减速:0;XY正弦加减速:1 + tr("No acceleration or deceleration: 0 ; Xy sine acceleration and deceleration: 1"), + 1, 1, 0x01C4, repair)); + + // 平绣动框起始角度, 范围 0--36000,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 118, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery frame starting angle"),// 平绣动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x01C5, repair)); + + // 平绣动框持续角度, 范围 0--36000,默认 20000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 119, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery frame continuous angle"),// 平绣动框持续角度 + 20000, 0, 36000, 20000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x01C6, repair)); + + // 跳针最大速度, 范围 100--1200,默认 600 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 120, 0, 0, PARA_VALUE_TYPE_INT, + tr("jump max speed"),// 跳针最大速度 + 600, 100, 1200, 600, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x01C7, operate)); + + // 平绣跳针变越框针数, 范围 0--20,默认 3 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 121, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery jump to offset Needles count"),// 平绣跳针变越框针数 + 3, 0, 20, 3, 0, tr("needle"), tr(""), + tr(""), 0, 0, 0x01C8, operate)); + + // 平绣动框最高速度, 范围 10--1000,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 122, 0, 0, PARA_VALUE_TYPE_INT, + tr("Embroidery move max speed"),// 平绣动框最高速度 + 100, 10, 1000, 100, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x01C9, repair)); + + // 冲孔主轴启动慢动转速, 范围 1--2000,单位r/min,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 169, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle start slow speed"),// 冲孔主轴启动慢动转速 + 500, 1, 2000, 500, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x01CA, operate)); + + // X工作范围, 范围 0--500000,默认 90000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 174, 0, 0, PARA_VALUE_TYPE_INT, + tr("X working range"),// X工作范围 + 90000, 0, 500000, 90000, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01CB, factory)); + + // Y工作范围, 范围 0--5000000,默认 60000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y working range"),// Y工作范围 + 60000, 0, 500000, 60000, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01CC, factory)); + + // 冲孔旋转传感器角度,范围-36000--36000,单位0.01度,默认9000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 176, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching rotation sensor angle"),// 冲孔旋转传感器角度 + 9000, -36000, 36000, 9000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x01CD, repair)); + + // 冲孔动框最高速度,范围1-1000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum speed of punching frame"),// 冲孔动框最高速度 + 200, 1, 1000, 200, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x01CE, repair)); + + // 绣花剪线勾线延迟,范围0-500,单位ms,默认250 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 178, 0, 0, PARA_VALUE_TYPE_INT, + tr("Embroidery trimming thread hooking delay"),// 绣花剪线勾线延迟 + 250, 0, 500, 250, 0, tr("ms"), tr(""), + tr(""), 0, 0, 0x01CF, operate)); + + // 冲孔运针变跳针长度,范围0-2000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING|MC_SORT_POSITION, + 180, 0, 0, PARA_VALUE_TYPE_INT, + tr("Length of punching needle changing to skipping needle"),// 冲孔运针变跳针长度 + 0, 0, 2000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01D0, operate)); + + // 冲孔吸尘器启动持续时间,范围0-100,单位s,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 181, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching vacuum cleaner start duration"),// 冲孔吸尘器启动持续时间 + 5, 0, 100, 5, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x01D1, operate)); + + // 冲孔吸尘器启动间隔,范围0-500,单位s,默认60 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 182, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching vacuum cleaner start interval"),// 冲孔吸尘器启动间隔 + 60, 0, 500, 60, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x01D2, operate)); + + // 平绣扣线角度,范围0--360,单位度,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 185, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery thread angle"),// 平绣扣线角度 + 100, 0, 360, 100, 0, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x01D3, repair)); + +} + +//电机和控制动作 +void PunchSewEmbMachine::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("Sewing needle spindle 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,0x0003,tr("Needle motor"),MT_LN,// 针电机 + 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("Shuttle motor"),MT_LH,// 梭电机 + 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("Lift motor"),MT_LU,// 升降电机 + 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("ratating motor"),MT_LR,// 旋转电机 + 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("Up ratating motor"),MT_LRU,// 上旋转电机 + 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("Down ratating motor"),MT_LRD,// 下旋转电机 + 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,0x0005,tr("Punch main axis"),MT_LPM,// 冲孔主轴电机 + 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,0x0006,tr("Embroider main axis motor"),MT_LEM,// 绣花主轴电机 + 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,0x0006,tr("Punching color change motor"),MT_LPS,// 冲孔换色电机 + 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,0x0006,tr("Punching color rorating motor"),MT_LPR,// 冲孔旋转电机 + 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,0x0006,tr("Embroidered color rorating motor"),MT_ECM,// 平绣换色电机 + 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,0x0006,tr("Embroider Needle Spindle"),MT_EMN,// 平绣针主轴 + 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,0x0006,tr("Embroider shutle Spindle"),MT_EMH,// 平绣梭主轴 + 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,0x0007,tr("loose thread"),OT_LOOSE_THREAD,//松紧线 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + relaxStr,true,OUTCONTROL_OPEN,-1,-1, + clampStr,true,OUTCONTROL_CLOSE,-1,-1)); + +// m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0008,tr("up cutter cut"),OT_UCUT_THREAD,//上剪刀剪线 +// "",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,0x0009,tr("down cutter cut"),OT_DCUT_THREAD,//下剪刀剪线 + "",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,0x000A,tr("fuel charging"),OT_OIL,//加油 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + startStr,true,OUTCONTROL_OPEN,-1,-1, + stopStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000B,tr("light "),OT_LIGHT,//照明灯 + "",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,0x000C,tr("mid press foot"),OT_MID_FOOT,//中压脚 + "",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,0x000E,tr("kou blow thread"),OT_PUSH_BTRD,//扣底线 + "",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,0x000F,tr("clip up thread"),OT_CLIP_UTRD,//夹面线 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + clampStr,true,OUTCONTROL_OPEN,-1,-1, + relaxStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0011,tr("sewing head lift"),OT_SEW_LIFT,//缝纫机头升降 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + upStr,true,OUTCONTROL_ENABLE,-1,-1, + downStr,true,OUTCONTROL_DISABLE,-1,-1)); + +// m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000A,tr("punching head lift"),OT_PUNCH_LIFT,//冲孔机头升降 +// "",false,-1,-1,-1, +// "",false,-1,-1,-1, +// "",false,-1,-1,-1, +// upStr,true,MOTORHEADO_UP,-1,-1, +// downStr,true,MOTORHEADO_DOWN,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0012,tr("sew blow"),OT_PUSH_BTRD,//缝纫吹气 + "",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,0x0012,tr("kou blow thread"),OT_PUNCH_BLOW,//冲孔吹气 +// "",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,0x0013,tr("cleaner "),OT_CLEANER,//吸尘器 + "",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,0x0014,tr("Hook action extension"),OT_CLIP_EXTEND,//勾线动作伸缩 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + outStr,true,OUTCONTROL_OPEN,-1,-1, + backStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0015,tr("Hook action opening and closing"),OT_CLIP_EXTEND,//勾线动作开合 + "",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,0x0016,tr("embroider cutter"),OT_EMB_CUT,//平绣剪刀 + "",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,0x0017,tr("embroider push"),OT_EMB_PUSH,//平绣扣线 + "",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,0x0018,tr("embroider clip thread"),OT_EMB_CLIP,//平绣夹面线 + "",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,0x0019,tr("embroider fuel charging"),OT_EMB_OIL,//平绣加油 + "",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,0x001A,tr("embroider hook thread"),OT_EMB_HOOK,//平绣勾线 + "",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,0x001B,tr("embroider lock"),OT_EMB_LOCK,//平绣锁头 + "",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,0x001C,tr("punch fuel charging"),OT_PUNCH_OIL,//冲孔加油 +// "",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,0x001D,tr("punch lock"),OT_PUNCH_LOCK,//冲孔锁头 +// "",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 PunchSewEmbMachine::initShortCutList() +{ + m_allShortCutList.clear(); + + m_allShortCutList.append(makeAShortCutItem(0,0x0001,tr("All To Zero"),"buttonAllToZero",FUN_ALLTOZERO));//全部归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0002,tr("Set Offset"),"buttonSetOffsetPoint",FUN_SETOFFSETPOINT));//定偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x0003,tr("Sew Start"),"buttonSetStartPoint",FUN_SETSTARTPOINT));//缝纫定起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x0004,tr("Sew Anchor"),"buttonSetAnchorPoint",FUN_SETANCHORPOINT));//缝纫定定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x0005,tr("Punch Start"),"buttonSetStartPoint",FUN_SECSETSTARTPOINT));//冲孔定起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x0006,tr("Punch Anchor"),"buttonSetAnchorPoint",FUN_SECSETANCHORPOINT));//冲孔定定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x0007,tr("Emb Start"),"buttonSetStartPoint",FUN_THRIDSETSTARTPOINT));//绣花定起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x0008,tr("Emb Anchor"),"buttonSetAnchorPoint",FUN_THRIDSETANCHORPOINT));//绣花定定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x0009,tr("Check Frame"),"buttonBorderCheck",FUN_CHECKFRAME));//边框检查 + m_allShortCutList.append(makeAShortCutItem(0,0x000A,tr("Back Offset"),"buttonBackOffsetPoint",FUN_BACKOFFSETPOINT));//回偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x000B,tr("Back Start"),"buttonBackAnchorPoint",FUN_BACKSTARTPOINT));//回起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x000C,tr("To Work Point"),"buttonBackWorkPoint",FUN_BACKWORKPOINT));//回工作点 + m_allShortCutList.append(makeAShortCutItem(0,0x000D,tr("To anchor Point"),"buttonBackAnchorPoint",FUN_BACKANCHORPOINT));//回定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x000E,tr("Back to nthreading point"),"buttonBackWorkPoint",FUN_BACKTHREADPOINT));//回穿线点 + m_allShortCutList.append(makeAShortCutItem(0,0x000F,tr("To Center point"),"buttonToCenterDot",FUN_RETURNTOCENTERPOINT));//回中心点 + m_allShortCutList.append(makeAShortCutItem(0,0x0010,tr("Frame Zero"),"buttonFrameZero",FUN_FRAMEZERO));//框架归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0011,tr("To Right Up"),"buttonMoveToRightUp",FUN_MOVETORIGHTUP));//去右上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0012,tr("To Right Down"),"buttonMoveToRightDown",FUN_MOVETORIGHTDOWN));//去右下角 + m_allShortCutList.append(makeAShortCutItem(0,0x0013,tr("To Left Up"),"buttonMoveToLeftUp",FUN_MOVETOLEFTUP));//去左上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0014,tr("To Left Down"),"buttonMoveToLeftDown",FUN_MOVETOLEFTDOWN));//去左下角 + m_allShortCutList.append(makeAShortCutItem(0,0x0015,tr("Scope Work"),"buttonSetWorkRange",FUN_SETWORKRANGE));//定工作范围 + m_allShortCutList.append(makeAShortCutItem(0,0x0016,tr("Sew Spindle Test"),"buttonSpindleTest",FUN_SEWSPINDLETEST));// 缝纫主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x0017,tr("Sew trim"),"buttonManualTrim",FUN_SEWHEADCUTLINEO));//缝纫剪线 + m_allShortCutList.append(makeAShortCutItem(0,0x0018,tr("Sew Head Up Dn"),"buttonHeadUpDn",FUN_SEWMOTORUPDOWN));//缝纫机头升降 + m_allShortCutList.append(makeAShortCutItem(0,0x0019,tr("Sew Spindle Jog"),"buttonSpindleJog",FUN_SEWSPINDLEJOG));//缝纫主轴点动 + m_allShortCutList.append(makeAShortCutItem(0,0x001A,tr("Sew Hook Position"),"buttonSewHookPosi",FUN_SEWHOOKPOSITION));//缝纫主轴去勾线位 + m_allShortCutList.append(makeAShortCutItem(0,0x001B,tr("Rotate nproofreading"),"buttonSpindleRotate",FUN_ROTATEPROOFREAD));//缝纫旋转校对 + m_allShortCutList.append(makeAShortCutItem(0,0x001C,tr("Switch Sew Head"),"buttonSewHead",FUN_SELECTSEWHEAD));//切换缝纫机头 + m_allShortCutList.append(makeAShortCutItem(0,0x001D,tr("Punch Spindle Jog"),"buttonSpindleJog",FUN_PUNCHSPINDLEJOG));//冲孔主轴点动 + m_allShortCutList.append(makeAShortCutItem(0,0x001E,tr("Punch Spindle Test"),"buttonSpindleTest",FUN_SPINDLETEST));//冲孔主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x001F,tr("Punching Change Tool"),"buttonManualChangeColor",FUN_PUNCHMANUALCHANGECOLOR));//冲孔换刀 + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("Punch Rod Zero"),"buttonPunchRodZero",FUN_PUNCHNEEDLEZERO));//冲孔换杆归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0021,tr("Single Punch"),"buttonSinglePunch",FUN_SINGLEPUNCH));//单次冲孔 + m_allShortCutList.append(makeAShortCutItem(0,0x0022,tr("Punch Stop Lower"),"buttonPunchStopLower",FUN_PUNCHSTOPLOWER));//冲头停下位 + m_allShortCutList.append(makeAShortCutItem(0,0x0023,tr("Rotate To Zero"),"buttonRotToZero",FUN_PUNCH_ROT_TO_ZERO));//冲孔旋转去零位 + m_allShortCutList.append(makeAShortCutItem(0,0x0024,tr("Switch Punch Head"),"buttonPunchHead",FUN_SELECTPUCNHHEAD));//切换冲孔机头 + m_allShortCutList.append(makeAShortCutItem(0,0x0025,tr("Emb spindle"),"buttonSpindleTest",FUN_SEWEMBSPINDLETEST));//平绣主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x0026,tr("Emb Hook Position"),"buttonEmbHookPosi",FUN_EMBHOOKPOSITION));//平绣主轴去勾线位 + m_allShortCutList.append(makeAShortCutItem(0,0x0027,tr("Emb jog"),"buttonSinglePunch",FUN_SEWEMBSPINDLEJOG));//平绣点动 + m_allShortCutList.append(makeAShortCutItem(0,0x0028,tr("Emb thread cut"),"buttonManualTrim",FUN_SEWEMBCUTLINE));//平绣剪线 + m_allShortCutList.append(makeAShortCutItem(0,0x0029,tr("Emb change color"),"buttonManualChangeColor",FUN_SEWEMBCHANGECOLOR));//平绣换色 + m_allShortCutList.append(makeAShortCutItem(0,0x002A,tr("Switch Emb Head"),"buttonHeadEmb",FUN_SELECTEMBHEAD));//切换平绣机头 + m_allShortCutList.append(makeAShortCutItem(0,0x002B,tr("Forward And Back"),"buttonForwardOrBack",FUN_FORWARDORBACK));//前进回退 + // m_allShortCutList.append(makeAShortCutItem(0,0x0010,tr("ProcessReset"),"buttonProcessReset",FUN_PROCESSRESET));//流程复位 + m_allShortCutList.append(makeAShortCutItem(0,0x002C,tr("Needle shuttle proofread"),"buttonNeedleTest",FUN_NEEDLECONTRAST));//针梭校对 + m_allShortCutList.append(makeAShortCutItem(0,0x002D,tr("Needle shuttle reset"),"buttonAllToZero",FUN_NEEDLESHUTTLERESET));//针梭复位 + m_allShortCutList.append(makeAShortCutItem(0,0x002E,tr("Back shuttle pos"),"buttonAllToZero",FUN_BACKSHUTTLEPOS));//回换梭位 + m_allShortCutList.append(makeAShortCutItem(0,0x002F,tr("Needle reset"),"buttonFlatEmbHook",FUN_NEEDLERESET));//针归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0030,tr("Shuttle reset"),"buttonBackFeedingPoint",FUN_SHUTTLERESET));//梭归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0031,tr("Sew rotate up"),"buttonSpindleRotate",FUN_SEWROTATEUP));//缝纫旋转+ + m_allShortCutList.append(makeAShortCutItem(0,0x0032,tr("Sew rotate down"),"buttonSpindleRotate",FUN_SEWROTATEDOWN));//缝纫旋转- +} + +//初始化辅助功能列表 +void PunchSewEmbMachine::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,0x000D,tr("ShortcutSet"),"buttonCommonFunction",ASSIST_SHORTCUTSET));//常用设置 + m_allAssistList.append(makeAAssistItem(0,0x000E,tr("Productnum"),"buttonProductStatistics",ASSIST_PRODUCTSTATICS));//生产统计 + m_allAssistList.append(makeAAssistItem(0,0x000F,tr("Version"),"buttonVersionInfo",ASSIST_MCVERSION));//版本信息 + m_allAssistList.append(makeAAssistItem(0,0x0016,tr("Debug"),"buttonRoot",ASSIST_DEBUG));//调试功能 + m_allAssistList.append(makeAAssistItem(0,0x0010,tr("CountReset"),"buttonBottomCountReset",ASSIST_BOTTOMLINECOUNTRESET));//底线计数复位 + m_allAssistList.append(makeAAssistItem(0,0x0014,tr("Root"),"buttonRoot",ASSIST_ROOT));//超级用户 +} + +//初始化花样设置列表 +void PunchSewEmbMachine::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,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));//花样删除 +} + +//初始化参数设置列表 +void PunchSewEmbMachine::initParaSetList() +{ + m_allParaSetList.clear(); + + m_allParaSetList.append(makeAParaSetItem(0,0x0001,tr("WorkPara"),"buttonWorkParas",PARASET_WORK));//工作参数 //操作参数 + m_allParaSetList.append(makeAParaSetItem(0,0x0002,tr("OperatPara"),"buttonOperatParas",PARASET_SETTING));//设置参数 //操作参数 + m_allParaSetList.append(makeAParaSetItem(0,0x0003,tr("ActionSet"),"buttonActionParas",PARASET_ACTION));//动作参数 //动作设定 + m_allParaSetList.append(makeAParaSetItem(0,0x0004,tr("SpeedPara"),"buttonSpeedParas",PARASET_SPEED));//速度参数 //速度控制参数 + m_allParaSetList.append(makeAParaSetItem(0,0x0005,tr("LimitPara"),"buttonPositionParas",PARASET_POSITION));// 位置参数 //限位参数 + m_allParaSetList.append(makeAParaSetItem(0,0x0006,tr("DetectPara"),"buttonSettingParas",PARASET_DETECT));//检测参数 //检测参数 +} + +//初始化调试功能 +void PunchSewEmbMachine::initDebugFunList() +{ + m_allDebugFunList.clear(); + + m_allDebugFunList.append(makeADebugItem(0,0x0001,tr("CutLine"),"buttonPosParas",DEBUG_TRIM));//剪线调试 + m_allDebugFunList.append(makeADebugItem(0,0x0002,tr("PunchKnife"),"buttonSpeedParas",DEBUG_DIECUTTER));//冲刀调试 + m_allDebugFunList.append(makeADebugItem(0,0x0003,tr("NeedleShuttle"),"buttonSpeedParas",DEBUG_NEEDLESHUTTLE));//针梭调试 +} + + +//初始化传感器列表 +void PunchSewEmbMachine::initSensorList() +{ + QList sensorList; + + sensorList.append(makeASensorItem(0x0000, 0, tr("Start button")));//启动按钮 + sensorList.append(makeASensorItem(0x0001, 0, tr("Pause button")));//暂停按钮 + sensorList.append(makeASensorItem(0x0002, 0, tr("Jog button")));//点动按钮 + sensorList.append(makeASensorItem(0x0007, 0, tr("Air pressure protection input")));//气压保护输入 + sensorList.append(makeASensorItem(0x0008, 0, tr("Safety light curtains protection input")));//安全光幕输入 + sensorList.append(makeASensorItem(0x0020, 0, tr("X zero position")));//X零位 + sensorList.append(makeASensorItem(0x0020, 1, tr("Y zero position")));//Y零位 + sensorList.append(makeASensorItem(0x0021, 0, tr("X deceleration")));//X降速 + sensorList.append(makeASensorItem(0x0021, 1, tr("Y deceleration")));//Y降速 + sensorList.append(makeASensorItem(0x0022, 0, tr("X negative limit")));//X负限位 + sensorList.append(makeASensorItem(0x0022, 1, tr("Y negative limit")));//Y负限位 + sensorList.append(makeASensorItem(0x0023, 0, tr("X positive limit")));//X正限位 + sensorList.append(makeASensorItem(0x0023, 1, tr("Y positive limit")));//Y正限位 + sensorList.append(makeASensorItem(0x0030, 0, tr("Sewing on the machine head rotation zero position")));//缝纫上机头旋转零位 + sensorList.append(makeASensorItem(0x0036, 0, tr("Sewing under the machine head rotation zero position")));//缝纫下机头旋转零位 + sensorList.append(makeASensorItem(0x003E, 0, tr("Punching the rotary shaft at zero")));//冲孔旋转轴零位 + sensorList.append(makeASensorItem(0x0040, 0, tr("Sewing machine head lifting upper limit")));//缝纫机头升降上限位 + sensorList.append(makeASensorItem(0x0042, 0, tr("Lower lifting limit of sewing machine head")));//缝纫机头升降下限位 + sensorList.append(makeASensorItem(0x0080, 0, tr("Sewing spindle needle - parking space")));//缝纫针主轴停车位 + sensorList.append(makeASensorItem(0x0082, 0, tr("Sewing spindle needle - thread hooking position")));//缝纫针主轴勾线位 + sensorList.append(makeASensorItem(0x0088, 0, tr("Sewing shuttle parking space")));//缝纫梭主轴停车位 + sensorList.append(makeASensorItem(0x008A, 0, tr("Sewing rotary hook thread hook position")));//缝纫梭主轴勾线位 + sensorList.append(makeASensorItem(0x0090, 0, tr("Punching spindle zero position")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x0098, 0, tr("Flat needle spindle parking space")));//平绣针主轴停车位 + sensorList.append(makeASensorItem(0x009A, 0, tr("Flat embroidery needle spindle hook position")));//平绣针主轴勾线位 + sensorList.append(makeASensorItem(0x009C, 0, tr("Flat shuttle spindle parking space")));//平绣梭主轴停车位 + sensorList.append(makeASensorItem(0x009E, 0, tr("Flat embroidery shuttle spindle hook position")));//平绣梭主轴勾线位 + sensorList.append(makeASensorItem(0x0100, 0, tr("Flat embroidery under the scissors back in place")));//平绣下剪刀回位 + sensorList.append(makeASensorItem(0x0170, 0, tr("Sewing thread breakage detection")));//缝纫断线检测 + sensorList.append(makeASensorItem(0x0174, 0, tr("Sewing scissors return")));//缝纫下剪刀回位 + sensorList.append(makeASensorItem(0x0186, 0, tr("The small plate closes signal 1")));//小台板关闭信号1 + sensorList.append(makeASensorItem(0x0186, 1, tr("The small plate closes signal 2")));//小台板关闭信号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 PunchSewEmbMachine::initErrorCodeAndStateList() +{ + m_allErrorCodeAndStateList.clear(); + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_HK_NOT_ZERO, tr("The shuttle is not at zero")));//旋梭不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_MS_NOT_SYNC, tr("Needle and shuttle is out of sync")));//旋转不同步 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_RO_NOT_SYNC, tr("Rotation is out of sync")));//旋转不同步 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_NEEDLE_NOT_HIGH, tr("The needle is not at the high position")));//机针不在高位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_LIFT_TIMEOUT, tr("Head lift timeout")));//机头升降超时 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_HEAD_NOT_SAFE, tr("The head is not in the safty area")));//机头不在安全区域 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_ZERO, tr("Punching head main shaft is not at zero")));//冲孔主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_R_LIT_POSI, tr("Rotating positive limit")));//正向旋转限位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_R_LIT_NEGA, tr("Rotating negative limit")));//反向旋转限位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_FOOT_POS, tr("Foot position error")));//压脚位置错误 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_FOOT_OUT_RANGE, tr("Foot moto's position is out of range")));//压脚电机位置越界 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_LIFT_OUT_RANGE, tr("The head lift moto's position is out of range")));//机头升降位置越界 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_ROT_OUT_RANGE, tr("Rotation position out of range")));//旋转位置越界 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_LIFT_ULIMIT, tr("Head lift upper limit")));// 机头升降上限位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_LIFT_DLIMIT, tr("Head lift down limit")));// 机头升降下限位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_EMB_NOT_ZERO, tr("Emb main shaft is not at zero")));// 平绣主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_SWND_TIMOUT, tr("Punching color change timeout")));// 冲孔换色超时 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_EMB_SWND_TIMOUT, tr("Embroidered color change timeout")));//平绣换色超时 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_EMB_ND_ERR, tr("Emb needle bar's position error")));//平绣针位错误 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_ND_ERR, tr("Punch needle bar's position error")));//冲孔针位错误 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_EMB_HOOK_NOT_ZERO, tr("Err emb hook not zero")));//平绣勾刀未回位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_EMB_CUT_NOT_ZERO, tr("Err emb cut not zero")));//平绣剪刀未回位 +} + diff --git a/mctype/patternsingleboard/function/punchsewembmachine.h b/mctype/patternsingleboard/function/punchsewembmachine.h new file mode 100644 index 0000000..4c63e48 --- /dev/null +++ b/mctype/patternsingleboard/function/punchsewembmachine.h @@ -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 diff --git a/mctype/patternsingleboard/function/punchsewmachine.cpp b/mctype/patternsingleboard/function/punchsewmachine.cpp new file mode 100644 index 0000000..b129a91 --- /dev/null +++ b/mctype/patternsingleboard/function/punchsewmachine.cpp @@ -0,0 +1,2737 @@ +#include "punchsewmachine.h" +// 冲缝机 lxs 20220614 建立这个机型界面,当前是双头冲缝一体机,所以包括在内的机型都可以从这个改(单头冲缝一体机,双头冲孔机都可以从这儿改)[单头冲孔可以从冲孔界面应用] +PunchSewMachine::PunchSewMachine() +{ + //添加各种参数到列表中 + initRootParasList(); + initRootHMIConfigurationList(m_allParasList);//超级用户界面配置 + initRootIOTConfigurationList(m_allParasList); //超级用户物联网配置 + initPatternsParasList(); + initSoftwareParasList(m_allParasList); + initTimeParasList(m_allParasList); + initPunchSewCommonFunParasList(m_allParasList); + initMcParasList(); + initWkParasList(); + + //初始化控制动作列表 + initOutCtrlList(); + + //初始化快捷功能列表 + initShortCutList(); + + //初始化辅助功能列表 + initAssistList(); + + //初始化花样设置功能列表 + initPatternSetList(); + + //参数分类功能 + initParaSetList(); + + //初始化传感器列表 + initSensorList(); + + //初始化错误代码和状态列表 + initErrorCodeAndStateList(); +} + +PunchSewMachine::~PunchSewMachine() +{ + +} + +//超级用户参数(包括机器参数、工作参数) +void PunchSewMachine::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_SKIPEFFECT, 0, 0, PARA_VALUE_TYPE_CLICK, + tr("Jump stitch takes effect"),//跳针生效 + 0, 0, 0, 0, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x000D, 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 PunchSewMachine::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)); + + //花样参数-花样设置参数-连续动框补偿;单位:无,范围0-1000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_PATTERN, + 0 , + SET_CONTINURUNCOMP, 0, 0, PARA_VALUE_TYPE_INT, + tr("Continuous motion frame compensation"),//连续动框补偿 + 0, 0, 1000, 0, 0, tr(""), tr(""),// + tr(""), 0, 0,0x0004, operate)); + + //花样参数-花样设置参数-针尖补偿;单位:mm,范围-200-200,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_PATTERN, + 0 , + SET_NEEDLETIPCOMP, 0, 0, PARA_VALUE_TYPE_INT, + tr("Needle tip compensation"),//针尖补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""),// + tr(""), 0, 0,0x0005, 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,0x0006, operate)); + + //花样参数--------------------------- +} + +//机器参数 +void PunchSewMachine::initMcParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + // 冲孔机头个数,无单位, 范围1-32,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 2, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of punching heads"),// 冲孔机头个数 + 1, 1, 32, 1, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0000, operate)); + + // 冲孔每头冲针个数,无单位, 范围1-16,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 3, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of needles per head for punching"), + 1, 1, 16, 1, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0001, operate)); + + // X轴配置,无单位, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 0, 0, PARA_VALUE_TYPE_LIST, + tr("X axis configuration"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 0, 0, 0x0002, operate)); + + // X轴电机驱动选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 1, 0, PARA_VALUE_TYPE_LIST, + tr("X axis motor drive selection"), + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Single motor:0;Double motor:1"),//单驱动:0;双驱动:1 + 0, 0, 0x0003, operate)); + + // X轴坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 2, 0, PARA_VALUE_TYPE_LIST, + tr("X axis coordinate system selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Positive:0;Reverse:1"),//正:0;反:1 + 0, 0, 0x0004, operate)); + + // X轴移动对象选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 3, 0, PARA_VALUE_TYPE_LIST, + tr("X axis moving object selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Head:0;Frame:1"),//机头:0;框:1 + 0, 0, 0x0005, operate)); + + // X轴零位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 4, 0, PARA_VALUE_TYPE_LIST, + tr("X axis zero sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 0, 0, 0x0006, operate)); + + // X轴降速传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 5, 0, PARA_VALUE_TYPE_LIST, + tr("X axis speed reduction sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 0, 0, 0x0007, operate)); + + // X轴正限位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 6, 0, PARA_VALUE_TYPE_LIST, + tr("X axis positive limit sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 0, 0, 0x0008, factory)); + + // X轴负限位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 7, 0, PARA_VALUE_TYPE_LIST, + tr("X axis negative limit sensor selection"),//X轴负限位传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0009, operate)); + + // X轴零位方向选择, 范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 8, 0, PARA_VALUE_TYPE_LIST, + tr("X axis zero direction selection"),//X轴零位方向选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Negative:0;Positive:1"),//负方向:0;正方向:1 + 0, 0, 0x0010, operate)); + + // X轴传感器作用选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 9, 0, PARA_VALUE_TYPE_LIST, + tr("X axis sensor function selection"),//X轴传感器作用选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Zero separate:0;Zero and speed reduction:1"),//零分离:0;零点和减速:1 + 1, 1, 0x0011, operate)); + + // Y轴配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis configuration"),//Y轴配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0012, operate)); + + // Y轴电机驱动选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis motor drive selection"),//Y轴电机驱动选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Single motor:0;Double motor:1"),//单驱动:0;双驱动:1 + 0, 0, 0x0013, operate)); + + // Y轴坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis coordinate system selection"),//Y轴坐标系统选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Positive:0;Reverse:1"),//正:0;反:1 + 1, 1, 0x0014, operate)); + + // Y轴移动对象选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis moving object selection"),//Y轴移动对象选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Head:0;Frame:1"),//机头:0;框:1 + 1, 1, 0x0015, operate)); + + // Y轴零位传感器选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis zero sensor selection"),//Y轴零位传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0016, operate)); + + // Y轴降速传感器选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis speed reduction sensor selection"),//Y轴降速传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0017, operate)); + + // Y轴正限位传感器, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 6, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis positive limit sensor selection"),//Y轴正限位传感器 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0020, operate)); + + // Y轴负限位传感器, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 7, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis negative limit sensor selection"),//Y轴负限位传感器 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0021, operate)); + + //Y轴零位方向选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 8, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis zero direction selection"),//Y轴零位方向选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Negative:0;Positive:1"),//负方向:0;正方向:1 + 0, 0, 0x0022, operate)); + + //Y轴传感器作用选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 9, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis sensor function selection"),//Y轴传感器作用选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Zero separate:0;Zero and speed reduction:1"),//零分离:0;零点和减速:1 + 1, 1, 0x0023, operate)); + + //缝纫主轴配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 14, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing spindle configuration"),//缝纫主轴配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0038, operate)); + + //针梭配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 14, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Needle shuttle configuration"),//针梭配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Needle shuttle:0;Needle shuttle separation:1"),//针穿梭:0;针梭分离:1 + 1, 1, 0x0039, operate)); + + //升降电机配置,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 15, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Lift motor configuration"),//升降电机配置 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 0, 0, 0x003A, operate)); + + //下剪刀驱动装置选择,范围0-4,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 18, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Lower scissors drive selection"),//下剪刀驱动装置选择 + 1, 0, 4, 1, 0, tr(""), tr(""), + tr("No lower trimming device:0;Cylinder:1;AC motor:2;Stepper motor:3;Electromagnet:4"),//无下剪线装置:0;气缸:1;交流电机:2;步进电机:3;电磁铁:4 + 1, 1, 0x0041, operate)); + + //下剪线模式选择,范围0-3,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 19, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Lower trimming mode selection"),//下剪线模式选择 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Static trimming:0;Dynamic trimming:1;Cam trimming:2;Cam respectively trimming:3"),//静态剪线:0;动态剪线:1;凸轮剪线:2;凸轮分别剪线:3 + 0, 0, 0x0042, operate)); + + //上剪刀驱动装置选择, 范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 20, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Upper scissors drive selection"),//上剪刀驱动装置选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("No Upper trimming Device:0;Cylinder:1"),//无上剪线装置:0;气缸:1 + 0, 0, 0x0043, operate)); + + //面线断线检测装置选择,范围0-2,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 21, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Upper thread break detection device selection"),//面线断线检测装置选择 + 1, 0, 2, 1, 0, tr(""), tr(""), + tr("No:0;Pick wire spring:1;Electronic isolation:2"),//无:0;拣选钢丝弹簧:1;电子隔离开关:2 + 1, 1, 0x0044, operate)); + + //断线检测模式选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 23, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Wire break detection mode selection"),//断线检测模式选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Direct detection:0;EXBboard detection:1"),//直接检测:0;外围板检测:1 + 0, 0, 0x0046, operate)); + + //勾面线装置选择,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 24, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Hook line device selection"),//勾面线装置选择 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No hook line device:0;Cylinder:1;Electromagnet:2"),//无勾线装置:0;气缸:1;电磁铁:2 + 0, 0, 0x0047, operate)); + + //松面线装置选择,范围0-2,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 25, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Loose line device selection"),//松面线装置选择 + 1, 0, 2, 1, 0, tr(""), tr(""), + tr("No loose wire device:0;Cylinder:1;Electromagnet:2"),//无松线装置:0;气缸:1个;电磁铁:2 + 1, 1, 0x0048, operate)); + + //拉面线装置选择,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 26, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Ramen line device selection"),//拉面线装置选择 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No ramen line device:0;Cylinder:1;Electromagnet:2"),//无拉面线装置:0;气缸:1;电磁铁:2 + 0, 0, 0x0049, operate)); + + //扣底线装置选择,范围0-2,默认2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 27, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Bottom line device selection"),//扣底线装置选择 + 2, 0, 2, 2, 0, tr(""), tr(""), + tr("No bottom line device:0;Cylinder:1;Electromagnet:2"),//无底线装置:0;气缸:1;电磁铁:2 + 2, 2, 0x004A, operate)); + + //旋梭面对方向,范围0-3,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 30, 0, 0, PARA_VALUE_TYPE_LIST, + tr("The hook faces the direction"),//旋梭面对方向 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Forward:0;Left:1;Right:2;Up:3"),//正:0;左:1;右:2;下:3 + 0, 0, 0x004D, operate)); + + // X框传感器坐标, 范围S32_MIN--S32_MAX, 默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 50, 0, 0, PARA_VALUE_TYPE_INT, + tr("X box sensor coordinates"),//X框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 0, tr("mm"), tr(""), + tr(""), + 0, 0, 0x004F, operate)); + + // Y框传感器坐标, 范围S32_MIN--S32_MAX, 默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 51, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y box sensor coordinates"),//Y框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 0, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0050, operate)); + + //主轴停车传感器角度, 范围0-36000,默认4500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 52, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle parking sensor angle"),//主轴停车传感器角度 + 4500, 0, 36000, 4500, 2, cod->toUnicode("°"), tr(""), + tr(""), + 4500, 4500, 0x0051, operate)); + + //升降传感器坐标, 范围S32_MIN--S32_MAX, 默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 53, 4, 0, PARA_VALUE_TYPE_INT, + tr("Lift sensor coordinates"),//升降传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0052, operate)); + + //压脚传感器坐标, 范围S32_MIN--S32_MAX, 默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 54, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot sensor coordinates"),//压脚传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0053, operate)); + + //主轴勾线传感器角度, 范围0-36000,默认20200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 56, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle hook line sensor angle unit"),//主轴勾线传感器角度 + 20200, 0, 36000, 20200, 2, cod->toUnicode("°"), tr(""), + tr(""), + 20200, 20200, 0x0055, operate)); + + //冲头停车角度, 范围0-36000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 57, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punch parking angle"),//冲头停车角度 + 0, 0, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0056, operate)); + + //主轴点动停车角度, 范围-36000-36000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 62, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle jog parking angle"),//主轴点动停车角度 + 0, -36000, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x005B, operate)); + + //X可移动区域负边界, 范围S32_MIN--S32_MAX, 默认6800 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 70, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area negative boundary"),//X可移动区域负边界 + 6800, S32_MIN, S32_MAX, 6800, 2, tr("mm"), tr(""), + tr(""), + 6800, 6800, 0x005D, operate)); + + //X可移动区域正边界, 范围S32_MIN--S32_MAX,默认207500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 71, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area positive boundary"),//X可移动区域正边界 + 207500, S32_MIN, S32_MAX, 207500, 2, tr("mm"), tr(""), + tr(""), + 207500, 207500, 0x005E, operate)); + + //Y可移动区域负边界, 范围S32_MIN--S32_MAX,默认4500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area negative boundary"),//Y可移动区域负边界 + 4500, S32_MIN, S32_MAX, 4500, 2, tr("mm"), tr(""), + tr(""), + 4500, 4500, 0x005F, operate)); + + //Y可移动区域正边界, 范围S32_MIN--S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area positive boundary"),//Y可移动区域正边界 + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 99300, 99300, 0x0060, operate)); + + //机头升降可移动上边界, 范围S32_MIN--S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 74, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift can move the upper boundary"),//机头升降可移动上边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0061, operate)); + + //机头升降可移动下边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 75, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift can move the lower boundary"),//机头升降可移动下边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0062, operate)); + + //冲孔机头偏移X, 范围S32_MIN--S32_MAX,默认-20630 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 82, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching head offset X"),//冲孔机头偏移X + -20630, S32_MIN, S32_MAX, -20630, 2, tr("mm"), tr(""), + tr(""), + -20630, -20630, 0x0069, operate)); + + //冲孔机头偏移Y, 范围S32_MIN--S32_MAX,默认-30 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 83, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching head offset Y"),//冲孔机头偏移Y + -30, S32_MIN, S32_MAX, -30, 2, tr("mm"), tr(""), + tr(""), + -30, -30, 0x006A, operate)); + + //x可缝纫区域负边界, 范围S32_MIN--S32_MAX,默认6800 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 84, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Sewing area Negative boundary"),//x可缝纫区域负边界 + 6800, S32_MIN, S32_MAX, 6800, 2, tr("mm"), tr(""), + tr(""), + 6800, 6800, 0x006B, operate)); + + //x可缝纫区域正边界, 范围S32_MIN--S32_MAX,默认128800 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 85, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Sewing area Positive margin"),//x可缝纫区域正边界 + 128800, S32_MIN, S32_MAX, 128800, 2, tr("mm"), tr(""), + tr(""), + 128800, 128800, 0x006C, operate)); + + //y可缝纫区域负边界, 范围S32_MIN--S32_MAX,默认20300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 86, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Sewing area Negative boundary"),//y可缝纫区域负边界 + 20300, S32_MIN, S32_MAX, 20300, 2, tr("mm"), tr(""), + tr(""), + 20300, 20300, 0x006D, operate)); + + //y可缝纫区域正边界, 范围S32_MIN--S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 87, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Sewing area Positive margin"),//y可缝纫区域正边界 + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 99300, 99300, 0x006E, operate)); + + //x可冲孔区域负边界, 范围S32_MIN--S32_MAX,默认56500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 88, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Can be perforated region Negative boundary"),//x可冲孔区域负边界 + 56500, S32_MIN, S32_MAX, 56500, 2, tr("mm"), tr(""), + tr(""), + 56500, 56500, 0x006F, operate)); + + //x可冲孔区域正边界, 范围S32_MIN--S32_MAX,默认178500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 89, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Can be perforated region Positive margin"),//x可冲孔区域正边界 + 178500, S32_MIN, S32_MAX, 178500, 2, tr("mm"), tr(""), + tr(""), + 178500, 178500, 0x0070, operate)); + + //y可冲孔区域负边界, 范围S32_MIN--S32_MAX,默认20300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 90, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Can be perforated region Negative boundary"),//y可冲孔区域负边界 + 20300, S32_MIN, S32_MAX, 20300, 2, tr("mm"), tr(""), + tr(""), + 20300, 20300, 0x0071, operate)); + + //y可冲孔区域正边界, 范围S32_MIN--S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 91, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Can be perforated region Positive margin"),//y可冲孔区域正边界 + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 99300, 99300, 0x0072, operate)); + + //缝纫右机头偏移X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 92, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing right head offset X"),//缝纫右机头偏移X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0073, operate)); + + //缝纫右机头偏移Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 93, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing right head offset Y"),//缝纫右机头偏移Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0074, operate)); + + //xy启动停止速度, 范围1-100,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 100, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY start stop speed"),//xy启动停止速度 + 10, 1, 100, 10, 0, tr("mm/s"), tr(""), + tr(""), + 10, 10, 0x007B, operate)); + + //xy归零运行速度, 范围1-100,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 101, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY zero running speed"),//xy归零运行速度 + 100, 1, 100, 100, 0, tr("mm/s"), tr(""), + tr(""), + 100, 100, 0x007C, operate)); + + //xy空走运行速度, 范围1-1000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 102, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY Idling speed"),//xy空走运行速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), + 300, 300, 0x007D, operate)); + + //xy行走加速度, 范围1-10000,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 103, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY walking acceleration"),//xy行走加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), + 1000, 1000, 0x007E, operate)); + + //xy刹车加速度, 范围1-10000,默认10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 104, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY brake acceleration"),//xy刹车加速度 + 10000, 1, 10000, 10000, 0, tr("mm/s2"), tr(""), + tr(""), + 10000, 10000, 0x007F, operate)); + + //xy手动移动速度1, 范围1-1000,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 105, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 1"),//xy手动移动速度1 + 10, 1, 1000, 10, 0, tr("mm/s"), tr(""), + tr(""), + 10, 10, 0x0080, operate)); + + //xy手动移动速度2, 范围1-1000,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 106, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 2"),//xy手动移动速度2 + 100, 1, 1000, 100, 0, tr("mm/s"), tr(""), + tr(""), + 100, 100, 0x0081, operate)); + + //xy手动移动速度3, 范围1-1000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 107, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 3"),//xy手动移动速度3 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), + 300, 300, 0x0082, operate)); + + //xy最高移动速度, 范围1-1000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 108, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY maximum moving speed"),//xy最高移动速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), + 300, 300, 0x0083, operate)); + + //主轴启动停止转速, 范围1-300,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 109, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle start stop speed"),//主轴启动停止转速 + 100, 1, 300, 100, 0, tr("r/min"), tr(""), + tr(""), + 100, 100, 0x0084, operate)); + + //主轴归零转速, 范围1-3000,默认120 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 110, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle zero return speed"),//主轴归零转速 + 120, 1, 3000, 120, 0, tr("r/min"), tr(""), + tr(""), + 120, 120, 0x0085, operate)); + + //主轴运转转速, 范围1-3000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 111, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle running speed"),//主轴运转转速 + 300, 1, 3000, 300, 0, tr("r/min"), tr(""), + tr(""), + 300, 300, 0x0086, operate)); + + //主轴运转加速度, 范围1-100,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 112, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle running acceleration"),//主轴运转加速度 + 50, 1, 100, 50, 0, tr("r/ss"), tr(""), + tr(""), + 50, 50, 0x0087, operate)); + + //主轴刹车加速度, 范围1-100,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 113, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle brakes acceleration"),//主轴刹车加速度 + 100, 1, 100, 100, 0, tr("r/ss"), tr(""), + tr(""), + 100, 100, 0x0088, operate)); + + //主轴缝纫最高转速, 范围1-3000,默认1200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 114, 0, 0, PARA_VALUE_TYPE_INT, + tr("sewing maximum speed"),//主轴缝纫最高转速 + 1200, 1, 3000, 1200, 0, tr("r/min"), tr(""), + tr(""), + 1200, 1200, 0x0089, operate)); + + //机头升降起停速度, 范围1-250,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 115, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift start end speed"),//机头升降起停速度 + 10, 1, 250, 10, 0, tr("mm/s"), tr(""), + tr(""), + 10, 10, 0x008A, operate)); + + //机头升降归零速度, 范围1-250,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 116, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift and zero speed"),//机头升降归零速度 + 50, 1, 250, 50, 0, tr("mm/s"), tr(""), + tr(""), + 50, 50, 0x008B, operate)); + + //机头升降行走速度, 范围1-250,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 117, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift walk speed"),//机头升降行走速度 + 200, 1, 250, 200, 0, tr("mm/s"), tr(""), + tr(""), + 200, 200, 0x008C, operate)); + + //机头升降行走加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 118, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift acceleration"),//机头升降行走加速度 + 500, 1, 10000, 500, 0, tr("mm/s2"), tr(""), + tr(""), + 500, 500, 0x008D, operate)); + + //机头升降刹车加速度, 范围1-10000,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 119, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head movements brake acceleration"),//机头升降刹车加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), + 1000, 1000, 0x008E, operate)); + + //主轴归零补偿角度, 范围-1000-1000,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 146, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle zero compensation angle"),//主轴归零补偿角度 + 200, -1000, 1000, 200, 0, cod->toUnicode("°"), tr(""), + tr(""), + 200, 200, 0x00A7, operate)); + + //X轴归零补偿, 范围-1000-1000,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 147, 0, 0, PARA_VALUE_TYPE_INT, + tr("X compensation angle"),//X轴归零补偿 + 200, -1000, 1000, 200, 0, cod->toUnicode("°"), tr(""), + tr(""), + 200, 200, 0x00A8, operate)); + + //Y轴归零补偿, 范围-1000-1000,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 148, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y compensation angle"),//Y轴归零补偿 + 200, -1000, 1000, 200, 0, cod->toUnicode("°"), tr(""), + tr(""), + 200, 200, 0x00A9, operate)); + + //X间隙补偿, 范围-200-200,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("X gap compensation"),//X间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BC, operate)); + + //Y间隙补偿, 范围-200-200,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y gap compensation"),//Y间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BD, operate)); + + //画笔偏移X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 200, 0, 0, PARA_VALUE_TYPE_INT, + tr("Brush offset X"),//画笔偏移X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BE, operate)); + + //画笔偏移Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 201, 0, 0, PARA_VALUE_TYPE_INT, + tr("Brush offset Y"),//画笔偏移Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BF, operate)); + + //进料编码器系数分子, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 204, 0, 0, PARA_VALUE_TYPE_INT, + tr("Encoder coefficient molecule"),//进料编码器系数分子 + 0, S32_MIN, S32_MAX, 0, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x00C2, operate)); + + //进料编码器系数分母, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 205, 0, 0, PARA_VALUE_TYPE_INT, + tr("Encoder coefficient denominator"),//进料编码器系数分母 + 0, S32_MIN, S32_MAX, 0, 0, tr(""), tr(""), + tr(""), + 0, 0, 0x00C3, operate)); +} + +//工作参数 +void PunchSewMachine::initWkParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + // 主轴缝纫工作转速, 范围 1--2000,单位r/min,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 0, 0, 0, PARA_VALUE_TYPE_INT, + tr("sewing work speed"),// 主轴缝纫工作转速 + 1000, 1, 2000, 1000, 0, tr("r/min"), tr(""), + tr(""), 1000, 1000, 0x0100, operate)); + + // 主轴剪线转速, 范围 1--500,单位r/min,默认120 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 1, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle Cut line speed"),// 主轴剪线转速 + 120, 1, 500, 120, 0, tr("r/min"), tr(""), + tr(""), 120, 120, 0x0101, operate)); + + // 主轴回针转速, 范围 1--500,单位r/min,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 2, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle Back needle speed"),// 主轴回针转速 + 200, 1, 500, 200, 0, tr("r/min"), tr(""), + tr(""), 200, 200, 0x0102, operate)); + + // 主轴启动慢动转速, 范围 1--500,单位r/min,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 3, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle start slow speed"),// 主轴启动慢动转速 + 200, 1, 500, 200, 0, tr("r/min"), tr(""), + tr(""), 200, 200, 0x0103, operate)); + + // 倒车等效主轴转速, 范围 1--3000,单位r/min,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 4, 0, 0, PARA_VALUE_TYPE_INT, + tr("Reverse equivalent spindle speed"),// 倒车等效主轴转速 + 1000, 1, 3000, 1000, 0, tr("r/min"), tr(""), + tr(""), 1000, 1000, 0x0104, operate)); + + // 缝纫动框方式, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 5, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing moving frame"),// 缝纫动框方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Continuous:0;Intermittent:1"), 0, 0, 0x0105, operate));//连续:0;间歇式:1 + + // 缝纫加减速方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 5, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing acceleration and deceleration mode"),// 缝纫加减速方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No acceleration or deceleration:0;Xy sine acceleration and deceleration:1"), //无加速或减速:0;Xy正弦加速度和减速度:1 + 1, 1, 0x0106, operate)); + + // 缝纫机头旋转方式, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 5, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing machine head rotating manner"),// 缝纫机头旋转方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Continuous rotation:0;Xy intermittent rotation:1"),//连续旋转:0;Xy间歇旋转:1 + 0, 0, 0x0107, operate)); + + // 缝纫机头加减速方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 5, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing head deceleration mode"),// 缝纫机头加减速方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No acceleration or deceleration:0;Intermittent acceleration and deceleration:1"), //无加速或减速:0;间歇加减速:1 + 1, 1, 0x0108, operate));//无加速或减速:0;间歇加减速:1 + + // 缝纫动框起始角度, 范围 0--36000,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 6, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing movable frame starting angle"),// 缝纫动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), 24000, 24000, 0x0109, operate)); + + // 缝纫动框持续角度, 范围 0--36000,默认 15000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 7, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing movable frame duration angle"),// 缝纫动框持续角度 + 15000, 0, 36000, 15000, 2, cod->toUnicode("°"), tr(""), + tr(""), 15000, 15000, 0x010A, operate)); + + // 起针慢动针数, 范围 0--10,默认 3 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 8, 0, 0, PARA_VALUE_TYPE_INT, + tr("Start low speed needls"),// 起针慢动针数 + 3, 0, 10, 3, 0, tr("Needles"), tr(""), + tr(""), 3, 3, 0x010B, operate)); + + // 起针动作松线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 9, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Needle action loose line allowed"),// 起针动作松线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x010C, operate)); + + // 起针动作顶线允许 0, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 9, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Needle action top line allowed"),// 起针动作顶线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x010D, operate)); + + // 起针动作夹线允许 0, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 9, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Needle action clamp line allowed"),// 起针动作夹线允许 0 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x010E, operate)); + + // 绣花起针夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 9, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Allow to embroider line allowed"),// 绣花起针夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0110, operate)); + + // 剪线允许, 范围 0--2,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 10, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Cut lines allow"),// 剪线允许 + 1, 0, 2, 1, 0, tr(""), tr(""), + tr("Do not trim: 0;Automatic thread trim:1;Data trim:2"),//不剪线:0;自动剪线:1;数据剪线:2 + 1, 1, 0x0111, operate)); + + // 剪线分线角度, 范围 0--36000,默认 20000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 11, 0, 0, PARA_VALUE_TYPE_INT, + tr("Trimming line angle"),// 剪线分线角度 + 20000, 0, 36000, 20000, 2, cod->toUnicode("°"), tr(""), + tr(""), 20000, 20000, 0x0112, operate)); + + // 剪线完成角度, 范围 0--36000,默认 6000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 12, 0, 0, PARA_VALUE_TYPE_INT, + tr("Trimming completion angle"),// 剪线完成角度 + 6000, 0, 36000, 6000, 2, cod->toUnicode("°"), tr(""), + tr(""), 6000, 6000, 0x0113, operate)); + + // 剪线时动作松线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 13, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Action loosening when thread trimming"),// 剪线时动作松线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0114, operate)); + + // 剪线时动作拉线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 13, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Action wire pull when thread trimming"),// 剪线时动作拉线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0115, operate)); + + // 剪线时动作夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 13, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Action clip line allows when trimming"),// 剪线时动作夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作提升压脚允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 13, 4, 0, PARA_VALUE_TYPE_LIST, + tr("The action of lifting the presser foot during thread cutting is allowed"),// 剪线时动作提升压脚允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作提升机头剪线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 13, 5, 0, PARA_VALUE_TYPE_LIST, + tr("The action of lifting the machine head during thread cutting allows for thread cutting"),// 剪线时动作提升机头剪线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作提升机头夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 13, 6, 0, PARA_VALUE_TYPE_LIST, + tr("The action of lifting the machine head during thread cutting allows for thread clamping"),// 剪线时动作提升机头夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作在压脚下勾线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 13, 7, 0, PARA_VALUE_TYPE_LIST, + tr("When cutting the thread, the action is allowed to hook the thread under the pressure foot"),// 剪线时动作在压脚下勾线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作退针允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 13, 8, 0, PARA_VALUE_TYPE_LIST, + tr("Allowing for needle withdrawal during thread cutting"),// 剪线时动作退针允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作勾线时松线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 13, 9, 0, PARA_VALUE_TYPE_LIST, + tr("Action during thread cutting allows for thread loosening during thread hooking"),// 剪线时动作勾线时松线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作剪线后提升机头允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 13, 10, 0, PARA_VALUE_TYPE_LIST, + tr("During thread cutting, the action is allowed to lift the machine head after thread cutting"),// 剪线时动作剪线后提升机头允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + + // 断线检测针数, 范围 0--10,默认 3 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 14, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of broken wires"),// 断线检测针数 + 3, 0, 10, 3, 0, tr("Needles"), tr(""), + tr(""), 3, 3, 0x0117, operate)); + + // 断线检测主轴角度, 范围 0--36000,默认 3000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 15, 0, 0, PARA_VALUE_TYPE_INT, + tr("Broken line detection spindle angle"),// 断线检测主轴角度 + 3000, 0, 36000, 3000, 2, cod->toUnicode("°"), tr(""), + tr(""), 3000, 3000, 0x0118, operate)); + + // 换梭芯提醒功能, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 16, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Change bobbin Reminder function"),// 换梭芯提醒功能 + 0, 0, 3, 0, 0, tr(""), tr(""), //未启用:0;按长度划分的延迟提醒:1;按切片数计数:2;按长度立即提醒:3 + tr("Not:0;Delay reminder by length:1;Count by number of slices:2;Immediately reminder by length:3"), 0, 0, 0x0119, operate)); + + // 底线长度, 范围 0--S32_MAX,默认 10000000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 17, 0, 0, PARA_VALUE_TYPE_INT, + tr("Bottom line length"),// 底线长度 + 10000000, 0, S32_MAX, 10000000, 2, tr("mm"), tr(""), + tr(""), 10000000, 10000000, 0x011A, operate)); + + // 每针底线修正量, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 18, 0, 0, PARA_VALUE_TYPE_INT, + tr("Bottom line correction per stitch"),// 每针底线修正量 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x011B, operate)); + + // 换梭片数计数, 范围 0--1000,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 19, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of shuttles"),// 换梭片数计数 + 0, 0, 1000, 0, 0, tr("times"), tr(""), + tr(""), 0, 0, 0x011C, operate)); + + // 加油方式选择, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 20, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Refueling method selection"),// 加油方式选择 + 0, 0, 3, 0, 0, tr(""), tr(""),//不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + tr("No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3"), 0, 0, 0x011D, operate)); + + // 加油针数间隔, 范围 S32_MIN--S32_MAX,默认 10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 21, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling needles interval"),// 加油针数间隔 + 10000, S32_MIN, S32_MAX, 10000, 0, tr("Needles"), tr(""), + tr(""), 10000, 10000, 0x011E, operate)); + + // 加油时间间隔, 范围 1--S32_MAX,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 22, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling time interval"),// 加油时间间隔 + 1, 1, S32_MAX, 1, 0, tr("s"), tr(""), + tr(""), 1, 1, 0x011F, operate)); + + // 加油持续时长, 范围 1--S32_MAX,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 23, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling duration"),// 加油持续时长 + 1, 1, S32_MAX, 1, 0, tr("s"), tr(""), + tr(""), 1, 1, 0x0120, operate)); + + // 完成后停车位置选择, 范围 0--4,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 24, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Parking position selection after completion"),// 完成后停车位置选择 + 0, 0, 4, 0, 0, tr(""), tr(""), + tr("Current:0;Starting:1;Anchor:2;Feeding:3;Offset:4"),//当前点:0;起始点:1;定位点:2;上料点:3;偏移点:4 + 0, 0, 0x0121, operate)); + + // 偏移点坐标有效标志, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 25, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Offset point coordinate valid flag"),// 偏移点坐标有效标志 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Invalid:0;X is valid:1;Y is valid:2;XY is valid:3"),//无效:0;X有效:1;Y有效:2;XY同时有效:3 + 0, 0, 0x0122, operate)); + + // 偏移点坐标X, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 26, 0, 0, PARA_VALUE_TYPE_INT, + tr("Offset point coordinate X"),// 偏移点坐标X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0123, operate)); + + // 偏移点坐标Y, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 27, 0, 0, PARA_VALUE_TYPE_INT, + tr("Offset point coordinate Y"),// 偏移点坐标Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0124, operate)); + + // 穿线点坐标有效标志, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 28, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Threading point coordinate effective mark"),// 穿线点坐标有效标志 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Invalid:0;X is valid:1;Y is valid:2;XY is valid:3"),//无效:0;X有效:1;Y有效:2;XY同时有效:3 + 0, 0, 0x0125, operate)); + + // 穿线点坐标X, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 29, 0, 0, PARA_VALUE_TYPE_INT, + tr("Threading point coordinates X"),// 穿线点坐标X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0126, operate)); + + // 穿线点坐标 Y, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 30, 0, 0, PARA_VALUE_TYPE_INT, + tr("Threading point coordinates Y"),// 穿线点坐标Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0127, operate)); + + // 机头升降低位高度, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 31, 0, 0, PARA_VALUE_TYPE_INT, + tr("Machine head low position"),// 机头升降低位高度 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0128, operate)); + + // 机头升降高位高度, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 32, 0, 0, PARA_VALUE_TYPE_INT, + tr("Machine head heigh position"),// 机头升降高位高度 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0129, operate)); + + // 产量预设, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 33, 0, 0, PARA_VALUE_TYPE_INT, + tr("Production preset"),// 产量预设 + 0, 0, S32_MAX, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x012A, operate)); + + // 照明亮度, 范围 0--255,默认 128 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 34, 0, 0, PARA_VALUE_TYPE_INT, + tr("Illumination brightness"),// 照明亮度 + 128, 0, 255, 128, 0, tr(""), tr(""), + tr(""), 128, 128, 0x012B, operate)); + + // 缝纫加速度, 范围 1--100,默认 5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 36, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing acceleration"),// 缝纫加速度 + 5, 1, 100, 5, 0, tr("r/ss"), tr(""), + tr(""), 5, 5, 0x012D, operate)); + + // 剪线动框位移, 范围 1--1000,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 37, 0, 0, PARA_VALUE_TYPE_INT, + tr("Trimming frame displacement"),// 剪线动框位移 + 500, 1, 1000, 500, 2, tr("mm"), tr(""), + tr(""), 500, 500, 0x012E, operate)); + + // 缝纫吹气允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 38, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing blow allowed"),// 缝纫吹气允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, operate)); + + // 冲孔吹气允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 39, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Punching blow allowed"),// 冲孔吹气允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0130, operate)); + + // 吸尘器关闭延时, 范围 0--120,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 40, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner off delay"),// 吸尘器关闭延时 + 0, 0, 120, 0, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x0131, operate)); + + // 冲孔主轴转速, 范围 1--1200,默认 1200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 41, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle speed"),// 冲孔主轴转速 + 1200, 1, 1200, 1200, 0, tr("r/min"), tr(""), + tr(""), 1200, 1200, 0x0132, operate)); + + // 冲孔加速度, 范围 1--100,默认 20 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 42, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching acceleration"),// 冲孔加速度 + 20, 1, 100, 20, 0, tr("r/min"), tr(""), + tr(""), 20, 20, 0x0133, operate)); + + // 冲孔动框方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 43, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Punching movable frame mode"),// 冲孔动框方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("AContinuous:0;BIntermittent:1"), 0, 0, 0x0134, operate));//连续式:0;间歇式:1 + + // 冲孔加减速方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 43, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Punching acceleration and deceleration mode"),// 冲孔加减速方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No acceleration or deceleration:0;XY sine acceleration and deceleration:1"), 0, 0, 0x0135, operate));//无加速或减速:0;XY正弦加速度和减速度:1 + + // 冲孔动框起始角度, 范围 0--36000,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 44, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching frame starting angle"),// 冲孔动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), 24000, 24000, 0x0136, operate)); + + // 冲孔动框持续角度, 范围 0--36000,默认 15000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 45, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching frame continuous angle"),// 冲孔动框持续角度 + 15000, 0, 36000, 15000, 2, cod->toUnicode("°"), tr(""), + tr(""), 15000, 15000, 0x0137, operate)); + + // 缝纫间越框机头升降, 范围 0--max,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 46, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing move head up down"),// 缝纫间越框机头升降 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0138, operate)); + + // 冲孔间越框机头升降, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 47, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Punching move head up down"),// 冲孔间越框机头升降 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0139, operate)); + + // 移框松线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 48, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Moving basket Loose line"),// 移框松线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013A, operate)); + + // 移框夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 48, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Moving basket Clamp line"),// 移框夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013B, operate)); + + // 软件限位XY移动允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 49, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit XY move allowed"),// 软件限位XY移动允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013C, operate)); + + // 软件限位缝纫头升降允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 49, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit sewing head lifting allowed"),// 软件限位缝纫头升降允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013D, operate)); + + // 软件限位冲孔头升降允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 49, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit punch head lifting allowed"),// 软件限位冲孔头升降允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013E, operate)); + + // 软件限位裁刀机头升降允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 49, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit cutter head lift allowed"),// 软件限位裁刀机头升降允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0140, operate)); + + // 软件限位冲孔落杆限制允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 49, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit Punch drop allowed"),// 软件限位冲孔落杆限制允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0141, operate)); + + // 软件限位绣花落杆限制允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 49, 6, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit embroidery falling pole allowed"),// 软件限位绣花落杆限制允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0142, operate)); + + // 面线勾线针数, 范围 0--5,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 52, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of Facial line hook"),// 面线勾线针数 + 1, 0, 5, 1, 0, tr("Needles"), tr(""), + tr(""), 1, 1, 0x0145, operate)); + + // 剪线动框方向, 范围 0--4,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 57, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Trimming frame direction"),// 剪线动框方向 + 0, 0, 4, 0, 0, tr(""), tr(""), + tr("Stop:0;Left:1;Forward:2;Right:3;Backward:4"), 0, 0, 0x014A, operate));// 禁止移动:0;左:1;前:2;右:3;后:4 + + // 主轴拐角转速, 范围 1--3000,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 59, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle corner speed"),// 主轴拐角转速 + 1000, 1, 3000, 1000, 0, tr("r/min"), tr(""), + tr(""), 1000, 1000, 0x014C, operate)); + + // 降速最小偏差角度, 范围 0--180,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 60, 0, 0, PARA_VALUE_TYPE_INT, + tr("Minimum speed deviation angle"),// 降速最小偏差角度 + 0, 0, 180, 0, 0, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x014D, operate)); + + // 提前降速针数, 范围 S32_MIN--S32_MAX,默认 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 61, 0, 0, PARA_VALUE_TYPE_INT, + tr("Advanced dropout number"),// 提前降速针数 + 2, S32_MIN, S32_MAX, 2, 0, tr("Needles"), tr(""),//针数 + tr(""), 2, 2, 0x014E, operate)); + + // 延迟提速针数, 范围 S32_MIN--S32_MAX,默认 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 62, 0, 0, PARA_VALUE_TYPE_INT, + tr("Delay speed number"),// 延迟提速针数 + 2, S32_MIN, S32_MAX, 2, 0, tr("Needles"), tr(""),//针数 + tr(""), 2, 2, 0x014F, operate)); + + // 缝纫机头工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 65, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Working permission of sewing machine head"),// 缝纫机头工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0152, operate)); + + // 冲孔机头工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 65, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Work permit of punch head"),// 冲孔机头工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0153, operate)); + + // 绣花机头工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 65, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Embroidery machine head work permit"),// 绣花机头工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0154, operate)); + + // 开机自动找零, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 67, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Auto Zero after power on"),// 开机自动归零 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0155, operate)); + + // 换色启动方式,0,自动换色,自动启动;1,自动换色,手动启动;2,手动换色,手动启动 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 71, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Color change start method"),//换色启动方式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2"), + 0, 0, 0x015D, operate)); + + // X绣框换向补偿, 范围 -100--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("X frame commutation compensation"),// X绣框换向补偿 + 0, -100, 100, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x015E, operate)); + + // Y绣框换向补偿, 范围 -100--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y frame commutation compensation"),// Y绣框换向补偿 + 0, -100, 100, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x015F, operate)); + + // 冲孔跳针变越框针数 ,范围0-100,单位,针,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 79, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching jump stitches to change the number of stitches beyond the frame"),// 冲孔跳针变越框针数 + 5, 0, 100, 5, 0, tr("Needles"), tr(""), + tr(""), 5, 5, 0x0160, operate)); + + // 冲孔点动模式, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 80, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Punching jog mode"),// 冲孔点动模式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Lock rotate:0;rotate Lock:1"), 0, 0, 0x0161, operate));//0,先锁头,再旋转;1,先旋转,再锁头 + + // 倒车工作模式, 范围 0--2,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 81, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Reverse operation mode"),// 倒车工作模式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("normal:0;click:1;continue click:2"), 0, 0, 0x0162, operate));//0,普通模式;1,点动模式;2,持续点动模式 + + // 特殊针位选择, 范围 0--9,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 82, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle choose"),// 特殊针位选择 + 0, 0, 9, 0, 0, tr(""), tr(""), + tr("nothing:0;one:1;two:2;three:3;four:4;five:5;six:6;seven:7;eight:8;nine:9"), 0, 0, 0x0163, operate));//0,无;1-9,1-9针位 + + // 特殊针位功能, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 83, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle function"),// 特殊针位功能 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Carved hole:0;paint brush:1"), 0, 0, 0x0164, operate));//0,雕孔;1,画笔 + + // 吸尘器启动延时, 范围 0--S32_MAX,单位秒,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 84, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner start delay"),// 吸尘器启动延时 + 0, 0, S32_MAX, 0, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x0165, operate)); + + // 拉料偏移值, 范围0-500000,默认90000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 89, 0, 0, PARA_VALUE_TYPE_INT, + tr("Drawing offset value"),// 拉料偏移值 + 90000, 0, 500000, 90000, 0, tr(""), tr(""), + tr(""), 90000, 90000, 0x0166, operate)); + + // 换色速度,范围1-2000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 99, 0, 0, PARA_VALUE_TYPE_INT, + tr("Color change speed"),// 换色速度 + 200, 1, 2000, 200, 0, tr("mm/s"), tr(""), + tr(""), 200, 200, 0x0167, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 1, 0, PARA_VALUE_TYPE_SW, + tr("first head"),// 第一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0170, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 2, 0, PARA_VALUE_TYPE_SW, + tr("second head"),// 第二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0171, operate)); + + // 安全输入光幕允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Secure input light curtain allows"),// 安全输入光幕允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0169, operate)); + + // 安全输入气压允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Safety input pressure allowed"),// 安全输入气压允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x016A, operate)); + + // 安全输入上电信号允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Safe input power-on signal allowed"),// 安全输入上电信号允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x016B, operate)); + + // 安全输入安全门允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 101, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Safe input emergency door allowed"),// 安全输入安全门允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x016C, operate)); + + // 线迹偏移允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 104, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Stitch offset allows"),// 线迹偏移允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x016E, factory)); + + // 循环工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 105, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Loop work allowed"),// 循环工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x016F, factory)); + + // 梭加油持续时长, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 110, 0, 0, PARA_VALUE_TYPE_INT, + tr("Shuttle refueling duration"),// 梭加油持续时长 + 0, 0, S32_MAX, 0, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x0173, factory)); + + // 中心点坐标X,范围-1000000--1000000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 142, 0, 0, PARA_VALUE_TYPE_INT, + tr("Center point coordinate X"),// 中心点坐标X + 0, -1000000, 1000000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0182, factory)); + + // 中心点坐标Y,范围-1000000--1000000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 143, 0, 0, PARA_VALUE_TYPE_INT, + tr("Center point coordinate Y"),// 中心点坐标Y + 0, -1000000, 1000000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0182, factory)); + + + // 针梭单传感器,0,双传感器,1,单传感器 + // bit0, 缝纫主轴 + // bit1, 绣花主轴 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 147, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing spindle needle shuttle single sensor"),// 缝纫主轴针梭单传感器 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Dual Sensor:0;Single sensor:1"), 0, 0, 0x0182, operate)); + + // 冲孔主轴启动慢动转速, 范围 1--2000,单位r/min,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 169, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle start slow speed"),// 冲孔主轴启动慢动转速 + 500, 1, 2000, 500, 0, tr("r/min"), tr(""), + tr(""), 500, 500, 0x0182, operate)); + + // 缝纫运行速度1, 范围1--5000,单位r/min,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 170, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing speed 1"),// 缝纫运行速度1 + 500, 1, 5000, 500, 0, tr("r/min"), tr(""), + tr(""), 500, 500, 0x0183, operate)); + + // 缝纫运行速度2, 范围1--5000,单位r/min,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 171, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing speed 2"),// 缝纫运行速度2 + 1000, 1, 5000, 1000, 0, tr("r/min"), tr(""), + tr(""), 1000, 1000, 0x0184, operate)); + + // 缝纫运行速度3, 范围1--5000,单位r/min,默认 1500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 172, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing speed 3"),// 缝纫运行速度3 + 1500, 1, 5000, 1500, 0, tr("r/min"), tr(""), + tr(""), 1500, 1500, 0x0185, operate)); + + // X工作范围, 范围 0--500000,默认 90000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 174, 0, 0, PARA_VALUE_TYPE_INT, + tr("X working range"),// X工作范围 + 90000, 0, 500000, 90000, 2, tr("mm"), tr(""), + tr(""), 90000, 90000, 0x0186, operate)); + + // Y工作范围, 范围 0--5000000,默认 60000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y working range"),// Y工作范围 + 60000, 0, 500000, 60000, 2, tr("mm"), tr(""), + tr(""), 60000, 60000, 0x0187, operate)); + + // 冲孔动框最高速度,范围1-1000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum speed of punching frame"),// 冲孔动框最高速度 + 200, 1, 1000, 200, 0, tr("mm/s"), tr(""), + tr(""), 200, 200, 0x0188, operate)); + + // 更换冲头计数值,范围0-1000000,单位 次,默认500000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 178, 0, 0, PARA_VALUE_TYPE_INT, + tr("Replace the punch count value"),// 更换冲头计数值 + 500000, 0, 1000000, 500000, 0, tr("times"), tr(""),//次 + tr(""), 500000, 500000, 0x0189, operate)); + + // 冲孔运针变跳针长度,范围0-2000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 180, 0, 0, PARA_VALUE_TYPE_INT, + tr("Length of punching needle changing to skipping needle"),// 冲孔运针变跳针长度 + 0, 0, 2000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔吸尘器启动持续时间,范围0-100,单位s,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 181, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching vacuum cleaner start duration"),// 冲孔吸尘器启动持续时间 + 5, 0, 100, 5, 0, tr("s"), tr(""), + tr(""), 5, 5, 0x018B, operate)); + + // 冲孔吸尘器启动间隔,范围0-500,单位s,默认60 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 182, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching vacuum cleaner start interval"),// 冲孔吸尘器启动间隔 + 60, 0, 500, 60, 0, tr("s"), tr(""), + tr(""), 60, 60, 0x018C, operate)); + + // 冲孔主轴归零补偿,-10000--10000,单位0.01度,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 184, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle zeroing compensation"),// 冲孔主轴归零补偿 + 0, -10000, 10000, 0, 0, cod->toUnicode("°"), tr(""),//虚拟机上识别不了,转换成可以得 + tr(""), 0, 0, 0x018D, operate)); + + // 冲孔换色间距,范围0-10000,单位mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 186, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching color change spacing"),// 冲孔换色间距 + 0, 0, 10000, 0, 0, tr("mm"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 226, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 4-5mm"),// 冲孔运行速度限制 4-5mm + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 227, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 5-6mm"),// 冲孔运行速度限制 5-6mm + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 228, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 6-7mm"),// 冲孔运行速度限制 6-7mm + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 229, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 7-8mm"),// 冲孔运行速度限制 7-8mm + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 230, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 8-9mm"),// 冲孔运行速度限制 8-9mm + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 231, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 9-14mm"),// 冲孔运行速度限制 9-14mm + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); + + // 冲孔运行速度限制,单位r/min,范围0-3000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 232, 0, 0, PARA_VALUE_TYPE_INT, + tr("speed limit 14+mm"),// 冲孔运行速度限制 14+mm + 0, 0, 3000, 0, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x018A, operate)); +} +//电机和控制动作 +void PunchSewMachine::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("Sewing 1 needle spindle motor"),MT_LM,// 缝纫1针梭电机(主轴) 以下是lxs新加的 + 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("Sewing 1 needle motor"),MT_LN,// 缝纫1针电机 + 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,0x0005,tr("Sewing 1 shuttle motor"),MT_LH,// 缝纫1梭电机 + 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,0x000B,tr("Punching 1 spindle"),MT_LPM,// 冲孔1主轴 + 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));\ + + //等于冲缝机并为2头 + if(g_emMacType == MACHINE_PUNCH_SEW && g_emProductType == PRODUCT_PUNCHSEW_TWOHEAD) + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000C,tr("Punching 2 spindle"),MT_LP2,// 冲孔2主轴 + 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,0x0013,tr("Sew spindle 2 Motor"),MT_LM2,// 缝纫2针梭电机 + 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,0x001D,tr("Sew shuttle motor 2"),MT_LH2,// 缝纫梭电机2 + 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,0x001E,tr("Sew needle motor 2"),MT_LN2,// 缝纫针电机2 + 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,0x0027,tr("Punching color changing motor"),MT_LPS,// 冲孔换色电机 + 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)); + + //等于冲缝机并为2头 + if(g_emMacType == MACHINE_PUNCH_SEW && g_emProductType == PRODUCT_PUNCHSEW_TWOHEAD) + { + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0045,tr("Punching color change motor 2"),MT_LPS2,// 冲孔换色电机2 + 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("Sewing 1 cut"),OT_DCUT_THREAD,// 缝纫1下剪刀剪线 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + openStr,true,OUTCONTROL_OPEN,-1,-1, + closeStr,true,OUTCONTROL_CLOSE,-1,-1)); + + + //等于冲缝机并为2头 + if(g_emMacType == MACHINE_PUNCH_SEW && g_emProductType == PRODUCT_PUNCHSEW_TWOHEAD) + { + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0009,tr("Middle 1 foot"),OT_MID_FOOT,// 缝纫1中压脚 + "",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,0x0001,tr("Head 1 elastic thread 1"),OT_LOOSE_THREAD,// 机头1松紧线1 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + relaxStr,true,OUTCONTROL_OPEN,-1,-1, + clampStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0001,tr("Head 1 elastic thread 2"),OT_LOOSE_UTRD2,// 机头1松紧线2 + "",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,0x000A,tr("Bobbin 1 thread"),OT_PUSH_BTRD,// 缝纫1扣底线 + "",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,0x000C,tr("Clamp 1 line"),OT_CLIP_UTRD,// 缝纫1夹面线 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + clampStr,true,OUTCONTROL_OPEN,-1,-1, + relaxStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0024,tr("Hook 1 stretch"),OT_CLIP_EXTEND,// 缝纫1勾线-伸缩 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + outStr,true,OUTCONTROL_OPEN,-1,-1, + backStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0026,tr("Line 1 hook"),OT_CLIP_OPEN,// 缝纫1勾线-开合 + "",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("Sewing 1 oiling"),OT_OIL,// 缝纫1加油 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + startStr,true,OUTCONTROL_OPEN,-1,-1, + stopStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000E,tr("Sewing 1 head lifting"),OT_SEW_LIFT,// 缝纫1机头升降(para = 1) + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + upStr,true,MOTORHEADO_UP,-1,-1, + downStr,true,MOTORHEADO_DOWN,-1,-1)); + + //等于冲缝机并为2头 + if(g_emMacType == MACHINE_PUNCH_SEW && g_emProductType == PRODUCT_PUNCHSEW_TWOHEAD) + { + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0013,tr("Scissors 2 cut"),OT_DCUT_THREAD_R,// 缝纫2下剪刀剪线 + "",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,0x0015,tr("Middle 2 foot"),OT_MID_FOOT_R,// 缝纫2中压脚 + "",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,0x0016,tr("Bobbin 2 thread"),OT_PUSH_BTRD_R,// 缝纫2扣底线 + "",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,0x0018,tr("Clamp 2 line"),OT_CLIP_UTRD_R,// 缝纫2夹面线 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + clampStr,true,OUTCONTROL_OPEN,-1,-1, + relaxStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0019,tr("Head 2 elastic thread 1"),OT_HEAD_R_LOOSE_THREAD,// 机头2松紧线1 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + relaxStr,true,OUTCONTROL_OPEN,-1,-1, + clampStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0019,tr("Head 2 elastic thread 2"),OT_HEAD_R_LOOSE_UTRD2,// 机头2松紧线2 + "",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,0x0025,tr("Hook 2 stretch"),OT_CLIP_EXTEND_R,// 缝纫2勾线-伸缩 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + outStr,true,OUTCONTROL_OPEN,-1,-1, + backStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0027,tr("Line 2 hook"),OT_CLIP_OPEN_R,// 缝纫2勾线-开合 + "",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,0x0028,tr("Sewing 2 oiling"),OT_OIL_R,// 缝纫2加油 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + startStr,true,OUTCONTROL_OPEN,-1,-1, + stopStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000E,tr("Sewing 2 head lifting"),OT_SEW_LIFT,// 缝纫2机头升降(para = 2) + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + upStr,true,MOTORHEADT_UP,-1,-1, + downStr,true,MOTORHEADT_DOWN,-1,-1)); + + } + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0007,tr("Vacum cleaner"),OT_CLEANER,// 吸尘器 + "",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 PunchSewMachine::initShortCutList() +{ + m_allShortCutList.clear(); + + m_allShortCutList.append(makeAShortCutItem(0,0x0001,tr("All To Zero"),"buttonAllToZero",FUN_ALLTOZERO));//全部归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0002,tr("Punch Spindle Jog"),"buttonSpindleJog",FUN_PUNCHSPINDLEJOG));//冲孔主轴点动 + m_allShortCutList.append(makeAShortCutItem(0,0x0003,tr("Punch Spindle Test"),"buttonSpindleTest",FUN_SPINDLETEST));//冲孔主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x0004,tr("Sew Spindle Test"),"buttonSpindleTest",FUN_SEWSPINDLETEST));// 缝纫主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x0005,tr("Sew Head Up Dn"),"buttonHeadUpDn",FUN_SEWMOTORUPDOWN));//缝纫机头升降 + m_allShortCutList.append(makeAShortCutItem(0,0x0006,tr("Sew Spindle Jog"),"buttonSpindleJog",FUN_SEWSPINDLEJOG));//缝纫主轴点动 + m_allShortCutList.append(makeAShortCutItem(0,0x0007,tr("Sew Hook Position"),"buttonSewHookPosi",FUN_SEWHOOKPOSITION));//缝纫主轴去勾线位 + m_allShortCutList.append(makeAShortCutItem(0,0x0008,tr("Head 1 trim"),"buttonManualTrim",FUN_SEWHEADCUTLINEO));//机头1剪线 + + //等于冲缝机并为2头 + if(g_emMacType == MACHINE_PUNCH_SEW && g_emProductType == PRODUCT_PUNCHSEW_TWOHEAD) + { + m_allShortCutList.append(makeAShortCutItem(0,0x0009,tr("Head 2 trim"),"buttonManualTrim1",FUN_SEWHEADCUTLINET));//机头2剪线 + + } + + m_allShortCutList.append(makeAShortCutItem(0,0x000A,tr("Set Offset"),"buttonSetOffsetPoint",FUN_SETOFFSETPOINT));//定偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x000B,tr("Back Offset"),"buttonBackOffsetPoint",FUN_BACKOFFSETPOINT));//回偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x000C,tr("Sew Anchor"),"buttonSetAnchorPoint",FUN_SETANCHORPOINT));//缝纫定定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x000D,tr("Punch Anchor"),"buttonSetAnchorPoint",FUN_SECSETANCHORPOINT));//冲孔定定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x000E,tr("Back Anchor"),"buttonBackAnchorPoint",FUN_BACKANCHORPOINT));//回定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x000F,tr("To Work Point"),"buttonBackWorkPoint",FUN_BACKWORKPOINT));//回工作点 + m_allShortCutList.append(makeAShortCutItem(0,0x0011,tr("Check Frame"),"buttonBorderCheck",FUN_CHECKFRAME));//边框检查 + m_allShortCutList.append(makeAShortCutItem(0,0x0012,tr("Punch Change Tool"),"buttonManualChangeColor",FUN_PUNCHMANUALCHANGECOLOR));//手动换色 + m_allShortCutList.append(makeAShortCutItem(0,0x0013,tr("Forward And Back"),"buttonForwardOrBack",FUN_FORWARDORBACK));//前进回退 + // m_allShortCutList.append(makeAShortCutItem(0,0x0014,tr("ProcessReset"),"buttonProcessReset",FUN_PROCESSRESET));//流程复位 + m_allShortCutList.append(makeAShortCutItem(0,0x0015,tr("Needle shuttle proofread"),"buttonNeedleTest",FUN_NEEDLECONTRAST));//针梭校对 + m_allShortCutList.append(makeAShortCutItem(0,0x0016,tr("Single Punch"),"buttonSinglePunch",FUN_SINGLEPUNCH));//单次冲孔 + // m_allShortCutList.append(makeAShortCutItem(0,0x0017,tr("FrameZero"),"buttonFrameZero",FUN_FRAMEZERO));//框架归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0018,tr("To Right Up"),"buttonMoveToRightUp",FUN_MOVETORIGHTUP));//去右上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0019,tr("To Right Down"),"buttonMoveToRightDown",FUN_MOVETORIGHTDOWN));//去右下角 + m_allShortCutList.append(makeAShortCutItem(0,0x001A,tr("To Left Up"),"buttonMoveToLeftUp",FUN_MOVETOLEFTUP));//去左上角 + m_allShortCutList.append(makeAShortCutItem(0,0x001B,tr("To Left Down"),"buttonMoveToLeftDown",FUN_MOVETOLEFTDOWN));//去左下角 + m_allShortCutList.append(makeAShortCutItem(0,0x001C,tr("Scope Work"),"buttonSetWorkRange",FUN_SETWORKRANGE));//定工作范围 + m_allShortCutList.append(makeAShortCutItem(0,0x001D,tr("Punch Stop Lower"),"buttonPunchStopLower",FUN_PUNCHSTOPLOWER));//冲头停下位 + m_allShortCutList.append(makeAShortCutItem(0,0x001E,tr("Switch Sew Head"),"buttonSewHead",FUN_SELECTSEWHEAD));//切换缝纫机头 + m_allShortCutList.append(makeAShortCutItem(0,0x001F,tr("Switch Punch Head"),"buttonPunchHead",FUN_SELECTPUCNHHEAD));//切换冲孔机头 + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("To Center point"),"buttonToCenterDot",FUN_RETURNTOCENTERPOINT));//回中心点 +} + +//辅助功能 +void PunchSewMachine::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));//网络管理 + s16 wifi = g_pSettings->readFromIniFile("HMI/wifi").toInt();//是否有wifi + if(wifi == 1) + { + m_allAssistList.append(makeAAssistItem(0,0x000A,tr("WIFI"),"buttonWIFI",ASSIST_WIFI));//WIFI管理 + } + 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,0x000D,tr("ShortcutSet"),"buttonCommonFunction",ASSIST_SHORTCUTSET));//常用设置 + m_allAssistList.append(makeAAssistItem(0,0x000E,tr("Productnum"),"buttonProductStatistics",ASSIST_PRODUCTSTATICS));//生产统计 + m_allAssistList.append(makeAAssistItem(0,0x000F,tr("Version"),"buttonVersionInfo",ASSIST_MCVERSION));//版本信息 + m_allAssistList.append(makeAAssistItem(0,0x0010,tr("CountReset"),"buttonBottomCountReset",ASSIST_BOTTOMLINECOUNTRESET));//底线计数复位 + m_allAssistList.append(makeAAssistItem(0,0x0014,tr("Root"),"buttonRoot",ASSIST_ROOT));//超级用户 +} + +//花样设置 +void PunchSewMachine::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,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));//花样删除 +} + +//参数分类(参数分组功能) +void PunchSewMachine::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 PunchSewMachine::initSensorList() +{ + QList sensorList; + + sensorList.append(makeASensorItem(0x0000, 0, tr("Start button 1")));//启动按钮1 + sensorList.append(makeASensorItem(0x0001, 0, tr("Pause button 1")));//暂停按钮1 + sensorList.append(makeASensorItem(0x0002, 0, tr("Jog button 1")));//点动按钮1 + sensorList.append(makeASensorItem(0x0007, 0, tr("Air pressure protection input")));//气压保护输入 + sensorList.append(makeASensorItem(0x0020, 0, tr("X zero position")));//X零位 + sensorList.append(makeASensorItem(0x0020, 1, tr("Y zero position")));//Y零位 + sensorList.append(makeASensorItem(0x0021, 0, tr("X deceleration")));//X降速 + sensorList.append(makeASensorItem(0x0021, 1, tr("Y deceleration")));//Y降速 + sensorList.append(makeASensorItem(0x0022, 0, tr("X negative limit")));//X负限位 + sensorList.append(makeASensorItem(0x0022, 1, tr("Y negative limit")));//Y负限位 + sensorList.append(makeASensorItem(0x0023, 0, tr("X positive limit")));//X正限位 + sensorList.append(makeASensorItem(0x0023, 1, tr("Y positive limit")));//Y正限位 + + sensorList.append(makeASensorItem(0x0040, 0, tr("Sewing machine head 1 lifting upper limit")));//缝纫机头1升降上限位 + sensorList.append(makeASensorItem(0x0042, 0, tr("Lower lifting limit of sewing machine head 1")));//缝纫机头1升降下限位 + sensorList.append(makeASensorItem(0x0080, 0, tr("Sewing spindle 1 needle - parking space")));//缝纫主轴1针-停车位 + sensorList.append(makeASensorItem(0x0082, 0, tr("Sewing spindle 1 needle - thread hooking position")));//缝纫主轴1针-勾线位 + sensorList.append(makeASensorItem(0x0088, 0, tr("Sewing shuttle 1- parking space")));//缝纫旋梭1-停车位 + sensorList.append(makeASensorItem(0x008A, 0, tr("Sewing rotary hook 1-thread hook position")));//缝纫旋梭1-勾线位 + + sensorList.append(makeASensorItem(0x0090, 0, tr("Punching spindle 1 zero position")));//冲孔主轴1零位 + sensorList.append(makeASensorItem(0x00A0, 0, tr("Punching spindle 1 position detection")));//冲孔主轴1位置检测 + sensorList.append(makeASensorItem(0x002C, 0, tr("Punching 1 color change motor - zero position")));//冲孔1换色电机-零位 + sensorList.append(makeASensorItem(0x002E, 0, tr("Punching 1 color change motor - negative limit")));//冲孔1换色电机-负限位 + sensorList.append(makeASensorItem(0x002F, 0, tr("Punching 1 color change motor - positive limit")));//冲孔1换色电机-正限位 + + sensorList.append(makeASensorItem(0x0170, 0, tr("Sewing 1 thread breakage detection")));//缝纫1断线检测 + sensorList.append(makeASensorItem(0x0174, 0, tr("Sewing 1 scissors return")));//缝纫1下剪刀回位 + + //等于冲缝机并为1头 + if(g_emMacType == MACHINE_PUNCH_SEW && g_emProductType == PRODUCT_PUNCHSEW_SINGLEHEAD) + { + sensorList.append(makeASensorItem(0x0008, 0, tr("Safety input")));// 安全输入 + } + + //等于冲缝机并为2头 + if(g_emMacType == MACHINE_PUNCH_SEW && g_emProductType == PRODUCT_PUNCHSEW_TWOHEAD) + { + sensorList.append(makeASensorItem(0x002C, 1, tr("Punching 2 color change motor - zero position")));//冲孔2换色电机-零位 + sensorList.append(makeASensorItem(0x002E, 1, tr("Punching 2 color change motor - negative limit")));//冲孔2换色电机-负限位 + sensorList.append(makeASensorItem(0x002F, 1, tr("Punching 2 color change motor - positive limit")));//冲孔2换色电机-正限位 + sensorList.append(makeASensorItem(0x0040, 1, tr("Sewing machine head 2 lifting upper limit")));//缝纫机头2升降上限位 + sensorList.append(makeASensorItem(0x0042, 1, tr("Lower lifting limit of sewing machine head 2")));//缝纫机头2升降下限位 + sensorList.append(makeASensorItem(0x0080, 1, tr("Sewing spindle 2 needle - parking space")));//缝纫主轴2针-停车位 + sensorList.append(makeASensorItem(0x0082, 1, tr("Sewing spindle 2 needle - thread hooking position")));//缝纫主轴2针-勾线位 + sensorList.append(makeASensorItem(0x0088, 1, tr("Sewing shuttle 2- parking space")));//缝纫旋梭2-停车位 + sensorList.append(makeASensorItem(0x008A, 1, tr("Sewing rotary hook 2-thread hook position")));//缝纫旋梭2-勾线位 + sensorList.append(makeASensorItem(0x0090, 1, tr("Punching spindle 2 zero position")));//冲孔主轴2零位 + sensorList.append(makeASensorItem(0x00A0, 1, tr("Punching spindle 2 position detection")));//冲孔主轴2位置检测 + sensorList.append(makeASensorItem(0x0170, 1, tr("Sewing 2 thread breakage detection")));//缝纫2断线检测 + sensorList.append(makeASensorItem(0x0174, 1, tr("Sewing 2 scissors return")));//缝纫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 PunchSewMachine::initErrorCodeAndStateList() +{ + m_allErrorCodeAndStateList.clear(); + + //错误代码 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_SPT_NCE, tr("Small platen not closed")));// 小台板未关闭 +} + diff --git a/mctype/patternsingleboard/function/punchsewmachine.h b/mctype/patternsingleboard/function/punchsewmachine.h new file mode 100644 index 0000000..f8eb505 --- /dev/null +++ b/mctype/patternsingleboard/function/punchsewmachine.h @@ -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 diff --git a/mctype/patternsingleboard/function/punchsewmachineYaJiao.cpp.autosave b/mctype/patternsingleboard/function/punchsewmachineYaJiao.cpp.autosave new file mode 100644 index 0000000..b342eaf --- /dev/null +++ b/mctype/patternsingleboard/function/punchsewmachineYaJiao.cpp.autosave @@ -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)); + + // 双工位模式,0,关,1,开 + 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 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")));// 未到排胶位 +} + diff --git a/mctype/patternsingleboard/function/punchsewmachineYaJiao.h.autosave b/mctype/patternsingleboard/function/punchsewmachineYaJiao.h.autosave new file mode 100644 index 0000000..52378c0 --- /dev/null +++ b/mctype/patternsingleboard/function/punchsewmachineYaJiao.h.autosave @@ -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 diff --git a/mctype/patternsingleboard/function/templatesewmachine.cpp b/mctype/patternsingleboard/function/templatesewmachine.cpp new file mode 100644 index 0000000..011975c --- /dev/null +++ b/mctype/patternsingleboard/function/templatesewmachine.cpp @@ -0,0 +1,4499 @@ +#include "templatesewmachine.h" +//模板缝纫机 +TemplateSewMachine::TemplateSewMachine() +{ + //添加各种参数到列表中 + initRootParasList(); + initRootHMIConfigurationList(m_allParasList);//超级用户界面配置 + initRootIOTConfigurationList(m_allParasList); //超级用户物联网配置 + initPatternsParasList(); + initSoftwareParasList(m_allParasList); + initTimeParasList(m_allParasList); + initPunchEmbSewCommonFunParasList(m_allParasList); + initMcParasList(); + initWkParasList(); + + //初始化控制动作列表 + initOutCtrlList(); + + //初始化快捷功能列表 + initShortCutList(); + + //初始化辅助功能列表 + initAssistList(); + + //初始化花样设置功能列表 + initPatternSetList(); + + //初始化参数设定列表 + initParaSetList(); + + //初始化传感器列表 + initSensorList(); + + //初始化错误代码和状态列表 + initErrorCodeAndStateList(); + + //初始化调试功能列表 + initDebugFunList(); +} + +TemplateSewMachine::~TemplateSewMachine() +{ + +} + +//超级用户参数(包括机器参数、工作参数) +void TemplateSewMachine::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)); + + //超级用户参数-删除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 TemplateSewMachine::initPatternsParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + //花样参数-花样设置参数-定位点x;范围-1000000--1000000,单位0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_PATTERN, + 0 , + SET_ANCHORX, 0, 0, PARA_VALUE_TYPE_INT, + tr("AnchorX"),//定位点X + 0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm + tr(""), 0, 0,0x0001, operate)); + + //花样参数-花样设置参数-定位点y;范围-1000000--1000000,单位0.01mm,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_PATTERN, + 0 , + SET_ANCHORY, 0, 0, PARA_VALUE_TYPE_INT, + tr("AnchorY"),//定位点Y + 0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm + tr(""), 0, 0,0x0002, 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,0x0003, 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("startrY"),//起始点Y + 0, -1000000, 1000000, 0, 2, tr("mm"), tr(""),//mm + tr(""), 0, 0,0x0004, operate)); + + //花样参数-花样设置参数-连续动框补偿;单位:无,范围0-1000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_PATTERN, + 0 , + SET_CONTINURUNCOMP, 0, 0, PARA_VALUE_TYPE_INT, + tr("Continuous motion frame compensation"),//连续动框补偿 + 0, 0, 1000, 0, 0, tr(""), tr(""),// + tr(""), 0, 0,0x0005, operate)); + + //花样参数-花样设置参数-针尖补偿;单位:mm,范围-200-200,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_PATTERN, + 0 , + SET_NEEDLETIPCOMP, 0, 0, PARA_VALUE_TYPE_INT, + tr("Needle tip compensation"),//针尖补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""),// + tr(""), 0, 0,0x0006, 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,0x0007, operate)); + + //花样参数-花样设置参数-翻转式样;单位:无 ,范围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, 0x0008, 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, 0x0009, 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, 0x000A, 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,0x000B, operate)); + //花样参数--------------------------- +} + +//主控机器参数 +void TemplateSewMachine::initMcParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + // 冲孔机头个数,无单位, 范围1-32,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 2, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of heads"),// 机头个数 + 1, 1, 32, 1, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0000, factory)); + + // 每头机针个数,无单位, 范围1-32,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 3, 0, 0, PARA_VALUE_TYPE_INT, + tr("sewing needles per head"),// 每头机针个数 + 1, 1, 32, 1, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0000, factory)); + + // 平绣针数,无单位, 范围1-32,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 4, 0, 0, PARA_VALUE_TYPE_INT, + tr("emb needles per head"),// 平绣针数 + 1, 1, 32, 1, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0000, factory)); + + // 冲孔针数,无单位, 范围1-32,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 5, 0, 0, PARA_VALUE_TYPE_INT, + tr("punch needles per head"),// 冲孔针数 + 1, 1, 32, 1, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0000, factory)); + + // X轴配置,无单位, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 1, 0, PARA_VALUE_TYPE_LIST, + tr("X axis configuration"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0002, factory)); + + // X轴电机驱动选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 2, 0, PARA_VALUE_TYPE_LIST, + tr("X axis motor drive selection"), + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Single motor:0;Double motor:1"),//单驱动:0;双驱动:1 + 0, 0, 0x0003, factory)); + + // X轴坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 3, 0, PARA_VALUE_TYPE_LIST, + tr("X axis coordinate system selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Positive:0;Reverse:1"),//正:0;反:1 + 1, 1, 0x0004, factory)); + + // X轴移动对象选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 4, 0, PARA_VALUE_TYPE_LIST, + tr("X axis moving object selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Head:0;Frame:1"),//机头:0;框:1 + 1, 1, 0x0005, factory)); + + // X轴零位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 5, 0, PARA_VALUE_TYPE_LIST, + tr("X axis zero sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0006, factory)); + + // X轴降速传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 6, 0, PARA_VALUE_TYPE_LIST, + tr("X axis speed reduction sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0007, factory)); + + // X轴正限位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 7, 0, PARA_VALUE_TYPE_LIST, + tr("X axis positive limit sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0008, factory)); + + // X轴负限位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 8, 0, PARA_VALUE_TYPE_LIST, + tr("X axis negative limit sensor selection"),//X轴负限位传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0009, factory)); + + // X轴零位方向选择, 范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 9, 0, PARA_VALUE_TYPE_LIST, + tr("X axis zero direction selection"),//X轴零位方向选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Negative:0;Positive:1"),//负方向:0;正方向:1 + 0, 0, 0x0010, factory)); + + // X轴传感器作用选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 10, 10, 0, PARA_VALUE_TYPE_LIST, + tr("X axis sensor function selection"),//X轴传感器作用选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Zero separate:0;Zero and speed reduction:1"),//零分离:0;零点和减速:1 + 1, 1, 0x0011, factory)); + + // Y轴配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis configuration"),//Y轴配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0012, factory)); + + // Y轴电机驱动选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis motor drive selection"),//Y轴电机驱动选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Single motor:0;Double motor:1"),//单驱动:0;双驱动:1 + 0, 0, 0x0013, factory)); + + // Y轴坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis coordinate system selection"),//Y轴坐标系统选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Positive:0;Reverse:1"),//正:0;反:1 + 1, 1, 0x0014, factory)); + + // Y轴移动对象选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis moving object selection"),//Y轴移动对象选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Head:0;Frame:1"),//机头:0;框:1 + 1, 1, 0x0015, factory)); + + // Y轴零位传感器选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis zero sensor selection"),//Y轴零位传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0016, factory)); + + // Y轴降速传感器选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 6, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis speed reduction sensor selection"),//Y轴降速传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0017, factory)); + + // Y轴正限位传感器, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 7, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis positive limit sensor selection"),//Y轴正限位传感器 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0020, factory)); + + // Y轴负限位传感器, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 8, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis negative limit sensor selection"),//Y轴负限位传感器 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0021, factory)); + + //Y轴零位方向选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 9, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis zero direction selection"),//Y轴零位方向选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Negative:0;Positive:1"),//负方向:0;正方向:1 + 0, 0, 0x0022, factory)); + + //Y轴传感器作用选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 11, 10, 0, PARA_VALUE_TYPE_LIST, + tr("Y axis sensor function selection"),//Y轴传感器作用选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Zero separate:0;Zero and speed reduction:1"),//零分离:0;零点和减速:1 + 1, 1, 0x0023, factory)); + + // X2轴配置,无单位, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 1, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis configuration"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0024, factory)); + + // X2轴电机驱动选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 2, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis motor drive selection"), + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Single motor:0;Double motor:1"),//单驱动:0;双驱动:1 + 0, 0, 0x0024, factory)); + + // X2轴坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 3, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis coordinate system selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Positive:0;Reverse:1"),//正:0;反:1 + 1, 1, 0x0025, factory)); + + // X2轴移动对象选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 4, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis moving object selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Head:0;Frame:1"),//机头:0;框:1 + 1, 1, 0x0026, factory)); + + // X2轴零位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 5, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis zero sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0027, factory)); + + // X2轴降速传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 6, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis speed reduction sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0028, factory)); + + // X2轴正限位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 7, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis positive limit sensor selection"), + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0029, factory)); + + // X2轴负限位传感器选择, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 8, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis negative limit sensor selection"),//X轴负限位传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x002A, factory)); + + // X2轴零位方向选择, 范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 9, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis zero direction selection"),//X轴零位方向选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Negative:0;Positive:1"),//负方向:0;正方向:1 + 0, 0, 0x002B, factory)); + + // X2轴传感器作用选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 12, 10, 0, PARA_VALUE_TYPE_LIST, + tr("X2 axis sensor function selection"),//X轴传感器作用选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Zero separate:0;Zero and speed reduction:1"),//零分离:0;零点和减速:1 + 1, 1, 0x002C, factory)); + + // Y2轴配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis configuration"),//Y轴配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x002D, factory)); + + // Y2轴电机驱动选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis motor drive selection"),//Y轴电机驱动选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Single motor:0;Double motor:1"),//单驱动:0;双驱动:1 + 0, 0, 0x002E, factory)); + + // Y2轴坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis coordinate system selection"),//Y轴坐标系统选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Positive:0;Reverse:1"),//正:0;反:1 + 1, 1, 0x002F, factory)); + + // Y2轴移动对象选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis moving object selection"),//Y轴移动对象选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Head:0;Frame:1"),//机头:0;框:1 + 1, 1, 0x0031, factory)); + + // Y2轴零位传感器选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis zero sensor selection"),//Y轴零位传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0032, factory)); + + // Y2轴降速传感器选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 6, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis speed reduction sensor selection"),//Y轴降速传感器选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0033, factory)); + + // Y2轴正限位传感器, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 7, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis positive limit sensor selection"),//Y轴正限位传感器 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0034, factory)); + + // Y2轴负限位传感器, 范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 8, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis negative limit sensor selection"),//Y轴负限位传感器 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0035, factory)); + + //Y2轴零位方向选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 9, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis zero direction selection"),//Y轴零位方向选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Negative:0;Positive:1"),//负方向:0;正方向:1 + 0, 0, 0x0036, factory)); + + //Y2轴传感器作用选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 13, 10, 0, PARA_VALUE_TYPE_LIST, + tr("Y2 axis sensor function selection"),//Y轴传感器作用选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Zero separate:0;Zero and speed reduction:1"),//零分离:0;零点和减速:1 + 1, 1, 0x0037, factory)); + + //缝纫主轴配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 14, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing spindle configuration"),//缝纫主轴配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x0038, factory)); + + //针梭配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 14, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Needle shuttle configuration"),//针梭配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Needle shuttle:0;Needle shuttle separation:1"),//针穿梭:0;针梭分离:1 + 1, 1, 0x0039, factory)); + + //升降电机配置,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 15, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Lift motor configuration"),//升降电机配置 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 0, 0, 0x003A, factory)); + + //压脚电机配置,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 16, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Presser foot motor configuration"),//压脚电机配置 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 0, 0, 0x003B, factory)); + + //旋转电机配置,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 17, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Rotating motor configuration"),//旋转电机配置 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No:0;Have:1"),//无:0;有:1 + 1, 1, 0x003C, factory)); + + //旋转电机坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 17, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Rotary motor coordinate system"),//旋转电机坐标系统选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Single motor: 0 ; Double motor: 1"),//单电机:0;双电机:1 + 1, 1, 0x003D, factory)); + + //旋转电机坐标系统选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 17, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Rotary motor coordinate system"),//旋转电机坐标系统选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("The coordinate system is positive: 0 ; Coordinate system is reverse: 1"),//坐标系为正:0;坐标系为负:1 + 1, 1, 0x003E, factory)); + + //旋转电机转动对象 选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 17, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Rotary motor coordinate system"),//旋转电机转动对象选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Machine head: 0 ; box: 1"),//机头:0;框:1 + 0, 0, 0x003F, factory)); + + //旋转限制 选择,范围0-1,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 17, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Rotation limit"),//旋转限制 选择 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Unlimited: 0 ; limited: 1"),//有限制:0;无限制:1 + 1, 1, 0x0040, factory)); + + //下剪刀驱动装置选择,范围0-4,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 18, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Lower scissors drive selection"),//下剪刀驱动装置选择 + 1, 0, 4, 1, 0, tr(""), tr(""), + tr("No lower trimming device:0;Cylinder:1;AC motor:2;Stepper motor:3;Electromagnet:4"),//无下剪线装置:0;气缸:1;交流电机:2;步进电机:3;电磁铁:4 + 1, 1, 0x0041, factory)); + + //下剪线模式选择,范围0-3,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 19, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Lower trimming mode selection"),//下剪线模式选择 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Static trimming:0;Dynamic trimming:1;Cam trimming:2;Cam respectively trimming:3"),//静态剪线:0;动态剪线:1;凸轮剪线:2;凸轮分别剪线:3 + 0, 0, 0x0042, factory)); + + //上剪刀驱动装置选择, 范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 20, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Upper scissors drive selection"),//上剪刀驱动装置选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("No Upper trimming Device:0;Cylinder:1"),//无上剪线装置:0;气缸:1 + 0, 0, 0x0043, factory)); + + //面线断线检测装置选择,范围0-2,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 21, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Upper thread break detection device selection"),//面线断线检测装置选择 + 1, 0, 2, 1, 0, tr(""), tr(""), + tr("No:0;Pick wire spring:1;Electronic isolation:2"),//无:0;拣选钢丝弹簧:1;电子隔离开关:2 + 1, 1, 0x0044, factory)); + + //底线断线检测装置选择,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 22, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Bottom line break detection device selection"),//底线断线检测装置选择 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No device: 0 ; Grating wheel: 1 ; Magnetic encoder: 2;Immediate alarm by length:3"),//无:0;光栅轮:1;磁编码器:2;按长度即时报警:3 + 0, 0, 0x0045, factory)); + + //断线检测模式选择,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 23, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Wire break detection mode selection"),//断线检测模式选择 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Direct detection:0;EXBboard detection:1"),//直接检测:0;外围板检测:1 + 0, 0, 0x0046, factory)); + + //勾面线装置选择,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 24, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Hook line device selection"),//勾面线装置选择 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No hook line device:0;Cylinder:1;Electromagnet:2"),//无勾线装置:0;气缸:1;电磁铁:2 + 0, 0, 0x0047, factory)); + + //松面线装置选择,范围0-2,默认1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 25, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Loose line device selection"),//松面线装置选择 + 1, 0, 2, 1, 0, tr(""), tr(""), + tr("No loose wire device:0;Cylinder:1;Electromagnet:2"),//无松线装置:0;气缸:1个;电磁铁:2 + 1, 1, 0x0048, factory)); + + //拉面线装置选择,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 26, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Ramen line device selection"),//拉面线装置选择 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No ramen line device:0;Cylinder:1;Electromagnet:2"),//无拉面线装置:0;气缸:1;电磁铁:2 + 0, 0, 0x0049, factory)); + + //扣底线装置选择,范围0-2,默认2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 27, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Bottom line device selection"),//扣底线装置选择 + 2, 0, 2, 2, 0, tr(""), tr(""), + tr("No bottom line device:0;Cylinder:1;Electromagnet:2"),//无底线装置:0;气缸:1;电磁铁:2 + 2, 2, 0x004A, factory)); + + //第二松面线选择,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 28, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Second loose line device selection"),//第二松面线选择 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No loose wire device: 0 ; cylinder: 1 ; Electromagnet: 2"),//无松线装置:0;气缸:1;电磁铁:2 + 0, 0, 0x004B, factory)); + + //模板识别装置,范围0-2,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 29, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Template recognition device"),//模板识别装置 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("No identification device: 0 ; Bar code: 1 ; Coding hole: 2"),//无识别装置:0;条形码:1;编码孔:2 + 0, 0, 0x004C, factory)); + + //旋梭面对方向,范围0-3,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 30, 0, 0, PARA_VALUE_TYPE_LIST, + tr("The hook faces the direction"),//旋梭面对方向 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Forward:0;Left:1;Right:2;Up:3"),//正:0;左:1;右:2;下:3 + 0, 0, 0x004D, factory)); + + //模板检测装置,范围0-1,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 31, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Template detecting device"),//旋梭面对方向 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("No detection device: 0 ; Detect: 1"),//无检测装置:0;有检测装置:1 + 0, 0, 0x004E, factory)); + + // X框传感器坐标, 范围S32_MIN--S32_MAX, 默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 50, 0, 0, PARA_VALUE_TYPE_INT, + tr("X box sensor coordinates"),//X框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 0, tr("mm"), tr(""), + tr(""), + 0, 0, 0x004F, factory)); + + // Y框传感器坐标, 范围S32_MIN--S32_MAX, 默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 51, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y box sensor coordinates"),//Y框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 0, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0050, factory)); + + //主轴停车传感器角度, 范围0-36000,默认4500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 52, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle parking sensor angle"),//主轴停车传感器角度 + 4500, 0, 36000, 4500, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0051, factory)); + +// //升降传感器坐标, 范围S32_MIN--S32_MAX, 默认0 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_POSITION, +// 53, 4, 0, PARA_VALUE_TYPE_INT, +// tr("Lift sensor coordinates"),//升降传感器坐标 +// 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), +// tr(""), +// 0, 0, 0x0052, factory)); + + //压脚传感器坐标, 范围S32_MIN--S32_MAX, 默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 54, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot sensor coordinates"),//压脚传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0053, factory)); + + //旋转传感器角度, 范围-36000-36000, 默认18000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 55, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotation sensor angle"),//旋转传感器角度 + 18000, -36000, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0054, factory)); + + //主轴勾线传感器角度, 范围0-36000,默认20200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 56, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle hook line sensor angle unit"),//主轴勾线传感器角度 + 20200, 0, 36000, 20200, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0055, repair)); + + //冲头停车角度, 范围0-36000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 57, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punch parking angle"),//冲头停车角度 + 0, 0, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0056, repair)); + + //裁刀停车角度, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 58, 0, 0, PARA_VALUE_TYPE_INT, + tr("Knife parking angle"),//裁刀停车角度 + 0, S32_MIN, S32_MAX, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0057, repair)); + + //X2框传感器坐标, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 59, 0, 0, PARA_VALUE_TYPE_INT, + tr("X2 box sensor coordinates"),//X2框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0057, factory)); + + //Y2框传感器坐标, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 60, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y2 box sensor coordinates"),//Y2框传感器坐标 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0057, factory)); + + //拉料电机传感器坐标, 范围S32_MIN--S32_MAX,默认0 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_POSITION, +// 61, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Pull motor sensor coordinates"),//拉料电机传感器坐标 +// 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), +// tr(""), +// 0, 0, 0x0058, factory)); + + //主轴点动停车角度, 范围-36000-36000,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 62, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle jog parking angle"),//主轴点动停车角度 + 0, -36000, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x005B, repair)); + + //平绣主轴停车角度, 范围0-36000,默认10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 63, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery spindle parking angle"),//平绣主轴停车角度 + 10000, 0, 36000, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x005C, repair)); + + //X可移动区域负边界, 范围S32_MIN--S32_MAX, 默认6800 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 70, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area negative boundary"),//X可移动区域负边界 + 6800, S32_MIN, S32_MAX, 6800, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x005D, factory)); + + //X可移动区域正边界, 范围S32_MIN--S32_MAX,默认207500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 71, 0, 0, PARA_VALUE_TYPE_INT, + tr("X movable area positive boundary"),//X可移动区域正边界 + 207500, S32_MIN, S32_MAX, 207500, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x005E, factory)); + + //Y可移动区域负边界, 范围S32_MIN--S32_MAX,默认4500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area negative boundary"),//Y可移动区域负边界 + 4500, S32_MIN, S32_MAX, 4500, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x005F, factory)); + + //Y可移动区域正边界, 范围S32_MIN--S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y movable area positive boundary"),//Y可移动区域正边界 + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0060, factory)); + +// //机头升降可移动上边界, 范围S32_MIN--S32_MAX,默认0 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_POSITION, +// 74, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Head lift can move the upper boundary"),//机头升降可移动上边界 +// 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), +// tr(""), +// 0, 0, 0x0061, factory)); + +// //机头升降可移动下边界, 范围S32_MIN--S32_MAX,默认0 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_POSITION, +// 75, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Head lift can move the lower boundary"),//机头升降可移动下边界 +// 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), +// tr(""), +// 0, 0, 0x0062, factory)); + + //压脚升降可移动上边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 76, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lift can move the upper boundary"),//压脚升降可移动上边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0063, factory)); + + //压脚升降可移动下边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 77, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lift can move the lower boundary"),//压脚升降可移动下边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0064, factory)); + + //电机压脚脉冲当量分子, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 78, 0, 0, PARA_VALUE_TYPE_INT, + tr("Motor presser pulse equivalent molecule"),//电机压脚脉冲当量分子 + 0, S32_MIN, S32_MAX, 0, 2, tr(""), tr(""), + tr(""), + 0, 0, 0x0065, factory)); + + //电机压脚脉冲当量分母, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 79, 0, 0, PARA_VALUE_TYPE_INT, + tr("Motor presser pulse equivalent denominator"),//电机压脚脉冲当量分母 + 0, S32_MIN, S32_MAX, 0, 2, tr(""), tr(""), + tr(""), + 0, 0, 0x0066, factory)); + + //旋转范围正向限制角度, 范围S32_MIN--S32_MAX,默认49000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 80, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotation range positive limit angle"),//旋转范围正向限制角度 + 0, S32_MIN, S32_MAX, 0, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0067, factory)); + + //旋转范围反向限制角度, 范围S32_MIN--S32_MAX,默认-31000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 81, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotation range negative limit angle"),//旋转范围正向限制角度 + -31000, S32_MIN, S32_MAX, -31000, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x0068, factory)); + + //冲孔机头偏移X, 范围S32_MIN--S32_MAX,默认-20630 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 82, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching head offset X"),//冲孔机头偏移X + -20630, S32_MIN, S32_MAX, -20630, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0069, factory)); + + //冲孔机头偏移Y, 范围S32_MIN--S32_MAX,默认-30 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 83, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching head offset Y"),//冲孔机头偏移Y + -30, S32_MIN, S32_MAX, -30, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006A, factory)); + + //x可缝纫区域负边界, 范围S32_MIN--S32_MAX,默认6800 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 84, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Sewing area Negative boundary"),//x可缝纫区域负边界 + 6800, S32_MIN, S32_MAX, 6800, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006B, factory)); + + //x可缝纫区域正边界, 范围S32_MIN--S32_MAX,默认128800 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 85, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Sewing area Positive margin"),//x可缝纫区域正边界 + 128800, S32_MIN, S32_MAX, 128800, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006C, factory)); + + //y可缝纫区域负边界, 范围S32_MIN--S32_MAX,默认20300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 86, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Sewing area Negative boundary"),//y可缝纫区域负边界 + 20300, S32_MIN, S32_MAX, 20300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006D, factory)); + + //y可缝纫区域正边界, 范围S32_MIN--S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 87, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Sewing area Positive margin"),//y可缝纫区域正边界 + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006E, factory)); + + //x可冲孔区域负边界, 范围S32_MIN--S32_MAX,默认56500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 88, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Can be perforated region Negative boundary"),//x可冲孔区域负边界 + 56500, S32_MIN, S32_MAX, 56500, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x006F, factory)); + + //x可冲孔区域正边界, 范围S32_MIN--S32_MAX,默认178500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 89, 0, 0, PARA_VALUE_TYPE_INT, + tr("X Can be perforated region Positive margin"),//x可冲孔区域正边界 + 178500, S32_MIN, S32_MAX, 178500, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0070, factory)); + + //y可冲孔区域负边界, 范围S32_MIN--S32_MAX,默认20300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 90, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Can be perforated region Negative boundary"),//y可冲孔区域负边界 + 20300, S32_MIN, S32_MAX, 20300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0071, factory)); + + //y可冲孔区域正边界, 范围S32_MIN--S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 91, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y Can be perforated region Positive margin"),//y可冲孔区域正边界 + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0072, factory)); + + //缝纫右机头偏移X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 92, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing right head offset X"),//缝纫右机头偏移X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0073, factory)); + + //缝纫右机头偏移Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 93, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing right head offset Y"),//缝纫右机头偏移Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0074, factory)); + + //切刀机头偏移X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 94, 0, 0, PARA_VALUE_TYPE_INT, + tr("Cutter head offset X"),//切刀机头偏移X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0075, factory)); + + //切刀机头偏移Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 95, 0, 0, PARA_VALUE_TYPE_INT, + tr("Cutter head offset Y"),//切刀机头偏移Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0075, factory)); + + //x可裁切区域负边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 96, 0, 0, PARA_VALUE_TYPE_INT, + tr("x can crop the negative boundary of the area"),//x可裁切区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0076, factory)); + + //x可裁切区域正边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 97, 0, 0, PARA_VALUE_TYPE_INT, + tr("x can crop the positive boundary of the area"),//x可裁切区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0077, factory)); + + //y可裁切区域负边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 98, 0, 0, PARA_VALUE_TYPE_INT, + tr("y can crop the negative boundary of the area"),//x可裁切区域负边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0078, factory)); + + //y可裁切区域正边界, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 99, 0, 0, PARA_VALUE_TYPE_INT, + tr("y can crop the positive boundary of the area"),//x可裁切区域正边界 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x0079, factory)); + + //xy启动停止速度, 范围1-100,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 100, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY start stop speed"),//xy启动停止速度 + 10, 1, 100, 10, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x007B, factory)); + + //xy归零运行速度, 范围1-100,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 101, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY zero running speed"),//xy归零运行速度 + 100, 1, 100, 100, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x007C, factory)); + + //xy空走运行速度, 范围1-1000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 102, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY Idling speed"),//xy空走运行速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x007D, factory)); + + //xy行走加速度, 范围1-10000,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 103, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY walking acceleration"),//xy行走加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x007E, factory)); + + //xy刹车加速度, 范围1-10000,默认10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 104, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY brake acceleration"),//xy刹车加速度 + 10000, 1, 10000, 10000, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x007F, factory)); + + //xy手动移动速度1, 范围1-1000,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 105, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 1"),//xy手动移动速度1 + 10, 1, 1000, 10, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0080, factory)); + + //xy手动移动速度2, 范围1-1000,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 106, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 2"),//xy手动移动速度2 + 100, 1, 1000, 100, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0081, factory)); + + //xy手动移动速度3, 范围1-1000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 107, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY manual movement speed 3"),//xy手动移动速度3 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0082, factory)); + + //xy最高移动速度, 范围1-1000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 108, 0, 0, PARA_VALUE_TYPE_INT, + tr("XY maximum moving speed"),//xy最高移动速度 + 300, 1, 1000, 300, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0083, factory)); + + //主轴启动停止转速, 范围1-300,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 109, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle start stop speed"),//主轴启动停止转速 + 100, 1, 300, 100, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0084, factory)); + + //主轴归零转速, 范围1-3000,默认120 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 110, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle zero return speed"),//主轴归零转速 + 120, 1, 3000, 120, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0085, factory)); + + //主轴运转转速, 范围1-3000,默认300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 111, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle running speed"),//主轴运转转速 + 300, 1, 3000, 300, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0086, factory)); + + //主轴运转加速度, 范围1-100,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 112, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle running acceleration"),//主轴运转加速度 + 50, 1, 100, 50, 0, tr("r/ss"), tr(""), + tr(""), + 0, 0, 0x0087, factory)); + + //主轴刹车加速度, 范围1-100,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 113, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle brakes acceleration"),//主轴刹车加速度 + 100, 1, 100, 100, 0, tr("r/ss"), tr(""), + tr(""), + 0, 0, 0x0088, factory)); + + //主轴缝纫最高转速, 范围1-3000,默认1200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 114, 0, 0, PARA_VALUE_TYPE_INT, + tr("sewing maximum speed"),//主轴缝纫最高转速 + 1200, 1, 3000, 1200, 0, tr("r/min"), tr(""), + tr(""), + 0, 0, 0x0089, factory)); + + //机头升降起停速度, 范围1-250,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 115, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift start end speed"),//机头升降起停速度 + 10, 1, 250, 10, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x008A, factory)); + + //机头升降归零速度, 范围1-250,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 116, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift and zero speed"),//机头升降归零速度 + 50, 1, 250, 50, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x008B, factory)); + + //机头升降行走速度, 范围1-250,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 117, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift walk speed"),//机头升降行走速度 + 200, 1, 250, 200, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x008C, factory)); + + //机头升降行走加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 118, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift acceleration"),//机头升降行走加速度 + 500, 1, 10000, 500, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x008D, factory)); + + //机头升降刹车加速度, 范围1-10000,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 119, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head movements brake acceleration"),//机头升降刹车加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x008E, factory)); + + //压脚升降起停速度, 范围1-100,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 120, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head lift start end speed"),//压脚升降起停速度 + 10, 1, 100, 10, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x008F, factory)); + + //压脚升降归零速度, 范围1-100,默认30 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 121, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lift zero speed"),//压脚升降归零速度 + 30, 1, 100, 30, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0090, factory)); + + //压脚升降行走速度, 范围1-100,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 122, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lifting speed"),//压脚升降行走速度 + 100, 1, 100, 100, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x0091, factory)); + + //压脚升降行走加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 123, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lifting acceleration"),//压脚升降行走加速度 + 500, 1, 10000, 500, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x0092, factory)); + + //压脚升降刹车加速度, 范围1-10000,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 124, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot lift brake acceleration"),//压脚升降刹车加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x0093, factory)); + + //机头旋转启动停止速度, 范围1-720,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 125, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation start stop speed"),//机头旋转启动停止速度 + 10, 1, 720, 10, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x0094, factory)); + + //机头旋转归零速度, 范围1-720,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 126, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation zero return speed"),//机头旋转归零速度 + 50, 1, 720, 50, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x0095, factory)); + + //机头旋转运转速度, 范围1-720,默认360 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 127, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation speed"),//机头旋转运转速度 + 360, 1, 720, 360, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x0096, factory)); + + //机头旋转运动加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 128, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation acceleration"),//机头旋转运动加速度 + 500, 1, 10000, 500, 0, tr("deg/s2"), tr(""), + tr(""), + 0, 0, 0x0097, factory)); + + //机头旋转刹车加速度, 范围1-10000,默认5000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 129, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation brake acceleration"),//机头旋转刹车加速度 + 5000, 1, 10000, 5000, 0, tr("deg/s2"), tr(""), + tr(""), + 0, 0, 0x0098, factory)); + + //机头旋转最高速度, 范围1-720,默认720 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 130, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head rotation maximum speed"),//机头旋转最高速度 + 720, 1, 720, 720, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x0099, factory)); + +// //最小画笔绘画速度, 范围1-100,默认10 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_SPEED, +// 131, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Minimum brush painting speed"),//最小画笔绘画速度 +// 10, 1, 100, 10, 0, tr("mm/s"), tr(""), +// tr(""), +// 0, 0, 0x009A, factory)); + +// //最大画笔绘画速度, 范围1-1200,默认1000 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_SPEED, +// 132, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Maximum brush painting speed"),//最大画笔绘画速度 +// 1000, 1, 1200, 1000, 0, tr("mm/s"), tr(""), +// tr(""), +// 0, 0, 0x009B, factory)); + +// //画笔绘画加速度, 范围1-4000,默认500 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_SPEED, +// 133, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Brush painting acceleration"),//画笔绘画加速度 +// 500, 1, 4000, 500, 0, tr("mm/s2"), tr(""), +// tr(""), +// 0, 0, 0x009C, factory)); + +// //画笔绘画降速最小偏差角度, 范围1-18000,默认3000 +// m_allParasList.append(makeAParaItem(0, +// PARA_TYPE_MACH, +// MC_SORT_ACTION, +// 134, 0, 0, PARA_VALUE_TYPE_INT, +// tr("Brush painting slowdown minimum deviation angle"),//画笔绘画降速最小偏差角度 +// 3000, 1, 18000, 3000, 0, cod->toUnicode("°"), tr(""), +// tr(""), +// 0, 0, 0x009D, factory)); + + //左上料点x, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 135, 0, 0, PARA_VALUE_TYPE_INT, + tr("Left loading point X"),//左上料点x + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x009E, factory)); + + //左上料点y, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 136, 0, 0, PARA_VALUE_TYPE_INT, + tr("Left loading point Y"),//左上料点y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x009F, factory)); + + //右上料点x, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 137, 0, 0, PARA_VALUE_TYPE_INT, + tr("Right loading point X"),//右上料点x + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00A0, factory)); + + //右上料点y, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 138, 0, 0, PARA_VALUE_TYPE_INT, + tr("Right loading point Y"),//右上料点y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00A1, factory)); + + //模板框宽度, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 139, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template box width"),//模板框宽度 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00A2, factory)); + + //模板框启停速度, 范围1-100,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 140, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template frame start and stop speed"),//模板框启停速度 + 10, 1, 100, 10, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x00A3, factory)); + + //模板框行走速度, 范围1-500,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 141, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template frame waking speed"),//模板框行走速度 + 100, 1, 500, 100, 0, tr("mm/s"), tr(""), + tr(""), + 0, 0, 0x00A4, factory)); + + //模板框行走加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 142, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template frame waking acceleration"),//模板框行走加速度 + 500, 1, 10000, 500, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x00A5, factory)); + + //模板框刹车加速度, 范围1-10000,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 143, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template frame brake acceleration"),//模板框刹车加速度 + 1000, 1, 10000, 1000, 0, tr("mm/s2"), tr(""), + tr(""), + 0, 0, 0x00A6, factory)); + + //上机头旋转归零补偿角度, 范围-1000-1000,默认342 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 144, 0, 0, PARA_VALUE_TYPE_INT, + tr("Compensation angle of upper machine head rotation return to zero"),//上机头旋转归零补偿角度 + 342, -1000, 1000, 342, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x00A7, factory)); + + //下机头旋转归零补偿角度, 范围-1000-1000,默认385 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 145, 0, 0, PARA_VALUE_TYPE_INT, + tr("Compensation angle of lower machine head rotation return to zero"),//下机头旋转归零补偿角度 + 385, -1000, 1000, 385, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x00A8, factory)); + + //主轴归零补偿角度, 范围-1000--1000,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 146, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle zero compensation angle"),//主轴归零补偿角度 + 200, -1000, 1000, 200, 2, cod->toUnicode("°"), tr(""), + tr(""), + 0, 0, 0x00A9, factory)); + + //平绣机头偏移x, 范围S32_MIN-S32_MAX,默认80000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 150, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery head offset X"),//平绣机头偏移x + 80000, S32_MIN, S32_MAX, 80000, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AA, factory)); + + //平绣机头偏移y, 范围S32_MIN-S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 151, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery head offset Y"),//平绣机头偏移y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AB, factory)); + + //平绣x可绣花区域正边界(X-), 范围S32_MIN-S32_MAX,默认85600 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 152, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery X area negative boundary"),//平绣x可绣花区域正边界(X-) + 85600, S32_MIN, S32_MAX, 85600, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AC, factory)); + + + //平绣x可绣花区域正边界(X+), 范围S32_MIN-S32_MAX,默认207500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 153, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery X area positive boundary"),//平绣x可绣花区域正边界(X+) + 207500, S32_MIN, S32_MAX, 207500, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AD, factory)); + + //平绣Y可绣花区域负边界(Y-), 范围S32_MIN-S32_MAX,默认20300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 154, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery X area positive boundary"),//平绣Y可绣花区域负边界(Y-) + 20300, S32_MIN, S32_MAX, 20300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AE, factory)); + + //平绣Y可绣花区域负边界(Y+), 范围S32_MIN-S32_MAX,默认99300 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 155, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery X area positive boundary"),//平绣Y可绣花区域负边界(Y-) + 99300, S32_MIN, S32_MAX, 99300, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00AF, factory)); + + //冲孔旋转启动速度, 范围1-720,默认10 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 156, 0, 0, PARA_VALUE_TYPE_INT, + tr("Start speed of punching rotation"),//冲孔旋转启动速度 + 10, 1, 720, 10, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x00B0, factory)); + + //冲孔旋转归零速度, 范围1-720,默认50 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 157, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punch rotation zero speed"),//冲孔旋转归零速度 + 50, 1, 720, 50, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x00B1, factory)); + + //冲孔旋转运转速度, 范围1-720,默认360 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 158, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotating speed of punch"),//冲孔旋转运转速度 + 360, 1, 720, 360, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x00B2, factory)); + + //冲孔旋转运转加速度, 范围1-10000,默认500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 159, 0, 0, PARA_VALUE_TYPE_INT, + tr("Acceleration of ram punch"),//冲孔旋转运转加速度 + 500, 1, 10000, 500, 0, tr("deg/s2"), tr(""), + tr(""), + 0, 0, 0x00B3, factory)); + + //冲孔旋转刹车加速度, 范围1-10000,默认5000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 160, 0, 0, PARA_VALUE_TYPE_INT, + tr("Ram punch rotation brake acceleration"),//冲孔旋转刹车加速度 + 5000, 1, 10000, 5000, 0, tr("deg/s2"), tr(""), + tr(""), + 0, 0, 0x00B4, factory)); + + //冲孔旋转最高速度, 范围1-3600,默认720 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SPEED, + 161, 0, 0, PARA_VALUE_TYPE_INT, + tr("Rotating speed of punch"),//冲孔旋转最高速度 + 720, 1, 3600, 720, 0, tr("deg/s"), tr(""), + tr(""), + 0, 0, 0x00B5, factory)); + + //X间隙补偿, 范围-200-200,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("X gap compensation"),//X间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BC, repair)); + + //Y间隙补偿, 范围-200-200,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y gap compensation"),//Y间隙补偿 + 0, -200, 200, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BD, repair)); + + //画笔偏移X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 200, 0, 0, PARA_VALUE_TYPE_INT, + tr("Brush offset X"),//画笔偏移X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BE, factory)); + + //画笔偏移Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 201, 0, 0, PARA_VALUE_TYPE_INT, + tr("Brush offset Y"),//画笔偏移Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00BF, factory)); + + //压枣偏移X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 202, 0, 0, PARA_VALUE_TYPE_INT, + tr("Track offset X"),//压枣偏移X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C0, factory)); + + //压枣偏移Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 203, 0, 0, PARA_VALUE_TYPE_INT, + tr("Track offset Y"),//压枣偏移Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C1, factory)); + + //左上料点X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 208, 0, 0, PARA_VALUE_TYPE_INT, + tr("Left loading point X"),//左上料点X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C2, factory)); + + //左上料点Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 209, 0, 0, PARA_VALUE_TYPE_INT, + tr("Left loading point Y"),//左上料点Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C3, factory)); + + //右上料点X, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 210, 0, 0, PARA_VALUE_TYPE_INT, + tr("Right loading point X"),//右上料点X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C4, factory)); + + //右上料点Y, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_POSITION, + 211, 0, 0, PARA_VALUE_TYPE_INT, + tr("Right loading point Y"),//右上料点Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C5, factory)); + + //模板框宽度, 范围S32_MIN--S32_MAX,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_MACH, + MC_SORT_SETTING, + 212, 0, 0, PARA_VALUE_TYPE_INT, + tr("Template box width"),//模板框宽度 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), + 0, 0, 0x00C6, factory)); + +} + +//主控工作参数 +void TemplateSewMachine::initWkParasList() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + + // 缝纫工作转速, 范围 1--2000,单位r/min,默认1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_SPEED, + 0, 0, 0, PARA_VALUE_TYPE_INT, + tr("sewing work speed"),// 缝纫工作转速 + 1000, 1, 2000, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0100, repair)); + + // 主轴剪线转速, 范围 1--500,单位r/min,默认120 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 1, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle Cut line speed"),// 主轴剪线转速 + 120, 1, 500, 120, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0101, repair)); + + // 主轴回针转速, 范围 1--500,单位r/min,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 2, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle Back needle speed"),// 主轴回针转速 + 200, 1, 500, 200, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0102, repair)); + + // 主轴启动慢动转速, 范围 1--500,单位r/min,默认 200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 3, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle start slow speed"),// 主轴启动慢动转速 + 200, 1, 500, 200, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0103, repair)); + + // 倒车等效主轴转速, 范围 1--3000,单位r/min,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 4, 0, 0, PARA_VALUE_TYPE_INT, + tr("Reverse equivalent spindle speed"),// 倒车等效主轴转速 + 1000, 1, 3000, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0104, repair)); + + // 缝纫动框方式, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 5, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing moving frame"),// 缝纫动框方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Continuous:0;Intermittent:1"), 0, 0, 0x0105, repair));//连续:0;间歇式:1 + + // 缝纫加减速方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 5, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing acceleration and deceleration mode"),// 缝纫加减速方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No acceleration or deceleration:0;Xy sine acceleration and deceleration:1"), //无加速或减速:0;Xy正弦加速度和减速度:1 + 1, 1, 0x0106, repair)); + + // 缝纫机头旋转方式, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 5, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing machine head rotating manner"),// 缝纫机头旋转方式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Continuous rotation:0;Xy intermittent rotation:1"),//连续旋转:0;Xy间歇旋转:1 + 0, 0, 0x0107, repair)); + + // 缝纫机头加减速方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 5, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing head deceleration mode"),// 缝纫机头加减速方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No acceleration or deceleration:0;Intermittent acceleration and deceleration:1"), //无加速或减速:0;间歇加减速:1 + 1, 1, 0x0108, repair));//无加速或减速:0;间歇加减速:1 + + // 缝纫动框起始角度, 范围 0--36000,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 6, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing movable frame starting angle"),// 缝纫动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0109, repair)); + + // 缝纫动框持续角度, 范围 0--36000,默认 15000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 7, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing movable frame duration angle"),// 缝纫动框持续角度 + 15000, 0, 36000, 15000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x010A, repair)); + + // 起针慢动针数, 范围 0--10,默认 3 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 8, 0, 0, PARA_VALUE_TYPE_INT, + tr("Start low speed needls"),// 起针慢动针数 + 3, 0, 10, 3, 0, tr("Needles"), tr(""), + tr(""), 0, 0, 0x010B, repair)); + + // 起针动作松线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 9, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Needle action loose line allowed"),// 起针动作松线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x010C, operate)); + + // 起针动作顶线允许 0, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 9, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Needle action top line allowed"),// 起针动作顶线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x010D, operate)); + + // 起针动作夹线允许 0, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 9, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Needle action clamp line allowed"),// 起针动作夹线允许 0 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x010E, operate)); + + // 绣花起针夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 9, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Allow to embroider line allowed"),// 绣花起针夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0110, operate)); + + // 剪线允许, 范围 0--2,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 10, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Cut lines allow"),// 剪线允许 + 1, 0, 2, 1, 0, tr(""), tr(""), + tr("Do not trim: 0;Automatic thread trim:1;Data trim:2"),//不剪线:0;自动剪线:1;数据剪线:2 + 1, 1, 0x0111, operate)); + + // 剪线分线角度, 范围 0--36000,默认 20000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 11, 0, 0, PARA_VALUE_TYPE_INT, + tr("Trimming line angle"),// 剪线分线角度 + 20000, 0, 36000, 20000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0112, repair)); + + // 剪线完成角度, 范围 0--36000,默认 6000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 12, 0, 0, PARA_VALUE_TYPE_INT, + tr("Trimming completion angle"),// 剪线完成角度 + 6000, 0, 36000, 6000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0113, repair)); + + // 剪线时动作松线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Action loosening when thread trimming"),// 剪线时动作松线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0114, operate)); + + // 剪线时动作拉线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Action wire pull when thread trimming"),// 剪线时动作拉线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0115, operate)); + + // 剪线时动作夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Action clip line allows when trimming"),// 剪线时动作夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作提升压脚允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 4, 0, PARA_VALUE_TYPE_LIST, + tr("The action of lifting the presser foot during thread cutting is allowed"),// 剪线时动作提升压脚允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作提升机头剪线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 5, 0, PARA_VALUE_TYPE_LIST, + tr("The action of lifting the machine head during thread cutting allows for thread cutting"),// 剪线时动作提升机头剪线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作提升机头夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 6, 0, PARA_VALUE_TYPE_LIST, + tr("The action of lifting the machine head during thread cutting allows for thread clamping"),// 剪线时动作提升机头夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 剪线时动作在压脚下勾线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 13, 7, 0, PARA_VALUE_TYPE_LIST, + tr("When cutting the thread, the action is allowed to hook the thread under the pressure foot"),// 剪线时动作在压脚下勾线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"),//不允许:0;允许:1 + 0, 0, 0x0116, operate)); + + // 断线检测针数, 范围 0--10,默认 3 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_DETECT, + 14, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of broken wires"),// 断线检测针数 + 3, 0, 10, 3, 0, tr("Needles"), tr(""), + tr(""), 0, 0, 0x0117, operate)); + + // 断线检测主轴角度, 范围 0--36000,默认 3000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 15, 0, 0, PARA_VALUE_TYPE_INT, + tr("Broken line detection spindle angle"),// 断线检测主轴角度 + 3000, 0, 36000, 3000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0118, repair)); + + // 换梭芯提醒功能, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_DETECT, + 16, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Change bobbin Reminder function"),// 换梭芯提醒功能 + 0, 0, 3, 0, 0, tr(""), tr(""), //未启用:0;按长度划分的延迟提醒:1;按切片数计数:2;按长度立即提醒:3 + tr("Not:0;Delay reminder by length:1;Count by number of slices:2;Immediately reminder by length:3"), + 0, 0, 0x0119, operate)); + + // 底线长度, 范围 0--S32_MAX,默认 10000000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_DETECT, + 17, 0, 0, PARA_VALUE_TYPE_INT, + tr("Bottom line length"),// 底线长度 + 10000000, 0, S32_MAX, 10000000, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x011A, operate)); + + // 每针底线修正量, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 18, 0, 0, PARA_VALUE_TYPE_INT, + tr("Bottom line correction per stitch"),// 每针底线修正量 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x011B, operate)); + + // 换梭片数计数, 范围 0--1000,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_DETECT, + 19, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of shuttles"),// 换梭片数计数 + 0, 0, 1000, 0, 0, tr("times"), tr(""), + tr(""), 0, 0, 0x011C, operate)); + + // 加油方式选择, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 20, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Refueling method selection"),// 加油方式选择 + 0, 0, 3, 0, 0, tr(""), tr(""),//不加油:0;按工作时间间断加油:1;按工作针数间歇加油:2;持续加油:3 + tr("No:0; According to working hours:1; According to the number of working stitches:2; Persistent refueling:3"), + 0, 0, 0x011D, operate)); + + // 加油针数间隔, 范围 S32_MIN--S32_MAX,默认 10000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 21, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling needles interval"),// 加油针数间隔 + 10000, S32_MIN, S32_MAX, 10000, 0, tr("Needles"), tr(""), + tr(""), 0, 0, 0x011E, operate)); + + // 加油时间间隔, 范围 1--S32_MAX,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 22, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling time interval"),// 加油时间间隔 + 1, 1, S32_MAX, 1, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x011F, operate)); + + // 加油持续时长, 范围 1--S32_MAX,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 23, 0, 0, PARA_VALUE_TYPE_INT, + tr("Refueling duration"),// 加油持续时长 + 1, 1, S32_MAX, 1, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x0120, operate)); + + // 完成后停车位置选择, 范围 0--4,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 24, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Parking position selection after completion"),// 完成后停车位置选择 + 0, 0, 4, 0, 0, tr(""), tr(""), + tr("Current:0;Starting:1;Anchor:2;Feeding:3;Offset:4"),//当前点:0;起始点:1;定位点:2;上料点:3;偏移点:4 + 0, 0, 0x0121, operate)); + + // 偏移点坐标有效标志, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 25, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Offset point coordinate valid flag"),// 偏移点坐标有效标志 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Invalid:0;X is valid:1;Y is valid:2;XY is valid:3"),//无效:0;X有效:1;Y有效:2;XY同时有效:3 + 0, 0, 0x0122, operate)); + + // 偏移点坐标X, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 26, 0, 0, PARA_VALUE_TYPE_INT, + tr("Offset point coordinate X"),// 偏移点坐标X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0123, operate)); + + // 偏移点坐标Y, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 27, 0, 0, PARA_VALUE_TYPE_INT, + tr("Offset point coordinate Y"),// 偏移点坐标Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0124, operate)); + + // 穿线点坐标有效标志, 范围 0--3,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 28, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Threading point coordinate effective mark"),// 穿线点坐标有效标志 + 0, 0, 3, 0, 0, tr(""), tr(""), + tr("Invalid:0;X is valid:1;Y is valid:2;XY is valid:3"),//无效:0;X有效:1;Y有效:2;XY同时有效:3 + 0, 0, 0x0125, operate)); + + // 穿线点坐标X, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 29, 0, 0, PARA_VALUE_TYPE_INT, + tr("Threading point coordinates X"),// 穿线点坐标X + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0126, operate)); + + // 穿线点坐标 Y, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 30, 0, 0, PARA_VALUE_TYPE_INT, + tr("Threading point coordinates Y"),// 穿线点坐标Y + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0127, operate)); + + // 机头升降低位高度, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 31, 0, 0, PARA_VALUE_TYPE_INT, + tr("Machine head low position"),// 机头升降低位高度 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0128, repair)); + + // 机头升降高位高度, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 32, 0, 0, PARA_VALUE_TYPE_INT, + tr("Machine head heigh position"),// 机头升降高位高度 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0129, repair)); + + // 产量预设, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK, + 33, 0, 0, PARA_VALUE_TYPE_INT, + tr("Production preset"),// 产量预设 + 0, 0, S32_MAX, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x012A, operate)); + + // 照明亮度, 范围 0--255,默认 128 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 34, 0, 0, PARA_VALUE_TYPE_INT, + tr("Illumination brightness"),// 照明亮度 + 128, 0, 255, 128, 0, tr(""), tr(""), + tr(""), 0, 0, 0x012B, operate)); + + // 气框关闭后延时, 范围 0--2000,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 35, 0, 0, PARA_VALUE_TYPE_INT, + tr("Delay after the air frame is closed"),// 气框关闭后延时 + 500, 0, 2000, 500, 0, tr(""), tr(""), + tr(""), 0, 0, 0x012C, operate)); + + // 缝纫加速度, 范围 1--100,默认 5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 36, 0, 0, PARA_VALUE_TYPE_INT, + tr("Sewing acceleration"),// 缝纫加速度 + 5, 1, 100, 5, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x012D, repair)); + + // 剪线动框位移, 范围 1--1000,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 37, 0, 0, PARA_VALUE_TYPE_INT, + tr("Trimming frame displacement"),// 剪线动框位移 + 500, 1, 1000, 500, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x012E, operate)); + + // 缝纫吹气允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 38, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing blow allowed"),// 缝纫吹气允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, operate)); + + // 摆针允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 38, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing the needle allowed"),// 摆针允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, operate)); + + // 自动回穿线点允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 38, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic loopback point allowed"),// 自动回穿点允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, operate)); + + // 机头旋转允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 38, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing head rotation allowed"),// 机头旋转允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, repair)); + + // 送边条允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 38, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Send sidebar allowed"),// 送边条允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x012F, operate)); + + // 冲孔吹气允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 39, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Punching blow allowed"),// 冲孔吹气允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0130, operate)); + + // 吸尘器关闭延时, 范围 0--120,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 40, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner off delay"),// 吸尘器关闭延时 + 0, 0, 120, 0, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x0131, operate)); + + // 冲孔主轴转速, 范围 1--1200,默认 1200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_SPEED, + 41, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle speed"),// 冲孔主轴转速 + 1200, 1, 1200, 1200, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0132, operate)); + + // 冲孔加速度, 范围 1--100,默认 20 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 42, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching acceleration"),// 冲孔加速度 + 20, 1, 100, 20, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0133, operate)); + + // 冲孔动框方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 43, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Punching movable frame mode"),// 冲孔动框方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("AContinuous:0;BIntermittent:1"), 1, 1, 0x0134, repair));//连续式:0;间歇式:1 + + // 冲孔加减速方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 43, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Punching acceleration and deceleration mode"),// 冲孔加减速方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("No acceleration or deceleration:0;XY sine acceleration and deceleration:1"), 1, 1, 0x0135, repair));//无加速或减速:0;XY正弦加速度和减速度:1 + + // 冲孔动框起始角度, 范围 0--36000,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 44, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching frame starting angle"),// 冲孔动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0136, repair)); + + // 冲孔动框持续角度, 范围 0--36000,默认 15000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 45, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching frame continuous angle"),// 冲孔动框持续角度 + 15000, 0, 36000, 15000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0137, repair)); + + // 缝纫间越框机头升降, 范围 0--max,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 46, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Sewing move head up down"),// 缝纫间越框机头升降 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0138, operate)); + + // 冲孔间越框机头升降, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 47, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Punching move head up down"),// 冲孔间越框机头升降 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0139, operate)); + + // 移框松线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 48, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Moving basket Loose line"),// 移框松线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013A, operate)); + + // 移框夹线允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 48, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Moving basket Clamp line"),// 移框夹线允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013B, operate)); + + // 软件限位XY移动允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit XY move allowed"),// 软件限位XY移动允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013C, factory)); + + // 软件限位缝纫头升降允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit sewing head lifting allowed"),// 软件限位缝纫头升降允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013D, factory)); + + // 软件限位冲孔头升降允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit punch head lifting allowed"),// 软件限位冲孔头升降允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x013E, factory)); + + // 软件限位裁刀机头升降允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit cutter head lift allowed"),// 软件限位裁刀机头升降允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0140, factory)); + + // 软件限位冲孔落杆限制允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit Punch drop allowed"),// 软件限位冲孔落杆限制允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0141, factory)); + + // 软件限位绣花落杆限制允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 49, 6, 0, PARA_VALUE_TYPE_LIST, + tr("Software limit embroidery falling pole allowed"),// 软件限位绣花落杆限制允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0142, factory)); + + // 换梭旋转机头角度, 范围 0--36000,默认 18000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 50, 0, 0, PARA_VALUE_TYPE_INT, + tr("Shuttle rotation angle"),// 换梭旋转机头角度 + 18000, 0, 36000, 18000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0143, factory)); + + // 旋转持续角度, 范围 0--36000,默认 36000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 51, 0, 0, PARA_VALUE_TYPE_INT, + tr("Shuttle rotation angle"),// 旋转持续角度 + 36000, 0, 36000, 36000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0144, operate)); + + // 面线勾线针数, 范围 0--5,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 52, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of needle hooks"),// 面线勾线针数 + 1, 0, 5, 1, 0, tr("needle"), tr(""), + tr(""), 0, 0, 0x0145, operate)); + + // 缝纫工作时压脚高度, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 53, 0, 0, PARA_VALUE_TYPE_INT, + tr("Presser foot height during sewing work"),// 缝纫工作时压脚高度 + 0, 0, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0146, repair)); + + // 模拟工作时机头高度, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 54, 0, 0, PARA_VALUE_TYPE_INT, + tr("Head height during simulated work"),// 模拟工作时机头高度 + 0, 0, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x0147, repair)); + + // 切刀工作转速, 范围 1--3000,默认 1200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_SPEED, + 55, 0, 0, PARA_VALUE_TYPE_INT, + tr("Cutter working speed"),// 切刀工作转速 + 1200, 1, 3000, 1200, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x0148, operate)); + + // 切刀加速度, 范围 1--100,默认 30 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 56, 0, 0, PARA_VALUE_TYPE_INT, + tr("Cutter acceleration"),// 切刀加速度 + 30, 1, 100, 30, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x0148, operate)); + + // 剪线动框方向, 范围 0--4,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 57, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Trimming frame direction"),// 剪线动框方向 + 0, 0, 4, 0, 0, tr(""), tr(""), + tr("Stop:0;Left:1;Forward:2;Right:3;Backward:4"),// 禁止移动:0;左:1;前:2;右:3;后:4 + 0, 0, 0x014A, repair)); + + // 压枣升降行程, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 58, 0, 0, PARA_VALUE_TYPE_INT, + tr("track formed up and down"),// 压枣升降行程 + 0, 0, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x014B, repair)); + + // 主轴拐角转速, 范围 1--3000,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 59, 0, 0, PARA_VALUE_TYPE_INT, + tr("Spindle corner speed"),// 主轴拐角转速 + 1000, 1, 3000, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x014C, operate)); + + // 降速最小偏差角度, 范围 0--180,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 60, 0, 0, PARA_VALUE_TYPE_INT, + tr("Minimum speed deviation angle"),// 降速最小偏差角度 + 0, 0, 180, 0, 0, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x014D, operate)); + + // 提前降速针步, 范围 0--10,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 61, 0, 0, PARA_VALUE_TYPE_INT, + tr("Slow down the needle step in advance"),// 提前降速针步 + 0, 0, 10, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x014E, operate)); + + // 延迟提速针步, 范围 0--10,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 62, 0, 0, PARA_VALUE_TYPE_INT, + tr("Delay speed up needle step"),// 延迟提速针步 + 0, 0, 10, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x014F, operate)); + + // 冲孔旋转减速最小偏差角度, 范围 0--180,默认 90 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 63, 0, 0, PARA_VALUE_TYPE_INT, + tr("Minimum deviation angle of punching rotation deceleration"),// 冲孔旋转减速最小偏差角度 + 90, 0, 180, 90, 0, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x0150, operate)); + + // 冲孔旋转持续角度, 范围 0--36000,默认 22000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 64, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punch rotation duration angle"),// 冲孔旋转持续角度 + 22000, 0, 36000, 22000, 0, cod->toUnicode("°"), tr(""), + tr(""), 22000, 22000, 0x0151, operate)); + + // 缝纫机头工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 65, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Working permission of sewing machine head"),// 缝纫机头工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0152, operate)); + + // 冲孔机头工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 65, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Work permit of punch head"),// 冲孔机头工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0153, operate)); + + // 绣花机头工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 65, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Embroidery machine head work permit"),// 绣花机头工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0154, operate)); + + // 开机自动找零开启, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 67, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Auto Zero after power on"),// 绣花机头工作允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0155, repair)); + + // 冲头旋转控制1, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 1"),// 冲头旋转控制1 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0156, repair)); + + // 冲头旋转控制2, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 2"),// 冲头旋转控制2 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0157, repair)); + + // 冲头旋转控制3, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 3"),// 冲头旋转控制3 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0158, repair)); + + // 冲头旋转控制4, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 4"),// 冲头旋转控制4 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0159, repair)); + + // 冲头旋转控制5, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 5, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 5"),// 冲头旋转控制5 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x015A, repair)); + + // 冲头旋转控制6, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 68, 6, 0, PARA_VALUE_TYPE_LIST, + tr("Punch rotation control 6"),// 冲头旋转控制6 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x015B, repair)); + + // 换色启动方式,0,自动换色,自动启动;1,自动换色,手动启动;2,手动换色,手动启动 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 71, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Color change start method"),//换色启动方式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("Automatic color Automatic start:0;Automatic color Manual start:1;Manual color Manual start:2"), + 0, 0, 0x015C, operate)); + + // X绣框换向补偿, 范围 -100--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 72, 0, 0, PARA_VALUE_TYPE_INT, + tr("X frame commutation compensation"),// X绣框换向补偿 + 0, -100, 100, 0, 0, tr("mm"), tr(""), + tr(""), 0, 0, 0x015D, repair)); + + // Y绣框换向补偿, 范围 -100--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 73, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y frame commutation compensation"),// Y绣框换向补偿 + 0, -100, 100, 0, 0, tr("mm"), tr(""), + tr(""), 0, 0, 0x015F, repair)); + + // 平绣补绣方式, 范围 0--2,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 74, 0, 0, PARA_VALUE_TYPE_LIST, + tr("The way of mending flat embroidery"),// 平绣补绣方式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("mending emb off: 0 ; mending emb by hand: 1 ; mending emb auto: 2"), //补绣关闭:0;手动:1;自动:2 + 0, 0, 0x0160, operate)); + + // 锁针次数, 范围 0--5,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 75, 0, 0, PARA_VALUE_TYPE_INT, + tr("Locking times"),// 锁针次数 + 0, 0, 5, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0161, operate)); + + // 锁针步数, 范围 0--5,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 76, 0, 0, PARA_VALUE_TYPE_INT, + tr("Number of needle locking steps"),// 锁针步数 + 0, 0, 5, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0162, operate)); + + // 锁针针步长度, 范围 0--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 77, 0, 0, PARA_VALUE_TYPE_INT, + tr("Length of lock needle"),// 锁针针步长度 + 0, 0, 100, 0, 0, tr("mm"), tr(""), + tr(""), 0, 0, 0x0163, operate)); + + // 开始工作模式, 0,从停车点开始;1,从当前位置开始,不保存;2,从当前位置开始,保存 , 默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 78, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Start working position mode"),// 锁针针步长度 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("From the Stop lot: 0 ; From the current location, do not save: 1 ; From the current location, save: 2"), + 0, 0, 0x0164, operate)); + + // 冲孔跳针变越框针数 ,范围0-100,单位,针,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 79, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching jump stitches to change the number of stitches beyond the frame"),// 冲孔跳针变越框针数 + 5, 0, 100, 5, 0, tr("Needles"), tr(""), + tr(""), 0, 0, 0x0165, repair)); + + // 冲孔点动模式, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 80, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Punching jog mode"),// 冲孔点动模式 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Lock rotate:0;rotate Lock:1"), 0, 0, 0x0161, repair));//0,先锁头,再旋转;1,先旋转,再锁头 + + // 倒车工作模式, 范围 0--2,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 81, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Reverse operation mode"),// 倒车工作模式 + 0, 0, 2, 0, 0, tr(""), tr(""), + tr("normal:0;click:1;continue click:2"), 0, 0, 0x0162, repair));//0,普通模式;1,点动模式;2,持续点动模式 + + // 特殊针位选择, 范围 0--9,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 82, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle choose"),// 特殊针位选择 + 0, 0, 9, 0, 0, tr(""), tr(""), + tr("nothing:0;one:1;two:2;three:3;four:4;five:5;six:6;seven:7;eight:8;nine:9"), + 0, 0, 0x0163, factory));//0,无;1-9,1-9针位 + + // 特殊针位功能, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 83, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Special needle function"),// 特殊针位功能 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Carved hole:0;paint brush:1"), 0, 0, 0x0164, factory));//0,雕孔;1,画笔 + + // 吸尘器启动延时, 范围 0--S32_MAX,单位秒,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 84, 0, 0, PARA_VALUE_TYPE_INT, + tr("Vacuum cleaner start delay"),// 吸尘器启动延时 + 0, 0, S32_MAX, 0, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x0165, operate)); + + // 换色速度,范围1-2000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 99, 0, 0, PARA_VALUE_TYPE_INT, + tr("Color change speed"),// 换色速度 + 200, 1, 2000, 200, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x0167, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 1, 0, PARA_VALUE_TYPE_SW, + tr("first head"),// 第一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0170, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 2, 0, PARA_VALUE_TYPE_SW, + tr("second head"),// 第二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0171, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 3, 0, PARA_VALUE_TYPE_SW, + tr("third head"),// 第三个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0172, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 4, 0, PARA_VALUE_TYPE_SW, + tr("fourth head"),// 第四个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0173, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 5, 0, PARA_VALUE_TYPE_SW, + tr("fifth head"),// 第五个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0174, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 6, 0, PARA_VALUE_TYPE_SW, + tr("sixth head"),// 第六个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0175, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 7, 0, PARA_VALUE_TYPE_SW, + tr("seventh head"),// 第七个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0176, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 8, 0, PARA_VALUE_TYPE_SW, + tr("eighth head"),// 第八个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0177, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 9, 0, PARA_VALUE_TYPE_SW, + tr("ninth head"),// 第九个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0178, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 10, 0, PARA_VALUE_TYPE_SW, + tr("tenth head"),// 第十个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0179, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 11, 0, PARA_VALUE_TYPE_SW, + tr("eleventh head"),// 第十一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017A, operate)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 12, 0, PARA_VALUE_TYPE_SW, + tr("twelfth head"),// 第十二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017B, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 13, 0, PARA_VALUE_TYPE_SW, + tr("thirteenth head"),// 第十三个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017C, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 14, 0, PARA_VALUE_TYPE_SW, + tr("fourteenth head"),// 第十四个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017D, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 15, 0, PARA_VALUE_TYPE_SW, + tr("fifteenth head"),// 第十五个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017E, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 16, 0, PARA_VALUE_TYPE_SW, + tr("sixteent head"),// 第十六个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x017F, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 17, 0, PARA_VALUE_TYPE_SW, + tr("seventeenth head"),// 第十七个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0180, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 18, 0, PARA_VALUE_TYPE_SW, + tr("eighteenth head"),// 第十八个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0181, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 19, 0, PARA_VALUE_TYPE_SW, + tr("nineteenth head"),// 第十九个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0182, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 20, 0, PARA_VALUE_TYPE_SW, + tr("twentieth head"),// 第二十个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0183, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 21, 0, PARA_VALUE_TYPE_SW, + tr("twenty-first head"),// 第二十一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0184, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 22, 0, PARA_VALUE_TYPE_SW, + tr("twenty-second head"),// 第二十二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0185, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 23, 0, PARA_VALUE_TYPE_SW, + tr("twenty-third head"),// 第二十三个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0186, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 24, 0, PARA_VALUE_TYPE_SW, + tr("twenty-fourth head"),// 第二十四个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0187, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 25, 0, PARA_VALUE_TYPE_SW, + tr("twenty-fifth head"),// 第二十五个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0188, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 26, 0, PARA_VALUE_TYPE_SW, + tr("twenty-sixth head"),// 第二十六个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0189, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 27, 0, PARA_VALUE_TYPE_SW, + tr("twenty-seventh head"),// 第二十七个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018A, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 28, 0, PARA_VALUE_TYPE_SW, + tr("twenty-eighth head"),// 第二十八个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018B, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 29, 0, PARA_VALUE_TYPE_SW, + tr("twenty-ninth head"),// 第二十九个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018C, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 30, 0, PARA_VALUE_TYPE_SW, + tr("thirtieth head"),// 第三十个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018D, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 31, 0, PARA_VALUE_TYPE_SW, + tr("thirty-first head"),// 第三十一个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018E, repair)); + + // 工作机头选择,位图选择,共支持32个机头; 0, 不允许工作; 1, 允许工作; bit0 第一个机头, bit1, 第二个机头...... 2 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 100, 32, 0, PARA_VALUE_TYPE_SW, + tr("thirty-second head"),// 第三十二个机头 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x018F, repair)); + + // 安全输入光幕允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 101, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Secure input light curtain allows"),// 安全输入光幕允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0190, repair)); + + // 安全输入气压允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 101, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Safety input pressure allowed"),// 安全输入气压允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0191, repair)); + + // 安全输入上电信号允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 101, 3, 0, PARA_VALUE_TYPE_LIST, + tr("Safe input power-on signal allowed"),// 安全输入上电信号允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0192, repair)); + + // 安全输入安全门允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_DETECT, + 101, 4, 0, PARA_VALUE_TYPE_LIST, + tr("Safe input emergency door allowed"),// 安全输入安全门允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0193, repair)); + + // 自动气框允许, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 102, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic air box allowed"),// 自动气框允许 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 1, 1, 0x0194, operate)); + + // 自动气框延时闭合, 范围 0--5000,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 103, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Automatic air frame closing delay"),// 自动气框延时闭合 + 0, 0, 5000, 0, 0, tr("ms"), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0195, operate)); + + // 线迹偏移允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 104, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Stitch offset allows"),// 线迹偏移允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0196, operate)); + + // 循环工作允许, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_ACTION, + 105, 0, 0, PARA_VALUE_TYPE_LIST, + tr("Loop work allowed"),// 循环工作允许 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr("Not allow:0;Allowed:1"), 0, 0, 0x0197, operate)); + + // 右机头选择1, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 1, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 1"),// 右机头选择1 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0198, repair)); + + // 右机头选择2, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 2, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 2"),// 右机头选择2 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x0199, repair)); + + // 右机头选择3, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 3, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 3"),// 右机头选择3 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019A, repair)); + + // 右机头选择4, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 4, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 4"),// 右机头选择4 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019B, repair)); + + // 右机头选择5, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 5, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 5"),// 右机头选择5 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019C, repair)); + + // 右机头选择6, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 6, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 6"),// 右机头选择6 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019D, repair)); + + // 右机头选择7, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 7, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 7"),// 右机头选择7 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019E, repair)); + + // 右机头选择8, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 8, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 8"),// 右机头选择8 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x019F, repair)); + + // 右机头选择9, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 9, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 9"),// 右机头选择9 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A0, repair)); + + // 右机头选择10, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 10, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 10"),// 右机头选择10 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A1, repair)); + + // 右机头选择11, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 11, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 11"),// 右机头选择11 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A2, repair)); + + // 右机头选择12, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 12, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 12"),// 右机头选择12 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A3, repair)); + + // 右机头选择13, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 13, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 13"),// 右机头选择13 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A4, repair)); + + // 右机头选择14, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 14, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 14"),// 右机头选择14 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A5, repair)); + + // 右机头选择15, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 15, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 15"),// 右机头选择15 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A6, repair)); + + // 右机头选择16, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 16, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 16"),// 右机头选择16 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A7, repair)); + + // 右机头选择17, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 17, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 17"),// 右机头选择17 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A8, repair)); + + // 右机头选择18, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 18, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 18"),// 右机头选择18 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01A9, repair)); + + // 右机头选择19, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 19, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 19"),// 右机头选择19 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AA, repair)); + + // 右机头选择20, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 20, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 20"),// 右机头选择20 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AB, repair)); + + // 右机头选择21, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 21, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 21"),// 右机头选择21 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AC, repair)); + + // 右机头选择22, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 22, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 22"),// 右机头选择22 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AD, repair)); + + // 右机头选择23, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 23, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 23"),// 右机头选择23 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AE, repair)); + + // 右机头选择24, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 24, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 24"),// 右机头选择24 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01AF, repair)); + + // 右机头选择25, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 25, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 25"),// 右机头选择25 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B0, repair)); + + // 右机头选择26, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 26, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 26"),// 右机头选择26 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B1, repair)); + + // 右机头选择27, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 27, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 27"),// 右机头选择27 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B2, repair)); + + // 右机头选择28, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 28, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 28"),// 右机头选择28 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B3, repair)); + + // 右机头选择29, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 29, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 29"),// 右机头选择29 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B4, repair)); + + // 右机头选择30, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 30, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 30"),// 右机头选择30 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B5, repair)); + + // 右机头选择31, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 31, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 31"),// 右机头选择31 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B6, repair)); + + // 右机头选择32, 范围 0--1,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 106, 32, 0, PARA_VALUE_TYPE_SW, + tr("Right Work head selection 32"),// 右机头选择32 + 0, 0, 1, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01B7, repair)); + + // 拉料电机拉料位置, 范围 S32_MIN--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 107, 0, 0, PARA_VALUE_TYPE_INT, + tr("Pulling motor pull position"),// 拉料电机拉料位置 + 0, S32_MIN, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01B8, repair)); + + // 拉料长度, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 108, 0, 0, PARA_VALUE_TYPE_INT, + tr("Pull length"),// 拉料长度 + 0, 0, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01BA, operate)); + + // 裁切长度, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 109, 0, 0, PARA_VALUE_TYPE_INT, + tr("Cutting length"),// 裁切长度 + 0, 0, S32_MAX, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01BB, operate)); + + // 梭加油持续时间, 范围 0--S32_MAX,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 110, 0, 0, PARA_VALUE_TYPE_INT, + tr("Shuttle refueling duration"),// 梭加油持续时间 + 0, 0, S32_MAX, 0, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x01BC, operate)); + + // 夹线力度1, 范围 0--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 111, 0, 0, PARA_VALUE_TYPE_INT, + tr("Clamping force 1"),// 夹线力度1 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01BD, operate)); + + // 夹线力度2, 范围 0--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 112, 0, 0, PARA_VALUE_TYPE_INT, + tr("Clamping force 2"),// 夹线力度2 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01BE, operate)); + + // 夹线力度3, 范围 0--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 113, 0, 0, PARA_VALUE_TYPE_INT, + tr("Clamping force 3"),// 夹线力度3 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01BF, operate)); + + // 夹线力度4, 范围 0--100,默认 0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING, + 114, 0, 0, PARA_VALUE_TYPE_INT, + tr("Clamping force 4"),// 夹线力度4 + 0, 0, 100, 0, 0, tr(""), tr(""), + tr(""), 0, 0, 0x01C0, operate)); + + // 平绣主轴工作转速, 范围 1--1200,默认 1000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_WORK|MC_SORT_SPEED, + 115, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery spindle working speed"),// 平绣主轴工作转速 + 1000, 1, 1200, 1000, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x01C1, operate)); + + // 平绣加速度, 范围 1--100,默认 5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 116, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery acceleration"),// 平绣加速度 + 5, 1, 100, 5, 0, tr("r/ss"), tr(""), + tr(""), 0, 0, 0x01C2, operate)); + + // 平绣动框方式, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 117, 1, 0, PARA_VALUE_TYPE_LIST, + tr("Flat embroidery frame"),// 平绣动框方式 + 1, 0, 1, 1, 0, tr(""), tr(""), + tr("continuous: 0 ; intermittent: 1"), 1, 1, 0x01C3, repair));//连续:0;间歇:1 + + // 平绣动框方式 xy间歇式脉冲无加减速, 范围 0--1,默认 1 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 117, 2, 0, PARA_VALUE_TYPE_LIST, + tr("Flat embroidery acceleration mode"),// 平绣动框方式 xy间歇式脉冲无加减速 + 1, 0, 1, 1, 0, tr(""), tr(""), //无加速或减速:0;XY正弦加减速:1 + tr("No acceleration or deceleration: 0 ; Xy sine acceleration and deceleration: 1"), + 1, 1, 0x01C4, repair)); + + // 平绣动框起始角度, 范围 0--36000,默认 24000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 118, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery frame starting angle"),// 平绣动框起始角度 + 24000, 0, 36000, 24000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x01C5, repair)); + + // 平绣动框持续角度, 范围 0--36000,默认 20000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 119, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery frame continuous angle"),// 平绣动框持续角度 + 20000, 0, 36000, 20000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x01C6, repair)); + + // 跳针最大速度, 范围 100--1200,默认 600 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 120, 0, 0, PARA_VALUE_TYPE_INT, + tr("jump max speed"),// 跳针最大速度 + 600, 100, 1200, 600, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x01C7, operate)); + + // 平绣跳针变越框针数, 范围 0--20,默认 3 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 121, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery jump to offset Needles count"),// 平绣跳针变越框针数 + 3, 0, 20, 3, 0, tr("needle"), tr(""), + tr(""), 0, 0, 0x01C8, operate)); + + // 平绣动框最高速度, 范围 10--1000,默认 100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 122, 0, 0, PARA_VALUE_TYPE_INT, + tr("Embroidery move max speed"),// 平绣动框最高速度 + 100, 10, 1000, 100, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x01C9, repair)); + + // 冲孔主轴启动慢动转速, 范围 1--2000,单位r/min,默认 500 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 169, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching spindle start slow speed"),// 冲孔主轴启动慢动转速 + 500, 1, 2000, 500, 0, tr("r/min"), tr(""), + tr(""), 0, 0, 0x01CA, operate)); + + // X工作范围, 范围 0--500000,默认 90000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 174, 0, 0, PARA_VALUE_TYPE_INT, + tr("X working range"),// X工作范围 + 90000, 0, 500000, 90000, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01CB, factory)); + + // Y工作范围, 范围 0--5000000,默认 60000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 175, 0, 0, PARA_VALUE_TYPE_INT, + tr("Y working range"),// Y工作范围 + 60000, 0, 500000, 60000, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01CC, factory)); + + // 冲孔旋转传感器角度,范围-36000--36000,单位0.01度,默认9000 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 176, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching rotation sensor angle"),// 冲孔旋转传感器角度 + 9000, -36000, 36000, 9000, 2, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x01CD, repair)); + + // 冲孔动框最高速度,范围1-1000,单位mm/s,默认200 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SPEED, + 177, 0, 0, PARA_VALUE_TYPE_INT, + tr("Maximum speed of punching frame"),// 冲孔动框最高速度 + 200, 1, 1000, 200, 0, tr("mm/s"), tr(""), + tr(""), 0, 0, 0x01CE, repair)); + + // 绣花剪线勾线延迟,范围0-500,单位ms,默认250 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 178, 0, 0, PARA_VALUE_TYPE_INT, + tr("Embroidery trimming thread hooking delay"),// 绣花剪线勾线延迟 + 250, 0, 500, 250, 0, tr("ms"), tr(""), + tr(""), 0, 0, 0x01CF, operate)); + + // 冲孔运针变跳针长度,范围0-2000,单位0.01mm,默认0 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_SETTING|MC_SORT_POSITION, + 180, 0, 0, PARA_VALUE_TYPE_INT, + tr("Length of punching needle changing to skipping needle"),// 冲孔运针变跳针长度 + 0, 0, 2000, 0, 2, tr("mm"), tr(""), + tr(""), 0, 0, 0x01D0, operate)); + + // 冲孔吸尘器启动持续时间,范围0-100,单位s,默认5 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 181, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching vacuum cleaner start duration"),// 冲孔吸尘器启动持续时间 + 5, 0, 100, 5, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x01D1, operate)); + + // 冲孔吸尘器启动间隔,范围0-500,单位s,默认60 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_ACTION, + 182, 0, 0, PARA_VALUE_TYPE_INT, + tr("Punching vacuum cleaner start interval"),// 冲孔吸尘器启动间隔 + 60, 0, 500, 60, 0, tr("s"), tr(""), + tr(""), 0, 0, 0x01D2, operate)); + + // 平绣扣线角度,范围0--360,单位度,默认100 + m_allParasList.append(makeAParaItem(0, + PARA_TYPE_WORK, + MC_SORT_POSITION, + 185, 0, 0, PARA_VALUE_TYPE_INT, + tr("Flat embroidery thread angle"),// 平绣扣线角度 + 100, 0, 360, 100, 0, cod->toUnicode("°"), tr(""), + tr(""), 0, 0, 0x01D3, repair)); + +} + +//电机和控制动作 +void TemplateSewMachine::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("Sewing needle spindle 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,0x0003,tr("Needle motor"),MT_LN,// 针电机 + 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("Shuttle motor"),MT_LH,// 梭电机 + 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("Lift motor"),MT_LU,// 升降电机 + 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("ratating motor"),MT_LR,// 旋转电机 + 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("Up ratating motor"),MT_LRU,// 上旋转电机 + 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("Down ratating motor"),MT_LRD,// 下旋转电机 + 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,0x0005,tr("Punch main axis"),MT_LPM,// 冲孔主轴电机 + 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,0x0006,tr("Embroider main axis motor"),MT_LEM,// 绣花主轴电机 + 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,0x0006,tr("Punching color change motor"),MT_LPS,// 冲孔换色电机 + 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,0x0006,tr("Punching color rorating motor"),MT_LPR,// 冲孔旋转电机 + 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,0x0006,tr("Embroidered color rorating motor"),MT_ECM,// 平绣换色电机 + 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,0x0006,tr("Embroider Needle Spindle"),MT_EMN,// 平绣针主轴 + 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,0x0006,tr("Embroider shutle Spindle"),MT_EMH,// 平绣梭主轴 + 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,0x0007,tr("loose thread"),OT_LOOSE_THREAD,//松紧线 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + relaxStr,true,OUTCONTROL_OPEN,-1,-1, + clampStr,true,OUTCONTROL_CLOSE,-1,-1)); + +// m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0008,tr("up cutter cut"),OT_UCUT_THREAD,//上剪刀剪线 +// "",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,0x0009,tr("down cutter cut"),OT_DCUT_THREAD,//下剪刀剪线 + "",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,0x000A,tr("fuel charging"),OT_OIL,//加油 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + startStr,true,OUTCONTROL_OPEN,-1,-1, + stopStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000B,tr("light "),OT_LIGHT,//照明灯 + "",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,0x000C,tr("mid press foot"),OT_MID_FOOT,//中压脚 + "",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,0x000E,tr("kou blow thread"),OT_PUSH_BTRD,//扣底线 + "",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,0x000F,tr("clip up thread"),OT_CLIP_UTRD,//夹面线 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + clampStr,true,OUTCONTROL_OPEN,-1,-1, + relaxStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0011,tr("sewing head lift"),OT_SEW_LIFT,//缝纫机头升降 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + upStr,true,OUTCONTROL_ENABLE,-1,-1, + downStr,true,OUTCONTROL_DISABLE,-1,-1)); + +// m_allOutCtrlList.append(makeAOutCtrlItem(0,0x000A,tr("punching head lift"),OT_PUNCH_LIFT,//冲孔机头升降 +// "",false,-1,-1,-1, +// "",false,-1,-1,-1, +// "",false,-1,-1,-1, +// upStr,true,MOTORHEADO_UP,-1,-1, +// downStr,true,MOTORHEADO_DOWN,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0012,tr("sew blow"),OT_PUSH_BTRD,//缝纫吹气 + "",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,0x0012,tr("kou blow thread"),OT_PUNCH_BLOW,//冲孔吹气 +// "",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,0x0013,tr("cleaner "),OT_CLEANER,//吸尘器 + "",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,0x0014,tr("Hook action extension"),OT_CLIP_EXTEND,//勾线动作伸缩 + "",false,-1,-1,-1, + "",false,-1,-1,-1, + "",false,-1,-1,-1, + outStr,true,OUTCONTROL_OPEN,-1,-1, + backStr,true,OUTCONTROL_CLOSE,-1,-1)); + + m_allOutCtrlList.append(makeAOutCtrlItem(0,0x0015,tr("Hook action opening and closing"),OT_CLIP_EXTEND,//勾线动作开合 + "",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,0x0016,tr("embroider cutter"),OT_EMB_CUT,//平绣剪刀 + "",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,0x0017,tr("embroider push"),OT_EMB_PUSH,//平绣扣线 + "",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,0x0018,tr("embroider clip thread"),OT_EMB_CLIP,//平绣夹面线 + "",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,0x0019,tr("embroider fuel charging"),OT_EMB_OIL,//平绣加油 + "",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,0x001A,tr("embroider hook thread"),OT_EMB_HOOK,//平绣勾线 + "",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,0x001B,tr("embroider lock"),OT_EMB_LOCK,//平绣锁头 + "",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,0x001C,tr("punch fuel charging"),OT_PUNCH_OIL,//冲孔加油 +// "",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,0x001D,tr("punch lock"),OT_PUNCH_LOCK,//冲孔锁头 +// "",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 TemplateSewMachine::initShortCutList() +{ + m_allShortCutList.clear(); + + m_allShortCutList.append(makeAShortCutItem(0,0x0001,tr("All To Zero"),"buttonAllToZero",FUN_ALLTOZERO));//全部归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0002,tr("Set Offset"),"buttonSetOffsetPoint",FUN_SETOFFSETPOINT));//定偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x0003,tr("Sew Start"),"buttonSetStartPoint",FUN_SETSTARTPOINT));//缝纫定起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x0004,tr("Sew Anchor"),"buttonSetAnchorPoint",FUN_SETANCHORPOINT));//缝纫定定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x0005,tr("Punch Start"),"buttonSetStartPoint",FUN_SECSETSTARTPOINT));//冲孔定起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x0006,tr("Punch Anchor"),"buttonSetAnchorPoint",FUN_SECSETANCHORPOINT));//冲孔定定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x0007,tr("Emb Start"),"buttonSetStartPoint",FUN_THRIDSETSTARTPOINT));//绣花定起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x0008,tr("Emb Anchor"),"buttonSetAnchorPoint",FUN_THRIDSETANCHORPOINT));//绣花定定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x0009,tr("Check Frame"),"buttonBorderCheck",FUN_CHECKFRAME));//边框检查 + m_allShortCutList.append(makeAShortCutItem(0,0x000A,tr("Back Offset"),"buttonBackOffsetPoint",FUN_BACKOFFSETPOINT));//回偏移点 + m_allShortCutList.append(makeAShortCutItem(0,0x000B,tr("Back Start"),"buttonBackAnchorPoint",FUN_BACKSTARTPOINT));//回起始点 + m_allShortCutList.append(makeAShortCutItem(0,0x000C,tr("To Work Point"),"buttonBackWorkPoint",FUN_BACKWORKPOINT));//回工作点 + m_allShortCutList.append(makeAShortCutItem(0,0x000D,tr("To anchor Point"),"buttonBackAnchorPoint",FUN_BACKANCHORPOINT));//回定位点 + m_allShortCutList.append(makeAShortCutItem(0,0x000E,tr("Back to nthreading point"),"buttonBackWorkPoint",FUN_BACKTHREADPOINT));//回穿线点 + m_allShortCutList.append(makeAShortCutItem(0,0x000F,tr("To Center point"),"buttonToCenterDot",FUN_RETURNTOCENTERPOINT));//回中心点 + m_allShortCutList.append(makeAShortCutItem(0,0x0010,tr("Frame Zero"),"buttonFrameZero",FUN_FRAMEZERO));//框架归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0011,tr("To Right Up"),"buttonMoveToRightUp",FUN_MOVETORIGHTUP));//去右上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0012,tr("To Right Down"),"buttonMoveToRightDown",FUN_MOVETORIGHTDOWN));//去右下角 + m_allShortCutList.append(makeAShortCutItem(0,0x0013,tr("To Left Up"),"buttonMoveToLeftUp",FUN_MOVETOLEFTUP));//去左上角 + m_allShortCutList.append(makeAShortCutItem(0,0x0014,tr("To Left Down"),"buttonMoveToLeftDown",FUN_MOVETOLEFTDOWN));//去左下角 + m_allShortCutList.append(makeAShortCutItem(0,0x0015,tr("Scope Work"),"buttonSetWorkRange",FUN_SETWORKRANGE));//定工作范围 + m_allShortCutList.append(makeAShortCutItem(0,0x0016,tr("Sew Spindle Test"),"buttonSpindleTest",FUN_SEWSPINDLETEST));// 缝纫主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x0017,tr("Sew trim"),"buttonManualTrim",FUN_SEWHEADCUTLINEO));//缝纫剪线 + m_allShortCutList.append(makeAShortCutItem(0,0x0018,tr("Sew Head Up Dn"),"buttonHeadUpDn",FUN_SEWMOTORUPDOWN));//缝纫机头升降 + m_allShortCutList.append(makeAShortCutItem(0,0x0019,tr("Sew Spindle Jog"),"buttonSpindleJog",FUN_SEWSPINDLEJOG));//缝纫主轴点动 + m_allShortCutList.append(makeAShortCutItem(0,0x001A,tr("Sew Hook Position"),"buttonSewHookPosi",FUN_SEWHOOKPOSITION));//缝纫主轴去勾线位 + m_allShortCutList.append(makeAShortCutItem(0,0x001B,tr("Rotate nproofreading"),"buttonSpindleRotate",FUN_ROTATEPROOFREAD));//缝纫旋转校对 + m_allShortCutList.append(makeAShortCutItem(0,0x001C,tr("Switch Sew Head"),"buttonSewHead",FUN_SELECTSEWHEAD));//切换缝纫机头 + m_allShortCutList.append(makeAShortCutItem(0,0x001D,tr("Punch Spindle Jog"),"buttonSpindleJog",FUN_PUNCHSPINDLEJOG));//冲孔主轴点动 + m_allShortCutList.append(makeAShortCutItem(0,0x001E,tr("Punch Spindle Test"),"buttonSpindleTest",FUN_SPINDLETEST));//冲孔主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x001F,tr("Punching Change Tool"),"buttonManualChangeColor",FUN_PUNCHMANUALCHANGECOLOR));//冲孔换刀 + m_allShortCutList.append(makeAShortCutItem(0,0x0020,tr("Punch Rod Zero"),"buttonPunchRodZero",FUN_PUNCHNEEDLEZERO));//冲孔换杆归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0021,tr("Single Punch"),"buttonSinglePunch",FUN_SINGLEPUNCH));//单次冲孔 + m_allShortCutList.append(makeAShortCutItem(0,0x0022,tr("Punch Stop Lower"),"buttonPunchStopLower",FUN_PUNCHSTOPLOWER));//冲头停下位 + m_allShortCutList.append(makeAShortCutItem(0,0x0023,tr("Rotate To Zero"),"buttonRotToZero",FUN_PUNCH_ROT_TO_ZERO));//冲孔旋转去零位 + m_allShortCutList.append(makeAShortCutItem(0,0x0024,tr("Switch Punch Head"),"buttonPunchHead",FUN_SELECTPUCNHHEAD));//切换冲孔机头 + m_allShortCutList.append(makeAShortCutItem(0,0x0025,tr("Emb spindle"),"buttonSpindleTest",FUN_SEWEMBSPINDLETEST));//平绣主轴研车 + m_allShortCutList.append(makeAShortCutItem(0,0x0026,tr("Emb Hook Position"),"buttonEmbHookPosi",FUN_EMBHOOKPOSITION));//平绣主轴去勾线位 + m_allShortCutList.append(makeAShortCutItem(0,0x0027,tr("Emb jog"),"buttonSinglePunch",FUN_SEWEMBSPINDLEJOG));//平绣点动 + m_allShortCutList.append(makeAShortCutItem(0,0x0028,tr("Emb thread cut"),"buttonManualTrim",FUN_SEWEMBCUTLINE));//平绣剪线 + m_allShortCutList.append(makeAShortCutItem(0,0x0029,tr("Emb change color"),"buttonManualChangeColor",FUN_SEWEMBCHANGECOLOR));//平绣换色 + m_allShortCutList.append(makeAShortCutItem(0,0x002A,tr("Switch Emb Head"),"buttonHeadEmb",FUN_SELECTEMBHEAD));//切换平绣机头 + m_allShortCutList.append(makeAShortCutItem(0,0x002B,tr("Forward And Back"),"buttonForwardOrBack",FUN_FORWARDORBACK));//前进回退 + // m_allShortCutList.append(makeAShortCutItem(0,0x0010,tr("ProcessReset"),"buttonProcessReset",FUN_PROCESSRESET));//流程复位 + m_allShortCutList.append(makeAShortCutItem(0,0x002C,tr("Needle shuttle proofread"),"buttonNeedleTest",FUN_NEEDLECONTRAST));//针梭校对 + m_allShortCutList.append(makeAShortCutItem(0,0x002D,tr("Needle shuttle reset"),"buttonAllToZero",FUN_NEEDLESHUTTLERESET));//针梭复位 + m_allShortCutList.append(makeAShortCutItem(0,0x002E,tr("Back shuttle pos"),"buttonAllToZero",FUN_BACKSHUTTLEPOS));//回换梭位 + m_allShortCutList.append(makeAShortCutItem(0,0x002F,tr("Needle reset"),"buttonFlatEmbHook",FUN_NEEDLERESET));//针归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0030,tr("Shuttle reset"),"buttonBackFeedingPoint",FUN_SHUTTLERESET));//梭归零 + m_allShortCutList.append(makeAShortCutItem(0,0x0031,tr("Sew rotate up"),"buttonSpindleRotate",FUN_SEWROTATEUP));//缝纫旋转+ + m_allShortCutList.append(makeAShortCutItem(0,0x0032,tr("Sew rotate down"),"buttonSpindleRotate",FUN_SEWROTATEDOWN));//缝纫旋转- +} + +//初始化辅助功能列表 +void TemplateSewMachine::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,0x000D,tr("ShortcutSet"),"buttonCommonFunction",ASSIST_SHORTCUTSET));//常用设置 + m_allAssistList.append(makeAAssistItem(0,0x000E,tr("Productnum"),"buttonProductStatistics",ASSIST_PRODUCTSTATICS));//生产统计 + m_allAssistList.append(makeAAssistItem(0,0x000F,tr("Version"),"buttonVersionInfo",ASSIST_MCVERSION));//版本信息 + m_allAssistList.append(makeAAssistItem(0,0x0016,tr("Debug"),"buttonRoot",ASSIST_DEBUG));//调试功能 + m_allAssistList.append(makeAAssistItem(0,0x0010,tr("CountReset"),"buttonBottomCountReset",ASSIST_BOTTOMLINECOUNTRESET));//底线计数复位 + m_allAssistList.append(makeAAssistItem(0,0x0014,tr("Root"),"buttonRoot",ASSIST_ROOT));//超级用户 +} + +//初始化花样设置列表 +void TemplateSewMachine::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,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));//花样删除 +} + +//初始化参数设置列表 +void TemplateSewMachine::initParaSetList() +{ + m_allParaSetList.clear(); + + m_allParaSetList.append(makeAParaSetItem(0,0x0001,tr("WorkPara"),"buttonWorkParas",PARASET_WORK));//工作参数 //操作参数 + m_allParaSetList.append(makeAParaSetItem(0,0x0002,tr("OperatPara"),"buttonOperatParas",PARASET_SETTING));//设置参数 //操作参数 + m_allParaSetList.append(makeAParaSetItem(0,0x0003,tr("ActionSet"),"buttonActionParas",PARASET_ACTION));//动作参数 //动作设定 + m_allParaSetList.append(makeAParaSetItem(0,0x0004,tr("SpeedPara"),"buttonSpeedParas",PARASET_SPEED));//速度参数 //速度控制参数 + m_allParaSetList.append(makeAParaSetItem(0,0x0005,tr("LimitPara"),"buttonPositionParas",PARASET_POSITION));// 位置参数 //限位参数 + m_allParaSetList.append(makeAParaSetItem(0,0x0006,tr("DetectPara"),"buttonSettingParas",PARASET_DETECT));//检测参数 //检测参数 +} + +//初始化调试功能 +void TemplateSewMachine::initDebugFunList() +{ + m_allDebugFunList.clear(); + + m_allDebugFunList.append(makeADebugItem(0,0x0001,tr("CutLine"),"buttonPosParas",DEBUG_TRIM));//剪线调试 + m_allDebugFunList.append(makeADebugItem(0,0x0002,tr("PunchKnife"),"buttonSpeedParas",DEBUG_DIECUTTER));//冲刀调试 + m_allDebugFunList.append(makeADebugItem(0,0x0003,tr("NeedleShuttle"),"buttonSpeedParas",DEBUG_NEEDLESHUTTLE));//针梭调试 +} + + +//初始化传感器列表 +void TemplateSewMachine::initSensorList() +{ + QList sensorList; + + sensorList.append(makeASensorItem(0x0000, 0, tr("Start button")));//启动按钮 + sensorList.append(makeASensorItem(0x0001, 0, tr("Pause button")));//暂停按钮 + sensorList.append(makeASensorItem(0x0002, 0, tr("Jog button")));//点动按钮 + sensorList.append(makeASensorItem(0x0007, 0, tr("Air pressure protection input")));//气压保护输入 + sensorList.append(makeASensorItem(0x0008, 0, tr("Safety light curtains protection input")));//安全光幕输入 + sensorList.append(makeASensorItem(0x0020, 0, tr("X zero position")));//X零位 + sensorList.append(makeASensorItem(0x0020, 1, tr("Y zero position")));//Y零位 + sensorList.append(makeASensorItem(0x0021, 0, tr("X deceleration")));//X降速 + sensorList.append(makeASensorItem(0x0021, 1, tr("Y deceleration")));//Y降速 + sensorList.append(makeASensorItem(0x0022, 0, tr("X negative limit")));//X负限位 + sensorList.append(makeASensorItem(0x0022, 1, tr("Y negative limit")));//Y负限位 + sensorList.append(makeASensorItem(0x0023, 0, tr("X positive limit")));//X正限位 + sensorList.append(makeASensorItem(0x0023, 1, tr("Y positive limit")));//Y正限位 + sensorList.append(makeASensorItem(0x0030, 0, tr("Sewing on the machine head rotation zero position")));//缝纫上机头旋转零位 + sensorList.append(makeASensorItem(0x0036, 0, tr("Sewing under the machine head rotation zero position")));//缝纫下机头旋转零位 + sensorList.append(makeASensorItem(0x003E, 0, tr("Punching the rotary shaft at zero")));//冲孔旋转轴零位 + sensorList.append(makeASensorItem(0x0040, 0, tr("Sewing machine head lifting upper limit")));//缝纫机头升降上限位 + sensorList.append(makeASensorItem(0x0042, 0, tr("Lower lifting limit of sewing machine head")));//缝纫机头升降下限位 + sensorList.append(makeASensorItem(0x0080, 0, tr("Sewing spindle needle - parking space")));//缝纫针主轴停车位 + sensorList.append(makeASensorItem(0x0082, 0, tr("Sewing spindle needle - thread hooking position")));//缝纫针主轴勾线位 + sensorList.append(makeASensorItem(0x0088, 0, tr("Sewing shuttle parking space")));//缝纫梭主轴停车位 + sensorList.append(makeASensorItem(0x008A, 0, tr("Sewing rotary hook thread hook position")));//缝纫梭主轴勾线位 + sensorList.append(makeASensorItem(0x0090, 0, tr("Punching spindle zero position")));//冲孔主轴零位 + sensorList.append(makeASensorItem(0x0098, 0, tr("Flat needle spindle parking space")));//平绣针主轴停车位 + sensorList.append(makeASensorItem(0x009A, 0, tr("Flat embroidery needle spindle hook position")));//平绣针主轴勾线位 + sensorList.append(makeASensorItem(0x009C, 0, tr("Flat shuttle spindle parking space")));//平绣梭主轴停车位 + sensorList.append(makeASensorItem(0x009E, 0, tr("Flat embroidery shuttle spindle hook position")));//平绣梭主轴勾线位 + sensorList.append(makeASensorItem(0x0100, 0, tr("Flat embroidery under the scissors back in place")));//平绣下剪刀回位 + sensorList.append(makeASensorItem(0x0170, 0, tr("Sewing thread breakage detection")));//缝纫断线检测 + sensorList.append(makeASensorItem(0x0174, 0, tr("Sewing scissors return")));//缝纫下剪刀回位 + sensorList.append(makeASensorItem(0x0186, 0, tr("The small plate closes signal 1")));//小台板关闭信号1 + sensorList.append(makeASensorItem(0x0186, 1, tr("The small plate closes signal 2")));//小台板关闭信号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 TemplateSewMachine::initErrorCodeAndStateList() +{ + m_allErrorCodeAndStateList.clear(); + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_HK_NOT_ZERO, tr("The shuttle is not at zero")));//旋梭不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_MS_NOT_SYNC, tr("Needle and shuttle is out of sync")));//旋转不同步 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_RO_NOT_SYNC, tr("Rotation is out of sync")));//旋转不同步 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_NEEDLE_NOT_HIGH, tr("The needle is not at the high position")));//机针不在高位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_LIFT_TIMEOUT, tr("Head lift timeout")));//机头升降超时 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_HEAD_NOT_SAFE, tr("The head is not in the safty area")));//机头不在安全区域 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_NOT_ZERO, tr("Punching head main shaft is not at zero")));//冲孔主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_R_LIT_POSI, tr("Rotating positive limit")));//正向旋转限位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_R_LIT_NEGA, tr("Rotating negative limit")));//反向旋转限位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_FOOT_POS, tr("Foot position error")));//压脚位置错误 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_FOOT_OUT_RANGE, tr("Foot moto's position is out of range")));//压脚电机位置越界 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_LIFT_OUT_RANGE, tr("The head lift moto's position is out of range")));//机头升降位置越界 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_ROT_OUT_RANGE, tr("Rotation position out of range")));//旋转位置越界 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_LIFT_ULIMIT, tr("Head lift upper limit")));// 机头升降上限位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_LIFT_DLIMIT, tr("Head lift down limit")));// 机头升降下限位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_EMB_NOT_ZERO, tr("Emb main shaft is not at zero")));// 平绣主轴不在零位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_SWND_TIMOUT, tr("Punching color change timeout")));// 冲孔换色超时 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_EMB_SWND_TIMOUT, tr("Embroidered color change timeout")));//平绣换色超时 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_EMB_ND_ERR, tr("Emb needle bar's position error")));//平绣针位错误 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_PUNCH_ND_ERR, tr("Punch needle bar's position error")));//冲孔针位错误 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_EMB_HOOK_NOT_ZERO, tr("Err emb hook not zero")));//平绣勾刀未回位 + m_allErrorCodeAndStateList.append(makeAErrorStateItem(ERR_EMB_CUT_NOT_ZERO, tr("Err emb cut not zero")));//平绣剪刀未回位 +} + diff --git a/mctype/patternsingleboard/function/templatesewmachine.h b/mctype/patternsingleboard/function/templatesewmachine.h new file mode 100644 index 0000000..f961219 --- /dev/null +++ b/mctype/patternsingleboard/function/templatesewmachine.h @@ -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 diff --git a/mctype/patternsingleboard/mainUI/mainwidget.cpp b/mctype/patternsingleboard/mainUI/mainwidget.cpp new file mode 100644 index 0000000..18d81d6 --- /dev/null +++ b/mctype/patternsingleboard/mainUI/mainwidget.cpp @@ -0,0 +1,5156 @@ +#include "mainwidget.h" +#include "ui_mainwidget.h" +#ifdef Q_OS_WIN +#include +#endif +MainWidget::MainWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::MainWidget), + m_pPatternSelectWi(NULL), + m_pColorOrderSetWi(NULL), + m_pNeedleBarSetWi(NULL), + m_pParameterSetDlg(NULL), + m_pPatternManageWi(NULL), + m_pSensorInputWi(NULL), + m_pControlActionWi(NULL), + m_pMainWidgetFunction(NULL), + m_pSheetWi(NULL), + m_pSetWorkAreaWi(NULL), + m_pRotaComWi(NULL), + m_initflag(0), + m_timoutflag(0), + m_pTimer(NULL), + m_pConTimer(NULL), + m_conFlag(0), + m_linkSta(0) +{ + ui->setupUi(this); + + setWindowFlags (Qt::Widget | + Qt::Window | + Qt::FramelessWindowHint | // 无边框窗口 + // Qt::WindowStaysOnTopHint | // 顶层窗口 + Qt::Widget); + + setFocusPolicy(Qt::NoFocus); + + this->move(0,0); + initialize(); + + ui->lcdNumberSpeed->display("1200"); + //ui->labelParaType2->setWordWrap(true); +} + +MainWidget::~MainWidget() +{ + if(m_pTimer != NULL) + { + delete m_pTimer; + } + + if(m_pConTimer != NULL) + { + delete m_pConTimer; + } + + if(m_pMinTimer != NULL) + { + delete m_pMinTimer; + } + + if(m_pWifiConTimer != NULL) + { + delete m_pWifiConTimer; + } + + if(m_pRefreshVer != NULL) + { + delete m_pRefreshVer; + } + + if(m_pPatternSelectWi != NULL) + { + delete m_pPatternSelectWi; + } + + if(m_pColorOrderSetWi != NULL) + { + delete m_pColorOrderSetWi; + } + + if(m_pNeedleBarSetWi != NULL) + { + delete m_pNeedleBarSetWi; + } + + if(m_pParameterSetDlg != NULL) + { + delete m_pParameterSetDlg; + } + + if(m_pSensorInputWi != NULL) + { + delete m_pSensorInputWi; + } + if(m_pSetWorkAreaWi != NULL) + { + delete m_pSetWorkAreaWi; + } + + if(m_pRotaComWi != NULL) + { + delete m_pRotaComWi; + } + + if(m_pControlActionWi != NULL) + { + delete m_pControlActionWi; + } + + if(m_pMainWidgetFunction != NULL) + { + delete m_pMainWidgetFunction; + } + + if(m_pSheetWi != NULL) + { + delete m_pSheetWi; + } + + delete ui; +} + +void MainWidget::initialize() +{ + m_patternSelectStation = 0; + m_fileIdx = -1; + m_itemPerPage = 28;//快捷功能和辅助功能界面各28个按钮 + m_setControlStyle.setUiName(this->objectName()); + memset(m_fileColorTable,0,sizeof(m_fileColorTable)); + + hideMenuFrame(); + //主界面按钮选中 + ui->buttonMainMenu->setCheckable(true); + ui->buttonMainMenu->setChecked(true); + + ui->frameForwardBack->setVisible(false); + ui->frameShortcutBtn->setVisible(true); + clearFileInfo();//清除文件信息 + + ui->labelWorkState->setVisible(false); //正常工作/模拟工作 + ui->labelEnableWorkState->setVisible(false);//允许工作/禁止工作 + + memset(&m_mcStatus,0,sizeof(MCStatus)); + //定时器 + m_pTimer = new QTimer(this); + m_pTimer->setInterval(1000); // 设置定时间隔1秒 + connect(m_pTimer, SIGNAL(timeout()), this, SLOT(onOneSecondTimer())); + + //定时器 + m_pConTimer = new QTimer(this); + m_pConTimer->setInterval(5000); // 设置定时间隔5秒 + connect(m_pConTimer, SIGNAL(timeout()), this, SLOT(onFiveSecondTimer())); + + //定时器 + m_pWifiConTimer = new QTimer(this); + m_pWifiConTimer->setInterval(100000); // 设置定时间隔10分钟 + connect(m_pWifiConTimer, SIGNAL(timeout()), this, SLOT(onTenMiniteTimer())); + + //测试花样刷新的定时器 + m_pRefreshPatternTimer = new QTimer(this); + m_pRefreshPatternTimer->setInterval(300); // 设置时间 + connect(m_pRefreshPatternTimer, SIGNAL(timeout()), this, SLOT(onRefreshPatternTimer())); + + //一分钟定时任务,记录当前系统时间,用于上电时计算关机时间 + m_pMinTimer = new QTimer(this); + m_pMinTimer->setInterval(60000); // 设置定时间隔60秒 + connect(m_pMinTimer, SIGNAL(timeout()), this, SLOT(onOneMinTimer())); + + m_pRefreshVer = new QTimer(this); + m_pRefreshVer->setInterval(1000); + connect(m_pRefreshVer, SIGNAL(timeout()), this, SLOT(onRefreshVer())); + m_pRefreshVer->start(); + + m_curFilePath.clear(); + m_curDatIdx = 0;//当前针数索引 + m_curRpm = -1; + m_curColorIdx = 0;//当前色序 + m_workStatus = 0; + m_forwardBackNeedleIdx = 0;//前进回退时的针数索引 + m_forwardBackColorIdx = 0;//前进回退时的颜色索引 + m_ifHMIDecrypt = 1; + m_connectMode = USE_TCP_COMM; + m_curPages = 1; // 当前页 + m_showColorIdxBegin = 0; + memset(&m_fileHead,0,sizeof(DataFileHead)); + + m_speedLevel = 2;//速度默认等于2 + m_errorCode = 0;//错误代码 +} + +//初始化窗体 +void MainWidget::initAllWindows(s16 ifHMIDecrypt,s16 connectMode) +{ + m_connectMode = connectMode; + m_ifHMIDecrypt = ifHMIDecrypt; + if (m_initflag <= 1) + { + connect(g_pCurEmbData,SIGNAL(siDrawNeedleIdx(int)),this,SLOT(slotChangeProgressBar(int))); + m_initflag = 2; + sendInitString(QString(tr("Init windows...")));//初始化窗体... + initControl();//初始化界面控件 + initQuickFunBtn();//初始化快捷功能中的快捷按钮 + initAssisitBtn();//初始化辅助功能中的辅助功能按钮 + initDebugBtn();//初始化辅助功能中的调试按钮 + initPatternSetBtn();//初始化花样设置功能中的功能按钮 + initParaSetBtn();//初始化参数设置功能中的功能按钮 + + m_pMainWidgetFunction = new MainWidgetFunction();//主界面功能函数对象 + m_pMainWidgetFunction->setErrorCodeAndStateList(m_errorCodeAndStateItemList); + connect(m_pMainWidgetFunction, SIGNAL(siSetButtonUserLogo(int)), this, SLOT(slotSetButtonRootLogo(int))); + connect(m_pMainWidgetFunction, SIGNAL(siClearPatternBreakLineNum()),this,SLOT(slotClearPatternBreakLineNum())); + connect(m_pMainWidgetFunction, SIGNAL(siClearPattern()), this, SLOT(slotIfFileExist()));//花样总清后,清除当前所选花版路径//两个信号用一个槽 + connect(m_pMainWidgetFunction, SIGNAL(siClearPatternFcg()), this, SLOT(slotClearPatternFcg()));//清除当前所选花版路径 + connect(m_pMainWidgetFunction,SIGNAL(siWifiState(bool)),this,SLOT(slotRefreshWifiIcon(bool))); + connect(m_pMainWidgetFunction, SIGNAL(siCloseRootPara()),this,SLOT(slotCloseRootPara())); + connect(m_pMainWidgetFunction, SIGNAL(siDebugState()),this,SLOT(slotDebugState())); //调试模式改变字体颜色 + + //connect(m_pMainWidgetFunction, SIGNAL(siRecieveLotDat()),this,SLOT(slotLotDat()));//测试物联网用 + + m_pPatternSelectWi = new PatternSelectWidget(this); + m_pPatternSelectWi->hide(); + connect(m_pPatternSelectWi, SIGNAL(siSelectPattern(QString,s16)), this, SLOT(slotShowPatternPara(QString,s16))); + connect(m_pParameterSetDlg,SIGNAL(siDebugMode()),m_pMainWidgetFunction,SLOT(slotDebugMode()));//超级用户界面调试模式 + connect(m_pParameterSetDlg,SIGNAL(siParaReadPrompt(s16,s16)),m_pMainWidgetFunction,SLOT(slotParaReadPrompt(s16,s16)));//参数读取中的提示 + + m_pColorOrderSetWi = new ColorOrderSetWidget(this); + m_pColorOrderSetWi->hide(); + connect(m_pColorOrderSetWi,SIGNAL(siChangeColorTable(int,int)),this,SLOT(slotChangeColorTable(int,int))); + connect(m_pColorOrderSetWi,SIGNAL(siBackHome()),this,SLOT(slotColorOrderChange())); + connect(m_pColorOrderSetWi,SIGNAL(siCancelChangeColor(QByteArray)),this,SLOT(slotReSetData(QByteArray))); + + m_pNeedleBarSetWi = new NeedleBarSetWidget(this); + m_pNeedleBarSetWi->hide(); + connect(m_pNeedleBarSetWi,SIGNAL(siChangeNeedleColor(int,int)),m_pColorOrderSetWi,SLOT(slotChangeNeedleColor(int,int))); + + m_pPatternManageWi = new PatternManageWidget(this); + connect(m_pPatternManageWi, SIGNAL(siDeletePattern()), this, SLOT(slotIfFileExist())); + connect(m_pPatternManageWi, SIGNAL(siReplacePattrn(QString)), this, SLOT(slotReplacePattrn(QString))); + + m_pParameterSetDlg->hide(); + connect(m_pParameterSetDlg,SIGNAL(siUserLogin(s16)),m_pMainWidgetFunction,SLOT(slotUserLogin(s16))); + connect(m_pParameterSetDlg,SIGNAL(siFrameAngleSet()),this,SLOT(slotShowFrameAngleWi())); + + m_pRotaComWi = new RotaComWidget(this); + m_pRotaComWi->hide(); + connect(m_pRotaComWi,SIGNAL(signalManualColorChange()),this,SLOT(slotPunchManualChangeColor())); + connect(this, SIGNAL(siSpeedLevel(int)),m_pRotaComWi,SLOT(slotSpeedLevel(int))); // + + connect(g_pMachine, SIGNAL(siParaChange(int, int)), + m_pParameterSetDlg, SLOT(paraChange(int, int)));// 参数改变 + connect(g_pMachine, SIGNAL(siDataFilePos(DataFilePos)), + this, SLOT(slotResetStartPos(DataFilePos)));// 起始点改变 + + connect(m_pParameterSetDlg,SIGNAL(siHMIDecrypt(QString)),m_pMainWidgetFunction,SLOT(slotHMIDecrypt(QString))); + connect(m_pParameterSetDlg,SIGNAL(siTrokeCorrect()),m_pMainWidgetFunction,SLOT(slotStrokeCorrection())); + connect(m_pParameterSetDlg,SIGNAL(siSkipEffect()),m_pMainWidgetFunction,SLOT(slotStrokeCorrection())); + connect(m_pParameterSetDlg,SIGNAL(siAutoSetSoftLimit()),m_pMainWidgetFunction,SLOT(slotAutoSetSoftLimit())); + connect(m_pParameterSetDlg,SIGNAL(siSpindleTest()),m_pMainWidgetFunction,SLOT(slotSpindleTest())); + + connect(m_pParameterSetDlg,SIGNAL(siFrameParaImport()),m_pMainWidgetFunction,SLOT(slotFrameParaImport()));//动框参数导入 + connect(m_pParameterSetDlg,SIGNAL(siFrameParaExport()),m_pMainWidgetFunction,SLOT(slotFrameParaExport()));//动框参数导出 + + connect(m_pParameterSetDlg,SIGNAL(siExit()),m_pMainWidgetFunction,SLOT(slotExitApp()));//超级用户退出程序 + connect(m_pParameterSetDlg,SIGNAL(siDeleteIni()),m_pMainWidgetFunction,SLOT(slotDeleteIni()));//删除执行目录下的config.ini文件 + connect(m_pParameterSetDlg,SIGNAL(siImportCSV()),m_pMainWidgetFunction,SLOT(slotImportCSV())); + connect(m_pParameterSetDlg,SIGNAL(siDeleteCSV()),m_pMainWidgetFunction,SLOT(slotDeleteCSV())); + connect(m_pParameterSetDlg,SIGNAL(siResetCSV()),m_pMainWidgetFunction,SLOT(slotResetCSV())); + + connect(m_pParameterSetDlg,SIGNAL(siPatternClear()),m_pMainWidgetFunction,SLOT(slotPatternClear()));//超级用户花样总清 + connect(m_pParameterSetDlg,SIGNAL(siPatternFcgClear()),m_pMainWidgetFunction,SLOT(slotPatternFcgClear()));//超级用户删除花样fcg + connect(m_pParameterSetDlg,SIGNAL(siPatternFcgClearFileid()),m_pMainWidgetFunction,SLOT(slotPatternFcgClearFileid()));//超级用户删除花样fcg影响fileid的数据 + + connect(m_pMainWidgetFunction,SIGNAL(siAfterDeleteFileid()),this,SLOT(slotClearPatternFcg()));//超级用户删除花样fcg影响fileid的数据之后 + m_pPatternManageWi->hide(); + + m_pSheetWi = new SheetWidget(this); + m_pSheetWi->hide(); + connect(g_pMachine, SIGNAL(siParaChange(int, int)), + m_pSheetWi, SLOT(slotFrameAngleParaChange(int, int)));// 动框角度参数改变 + + m_pSetWorkAreaWi = new SetWorkArea(this); + m_pSetWorkAreaWi->hide(); + + m_pSensorInputWi->hide(); + m_pControlActionWi->hide(); + connect(this, SIGNAL(siSpeedLevel(int)),m_pControlActionWi,SLOT(slotSpeed(int))); //手动换挡 + + QTimer timer; + connect(&timer, SIGNAL(timeout()), this, SLOT(slotWaitTimout())); + timer.start(1000); + + m_timoutflag = 0; + do + { + QCoreApplication::processEvents(QEventLoop::AllEvents); + }while(m_timoutflag == 0); + timer.stop(); + + sendInitString(QString(tr("Init communication...")));//初始化通讯... + + connect(g_pMachine, SIGNAL(siSensorEnBitmap(SensorsBitmap)), + m_pSensorInputWi, SLOT(slotRefSensorBitmap(SensorsBitmap)));//传感信号有效位图更新信号 + connect(g_pMachine, SIGNAL(siSensorChange(SensorsBitmap)), + m_pSensorInputWi , SLOT(slotRefSensorsDat(SensorsBitmap)));//传感信号更新 + + //显示报错信息 + connect(g_pMachine, SIGNAL(siStatusChange(int)), this, SLOT(slotMachineStatus(int))); + + // 等待通讯结束.... + timer.start(1000); + m_timoutflag = 0; + do + { + QCoreApplication::processEvents(QEventLoop::AllEvents); + }while(m_timoutflag == 0); + timer.stop(); + + refConnectUi(-1);//刷新连接 + + m_pTimer->start();//1秒检查一次连接状态 + m_pConTimer->start();//5秒检查一次连接是否断开,若不需要检测与下位机的心跳包时注释掉此行代码 + + //窗体初始化完成后自动加载文件并显示、发送 + m_curFilePath = g_pSettings->readFromIniFile("Pattern/name").toString(); + slotShowPatternPara(m_curFilePath,-1);//不显示花样设置窗体,直接加载花样参数 + + s16 wifi = g_pSettings->readFromIniFile("HMI/wifi").toInt();//是否有wifi + if(wifi == 1) + { + onTenMiniteTimer(); + ui->buttonWifi->setVisible(true); + m_pWifiConTimer->start(); + } + else + { + ui->buttonWifi->setVisible(false); + } + } +} + +//不同机型不同的窗体设置 +void MainWidget::initMcTypeWindows() +{ + m_pParameterSetDlg = new ParameterSetDialog(this); + m_pControlActionWi = new ControlActionWidget(this); + m_pSensorInputWi = new SensorInputWidget(this); + + m_quickItemList.clear(); + m_assistItemList.clear(); + m_debugItemList.clear(); + m_patternSetItemList.clear(); + m_paraSetItemList.clear(); + + MachineTypeFun * curMachineType = NULL; + if(g_emMacType == MACHINE_PUNCH) + { + curMachineType = new PunchMachine; + ui->labelTitle->setText(tr("Richpeace Punching Control System"));//富怡冲孔控制系统 + } + //等于定制冲孔机 + else if(g_emMacType == MACHINE_PUNCH_AUTOPOS) + { + curMachineType = new AutoPosPunchMachine; + ui->labelTitle->setText(tr("Richpeace Punching Control System"));//富怡冲孔控制系统 + } + //等于冲缝机 + else if(g_emMacType == MACHINE_PUNCH_SEW) + { + curMachineType = new PunchSewMachine; + ui->labelTitle->setText(tr("Richpeace PunchSew Control System"));//富怡冲缝控制系统 + } + //等于压胶机 + else if(g_emMacType == MACHINE_ADHESIVE) + { + curMachineType = new AdhesiveMachine; + ui->labelTitle->setText(tr("Richpeace PressGlue Control System"));//富怡压胶控制系统 + } + else if(g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + curMachineType = new PunchSewEmbMachine; + ui->labelTitle->setText(tr("Richpeace punchSewEmb Control System"));//富怡冲绣缝控制系统 + } + else if(g_emMacType == MACHINE_TEMPLATE_SEW)//模板缝纫机 + { + curMachineType = new TemplateSewMachine; + ui->labelTitle->setText(tr("Richpeace TemplateSew Control System"));//富怡模板缝纫机控制系统 + } + + //初始化快捷按钮列表要在初始化控件前 + m_quickItemList = curMachineType->getShortCutListByFilter(); + m_assistItemList = curMachineType->getAssistListByFilter(); + m_debugItemList = curMachineType->getDebugFunList(); + m_patternSetItemList = curMachineType->getPatternSetListByFilter(); + m_paraSetItemList = curMachineType->getParaSetListByFilter(); + + m_pControlActionWi->addItemList(curMachineType->getOutCtrlListByFilter()); + //添加机器参数和工作参数 + m_pParameterSetDlg->addParaItem(curMachineType->getParasListByMcSel()); + m_pParameterSetDlg->setItemList(operate,PARA_TYPE_MACH|PARA_TYPE_WORK); + m_pSensorInputWi->addSensorItems(curMachineType->getSensorList()); + + m_errorCodeAndStateItemList.clear(); + m_errorCodeAndStateItemList = curMachineType->getErrorCodeAndStateList(); + + if(curMachineType != NULL) + { + delete curMachineType; + } +} + +//初始化快捷功能中的快捷按钮 +void MainWidget::initQuickFunBtn() +{ + for(int i = 0; i < m_quickBtnList.size(); i++) + { + if(i < m_quickItemList.size()) + { + m_quickBtnList[i]->setVisible(true); + m_quickLabelList[i]->setVisible(true); + + QString name = m_quickItemList[i].m_name; + m_quickLabelList[i]->setText(name); + + QString topImageName = m_quickItemList[i].m_topImageName; + //加载按钮顶图图标 + QString btnStyle = m_setControlStyle.getTopStyleSheet(topImageName); + m_quickBtnList[i]->setTopImage(btnStyle); + } + else + { + m_quickBtnList[i]->setVisible(false); + m_quickLabelList[i]->setVisible(false); + } + } +} + +//初始化辅助功能中的辅助按钮 +void MainWidget::initAssisitBtn() +{ + for(int i = 0; i < m_assistBtnList.size(); i++) + { + if(i < m_assistItemList.size()) + { + m_assistBtnList[i]->setVisible(true); + m_assistLabelList[i]->setVisible(true); + + QString name = m_assistItemList[i].m_name; + m_assistLabelList[i]->setText(name); + + QString topImageName = m_assistItemList[i].m_topImageName; + //加载按钮顶图图标 + QString btnStyle = m_setControlStyle.getTopStyleSheet(topImageName); + m_assistBtnList[i]->setTopImage(btnStyle); + } + else + { + m_assistBtnList[i]->setVisible(false); + m_assistLabelList[i]->setVisible(false); + } + } +} + +//初始化辅助功能中的调试按钮 +void MainWidget::initDebugBtn() +{ + for(int i = 0; i < m_debugBtnList.size(); i++) + { + if(i < m_debugItemList.size()) + { + m_debugBtnList[i]->setVisible(true); + m_debugLabelList[i]->setVisible(true); + + QString name = m_debugItemList[i].m_name; + m_debugLabelList[i]->setText(name); + + QString topImageName = m_debugItemList[i].m_topImageName; + //加载按钮顶图图标 + QString btnStyle = m_setControlStyle.getTopStyleSheet(topImageName); + m_debugBtnList[i]->setTopImage(btnStyle); + } + else + { + m_debugBtnList[i]->setVisible(false); + m_debugLabelList[i]->setVisible(false); + } + } +} + +//初始化花样设置功能中的花样设置按钮 +void MainWidget::initPatternSetBtn() +{ + for(int i = 0; i < m_patternSetBtnList.size(); i++) + { + if(i < m_patternSetItemList.size()) + { + m_patternSetBtnList[i]->setVisible(true); + m_patternSetLabelList[i]->setVisible(true); + + QString name = m_patternSetItemList[i].m_name; + m_patternSetLabelList[i]->setText(name); + + QString topImageName = m_patternSetItemList[i].m_topImageName; + //加载按钮顶图图标 + QString btnStyle = m_setControlStyle.getTopStyleSheet(topImageName); + m_patternSetBtnList[i]->setTopImage(btnStyle); + + //无花样时花样参数、花样色序 + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNPARA) + { + m_patternSetBtnList[i]->setEnabled(false); + } + } + else + { + m_patternSetBtnList[i]->setVisible(false); + m_patternSetLabelList[i]->setVisible(false); + } + } +} + +//初始化参数设置功能中的参数设置按钮 +void MainWidget::initParaSetBtn() +{ + for(int i = 0; i < m_paraSetBtnList.size(); i++) + { + if(i < m_paraSetItemList.size()) + { + m_paraSetBtnList[i]->setVisible(true); + m_paraSetLabelList[i]->setVisible(true); + + QString name = m_paraSetItemList[i].m_name; + m_paraSetLabelList[i]->setText(name); + + //m_paraSetLabelList[i]->setWordWrap(true); + QString topImageName = m_paraSetItemList[i].m_topImageName; + //加载按钮顶图图标 + QString btnStyle = m_setControlStyle.getTopStyleSheet(topImageName); + m_paraSetBtnList[i]->setTopImage(btnStyle); + + //无花样时花样参数、花样色序 + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNPARA || + m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNCOLOR || + m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNCOLOR_HEADHIGHT) + { + m_patternSetBtnList[i]->setEnabled(false); + } + } + else + { + m_paraSetBtnList[i]->setVisible(false); + m_paraSetLabelList[i]->setVisible(false); + } + } +} + +void MainWidget::setFrameNineBtnStyle() +{ + switch (m_speedLevel) + { + case 1: + ui->buttonNineBtnMiddle->setTopImage(m_setControlStyle.getTopStyleSheet("frameNineBtnMiddle_1")); + break; + case 2: + ui->buttonNineBtnMiddle->setTopImage(m_setControlStyle.getTopStyleSheet("frameNineBtnMiddle_2")); + break; + case 3: + ui->buttonNineBtnMiddle->setTopImage(m_setControlStyle.getTopStyleSheet("frameNineBtnMiddle_3")); + break; + default: + ui->buttonNineBtnMiddle->setTopImage(m_setControlStyle.getTopStyleSheet("frameNineBtnMiddle1")); + break; + } +} + +//清除文件信息 +void MainWidget::clearFileInfo() +{ + ui->labelXValue->setText("0"); + ui->labelYValue->setText("0"); + ui->labelWValue->setText("0"); + ui->labelHValue->setText("0"); + //ui->labelCValue->setText("0"); + ui->labelNValue->setText("0"); + + ui->labelWorkingTime->setText("0:0"); + QTextCodec *cod = QTextCodec::codecForLocale(); + ui->labelSpindleAngle->setText(cod->toUnicode("0°")); + ui->labelColorOrder->setText("0"); + ui->labelNeedleIdx->setText("0"); + ui->labelCoorXY->setText("(0, 0)"); + ui->progressBarProgress->setValue(0); + ui->labelRelativeCoorXY->setText("(0, 0)"); + + ui->labelNeedleCurAndTotal->setText("0/0"); + ui->labelColorCurAndTotal->setText("0/0"); +} + +//初始化窗体控件,包括位置、尺寸、样式 +void MainWidget::initControl() +{ + ui->buttonShortCutPgDn->setVisible(false); + ui->buttonShortCutPgUp->setVisible(false); + ui->labelShortCutPage->setVisible(false); + + ui->buttonAssistPgDn->setVisible(false); + ui->buttonAssistPgUp->setVisible(false); + ui->labelAssistPage->setVisible(false); + + m_quickBtnList.clear(); + m_quickBtnList.append(ui->buttonQuick1); + m_quickBtnList.append(ui->buttonQuick2); + m_quickBtnList.append(ui->buttonQuick3); + m_quickBtnList.append(ui->buttonQuick4); + m_quickBtnList.append(ui->buttonQuick5); + m_quickBtnList.append(ui->buttonQuick6); + m_quickBtnList.append(ui->buttonQuick7); + m_quickBtnList.append(ui->buttonQuick8); + m_quickBtnList.append(ui->buttonQuick9); + m_quickBtnList.append(ui->buttonQuick10); + m_quickBtnList.append(ui->buttonQuick11); + m_quickBtnList.append(ui->buttonQuick12); + m_quickBtnList.append(ui->buttonQuick13); + m_quickBtnList.append(ui->buttonQuick14); + m_quickBtnList.append(ui->buttonQuick15); + m_quickBtnList.append(ui->buttonQuick16); + m_quickBtnList.append(ui->buttonQuick17); + m_quickBtnList.append(ui->buttonQuick18); + m_quickBtnList.append(ui->buttonQuick19); + m_quickBtnList.append(ui->buttonQuick20); + m_quickBtnList.append(ui->buttonQuick21); + m_quickBtnList.append(ui->buttonQuick22); + m_quickBtnList.append(ui->buttonQuick23); + m_quickBtnList.append(ui->buttonQuick24); + m_quickBtnList.append(ui->buttonQuick25); + m_quickBtnList.append(ui->buttonQuick26); + m_quickBtnList.append(ui->buttonQuick27); + m_quickBtnList.append(ui->buttonQuick28); + + for(int i = 0; i < m_quickBtnList.size(); i++) + { + connect(m_quickBtnList.at(i), + SIGNAL(clicked()), + this, + SLOT(slotQuickBtnClick()) + ); + } + + m_quickLabelList.clear(); + m_quickLabelList.append(ui->labelQuick1); + m_quickLabelList.append(ui->labelQuick2); + m_quickLabelList.append(ui->labelQuick3); + m_quickLabelList.append(ui->labelQuick4); + m_quickLabelList.append(ui->labelQuick5); + m_quickLabelList.append(ui->labelQuick6); + m_quickLabelList.append(ui->labelQuick7); + m_quickLabelList.append(ui->labelQuick8); + m_quickLabelList.append(ui->labelQuick9); + m_quickLabelList.append(ui->labelQuick10); + m_quickLabelList.append(ui->labelQuick11); + m_quickLabelList.append(ui->labelQuick12); + m_quickLabelList.append(ui->labelQuick13); + m_quickLabelList.append(ui->labelQuick14); + m_quickLabelList.append(ui->labelQuick15); + m_quickLabelList.append(ui->labelQuick16); + m_quickLabelList.append(ui->labelQuick17); + m_quickLabelList.append(ui->labelQuick18); + m_quickLabelList.append(ui->labelQuick19); + m_quickLabelList.append(ui->labelQuick20); + m_quickLabelList.append(ui->labelQuick21); + m_quickLabelList.append(ui->labelQuick22); + m_quickLabelList.append(ui->labelQuick23); + m_quickLabelList.append(ui->labelQuick24); + m_quickLabelList.append(ui->labelQuick25); + m_quickLabelList.append(ui->labelQuick26); + m_quickLabelList.append(ui->labelQuick27); + m_quickLabelList.append(ui->labelQuick28); + + m_shortCutBtnList.clear(); + m_shortCutBtnList.append(ui->buttonShortcut1); + m_shortCutBtnList.append(ui->buttonShortcut2); + m_shortCutBtnList.append(ui->buttonShortcut3); + m_shortCutBtnList.append(ui->buttonShortcut4); + m_shortCutBtnList.append(ui->buttonShortcut5); + m_shortCutBtnList.append(ui->buttonShortcut6); + m_shortCutBtnList.append(ui->buttonShortcut7); + m_shortCutBtnList.append(ui->buttonShortcut8); + m_shortCutBtnList.append(ui->buttonShortcut9); + m_shortCutBtnList.append(ui->buttonShortcut10); + + for(int i = 0; i < m_shortCutBtnList.size(); i++) + { + connect(m_shortCutBtnList.at(i), + SIGNAL(clicked()), + this, + SLOT(slotShortCutBtnClick()) + ); + } + + m_assistBtnList.clear(); + m_assistBtnList.append(ui->buttonAssist1); + m_assistBtnList.append(ui->buttonAssist2); + m_assistBtnList.append(ui->buttonAssist3); + m_assistBtnList.append(ui->buttonAssist4); + m_assistBtnList.append(ui->buttonAssist5); + m_assistBtnList.append(ui->buttonAssist6); + m_assistBtnList.append(ui->buttonAssist7); + m_assistBtnList.append(ui->buttonAssist8); + m_assistBtnList.append(ui->buttonAssist9); + m_assistBtnList.append(ui->buttonAssist10); + m_assistBtnList.append(ui->buttonAssist11); + m_assistBtnList.append(ui->buttonAssist12); + m_assistBtnList.append(ui->buttonAssist13); + m_assistBtnList.append(ui->buttonAssist14); + m_assistBtnList.append(ui->buttonAssist15); + m_assistBtnList.append(ui->buttonAssist16); + m_assistBtnList.append(ui->buttonAssist17); + m_assistBtnList.append(ui->buttonAssist18); + m_assistBtnList.append(ui->buttonAssist19); + m_assistBtnList.append(ui->buttonAssist20); + m_assistBtnList.append(ui->buttonAssist21); + m_assistBtnList.append(ui->buttonAssist22); + m_assistBtnList.append(ui->buttonAssist23); + m_assistBtnList.append(ui->buttonAssist24); + m_assistBtnList.append(ui->buttonAssist25); + m_assistBtnList.append(ui->buttonAssist26); + m_assistBtnList.append(ui->buttonAssist27); + m_assistBtnList.append(ui->buttonAssist28); + + for(int i = 0; i < m_assistBtnList.size(); i++) + { + connect(m_assistBtnList.at(i), + SIGNAL(clicked()), + this, + SLOT(slotAssistBtnClick()) + ); + } + + m_assistLabelList.clear(); + m_assistLabelList.append(ui->labelAssist1); + m_assistLabelList.append(ui->labelAssist2); + m_assistLabelList.append(ui->labelAssist3); + m_assistLabelList.append(ui->labelAssist4); + m_assistLabelList.append(ui->labelAssist5); + m_assistLabelList.append(ui->labelAssist6); + m_assistLabelList.append(ui->labelAssist7); + m_assistLabelList.append(ui->labelAssist8); + m_assistLabelList.append(ui->labelAssist9); + m_assistLabelList.append(ui->labelAssist10); + m_assistLabelList.append(ui->labelAssist11); + m_assistLabelList.append(ui->labelAssist12); + m_assistLabelList.append(ui->labelAssist13); + m_assistLabelList.append(ui->labelAssist14); + m_assistLabelList.append(ui->labelAssist15); + m_assistLabelList.append(ui->labelAssist16); + m_assistLabelList.append(ui->labelAssist17); + m_assistLabelList.append(ui->labelAssist18); + m_assistLabelList.append(ui->labelAssist19); + m_assistLabelList.append(ui->labelAssist20); + m_assistLabelList.append(ui->labelAssist21); + m_assistLabelList.append(ui->labelAssist22); + m_assistLabelList.append(ui->labelAssist23); + m_assistLabelList.append(ui->labelAssist24); + m_assistLabelList.append(ui->labelAssist25); + m_assistLabelList.append(ui->labelAssist26); + m_assistLabelList.append(ui->labelAssist27); + m_assistLabelList.append(ui->labelAssist28); + + m_debugBtnList.clear(); + m_debugBtnList.append(ui->buttonDebugFunction1); + m_debugBtnList.append(ui->buttonDebugFunction2); + m_debugBtnList.append(ui->buttonDebugFunction3); + m_debugBtnList.append(ui->buttonDebugFunction4); + m_debugBtnList.append(ui->buttonDebugFunction5); + m_debugBtnList.append(ui->buttonDebugFunction6); + m_debugBtnList.append(ui->buttonDebugFunction7); + m_debugBtnList.append(ui->buttonDebugFunction8); + m_debugBtnList.append(ui->buttonDebugFunction9); + m_debugBtnList.append(ui->buttonDebugFunction10); + m_debugBtnList.append(ui->buttonDebugFunction11); + m_debugBtnList.append(ui->buttonDebugFunction12); + m_debugBtnList.append(ui->buttonDebugFunction13); + m_debugBtnList.append(ui->buttonDebugFunction14); + m_debugBtnList.append(ui->buttonDebugFunction15); + m_debugBtnList.append(ui->buttonDebugFunction16); + m_debugBtnList.append(ui->buttonDebugFunction17); + m_debugBtnList.append(ui->buttonDebugFunction18); + m_debugBtnList.append(ui->buttonDebugFunction19); + m_debugBtnList.append(ui->buttonDebugFunction20); + m_debugBtnList.append(ui->buttonDebugFunction21); + m_debugBtnList.append(ui->buttonDebugFunction22); + m_debugBtnList.append(ui->buttonDebugFunction23); + m_debugBtnList.append(ui->buttonDebugFunction24); + m_debugBtnList.append(ui->buttonDebugFunction25); + m_debugBtnList.append(ui->buttonDebugFunction26); + m_debugBtnList.append(ui->buttonDebugFunction27); + m_debugBtnList.append(ui->buttonDebugFunction28); + + for(int i = 0; i < m_debugBtnList.size(); i++) + { + connect(m_debugBtnList.at(i), + SIGNAL(clicked()), + this, + SLOT(slotDebugBtnClick()) + ); + } + + m_debugLabelList.clear(); + m_debugLabelList.append(ui->labelDebugFunction1); + m_debugLabelList.append(ui->labelDebugFunction2); + m_debugLabelList.append(ui->labelDebugFunction3); + m_debugLabelList.append(ui->labelDebugFunction4); + m_debugLabelList.append(ui->labelDebugFunction5); + m_debugLabelList.append(ui->labelDebugFunction6); + m_debugLabelList.append(ui->labelDebugFunction7); + m_debugLabelList.append(ui->labelDebugFunction8); + m_debugLabelList.append(ui->labelDebugFunction9); + m_debugLabelList.append(ui->labelDebugFunction10); + m_debugLabelList.append(ui->labelDebugFunction11); + m_debugLabelList.append(ui->labelDebugFunction12); + m_debugLabelList.append(ui->labelDebugFunction13); + m_debugLabelList.append(ui->labelDebugFunction14); + m_debugLabelList.append(ui->labelDebugFunction15); + m_debugLabelList.append(ui->labelDebugFunction16); + m_debugLabelList.append(ui->labelDebugFunction17); + m_debugLabelList.append(ui->labelDebugFunction18); + m_debugLabelList.append(ui->labelDebugFunction19); + m_debugLabelList.append(ui->labelDebugFunction20); + m_debugLabelList.append(ui->labelDebugFunction21); + m_debugLabelList.append(ui->labelDebugFunction22); + m_debugLabelList.append(ui->labelDebugFunction23); + m_debugLabelList.append(ui->labelDebugFunction24); + m_debugLabelList.append(ui->labelDebugFunction25); + m_debugLabelList.append(ui->labelDebugFunction26); + m_debugLabelList.append(ui->labelDebugFunction27); + m_debugLabelList.append(ui->labelDebugFunction28); + + + m_patternSetBtnList.clear(); + m_patternSetBtnList.append(ui->buttonPatternSet1); + m_patternSetBtnList.append(ui->buttonPatternSet2); + m_patternSetBtnList.append(ui->buttonPatternSet3); + m_patternSetBtnList.append(ui->buttonPatternSet4); + m_patternSetBtnList.append(ui->buttonPatternSet5); + m_patternSetBtnList.append(ui->buttonPatternSet6); + m_patternSetBtnList.append(ui->buttonPatternSet7); + m_patternSetBtnList.append(ui->buttonPatternSet8); + m_patternSetBtnList.append(ui->buttonPatternSet9); + m_patternSetBtnList.append(ui->buttonPatternSet10); + m_patternSetBtnList.append(ui->buttonPatternSet11); + m_patternSetBtnList.append(ui->buttonPatternSet12); + m_patternSetBtnList.append(ui->buttonPatternSet13); + m_patternSetBtnList.append(ui->buttonPatternSet14); + + for(int i = 0; i < m_patternSetBtnList.size(); i++) + { + connect(m_patternSetBtnList.at(i), + SIGNAL(clicked()), + this, + SLOT(slotPatternSetBtnClick()) + ); + } + + m_patternSetLabelList.append(ui->labelPatternSet1); + m_patternSetLabelList.append(ui->labelPatternSet2); + m_patternSetLabelList.append(ui->labelPatternSet3); + m_patternSetLabelList.append(ui->labelPatternSet4); + m_patternSetLabelList.append(ui->labelPatternSet5); + m_patternSetLabelList.append(ui->labelPatternSet6); + m_patternSetLabelList.append(ui->labelPatternSet7); + m_patternSetLabelList.append(ui->labelPatternSet8); + m_patternSetLabelList.append(ui->labelPatternSet9); + m_patternSetLabelList.append(ui->labelPatternSet10); + m_patternSetLabelList.append(ui->labelPatternSet11); + m_patternSetLabelList.append(ui->labelPatternSet12); + m_patternSetLabelList.append(ui->labelPatternSet13); + m_patternSetLabelList.append(ui->labelPatternSet14); + + m_paraSetBtnList.clear(); + m_paraSetBtnList.append(ui->buttonParaType1); + m_paraSetBtnList.append(ui->buttonParaType2); + m_paraSetBtnList.append(ui->buttonParaType3); + m_paraSetBtnList.append(ui->buttonParaType4); + m_paraSetBtnList.append(ui->buttonParaType5); + m_paraSetBtnList.append(ui->buttonParaType6); + m_paraSetBtnList.append(ui->buttonParaType7); + m_paraSetBtnList.append(ui->buttonParaType8); + m_paraSetBtnList.append(ui->buttonParaType9); + m_paraSetBtnList.append(ui->buttonParaType10); + m_paraSetBtnList.append(ui->buttonParaType11); + m_paraSetBtnList.append(ui->buttonParaType12); + m_paraSetBtnList.append(ui->buttonParaType13); + m_paraSetBtnList.append(ui->buttonParaType14); + + for(int i = 0; i < m_paraSetBtnList.size(); i++) + { + connect(m_paraSetBtnList.at(i), + SIGNAL(clicked()), + this, + SLOT(slotParaTypeBtnClick()) + ); + } + + m_paraSetLabelList.append(ui->labelParaType1); + m_paraSetLabelList.append(ui->labelParaType2); + m_paraSetLabelList.append(ui->labelParaType3); + m_paraSetLabelList.append(ui->labelParaType4); + m_paraSetLabelList.append(ui->labelParaType5); + m_paraSetLabelList.append(ui->labelParaType6); + m_paraSetLabelList.append(ui->labelParaType7); + m_paraSetLabelList.append(ui->labelParaType8); + m_paraSetLabelList.append(ui->labelParaType9); + m_paraSetLabelList.append(ui->labelParaType10); + m_paraSetLabelList.append(ui->labelParaType11); + m_paraSetLabelList.append(ui->labelParaType12); + m_paraSetLabelList.append(ui->labelParaType13); + m_paraSetLabelList.append(ui->labelParaType14); + + m_colorBtnList.clear(); + m_colorBtnList.append(ui->buttonColor1); + m_colorBtnList.append(ui->buttonColor2); + m_colorBtnList.append(ui->buttonColor3); + m_colorBtnList.append(ui->buttonColor4); + m_colorBtnList.append(ui->buttonColor5); + m_colorBtnList.append(ui->buttonColor6); + m_colorBtnList.append(ui->buttonColor7); + m_colorBtnList.append(ui->buttonColor8); + + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + + initControlStyle();//初始化窗体控件样式 + setCommonBtn();//设置常用按钮样式 +} + +//初始化窗体控件为1920x1080分辨率 +void MainWidget::initResolution1910() +{ + //上状态栏 + this->resize(1920,1080); + ui->frameBack->setGeometry(0,0,1920,1080); + ui->frameUp->setGeometry(0,0,1920,64); + ui->labelTitle->setGeometry(26,0,1200,64); + ui->labelHMIVersion->setGeometry(1000,0,855,64); + ui->buttonWifi->setGeometry(1870,16,32,32); + + //左侧主按钮 + ui->frameMainFunction->setGeometry(0,65,188,938); + ui->buttonPatternSet->setGeometry(26,0,106,106); + ui->buttonParaSet->setGeometry(26,160,106,106); + ui->buttonShortcutFunction->setGeometry(26,320,106,106); + ui->buttonAccessFunction->setGeometry(26,480,106,106); + ui->buttonMainMenu->setGeometry(26,640,106,106); + ui->labelPatternSet->setGeometry(0,106,160,32); + ui->labelParaSet->setGeometry(0,266,160,32); + ui->labelShortcutFunction->setGeometry(0,426,160,32); + ui->labelAccessFunction->setGeometry(0,586,160,32); + ui->labelMainMenu->setGeometry(0,746,160,32); + + //下方的10个快捷按钮 + ui->frameShortcutBtn->setGeometry(190,895,1322,106); + for(int i = 0; i < m_shortCutBtnList.size(); i++) + { + m_shortCutBtnList[i]->setGeometry(16+132*i,0,106,106); + } + + //花样显示区域 + ui->framePatternView->setGeometry(195,66,1317,815); + ui->labelPatternView->setGeometry(24,48,1100,752); + ui->progressBarProgress->setGeometry(1132,498,166,40); + ui->labelFilename->setGeometry(14,8,300,32); + ui->frameColor->setGeometry(1208,20,98,510); + QRect rectImage(18,6,24,62); + QRect rectName(50,10,30,58); + ui->buttonNeedle->setGeometry(10,9,82,73); + ui->buttonNeedle->initLeftImageRightName(rectImage,rectName); + for(int i = 0; i < m_colorBtnList.size(); i++) + { + m_colorBtnList.at(i)->setGeometry(10,90+i*40,82,36); + } + ui->framePatternInfo->setGeometry(1132,540,166,254); + ui->framePatternInfoImage->setGeometry(0,0,166,254); + ui->buttonPatternInfo->setGeometry(0,0,166,254); + ui->labelX->setGeometry(10,10,32,32); + ui->labelXValue->setGeometry(44,10,116,32); + ui->labelY->setGeometry(10,50,32,32); + ui->labelYValue->setGeometry(44,50,116,32); + ui->labelW->setGeometry(10,90,32,32); + ui->labelWValue->setGeometry(44,90,116,32); + ui->labelH->setGeometry(10,130,32,32); + ui->labelHValue->setGeometry(44,130,116,32); + ui->labelC->setGeometry(10,170,32,32); + ui->labelCValue->setGeometry(44,170,116,32); + ui->labelN->setGeometry(10,210,32,32); + ui->labelNValue->setGeometry(44,210,116,32); + + //右上方花样信息 + ui->frameEmbInfo->setGeometry(1544,64,344,456); + ui->buttonWorkingTime->setGeometry(24,20,32,32); + ui->labelWorkingTime->setGeometry(70,20,220,32); + ui->buttonNeedleNum->setGeometry(24,80,32,32); + ui->labelNeedleNum->setGeometry(70,78,220,32); + ui->buttonSpindleAngle->setGeometry(24,140,32,32); + ui->labelSpindleAngle->setGeometry(70,134,220,44); + ui->buttonColorOrder->setGeometry(27,196,24,32); + ui->labelColorOrder->setGeometry(70,190,220,44); + ui->buttonNeedleIdx->setGeometry(33,254,16,43); + ui->labelNeedleIdx->setGeometry(70,248,220,44); + ui->buttonCoorXY->setGeometry(24,312,32,32); + ui->labelCoorXY->setGeometry(70,306,250,44); + ui->buttonRelativeCoorXY->setGeometry(24,376,32,32); + ui->labelRelativeCoorXY->setGeometry(70,370,250,44); + + //九宫格 + ui->frameFunctionBtn->setGeometry(1544,534,344,468); + ui->frameSpeed->setGeometry(0,0,344,102); + ui->buttonSpeedAdd->setGeometry(228,-8,128,128); + ui->lcdNumberSpeed->setGeometry(106,14,128,88); + ui->buttonSpeedDec->setGeometry(-8,-8,128,128); + ui->frameNineBtn->setGeometry(0,122,344,344); + ui->buttonNineBtn1->setGeometry(0,0,106,106); + ui->buttonNineBtnUp->setGeometry(122,0,106,106); + ui->buttonNineBtn2->setGeometry(238,0,106,106); + ui->buttonNineBtnLeft->setGeometry(0,118,106,106); + ui->buttonNineBtnMiddle->setGeometry(117,118,106,106); + ui->buttonNineBtnRight->setGeometry(238,118,106,106); + ui->buttonNineBtn3->setGeometry(0,238,106,106); + ui->buttonNineBtnDown->setGeometry(122,236,106,106); + ui->buttonNineBtn4->setGeometry(238,238,106,106); + + //下方状态栏 + ui->frameDown->setGeometry(0,1016,1920,64); + ui->progressBar->setGeometry(4,62,1912,2); + ui->labelState->setGeometry(32,0,600,64); + ui->labelWorkState->setGeometry(1396,15,32,34);//模拟工作 + ui->labelEnableWorkState->setGeometry(1436,16,32,32);//显示工作状态 + ui->frameMenuBack->setGeometry(192,65,1323,920); + ui->buttonConnect->setGeometry(1476,16,32,32);//链接状态 + ui->buttonUser->setGeometry(1516,16,32,31);//用户 + ui->labelTime->setGeometry(1556,16,340,32);//时间 + + //辅助功能 + ui->frameAccessFunction->setGeometry(190,65,1320,934); + u16 hNum = 7;//每行7个 + u16 vNum = 4;//总共4行 + for(int i = 0; i < vNum; i++) + { + for(int j = 0; j < hNum; j++) + { + m_assistBtnList[i*hNum+j]->setGeometry(59+183*j,48+202*i,106,106); + m_assistLabelList[i*hNum+j]->setGeometry(29+183*j,154+202*i,165,66); + } + } + ui->buttonAssistPgUp->setGeometry(956,836,164,64); + ui->buttonAssistPgDn->setGeometry(1136,836,164,64); + ui->labelAssistPage->setGeometry(790,836,150,64); + + //花样设置 + ui->framePatternSet->setGeometry(190,65,1320,934); + hNum = 7;//每行7个 + vNum = 2;//总共2行 + for(int i = 0; i < vNum; i++) + { + for(int j = 0; j < hNum; j++) + { + m_patternSetBtnList[i*hNum+j]->setGeometry(59+183*j,48+202*i,106,106); + m_patternSetLabelList[i*hNum+j]->setGeometry(29+183*j,154+202*i,165,66);//1920x1080 英文显示不全 -rq + } + } + + //参数设置 + ui->frameParaSet->setGeometry(190,65,1320,934); + hNum = 7;//每行7个 + vNum = 2;//总共2行 + for(int i = 0; i < vNum; i++) + { + for(int j = 0; j < hNum; j++) + { + m_paraSetBtnList[i*hNum+j]->setGeometry(59+183*j,48+202*i,106,106); + m_paraSetLabelList[i*hNum+j]->setGeometry(29+183*j,154+202*i,165,66); + } + } + + //调试功能 + ui->frameDebugFunction->setGeometry(190,65,1320,934); + hNum = 7;//每行7个 + vNum = 4;//总共4行 + for(int i = 0; i < vNum; i++) + { + for(int j = 0; j < hNum; j++) + { + m_debugBtnList[i*hNum+j]->setGeometry(59+183*j,48+202*i,106,106); + m_debugLabelList[i*hNum+j]->setGeometry(29+183*j,154+202*i,165,66); + } + } + ui->buttonDebugClose->setGeometry(1136,836,164,64); + + //快捷功能 + ui->frameShortcutFunction->setGeometry(190,65,1320,934); + hNum = 7;//每行7个 + vNum = 4;//总共4行 + for(int i = 0; i < vNum; i++) + { + for(int j = 0; j < hNum; j++) + { + m_quickBtnList[i*hNum+j]->setGeometry(59+183*j,48+202*i,106,106); + m_quickLabelList[i*hNum+j]->setGeometry(29+183*j,154+202*i,165,66); + } + } + ui->buttonShortCutPgUp->setGeometry(956,836,164,64); + ui->buttonShortCutPgDn->setGeometry(1136,836,164,64); + ui->labelShortCutPage->setGeometry(790,836,150,64); + + //快进回退 + ui->frameForwardBack->setGeometry(1534,55,368,951); + ui->frameForwardBackBack->setGeometry(0,0,368,951); + ui->labelForwardBackTitle->setGeometry(0,20,368,40); + ui->buttonNeedleIdxImage->setGeometry(38,80,16,40); + ui->labelNeedleCurAndTotal->setGeometry(80,80,220,32); + ui->buttonColorIdxImage->setGeometry(34,140,24,32); + ui->labelColorCurAndTotal->setGeometry(80,140,220,32); + ui->buttonNeedleBegin->setGeometry(34,240,132,66); + ui->buttonNeedleDec1->setGeometry(34,320,132,66); + ui->buttonNeedleDec10->setGeometry(34,400,132,66); + ui->buttonNeedleDec100->setGeometry(34,480,132,66); + ui->buttonNeedleDec1000->setGeometry(34,560,132,66); + ui->buttonNeedleDec10000->setGeometry(34,640,132,66); + ui->buttonColorDec->setGeometry(34,720,132,66); + ui->buttonForwardBackOk->setGeometry(34,860,132,66); + ui->buttonNeedleEnd->setGeometry(202,240,132,66); + ui->buttonNeedleAdd1->setGeometry(202,320,132,66); + ui->buttonNeedleAdd10->setGeometry(202,400,132,66); + ui->buttonNeedleAdd100->setGeometry(202,480,132,66); + ui->buttonNeedleAdd1000->setGeometry(202,560,132,66); + ui->buttonNeedleAdd10000->setGeometry(202,640,132,66); + ui->buttonColorAdd->setGeometry(202,720,132,66); + ui->buttonForwardBackCancel->setGeometry(202,860,132,66); +} + +void MainWidget::initResolution1006() +{ + this->resize(1024,600); + ui->frameBack->setGeometry(0,0,1024,600); + ui->frameUp->setGeometry(0,0,1024,30); + ui->labelTitle->setGeometry(15,2,360,30); + ui->labelHMIVersion->setGeometry(555,2,440,30); + ui->buttonWifi->setGeometry(1000,11,15,15); + + //左侧主按钮 + ui->frameMainFunction->setGeometry(0,36,98,532);// x坐标 y坐标 宽高 + ui->buttonPatternSet->setGeometry(13,0,58,58); + ui->buttonParaSet->setGeometry(13,90,58,58); + ui->buttonShortcutFunction->setGeometry(13,180,58,58); + ui->buttonAccessFunction->setGeometry(13,270,58,58); + ui->buttonMainMenu->setGeometry(13,360,58,58); + ui->labelPatternSet->setGeometry(8,59,70,20); + ui->labelParaSet->setGeometry(8,149,70,20); + ui->labelShortcutFunction->setGeometry(8,239,70,20); + ui->labelAccessFunction->setGeometry(8,329,70,20); + ui->labelMainMenu->setGeometry(8,419,70,20); + + //下方的10个快捷按钮 + ui->frameShortcutBtn->setGeometry(102,490,709,71); + for(int i = 0; i < m_shortCutBtnList.size(); i++) + { + m_shortCutBtnList[i]->setGeometry(10+70*i,9,58,58); + } + + //九宫格 + ui->frameFunctionBtn->setGeometry(820,292,200,268);// x y w h + ui->frameSpeed->setGeometry(0,0,185,200); + ui->buttonSpeedAdd->setGeometry(123,0,70,71); + ui->lcdNumberSpeed->setGeometry(64,14,60,44); + ui->buttonSpeedDec->setGeometry(0,0,70,71); + ui->frameNineBtn->setGeometry(5,75,184,185); + ui->buttonNineBtn1->setGeometry(0,0,58,58); + ui->buttonNineBtnUp->setGeometry(60,0,58,58); + ui->buttonNineBtn2->setGeometry(126,0,58,58); + ui->buttonNineBtnLeft->setGeometry(0,56,58,58); + ui->buttonNineBtnMiddle->setGeometry(61,65,58,58); + ui->buttonNineBtnRight->setGeometry(120,56,58,58); + ui->buttonNineBtn3->setGeometry(0,126,58,58); + ui->buttonNineBtnDown->setGeometry(60,115,58,58); + ui->buttonNineBtn4->setGeometry(126,126,58,58); + + //下方状态栏 + ui->frameDown->setGeometry(0,564,1024,36); + ui->progressBar->setGeometry(4,28,1016,2); + ui->labelState->setGeometry(15,0,200,36); + ui->labelWorkState->setGeometry(748,10,16,17);//模拟工作 + ui->labelEnableWorkState->setGeometry(772,11,15,15);//显示工作状态 + ui->buttonConnect->setGeometry(800,11,15,15);//链接状态 + ui->buttonUser->setGeometry(822,11,15,15);//用户 + ui->frameMenuBack->setGeometry(101,36,707,513);//二级菜单的白色背景显示不齐 -rq + ui->labelTime->setGeometry(842,0,200,36);//时间 + + //右上方花样信息 + ui->frameEmbInfo->setGeometry(819,30,188,280); + ui->buttonWorkingTime->setGeometry(18,20,20,20); + ui->labelWorkingTime->setGeometry(45,15,110,28); + ui->buttonNeedleNum->setGeometry(18,55,18,18); + ui->labelNeedleNum->setGeometry(45,50,120,28); + ui->buttonSpindleAngle->setGeometry(18,90,19,19); + ui->labelSpindleAngle->setGeometry(45,85,110,28); + ui->buttonColorOrder->setGeometry(18,125,15,20); + ui->labelColorOrder->setGeometry(45,120,110,28); + ui->buttonNeedleIdx->setGeometry(23,160,8,25); + ui->labelNeedleIdx->setGeometry(45,155,110,28); + ui->buttonCoorXY->setGeometry(18,195,20,20); + ui->labelCoorXY->setGeometry(45,190,170,28); + ui->buttonRelativeCoorXY->setGeometry(19,230,20,20); + ui->labelRelativeCoorXY->setGeometry(45,225,170,28); + + //花样显示区域 + ui->framePatternView->setGeometry(104,36,707,452); + ui->labelPatternView->setGeometry(58,30,541,411);//灰色花样图 + ui->progressBarProgress->setGeometry(600,282,88,26); + ui->labelFilename->setGeometry(6,5,500,24); + ui->frameColor->setGeometry(620,0,68,311); + QRect rectImage(9,3,12,31); + QRect rectName(26,10,20,29); + ui->buttonNeedle->setGeometry(16,14,52,40); + ui->buttonNeedle->initLeftImageRightName(rectImage,rectName); + for(int i = 0; i < m_colorBtnList.size(); i++) + { + m_colorBtnList.at(i)->setGeometry(16,58+i*24,52,22);//两位数字显示不全 -rq + } + + ui->framePatternInfo->setGeometry(600,310,88,134); + ui->framePatternInfoImage->setGeometry(0,0,88,134); + ui->buttonPatternInfo->setGeometry(0,0,88,134); + ui->labelX->setGeometry(8,10,20,16); + ui->labelXValue->setGeometry(10,10,72,16); + ui->labelY->setGeometry(8,30,20,16); + ui->labelYValue->setGeometry(10,30,72,16); + ui->labelW->setGeometry(8,50,20,16); + ui->labelWValue->setGeometry(10,50,72,16); + ui->labelH->setGeometry(8,70,20,16); + ui->labelHValue->setGeometry(10,70,72,16); + ui->labelC->setGeometry(8,90,20,16); + ui->labelCValue->setGeometry(10,90,72,16); + ui->labelN->setGeometry(8,110,20,16); + ui->labelNValue->setGeometry(10,110,72,16); + + //辅助功能 + ui->frameAccessFunction->setGeometry(108,36,707,513); + u16 hNum = 7;//每行7个 + u16 vNum = 4;//总共4行 + for(int i = 0; i < vNum; i++) + { + for(int j = 0; j < hNum; j++) + { + m_assistBtnList[i*hNum+j]->setGeometry(24+98*j,24+106*i,58,58); + m_assistLabelList[i*hNum+j]->setGeometry(6+98*j,84+106*i,95,40);//字体显示不全 -rq + } + } + ui->buttonAssistPgUp->setGeometry(476,460,100,40); + ui->buttonAssistPgDn->setGeometry(586,460,100,40); + ui->labelAssistPage->setGeometry(376,460,100,40); + + //花样设置 + ui->framePatternSet->setGeometry(108,36,707,513); + hNum = 7;//每行7个 + vNum = 2;//总共2行 + for(int i = 0; i < vNum; i++) + { + for(int j = 0; j < hNum; j++) + { + m_patternSetBtnList[i*hNum+j]->setGeometry(24+98*j,24+106*i,58,58); + m_patternSetLabelList[i*hNum+j]->setGeometry(14+98*j,84+106*i,81,40); + } + } + + //参数设置 + ui->frameParaSet->setGeometry(108,36,707,513); + hNum = 7;//每行7个 + vNum = 2;//总共2行 + for(int i = 0; i < vNum; i++) + { + for(int j = 0; j < hNum; j++) + { + m_paraSetBtnList[i*hNum+j]->setGeometry(24+98*j,24+106*i,58,58); + m_paraSetLabelList[i*hNum+j]->setGeometry(14+98*j,84+106*i,81,40); + } + } + + //调试 + ui->frameDebugFunction->setGeometry(108,36,707,513); + hNum = 7;//每行7个 + vNum = 2;//总共2行 + for(int i = 0; i < vNum; i++) + { + for(int j = 0; j < hNum; j++) + { + m_debugBtnList[i*hNum+j]->setGeometry(24+98*j,24+106*i,58,58); + m_debugLabelList[i*hNum+j]->setGeometry(14+98*j,84+106*i,81,40); + } + } + ui->buttonDebugClose->setGeometry(586,460,100,40); + + //快进回退 + ui->frameForwardBack->setGeometry(816,30,194,530); + ui->frameForwardBackBack->setGeometry(0,0,194,530); + ui->labelForwardBackTitle->setGeometry(48,13,110,28); + ui->buttonNeedleIdxImage->setGeometry(23,45,8,25); + ui->labelNeedleCurAndTotal->setGeometry(50,45,105,28); + ui->buttonColorIdxImage->setGeometry(20,80,15,20); + ui->labelColorCurAndTotal->setGeometry(50,75,110,28); + ui->buttonNeedleBegin->setGeometry(15,120,80,36); + ui->buttonNeedleDec1->setGeometry(15,170,80,36); + ui->buttonNeedleDec10->setGeometry(15,220,80,36); + ui->buttonNeedleDec100->setGeometry(15,270,80,36); + ui->buttonNeedleDec1000->setGeometry(15,320,80,36); + ui->buttonNeedleDec10000->setGeometry(15,370,80,36); + ui->buttonColorDec->setGeometry(15,420,80,36); + ui->buttonForwardBackOk->setGeometry(16,480,80,36); + ui->buttonNeedleEnd->setGeometry(102,120,80,36); + ui->buttonNeedleAdd1->setGeometry(102,170,80,36); + ui->buttonNeedleAdd10->setGeometry(102,220,80,36); + ui->buttonNeedleAdd100->setGeometry(102,270,80,36); + ui->buttonNeedleAdd1000->setGeometry(102,320,80,36); + ui->buttonNeedleAdd10000->setGeometry(102,370,80,36); + ui->buttonColorAdd->setGeometry(102,420,80,36); + ui->buttonForwardBackCancel->setGeometry(102,480,80,36); + + //快捷功能 + ui->frameShortcutFunction->setGeometry(108,36,707,513); + hNum = 7;//每行7个 + vNum = 4;//总共4行 + for(int i = 0; i < vNum; i++) + { + for(int j = 0; j < hNum; j++) + { + m_quickBtnList[i*hNum+j]->setGeometry(24+98*j,24+106*i,58,58); + m_quickLabelList[i*hNum+j]->setGeometry(6+98*j,84+106*i,95,40);//字体显示不全 -rq + } + } + ui->buttonShortCutPgUp->setGeometry(476,460,100,40); + ui->buttonShortCutPgDn->setGeometry(586,460,100,40); + ui->labelShortCutPage->setGeometry(376,460,100,40); +} + +//初始化窗体控件样式 +void MainWidget::initControlStyle() +{ + //上状态栏时间 + ui->labelTime->setFont(fontNormal_6); + ui->labelTime->setStyleSheet(LABELWHITESTYLE); + ui->buttonWifi->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonWifi->objectName()+"Unconnect")); + + //背景透明 + ui->frameUp->setStyleSheet(TRANSPARENTSTYLE); + ui->frameMainFunction->setStyleSheet(TRANSPARENTSTYLE); + ui->frameAccessFunction->setStyleSheet(TRANSPARENTSTYLE); + ui->frameDebugFunction->setStyleSheet(TRANSPARENTSTYLE); + ui->framePatternSet->setStyleSheet(TRANSPARENTSTYLE); + ui->frameShortcutFunction->setStyleSheet(TRANSPARENTSTYLE); + ui->frameParaSet->setStyleSheet(TRANSPARENTSTYLE); + ui->frameDown->setStyleSheet(TRANSPARENTSTYLE); + ui->frameEmbInfo->setStyleSheet(TRANSPARENTSTYLE); + + ui->framePatternView->setStyleSheet(TRANSPARENTSTYLE); + ui->frameFunctionBtn->setStyleSheet(TRANSPARENTSTYLE); + QString style = "background-color: rgb(246, 242, 239);outline:none;border:0px;border-radius:10px;"; + ui->frameMenuBack->setStyleSheet(style); + + //设置控件图标 + //背景图 + int waterMark = g_pSettings->readFromIniFile("HMI/waterMark").toInt();//是否带水印 + QString backGroundImgPath; + if(waterMark == 1) + { + backGroundImgPath = m_setControlStyle.getBorderImageStyleSheet(this->objectName()); + } + else if(waterMark == 0) + { + backGroundImgPath = m_setControlStyle.getBorderImageStyleSheet(this->objectName() + "_NoWaterMark"); + qDebug()<frameBack->setStyleSheet(backGroundImgPath); + if(g_emDebugMode == debugMode) + { + ui->labelTitle->setStyleSheet(LABELREDSTYLE); + } + else + { + ui->labelTitle->setStyleSheet(LABELWHITESTYLE); + } + ui->labelTitle->setFont(fontBold_1); + + //获得绘制区域的背景图,用于embdata绘制刷新图形时的背景 + int x = ui->labelPatternView->x() + ui->framePatternView->x(); + int y = ui->labelPatternView->y() + ui->framePatternView->y(); + QImage MainWidgetPix; + MainWidgetPix.load(getBackImagePath(waterMark));//主界面背景图 + + //从主界面背景图截取等于labelPatternView的背景图 + m_embBackPix = QPixmap(ui->labelPatternView->width(),ui->labelPatternView->height()); + m_embBackPix = QPixmap::fromImage(MainWidgetPix.copy(x,y,m_embBackPix.width(),m_embBackPix.height())); + + //状态图标 + ui->buttonConnect->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonConnect->objectName()+"Unconnected")); + ui->buttonUser->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonUser->objectName())); + + //主功能键图标 + ui->labelMainMenu->setFont(fontNormal_6); + ui->labelMainMenu->setStyleSheet(LABELWHITESTYLE); + ui->labelPatternSet->setFont(fontNormal_6); + ui->labelPatternSet->setStyleSheet(LABELWHITESTYLE); + ui->labelAccessFunction->setFont(fontNormal_6); + ui->labelAccessFunction->setStyleSheet(LABELWHITESTYLE); + ui->labelParaSet->setFont(fontNormal_6); + ui->labelParaSet->setStyleSheet(LABELWHITESTYLE); + ui->labelShortcutFunction->setFont(fontNormal_6); + ui->labelShortcutFunction->setStyleSheet(LABELWHITESTYLE); + //ui->buttonMainMenu->setCheckedBottomImage(m_setControlStyle.getBottomStyleSheet(ui->buttonMainMenu->parent()->objectName())); + ui->buttonMainMenu->setMainBtnBottomStyle(); + ui->buttonMainMenu->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonMainMenu->objectName())); + ui->buttonPatternSet->setMainBtnBottomStyle(); + ui->buttonPatternSet->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonPatternSet->objectName())); + ui->buttonAccessFunction->setMainBtnBottomStyle(); + ui->buttonAccessFunction->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonAccessFunction->objectName())); + ui->buttonParaSet->setMainBtnBottomStyle(); + ui->buttonParaSet->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonParaSet->objectName())); + ui->buttonShortcutFunction->setMainBtnBottomStyle(); + ui->buttonShortcutFunction->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonShortcutFunction->objectName())); + + //速度加减图标 + ui->lcdNumberSpeed->setFont(fontBold_1); + ui->lcdNumberSpeed->setStyleSheet(LABELWHITESTYLE); + ui->buttonSpeedAdd->setBottomImage(m_setControlStyle.getBottomStyleSheet(ui->buttonSpeedAdd->objectName())); + ui->buttonSpeedDec->setBottomImage(m_setControlStyle.getBottomStyleSheet(ui->buttonSpeedDec->objectName())); + + //针杆图标 + ui->buttonNeedle->setLabelImage(m_setControlStyle.getStyleSheet(ui->buttonNeedle->objectName())); + ui->buttonNeedle->setLabelNameFont(fontNormal_6); + for(int i = 0; i < m_colorBtnList.size(); i++) + { + m_colorBtnList.at(i)->setFont(fontNormal_6); + m_colorBtnList.at(i)->setEnabled(false); + } + + ui->labelFilename->setFont(fontNormal_6); + ui->labelFilename->setStyleSheet(LABELGREYSTYLE); + ui->framePatternInfoImage->setStyleSheet(m_setControlStyle.getStyleSheet(ui->framePatternInfoImage->objectName())); + ui->buttonPatternInfo->setStyleSheet(TRANSPARENTSTYLE); + ui->labelX->setFont(fontNormal_6); + ui->labelX->setStyleSheet(LABELWHITESTYLE); + ui->labelXValue->setFont(fontNormal_6); + ui->labelXValue->setStyleSheet(LABELWHITESTYLE); + ui->labelY->setFont(fontNormal_6); + ui->labelY->setStyleSheet(LABELWHITESTYLE); + ui->labelYValue->setFont(fontNormal_6); + ui->labelYValue->setStyleSheet(LABELWHITESTYLE); + + ui->labelW->setFont(fontNormal_6); + ui->labelW->setStyleSheet(LABELWHITESTYLE); + ui->labelWValue->setFont(fontNormal_6); + ui->labelWValue->setStyleSheet(LABELWHITESTYLE); + ui->labelH->setFont(fontNormal_6); + ui->labelH->setStyleSheet(LABELWHITESTYLE); + ui->labelHValue->setFont(fontNormal_6); + ui->labelHValue->setStyleSheet(LABELWHITESTYLE); + ui->labelC->setFont(fontNormal_6); + ui->labelC->setStyleSheet(LABELWHITESTYLE); + ui->labelCValue->setFont(fontNormal_6); + ui->labelCValue->setStyleSheet(LABELWHITESTYLE); + ui->labelN->setFont(fontNormal_6); + ui->labelN->setStyleSheet(LABELWHITESTYLE); + ui->labelNValue->setFont(fontNormal_6); + ui->labelNValue->setStyleSheet(LABELWHITESTYLE); + + //绣作信息图标 + ui->labelWorkingTime->setFont(fontNormal_6); + ui->labelWorkingTime->setStyleSheet(LABELWHITESTYLE); + ui->buttonWorkingTime->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonWorkingTime->objectName())); + ui->labelNeedleNum->setFont(fontNormal_6); + ui->labelNeedleNum->setStyleSheet(LABELWHITESTYLE); + ui->buttonNeedleNum->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonNeedleNum->objectName())); + ui->labelSpindleAngle->setFont(fontNormal_6); + ui->labelSpindleAngle->setStyleSheet(LABELWHITESTYLE); + ui->buttonSpindleAngle->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonSpindleAngle->objectName())); + ui->labelColorOrder->setFont(fontNormal_6); + ui->labelColorOrder->setStyleSheet(LABELWHITESTYLE); + ui->buttonColorOrder->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonColorOrder->objectName())); + ui->labelNeedleIdx->setFont(fontNormal_6); + ui->labelNeedleIdx->setStyleSheet(LABELWHITESTYLE); + ui->progressBarProgress->setAlignment(Qt::AlignCenter); + ui->progressBarProgress->setStyleSheet(PROGRESSBARSTYLE2); + ui->progressBarProgress->setFont(fontNormal_6); + ui->buttonNeedleIdx->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonNeedleIdx->objectName())); + ui->labelCoorXY->setFont(fontNormal_6); + ui->labelCoorXY->setStyleSheet(LABELWHITESTYLE); + ui->labelRelativeCoorXY->setFont(fontNormal_6); + ui->labelRelativeCoorXY->setStyleSheet(LABELWHITESTYLE); + ui->buttonCoorXY->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonCoorXY->objectName())); + ui->buttonRelativeCoorXY->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonRelativeCoorXY->objectName())); + + //10个常用快捷按钮 + ui->frameShortcutBtn->setStyleSheet(TRANSPARENTSTYLE); + for(int i = 0; i < m_shortCutBtnList.size(); i++) + { + //界面下方快捷按钮的底图设置,底图和九宫格按钮的底图相同 + m_shortCutBtnList[i]->setBlueBorderBottomStyle(); + if(g_emMacType == MACHINE_ADHESIVE) + { + m_shortCutBtnList[i]->hide(); + } + } + + //九宫格图标 + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet(ui->frameNineBtn->objectName())); + ui->buttonNineBtn1->setBlueBorderBottomStyle(); + ui->buttonNineBtn1->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn1->objectName())); + ui->buttonNineBtn2->setBlueBorderBottomStyle(); + ui->buttonNineBtn2->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn2->objectName())); + ui->buttonNineBtnMiddle->setTopImage(m_setControlStyle.getTopStyleSheet("frameNineBtnMiddle_2"));//默认速度等级为2 + ui->buttonNineBtn3->setBlueBorderBottomStyle(); + ui->buttonNineBtn3->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn3->objectName())); + ui->buttonNineBtn4->setBlueBorderBottomStyle(); + ui->buttonNineBtn4->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn4->objectName())); + + //压胶机隐藏按钮 + if(g_emMacType == MACHINE_ADHESIVE) + { + ui->buttonNineBtn2->hide(); + ui->buttonSpeedAdd->hide(); + ui->buttonSpeedDec->hide(); + } + + //快进快退 + ui->frameForwardBack->setStyleSheet(TRANSPARENTSTYLE); + QString frameForwardBackBackImgPath = m_setControlStyle.getStyleSheet(ui->frameForwardBackBack->objectName()); + + ui->frameForwardBackBack->setStyleSheet(frameForwardBackBackImgPath); + ui->labelForwardBackTitle->setFont(fontNormal_6); + ui->labelForwardBackTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelColorCurAndTotal->setFont(fontNormal_6); + ui->labelColorCurAndTotal->setStyleSheet(LABELWHITESTYLE); + ui->buttonColorIdxImage->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonColorIdxImage->objectName())); + ui->labelNeedleCurAndTotal->setFont(fontNormal_6); + ui->labelNeedleCurAndTotal->setStyleSheet(LABELWHITESTYLE); + ui->buttonNeedleIdxImage->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonNeedleIdx->objectName())); + ui->buttonNeedleBegin->setWhiteBlueBottomStyle(); + ui->buttonNeedleBegin->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleBegin->objectName()),4); + ui->buttonNeedleEnd->setWhiteBlueBottomStyle(); + ui->buttonNeedleEnd->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleEnd->objectName()),4); + ui->buttonNeedleAdd1->setWhiteBlueBottomStyle(); + ui->buttonNeedleAdd1->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleAdd1->objectName()),4); + ui->buttonNeedleAdd10->setWhiteBlueBottomStyle(); + ui->buttonNeedleAdd10->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleAdd10->objectName()),4); + ui->buttonNeedleAdd100->setWhiteBlueBottomStyle(); + ui->buttonNeedleAdd100->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleAdd100->objectName()),4); + ui->buttonNeedleAdd1000->setWhiteBlueBottomStyle(); + ui->buttonNeedleAdd1000->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleAdd1000->objectName()),4); + ui->buttonNeedleAdd10000->setWhiteBlueBottomStyle(); + ui->buttonNeedleAdd10000->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleAdd10000->objectName()),4); + ui->buttonColorAdd->setWhiteBlueBottomStyle(); + ui->buttonColorAdd->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonColorAdd->objectName()),4); + ui->buttonNeedleDec1->setWhiteBlueBottomStyle(); + ui->buttonNeedleDec1->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleDec1->objectName()),4); + ui->buttonNeedleDec10->setWhiteBlueBottomStyle(); + ui->buttonNeedleDec10->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleDec10->objectName()),4); + ui->buttonNeedleDec100->setWhiteBlueBottomStyle(); + ui->buttonNeedleDec100->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleDec100->objectName()),4); + ui->buttonNeedleDec1000->setWhiteBlueBottomStyle(); + ui->buttonNeedleDec1000->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleDec1000->objectName()),4); + ui->buttonNeedleDec10000->setWhiteBlueBottomStyle(); + ui->buttonNeedleDec10000->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNeedleDec10000->objectName()),4); + ui->buttonColorDec->setWhiteBlueBottomStyle(); + ui->buttonColorDec->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonColorDec->objectName()),4); + ui->buttonForwardBackOk->setWhiteBlueBottomStyle(); + ui->buttonForwardBackOk->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonForwardBackOk->objectName()),4); + ui->buttonForwardBackCancel->setWhiteBlueBottomStyle(); + ui->buttonForwardBackCancel->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonForwardBackCancel->objectName()),4); + + //快捷功能图标 + for(int i = 0; i < m_quickLabelList.size(); i++) + { + m_quickLabelList[i]->setFont(fontNormal_6); + //28个快捷按钮的底图相同 + m_quickBtnList[i]->setOrangeGradientBottomStyle(BORDER_RADIUS1); + } + ui->buttonShortCutPgUp->setBlueBorderBottomStyle(); + ui->buttonShortCutPgDn->setBlueBorderBottomStyle(); + ui->buttonShortCutPgUp->setFont(fontNormal_6); + ui->buttonShortCutPgDn->setFont(fontNormal_6); + ui->labelShortCutPage->setFont(fontNormal_6); + ui->labelShortCutPage->setStyleSheet(LABELBLACKSTYLE); + + //辅助功能图标 + for(int i = 0; i < m_assistLabelList.size(); i++) + { + m_assistLabelList[i]->setFont(fontNormal_6); + //28个快捷按钮的底图相同 + m_assistBtnList[i]->setOrangeGradientBottomStyle(BORDER_RADIUS1); + } + ui->buttonAssistPgUp->setBlueBorderBottomStyle(); + ui->buttonAssistPgDn->setBlueBorderBottomStyle(); + ui->buttonAssistPgUp->setFont(fontNormal_6); + ui->buttonAssistPgDn->setFont(fontNormal_6); + ui->labelAssistPage->setFont(fontNormal_6); + ui->labelAssistPage->setStyleSheet(LABELBLACKSTYLE); + + //花样设置功能图标 + for(int i = 0; i < m_patternSetLabelList.size(); i++) + { + m_patternSetLabelList[i]->setFont(fontNormal_6); + //底图相同 + m_patternSetBtnList[i]->setOrangeGradientBottomStyle(BORDER_RADIUS1); + } + + //参数设置功能图标 + for(int i = 0; i < m_paraSetLabelList.size(); i++) + { + m_paraSetLabelList[i]->setFont(fontNormal_6); + //底图相同 + m_paraSetBtnList[i]->setOrangeGradientBottomStyle(BORDER_RADIUS1); + } + + + //调试功能图标 + for(int i = 0; i < m_debugLabelList.size(); i++) + { + m_debugLabelList[i]->setFont(fontNormal_6); + //28个快捷按钮的底图相同 + m_debugBtnList[i]->setOrangeGradientBottomStyle(BORDER_RADIUS1); + } + ui->buttonDebugClose->setBlueBorderBottomStyle(); + ui->buttonDebugClose->setFont(fontNormal_6); + + //下方状态及版本 + ui->progressBar->setStyleSheet(PROGRESSBARSTYLE); + ui->progressBar->setValue(0); + ui->labelState->setFont(fontNormal_6); + ui->labelState->setStyleSheet(LABELREDSTYLE); + ui->labelHMIVersion->setFont(fontNormal_6); + ui->labelHMIVersion->setStyleSheet(LABELWHITESTYLE); +} + +//获取背景图的加载路径 +QString MainWidget::getBackImagePath(s16 waterMark) +{ + //<分辨率><主题><窗体名称><图片名称> + QString path = ":/images/"; + + //分辨率 + QString str; + str.clear(); + switch (g_emResolut) + { + case resolution1910: + str = "_1910_logo.png"; + break; + case resolution1006: + str = "_1006_logo.png"; + break; + default: + break; + } + + path += this->objectName() + "/" + this->objectName(); + if(waterMark == 0)//无水印 + { + path += "_NoWaterMark" + str; + } + else + { + path += str; + } + + //qDebug()<isConnected()) + { + linkSta = pMachine->isConnected(); + if(linkSta == Connected) + { + if (pMachine != NULL) + { + //连接后获取机器信息,用于获得剩余可用时间,小于5天主动提示用户 + //此条语句需放在前面 + pMachine->getInfoFromMachine(); + + pMachine->getSensorEnBmpFromMachine();//读取传感器信号 + pMachine->getParasFromMachine();//获取参数 + m_pMinTimer->start();//1分钟记录一次当前系统时间 ,连接成功以后开启计时器,记录时间 -rq + m_pMainWidgetFunction->setShutDownTime();//计算关机时间 + + ui->buttonConnect->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonConnect->objectName())); + ui->labelState->setText(tr("Connected"));//状态:已连接 + } + } + else + { + ui->buttonConnect->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonConnect->objectName()+"Unconnected")); + ui->labelState->setText(tr("Not connected"));//状态:未连接 + } + } + } + else + { + if (pMachine != NULL) + { + if (linkSta != pMachine->isConnected() || + pMachine->isConnected() == Connectting || + alive == -1) + { + if (alive == -1) + { + linkSta = 0; + } + else + { + linkSta = pMachine->isConnected();//获取连接状态 + } + + if (linkSta == Connectting)//连接中... + { + ui->buttonConnect->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonConnect->objectName()+"Connecting")); + ui->labelState->setText(tr("Connnecting..."));//状态:连接中... + } + else if (linkSta == Connected)//已连接 + { + //连接后获取机器信息,用于获得剩余可用时间,小于5天主动提示用户 + //此条语句需放在前面 + pMachine->getInfoFromMachine(); + + pMachine->getSensorEnBmpFromMachine();//读取传感器信号 + pMachine->getParasFromMachine();//获取参数 + m_pMinTimer->start();//1分钟记录一次当前系统时间 ,连接成功以后开启计时器,记录时间 -rq + m_pMainWidgetFunction->setShutDownTime();//计算关机时间 + + ui->buttonConnect->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonConnect->objectName())); + ui->labelState->setText(tr("Connected"));//状态:已连接 + + /*** + 界面启动时也会发送最后绣作的花样文件, + 连接成功后也会发送,但连接速度快,此时ds数据可能还没转换完成, + 所以连接成功后发送文件可能不成功,只是界面加载时会发送文件, + 因此二者不会重复发送文件;若断开连接再连接时此段代码会发送文件, + 界面加载部分不会发送; + ***/ + QByteArray ds16dat = g_pCurEmbData->getDsDat();//获得ds16数据 + //如果当前所选文件路径不为空与ds16数据不为空时 + if(m_curFilePath.length() > 0 && ds16dat.size() > 0) + { + //m_pMainWidgetFunction->sendPatternData(m_curFilePath);//发送花样数据 + //设置为按进度执行模式 + //g_pCurEmbData->setExecIndex(m_curDatIdx); // 设置进度 + } + } + else//未连接 + { + ui->buttonConnect->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonConnect->objectName()+"Unconnected")); + ui->labelState->setText(tr("Not connected"));//状态:未连接 + } + } + } + } +} + +//隐藏菜单栏(frame) +void MainWidget::hideMenuFrame() +{ + ui->frameMenuBack->setVisible(false); + ui->framePatternView->setVisible(false); + ui->frameShortcutBtn->setVisible(false); + ui->framePatternSet->setVisible(false); + ui->frameParaSet->setVisible(false); + ui->frameAccessFunction->setVisible(false); + ui->frameShortcutFunction->setVisible(false); + ui->frameDebugFunction->setVisible(false); + + //设置按钮为非选中状态 + ui->buttonPatternSet->setChecked(false); + ui->buttonPatternSet->setCheckable(false); + ui->buttonAccessFunction->setChecked(false); + ui->buttonAccessFunction->setCheckable(false); + ui->buttonParaSet->setChecked(false); + ui->buttonParaSet->setCheckable(false); + ui->buttonShortcutFunction->setChecked(false); + ui->buttonShortcutFunction->setCheckable(false); + ui->buttonMainMenu->setChecked(false); + ui->buttonMainMenu->setCheckable(false); +} + +void MainWidget::resetAllData() +{ + m_forwardBackNeedleIdx = 0; + m_forwardBackColorIdx = 0; + ui->frameForwardBack->setVisible(false); + + g_pCurEmbData->getDsDat(); + + //转换为ds16数据后设置色序表 + g_pCurEmbData->setDs16ColorOfTable(m_fileHead.switchTable); + g_pCurEmbData->setEmbData();// ds16数据转换为画图数据 + + //加载图片的进度条显示 + ui->progressBar->setVisible(true); + int value = g_pCurEmbData->getStitchNums() / TENTHOUSANDNEEDLE; + ui->progressBar->setRange(1,value); + ui->progressBar->setValue(1); + + m_dispMode = EmbData::DISP_ALL_EXEC; + g_pCurEmbData->setDispMode(m_dispMode, 1); // 重新画图 + m_dispMode = EmbData::DISP_EXECING; // 设置为执行模式 + g_pCurEmbData->setDispMode(m_dispMode, 0); // 设置为按进度执行模式 + + m_curColorIdx = 0;//当前色序 + m_curDatIdx = 0; + ui->buttonNeedle->setLabelName(QString("%1").arg(0)); // 当前色序显示置为0 + refreshShowColorUi(); + + ui->framePatternView->setVisible(true); + QPixmap patternPix = g_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); + + //刷新花样信息 + double width = g_pCurEmbData->getDatWidth()*0.01; + ui->labelWValue->setText(QString("%1").arg(width)); + + double height = g_pCurEmbData->getDatHeight()*0.01; + ui->labelHValue->setText(QString("%1").arg(height)); + + ui->labelCValue->setText(QString::number(g_pCurEmbData->getColorNums())); + if(g_emMacType == MACHINE_PUNCH || g_emMacType == MACHINE_PUNCH_AUTOPOS) + { + ui->labelNValue->setText(QString::number(g_pCurEmbData->getPunchNum()));//冲孔个数 + } + else + { + ui->labelNValue->setText(QString::number(g_pCurEmbData->getStitchNums())); + } + + ui->labelWorkingTime->setText("0:0"); + QTextCodec *cod = QTextCodec::codecForLocale(); + ui->labelSpindleAngle->setText(cod->toUnicode("0°")); + ui->labelColorOrder->setText(QString::number(m_curColorIdx+1)); + ui->labelNeedleIdx->setText(QString::number(m_curDatIdx)); + ui->progressBarProgress->setMaximum(g_pCurEmbData->getStitchNums());//进度条最大值 + ui->progressBarProgress->setMinimum(0); + ui->progressBarProgress->setValue(m_curDatIdx); + ui->labelCoorXY->setText("(0,0)"); + ui->labelRelativeCoorXY->setText("(0,0)"); + + ui->progressBar->setVisible(false); +} + +void MainWidget::refreshShowColorUi() +{ + QString btnStyle1 = "QPushButton{border:0px solid rgb(80,80,80);border-style:inset;border-radius:5px;"; + QString btnStyle2 = "QPushButton:checked{border:2px solid rgb(80,80,80);}"; + + QString str; + + QRgb *pColorBuf; + pColorBuf = (QRgb *)(g_pSettings->getColorRgbArray().data()); + + QByteArray colorTable = g_pCurEmbData->getColorTable(); + int colorNum = colorTable.size(); + + int colorIdx = m_showColorIdxBegin; + if(colorIdx < 0) + { + colorIdx = 0; + } + + for (int i = 0; i < m_colorBtnList.size(); i++) + { + // 颜色显示 + if (colorIdx < colorNum) + { + int needleIdx = colorTable.at(colorIdx); + QString idxStr; + + if(needleIdx > EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM)//缝纫针杆 + { + needleIdx -= (EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM); + idxStr = "SewNeedle/"+QString::number(needleIdx)+"_coloridx"; + } + else if(needleIdx > EMB_NEEDLE_NUM)//冲孔针杆 + { + needleIdx -= EMB_NEEDLE_NUM; + idxStr = "PunchNeedle/"+QString::number(needleIdx)+"_coloridx"; + } + else//绣花针杆 + { + idxStr = "EmbNeedle/"+QString::number(needleIdx)+"_coloridx"; + } + + int colorInTab; + if(g_pSettings->ifKeyExists(idxStr) == true) + { + colorInTab = g_pSettings->readFromIniFile(idxStr).toInt(); + } + else + { + colorInTab = colorTable.at(colorIdx); + if(colorInTab > EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM)//缝纫针杆 + { + colorInTab -= (EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM); + } + else if(colorInTab > EMB_NEEDLE_NUM)//冲孔针杆 + { + colorInTab -= EMB_NEEDLE_NUM; + } + colorInTab -= 1; + if(colorInTab < 0){colorInTab = 0;} + } + + if(g_emMacType == MACHINE_ADHESIVE) + { + colorInTab = colorTable.at(colorIdx); + } + + // 文件中的色序 + QRgb rgb = pColorBuf[(colorInTab % BF_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = btnStyle1 + "background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";}" + btnStyle2; + + m_colorBtnList.at(i)->setStyleSheet(cstyle); + + str.sprintf("%d", colorIdx+1); + m_colorBtnList.at(i)->setText(str); + m_colorBtnList.at(i)->show(); + + //选择显示 + if (colorIdx == m_curColorIdx || colorIdx == 0)//等于当前正在绣作的颜色 + { + QString buttonStyle = "background-color:" + bkcolor.name() + ";" + "border-radius:10px;"; + ui->buttonNeedle->setBtnBackColor(buttonStyle); + QString labelStyle = "color:" + tcolor.name() + ";"; + ui->buttonNeedle->setLabelNameStyle(labelStyle); + m_colorBtnList.at(i)->setCheckable(true); + m_colorBtnList.at(i)->setChecked(true); + } + } + else + { + m_colorBtnList.at(i)->hide(); + } + + colorIdx++; + } +} + +//花样选择 +void MainWidget::patternSelect(int station) +{ + m_patternSelectStation = station; + //选择新花样前将上一花样的断线次数保存到参数配置文件中 + if(m_curFilePath.length() > 0) + { + m_pMainWidgetFunction->setPatternHeadConfig(m_curFilePath,m_fileHead); + } + + //获得花样选择的图标字符 + QString tStyle; + for(int i = 0; i < m_patternSetItemList.size(); i++) + { + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNSELECT || + m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNSELECT_STATION1|| + m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNSELECT_STATION2 ) + { + QString topImageName = m_patternSetItemList[i].m_topImageName; + //加载按钮顶图图标 + tStyle = m_setControlStyle.getTopStyleSheet(topImageName); + + break; + } + } + + m_pPatternSelectWi->setTypeLogo(tStyle); + m_pPatternSelectWi->setMainTitle(tr("Pattern selection")); + m_pPatternSelectWi->setSubTitle(tr("Pattern setting > Pattern selection")); + + m_pPatternSelectWi->createCurDirPatterns(); + m_pPatternSelectWi->refreshSettingInfo(m_curFilePath); + m_pPatternSelectWi->show(); +} + +void MainWidget::patternColorSet() +{ + if(m_curFilePath.length() <= 0){return;} + + //获得花样色序设定的图标字符 + QString tStyle,bStyle; + for(int i = 0; i < m_patternSetItemList.size(); i++) + { + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNCOLOR) + { + QString topImageName = m_patternSetItemList[i].m_topImageName; + //加载按钮顶图图标 + tStyle = m_setControlStyle.getTopStyleSheet(topImageName); + bStyle = m_setControlStyle.getBottomStyleSheet(ui->buttonPatternSet1->parent()->objectName()); + + break; + } + } + + m_pColorOrderSetWi->setTypeLogo(tStyle); + + //等于定位冲孔机-用文件中的色序 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS) + { + memcpy(m_fileHead.switchTable,m_fileColorTable,sizeof(m_fileColorTable)); + m_pColorOrderSetWi->setMainTitle(tr("Color order set"));//色序设定 + m_pColorOrderSetWi->setSubTitle(tr("Pattern setting > Color order set"));//花样设置 > 色序设定 + } + + //等于压胶机-速度档位赋默认值 + if(g_emMacType == MACHINE_ADHESIVE) + { + m_pColorOrderSetWi->setMainTitle(tr("Speed gear"));//速度档位 + m_pColorOrderSetWi->setSubTitle(tr("Pattern setting > Speed gear"));//花样设置 > 速度档位 + + for(u32 i = 0; i < sizeof(m_fileHead.switchTable)/sizeof(m_fileHead.switchTable[0]); i++) + { + //色序为0时赋一个默认值60 + if(i < g_pCurEmbData->getColorNums() && m_fileHead.switchTable[i] == 0) + { + m_fileHead.switchTable[i] = 60; + } + } + } + + QByteArray colortab; + colortab.clear(); + colortab.append((char*)(m_fileHead.switchTable),sizeof(m_fileHead.switchTable));//头文件的色序表 + + m_pColorOrderSetWi->setColorTable(colortab,TYPE_COLORSET);//设置色序表 + m_pColorOrderSetWi->show(m_curFilePath); +} + +void MainWidget::patternColorSetHeadHight() +{ + //获得花样色序设定的图标字符 + QString tStyle,bStyle; + for(int i = 0; i < m_patternSetItemList.size(); i++) + { + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNCOLOR) + { + QString topImageName = m_patternSetItemList[i].m_topImageName; + //加载按钮顶图图标 + tStyle = m_setControlStyle.getTopStyleSheet(topImageName); + bStyle = m_setControlStyle.getBottomStyleSheet(ui->buttonPatternSet1->parent()->objectName()); + + break; + } + } + + m_pColorOrderSetWi->setTypeLogo(tStyle); + m_pColorOrderSetWi->setMainTitle(tr("Head height"));//机头高度 + m_pColorOrderSetWi->setSubTitle(tr("Pattern setting > Head height"));//花样设置 > 机头高度 + + QByteArray colortab; + colortab.clear(); + colortab.append((char*)(m_fileHead.switchTable),sizeof(m_fileHead.switchTable));//头文件的色序表 + + m_pColorOrderSetWi->setColorTable(colortab,TYPE_HIGHSET);//设置色序表 + m_pColorOrderSetWi->show(m_curFilePath); +} + +void MainWidget::patternSwitching(QString fileid) +{ + if(fileid.length() != 4) + { + return; + } + + QDir apppath(qApp->applicationDirPath()); + QString targetDir = apppath.absolutePath() + apppath.separator(); + QString tPath = targetDir + PATTERNPATH; + QDir dir(tPath);//项目中所保存的路径 + dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤 + QFileInfoList fileList = dir.entryInfoList(QStringList()<<"*.dsr");// 获取.dsr的文件列表 + foreach (QFileInfo file,fileList)//遍历文件信息 + { + if (file.isFile()) //是文件 + { + QString fileName = file.filePath().right(file.filePath().length() - tPath.length() - 1); + if(fileName.left(4) == fileid) + { + slotShowPatternPara(file.filePath(),-1);//不显示花样设置窗体,直接加载花样参数 + } + } + else //递归 + { + } + } +} + +//显示机器运行状态中的信息 +void MainWidget::showExecInfo() +{ + // 速度 + if (m_curRpm != (int)m_mcStatus.runSpeed) // 运行速度 + { + m_curRpm = (int)m_mcStatus.runSpeed; + QString str; + str.sprintf("%d", m_curRpm); + ui->lcdNumberSpeed->display(str); + } + + // 色序 + if (m_curColorIdx != (int)m_mcStatus.colorIdx) // 当前色序(从0开始) + { + m_curColorIdx = (int)m_mcStatus.colorIdx; // 色序编码 + ui->labelColorOrder->setText(QString("%1").arg(m_curColorIdx + 1)); + m_showColorIdxBegin = m_curColorIdx; + refreshShowColorUi(); + } + + // 文件执行进度(当前针数) labelNeedleIdx + if (m_curDatIdx != (int)m_mcStatus.dataIdx) + { + m_curDatIdx = (int)m_mcStatus.dataIdx; + reSetDatIdx(m_curDatIdx); + QPixmap patternPix = g_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); + } + + // 当前xy绝对坐标 + double xPos = m_mcStatus.xPos*0.01; + double yPos = m_mcStatus.yPos*0.01; + QString xyStr = QString("(%1, %2)").arg(xPos).arg(yPos); + ui->labelCoorXY->setText(xyStr); + + // 当前xy相对坐标 + double xRelPos = (m_mcStatus.xPos - m_pMainWidgetFunction->getBeginX())*0.01; + double yRelPos = (m_mcStatus.yPos - m_pMainWidgetFunction->getBeginY())*0.01; + QString xyRelStr = QString("(%1, %2)").arg(xRelPos).arg(yRelPos); + ui->labelRelativeCoorXY->setText(xyRelStr); + + + // 主轴角度 + QTextCodec *cod = QTextCodec::codecForLocale(); + QString angleStr; + angleStr.sprintf("%.2f",(float)(m_mcStatus.embSpindleAngle*0.01)); + angleStr += cod->toUnicode("°"); + ui->labelSpindleAngle->setText(angleStr); + + // 机器运行总时长 + int totalTime = m_mcStatus.workTimer; + int hour,min; + if(totalTime > 60) //大于60分钟 + { + hour = totalTime / 60; + min = totalTime % 60; + } + else + { + hour = 0; + min = totalTime; + } + //等于冲孔机、定位冲孔机 + if(g_emMacType == MACHINE_PUNCH || g_emMacType == MACHINE_PUNCH_AUTOPOS) + { + + //start 单片工作时间 xcy 0926 + u32 thetimer = 0; + thetimer = m_mcStatus.workTimeRecord; + u32 theMinute = thetimer / (60 * 1000 ) ;//分钟 + u32 theSecond = (thetimer / 1000) % 60 ;//秒 + QString theMinuteRecord = QString::number(theMinute); + QString theSecondRecord = QString::number(theSecond); + QString theText = theMinuteRecord + ":" + theSecondRecord; + ui->labelWorkingTime->setText(theText); + +// int theshow = g_pSettings->readFromInHMIiFile("AUFUS/closeshow").toInt(); +// if(theshow == 0) +// { +// ui->labelWorkingTime->setText(theText); +// } +// else if(theshow == 1) +// { +// ui->labelWorkingTime->setText("0:0"); +// } + //end + } + //等于冲孔机、定位冲孔机end + else + { + ui->labelWorkingTime->setText(QString("%1:%2").arg(hour).arg(min)); + } + + // 当前针杆 + if(m_mcStatus.needleIdx > 0) + { + ui->labelNeedleNum->setText(QString("%1").arg(m_mcStatus.needleIdx)); + ui->buttonNeedle->setLabelName(QString("%1").arg(m_mcStatus.needleIdx)); + } + +//主轴角度 +if((m_mcStatus.showSta & 1) == 0)//在位 +{ + ui->buttonSpindleAngle->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonSpindleAngle->objectName()+"ZP")); +} +else//不在位 +{ + ui->buttonSpindleAngle->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonSpindleAngle->objectName())); +} +} + +void MainWidget::showPatternPreview() +{ + hideMenuFrame(); + QFile curfile(m_curFilePath); + if(m_curFilePath.length() <= 0 || + (!curfile.exists()))//未选择文件时不显示颜色和花样信息 + { + ui->framePatternView->setVisible(false); + } + else + { + ui->framePatternView->setVisible(true); + ui->labelPatternView->setVisible(true);//非预览模式绘制区域 + } + ui->frameShortcutBtn->setVisible(true);//下方的12个快捷常用按钮 + + //主界面按钮选中 + ui->buttonMainMenu->setCheckable(true); + ui->buttonMainMenu->setChecked(true); +} + +//设置常用按钮 +void MainWidget::setCommonBtn() +{ + QPoint point; + point.setX(0); + point.setY(0); + + for(int i = 0; i < m_shortCutBtnList.size(); i++)//窗体下方的快捷按钮列表 10个 + { + int commonBtnIdx = g_pSettings->readFromIniFile("HMI/commonbtn"+QString::number(i+1)).toInt(); + QString btnStyle; + if(commonBtnIdx == FUN_NULL) + { + btnStyle = "buttonAddCommonFunctions"; + } + else + { + btnStyle = getCommonBtnStyle(commonBtnIdx);//根据按钮索引找到对应按钮的图片名称 + } + m_shortCutBtnList[i]->setShortCutTopImage(m_setControlStyle.getTopStyleSheet(btnStyle),point); + } +} + +//设置UI界面按钮的使能 +void MainWidget::setUiBtnEnable(bool bValue) +{ + ui->buttonNeedle->setEnabled(bValue); + ui->frameMainFunction->setEnabled(bValue); + ui->frameShortcutBtn->setEnabled(bValue); + ui->buttonPatternInfo->setEnabled(bValue); + ui->buttonNineBtn1->setEnabled(bValue); + ui->buttonNineBtn2->setEnabled(bValue); + ui->buttonNineBtn3->setEnabled(bValue); + ui->buttonNineBtnUp->setEnabled(bValue); + ui->buttonNineBtnDown->setEnabled(bValue); + ui->buttonNineBtnLeft->setEnabled(bValue); + ui->buttonNineBtnRight->setEnabled(bValue); + //ui->buttonNineBtnMiddle->setEnabled(bValue); +} + +void MainWidget::reSetDatIdx(int newidx) +{ + int totalStitchNum = g_pCurEmbData->getStitchNums(); + + if (newidx <= 0) + { + m_curDatIdx = 0; // 当前执行进度 + } + else if (newidx >= totalStitchNum) + { + m_curDatIdx = m_curDatIdx - 1; // 当前执行进度 + } + + // 文件idx信息 + QString str; + str.sprintf("%d", m_curDatIdx); + ui->labelNeedleIdx->setText(str); + ui->progressBarProgress->setValue(m_curDatIdx+1);//最后一针是结束码 + + // 更新进度显示 + g_pCurEmbData->setExecIndex(m_curDatIdx); +} + +//前进回退 +void MainWidget::funForwardOrBack() +{ + //显示主界面 + hideMenuFrame(); + setUiBtnEnable(false); + showPatternPreview(); + m_forwardBackNeedleIdx = m_curDatIdx; + addOrDecNeedleIdx(m_curDatIdx); + m_forwardBackColorIdx = m_expara.newColorIdx; + + g_pCurEmbData->setExecIndex(m_forwardBackNeedleIdx);// 更新进度显示 + + QPixmap patternPix = g_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); + + int totalStitchNum = g_pCurEmbData->getStitchNums(); + QString strNeedle; + strNeedle.sprintf("%d/%d",m_forwardBackNeedleIdx,totalStitchNum); + ui->labelNeedleCurAndTotal->setText(strNeedle); + + int totalColorNum = g_pCurEmbData->getColorNums(); + QString strColor; + if(m_forwardBackNeedleIdx == 0) + { + strColor.sprintf("%d/%d",0,totalColorNum); + } + else + { + strColor.sprintf("%d/%d",m_forwardBackColorIdx,totalColorNum); + } + ui->labelColorCurAndTotal->setText(strColor); + + ui->frameForwardBack->setVisible(true); + ui->frameForwardBack->raise(); +} + +void MainWidget::addOrDecNeedleIdx(int &idx) +{ + if( g_pMachine == NULL || 0 ) + { + return; + } + + if(idx < 0) + { + idx = 0; + } + + int totalColorNum = g_pCurEmbData->getColorNums();//总颜色数 + int totalStitchNum = g_pCurEmbData->getStitchNums();//总针数 + if(idx > totalStitchNum) + { + idx = totalStitchNum; + } + + memset(&m_expara,0,sizeof(FileExecPara)); + + int posx, posy, posr, cidx; + posx = posy = cidx = 0; + g_pCurEmbData->getPosInfoFromNeedleIdx(idx, posx, posy,posr,cidx); + + m_expara.newIdx = idx; + m_expara.newXPos = posx; + m_expara.newYPos = posy; + m_expara.newRPos = posr; + m_expara.newColorIdx = cidx; + + m_forwardBackColorIdx = cidx; + + QString strNeedle; + strNeedle.sprintf("%d/%d",idx,totalStitchNum); + ui->labelNeedleCurAndTotal->setText(strNeedle); + + QString strColor; + if(idx == 0) + { + strColor.sprintf("%d/%d",0,totalColorNum); + } + else + { + strColor.sprintf("%d/%d",cidx,totalColorNum); + } + ui->labelColorCurAndTotal->setText(strColor); + + //画执行进度图 + g_pCurEmbData->setExecIndex(idx);// 更新针数 + + QPixmap patternPix = g_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); +} + +void MainWidget::addOrDecColorIdx(int &idx, s16 flag) +{ + if( g_pMachine == NULL || 0 ) + { + return; + } + + if(flag == 1) + { + if(idx < 1) + { + idx = 1; + } + } + else if(flag == -1) + { + if(idx < 0) + { + idx = 0; + } + } + + int totalStitchNum = g_pCurEmbData->getStitchNums();//总针数 + int totalColorNum = g_pCurEmbData->getColorNums();//总颜色数 + + if(idx > totalColorNum) + { + idx = totalColorNum; + return; + } + + memset(&m_expara,0,sizeof(FileExecPara)); + + int posx, posy, posr, cidx; + g_pCurEmbData->getPosInfoFromColorIdx(cidx, posx, posy, posr, idx); + + m_expara.newIdx = cidx; + m_expara.newXPos = posx; + m_expara.newYPos = posy; + m_expara.newRPos = posr; + m_expara.newColorIdx = idx; + + m_forwardBackNeedleIdx = cidx; + + QString strNeedle; + strNeedle.sprintf("%d/%d",cidx,totalStitchNum); + ui->labelNeedleCurAndTotal->setText(strNeedle); + + QString strColor; + strColor.sprintf("%d/%d",idx,totalColorNum);//显示为颜色索引减1 + ui->labelColorCurAndTotal->setText(strColor); + + //画执行进度图 + g_pCurEmbData->setExecIndex(cidx);// 更新针数 + + QPixmap patternPix = g_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); +} + +//获取常用按钮样式 +QString MainWidget::getCommonBtnStyle(int idx) +{ + QString styleStr; + //检测快捷按钮条目 + for(int i = 0; i < m_quickItemList.size(); i++)//快捷功能中的快捷条目列表 + { + int enumFun = m_quickItemList[i].m_enumFunction; + if(idx == enumFun)//功能索引等于快捷按钮功能索引 + { + //获取顶层图标样式表 + styleStr = m_quickItemList[i].m_topImageName; + break; + } + } + + if(idx == FUN_PATTERNSELECT)//功能索引等于花样选择 + { + //获得花样选择的图标字符 + for(int i = 0; i < m_patternSetItemList.size(); i++) + { + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNSELECT) + { + styleStr = m_patternSetItemList[i].m_topImageName; + break; + } + } + } + return styleStr; +} + +void MainWidget::runCommonBtnFunction(int idx) +{ + if(m_pMainWidgetFunction == NULL) + { + return; + } + + switch (idx) + { + case FUN_ALLTOZERO://全部归零 + m_pMainWidgetFunction->funAllToZero(); + break; + + case FUN_SPINDLEENABLE://主轴使能 + m_pMainWidgetFunction->funPunchMsSeverOn(); + break; + + case FUN_SPINDLEDISABLE://主轴失能 + m_pMainWidgetFunction->funPunchMsSeverOff(); + break; + + case FUN_BACKWORKPOINT://回工作点 + m_pMainWidgetFunction->funBackWorkPoint(); + break; + + case FUN_BACKANCHORPOINT://回定位点 + m_pMainWidgetFunction->funBackAnchorPoint(); + break; + + case FUN_BACKTHREADPOINT://回穿线点 + m_pMainWidgetFunction->funBackThreadPoint(); + break; + + case FUN_SETOFFSETPOINT://定偏移点 + m_pMainWidgetFunction->funSetOffsetPoint(); + break; + + case FUN_BACKOFFSETPOINT://回偏移点 + m_pMainWidgetFunction->funBackOffsetPoint(); + break; + + case FUN_SPINDLETEST://冲孔主轴研车 + m_pMainWidgetFunction->funPunchMsRun(); + break; + + case FUN_RETURNTOCENTERPOINT://回中心点 + m_pMainWidgetFunction->funBackCenterPoint(); + break; + + case FUN_SETSTARTPOINT://第一机头定起始点 + { + if(m_curFilePath.length() <= 0) + { + return; + } + m_pMainWidgetFunction->funFirstHeadSetStartPoint(m_curFilePath); + double xPos = g_pCurEmbData->getBeginX()*0.01; + ui->labelXValue->setText(QString("%1").arg(xPos)); + double yPos = g_pCurEmbData->getBeginY()*0.01; + ui->labelYValue->setText(QString("%1").arg(yPos)); + m_fileHead.beginX = g_pCurEmbData->getBeginX(); + m_fileHead.beginY = g_pCurEmbData->getBeginY(); + } + break; + + case FUN_SETANCHORPOINT://定定位点 + { + if(m_curFilePath.length() <= 0) + { + return; + } + m_pMainWidgetFunction->funFirstHeadSetAnchorPoint(m_curFilePath); + double xPos = g_pCurEmbData->getAnchorX()*0.01; + ui->labelXValue->setText(QString("%1").arg(xPos)); + double yPos = g_pCurEmbData->getAnchorY()*0.01; + ui->labelYValue->setText(QString("%1").arg(yPos)); + } + break; + + case FUN_SECSETSTARTPOINT://第二机头定起始点 + { + if(m_curFilePath.length() <= 0) + { + return; + } + m_pMainWidgetFunction->funSecHeadSetStartPoint(m_curFilePath); + double xPos = g_pCurEmbData->getBeginX()*0.01; + ui->labelXValue->setText(QString("%1").arg(xPos)); + double yPos = g_pCurEmbData->getBeginY()*0.01; + ui->labelYValue->setText(QString("%1").arg(yPos)); + } + break; + + case FUN_SECSETANCHORPOINT://第二机头定定位点 + { + if(m_curFilePath.length() <= 0) + { + return; + } + m_pMainWidgetFunction->funSecHeadSetAnchorPoint(m_curFilePath); + } + break; + + case FUN_THRIDSETSTARTPOINT://第三机头定起始点 + { + if(m_curFilePath.length() <= 0) + { + return; + } + m_pMainWidgetFunction->funThrHeadSetStartPoint(m_curFilePath); + double xPos = g_pCurEmbData->getBeginX()*0.01; + ui->labelXValue->setText(QString("%1").arg(xPos)); + double yPos = g_pCurEmbData->getBeginY()*0.01; + ui->labelYValue->setText(QString("%1").arg(yPos)); + } + break; + + case FUN_THRIDSETANCHORPOINT://第三机头定定位点 + { + if(m_curFilePath.length() <= 0) + { + return; + } + m_pMainWidgetFunction->funThrHeadSetAnchorPoint(m_curFilePath); + } + break; + + case FUN_SEWEMBSPINDLETEST://平绣主轴研车 + m_pMainWidgetFunction->funEmbMsRun(); + break; + + case FUN_SEWEMBSPINDLEJOG://平绣点动 + m_pMainWidgetFunction->funEmbSpindleJog(); + break; + case FUN_SEWEMBCHANGECOLOR://平绣换色 + m_pMainWidgetFunction->funEmbManualChangeColor(); + break; + + case FUN_SEWEMBCUTLINE://平绣剪线 + m_pMainWidgetFunction->funEmbHeadCutLine(); + break; + + case FUN_BACKSTARTPOINT://回起始点 + m_pMainWidgetFunction-> funBackStartPoint(); + break; + + case FUN_CHECKFRAME://边框检查 + { + if(m_curFilePath.length() <= 0) + { + break; + } + g_pMachine->getParasFromMachine();//获取参数,为了获取可工作区域边界 + m_pMainWidgetFunction->funBorderCheck(); + } + break; + + case FUN_SEWHEADCUTLINEO://机头1剪线 + m_pMainWidgetFunction->funSewHeadCutLine(1); + break; + + case FUN_SEWHEADCUTLINET://机头2剪线 + m_pMainWidgetFunction->funSewHeadCutLine(2); + break; + + case FUN_FORWARDORBACK://前进回退 + funForwardOrBack(); + break; + + case FUN_PROCESSRESET://流程复位 + m_pMainWidgetFunction->funProcessReset(); + break; + + case FUN_PATTERNSELECT://花样选择 + patternSelect(); + break; + + case FUN_PUNCHSPINDLEJOG://冲孔主轴点动 + m_pMainWidgetFunction->funPunchSpindleJog(); + break; + + case FUN_PUNCHMANUALCHANGECOLOR://冲孔手动换色 + m_pMainWidgetFunction->funPunchManualChangeColor(); + break; + + case FUN_PUNCHNEEDLEZERO://冲孔换杆归零 + m_pMainWidgetFunction->funPunchRodZero(); + break; + + case FUN_SINGLEPUNCH://单次冲孔 + m_pMainWidgetFunction->funSinglePunch(); + break; + + case FUN_FRAMEZERO://框架归零 + m_pMainWidgetFunction->funGotoZeroPos(); + break; + + case FUN_MOVETORIGHTUP://去右上角 + m_pMainWidgetFunction->funGotoGorner(1); + break; + + case FUN_MOVETORIGHTDOWN://去右下角 + m_pMainWidgetFunction->funGotoGorner(2); + break; + + case FUN_MOVETOLEFTUP://去左上角 + + m_pMainWidgetFunction->funGotoGorner(3); + break; + + case FUN_MOVETOLEFTDOWN://去左下角 + m_pMainWidgetFunction->funGotoGorner(4); + break; + + case FUN_SETWORKRANGE://定工作范围 + m_pMainWidgetFunction->funSetWorkRange(); + break; + + case FUN_TESTPOTENTIOMETER:// 测试电位器 + m_pMainWidgetFunction->funTestADC(); + break; + + case FUN_PUNCHSTOPLOWER://冲头停下位 + m_pMainWidgetFunction->funPunchMsDown(); + break; + + case FUN_DRAWOUTLINE://画轮廓线 + m_pMainWidgetFunction->funDrawOutline(); + break; + + case FUN_AUTOSETSTARTPOINT://自动定起始点 + { + if(m_curFilePath.length() <= 0) + { + return; + } + m_pMainWidgetFunction->funAutoSetStartPoint(m_curFilePath); + } + break; + + case FUN_OILSUPPLY://连续供油 + m_pMainWidgetFunction->funContinuousOilSupply(); + break; + + case FUN_PUNCH_ROT_TO_ZERO://冲孔旋转去零位 + m_pMainWidgetFunction->funPunchRotToZero(); + break; + + case FUN_ROTATECOMPENSATE://旋转补偿 + if(m_pRotaComWi != NULL) + { + m_pRotaComWi->show(); + } + break; + + case FUN_SEWSPINDLEJOG://缝纫主轴点动 + m_pMainWidgetFunction->funSewSpindleJog(); + break; + + case FUN_SEWHOOKPOSITION://缝纫主轴去勾线位 + m_pMainWidgetFunction->funToHookPosition(); + break; + + case FUN_EMBHOOKPOSITION://平绣主轴去勾线位 + m_pMainWidgetFunction->funEmbToHookPosition(); + break; + + case FUN_ROTATEPROOFREAD://缝纫旋转校对 + m_pMainWidgetFunction->funRotateProofread(); + break; + + case FUN_SEWSPINDLETEST://缝纫主轴研车 + m_pMainWidgetFunction->funSewMsRun(); + break; + + case FUN_SEWMOTORUPDOWN://缝纫机头升降 + m_pMainWidgetFunction->funSewheadUpDown(); + break; + + case FUN_SELECTSEWHEAD://切换缝纫机头 + m_pMainWidgetFunction->switchMachineHead(1); + break; + + case FUN_NEEDLECONTRAST://针梭校对 + m_pMainWidgetFunction->funNeedleContrast(0); + break; + + case FUN_BACKSHUTTLEPOS://回换梭位 + m_pMainWidgetFunction->funBackShuttlePos(); + break; + + case FUN_NEEDLESHUTTLERESET://针梭复位 + m_pMainWidgetFunction->funNeedleContrast(4); + break; + + case FUN_NEEDLERESET://针复位 + m_pMainWidgetFunction->funNeedleContrast(3); + break; + + case FUN_SHUTTLERESET://梭复位 + m_pMainWidgetFunction->funNeedleContrast(2); + break; + + case FUN_SEWROTATEUP://缝纫旋转+ + m_pMainWidgetFunction->funSewRotate(1); + break; + + case FUN_SEWROTATEDOWN://缝纫旋转- + m_pMainWidgetFunction->funSewRotate(2); + break; + + case FUN_SELECTPUCNHHEAD://切换冲孔机头 + m_pMainWidgetFunction->switchMachineHead(2); + break; + + case FUN_SELECTEMBHEAD://切换平绣机头 + m_pMainWidgetFunction->switchMachineHead(3); + break; + + case FUN_RESETALL://全部复位 + m_pMainWidgetFunction->funResetAll(); + break; + + case FUN_MOTORZEROING://电机归零 + m_pMainWidgetFunction->funMotorZeroing(); + break; + + case FUN_STATION1GLUING://工位1涂胶 + m_pMainWidgetFunction->funStationGluing(1); + break; + + case FUN_STATION2GLUING://工位2涂胶 + m_pMainWidgetFunction->funStationGluing(2); + break; + + case FUN_HEADUPDOWN://机头升降 + m_pMainWidgetFunction->funHeadUpDown(); + break; + + case FUN_TOSTATION1APOS://回工位1起始点 + m_pMainWidgetFunction->funToStationApos(1); + break; + + case FUN_TOSTATION2APOS://回工位2起始点 + m_pMainWidgetFunction->funToStationApos(2); + break; + + case FUN_TO_WAITTING_POS://回等料点 + m_pMainWidgetFunction->funToWaittingPos(); + break; + + case FUN_TO_REMOVE_GLUE_POS://回排胶点 + m_pMainWidgetFunction->funToRemoveGluePos(); + break; + + case FUN_REMOVE_GLUE_ONCE://排一次胶 + m_pMainWidgetFunction->funRemoveGlueOnce(); + break; + + case FUN_ADJUST_GLUE_HEGHT://校准胶管高度 + m_pMainWidgetFunction->funAdjustGlueHeight(); + break; + + case FUN_WORKPAUSE://暂停工作 + m_pMainWidgetFunction->funWorkPause(); + break; + + default: + break; + } +} + +//执行辅助按钮功能 +void MainWidget::runAssistBtnFunction(int funEnum,int idx) +{ + if(m_pMainWidgetFunction == NULL) + { + return; + } + + QString topImageName = m_assistItemList[idx].m_topImageName; + //加载按钮顶图图标 + QString tStyle = m_setControlStyle.getTopStyleSheet(topImageName); + + switch (funEnum) + { + case ASSIST_SENSOR://传感器信号 + { + if (m_pSensorInputWi != NULL) + { + //注释掉此行代码,因为获取位图下位机会返回全on的状态, + //会使传感器界面闪一下,在连接后读取了一下,这里不再读取 + //g_pMachine->getSensorEnBmpFromMachine(); + g_pMachine->entrySensorScan(); + + m_pSensorInputWi->setTypeLogo(tStyle); + m_pSensorInputWi->setMainTitle(tr("Sensor signal")); + m_pSensorInputWi->setSubTitle(tr("Auxiliary function > Sensor signal")); + m_pSensorInputWi->show(); + } + } + break; + + case ASSIST_CONTROLACTION://控制动作 + { + if (m_pControlActionWi != NULL) + { + m_pControlActionWi->setTypeLogo(tStyle); + m_pControlActionWi->setMainTitle(tr("Control action")); + m_pControlActionWi->setSubTitle(tr("Auxiliary function > Control action")); + + m_pControlActionWi->refreshUi(); + m_pControlActionWi->show(); + } + } + break; + + case ASSIST_HMIUPGRADE://界面升级 + { + if(g_emDebugMode == nodebugMode) + { + if(g_emUser != repair)//权限不够先登录 + { + m_pMainWidgetFunction->slotUserLogin(repair); + if(g_emUser != repair)//发送登录信号后,权限如果还没改变就返回 + return; + } + if(m_pMainWidgetFunction != NULL) + { + m_pMainWidgetFunction->funHMIUpgrade(tStyle); + } + } + else + { + if(m_pMainWidgetFunction != NULL) + { + m_pMainWidgetFunction->funHMIUpgrade(tStyle); + } + } + } + break; + + case ASSIST_MCUPGRADE://主控升级 + { + if(g_emUser != repair)//权限不够先登录 + { + m_pMainWidgetFunction->slotUserLogin(repair); + if(g_emUser != repair)//发送登录信号后,权限如果还没改变就返回 + return; + } + + if(m_pMainWidgetFunction != NULL) + { + m_pMainWidgetFunction->funMCUpgrade(tStyle); + } + } + break; + + case ASSIST_PARAIMPORT://参数导入 + { + if(g_emUser != repair)//权限不够先登录 + { + m_pMainWidgetFunction->slotUserLogin(repair); + if(g_emUser != repair)//发送登录信号后,权限如果还没改变就返回 + { + return;//就不执行下边的代码,不显示界面 + } + } + if(m_pMainWidgetFunction != NULL) + { + m_pMainWidgetFunction->funImportParameter(tStyle); + } + } + break; + + case ASSIST_PARAEXPORT://参数导出 + { + if(g_emUser != repair)//权限不够先登录 + { + m_pMainWidgetFunction->slotUserLogin(repair); + if(g_emUser != repair)//发送登录信号后,权限如果还没改变就返回 + { + return; + } + } + g_pMachine->getInfoFromMachine(); + if(m_pMainWidgetFunction != NULL) + { + m_pMainWidgetFunction->funExportParameter(); + } + } + break; + + case ASSIST_SOFTWARESET://软件设置 + { + m_pParameterSetDlg->setTypeLogo(tStyle); + m_pParameterSetDlg->setMainTitle(tr("Accessibility")); + m_pParameterSetDlg->setSubTitle(tr("Accessibility > Software setting")); + //软件设置参数 + m_pParameterSetDlg->setItemList(operate,PARA_TYPE_SOFTWARESET); + int language = g_pSettings->readFromIniFile("HMI/language").toInt(); + m_pParameterSetDlg->setItemValue(SET_LANGUAGE,language); //语言 + + // int connectMode = g_pSettings->readFromIniFile("HMI/connectMode").toInt(); + // m_pParameterSetDlg->setItemValue(SET_CONNECTMODE,connectMode); //连接通讯方式 + + m_pParameterSetDlg->exec(); + } + break; + + case ASSIST_AUTHORIZATION://软件授权 + { + m_pMainWidgetFunction->funSoftwareAuthor(); + } + break; + + case ASSIST_NETWORK://网络管理 + { + if(g_emUser != factory)//权限不够先登录 + { + m_pMainWidgetFunction->slotUserLogin(factory); + if(g_emUser != factory && g_emUser != root)//发送登录信号后,权限如果还没改变就返回 + { + return; + } + } + m_pParameterSetDlg->setTypeLogo(tStyle); + m_pParameterSetDlg->setMainTitle(tr("Accessibility")); + m_pParameterSetDlg->setSubTitle(tr("Accessibility > Network Manage")); + + //网络管理参数 + //添加相应主板数的IP参数 + m_pParameterSetDlg->setNetworkItemList(PARA_TYPE_NETWORKSET); + m_pParameterSetDlg->exec(); + } + break; + + case ASSIST_WIFI://WIFI管理 + { + if(m_pMainWidgetFunction != NULL) + { + m_pMainWidgetFunction->funWIFI(tStyle); + } + } + break; + + case ASSIST_NEEDLESET://针杆设置 + { + if(g_emDebugMode == nodebugMode) + { + if(g_emUser != repair)//权限不够先登录 + { + m_pMainWidgetFunction->slotUserLogin(repair); + if(g_emUser != repair)//发送登录信号后,权限如果还没改变就返回 + { + return; + } + } + m_pNeedleBarSetWi->setTypeLogo(tStyle); + m_pNeedleBarSetWi->setMainTitle(tr("Needle setting")); + m_pNeedleBarSetWi->setSubTitle(tr("Accessibility > Needle setting")); + m_pNeedleBarSetWi->refreshTypeBtnShow();//刷新右上方按钮的显示,包括选中状态 + m_pNeedleBarSetWi->initNeedleBar(); + m_pNeedleBarSetWi->show(); + } + else + { + m_pNeedleBarSetWi->setTypeLogo(tStyle); + m_pNeedleBarSetWi->setMainTitle(tr("Needle setting")); + m_pNeedleBarSetWi->setSubTitle(tr("Accessibility > Needle setting")); + m_pNeedleBarSetWi->refreshTypeBtnShow();//刷新右上方按钮的显示,包括选中状态 + m_pNeedleBarSetWi->initNeedleBar(); + m_pNeedleBarSetWi->show(); + } + } + break; + + case ASSIST_TIMESET://时间设置 + { + //得到当前时间 + QDateTime time; + time = QDateTime::currentDateTime();//获取系统现在的时间 + + QString yearStr = time.currentDateTime().toString("yyyy"); + QString monthStr = time.currentDateTime().toString("MM"); + QString dayStr = time.currentDateTime().toString("dd"); + QString hourStr = time.currentDateTime().toString("hh"); + QString minuteStr = time.currentDateTime().toString("mm"); + QString secondStr = time.currentDateTime().toString("ss"); + + m_pParameterSetDlg->setTypeLogo(tStyle); + m_pParameterSetDlg->setMainTitle(tr("Time setting")); + m_pParameterSetDlg->setSubTitle(tr("Accessibility > Time setting")); + //时间设置参数 + m_pParameterSetDlg->setItemList(operate,PARA_TYPE_TIMESET); + m_pParameterSetDlg->setItemValue(1,yearStr.toInt()); //年 + m_pParameterSetDlg->setItemValue(2,monthStr.toInt()); //月 + m_pParameterSetDlg->setItemValue(3,dayStr.toInt()); //日 + m_pParameterSetDlg->setItemValue(4,hourStr.toInt()); //时 + m_pParameterSetDlg->setItemValue(5,minuteStr.toInt()); //分 + m_pParameterSetDlg->setItemValue(6,secondStr.toInt()); //秒 + + m_pParameterSetDlg->exec(); + } + break; + + case ASSIST_SHORTCUTSET://常用设置 + { + m_pParameterSetDlg->setTypeLogo(tStyle); + m_pParameterSetDlg->setMainTitle(tr("Common functions setting")); + m_pParameterSetDlg->setSubTitle(tr("Accessibility > Common functions setting")); + //常用功能设置 + m_pParameterSetDlg->setItemList(operate,PARA_TYPE_COMMONFUN); + for(int i = 0; i < m_shortCutBtnList.size(); i++)//下方按钮 + { + //读取配置文件获取功能索引 + int commonBtnIdx = g_pSettings->readFromIniFile("HMI/commonbtn"+QString::number(i+1)).toInt(); + m_pParameterSetDlg->setItemValue(i+1,commonBtnIdx); + } + + if(m_pParameterSetDlg->exec() == 1)//点了 确认 + { + for(int i = 0; i < m_shortCutBtnList.size(); i++)//窗体下方的快捷按钮列表 + { + //将功能索引写入配置文件 + int commonBtnIdx = m_pParameterSetDlg->getItemValue(i+1); + g_pSettings->writeToIniFile("HMI/commonbtn"+QString::number(i+1),commonBtnIdx); + + //1920x1080分辨率下设置图标居中 + QPoint point; + point.setX(0); + point.setY(0); + + if(g_emResolut == resolution1910) + { + point.setX(5); + point.setY(5); + } + + if(commonBtnIdx == FUN_NULL)//无功能 + { + QString btnStyle = "buttonAddCommonFunctions"; + m_shortCutBtnList[i]->setShortCutTopImage(m_setControlStyle.getTopStyleSheet(btnStyle),point); + m_shortCutBtnList[i]->setVisible(true); + } + else + { + //设置常用功能按钮顶图图标 + QString btnStyle = getCommonBtnStyle(commonBtnIdx); + m_shortCutBtnList[i]->setShortCutTopImage(m_setControlStyle.getTopStyleSheet(btnStyle),point); + m_shortCutBtnList[i]->setVisible(true); + } + } + } + } + break; + + case ASSIST_PRODUCTSTATICS://生产统计 + { + int patternBreakLineNum = m_fileHead.breakLineParkNum;//花样断线停车次数 + m_pMainWidgetFunction->funProductStatistics(tStyle,m_curFilePath,patternBreakLineNum); + } + break; + + + case ASSIST_ERRORLOG://错误日志 + { + if(g_emDebugMode == nodebugMode) + { + if(g_emUser != repair)//权限不够先登录 + { + m_pMainWidgetFunction->slotUserLogin(repair); + if(g_emUser != repair)//发送登录信号后,权限如果还没改变就返回 + return; + } + if(m_pMainWidgetFunction != NULL) + { + m_pMainWidgetFunction->funJournalError(tStyle); + } + } + else + { + if(m_pMainWidgetFunction != NULL) + { + m_pMainWidgetFunction->funJournalError(tStyle); + } + } + } + break; + + case ASSIST_MCVERSION://N1版本信息 + { + g_pMachine->getInfoFromMachine(); + m_pMainWidgetFunction->funGetMCVersionInfo(); + } + break; + + case ASSIST_FACELINEDETECT://面线检测 + { + m_pMainWidgetFunction->funFaceDetect(); + } + break; + + case ASSIST_DEBUG: //调试功能 + ui->framePatternView->setVisible(false); + ui->frameShortcutBtn->setVisible(false); + ui->framePatternSet->setVisible(false); + ui->frameParaSet->setVisible(false); + ui->frameAccessFunction->setVisible(false); + ui->frameShortcutFunction->setVisible(false); + //设置按钮为非选中状态 + ui->buttonPatternSet->setChecked(false); + ui->buttonPatternSet->setCheckable(false); + ui->buttonParaSet->setChecked(false); + ui->buttonParaSet->setCheckable(false); + ui->buttonShortcutFunction->setChecked(false); + ui->buttonShortcutFunction->setCheckable(false); + ui->buttonMainMenu->setChecked(false); + ui->buttonMainMenu->setCheckable(false); + ui->frameMenuBack->setVisible(true); + ui->frameDebugFunction->setVisible(true); + + break; + + case ASSIST_ROOT://超级用户 + { + if(g_emDebugMode == nodebugMode) + { + if(g_emUser != factory && g_emUser != root)//超级用户 + { + m_pMainWidgetFunction->slotUserLogin(factory); + } + if(g_emUser == factory) + { + m_pParameterSetDlg->setTypeLogo(tStyle); + m_pParameterSetDlg->setMainTitle(tr("Root")); + m_pParameterSetDlg->setSubTitle(tr("Accessibility > Root")); + //超级用户参数 + m_pParameterSetDlg->setItemList(factory,PARA_TYPE_ROOT); + m_pParameterSetDlg->exec(); + } + else if (g_emUser == root) + { + m_pParameterSetDlg->setTypeLogo(tStyle); + m_pParameterSetDlg->setMainTitle(tr("Root")); + m_pParameterSetDlg->setSubTitle(tr("Accessibility > Root")); + //超级用户参数 + m_pParameterSetDlg->setItemList(root,PARA_TYPE_ROOT); + m_pParameterSetDlg->exec(); + } + } + else + { + m_pParameterSetDlg->setTypeLogo(tStyle); + m_pParameterSetDlg->setMainTitle(tr("Root")); + m_pParameterSetDlg->setSubTitle(tr("Accessibility > Root")); + //超级用户参数 + m_pParameterSetDlg->setItemList(root,PARA_TYPE_ROOT); + m_pParameterSetDlg->exec(); + } + } + break; + + case ASSIST_BOTTOMLINECOUNTRESET://底线计数复位 + { + if(m_pMainWidgetFunction != NULL) + { + m_pMainWidgetFunction->funBottomLineCountReset(); + } + } + break; + + case ASSIST_SHUTDOWN: //关机 + m_pMainWidgetFunction->funShutDown(); + break; + + default: + break; + } +} +void MainWidget::runDebugBtnFunction(int funEnum) +{ + if(m_pMainWidgetFunction == NULL) + { + return; + } + + switch (funEnum) + { + + case DEBUG_NEEDLESHUTTLE: // 缝纫针梭调试 + { + DialogNeedleShuttle dialogNeedleShuttle; + connect(g_pMachine, SIGNAL(siParaChange(int, int)), + &dialogNeedleShuttle, SLOT(paraChange(int, int)));// 参数改变 + dialogNeedleShuttle.setFunType(DialogNeedleShuttle::DEBUG_NEEDLESHUTTLE); + dialogNeedleShuttle.exec(); + } + break; + case DEBUG_TRIM: // 剪线调试 + { + DialogCutLine dialogCutLine; + connect(g_pMachine, SIGNAL(siParaChange(int, int)), + &dialogCutLine, SLOT(paraChange(int, int)));// 参数改变 + dialogCutLine.setFunType(DialogCutLine::DEBUG_TRIM); + dialogCutLine.exec(); + } + break; + case DEBUG_DIECUTTER: // 冲刀调试 + { + DialogDieCutter dialogDieCutter; + dialogDieCutter.setFunType(DialogDieCutter::DEBUG_DIECUTTER); + dialogDieCutter.exec(); + } + break; + default: + break; + } +} +//执行花样设置按钮功能 +void MainWidget::runPatternSetBtnFunction(int funEnum, int idx) +{ + if(m_pMainWidgetFunction == NULL) + { + return; + } + + QString topImageName = m_patternSetItemList[idx].m_topImageName; + //加载按钮顶图图标 + QString tStyle = m_setControlStyle.getTopStyleSheet(topImageName); + + switch (funEnum) + { + case PATTERNSET_PATTERNSELECT://花样选择 + patternSelect(); + break; + + case PATTERNSET_PATTERNSELECT_STATION1://工位1花样选择 + patternSelect(1); + break; + + case PATTERNSET_PATTERNSELECT_STATION2://工位2花样选择 + patternSelect(2); + break; + + case PATTERNSET_PATTERNPARA://花样参数 + //showPatternPreview(); + slotShowPatternPara(m_curFilePath); + break; + + case PATTERNSET_PATTERNCOLOR://花样色序 + patternColorSet(); + break; + + case PATTERNSET_PATTERNCOLOR_HEADHIGHT://机头高度 + patternColorSetHeadHight(); + break; + + case PATTERNSET_PATTERNIMPORT://花样导入 + { + m_pPatternManageWi->setTypeLogo(tStyle); + m_pPatternManageWi->setMainTitle(tr("Pattern import")); + m_pPatternManageWi->setSubTitle(tr("Pattern setting > Pattern import")); + + PatternManageWidget::MANAGE_MODE mode = PatternManageWidget::MANAGE_IMPORT; + + QSize size = m_pPatternSelectWi->getImageSize(); + m_pPatternManageWi->setImportImageSize(size); + m_pPatternManageWi->patternManage(mode); + } + break; + + case PATTERNSET_PATTERNEXPORT://花样导出 + { + m_pPatternManageWi->setTypeLogo(tStyle); + m_pPatternManageWi->setMainTitle(tr("Pattern export")); + m_pPatternManageWi->setSubTitle(tr("Pattern setting > Pattern export")); + + PatternManageWidget::MANAGE_MODE mode = PatternManageWidget::MANAGE_EXPORT; + m_pPatternManageWi->patternManage(mode); + } + break; + + case PATTERNSET_PATTERNDELETE://花样删除 + { + if(g_emUser != repair)//权限不够先登录 + { + m_pMainWidgetFunction->slotUserLogin(repair); + if(g_emUser != repair)//发送登录信号后,权限如果还没改变就返回 + { + return; + } + } + m_pPatternManageWi->setTypeLogo(tStyle); + m_pPatternManageWi->setMainTitle(tr("Pattern delete")); + m_pPatternManageWi->setSubTitle(tr("Pattern setting > Pattern delete")); + + PatternManageWidget::MANAGE_MODE mode = PatternManageWidget::MANAGE_DELETE; + m_pPatternManageWi->patternManage(mode); + } + break; + + default: + break; + } + +} + +//等待超时 +void MainWidget::slotWaitTimout() +{ + m_timoutflag = 1; +} + +//机器状态 +void MainWidget::slotMachineStatus(int toggle) +{ + memcpy(&m_mcStatus, &g_pMachine->getMcStatus(), sizeof(MCStatus)); + + if(m_pMainWidgetFunction != NULL) + { + //收到主控发的机器状态改变的信号,进到这个槽函数里(在MainWidgetFunction.cpp里用于读取电位器值) + m_pMainWidgetFunction->setMcStates(m_mcStatus); + } + m_conFlag = toggle; + + if(m_pParameterSetDlg != NULL) + { + //将机器状态发给参数设置界面(用于刷新遍历状态) + //m_pParameterSetDlg->setMcStates(m_mcStatus); + } + + showExecInfo();//显示机器运行状态中的信息 + + //工作状态,工作中按钮不可按,并显示大图 + if(m_workStatus != m_mcStatus.workStatus) + { + m_workStatus = m_mcStatus.workStatus; + + if ((m_workStatus & WORK_STA_SIMULATE) == WORK_STA_SIMULATE) //模拟工作 + { + ui->labelWorkState->setStyleSheet(m_setControlStyle.getStyleSheet(ui->labelWorkState->objectName())); + ui->buttonNineBtn3->setBlueBorderBottomStyle(); + ui->buttonNineBtn3->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn3->objectName()+"Simulate")); + ui->labelWorkState->setVisible(true); + } + else //正常工作 + { + ui->buttonNineBtn3->setBlueBorderBottomStyle(); + ui->buttonNineBtn3->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn3->objectName())); + ui->labelWorkState->setVisible(false); + } + + if ((m_workStatus & WORK_STA_ENSTATE) == WORK_STA_ENSTATE) //允许状态 + { + ui->buttonNineBtn2->setBlueBorderBottomStyle(); + ui->buttonNineBtn2->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn2->objectName())); + ui->labelEnableWorkState->setVisible(false); + } + else //正常工作 + { + //禁止工作 + ui->labelEnableWorkState->setStyleSheet(m_setControlStyle.getStyleSheet(ui->labelEnableWorkState->objectName())); + ui->buttonNineBtn2->setBlueBorderBottomStyle(); + ui->buttonNineBtn2->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn2->objectName()+"NoAllow")); + ui->labelEnableWorkState->setVisible(true); + } + + //正在工作,按钮不可按 + if((m_workStatus & WORK_STA_WORKING) == WORK_STA_WORKING) + { + ui->buttonNineBtn4->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn4->objectName()+"Unlock")); + setUiBtnEnable(false); + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet(ui->frameNineBtn->objectName()+"Disable")); + + ui->frameForwardBack->setVisible(false); + //工作状态中, + if(!ui->labelPatternView->isVisible())//不是主图灰图界面 + { + hideMenuFrame();//隐藏菜单栏 + showPatternPreview();//显示花样显示页面 + ui->buttonMainMenu->setCheckable(true); + ui->buttonMainMenu->setChecked(true); + } + //如果工作中错误提示窗体显示,则自动消失 + m_pMainWidgetFunction->funSetPromptDlgVisibleFalse(); + } + else + { + ui->buttonNineBtn4->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn4->objectName())); + setUiBtnEnable(true); + + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet(ui->frameNineBtn->objectName())); + } + } + + //错误代码 + if (m_mcStatus.errorCode == 0) + { + m_errorCode = m_mcStatus.errorCode; + ui->labelState->setText(tr("Ready"));//状态:已就绪 + if((m_workStatus & WORK_STA_WORKING) == WORK_STA_WORKING) + { + ui->labelState->setText(tr("Working"));//状态: 工作中 + } + } + else + { + u32 errcode = m_mcStatus.errorCode; + if(errcode != m_errorCode) + { + m_errorCode = errcode; + + QString info; + info.clear(); + info = getErrStr(m_mcStatus.errorCode); + //如果不是通用错误(即info为空),就从机型cpp中的错误代码查找 + if(info.length() <= 0) + { + for(int i = 0; i < m_errorCodeAndStateItemList.size(); i++) + { + if(m_mcStatus.errorCode == m_errorCodeAndStateItemList[i].m_code) + { + info = m_errorCodeAndStateItemList[i].m_name; + break; + } + } + } + //如果不是通用错误也不是机型cpp中的错误代码,就显示未定义错误 + if(info.length() <= 0) + { + QString errorCode; + errorCode.sprintf("CODE 0x%x", m_mcStatus.errorCode); + info.append(tr("Undefined error,") + errorCode);//未定义错误, + } + + ui->labelState->setText(info);//状态: + + if ((errcode > 0 && errcode < 0x100) || errcode > 0x200) + { + m_pMainWidgetFunction->funErrorPrompt(errcode,info); + //将报错代码写入csv + g_pSettings->writeToCsv(info,TYPE_ERROR);//保存 + } + } + } + + //等于压胶机 + if(g_emMacType == MACHINE_ADHESIVE) + { + if (m_fileIdx != m_mcStatus.fileIdx) // 文件序号不一样的时候 + { + m_fileIdx = m_mcStatus.fileIdx ; + + if(m_fileIdx == 1) + { + m_curFilePath = g_pSettings->readFromIniFile("Pattern/station1").toString(); + slotShowPatternPara(m_curFilePath,-1);//不显示花样设置窗体,直接加载花样参数 + } + else if(m_fileIdx == 2) + { + m_curFilePath = g_pSettings->readFromIniFile("Pattern/station2").toString(); + slotShowPatternPara(m_curFilePath,-1);//不显示花样设置窗体,直接加载花样参数 + } + else if(m_fileIdx == 0) + { + qDebug() <<"m_fileIdx" <buttonWifi->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonWifi->objectName()+"Connect")); + } + else + { + ui->buttonWifi->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonWifi->objectName()+"Unconnect")); + } +} + +void MainWidget::slotShowPatternPara(QString filePath,s16 showFlag) +{ + QString beforeFilePath = m_curFilePath; + m_curFilePath = filePath; + if(m_curFilePath.length() <= 0){return;} + QFile file(m_curFilePath); + if(!file.exists()){return;}//文件不存在 + + //获得花样参数的图标 + QString tStyle; + for(int i = 0; i < m_patternSetItemList.size(); i++) + { + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNPARA) + { + QString topImageName = m_patternSetItemList[i].m_topImageName; + //加载按钮顶图图标 + tStyle = m_setControlStyle.getTopStyleSheet(topImageName); + break; + } + } + + m_pParameterSetDlg->setTypeLogo(tStyle); + m_pParameterSetDlg->setMainTitle(tr("Pattern para"));//花样参数 + m_pParameterSetDlg->setSubTitle(tr("Pattern setting > Pattern para"));// 花样设置 > 花样参数 + //绣花花样参数-花样设置参数 + m_pParameterSetDlg->setItemList(operate,PARA_TYPE_PATTERN); + + //得到花样参数 + DataFileHead fileHead; + memset(&fileHead,0,sizeof(DataFileHead)); + memset(fileHead.switchTable,0,sizeof(fileHead.switchTable)); + memset(m_fileColorTable,0,sizeof(m_fileColorTable)); + + m_pMainWidgetFunction->getPatternHeadConfig(filePath,fileHead); + memcpy(m_fileHead.switchTable,fileHead.switchTable,sizeof(fileHead.switchTable)); + + //int size = sizeof(m_fileHead); + + //起始点和定位点 + QFileInfo fileInfo(m_curFilePath); + QString ext = fileInfo.suffix().toUpper(); + int beginX,beginY,anchorX,anchorY; + beginX = beginY = 0; + + if(ext == "DST")//dst文件 + { + DataFileDst dst; + dst.getBeginXYAndAnchorXY(m_curFilePath,beginX,beginY,anchorX,anchorY); + } + else if(ext == "DSR")//dsr文件 + { + DataFileDsr dsr; + dsr.getBeginXYAndAnchorXY(m_curFilePath,beginX,beginY,anchorX,anchorY); + } + else + { + return; + } + + //等于垫板冲孔机-自动定位 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS ) + { + //行程矫正 + if(g_pSettings->readFromIniFile("AUFUS/zeroXcoordinate").toInt() - beginX >= 0) + { + fileHead.beginX = g_pSettings->readFromIniFile("AUFUS/zeroXcoordinate").toInt() - beginX; + } + else + { + fileHead.beginX = beginX; + } + fileHead.beginY = beginY; + fileHead.anchorX = anchorX; + fileHead.anchorY = anchorY; + } + + if(g_emMacType == MACHINE_ADHESIVE || g_emMacType == MACHINE_PUNCH) + { + m_pParameterSetDlg->setItemValue(SET_STARTX,fileHead.beginX); //起始点x + m_pParameterSetDlg->setItemValue(SET_STARTY,fileHead.beginY); //起始点y + } + else if(g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + m_pParameterSetDlg->setItemValue(SET_STARTX,fileHead.beginX); //起始点x + m_pParameterSetDlg->setItemValue(SET_STARTY,fileHead.beginY); //起始点y + m_pParameterSetDlg->setItemValue(SET_ANCHORX,fileHead.anchorX); //定位点x + m_pParameterSetDlg->setItemValue(SET_ANCHORY,fileHead.anchorY); //定位点y + m_pParameterSetDlg->setItemValue(SET_CONTINURUNCOMP,fileHead.continuRunComp); //连续动框补偿 + m_pParameterSetDlg->setItemValue(SET_NEEDLETIPCOMP,fileHead.needleTipComp); //针尖补偿 + } + + m_pParameterSetDlg->setItemValue(SET_ROTATESTYLE,fileHead.rotateStyle); //旋转式样 + m_pParameterSetDlg->setItemValue(SET_HORIZONTALSTYLE,fileHead.horizontalStyle); //水平翻转式样 + m_pParameterSetDlg->setItemValue(SET_VERTICALSTYLE,fileHead.verticalStyle); //垂直翻转式样 + m_pParameterSetDlg->setItemValue(SET_ROTATEANGLE,fileHead.rotateAngle); //旋转角度 + m_pParameterSetDlg->setItemValue(SET_SPLITSTITCHLENGTH,fileHead.stitchSplitLength); //需要分割针步的长度 + + m_pParameterSetDlg->setCurPage(1); + + s16 value = 0; + if(showFlag != 0)//不显示此窗体直接加载花样参数(适用于开机自动加载花样文件) + { + value = 1; + } + else //显示此窗体 + { + value = m_pParameterSetDlg->exec(); + m_pPatternSelectWi->hide(); + } + + if(value == 1)//花样参数设置(点击了确定按钮或直接加载文件后加载花样参数) + { + memcpy(&m_fileHead,&fileHead,sizeof(DataFileHead)); + + //等于压胶机 + if(g_emMacType == MACHINE_ADHESIVE) + { + if(m_patternSelectStation == 1) + { + g_pSettings->writeToIniFile("Pattern/station1",filePath); + } + else if(m_patternSelectStation == 2) + { + g_pSettings->writeToIniFile("Pattern/station2",filePath); + } + } + + //有花样时花样参数可按 + for(int i = 0; i < m_patternSetItemList.size(); i++) + { + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNPARA || + m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNCOLOR || + m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNCOLOR_HEADHIGHT) + { + m_patternSetBtnList[i]->setEnabled(true); + } + } + + //文件头花样参数 + m_fileHead.rotateStyle = m_pParameterSetDlg->getItemValue(SET_ROTATESTYLE); //旋转式样 + m_fileHead.horizontalStyle = m_pParameterSetDlg->getItemValue(SET_HORIZONTALSTYLE); //水平翻转式样 + m_fileHead.verticalStyle = m_pParameterSetDlg->getItemValue(SET_VERTICALSTYLE); //垂直翻转式样 + m_fileHead.rotateAngle = m_pParameterSetDlg->getItemValue(SET_ROTATEANGLE); //旋转角度 + m_fileHead.stitchSplitLength = m_pParameterSetDlg->getItemValue(SET_SPLITSTITCHLENGTH); //需要分割针步的长度 + m_fileHead.continuRunComp = m_pParameterSetDlg->getItemValue(SET_CONTINURUNCOMP); //连续动框补偿 + m_fileHead.needleTipComp = m_pParameterSetDlg->getItemValue(SET_NEEDLETIPCOMP); //针尖补偿 + + s32 begX,begY,anchorX,anchorY; + begX = begY = anchorX = anchorY = 0; + + begX = m_pParameterSetDlg->getItemValue(SET_STARTX); //起始点x + begY = m_pParameterSetDlg->getItemValue(SET_STARTY); //起始点y + anchorX = m_pParameterSetDlg->getItemValue(SET_ANCHORX); + anchorY = m_pParameterSetDlg->getItemValue(SET_ANCHORY); + + //等于压胶机等机型 + if(g_emMacType == MACHINE_ADHESIVE || g_emMacType == MACHINE_PUNCH || g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + if(m_fileHead.beginX != begX || m_fileHead.beginY != begY || m_fileHead.anchorX != anchorX || m_fileHead.anchorY != anchorY) + { + m_fileHead.beginX = begX; + m_fileHead.beginY = begY; + m_fileHead.anchorX = anchorX; + m_fileHead.anchorY = anchorY; + } + } + + slotSetPatternData();//设置花样数据并显示 + + //花版的定位点为绝对坐标数据点,起始点为相对于定位点的相对坐标点,第一针为相对于起始点的坐标点 + //有的花版起始点有偏移量,第一针偏移量为0,有的花版起始点偏移量为0,第一针有偏移量 + //所以ds16文件头定位点坐标就是花版中的定位点,起始点坐标为花版中的定位点坐标+起始点坐标+第一针的坐标,同时ds16数据的第一针坐标偏移应置为0 + //将起始点设置到ds16数据中-放在发送数据前 +// m_fileHead.beginX = m_fileHead.anchorX + m_fileHead.beginX + g_pCurEmbData->getBeginX(); +// m_fileHead.beginY = m_fileHead.anchorY + m_fileHead.beginY + g_pCurEmbData->getBeginY(); + m_pMainWidgetFunction->funSetStartPoint(filePath,m_fileHead.beginX,m_fileHead.beginY); + if(g_emMacType == MACHINE_PUNCH_SEW_EMB) + { + m_pMainWidgetFunction->funSetAnchorPoint(filePath,m_fileHead.anchorX,m_fileHead.anchorY); + } + double xPos = m_fileHead.beginX*0.01; + ui->labelXValue->setText(QString("%1").arg(xPos)); + double yPos = m_fileHead.beginY*0.01; + ui->labelYValue->setText(QString("%1").arg(yPos)); + + if(m_linkSta == Connected)//已连接 + { + m_pMainWidgetFunction->sendPatternData(m_curFilePath);//发送花样数据 + + //设置为按进度执行模式 + g_pCurEmbData->setExecIndex(m_curDatIdx); // 设置进度 + } + } + else + { + //点击取消按钮后花样路径恢复为上次选中的花样 + m_curFilePath = beforeFilePath; + } +} + +//删除文件后判断当前文件是否被删除 +void MainWidget::slotIfFileExist() +{ + if(m_curFilePath.length() > 0)//当前选择的花样路径 + { + QFile file(m_curFilePath); + if(!file.exists())//不存在 + { + m_curFilePath.clear(); + + //花样参数可按 + for(int i = 0; i < m_patternSetItemList.size(); i++) + { + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNPARA || + m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNCOLOR || + m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNCOLOR_HEADHIGHT) + { + m_patternSetBtnList[i]->setEnabled(false); + } + } + + ui->buttonNineBtn1->setEnabled(false); + + if(g_pMachine != NULL) + { + g_pMachine->invalidateWorkFile(); + } + } + } +} + +//花样导入替换文件,判断替换文件是否是当前所选的花样 +void MainWidget::slotReplacePattrn(QString path) +{ + QFileInfo file(m_curFilePath); + QFileInfo newfile(path); + QString pathPattern = file.fileName(); + QString newPathPattern = newfile.fileName(); + if(m_curFilePath.length() > 0)//当前选择的花样路径 + { + if(pathPattern == newPathPattern)//如果替换的花样等于当前选择的花样 + { + m_curFilePath.clear();//清空当前的花样,并重新选择 + + //花样参数不可按 + for(int i = 0; i < m_patternSetItemList.size(); i++) + { + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNPARA) + { + m_patternSetBtnList[i]->setEnabled(false); + } + } + + if(g_pMachine != NULL) + { + g_pMachine->invalidateWorkFile(); + } + } + } +} +void MainWidget::slotClearPatternFcg() +{ + if(m_curFilePath.length() > 0)//当前选择的花样路径 + { + m_curFilePath.clear(); + + //花样参数不可按 + for(int i = 0; i < m_patternSetItemList.size(); i++) + { + if(m_patternSetItemList[i].m_enumFunction == PATTERNSET_PATTERNPARA) + { + m_patternSetBtnList[i]->setEnabled(false); + } + } + + ui->buttonNineBtn1->setEnabled(false); + + if(g_pMachine != NULL) + { + g_pMachine->invalidateWorkFile(); + } + } +} + +void MainWidget::slotSetPatternData() +{ + if(m_curFilePath.length() <= 0)//当前选择的花样路径 + { + return; + } + QFile curfile(m_curFilePath); + if(!curfile.exists()) + { + return; + } + + if(m_pParameterSetDlg == NULL){return;} + + g_pCurEmbData->setViewInfo(m_embBackPix); + g_pCurEmbData->setDrawMode(EmbData::DRAW_VIEW);//非预览模式 + QFileInfo file(m_curFilePath); + QString ext = file.suffix().toUpper(); + ui->labelFilename->setText(file.fileName());//显示花样名 + g_pCurEmbData->clear();//清空当前选择的花样 + + if(ext == "DST")//dst文件 + { + DataFileDst dst; + dst.initFile(m_curFilePath); + dst.loadFile(); + dst.convertDataToAbs();//dsr 转换成中间数据 + g_pCurEmbData->setAbsDat(dst.getEmbAbsData()); + //等于垫板冲孔机-自动定位 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS ) + { + dst.getSwitchTable(m_fileColorTable); + + for(u32 i = 0 ; i < sizeof(m_fileColorTable)/sizeof(m_fileColorTable[0]) ; i++) + { + m_fileColorTable[i] = m_fileColorTable[i] + EMB_NEEDLE_NUM + 1; + } + + memset(m_fileHead.switchTable,0,sizeof(m_fileHead.switchTable)); + memcpy(m_fileHead.switchTable,m_fileColorTable,sizeof(m_fileColorTable)); + } + } + else if(ext == "DSR")//dsr文件 + { + DataFileDsr dsr; + dsr.initFile(m_curFilePath); + dsr.loadFile();//下载dsr的文件 + //花样参数点击了确认按钮 + dsr.convertDataToEmbAbs();// dsr转换为绝对数据(中间数据) + g_pCurEmbData->setAbsDat(dsr.getEmbAbsData());//得到转换后的绝对坐标数据 + //等于垫板冲孔机 + if(g_emMacType == MACHINE_PUNCH_AUTOPOS || g_emMacType == MACHINE_PUNCH_SEW) + { + int punchNum = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + dsr.getSwitchTable(m_fileColorTable); + + for(u32 i = 0 ; i < sizeof(m_fileColorTable)/sizeof(m_fileColorTable[0]) ; i++) + { + //冲缝机如果花版中色序大于冲孔针杆数,将此色序设置为缝纫色序 + //因为打版软件自带缝纫色序错误(与冲孔混用),在界面这样临时处理下,后续需要与打版软件商讨修改 + if(m_fileColorTable[i] >= punchNum) + { + m_fileColorTable[i] = EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM + 1; + } + else + { + m_fileColorTable[i] = m_fileColorTable[i] + EMB_NEEDLE_NUM + 1; + } + } + + memset(m_fileHead.switchTable,0,sizeof(m_fileHead.switchTable)); + memcpy(m_fileHead.switchTable,m_fileColorTable,sizeof(m_fileColorTable)); + } + } + else + { + return; + } + + g_pCurEmbData->appendAbsFile(m_curFilePath, g_pCurEmbData->getAbsDat());//生成文件信息 + g_pCurEmbData->getAbsDatRangeXY();//获得单个图元的宽高范围 + + int startMoveFlag = 0;//起始点是否移动的标志 + //旋转式样 + switch (m_fileHead.rotateStyle) + { + case 0: + break; + case 1: + g_pCurEmbData->setRotate(-90); + startMoveFlag = 1; + break; + case 2: + g_pCurEmbData->setRotate(-180); + startMoveFlag = 1; + break; + case 3: + g_pCurEmbData->setRotate(90); + startMoveFlag = 1; + break; + case 4: + g_pCurEmbData->setMirror(1); + startMoveFlag = 1; + break; + case 5: + g_pCurEmbData->setMirror(1); + g_pCurEmbData->setRotate(90); + startMoveFlag = 1; + break; + case 6: + g_pCurEmbData->setMirror(2); + startMoveFlag = 1; + break; + case 7: + g_pCurEmbData->setMirror(1); + g_pCurEmbData->setRotate(-90); + startMoveFlag = 1; + break; + } + + //水平翻转样式 + switch (m_fileHead.horizontalStyle) + { + case 0: + break; + case 1: + g_pCurEmbData->setMirror(1); + startMoveFlag = 1; + break; + } + + //垂直翻转样式 + switch (m_fileHead.verticalStyle) + { + case 0: + break; + case 1: + g_pCurEmbData->setMirror(2); + startMoveFlag = 1; + break; + } + + //旋转 + g_pCurEmbData->setRotate(0-m_fileHead.rotateAngle); + if(m_fileHead.rotateAngle != 0) + { + startMoveFlag = 1; + } + + if(g_emMacType != MACHINE_ADHESIVE && g_emMacType != MACHINE_PUNCH) + { + if(startMoveFlag == 1) + { + //变换之前的起始点和图形中心 + s32 bMaxX = g_pCurEmbData->m_maxX; + s32 bMinX = g_pCurEmbData->m_minX; + s32 bMaxY = g_pCurEmbData->m_maxY; + s32 bMinY = g_pCurEmbData->m_minY; + int bCenterX = (bMaxX + bMinX)/2; + int bCenterY = (bMaxY + bMinY)/2; + + g_pCurEmbData->getAbsDatRangeXY();//获得单个图元的宽高范围 + + //变换之后的起始点 + s32 eMaxX = g_pCurEmbData->m_maxX; + s32 eMinX = g_pCurEmbData->m_minX; + s32 eMaxY = g_pCurEmbData->m_maxY; + s32 eMinY = g_pCurEmbData->m_minY; + int eCenterX = (eMaxX + eMinX)/2; + int eCenterY = (eMaxY + eMinY)/2; + + int cx = eCenterX - bCenterX; + int cy = eCenterY - bCenterY; + + int eBeginX = m_fileHead.beginX - cx; + int eBeginY = m_fileHead.beginY - cy; + + m_fileHead.beginX = eBeginX; + m_fileHead.beginY = eBeginY; + } + } + //移动起始点 + + g_pCurEmbData->addContinuousRunCompensate(m_fileHead.continuRunComp);//连续动框补偿 + g_pCurEmbData->setNeedleTipCompensation(m_fileHead.needleTipComp);//针尖补偿 + g_pCurEmbData->setSplitStitchLength(m_fileHead.stitchSplitLength);//需要分割针步的针步长度 + + //保存参数配置 + m_pMainWidgetFunction->setPatternHeadConfig(m_curFilePath,m_fileHead);//打开fcg或者生成fcg文件,读取和写入 + + //qDebug()<<"resetAllData begin"; + resetAllData(); //显示全部花样区域 + //qDebug()<<"showPatternPreview begin"; + + //先转换为ds16数据,在把计算的fileid写回ds16 + //paraId 是计算fcg中数值,不存在fcg时,旋转式样这些是默认值 + u32 paraId = calcCrc16((u8*)(&m_fileHead.rotateStyle), + ((&m_fileHead.needleTipComp) - (&m_fileHead.rotateStyle) + 1)*sizeof(u16)); + u32 headFileId = g_pCurEmbData->getDsDatHead()->checkCrc + paraId;//ds16文件头的crc + paraId + g_pCurEmbData->setDsDatHeadFileID(headFileId); //将计算得到的fileid写回到数据区ds16 + qDebug()<<"headFileId"<setTypeLogo(tStyle); + m_pSheetWi->setMainTitle(tr("Frame angle setting"));//动框角度设置 + m_pSheetWi->setSubTitle(tr("Root > Frame angle setting"));//超级用户 > 动框角度设置 + m_pSheetWi->show(); + } +} + +void MainWidget::slotPunchManualChangeColor() +{ + if(m_pMainWidgetFunction != NULL) + { + m_pMainWidgetFunction->funPunchManualChangeColor(); + } +} + +//每十万针主界面加载图片的进度条走一格 +void MainWidget::slotChangeProgressBar(int value) +{ + ui->progressBar->setValue(value); +} + +//快捷功能中的快捷按钮被点击 +void MainWidget::slotQuickBtnClick() +{ + MyButton *button = (MyButton*) this->sender(); + + if(button == NULL) + { + return; + } + + //执行快捷按钮动作 + for(int i = 0; i < m_quickBtnList.size(); i++) + { + if(button == m_quickBtnList[i]) + { + int idx = (m_curPages-1)*m_itemPerPage+i; + int enumFun = m_quickItemList[idx].m_enumFunction; + runCommonBtnFunction(enumFun); + break; + } + } +} + +//界面下方的快捷按钮被点击 +void MainWidget::slotShortCutBtnClick() +{ + MyButton *button = (MyButton*) this->sender(); + + if(button == NULL) + { + return; + } + + //判断哪个快捷按钮被按下,获取功能索引并执行相关操作 + for(int i = 0; i < m_shortCutBtnList.size(); i++) + { + if(button == m_shortCutBtnList[i]) + { + int commonBtnIdx = g_pSettings->readFromIniFile("HMI/commonbtn"+QString::number(i+1)).toInt(); + runCommonBtnFunction(commonBtnIdx); + break; + } + } +} + +//辅助功能中的辅助功能按钮被点击 +void MainWidget::slotAssistBtnClick() +{ + MyButton *button = (MyButton*) this->sender(); + + if(button == NULL) + { + return; + } + + //执行快捷按钮动作 + for(int i = 0; i < m_assistBtnList.size(); i++) + { + if(button == m_assistBtnList[i]) + { + int idx = (m_curPages-1)*m_itemPerPage+i; + int enumFun = m_assistItemList[idx].m_enumFunction; + runAssistBtnFunction(enumFun,i); + break; + } + } +} + +//调试功能按钮被点击 +void MainWidget::slotDebugBtnClick() +{ + MyButton *button = (MyButton*) this->sender(); + + if(button == NULL) + { + return; + } + //执行调试按钮动作 + for(int i = 0; i < m_debugBtnList.size(); i++) + { + if(button == m_debugBtnList[i]) + { + int enumFun = m_debugItemList[i].m_enumFunction; + runDebugBtnFunction(enumFun); + break; + } + } +} + +//花样设置中的花样设置按钮被点击 +void MainWidget::slotPatternSetBtnClick() +{ + MyButton *button = (MyButton*) this->sender(); + + if(button == NULL) + { + return; + } + + //执行快捷按钮动作 + for(int i = 0; i < m_patternSetBtnList.size(); i++) + { + if(button == m_patternSetBtnList[i]) + { + int enumFun = m_patternSetItemList[i].m_enumFunction; + runPatternSetBtnFunction(enumFun,i); + break; + } + } +} + +//参数设置中的参数功能按钮被点击 +void MainWidget::slotParaTypeBtnClick() +{ +// if(g_emDebugMode == nodebugMode) +// { +// if(g_emUser != factory)//权限不够先登录 +// { +// m_pMainWidgetFunction->slotUserLogin(factory); +// if(g_emUser != factory)//发送登录信号后,权限如果还没改变就返回 +// return; +// } +// } + + MyButton *button = (MyButton*) this->sender(); + + if(button == NULL) + { + return; + } + + QString tStyle = m_setControlStyle.getTopStyleSheet(ui->buttonParaSet->objectName()); + + m_pParameterSetDlg->setTypeLogo(tStyle); + m_pParameterSetDlg->setMainTitle(tr("Parameter setting")); + + //执行快捷按钮动作 + for(int i = 0; i < m_paraSetBtnList.size(); i++) + { + if(button == m_paraSetBtnList[i]) + { + int paraType = m_paraSetItemList[i].m_paraType; + QString subStr; + int64_t sort = -1; + + switch (paraType) + { + case PARASET_POSITION: + subStr = tr("Position parameters");//位置参数 + sort = MC_SORT_POSITION; + break; + case PARASET_SPEED: + subStr = tr("Speed parameters");//速度参数 + sort = MC_SORT_SPEED; + break; + case PARASET_ACTION: + subStr = tr("Action parameters");//动作参数 + sort = MC_SORT_ACTION; + break; + case PARASET_DETECT: + subStr = tr("Detect parameters");//检测参数 + sort = MC_SORT_DETECT; + break; + case PARASET_SETTING: + subStr = tr("Setting parameters");//设置参数 + sort = MC_SORT_SETTING; + break; + case PARASET_WORK: + subStr = tr("Work parameters");//工作参数 + sort = MC_SORT_WORK; + break; + default: + subStr = tr("Parameter setting");//参数设置 + sort = -1; + break; + } + + m_pParameterSetDlg->setSubTitle(tr("Parameter setting > ") + subStr);//参数设置 > + //机器参数和工作参数 + m_pParameterSetDlg->setItemList(operate,PARA_TYPE_MACH|PARA_TYPE_WORK,sort); + m_pParameterSetDlg->exec(); + break; + } + } +} + +//设置超级用户图标 +void MainWidget::slotSetButtonRootLogo(int level) +{ + ui->buttonUser->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonUser->objectName()+QString::number(level))); +} + +//清空花版断线次数 +void MainWidget::slotClearPatternBreakLineNum() +{ + m_fileHead.breakLineParkNum = 0; +} + +//边框检查超限后重新定起始点 +void MainWidget::slotResetStartPos(DataFilePos pos) +{ + //ui->labelTitle->setText("receive signal"); + if(m_pMainWidgetFunction != NULL) + { + //ui->labelTitle->setText("receive before"); + m_pMainWidgetFunction->funResetStartPoint(m_curFilePath,pos); + //ui->labelTitle->setText("receive end"); + } +} + +void MainWidget::slotDebugState() +{ + if(g_emDebugMode == debugMode) + { + ui->labelTitle->setStyleSheet(LABELREDSTYLE); + } + else + { + ui->labelTitle->setStyleSheet(LABELWHITESTYLE); + } +} + +void MainWidget::slotCloseRootPara() +{ + g_emUser = operate; + m_pParameterSetDlg->done(0); +} + +void MainWidget::slotChangeColorTable(int selColor, int colorIdx) +{ + if(selColor < 0) + { + return; + } + + m_fileHead.switchTable[selColor] = colorIdx; +} + +void MainWidget::slotColorOrderChange() +{ + m_pMainWidgetFunction->setPatternHeadConfig(m_curFilePath,m_fileHead); + g_pCurEmbData->setDs16ColorOfTable(m_fileHead.switchTable); + g_pCurEmbData->setEmbData(); + refreshShowColorUi(); + m_pMainWidgetFunction->sendPatternHead(m_curFilePath);//发送头文件 +} + +void MainWidget::slotReSetData(QByteArray table) +{ + //工作模式设定取消后恢复未设置的模式表 + memcpy(m_fileHead.switchTable,table,sizeof(m_fileHead.switchTable)); +} + +void MainWidget::onRefreshPatternTimer() +{ + // 文件执行进度(当前针数) labelNeedleIdx + m_curDatIdx++; + reSetDatIdx(m_curDatIdx); + QPixmap patternPix = g_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); +} + +//1秒定时器 +void MainWidget::onOneSecondTimer() +{ + // 获取系统当前时间 + QDateTime dateTime = QDateTime::currentDateTime(); + ui->labelTime->setText(dateTime.toString("yyyy/MM/dd HH:mm:ss")); + refConnectUi(dateTime.time().second());//刷新连接 +} + +//5秒定时器 +void MainWidget::onFiveSecondTimer() +{ + if(m_conFlag == 0)//已连接 + { + + } + else + { + g_pMachine->setTcpConnectState(1);//将连接状态置为1 + } + m_conFlag = -1; +} + +void MainWidget::onTenMiniteTimer() +{ + s16 rel = m_pMainWidgetFunction->detectWifiConnect(); + if(rel > 0)//已连接 + { + ui->buttonWifi->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonWifi->objectName()+"Connect")); + } + else + { + ui->buttonWifi->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonWifi->objectName()+"Unconnect")); + } +} + +//1分钟定时器,记录当前系统时间,用于上电时 计算 关机时间 +void MainWidget::onOneMinTimer() +{ + // 获取系统当前时间 + QDateTime dateTime = QDateTime::currentDateTime(); + g_pSettings->writeToIniFile(("DateTime/second"),dateTime.toTime_t());//单位为秒 +#if(0) + //30天自动删除是只删除超过30天的记录 + //文件路径 + QDir apppath(qApp->applicationDirPath()); + QString csvfile; + csvfile = apppath.path() + apppath.separator() + CSV_FILEID; + //获取文件的创建时间 + QFileInfo info(csvfile); + qDebug() << info.size();//获取文件大小 + QDateTime dt = info.created();//获取文件创建时间 + int days = dt.daysTo(dateTime);//获取文件相对于当前时间的天数 + if (days >30) + { + QFile::remove(csvfile);//大于30天,删除这个文件 + } +#endif +} + +//刷新版本信息 +//刷新版本信息 +void MainWidget::onRefreshVer() +{ + //版本显示 + QString verStr = m_pMainWidgetFunction->getVersionStr(); + // verStr.sprintf("XPlatForm-RP-HMI-L1910-V%d.%02d.%02d", + // EMB_VER_CODE_Y, + // EMB_VER_CODE_M, + // EMB_VER_CODE_D); +#if(0) + QString boardVerStr; + MCInfo info1 = g_pMachine->getMcInfo(); + + char softwareVerStr[32+1];//软件版本 + memcpy(softwareVerStr, info1.softwareVerStr, 32); + softwareVerStr[32] = 0; + QString strBoardVer; + strBoardVer.sprintf("%s", softwareVerStr); + if(strBoardVer.length() > 6) + { + QString str1; + str1 = strBoardVer.right(6); + boardVerStr = "-DewMock-V" + str1; + } +#endif + ui->labelHMIVersion->setText(verStr);//界面版本: +} + +//主界面 +void MainWidget::on_buttonMainMenu_clicked() +{ + hideMenuFrame(); + showPatternPreview(); + ui->buttonMainMenu->setCheckable(true); + ui->buttonMainMenu->setChecked(true); +} + +//花样设置 +void MainWidget::on_buttonPatternSet_clicked() +{ + hideMenuFrame(); + ui->frameMenuBack->setVisible(true); + ui->framePatternSet->setVisible(true); + ui->buttonPatternSet->setCheckable(true); + ui->buttonPatternSet->setChecked(true); +} + +//参数设定按钮 +void MainWidget::on_buttonParaSet_clicked() +{ + if(g_emMacType == MACHINE_ADHESIVE) + { + if(g_emDebugMode == nodebugMode) + { + if(g_emUser != repair)//权限不够先登录 + { + m_pMainWidgetFunction->slotUserLogin(repair); + if(g_emUser != repair)//发送登录信号后,权限如果还没改变就返回 + { + return; + } + } + } + } + + s16 paraSort = g_pSettings->readFromIniFile("HMI/paraSort").toInt(); + + if(paraSort == 1)//分类显示参数 + { + hideMenuFrame(); + ui->frameMenuBack->setVisible(true); + ui->frameParaSet->setVisible(true); + ui->buttonParaSet->setCheckable(true); + ui->buttonParaSet->setChecked(true); + } + else if(paraSort == 0)//不分类显示参数 + { + showPatternPreview(); + + QString tStyle = m_setControlStyle.getTopStyleSheet(ui->buttonParaSet->objectName()); + + m_pParameterSetDlg->setTypeLogo(tStyle); + m_pParameterSetDlg->setMainTitle(tr("Parameter setting")); + m_pParameterSetDlg->setSubTitle(tr("Parameter setting > Parameter setting")); + //机器参数和工作参数 + m_pParameterSetDlg->setItemList(operate,PARA_TYPE_MACH|PARA_TYPE_WORK,MC_SORT_SETTING|MC_SORT_POSITION|MC_SORT_SPEED|MC_SORT_DETECT|MC_SORT_ACTION); + m_pParameterSetDlg->exec(); + } +} + +//快捷功能按钮 +void MainWidget::on_buttonShortcutFunction_clicked() +{ + m_curPages = 1; // 当前页 + hideMenuFrame(); + ui->frameMenuBack->setVisible(true); + ui->frameShortcutFunction->raise(); + ui->frameShortcutFunction->setVisible(true); + ui->buttonShortcutFunction->setCheckable(true); + ui->buttonShortcutFunction->setChecked(true); + if(m_quickItemList.size() > m_itemPerPage) + { + ui->buttonShortCutPgDn->setVisible(true); + ui->buttonShortCutPgUp->setVisible(true); + ui->labelShortCutPage->setVisible(true); + refreshPageUi(INTERFACE_SHORTCUT); + } +} + +//辅助功能按钮 +void MainWidget::on_buttonAccessFunction_clicked() +{ + m_curPages = 1; // 当前页 + hideMenuFrame(); + ui->frameMenuBack->setVisible(true); + ui->frameAccessFunction->setVisible(true); + ui->buttonAccessFunction->setCheckable(true); + ui->buttonAccessFunction->setChecked(true); + if(m_assistItemList.size() > m_itemPerPage) + { + ui->buttonAssistPgDn->setVisible(true); + ui->buttonAssistPgUp->setVisible(true); + ui->labelAssistPage->setVisible(true); + refreshPageUi(INTERFACE_ACCESS); + } +} + +//速度加 +void MainWidget::on_buttonSpeedAdd_clicked() +{ + if(g_pMachine != NULL) + { + int speed = 0; + if(m_speedLevel == 1) + { + speed = 10; + } + else if(m_speedLevel == 2) + { + speed = 50; + } + else if(m_speedLevel == 3) + { + speed = 100; + } + + g_pMachine->msRpmChange(speed,0); + } +} + +//速度减 +void MainWidget::on_buttonSpeedDec_clicked() +{ + if(g_pMachine != NULL) + { + int speed = 0; + if(m_speedLevel == 1) + { + speed = -10; + } + else if(m_speedLevel == 2) + { + speed = -50; + } + else if(m_speedLevel == 3) + { + speed = -100; + } + + g_pMachine->msRpmChange(speed,0); + } +} + +void MainWidget::on_buttonNineBtnUp_pressed() +{ + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet("frameNineBtnUp")); + if(g_pMachine != NULL) + { + g_pMachine->manualAction(XY_MOVE_FRONT, m_speedLevel); + } +} + +void MainWidget::on_buttonNineBtnUp_released() +{ + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet(ui->frameNineBtn->objectName())); + setFrameNineBtnStyle(); + if(g_pMachine != NULL) + { + g_pMachine->motoMove(XY_MOVE_FRONT, MT_MOVE_DIR_STOP, 0); + } +} + +void MainWidget::on_buttonNineBtnDown_pressed() +{ + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet("frameNineBtnDown")); + if(g_pMachine != NULL) + { + g_pMachine->manualAction(XY_MOVE_BACK, m_speedLevel); + } +} + +void MainWidget::on_buttonNineBtnDown_released() +{ + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet(ui->frameNineBtn->objectName())); + setFrameNineBtnStyle(); + if(g_pMachine != NULL) + { + g_pMachine->motoMove(XY_MOVE_BACK, MT_MOVE_DIR_STOP, 0); + } +} + +void MainWidget::on_buttonNineBtnLeft_pressed() +{ + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet("frameNineBtnLeft")); + if(g_pMachine != NULL) + { + g_pMachine->manualAction(XY_MOVE_LEFT, m_speedLevel); + } +} + +void MainWidget::on_buttonNineBtnLeft_released() +{ + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet(ui->frameNineBtn->objectName())); + setFrameNineBtnStyle(); + if(g_pMachine != NULL) + { + g_pMachine->motoMove(XY_MOVE_LEFT, MT_MOVE_DIR_STOP, 0); + } +} + +void MainWidget::on_buttonNineBtnRight_pressed() +{ + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet("frameNineBtnRight")); + if(g_pMachine != NULL) + { + g_pMachine->manualAction(XY_MOVE_RIGHT, m_speedLevel); + } +} + +void MainWidget::on_buttonNineBtnRight_released() +{ + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet(ui->frameNineBtn->objectName())); + setFrameNineBtnStyle(); + if(g_pMachine != NULL) + { + g_pMachine->motoMove(XY_MOVE_RIGHT, MT_MOVE_DIR_STOP, 0); + } +} + +void MainWidget::on_buttonNineBtnMiddle_pressed() +{ + m_speedLevel = m_speedLevel + 1; + if(m_speedLevel > 3) + { + m_speedLevel = 1; + } + + if(g_emMacType == MACHINE_PUNCH_SEW || + g_emMacType == MACHINE_ADHESIVE || + g_emMacType == MACHINE_PUNCH_AUTOPOS) + { + emit siSpeedLevel(m_speedLevel); + } + + bool cVal = ui->frameShortcutBtn->isEnabled();//按钮是否失能,是否锁界面 + + if(cVal == true) + { + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet("frameNineBtnMiddle")); + } +} + +void MainWidget::on_buttonNineBtnMiddle_released() +{ + bool cVal = ui->frameShortcutBtn->isEnabled();//按钮是否失能,是否锁界面 + + if(cVal == true) + { + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet(ui->frameNineBtn->objectName())); + } + + setFrameNineBtnStyle(); +} + +//前进回退 +void MainWidget::on_buttonNineBtn1_clicked() +{ + funForwardOrBack(); +} + +//锁针功能 +void MainWidget::on_buttonNineBtn2_clicked() +{ + if(g_pMachine != NULL) + { + if ((m_mcStatus.workStatus & WORK_STA_ENSTATE) == WORK_STA_ENSTATE) //允许状态 + { + //禁止工作 + g_pMachine->setDisableWorkSta(); + } + else //禁止状态 + { + //允许工作 + g_pMachine->setEnableWorkSta(); + } + } +} + +//工作状态切换 +void MainWidget::on_buttonNineBtn3_clicked() +{ + //m_pRefreshPatternTimer->start();//测试花样实时刷新的定时器启动 + + if(g_pMachine != NULL) + { + if ((m_mcStatus.workStatus & WORK_STA_SIMULATE) == WORK_STA_SIMULATE) //模拟工作 + { + //正常工作 + g_pMachine->setNormalWork(); + } + else //正常工作 + { + //模拟工作 + g_pMachine->setSimulateWork(); + } + } +} + +//锁界面 +void MainWidget::on_buttonNineBtn4_clicked() +{ + hideMenuFrame(); + showPatternPreview(); + ui->buttonMainMenu->setCheckable(true); + ui->buttonMainMenu->setChecked(true); + + bool cVal = ui->frameShortcutBtn->isEnabled();//按钮是否失能,是否锁界面 + + if(cVal == true) + { + ui->buttonNineBtn4->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn4->objectName()+"Unlock")); + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet(ui->frameNineBtn->objectName()+"Disable")); + setUiBtnEnable(false); + } + else + { + ui->buttonNineBtn4->setTopImage(m_setControlStyle.getTopStyleSheet(ui->buttonNineBtn4->objectName())); + ui->frameNineBtn->setStyleSheet(m_setControlStyle.getBorderImageStyleSheet(ui->frameNineBtn->objectName())); + setUiBtnEnable(true); + } + + if(m_dispMode != EmbData::DISP_EXECING)//不是执行状态 + { + g_pCurEmbData->setViewInfo(m_embBackPix);//带背景图的背景 + g_pCurEmbData->setEmbData();//ds16数据转换为画图数据 + + m_dispMode = EmbData::DISP_ALL_EXEC; + g_pCurEmbData->setDispMode(m_dispMode, 1); // 重新画图 + + m_dispMode = EmbData::DISP_EXECING; // 设置为执行模式 + g_pCurEmbData->setDispMode(m_dispMode, 0); // 设置为按进度执行模式 + g_pCurEmbData->setExecIndex(m_curDatIdx); // 设置进度 + + QPixmap patternPix = g_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); + } +} + +//花样参数的快捷按钮 +void MainWidget::on_buttonPatternInfo_clicked() +{ + if(m_curFilePath.length() <= 0) + { + return; + } + + showPatternPreview(); + slotShowPatternPara(m_curFilePath); +} + +void MainWidget::on_buttonNeedleBegin_clicked() +{ + m_forwardBackNeedleIdx = 0; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleEnd_clicked() +{ + m_forwardBackNeedleIdx = g_pCurEmbData->getStitchNums(); //总针数 + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleDec1_clicked() +{ + m_forwardBackNeedleIdx = m_forwardBackNeedleIdx - 1; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleAdd1_clicked() +{ + m_forwardBackNeedleIdx = m_forwardBackNeedleIdx + 1; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleDec10_clicked() +{ + m_forwardBackNeedleIdx = m_forwardBackNeedleIdx - 10; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleAdd10_clicked() +{ + m_forwardBackNeedleIdx = m_forwardBackNeedleIdx + 10; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleDec100_clicked() +{ + m_forwardBackNeedleIdx = m_forwardBackNeedleIdx - 100; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleAdd100_clicked() +{ + m_forwardBackNeedleIdx = m_forwardBackNeedleIdx + 100; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleDec1000_clicked() +{ + m_forwardBackNeedleIdx = m_forwardBackNeedleIdx - 1000; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleAdd1000_clicked() +{ + m_forwardBackNeedleIdx = m_forwardBackNeedleIdx + 1000; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleDec10000_clicked() +{ + m_forwardBackNeedleIdx = m_forwardBackNeedleIdx - 10000; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonNeedleAdd10000_clicked() +{ + m_forwardBackNeedleIdx = m_forwardBackNeedleIdx + 10000; + addOrDecNeedleIdx(m_forwardBackNeedleIdx); +} + +void MainWidget::on_buttonForwardBackOk_clicked() +{ + if ((m_mcStatus.workStatus & WORK_STA_BUSY) != 0) // 下位机在执行动作 + { + return; + } + + //g_pMachine->setFileExecProgress(0, m_curFileID, m_expara); + g_pMachine->fastJump(m_expara.newIdx);//前进回退 + ui->frameForwardBack->setVisible(false); + setUiBtnEnable(true); + ui->buttonMainMenu->setCheckable(true); + ui->buttonMainMenu->setChecked(true); +} + +void MainWidget::on_buttonForwardBackCancel_clicked() +{ + g_pCurEmbData->setExecIndex(m_curDatIdx);// 更新针数 + + QPixmap patternPix = g_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); + + ui->frameForwardBack->setVisible(false); + setUiBtnEnable(true); + ui->buttonMainMenu->setCheckable(true); + ui->buttonMainMenu->setChecked(true); +} + +//退出登录 +void MainWidget::on_buttonUser_clicked() +{ + //退回到无密码的普通用户 + if(g_emUser == repair || g_emUser == factory || g_emUser == root) + { + m_pMainWidgetFunction->funExitRoot(); + ui->buttonUser->setStyleSheet(m_setControlStyle.getStyleSheet(ui->buttonUser->objectName())); + } +} + +//刷新界面显示 +void MainWidget::refreshPageUi(s16 type) +{ + if(m_itemPerPage <= 0)//界面每页按钮数 + { + return; + } + + //----------- + int itemNum, pageNums; + itemNum = pageNums = 0; + + if(type == INTERFACE_SHORTCUT) + { + itemNum = m_quickItemList.size();//快捷功能列表 + } + else if(type == INTERFACE_ACCESS) + { + itemNum = m_assistItemList.size();//辅助功能列表 + } + + pageNums = (itemNum+m_itemPerPage-1) / m_itemPerPage;//计算总页数 + + if (m_curPages > pageNums) // 当前页 + { + m_curPages = pageNums; + } + if (m_curPages <= 1) + { + m_curPages = 1; + } + + // 刷新文本和图标 + int i, itemidx; + itemidx = (m_curPages-1) * m_itemPerPage; + for (i = 0; i < m_itemPerPage; i++) + { + if (itemidx < itemNum) //itemNum 从绣花参数一共有的按钮功能,可以是28+个 + { + if(type == INTERFACE_SHORTCUT) + { + QString name = m_quickItemList[itemidx].m_name; + m_quickLabelList[i]->setText(name); + m_quickLabelList.at(i)->show();//名称 + + QString topImageName = m_quickItemList[itemidx].m_topImageName; + //加载按钮顶图图标 + QString btnStyle = m_setControlStyle.getTopStyleSheet(topImageName); + m_quickBtnList[i]->setTopImage(btnStyle); + m_quickBtnList.at(i)->show(); + } + else if(type == INTERFACE_ACCESS) + { + QString name = m_assistItemList[itemidx].m_name; + m_assistLabelList[i]->setText(name); + m_assistLabelList.at(i)->show();//名称 + + QString topImageName = m_assistItemList[itemidx].m_topImageName; + //加载按钮顶图图标 + QString btnStyle = m_setControlStyle.getTopStyleSheet(topImageName); + m_assistBtnList[i]->setTopImage(btnStyle); + m_assistBtnList.at(i)->show(); + } + } + else + { + if(type == INTERFACE_SHORTCUT) + { + m_quickBtnList.at(i)->hide();//按钮 + m_quickLabelList.at(i)->hide();//名称 + } + else if(type == INTERFACE_ACCESS) + { + m_assistBtnList.at(i)->hide();//按钮 + m_assistLabelList.at(i)->hide();//名称 + } + } + itemidx++; + } + + // 刷新按钮 + if (m_curPages <= 1) + { + if(type == INTERFACE_SHORTCUT) + { + ui->buttonShortCutPgUp->setEnabled(false); + } + else if(type == INTERFACE_ACCESS) + { + ui->buttonAssistPgUp->setEnabled(false); + } + } + else + { + if(type == INTERFACE_SHORTCUT) + { + ui->buttonShortCutPgUp->setEnabled(true);//上一页按钮显示 + } + else if(type == INTERFACE_ACCESS) + { + ui->buttonAssistPgUp->setEnabled(true); + } + } + if (m_curPages >= pageNums)//当前页大于等于总页数 + { + if(type == INTERFACE_SHORTCUT) + { + ui->buttonShortCutPgDn->setEnabled(false); + } + else if(type == INTERFACE_ACCESS) + { + ui->buttonAssistPgDn->setEnabled(false); + } + } + else + { + if(type == INTERFACE_SHORTCUT) + { + ui->buttonShortCutPgDn->setEnabled(true); + } + else if(type == INTERFACE_ACCESS) + { + ui->buttonAssistPgDn->setEnabled(true); + } + } + + if(pageNums == 0) + { + m_curPages = 0; + } + + // 页信息 + QString str = tr("pageNum: ") + QString("%1/%2").arg(m_curPages).arg(pageNums);//页数: + if(type == INTERFACE_SHORTCUT) + { + ui->labelShortCutPage->setText(str); + } + else if(type == INTERFACE_ACCESS) + { + ui->labelAssistPage->setText(str); + } +} + +void MainWidget::on_buttonShortCutPgUp_clicked() +{ + m_curPages--; + refreshPageUi(INTERFACE_SHORTCUT); +} + +void MainWidget::on_buttonShortCutPgDn_clicked() +{ + m_curPages++; + refreshPageUi(INTERFACE_SHORTCUT); +} + +void MainWidget::on_buttonAssistPgUp_clicked() +{ + m_curPages--; + refreshPageUi(INTERFACE_ACCESS); +} + +void MainWidget::on_buttonAssistPgDn_clicked() +{ + m_curPages++; + refreshPageUi(INTERFACE_ACCESS); +} + +void MainWidget::on_buttonColorAdd_clicked() +{ + m_forwardBackColorIdx = m_forwardBackColorIdx + 1; + addOrDecColorIdx(m_forwardBackColorIdx,1); +} + +void MainWidget::on_buttonColorDec_clicked() +{ + m_forwardBackColorIdx = m_forwardBackColorIdx - 1; + addOrDecColorIdx(m_forwardBackColorIdx,-1); +} + +void MainWidget::on_buttonNeedle_clicked() +{ + if(m_curFilePath.length() <= 0) + { + return; + } + + patternColorSet(); +} + +void MainWidget::on_buttonDebugClose_clicked() +{ + ui->frameDebugFunction->setVisible(false); + on_buttonAccessFunction_clicked(); +} diff --git a/mctype/patternsingleboard/mainUI/mainwidget.h b/mctype/patternsingleboard/mainUI/mainwidget.h new file mode 100644 index 0000000..e9a92e5 --- /dev/null +++ b/mctype/patternsingleboard/mainUI/mainwidget.h @@ -0,0 +1,298 @@ +#ifndef MainWidget_H +#define MainWidget_H + +#include +#include +#include +#include +#include +#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 m_quickBtnList;//快捷功能中的快捷按钮列表 + QList m_quickLabelList;//快捷功能中的label显示列表 + QList m_shortCutBtnList;//窗体下方的快捷按钮列表 + + QList m_assistBtnList;//辅助功能中的辅助按钮列表 + QList m_assistLabelList;//辅助功能中的label显示列表 + + QList m_patternSetBtnList;//花样设置中的花样设置按钮列表 + QList m_patternSetLabelList;//花样设置中的label显示列表 + + QList m_paraSetBtnList;//参数设置中的参数设置按钮列表 + QList m_paraSetLabelList;//参数设置中的label显示列表 + + QList m_debugBtnList;//调试功能中的辅助按钮列表 + QList 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 m_quickItemList;//快捷功能中的快捷条目列表 + + void initAssisitBtn();//初始化辅助功能中的辅助按钮 + QList m_assistItemList;//辅助功能中的辅助按钮列表 + + void initDebugBtn();//初始化辅助功能中的调试按钮 + QList m_debugItemList;//辅助功能中的调试按钮列表 + + void initPatternSetBtn();//初始化花样设置功能中的花样设置按钮 + QList m_patternSetItemList;//花样设置功能中的花样设置条目列表 + + void initParaSetBtn();//初始化参数设置功能中的参数设置按钮 + QList m_paraSetItemList;//参数设置功能中的参数设置条目列表 + + QList m_errorCodeAndStateItemList;//错误代码和状态列表 + +private: + QList 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 diff --git a/mctype/patternsingleboard/mainUI/mainwidget.ui b/mctype/patternsingleboard/mainUI/mainwidget.ui new file mode 100644 index 0000000..8e91346 --- /dev/null +++ b/mctype/patternsingleboard/mainUI/mainwidget.ui @@ -0,0 +1,6713 @@ + + + MainWidget + + + + 0 + 0 + 1024 + 600 + + + + + + + background-color: rgb(122, 122, 122); + + + + + 0 + 0 + 1024 + 30 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 2 + 301 + 20 + + + + Qt::LeftToRight + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + Richpeace Embroidery Control System + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 830 + 10 + 191 + 16 + + + + color: rgb(255, 255, 255); + + + XPlatForm-RP-HMI-L1910-V210713 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 800 + 0 + 28 + 28 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); + + + + + + + + + + 0 + 30 + 91 + 532 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 60 + 54 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Pattern + + + Qt::AlignCenter + + + + + + 20 + 260 + 54 + 54 + + + + Qt::NoFocus + + + + + + + + + 20 + 320 + 54 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Assist + + + Qt::AlignCenter + + + + + + 20 + 150 + 54 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + ParaSet + + + Qt::AlignCenter + + + + + + 20 + 90 + 54 + 54 + + + + Qt::NoFocus + + + + + + + + + 20 + 170 + 54 + 54 + + + + Qt::NoFocus + + + + + + + + + 20 + 230 + 54 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Shortcut + + + Qt::AlignCenter + + + + + + 20 + 0 + 54 + 54 + + + + Qt::NoFocus + + + QPushButton:checked{image: url(:/images/1920x1080/theme1/MainWidget/frameMainFunction_p1_1.png);} + + + + + + + false + + + false + + + + + + 20 + 420 + 54 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Main + + + Qt::AlignCenter + + + + + + 20 + 360 + 54 + 54 + + + + Qt::NoFocus + + + QPushButton:checked{image: url(:/images/1920x1080/theme1/MainWidget/frameMainFunction_p1_1.png);} + + + + + + + false + + + false + + + + + + + 820 + 318 + 188 + 242 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 6 + 2 + 174 + 61 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 116 + 10 + 44 + 44 + + + + Qt::NoFocus + + + + + + + + + 4 + 10 + 44 + 44 + + + + Qt::NoFocus + + + + + + + + + 54 + 10 + 60 + 44 + + + + 4 + + + + + + + 6 + 68 + 174 + 164 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 0 + 0 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 0 + 56 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 0 + 112 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 60 + 112 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 60 + 0 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 60 + 56 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 120 + 112 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 120 + 0 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 120 + 56 + 48 + 48 + + + + Qt::NoFocus + + + + + + buttonNineBtn1 + buttonNineBtnLeft + buttonNineBtn3 + buttonNineBtnDown + buttonNineBtnUp + buttonNineBtn4 + buttonNineBtn2 + buttonNineBtnRight + buttonNineBtnMiddle + + + + + + 0 + 570 + 1024 + 30 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 6 + 160 + 16 + + + + color: rgb(220, 0, 0); + + + Not connected + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 4 + 28 + 1016 + 2 + + + + QProgressBar +{ + border-radius: 5px; + border:0px; +} + +QProgressBar::chunk +{ + background-color: rgb(255, 255, 255); +} + + + 0 + + + + + + 600 + 10 + 160 + 16 + + + + color: rgb(220, 0, 0); + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 370 + 10 + 160 + 16 + + + + color: rgb(220, 0, 0); + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 860 + 10 + 160 + 16 + + + + color: rgb(255, 255, 255); + + + 2021/03/08 8:37:16 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 770 + 0 + 28 + 28 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); + + + + + + + + + 810 + 0 + 28 + 28 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); + + + + + + labelState + progressBar + labelTime + buttonConnect + buttonUser + labelWorkState + labelEnableWorkState + + + + + 93 + 30 + 709 + 531 + + + + background-color: rgb(240, 240, 240); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 20 + 90 + 81 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 110 + 90 + 81 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 120 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 90 + 60 + 16 + + + + + 16777215 + 16777215 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 220 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 370 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 520 + 300 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 20 + 300 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 20 + 370 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 320 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 320 + 90 + 60 + 31 + + + + + 16777215 + 16777215 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 320 + 230 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 20 + 160 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 121 + 160 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 230 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 220 + 160 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 10 + 230 + 81 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 110 + 230 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 320 + 160 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 610 + 230 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 620 + 160 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 230 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 420 + 160 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 521 + 160 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 490 + 230 + 121 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 600 + 90 + 111 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 520 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 500 + 90 + 111 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 620 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 370 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 220 + 300 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 320 + 370 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 320 + 300 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 300 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 370 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 420 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 90 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AutoText + + + Qt::AlignCenter + + + true + + + + + + 120 + 300 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 120 + 370 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 620 + 370 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 620 + 300 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 500 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 20 + 430 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 430 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 320 + 500 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 620 + 500 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 520 + 430 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 500 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 20 + 500 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 120 + 430 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 620 + 430 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 120 + 500 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 420 + 430 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 500 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + assist + + + Qt::AlignCenter + + + true + + + + + + 320 + 430 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 510 + 490 + 80 + 31 + + + + background-color: rgb(255, 255, 255); + + + PgUp + + + + + + 600 + 490 + 80 + 31 + + + + background-color: rgb(255, 255, 255); + + + PgDn + + + + + + 423 + 490 + 71 + 21 + + + + page:0/0 + + + + + + + 93 + 30 + 709 + 532 + + + + background-color: rgb(240, 240, 240); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 120 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 620 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 100 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 120 + 100 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 420 + 100 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 20 + 100 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 620 + 100 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 220 + 100 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 220 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 320 + 100 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 320 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 20 + 130 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 20 + 210 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 120 + 210 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 120 + 130 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 130 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 210 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 320 + 130 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 320 + 210 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 420 + 130 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 210 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 620 + 130 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 620 + 210 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 520 + 130 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 210 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 420 + 360 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 620 + 360 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 320 + 440 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 120 + 440 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 320 + 360 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 440 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 20 + 440 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + + + + 520 + 330 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 620 + 330 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 320 + 330 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 120 + 330 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 120 + 250 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 120 + 360 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 330 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 420 + 330 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 320 + 250 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 250 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 440 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 620 + 440 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 520 + 360 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 250 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 250 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 360 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 20 + 360 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 20 + 330 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 20 + 250 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 620 + 250 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 440 + 60 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + shortcut + + + Qt::AlignCenter + + + true + + + + + + 423 + 490 + 71 + 21 + + + + page:0/0 + + + + + + 600 + 490 + 80 + 31 + + + + background-color: rgb(255, 255, 255); + + + PgDn + + + + + + 510 + 490 + 80 + 31 + + + + background-color: rgb(255, 255, 255); + + + PgUp + + + + + + + 93 + 30 + 709 + 532 + + + + background-color: rgb(189, 189, 189); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 30 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 10 + 90 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 130 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 110 + 90 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + false + + + Qt::AlignCenter + + + true + + + + + + 230 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 210 + 90 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 330 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 310 + 90 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 430 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 410 + 90 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 530 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 510 + 90 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 630 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 610 + 90 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 210 + 220 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 310 + 220 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + + + + 30 + 150 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 130 + 150 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 430 + 150 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 610 + 220 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 330 + 150 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 230 + 150 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 410 + 220 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 530 + 150 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 630 + 150 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 10 + 220 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 510 + 220 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + 110 + 220 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + PatternSet + + + Qt::AlignCenter + + + true + + + + + + + 0 + 0 + 1024 + 600 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 100 + 30 + 702 + 532 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 93 + 490 + 709 + 71 + + + + background-color: rgb(200, 200, 200); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 0 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 70 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 140 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 210 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 280 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 350 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 420 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 560 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 490 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + 630 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + + 820 + 30 + 191 + 534 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 60 + 80 + 110 + 28 + + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + 30 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 60 + 40 + 110 + 28 + + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + 4999 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 20 + 40 + 28 + 28 + + + + Qt::NoFocus + + + + + + + + + 20 + 80 + 28 + 28 + + + + Qt::NoFocus + + + + + + + + + 110 + 120 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 10 + 120 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 10 + 170 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 110 + 170 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 10 + 220 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 110 + 220 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 10 + 270 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 110 + 270 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 110 + 320 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 10 + 320 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 10 + 420 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 110 + 420 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 10 + 484 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 110 + 484 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 40 + 0 + 110 + 28 + + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + Forward or back + + + Qt::AlignCenter + + + + + + 9 + 0 + 171 + 521 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 110 + 370 + 72 + 40 + + + + Qt::NoFocus + + + + + + + + + 10 + 370 + 72 + 40 + + + + Qt::NoFocus + + + + + + frameForwardBackBack + labelColorCurAndTotal + labelNeedleCurAndTotal + buttonNeedleIdxImage + buttonColorIdxImage + buttonNeedleEnd + buttonNeedleBegin + buttonNeedleDec1 + buttonNeedleAdd1 + buttonNeedleDec10 + buttonNeedleAdd10 + buttonNeedleDec100 + buttonNeedleAdd100 + buttonNeedleAdd1000 + buttonNeedleDec1000 + buttonColorDec + buttonColorAdd + buttonForwardBackOk + buttonForwardBackCancel + labelForwardBackTitle + buttonNeedleAdd10000 + buttonNeedleDec10000 + + + + + 93 + 30 + 709 + 521 + + + + background-color: rgb(205, 238, 255); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 40 + 541 + 411 + + + + background-color: rgba(255, 255, 255, 0); + + + + + + Qt::AlignCenter + + + + + + 10 + 10 + 160 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(90, 90, 90); + + + Pattern Name + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 580 + 320 + 95 + 23 + + + + + + + 24 + + + + + + 630 + 10 + 68 + 311 + + + + background-color: rgba(245, 245, 245, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + true + + + + 10 + 70 + 48 + 20 + + + + Qt::NoFocus + + + border:0px; +background-color: rgb(85, 255, 127); + + + + + + + + + 10 + 100 + 48 + 20 + + + + Qt::NoFocus + + + background-color: rgb(0, 255, 255); +border:0px; + + + + + + + + + 10 + 130 + 48 + 20 + + + + Qt::NoFocus + + + border:0px; +background-color: rgb(170, 255, 127); + + + + + + + + + 10 + 160 + 48 + 20 + + + + Qt::NoFocus + + + border:0px; +background-color: rgb(0, 255, 0); + + + + + + + + + 10 + 190 + 48 + 20 + + + + Qt::NoFocus + + + border:0px; +background-color: rgb(170, 255, 0); + + + + + + + + + 10 + 220 + 48 + 20 + + + + Qt::NoFocus + + + border:0px; +background-color: rgb(0, 255, 127); + + + + + + + + + 10 + 250 + 48 + 20 + + + + Qt::NoFocus + + + border:0px; +background-color: rgb(0, 255, 127); + + + + + + + + + 10 + 280 + 48 + 20 + + + + Qt::NoFocus + + + border:0px; +background-color: rgb(0, 255, 127); + + + + + + + + + 10 + 10 + 48 + 48 + + + + Qt::NoFocus + + + + + + + + + + + + + 578 + 351 + 120 + 101 + + + + background-color: rgba(158, 158, 158, 100); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 0 + 0 + 120 + 132 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 0 + 0 + 120 + 101 + + + + Qt::NoFocus + + + + + + + + + + + + 40 + 10 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 500.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 40 + 70 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 1000.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 10 + 10 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + X + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 40 + 30 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 800.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 10 + 50 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + W + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 10 + 90 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + C + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 10 + 70 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + H + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 40 + 90 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 999 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 40 + 110 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 1000000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 40 + 50 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 1000.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 10 + 30 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Y + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 10 + 110 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + N + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + framePatternInfoImage + labelXValue + labelHValue + labelX + labelYValue + labelW + labelC + labelH + labelCValue + labelNValue + labelWValue + labelY + labelN + buttonPatternInfo + + labelPatternView + labelFilename + progressBarProgress + frameColor + framePatternInfo + + + + + 93 + 30 + 709 + 532 + + + + background-color: rgb(240, 240, 240); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 10 + 90 + 81 + 21 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AutoText + + + Qt::AlignCenter + + + true + + + + + + 109 + 90 + 81 + 21 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType2 + + + false + + + Qt::AlignCenter + + + true + + + + + + 120 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 210 + 90 + 81 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 220 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 320 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 310 + 90 + 81 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 410 + 90 + 81 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 420 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 610 + 90 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 620 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 620 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 510 + 210 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 410 + 210 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 20 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 10 + 210 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 210 + 210 + 81 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 320 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 109 + 210 + 81 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 310 + 210 + 81 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 610 + 210 + 81 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + 120 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 510 + 90 + 81 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + labelParaType + + + Qt::AlignCenter + + + true + + + + + + + 819 + 30 + 188 + 280 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 60 + 10 + 110 + 28 + + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + 0min + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 60 + 50 + 110 + 28 + + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + 0 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 60 + 90 + 110 + 28 + + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + 90° + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 60 + 130 + 110 + 28 + + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + 30 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 60 + 170 + 110 + 28 + + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + 4999 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 60 + 210 + 110 + 28 + + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + 1000.00,1000.00 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 20 + 50 + 28 + 28 + + + + Qt::NoFocus + + + + + + + + + 20 + 90 + 28 + 28 + + + + Qt::NoFocus + + + + + + + + + 20 + 130 + 28 + 28 + + + + Qt::NoFocus + + + + + + + + + 20 + 170 + 28 + 28 + + + + Qt::NoFocus + + + + + + + + + 20 + 210 + 28 + 28 + + + + Qt::NoFocus + + + + + + + + + 20 + 250 + 28 + 28 + + + + Qt::NoFocus + + + + + + + + + 60 + 250 + 110 + 28 + + + + color: rgb(255, 255, 255); +background-color: rgba(255, 255, 255, 0); + + + 1000.00,1000.00 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 20 + 10 + 28 + 28 + + + + Qt::NoFocus + + + + + + + + + + + + + 90 + 30 + 709 + 532 + + + + background-color: rgb(240, 240, 240); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 10 + 90 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 109 + 90 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 120 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 210 + 90 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 220 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 320 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 310 + 90 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 410 + 90 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 420 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 510 + 90 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 610 + 90 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 620 + 20 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 620 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 510 + 210 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 410 + 210 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 20 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 10 + 210 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 210 + 210 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 320 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 109 + 210 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 310 + 210 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 610 + 210 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 120 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 140 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 210 + 330 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 120 + 260 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 410 + 330 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 310 + 330 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 320 + 260 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 260 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 260 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 510 + 330 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 620 + 260 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 610 + 330 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 10 + 330 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 109 + 330 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 20 + 260 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 260 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 210 + 450 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 120 + 380 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 410 + 450 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 310 + 450 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 320 + 380 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 520 + 380 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 420 + 380 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 510 + 450 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 620 + 380 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 610 + 450 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 10 + 450 + 91 + 16 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 109 + 450 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); + + + DebugFunction + + + Qt::AlignCenter + + + true + + + + + + 20 + 380 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 220 + 380 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + 607 + 490 + 80 + 31 + + + + background-color: rgb(255, 255, 255); + + + Close + + + + frameForwardBack + frameBack + frameMenuBack + frameUp + frameFunctionBtn + frameDown + frameShortcutBtn + frameMainFunction + frameAccessFunction + framePatternSet + frameParaSet + frameShortcutFunction + frameEmbInfo + framePatternView + frameDebugFunction + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/settings/lotsettings.h b/settings/lotsettings.h new file mode 100644 index 0000000..2d5580a --- /dev/null +++ b/settings/lotsettings.h @@ -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 diff --git a/settings/settings.cpp b/settings/settings.cpp new file mode 100644 index 0000000..39a302c --- /dev/null +++ b/settings/settings.cpp @@ -0,0 +1,469 @@ +#include "settings.h" +#include +#include +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"< > 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;i800) + { + 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(); +} diff --git a/settings/settings.h b/settings/settings.h new file mode 100644 index 0000000..b56f768 --- /dev/null +++ b/settings/settings.h @@ -0,0 +1,56 @@ +#ifndef SETTINGS_H +#define SETTINGS_H + +#include +#include +#include +#include +#include //csv使用到 +#include +#include +#include +#include +#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 diff --git a/sharedviews/brokenlinedialog.cpp b/sharedviews/brokenlinedialog.cpp new file mode 100644 index 0000000..cb7e138 --- /dev/null +++ b/sharedviews/brokenlinedialog.cpp @@ -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(); +} diff --git a/sharedviews/brokenlinedialog.h b/sharedviews/brokenlinedialog.h new file mode 100644 index 0000000..e8c0c69 --- /dev/null +++ b/sharedviews/brokenlinedialog.h @@ -0,0 +1,48 @@ +#ifndef BROKENLINEDIALOG_H +#define BROKENLINEDIALOG_H + +#include +#include +#include +#include "promptdialog.h" +#include "mybutton.h" +#include "setcontrolstyle.h" +#include "datafile/datafiledst.h" +#include "datafile/datafiledsr.h" +#include +namespace Ui { +class BrokenLineDialog; +} + +class BrokenLineDialog : public QWidget +{ + Q_OBJECT + +public: + explicit BrokenLineDialog(QWidget *parent = 0); + ~BrokenLineDialog(); + +private slots: + + void on_buttonOk_clicked(); +private: + Ui::BrokenLineDialog *ui; + +private: + void initWidget(); + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006();//初始化窗体控件为1024x600分辨率 + void initControlStyle();//初始化窗体控件样式 + +public: + //int m_flag= 0; + void setTitleStr(QString str);//设置标题 + void setContentInfoStr(QString str);//设置内容 + void setContentStr(QString str);//设置内容 + void show(int flag=0); +}; + +#endif // BROKENLINEDIALOG_H + + diff --git a/sharedviews/brokenlinedialog.ui b/sharedviews/brokenlinedialog.ui new file mode 100644 index 0000000..8afd2ad --- /dev/null +++ b/sharedviews/brokenlinedialog.ui @@ -0,0 +1,158 @@ + + + BrokenLineDialog + + + + 0 + 0 + 541 + 300 + + + + Form + + + + + 70 + 69 + 401 + 131 + + + + + Agency FB + 72 + 75 + true + + + + border:0px; +background-color: rgb(240, 240, 240, 255); + + + 1 + + + Qt::AlignCenter + + + true + + + + + + 10 + 10 + 472 + 48 + + + + + + + Broken Line Prompt + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 450 + 250 + 71 + 31 + + + + + Agency FB + 9 + 50 + false + + + + Qt::NoFocus + + + + + + + + + + + + 0 + 0 + 541 + 301 + + + + background-color: rgba(245, 245, 245, 0);color: rgb(255, 255, 255); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 70 + 70 + 401 + 131 + + + + + Agency FB + 72 + 75 + true + + + + border:0px; +background-color: rgb(240, 240, 240, 255); + + + 1 + + + Qt::AlignCenter + + + true + + + frameBack + labelContent + labelTitle + labelContentInfo + buttonOk + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/colorordersetwidget.cpp b/sharedviews/colorordersetwidget.cpp new file mode 100644 index 0000000..e886d17 --- /dev/null +++ b/sharedviews/colorordersetwidget.cpp @@ -0,0 +1,1689 @@ +#include "colorordersetwidget.h" +#include "ui_colorordersetwidget.h" + +ColorOrderSetWidget::ColorOrderSetWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ColorOrderSetWidget), + m_itemPerPage(72), + m_pEmbNeedleBtn(NULL), + m_pColorBtn(NULL) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + + m_greyBeginStep = 0;//灰色起始 + m_greyEndStep = 0; //灰色结束 + + ui->buttonColorSetLock->setVisible(false); + + initWidget(); + initPatternColorTable(); + initControl(); + refreshLockBtn(); +} + +ColorOrderSetWidget::~ColorOrderSetWidget() +{ + if(m_pCurEmbData != NULL) + { + delete m_pCurEmbData; + } + delete ui; +} + +void ColorOrderSetWidget::initWidget() +{ + m_pCurEmbData = new EmbData(); + m_pCurEmbData->initColor(g_pSettings->getColorRgbArray().size(),(QRgb*)g_pSettings->getColorRgbArray().data()); + + m_colorBeginStepCtrl = 0; + m_colorEndStepCtrl = 0; + m_curSelectColor = -1; + m_curPages = 1; + m_pageNums = 1; + m_colorNums = 0; + m_colorSetBtnLockFlag = 1;//锁住 + m_setType = TYPE_COLORSET; + m_fileType = FILE_TYPE_DST; + ui->frameGear->setVisible(false); + ui->buttonValue->setEnabled(false); + m_singleMulMode = 0; + + m_pColorBuf = (QRgb *)(g_pSettings->getColorRgbArray().data()); + m_buttonStyle1 = "QPushButton{outline: none;border:0px solid rgb(0,0,0);border-style:inset;border-radius:5px;"; + m_buttonStyle2 = "QPushButton:checked{outline: none;border:3px groove rgb(80,80,80);}"; + + m_buttonColorOrderList.clear();//色序按钮 + for(int i = 0; i < m_itemPerPage; i++) + { + MyButton *buttonColorOrder = new MyButton(ui->frameColorOrder); + m_buttonColorOrderList.append(buttonColorOrder); + connect(buttonColorOrder, + SIGNAL(clicked()), + this, + SLOT(colorOrderBtnClick()) + ); + } + + m_buttonEmbNeedleList.clear();//针杆按钮 + for(int i = 0; i < 32; i++) + { + QPushButton *buttonEmbNeedle = new QPushButton(ui->frameColorOrder); + m_buttonEmbNeedleList.append(buttonEmbNeedle); + connect(buttonEmbNeedle, + SIGNAL(pressed()), + this, + SLOT(embNeedleBtnPressed())); + + connect(buttonEmbNeedle, + SIGNAL(released()), + this, + SLOT(embNeedleBtnReleased())); + } + + //定制冲孔机有6个冲刀深度显示 + m_buttonPunchDepthList.clear(); + for(int i = 0; i < 6; i++) + { + QPushButton *buttonEmbNeedle = new QPushButton(ui->frameColorOrder); + m_buttonPunchDepthList.append(buttonEmbNeedle); + connect(buttonEmbNeedle, + SIGNAL(clicked()), + this, + SLOT(punchDepthBtnClick()) + ); + m_buttonPunchDepthList[i]->hide(); + double value = g_pSettings->readFromIniFile("AUFUS/punchDepth"+QString::number(i)).toDouble(); + m_buttonPunchDepthList[i]->setText(QString::number(value,'f',2)); + m_buttonPunchDepthList[i]->setFont(fontNormal_1); + } +} + +void ColorOrderSetWidget::initControl() +{ + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + + initControlStyle();//初始化窗体控件样式 +} + +void ColorOrderSetWidget::initResolution1910() +{ + this->resize(1920,1080); + ui->frameBack->setGeometry(0,0,1920,1080); + + ui->buttonTypeLogo->setGeometry(128,66,78,78); + ui->labelMainTitle->setGeometry(226,60,400,44); + ui->labelSubTitle->setGeometry(302,112,1000,36); + + ui->frameRightUp->setGeometry(1130,92,768,72); + ui->buttonColorOrderClear->setGeometry(692,0,66,66); + ui->buttonColorOrderCycle->setGeometry(604,0,66,66); + ui->buttonColorSetLock->setGeometry(516,0,66,66); + + ui->frameColorOrder->setGeometry(84,220,1344,704); + ui->buttonNeedle->setGeometry(0,0,200,52); + + QRect rectImage(0,0,88,52); + QRect rectName(28,47,44,28); + QRect rectValue(0,0,88,52); + for(int i = 0; i < 6; i++) + { + int num = m_buttonColorOrderList.size()/6; + for(int j = 0; j < num; j++) + { + m_buttonColorOrderList[i*num+j]->setGeometry(j*114,220+i*82,88,80); + m_buttonColorOrderList[i*num+j]->initUpImageDownName(rectImage,rectName); + m_buttonColorOrderList[i*num+j]->initLabelValue(rectValue); + m_buttonColorOrderList[i*num+j]->setLabelNameFont(fontNormal_3); + m_buttonColorOrderList[i*num+j]->setLabelValueFont(fontNormal_1); + m_buttonColorOrderList[i*num+j]->setStyleSheet("border:0px;outline:none;");//无边框、无焦点 + } + } + + for(int i = 0; i < 6; i++) + { + m_buttonPunchDepthList[i]->setGeometry(i*114+228,220-156,88,52);//下边控件的大小 + } + + for(int i = 0; i < 3; i++) + { + int num,xSp,idx; + if(i == 0) + { + num = 10;//第一行10个 + xSp = 228; + idx = 0; + } + else if(i == 1) + { + num = 12;//第二行12个 + xSp = 0; + idx = 10; + } + else if(i == 2) + { + num = 10;//第三行10个 + xSp = 0; + idx = 22; + } + for(int j = 0; j < num; j++) + { + m_buttonEmbNeedleList[idx+j]->setGeometry(xSp+j*114,i*70,88,52); + m_buttonEmbNeedleList[idx+j]->setFont(fontNormal_1); + m_buttonEmbNeedleList[idx+j]->setText(QString::number(idx+j+1)); + //等于压胶机 + if(g_emMacType == MACHINE_ADHESIVE) + { + m_buttonEmbNeedleList[idx+j]->hide(); + } + } + } + + //等于压胶机 + if(g_emMacType == MACHINE_ADHESIVE) + { + ui->frameGear->setVisible(true); + ui->frameGear->setGeometry(300,0,600,80); + + ui->buttonSingle->setGeometry(4,0,88,76); + ui->buttonSingle->setFont(fontNormal_1); + + ui->buttonMul->setGeometry(120,0,88,76); + ui->buttonMul->setFont(fontNormal_1); + + ui->buttonValue->setGeometry(220,0,88,76); + ui->buttonValue->setFont(fontNormal_1); + } + + ui->labelPatternView->setGeometry(1536,220,302,302); + ui->labelNameValue->setGeometry(1538,564,400,36); + ui->labelTotalNeedle->setGeometry(1538,604,200,36); + ui->labelTotalNeedleValue->setGeometry(1760,604,94,36); + ui->labelTotalColor->setGeometry(1538,644,200,36); + ui->labelTotalColorValue->setGeometry(1760,644,94,36); + ui->labelCurColorNum->setGeometry(1538,684,200,36); + ui->labelCurColorNumValue->setGeometry(1760,684,94,36); + ui->labelBeginIdx->setGeometry(1538,724,200,36); + ui->labelBeginIdxValue->setGeometry(1760,724,94,36); + ui->labelEndIdx->setGeometry(1538,764,200,36); + ui->labelEndIdxValue->setGeometry(1760,764,94,36); + ui->labelNeedleSelect->setGeometry(1538,804,180,36); + ui->labelNeedleSelectValue->setGeometry(1655,804,200,36); + + ui->framePageBtn->setGeometry(1120,990,800,70); + ui->labelPage->setGeometry(32,1008,400,40); + ui->buttonPgUp->setGeometry(0,0,168,70); + ui->buttonPgDn->setGeometry(200,0,168,70); + ui->buttonOk->setGeometry(400,0,168,70); + ui->buttonCancel->setGeometry(600,0,168,70); +} + +void ColorOrderSetWidget::initResolution1006() +{ + this->resize(1024,600); + ui->frameBack->setGeometry(0,0,1024,600); + + ui->buttonTypeLogo->setGeometry(25,30,60,60); + ui->labelMainTitle->setGeometry(100,30,200,24); + ui->labelSubTitle->setGeometry(130,64,240,21); + + ui->frameRightUp->setGeometry(560,40,857,61); + ui->buttonColorOrderClear->setGeometry(399,0,50,50); + ui->buttonColorOrderCycle->setGeometry(342,0,50,50); + ui->buttonColorSetLock->setGeometry(285,0,50,50); + + ui->frameColorOrder->setGeometry(20,120,740,420); + ui->buttonNeedle->setGeometry(24,0,110,32); + QRect rectImage(0,0,56,32);//下边颜色图片的大小和位置 + QRect rectName(18,30,28,16);//数字 + QRect rectValue(0,0,56,32);//下边颜色图片里的文字 + for(int i = 0; i < 6; i++) + { + int num = m_buttonColorOrderList.size()/6; + for(int j = 0; j < num; j++) + { + m_buttonColorOrderList[i*num+j]->setGeometry(25+j*60,124+i*50,56,46);//下边控件的大小 + m_buttonColorOrderList[i*num+j]->initUpImageDownName(rectImage,rectName); + m_buttonColorOrderList[i*num+j]->initLabelValue(rectValue); + m_buttonColorOrderList[i*num+j]->setLabelNameFont(fontNormal_1); + m_buttonColorOrderList[i*num+j]->setLabelValueFont(fontNormal_1); + m_buttonColorOrderList[i*num+j]->setStyleSheet("border:0px;outline:none;");//无边框、无焦点 + } + } + + for(int i = 0; i < 6; i++) + { + m_buttonPunchDepthList[i]->setGeometry(25+i*60+120,124-90,56,32);//下边控件的大小 + } + + for(int i = 0; i < 3; i++) + { + int num,xSp,idx; + if(i == 0) + { + num = 10;//第一行10个 + xSp = 145; + idx = 0; + } + else if(i == 1) + { + num = 12;//第二行12个 + xSp = 25; + idx = 10; + } + else if(i == 2) + { + num = 10;//第三行10个 + xSp = 25; + idx = 22; + } + for(int j = 0; j < num; j++) + { + m_buttonEmbNeedleList[idx+j]->setGeometry(xSp+j*60,i*38,56,32);//上边颜色的大小 + m_buttonEmbNeedleList[idx+j]->setFont(fontNormal_1); + m_buttonEmbNeedleList[idx+j]->setText(QString::number(idx+j+1)); + //等于压胶机 + if(g_emMacType == MACHINE_ADHESIVE) + { + m_buttonEmbNeedleList[idx+j]->hide(); + } + } + } + + //等于压胶机 + if(g_emMacType == MACHINE_ADHESIVE) + { + ui->frameGear->setVisible(true); + ui->frameGear->setGeometry(120,0,400,80); + + ui->buttonSingle->setGeometry(4,0,56,40); + ui->buttonSingle->setFont(fontNormal_1); + + ui->buttonMul->setGeometry(96,0,56,40); + ui->buttonMul->setFont(fontNormal_1); + + ui->buttonValue->setGeometry(160,0,56,40); + ui->buttonValue->setFont(fontNormal_1); + } + + ui->labelPatternView->setGeometry(790,98,220,220); + ui->labelNameValue->setGeometry(816,320,141,20); + ui->labelTotalNeedle->setGeometry(816,350,141,20); + ui->labelTotalNeedleValue->setGeometry(895,350,91,20); + ui->labelTotalColor->setGeometry(816,375,91,20); + ui->labelTotalColorValue->setGeometry(895,375,91,20); + ui->labelCurColorNum->setGeometry(816,400,91,20); + ui->labelCurColorNumValue->setGeometry(895,400,91,20); + ui->labelBeginIdx->setGeometry(816,425,91,20); + ui->labelBeginIdxValue->setGeometry(895,425,91,20); + ui->labelEndIdx->setGeometry(816,450,91,20); + ui->labelEndIdxValue->setGeometry(895,450,91,20); + ui->labelNeedleSelect->setGeometry(816,475,91,20); + ui->labelNeedleSelectValue->setGeometry(895,475,91,20); + + ui->framePageBtn->setGeometry(595,545,600,40); + ui->labelPage->setGeometry(20,550,102,45); + ui->buttonPgUp->setGeometry(0,0,96,40); + ui->buttonPgDn->setGeometry(106,0,96,40); + ui->buttonOk->setGeometry(212,0,96,40); + ui->buttonCancel->setGeometry(318,0,96,40); +} + +void ColorOrderSetWidget::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + //背景图 + QString frameBackImgPath = setControlStyle.getStyleSheet(this->objectName()); + ui->frameBack->setStyleSheet(frameBackImgPath); + ui->frameColorOrder->setStyleSheet(TRANSPARENTSTYLE); + ui->frameGear->setStyleSheet(TRANSPARENTSTYLE); + + //label样式 + ui->labelMainTitle->setFont(fontBold_1); + ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelSubTitle->setFont(fontNormal_1); + ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelPage->setFont(fontNormal_1); + ui->labelPage->setStyleSheet(LABELWHITESTYLE); + ui->buttonNeedle->setFont(fontNormal_6); + ui->labelPatternView->setStyleSheet(TRANSPARENTSTYLE); + ui->labelNameValue->setFont(fontNormal_6); + ui->labelNameValue->setStyleSheet(LABELWHITESTYLE); + ui->labelTotalNeedle->setFont(fontNormal_6); + ui->labelTotalNeedle->setStyleSheet(LABELWHITESTYLE); + ui->labelTotalNeedleValue->setFont(fontNormal_6); + ui->labelTotalNeedleValue->setStyleSheet(LABELWHITESTYLE); + ui->labelTotalColor->setFont(fontNormal_6); + ui->labelTotalColor->setStyleSheet(LABELWHITESTYLE); + ui->labelTotalColorValue->setFont(fontNormal_6); + ui->labelTotalColorValue->setStyleSheet(LABELWHITESTYLE); + ui->labelCurColorNum->setFont(fontNormal_6); + ui->labelCurColorNum->setStyleSheet(LABELWHITESTYLE); + ui->labelCurColorNumValue->setFont(fontNormal_6); + ui->labelCurColorNumValue->setStyleSheet(LABELWHITESTYLE); + ui->labelBeginIdx->setFont(fontNormal_6); + ui->labelBeginIdx->setStyleSheet(LABELWHITESTYLE); + ui->labelBeginIdxValue->setFont(fontNormal_6); + ui->labelBeginIdxValue->setStyleSheet(LABELWHITESTYLE); + ui->labelEndIdx->setFont(fontNormal_6); + ui->labelEndIdx->setStyleSheet(LABELWHITESTYLE); + ui->labelEndIdxValue->setFont(fontNormal_6); + ui->labelEndIdxValue->setStyleSheet(LABELWHITESTYLE); + ui->labelNeedleSelect->setFont(fontNormal_6); + ui->labelNeedleSelect->setStyleSheet(LABELWHITESTYLE); + ui->labelNeedleSelectValue->setFont(fontNormal_6); + ui->labelNeedleSelectValue->setStyleSheet(LABELWHITESTYLE); + + ui->framePageBtn->setStyleSheet(TRANSPARENTSTYLE); + + //右上方 + ui->frameRightUp->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonColorOrderClear->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonColorOrderClear->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonColorOrderClear->objectName())); + ui->buttonColorOrderCycle->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonColorOrderCycle->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonColorOrderCycle->objectName())); + ui->buttonColorSetLock->setGreenGradientBottomStyle(BORDER_RADIUS1); + + //四个按钮样式表一样 + ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); + + ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); + + ui->buttonOk->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()),12); + + ui->buttonCancel->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()),12); +} + +void ColorOrderSetWidget::initPatternColorTable() +{ + //设置颜色列表(针杆色序表) + 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(); + m_pCurEmbData->setNeedleColorTable(i,idx); + } + else + { + m_pCurEmbData->setNeedleColorTable(i,i); + } + } +} + +void ColorOrderSetWidget::initNeedleBar() +{ + //读入配置 + QDir apppath(qApp->applicationDirPath()); + + //配置文件路径 + QString configFile = apppath.path() + apppath.separator() + "config.ini"; + QFile iniFile(configFile); + + int highFlag = g_pSettings->readFromIniFile("AUFUS/highSpeed").toInt(); + + int num,idx; + if(!iniFile.exists()) + { + num = 1; + idx = 0; + + QRgb rgb = m_pColorBuf[(idx % BF_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + if(i < num) + { + m_buttonEmbNeedleList[i]->setText(QString::number(i+1)); + + m_buttonEmbNeedleList.at(i)->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + m_buttonEmbNeedleList.at(i)->show(); + } + else + { + m_buttonEmbNeedleList.at(i)->hide(); + } + } + } + else + { + QRgb rgb = qRgb(0,255,0); + switchNeedleNum(num);//显示当前色序所选的针杆 + + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + QString idxStr; + idxStr = getNeedleColorStr(i+1); + + if(g_pSettings->ifKeyExists(idxStr) == true) + { + idx = g_pSettings->readFromIniFile(idxStr).toInt(); + rgb = m_pColorBuf[(idx % BF_SW_ND)]; + } + else + { + rgb = m_pColorBuf[(i % MC_SW_ND)]; + } + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + if(i < num) + { + m_buttonEmbNeedleList[i]->setText(QString::number(i+1)); + + //属于冲缝绣才显示针杆设置按钮,因为有的色序里只有偏移针步 + if(m_colorBeginStepCtrl == DATA_SEWING || + m_colorBeginStepCtrl == DATA_EMB || + m_colorBeginStepCtrl == DATA_PUNCH || + m_colorBeginStepCtrl == 0) + { + m_buttonEmbNeedleList.at(i)->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + m_buttonEmbNeedleList.at(i)->show(); + + if(highFlag == 1) + { + if(i < m_buttonPunchDepthList.size()) + { + m_buttonPunchDepthList.at(i)->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + m_buttonPunchDepthList.at(i)->show(); + } + } + } + else + { + m_buttonEmbNeedleList.at(i)->hide(); + + if(highFlag == 1) + { + if(i < m_buttonPunchDepthList.size()) + { + m_buttonPunchDepthList.at(i)->hide(); + } + } + } + } + else + { + m_buttonEmbNeedleList.at(i)->hide(); + + if(highFlag == 1) + { + if(i < m_buttonPunchDepthList.size()) + { + m_buttonPunchDepthList.at(i)->hide(); + } + } + } + } + } + + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + m_buttonEmbNeedleList.at(i)->setChecked(false); + m_buttonEmbNeedleList.at(i)->setCheckable(false); + } +} + +void ColorOrderSetWidget::switchNeedleBar() +{ + //读入配置 + QDir apppath(qApp->applicationDirPath()); + + //配置文件路径 + QString configFile = apppath.path() + apppath.separator() + "config.ini"; + QFile iniFile(configFile); + + int num,idx; + num = 0; + if(!iniFile.exists()) + { + num = 1; + idx = 0; + + QRgb rgb = m_pColorBuf[(idx % BF_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + if(i < num) + { + m_buttonEmbNeedleList[i]->setText(QString::number(i+1)); + m_buttonEmbNeedleList.at(i)->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + //压胶机时隐藏,不显示 + if(g_emMacType != MACHINE_ADHESIVE) + { + m_buttonEmbNeedleList.at(i)->show(); + } + } + else + { + m_buttonEmbNeedleList.at(i)->hide(); + } + } + } + else + { + QRgb rgb = qRgb(0,255,0); + + if(m_colorBeginStepCtrl == DATA_PUNCH)//冲孔 + { + num = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Punch (P):"));//冲孔(P): + } + else if(m_colorBeginStepCtrl == DATA_EMB)//绣花 + { + num = g_pSettings->readFromIniFile("EmbNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Emb (P):"));//绣花(E): + } + else if(m_colorBeginStepCtrl == DATA_SEWING)//缝纫 + { + num = g_pSettings->readFromIniFile("SewNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Sew (S):"));//缝纫(S): + } + + //等于压胶机 + if(g_emMacType == MACHINE_ADHESIVE) + { + ui->buttonNeedle->setText(tr("Gear:"));//档位: + } + + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + QString idxStr; + idxStr = getNeedleColorStr(i+1); + + if(g_pSettings->ifKeyExists(idxStr) == true) + { + idx = g_pSettings->readFromIniFile(idxStr).toInt(); + rgb = m_pColorBuf[(idx % BF_SW_ND)]; + } + else + { + rgb = m_pColorBuf[(i % MC_SW_ND)]; + } + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + if(i < num) + { + m_buttonEmbNeedleList[i]->setText(QString::number(i+1)); + //属于冲缝绣,毛巾针步才显示针杆设置按钮,因为有的色序里只有偏移针步 + if(m_colorBeginStepCtrl == DATA_SEWING || + m_colorBeginStepCtrl == DATA_EMB || + m_colorBeginStepCtrl == DATA_PUNCH || + m_colorBeginStepCtrl == 0) + { + m_buttonEmbNeedleList.at(i)->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + //压胶机时隐藏,不显示 + if(g_emMacType != MACHINE_ADHESIVE) + { + m_buttonEmbNeedleList.at(i)->show(); + } + } + else + { + m_buttonEmbNeedleList.at(i)->hide(); + } + } + else + { + m_buttonEmbNeedleList.at(i)->hide(); + } + } + } + + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + m_buttonEmbNeedleList.at(i)->setChecked(false); + m_buttonEmbNeedleList.at(i)->setCheckable(false); + } +} + +//刷新色序显示 +void ColorOrderSetWidget::refreshColorShow() +{ + QString str; + QString strNeedle; + + int num = 0; + getNeedleNum(num);//获取配置文件针杆数量 + + int colorNum = m_colorNums; + m_pageNums = (colorNum + m_itemPerPage - 1)/m_itemPerPage;// 计算页数 + if (m_curPages > m_pageNums)// 当前页 + { + m_curPages = m_pageNums; + } + if (m_curPages <= 1 && colorNum != 0) + { + m_curPages = 1; + } + + int colorIdx = (m_curPages-1) * m_itemPerPage; + if(colorIdx < 0) + { + colorIdx = 0; + } + + for (int i = 0; i < m_itemPerPage; i++) + { + // 颜色显示 + if (colorIdx < colorNum) + { + s16 needleIdx = m_colorTable.at(colorIdx);//花版里的第一个色序 + strNeedle = getCurColorTabStr(needleIdx); + s16 needleIdxCp = needleIdx; + + //不等于压胶机时 + if(g_emMacType != MACHINE_ADHESIVE) + { + getCurColorTabValue(needleIdx); + } + + QString idxStr; + idxStr = getNeedleColorStr(needleIdxCp,needleIdx);//needleIdx 针杆索引 + + s16 colorInTab; + if(g_pSettings->ifKeyExists(idxStr) == true) + { + colorInTab = g_pSettings->readFromIniFile(idxStr).toInt(); + } + else + { + colorInTab = m_colorTable.at(colorIdx); + getCurColorTabValue(colorInTab); + colorInTab -= 1; + if(colorInTab < 0){colorInTab = 0;} + } + + if(g_emMacType == MACHINE_ADHESIVE) + { + colorInTab = m_colorTable.at(colorIdx); + } + + // 文件中的色序 + QRgb rgb = m_pColorBuf[(colorInTab % BF_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + + m_buttonColorOrderList.at(i)->setImageBackColor(cstyle); + + QString cstyle1 = "outline: none;background-color:rgba(255, 255, 255, 0);color:" + tcolor.name() + ";"; + m_buttonColorOrderList.at(i)->setLabelValueStyle(cstyle1); + if(needleIdx <= 0) + { + m_buttonColorOrderList.at(i)->setLabelValue("");//色序里的数字是空 + } + else + { + m_buttonColorOrderList.at(i)->setLabelValue(strNeedle+QString::number(needleIdx)); + } + + str.sprintf("%d", colorIdx+1); + + if(g_emMacType == MACHINE_PUNCH_AUTOPOS) + { + if( i < 256) + { + //int size = m_colorTable.length(); + int val = m_colorTable.at(TABLE_HEIGHT_IDX+i)-EMB_NEEDLE_NUM-1; + for(int m = 0; m < 10; m++) + { + if(m <= val && val <= (m*10 + 9)) + { + str = QString::number(m)+"." + QString::number(val-m*10); + break; + } + } + } + } + + //下方的色序按钮 + //设置数字 花版里的色序个数 + m_buttonColorOrderList.at(i)->setLabelName(str); + m_buttonColorOrderList.at(i)->show(); + + //选择显示 + if (colorIdx == m_curSelectColor) + { + m_buttonColorOrderList.at(i)->setLabelImageChecked(cstyle); + } + } + else + { + m_buttonColorOrderList.at(i)->setLabelName(""); + m_buttonColorOrderList.at(i)->hide(); + } + colorIdx++; + } + + // 翻页按钮 + if (m_curPages <= 1) + { + ui->buttonPgUp->setEnabled(false); + } + else + { + ui->buttonPgUp->setEnabled(true); + } + if (m_curPages >= m_pageNums) + { + ui->buttonPgDn->setEnabled(false); + } + else + { + ui->buttonPgDn->setEnabled(true); + } + + // 页信息 + if(m_pageNums == 0) + { + m_curPages = 0; + } + + QString pStr = tr("pageNum: ") + QString("%1/%2").arg(m_curPages).arg(m_pageNums);//页数: + ui->labelPage->setText(pStr); +} + +//刷新花样选中的色序显示(刷新花样部分线迹) +void ColorOrderSetWidget::refreshPatternCurColorShow() +{ + if(m_curSelectColor < 0) + { + return; + } + + int beginIdx, endIdx; + + if(m_colorTable.size() == 1)//只有一个换色 + { + endIdx = m_pCurEmbData->getStitchNums(); + m_pCurEmbData->getNeedleIdxFromColorIdx(beginIdx, m_curSelectColor+1, m_colorBeginStepCtrl); + beginIdx = 1; + } + else + { + if(m_curSelectColor+1 <= m_colorNums)//当前选择颜色数等于总的颜色数 + { + //获取起始针步和换色后第一个针步的针步属性(非跳针跨步等) + m_pCurEmbData->getNeedleIdxFromColorIdx(beginIdx, m_curSelectColor+1, m_colorBeginStepCtrl); + } + + if(m_curSelectColor+1 >= m_colorNums)//当前选择颜色数等于总的颜色数 + { + endIdx = m_pCurEmbData->getStitchNums(); + } + else + { + m_pCurEmbData->getNeedleIdxFromColorIdx(endIdx, m_curSelectColor+2, m_colorEndStepCtrl); + } + } + + m_pCurEmbData->setGreyAreaRange(m_greyBeginStep,m_greyEndStep); + m_pCurEmbData->setDispAreaRange(beginIdx,endIdx,0); + m_pCurEmbData->setDispMode(EmbData::DISP_ALL_AREA, 1); // 重新画灰图 + + m_greyBeginStep = beginIdx;//灰色起始 + m_greyEndStep = endIdx; //灰色结束 + + QPixmap patternPix = m_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); + + ui->labelCurColorNumValue->setText(QString::number(m_curSelectColor+1)); + ui->labelBeginIdxValue->setText(QString::number(beginIdx)); + ui->labelEndIdxValue->setText(QString::number(endIdx)); + + //根据 beginStepCtrl 切换到相应针杆设置 + int num = 0; + getNeedleNum(num); + + s16 selIdx = m_colorTable[m_curSelectColor]; + int idx = selIdx; + getCurColorTabValue(selIdx); + + QString str; + if(selIdx <= 0) + { + str = tr("Not set");//未设置 + } + else + { + QString typeStr; + typeStr = getCurColorTabStr(idx); + str = typeStr + QString::number(selIdx);//针杆 + } + ui->labelNeedleSelectValue->setText(str);// 右下角显示当前色序的针杆 + ui->buttonColorSetLock->setEnabled(true);//右上方色序设定解锁按钮可按 +} + +//获取配置文件针杆数量 +void ColorOrderSetWidget::getNeedleNum(int &num) +{ + if(m_colorBeginStepCtrl == 0)//界面没打开的时候,进来这个里边 + { + num = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Punch (P):"));//冲孔 + return; + } + + if(m_colorBeginStepCtrl == DATA_SEWING)//缝纫 + { + num = g_pSettings->readFromIniFile("SewNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Sew (S):"));//缝纫 + } + else if(m_colorBeginStepCtrl == DATA_PUNCH)//冲孔 + { + num = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Punch (P):"));//冲孔 + } + else if(m_colorBeginStepCtrl == DATA_EMB)//绣花 + { + num = g_pSettings->readFromIniFile("EmbNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Emb (E):"));//绣花 + } + else if(m_colorBeginStepCtrl == 0) + { + num = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Punch (P):"));//冲孔 + } + else + { + //非冲缝绣针步 + ui->buttonNeedle->setText(tr("Non needle step"));//非下针针步 + } + + //等于压胶机 + if(g_emMacType == MACHINE_ADHESIVE) + { + ui->buttonNeedle->setText(tr("Gear:"));//档位 + } +} + +void ColorOrderSetWidget::switchNeedleNum(int &num) +{ + //m_curSelectColor 花版中的第几个色序 + //m_colorTable 色序表 + //selIdx 色序表里的色序 0就是没有色序 + if(m_colorTable.size() <= 0) + { + return; + } + int selIdx = m_colorTable[m_curSelectColor]; + + if(selIdx > EMB_NEEDLE_NUM+PUNCH_NEEDLE_NUM)//缝纫 + { + num = g_pSettings->readFromIniFile("SewNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Sew (S):"));//缝纫 + m_colorBeginStepCtrl = DATA_SEWING; + } + else if(selIdx > EMB_NEEDLE_NUM)//冲孔 + { + num = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Punch (P):"));//冲孔 + m_colorBeginStepCtrl = DATA_PUNCH; + } + else + { + if(selIdx > 0) + { + num = g_pSettings->readFromIniFile("EmbNeedle/number").toInt(); + ui->buttonNeedle->setText(tr("Emb (E):"));//绣花 + m_colorBeginStepCtrl = DATA_EMB; + } + else + { + if(m_colorBeginStepCtrl == DATA_PUNCH) + { + num = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + } + else if(m_colorBeginStepCtrl == DATA_SEWING) + { + num = g_pSettings->readFromIniFile("SewNeedle/number").toInt(); + } + else if(m_colorBeginStepCtrl == DATA_EMB) + { + num = g_pSettings->readFromIniFile("EmbNeedle/number").toInt(); + } + else + { + num = 0; + } + } + } + + //等于压胶机 + if(g_emMacType == MACHINE_ADHESIVE) + { + ui->buttonNeedle->setText(tr("Gear:"));//档位: + } +} + +//获取配置文件针杆颜色索引字符 +QString ColorOrderSetWidget::getNeedleColorStr(s16 idx) +{ + QString idxStr; + idxStr.clear(); + + if(m_colorBeginStepCtrl == DATA_EMB)//绣花 + { + idxStr = "EmbNeedle/"+QString::number(idx)+"_coloridx";//绣花 + } + else if(m_colorBeginStepCtrl == DATA_PUNCH)//冲孔 + { + idxStr = "PunchNeedle/"+QString::number(idx)+"_coloridx";//冲孔 + } + else if(m_colorBeginStepCtrl == DATA_SEWING)//缝纫 + { + idxStr = "SewNeedle/"+QString::number(idx)+"_coloridx";//缝纫 + } + else + { + idxStr = "PunchNeedle/"+QString::number(idx)+"_coloridx";//冲孔 + } + + return idxStr; +} + +QString ColorOrderSetWidget::getNeedleColorStr(s16 colorIdx, s16 idx) +{ + QString idxStr; + idxStr.clear(); + + if(colorIdx > EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM)//缝纫 + { + idxStr = "SewNeedle/"; + } + else if(colorIdx > EMB_NEEDLE_NUM)//冲孔 + { + idxStr = "PunchNeedle/"; + } + else + { + idxStr = "EmbNeedle/"; + } + + idxStr += QString::number(idx)+"_coloridx"; + + return idxStr; +} + +//刷新色序锁定按钮 +void ColorOrderSetWidget::refreshLockBtn() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + if(m_colorSetBtnLockFlag == 1)//锁住 + { + ui->buttonColorSetLock->setCheckable(true); + ui->buttonColorSetLock->setChecked(true); + ui->buttonColorSetLock->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonColorSetLock->objectName())); + ui->buttonNeedle->setStyleSheet(LABELWHITESTYLE); + ui->buttonNeedle->setEnabled(false);//针杆按钮不可按 + } + else//解锁 + { + ui->buttonColorSetLock->setChecked(false); + ui->buttonColorSetLock->setCheckable(false); + ui->buttonColorSetLock->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonColorSetLock->objectName()+"_unlock")); + ui->buttonNeedle->setStyleSheet(BUTTONWHITESTYLE); + ui->buttonNeedle->setEnabled(true);//针杆按钮可按 + } +} + +QString ColorOrderSetWidget::getCurColorTabStr(s16 needleIdx) +{ + QString strNeedle; + strNeedle.clear(); + + if(needleIdx > EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM)//缝纫 + { + strNeedle = tr("S"); + } + else if(needleIdx > EMB_NEEDLE_NUM)//冲孔 + { + strNeedle = tr("P"); + } + else + { + strNeedle = tr("E"); + } + + //等于压胶机 + if(g_emMacType == MACHINE_ADHESIVE) + { + strNeedle = tr("G"); + } + + return strNeedle; +} + +void ColorOrderSetWidget::getCurColorTabValue(s16 &colorInTab) +{ + if(colorInTab > EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM)//缝纫 + { + colorInTab -= EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM; + } + else if(colorInTab > EMB_NEEDLE_NUM)//冲孔 + { + colorInTab -= EMB_NEEDLE_NUM; + } +} + +void ColorOrderSetWidget::showPunchShape(QString filePath) +{ + DataFileDsr dsr; + int ret = dsr.createPunchShapeData(filePath); + + if(ret < 0) + { + return; + } + + int num = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + + for(int i = 0; i < num; i++) + { + QLabel *pcLabel=new QLabel(ui->frameColorOrder); + + int widthImg,heightImg; + if(i >= 0 && i <= 9)//仅一排 + { + if(g_emResolut == resolution1910) + { + pcLabel->setGeometry(250+i*42+i*72,120,68,68); + widthImg = pcLabel->width()-5; + heightImg = pcLabel->height()-5; + } + else if(g_emResolut == resolution1006) + { + pcLabel->setGeometry(150+i*42+i*18,70,42,42);//42是单个控件高度,18是控件间距 + widthImg = pcLabel->width()-5; + heightImg = pcLabel->height()-5; + } + } + + QImage Image(widthImg,heightImg, QImage::Format_ARGB32); + dsr.createPunchShapeImage(&Image,i); + pcLabel->setPixmap(QPixmap::fromImage(Image)); + pcLabel->show(); + } +} + +//设置类型图标 +void ColorOrderSetWidget::setTypeLogo(QString tStyle) +{ + ui->buttonTypeLogo->setUnPreBtnLogo(tStyle); +} + +//设置主title +void ColorOrderSetWidget::setMainTitle(QString str) +{ + ui->labelMainTitle->setText(str); +} + +void ColorOrderSetWidget::setSubTitle(QString str) +{ + ui->labelSubTitle->setText(str); +} + +void ColorOrderSetWidget::show(QString filePath) +{ + m_colorSetBtnLockFlag = 1;//锁住 + refreshLockBtn(); + + m_singleMulMode = 0; + ui->buttonSingle->setCheckable(true); + ui->buttonSingle->setChecked(true); + ui->buttonMul->setChecked(false); + ui->buttonMul->setCheckable(false); + + QFileInfo file(filePath); + QString ext = file.suffix().toUpper(); + + m_pCurEmbData->setViewInfo(ui->labelPatternView->width(),ui->labelPatternView->height()); + m_pCurEmbData->clear(); + + if(ext == "DST")//dst文件 + { + DataFileDst dst; + dst.initFile(filePath); + dst.convertDataToAbs(); + m_pCurEmbData->appendAbsFile(filePath,dst.getEmbAbsData());//生成文件信息 + //m_colorTable.resize(dst.getColorNums()); + m_colorNums = dst.getColorNums(); + } + else if(ext == "DSR")//dsr文件 + { + DataFileDsr dsr; + dsr.initFile(filePath); + dsr.convertDataToEmbAbs(); + m_pCurEmbData->appendAbsFile(filePath,dsr.getEmbAbsData());//生成文件信息 + //m_colorTable.resize(dsr.getColorNums()); + m_colorNums = dsr.getColorNums(); + } + + m_pCurEmbData->getDsDat(); + //转换为ds16数据后设置色序表 + m_pCurEmbData->setDs16ColorOfTable((u8*)m_colorTable.data()); + m_pCurEmbData->setEmbData(); + m_greyBeginStep = 0;//灰色起始 + m_greyEndStep = m_pCurEmbData->getStitchNums(); //灰色结束 + + QFileInfo info(filePath); + QString fileName = info.fileName(); + int size = fileName.length(); + if(size > NAMEMAXLENGTH+12)//花样名称过长时截取 + { + fileName = fileName.mid(0,NAMEMAXLENGTH+12) + "~"; + } + ui->labelNameValue->setText(fileName); + if(size <= 0)//未选择文件时 + { + ui->labelTotalNeedleValue->setText(""); + ui->labelTotalColorValue->setText(""); + } + else + { + ui->labelTotalNeedleValue->setText(QString::number(m_pCurEmbData->getStitchNums())); + ui->labelTotalColor->setText(tr("Total color:"));//总颜色数: + ui->labelTotalColorValue->setText(QString::number(m_pCurEmbData->getColorNums())); + } + + m_curSelectColor = 0; + if(m_buttonColorOrderList.size() > 0) + { + m_pColorBtn = m_buttonColorOrderList.at(0);//默认选中(等于)第一个色序按钮 + } + refreshPatternCurColorShow(); + refreshColorShow(); + //不等于压胶机时 + if(g_emMacType != MACHINE_ADHESIVE) + { + initNeedleBar(); + } + + if(g_emMacType == MACHINE_PUNCH_AUTOPOS) + { + showPunchShape(filePath); + } + +#if(0) + ui->labelCurColorNumValue->setText(""); + ui->labelBeginIdxValue->setText(""); + ui->labelEndIdxValue->setText(""); + ui->labelNeedleSelectValue->setText(""); +#endif + + QWidget::show(); +} + +void ColorOrderSetWidget::setColorTable(QByteArray table, int type) +{ + ui->labelCurColorNum->setText(tr("Color num:"));//当前色序: + ui->labelNeedleSelect->setText(tr("Punch:"));//冲孔: + m_setType = type; + + m_beforeColorTable.clear(); + m_colorTable.clear(); + + if(m_setType == TYPE_HIGHSET) + { + m_beforeColorTable.append(table.data()+TABLE_HEIGHT_IDX,table.length()-TABLE_HEIGHT_IDX); + m_colorTable.append(table.data()+TABLE_HEIGHT_IDX,table.length()-TABLE_HEIGHT_IDX); + } + else + { + m_beforeColorTable.append(table); + m_colorTable.append(table); + } +} + +void ColorOrderSetWidget::colorOrderBtnClick() +{ + int idx = 0; + m_pColorBtn = (MyButton*) this->sender(); + + if(m_pColorBtn == NULL) + { + return; + } + for(int i = 0; i < m_buttonColorOrderList.size(); i++) + { + if(m_pColorBtn == m_buttonColorOrderList.at(i)) + { + idx = i; + } + } + + m_curSelectColor = (m_curPages - 1) * m_itemPerPage + idx; + + //针杆按钮不选中 + if(m_pEmbNeedleBtn != NULL) + { + m_pEmbNeedleBtn->setChecked(false); + m_pEmbNeedleBtn->setCheckable(false); + } + + int minVal = 0; + int maxVal = 0; + int defVal = 0; + + if(m_setType == TYPE_COLORSET)//色序设定 + { + minVal = 1; + maxVal = 255; + defVal = 10; + } + else if(m_setType == TYPE_HIGHSET) + { + minVal = -127; + maxVal = 127; + defVal = 0; + } + + //等于压胶机时 + if(g_emMacType == MACHINE_ADHESIVE) + { + int idx = 0; + if(m_setType == TYPE_HIGHSET) + { + idx = TABLE_HEIGHT_IDX; + } + if(m_singleMulMode == 0)//单选 + { + NumerInputDialog numberInputDlg; + numberInputDlg.setTitleStr(tr("Gear set"));//档位设置 + numberInputDlg.setUnitStr(""); + + numberInputDlg.setValueAndRange(defVal, minVal, maxVal, 0);//默认10 + + if(numberInputDlg.exec() == 1) + { + s32 val = numberInputDlg.getValue(); + m_colorTable[m_curSelectColor] = val; + emit siChangeColorTable(m_curSelectColor+idx,val); + } + } + else//多选 + { + int val = ui->buttonValue->text().toInt(); + m_colorTable[m_curSelectColor] = val; + emit siChangeColorTable(m_curSelectColor+idx,val); + } + } + + refreshColorShow(); + refreshPatternCurColorShow();//右下角花样数据 + //不等于压胶机时 + if(g_emMacType != MACHINE_ADHESIVE) + { + initNeedleBar(); + } +} + +//针杆按钮被按下 +void ColorOrderSetWidget::embNeedleBtnPressed() +{ + m_pEmbNeedleBtn = (QPushButton*) this->sender(); + m_pEmbNeedleBtn->setCheckable(true); + m_pEmbNeedleBtn->setChecked(true); +} + +//针杆按钮抬起 +void ColorOrderSetWidget::embNeedleBtnReleased() +{ + if(m_pColorBtn == NULL || m_pEmbNeedleBtn == NULL || m_curSelectColor == -1) + { + //按钮都不选中 + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + m_buttonEmbNeedleList.at(i)->setChecked(false); + m_buttonEmbNeedleList.at(i)->setCheckable(false); + } + return; + } + int btnIdx = 0; + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + if(m_pEmbNeedleBtn == m_buttonEmbNeedleList.at(i)) + { + btnIdx = i+1; + } + m_buttonEmbNeedleList.at(i)->setChecked(false); + m_buttonEmbNeedleList.at(i)->setCheckable(false); + } + + int num = 0; + getNeedleNum(num);//显示当前的色序的针杆 + +#if(0) + if(m_combineEmb == -1)//组合模式 + { + if(btnIdx > num) + { + btnIdx = btnIdx-num; + } + } +#endif + + int colorInPage = btnIdx; + if(m_colorBeginStepCtrl == DATA_SEWING)//缝纫 + { + colorInPage += EMB_NEEDLE_NUM + PUNCH_NEEDLE_NUM; + } + else if(m_colorBeginStepCtrl == DATA_PUNCH)//冲孔 + { + colorInPage += EMB_NEEDLE_NUM; + } + + if(m_curSelectColor >= 0) + { + int colorInTab = m_colorTable.at(m_curSelectColor); // 文件中的色序 + + if (colorInTab != colorInPage || colorInTab == TOTAL_NEEDLE_NUM) + { + m_colorTable[m_curSelectColor] = colorInPage; + emit siChangeColorTable(m_curSelectColor,colorInPage);//针杆写入色序表 + } + + s16 selIdx = m_colorTable[m_curSelectColor]; + getCurColorTabValue(selIdx); + + QString str; + if(selIdx <= 0) + { + str = tr("Not set");//未设置 + } + else + { + str = tr("Needle ") + QString::number(selIdx);//针杆 + } + ui->labelNeedleSelectValue->setText(str); + + //当前色序设定完成后自动跳到下一色序 + if(m_curSelectColor < m_colorNums-1) + { + m_curSelectColor += 1;//花版中的第几个色序 + } + + refreshColorShow(); + refreshPatternCurColorShow(); + initNeedleBar();//下一个色序针杆变,在这个函数里 + } +} + +void ColorOrderSetWidget::punchDepthBtnClick() +{ + int idx = 0; + m_pColorBtn = (MyButton*) this->sender(); + + if(m_pColorBtn == NULL) + { + return; + } + for(int i = 0; i < m_buttonPunchDepthList.size(); i++) + { + if(m_pColorBtn == m_buttonPunchDepthList[i]) + { + idx = i; + } + } + + NumerInputDialog numberInputDlg; + numberInputDlg.setTitleStr(tr("Punch depth"));//冲刀深度 + numberInputDlg.setUnitStr(""); + numberInputDlg.setValueAndRange(0, 0, 200, 2);//默认0,0~2 + if(numberInputDlg.exec() == 1) + { + double val = (double)numberInputDlg.getValue() / 100; + + g_pSettings->writeToIniFile("AUFUS/punchDepth"+QString::number(idx),QString::number(val,'f',2)); + m_buttonPunchDepthList[idx]->setText(QString::number(val,'f',2)); + } +} + +void ColorOrderSetWidget::on_buttonPgUp_clicked() +{ + m_curPages--; + refreshColorShow(); +} + +void ColorOrderSetWidget::on_buttonPgDn_clicked() +{ + m_curPages++; + refreshColorShow(); +} + +void ColorOrderSetWidget::on_buttonOk_clicked() +{ + if(m_setType == TYPE_COLORSET)//色序设定 + { + emit siBackHome(); + } + else if(m_setType == TYPE_HIGHSET) + { + emit siHighBackHome(); + } + this->hide(); +} + +void ColorOrderSetWidget::on_buttonCancel_clicked() +{ + //恢复之前的色序表 + if(m_setType == TYPE_COLORSET) + { + emit siCancelChangeColor(m_beforeColorTable); + } + else if(m_setType == TYPE_HIGHSET) + { + emit siCancelChangeHigh(m_beforeColorTable); + } + this->hide(); +} + +//色序循环 +void ColorOrderSetWidget::on_buttonColorOrderCycle_clicked() +{ + QByteArray cycleTable; + cycleTable.clear(); + + //拷贝循环列表 + for(int i = 0; i < m_colorTable.length(); i++) + { + int colorInTab = m_colorTable.at(i); // 色序 + + if(colorInTab != 0) + { + cycleTable.append(m_colorTable[i]); + } + else + { + break; + } + } + + if(cycleTable.length() <= 0) + { + return; + } + + //将循环列表循环复制到m_colorTable中 + for(int i = 0; i < m_colorTable.length();) + { + memcpy((char*)m_colorTable.data() + i,(char*)cycleTable.data(),cycleTable.length()); + i += cycleTable.length(); + } + + for(int i = 0; i < m_colorTable.length(); i++) + { + int colorInTab = m_colorTable.at(i); // 色序 + + if(m_setType == TYPE_COLORSET) + { + emit siChangeColorTable(i,colorInTab); + } + else if(m_setType == TYPE_HIGHSET) + { + emit siChangeColorTable(i+TABLE_HEIGHT_IDX,colorInTab); + } + } + + m_pCurEmbData->setGreyAreaRange(0,m_pCurEmbData->getStitchNums()); + m_pCurEmbData->setDispMode(EmbData::DISP_ALL_AREA, 1); // 重绘 + + QPixmap patternPix = m_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); + + m_curSelectColor = -1; + refreshColorShow(); +} + +//色序清空 +void ColorOrderSetWidget::on_buttonColorOrderClear_clicked() +{ + for(int i = 0; i < m_colorTable.length(); i++) + { + m_colorTable[i] = 0;//清空 + int colorInTab = m_colorTable.at(i); // 色序 + if(m_setType == TYPE_COLORSET) + { + emit siChangeColorTable(i,colorInTab); + } + else if(m_setType == TYPE_HIGHSET) + { + emit siChangeColorTable(i+TABLE_HEIGHT_IDX,colorInTab); + } + } + + m_pCurEmbData->setGreyAreaRange(0,m_pCurEmbData->getStitchNums()); + m_pCurEmbData->setDispAreaRange(0,0); + m_pCurEmbData->setDispMode(EmbData::DISP_ALL_AREA, 1); // 重绘 + + QPixmap patternPix = m_pCurEmbData->getPreviewImage(); + ui->labelPatternView->setPixmap(patternPix); + + m_curSelectColor = -1; + refreshColorShow(); +} + +//色序设定是否解锁,锁住时针杆不可切换,未锁住时针杆可切换 +void ColorOrderSetWidget::on_buttonColorSetLock_clicked() +{ + m_colorSetBtnLockFlag *= -1; + refreshLockBtn(); +} + +//切换成不同的针杆显示 +void ColorOrderSetWidget::on_buttonNeedle_clicked() +{ + switch (m_colorBeginStepCtrl) + { + case DATA_EMB://第一次进来是平绣 + { + + break; + } + } + + switchNeedleBar(); +} + + + +void ColorOrderSetWidget::on_buttonSingle_clicked() +{ + m_singleMulMode = 0; + ui->buttonSingle->setCheckable(true); + ui->buttonSingle->setChecked(true); + + ui->buttonMul->setChecked(false); + ui->buttonMul->setCheckable(false); +} + +void ColorOrderSetWidget::on_buttonMul_clicked() +{ + m_singleMulMode = 1; + ui->buttonMul->setCheckable(true); + ui->buttonMul->setChecked(true); + + ui->buttonSingle->setChecked(false); + ui->buttonSingle->setCheckable(false); + + //等于压胶机时 + if(g_emMacType == MACHINE_ADHESIVE) + { + NumerInputDialog numberInputDlg; + numberInputDlg.setTitleStr(tr("Gear set"));//档位设置 + numberInputDlg.setUnitStr(""); + + numberInputDlg.setValueAndRange(10, 1, 255, 0);//默认10 + + if(numberInputDlg.exec() == 1) + { + s32 val = numberInputDlg.getValue(); + ui->buttonValue->setText(QString::number(val)); + } + } +} + +void ColorOrderSetWidget::slotChangeNeedleColor(int idx, int colorIdx) +{ + if(m_pCurEmbData != NULL) + { + m_pCurEmbData->setNeedleColorTable(idx,colorIdx); + } +} diff --git a/sharedviews/colorordersetwidget.h b/sharedviews/colorordersetwidget.h new file mode 100644 index 0000000..f80cc5a --- /dev/null +++ b/sharedviews/colorordersetwidget.h @@ -0,0 +1,131 @@ +#ifndef COLORORDERSETWIDGET_H +#define COLORORDERSETWIDGET_H + +#include +#include +#include +#include "promptdialog.h" +#include "mybutton.h" +#include "setcontrolstyle.h" +//#include "Include/datafiledst.h" +#include "datafile/datafiledst.h" +#include "datafile/datafiledsr.h" +#include "mctype/mainwidgetfunction.h" +#include +#include + +#define TYPE_COLORSET 0 //色序设定 +#define TYPE_HIGHSET 1 //高度设定 +#define TABLE_HEIGHT_IDX 256 //高度从色序表的256开始 + +#define FILE_TYPE_DST 0 //dst文件类型 +#define FILE_TYPE_DSR 1 //dsr文件类型 + +namespace Ui { +class ColorOrderSetWidget; +} + +class ColorOrderSetWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ColorOrderSetWidget(QWidget *parent = 0); + ~ColorOrderSetWidget(); + +private: + Ui::ColorOrderSetWidget *ui; + int m_itemPerPage;//界面每页条目数 + +private: + EmbData *m_pCurEmbData; + QList m_buttonColorOrderList; + QList m_buttonEmbNeedleList; + QList m_buttonPunchDepthList; + + QPushButton *m_pEmbNeedleBtn; + MyButton *m_pColorBtn; + u8 m_colorBeginStepCtrl;//换色后起始针步属性(除偏移、跳针等) + u8 m_colorEndStepCtrl; //换色后结束针步属性(除偏移、跳针等) + int m_greyBeginStep;//灰色起始 + int m_greyEndStep; //灰色结束 + int m_singleMulMode;//压胶机单双选择模式 0:单选 1:多选 + + QRgb *m_pColorBuf; + QString m_buttonStyle1; + QString m_buttonStyle2; + + QByteArray m_beforeColorTable;//变换之前的色序表 + QByteArray m_colorTable;//变换之后的色序表 + int m_curSelectColor; + int m_curPages;//当前页 + int m_pageNums;//总页数 + int m_colorNums; + + s16 m_colorSetBtnLockFlag;//色序设定可切换按钮是否锁住1:锁住 -1:解锁 + + s16 m_setType;//设置类型 0:色序设定 1:毛巾高度设置 + s16 m_fileType;//文件类型 0:dst 1:dsr + +private: + void initWidget(); + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006();//初始化窗体控件为1024x600分辨率 + void initControlStyle();//初始化窗体控件样式 + + void initPatternColorTable();//绘制花样的颜色列表 + void initNeedleBar();//初始化针杆 + void switchNeedleBar();//切换针杆 + void refreshColorShow();//刷新色序显示 + void refreshPatternCurColorShow();//刷新花样选中的色序显示(刷新花样部分线迹) + void getNeedleNum(int & num);//获取配置文件针杆数量 + void switchNeedleNum(int & num);//针杆数量 + QString getNeedleColorStr(s16 idx);//获取配置文件针杆颜色索引字符 + QString getNeedleColorStr(s16 colorIdx,s16 idx);//获取配置文件针杆颜色索引字符 + void refreshLockBtn();//刷新色序锁定按钮 + +// void initHeadHeightValue();//初始化机头高度值 +// void refreshHeadHeightShow();//刷新机头高度显示 + QString getCurColorTabStr(s16 needleIdx); + void getCurColorTabValue(s16 &colorInTab); + void showPunchShape(QString filePath);//显示冲孔形状 + +public: + void setTypeLogo(QString tStyle);//设置类型图标 + void setMainTitle(QString str);//设置主title + void setSubTitle(QString str);//设置副title + void show(QString filePath); + void setColorTable(QByteArray table, int type=TYPE_COLORSET); + +signals: + void siChangeColorTable(int selColor,int colorIdx); + void siChangeHighTable(int selColor,int colorIdx); + void siBackHome(); + void siHighBackHome(); + void siCancelChangeColor(QByteArray table); + void siCancelChangeHigh(QByteArray table); + +private slots: + void colorOrderBtnClick(); + void embNeedleBtnPressed();//针杆按钮被按下 + void embNeedleBtnReleased();//针杆按钮抬起 + void punchDepthBtnClick();//冲刀深度按钮被按下 + + void on_buttonPgUp_clicked(); + void on_buttonPgDn_clicked(); + void on_buttonOk_clicked(); + void on_buttonCancel_clicked(); + void on_buttonColorOrderCycle_clicked(); + void on_buttonColorOrderClear_clicked(); + void on_buttonColorSetLock_clicked(); + void on_buttonNeedle_clicked(); + + void on_buttonSingle_clicked(); + void on_buttonMul_clicked(); + +public slots: + void slotChangeNeedleColor(int idx, int colorIdx);//针杆颜色改变 +}; + +#endif // COLORORDERSETWIDGET_H diff --git a/sharedviews/colorordersetwidget.ui b/sharedviews/colorordersetwidget.ui new file mode 100644 index 0000000..d97d164 --- /dev/null +++ b/sharedviews/colorordersetwidget.ui @@ -0,0 +1,706 @@ + + + ColorOrderSetWidget + + + + 0 + 0 + 1024 + 600 + + + + Form + + + background-color: rgb(161, 161, 161); + + + + + 759 + 460 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Needle: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 860 + 380 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 100 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 759 + 400 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Color num: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 759 + 380 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Total color: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 30 + 10 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + + + + 860 + 460 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 100 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 860 + 400 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 100 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 759 + 440 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + End needle: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 791 + 330 + 141 + 20 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + dst + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 20 + 560 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + PageNums: 0/0 + + + + + + 759 + 420 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Begin needle: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 759 + 360 + 91 + 20 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Total needle: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 470 + 550 + 531 + 31 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 290 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 450 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 370 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 210 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + + 770 + 120 + 200 + 200 + + + + background-color: rgb(255, 255, 255); + + + + + + + + + 110 + 20 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + color order set + + + + + + 860 + 360 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 1000000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 860 + 420 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 1000000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 860 + 440 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 1000000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 20 + 100 + 711 + 391 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 111 + 23 + + + + + + + Needle: + + + + + + 140 + 10 + 371 + 41 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 75 + 23 + + + + Qt::NoFocus + + + QPushButton +{ +background-color:rgba(250, 250, 250);border:0px;border-radius:5px; +} +QPushButton:checked +{ +background-color: rgba(0, 170, 255); +} + + + One + + + + + + 90 + 10 + 75 + 23 + + + + Qt::NoFocus + + + QPushButton +{ +background-color:rgba(250, 250, 250);border:0px;border-radius:5px; +} +QPushButton:checked +{ +background-color: rgba(0, 170, 255); +} + + + Many + + + + + + 170 + 10 + 75 + 23 + + + + Qt::NoFocus + + + QPushButton +{ +background-color:rgba(200, 200, 200);color: rgb(0, 0, 0);border:0px;border-radius:5px; +} + + + 0 + + + + + + + + 0 + 0 + 1024 + 600 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 150 + 50 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + color order set + + + + + + 350 + 20 + 651 + 51 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 480 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 560 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 400 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + frameBack + labelNeedleSelect + labelTotalColorValue + labelCurColorNum + labelTotalColor + buttonTypeLogo + labelNeedleSelectValue + labelCurColorNumValue + labelEndIdx + labelNameValue + labelPage + labelBeginIdx + labelTotalNeedle + framePageBtn + labelPatternView + labelMainTitle + labelTotalNeedleValue + labelBeginIdxValue + labelEndIdxValue + labelSubTitle + frameColorOrder + frameRightUp + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/controlactionwidget.cpp b/sharedviews/controlactionwidget.cpp new file mode 100644 index 0000000..ccf9556 --- /dev/null +++ b/sharedviews/controlactionwidget.cpp @@ -0,0 +1,665 @@ +#include "controlactionwidget.h" +#include "ui_controlactionwidget.h" + +ControlActionWidget::ControlActionWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ControlActionWidget), + m_itemPerPage(12), + m_btnPerRow(5) +{ + ui->setupUi(this); + + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + + m_speedLevel = 0; + + this->move(0,0); + + m_curPage = 0; + m_itemList.clear(); + m_allItemList.clear(); + initControl(); +} + +ControlActionWidget::~ControlActionWidget() +{ + delete ui; +} + +//初始化窗体控件,包括位置、尺寸、样式 +void ControlActionWidget::initControl() +{ + m_itemFrameList.clear(); + m_itemFrameList.append(ui->frame1); + m_itemFrameList.append(ui->frame2); + m_itemFrameList.append(ui->frame3); + m_itemFrameList.append(ui->frame4); + m_itemFrameList.append(ui->frame5); + ui->frame6->setVisible(false); + ui->frame7->setVisible(false); + ui->frame8->setVisible(false); + ui->frame9->setVisible(false); + ui->frame10->setVisible(false); + ui->frame11->setVisible(false); + ui->frame12->setVisible(false); + + if(g_emResolut == resolution1910)//1920x1080的分辨率每页显示12个条目 + { + ui->frame6->setVisible(true); + ui->frame7->setVisible(true); + ui->frame8->setVisible(true); + ui->frame9->setVisible(true); + ui->frame10->setVisible(true); + ui->frame11->setVisible(true); + ui->frame12->setVisible(true); + m_itemFrameList.append(ui->frame6); + m_itemFrameList.append(ui->frame7); + m_itemFrameList.append(ui->frame8); + m_itemFrameList.append(ui->frame9); + m_itemFrameList.append(ui->frame10); + m_itemFrameList.append(ui->frame11); + m_itemFrameList.append(ui->frame12); + } + else if(g_emResolut == resolution1006)//1024x600的分辨率每页显示8个条目 + { + ui->frame6->setVisible(true);//显示 + ui->frame7->setVisible(true); + ui->frame8->setVisible(true); + m_itemFrameList.append(ui->frame6); + m_itemFrameList.append(ui->frame7); + m_itemFrameList.append(ui->frame8); + } + + m_itemLabelList.clear(); + m_itemLabelList.append(ui->label1); + m_itemLabelList.append(ui->label2); + m_itemLabelList.append(ui->label3); + m_itemLabelList.append(ui->label4); + m_itemLabelList.append(ui->label5); + m_itemLabelList.append(ui->label6); + m_itemLabelList.append(ui->label7); + m_itemLabelList.append(ui->label8); + m_itemLabelList.append(ui->label9); + m_itemLabelList.append(ui->label10); + m_itemLabelList.append(ui->label11); + m_itemLabelList.append(ui->label12); + + m_itemBtnList.clear(); + m_itemBtnList.append(ui->button1_1); + m_itemBtnList.append(ui->button1_2); + m_itemBtnList.append(ui->button1_3); + m_itemBtnList.append(ui->button1_4); + m_itemBtnList.append(ui->button1_5); + m_itemBtnList.append(ui->button2_1); + m_itemBtnList.append(ui->button2_2); + m_itemBtnList.append(ui->button2_3); + m_itemBtnList.append(ui->button2_4); + m_itemBtnList.append(ui->button2_5); + m_itemBtnList.append(ui->button3_1); + m_itemBtnList.append(ui->button3_2); + m_itemBtnList.append(ui->button3_3); + m_itemBtnList.append(ui->button3_4); + m_itemBtnList.append(ui->button3_5); + m_itemBtnList.append(ui->button4_1); + m_itemBtnList.append(ui->button4_2); + m_itemBtnList.append(ui->button4_3); + m_itemBtnList.append(ui->button4_4); + m_itemBtnList.append(ui->button4_5); + m_itemBtnList.append(ui->button5_1); + m_itemBtnList.append(ui->button5_2); + m_itemBtnList.append(ui->button5_3); + m_itemBtnList.append(ui->button5_4); + m_itemBtnList.append(ui->button5_5); + m_itemBtnList.append(ui->button6_1); + m_itemBtnList.append(ui->button6_2); + m_itemBtnList.append(ui->button6_3); + m_itemBtnList.append(ui->button6_4); + m_itemBtnList.append(ui->button6_5); + m_itemBtnList.append(ui->button7_1); + m_itemBtnList.append(ui->button7_2); + m_itemBtnList.append(ui->button7_3); + m_itemBtnList.append(ui->button7_4); + m_itemBtnList.append(ui->button7_5); + m_itemBtnList.append(ui->button8_1); + m_itemBtnList.append(ui->button8_2); + m_itemBtnList.append(ui->button8_3); + m_itemBtnList.append(ui->button8_4); + m_itemBtnList.append(ui->button8_5); + m_itemBtnList.append(ui->button9_1); + m_itemBtnList.append(ui->button9_2); + m_itemBtnList.append(ui->button9_3); + m_itemBtnList.append(ui->button9_4); + m_itemBtnList.append(ui->button9_5); + m_itemBtnList.append(ui->button10_1); + m_itemBtnList.append(ui->button10_2); + m_itemBtnList.append(ui->button10_3); + m_itemBtnList.append(ui->button10_4); + m_itemBtnList.append(ui->button10_5); + m_itemBtnList.append(ui->button11_1); + m_itemBtnList.append(ui->button11_2); + m_itemBtnList.append(ui->button11_3); + m_itemBtnList.append(ui->button11_4); + m_itemBtnList.append(ui->button11_5); + m_itemBtnList.append(ui->button12_1); + m_itemBtnList.append(ui->button12_2); + m_itemBtnList.append(ui->button12_3); + m_itemBtnList.append(ui->button12_4); + m_itemBtnList.append(ui->button12_5); + for(int var = 0; var < m_itemBtnList.size(); var++) + { + connect(m_itemBtnList.at(var), + SIGNAL(clicked(bool)), + this, + SLOT(slotItemBtnClicked()) + ); + + connect(m_itemBtnList.at(var), + SIGNAL(pressed()), + this, + SLOT(slotItemBtnPressed()) + ); + + connect(m_itemBtnList.at(var), + SIGNAL(released()), + this, + SLOT(slotItemBtnReleased()) + ); + } + + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + + initControlStyle();//初始化窗体控件样式 +} + +//初始化窗体控件为1920x1080分辨率 +void ControlActionWidget::initResolution1910() +{ + this->resize(1920,1080); + ui->frameBack->setGeometry(0,0,1920,1080); + ui->buttonTypeLogo->setGeometry(128,66,78,78); + ui->labelMainTitle->setGeometry(226,60,1000,48); + ui->labelSubTitle->setGeometry(302,112,1000,36); + + for(int i = 0; i < m_itemPerPage; i++) + { + m_itemFrameList[i]->setGeometry(295,180 + i * 64,1330,58); + m_itemLabelList[i]->setGeometry(40,0,820,58); + } + + for(int i = 0; i < m_btnPerRow; i++) + { + for(int j = 0; j < m_itemPerPage; j++) + { + m_itemBtnList[m_btnPerRow*j+i]->setGeometry(648+i*132,0,120,56); + } + } + + ui->framePageBtn->setGeometry(1120,990,800,70); + ui->labelPage->setGeometry(32,1008,400,40); + ui->buttonPgUp->setGeometry(200,0,168,70); + ui->buttonPgDn->setGeometry(400,0,168,70); + ui->buttonBack->setGeometry(600,0,168,70); +} + +//初始化窗体控件为1024x600分辨率 +void ControlActionWidget::initResolution1006() +{ + m_itemPerPage = m_itemPerPage - 4; + this->resize(1024,600); + + ui->frameBack->setGeometry(0,0,1024,600); + ui->buttonTypeLogo->setGeometry(25,30,60,60); + ui->labelMainTitle->setGeometry(100,30,200,24); + ui->labelSubTitle->setGeometry(130,64,240,21); + + for(int i = 0; i < m_itemPerPage; i++) + { + m_itemFrameList[i]->setGeometry(154,98 + i * 53,718,53); + //m_itemLabelList[i]->setGeometry(10,22,331,26); + m_itemLabelList[i]->setGeometry(10,22,340,26); + } + for(int i = 0; i < m_btnPerRow; i++) + { + for(int j = 0; j < m_itemPerPage; j++) + { + m_itemBtnList[m_btnPerRow*j+i]->setGeometry(283+i*86,12,80,32);//蓝色按钮大小位置 + } + } + + ui->framePageBtn->setGeometry(700,545,600,45); + ui->labelPage->setGeometry(20,550,102,45); + ui->buttonPgUp->setGeometry(0,0,96,40); + ui->buttonPgDn->setGeometry(106,0,96,40); + ui->buttonBack->setGeometry(212,0,96,40); +} + +//初始化窗体控件样式 +void ControlActionWidget::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + //背景图 + QString frameBackImgPath = setControlStyle.getSharedStyleSheet(); + ui->frameBack->setStyleSheet(frameBackImgPath); + ui->labelMainTitle->setFont(fontBold_1); + ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelSubTitle->setFont(fontNormal_1); + ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelPage->setFont(fontNormal_1); + ui->labelPage->setStyleSheet(LABELWHITESTYLE); + + //条目frame + for(int i = 0; i < m_itemPerPage; i++) + { + m_itemFrameList[i]->setStyleSheet(TRANSPARENTSTYLE); + } + + //条目label + for(int i = 0; i < m_itemPerPage; i++) + { + m_itemLabelList[i]->setFont(fontNormal_1); + m_itemLabelList[i]->setStyleSheet(LABELWHITESTYLE); + } + + //条目按钮 + for(int i = 0; i < m_itemBtnList.size(); i++) + { + m_itemBtnList[i]->setBlueGradientBottomStyle();//都用一个底图 + m_itemBtnList[i]->setFont(fontNormal_1); + } + + //四个按钮样式表一样 + ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); + + ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); + + ui->buttonBack->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonBack->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonBack->objectName()),12); +} + +void ControlActionWidget::refreshUi(int idx) +{ + // m_itemList 所有的控制动作 + if(idx != 0) + { + m_itemList.clear(); + + for( int i= 0; i < m_allItemList.size();i++) + { + m_itemList.append(m_allItemList[i]); + } + } + + int itemNum,pageNums; + if (m_itemList.size() == 0) + { + itemNum = 0; + } + else + { + itemNum = m_itemList.size(); + } + + pageNums = (itemNum+m_itemPerPage-1) / m_itemPerPage; // 计算页数 + + if (m_curPage > pageNums) // 当前页 + { + m_curPage = pageNums; + } + if (m_curPage <= 1) + { + m_curPage = 1; + } + + int itemidx = (m_curPage-1) * m_itemPerPage; + + for (int i = 0; i < m_itemPerPage; i++) + { + if (itemidx < itemNum) + { + m_itemFrameList.at(i)->show(); + OutCtrlItem item = m_itemList.at(itemidx); + m_itemLabelList[i]->setText(item.m_name); + + m_itemBtnList[i*m_btnPerRow]->setText(item.m_btn1Str); + m_itemBtnList[i*m_btnPerRow+1]->setText(item.m_btn2Str); + m_itemBtnList[i*m_btnPerRow+2]->setText(item.m_btn3Str); + m_itemBtnList[i*m_btnPerRow+3]->setText(item.m_btn4Str); + m_itemBtnList[i*m_btnPerRow+4]->setText(item.m_btn5Str); + + m_itemBtnList[i*m_btnPerRow]->setVisible(item.m_btn1Visible); + m_itemBtnList[i*m_btnPerRow+1]->setVisible(item.m_btn2Visible); + m_itemBtnList[i*m_btnPerRow+2]->setVisible(item.m_btn3Visible); + m_itemBtnList[i*m_btnPerRow+3]->setVisible(item.m_btn4Visible); + m_itemBtnList[i*m_btnPerRow+4]->setVisible(item.m_btn5Visible); + + itemidx++; + } + else + { + m_itemFrameList.at(i)->hide(); + } + } + + // 翻页按钮 + if (m_curPage <= 1) + { + ui->buttonPgUp->setEnabled(false); + } + else + { + ui->buttonPgUp->setEnabled(true); + } + if (m_curPage >= pageNums) + { + ui->buttonPgDn->setEnabled(false); + } + else + { + ui->buttonPgDn->setEnabled(true); + } + + if(pageNums == 0) + { + m_curPage = 0; + } + + // 页信息 + QString str = tr("pageNum: ") + QString("%1/%2").arg(m_curPage).arg(pageNums);//页数: + ui->labelPage->setText(str); +} + +//按钮动作 +void ControlActionWidget::btnAction(int rowidx, int btnidx, int event) +{ + int nidx = (rowidx - 1) + (m_curPage - 1) * m_itemPerPage; + int size = m_itemList.size(); + if(size <= 0) + { + return; + } + + if(nidx >= size) + { + return; + } + + OutCtrlItem item = m_itemList[nidx]; + int def = item.m_def; + int fun = -1; + + switch(btnidx) + { + case 1: + switch(event) + { + case BTNCLICK: + fun = item.m_btn1ClickFun; + break; + case BTNPRE: + fun = item.m_btn1PreFun; + break; + case BTNREL: + fun = item.m_btn1RelFun; + break; + } + break; + case 2: + switch(event) + { + case BTNCLICK: + fun = item.m_btn2ClickFun; + break; + case BTNPRE: + fun = item.m_btn2PreFun; + break; + case BTNREL: + fun = item.m_btn2RelFun; + break; + } + break; + case 3: + switch(event) + { + case BTNCLICK: + fun = item.m_btn3ClickFun; + break; + case BTNPRE: + fun = item.m_btn3PreFun; + break; + case BTNREL: + fun = item.m_btn3RelFun; + break; + } + break; + case 4: + switch(event) + { + case BTNCLICK: + fun = item.m_btn4ClickFun; + break; + case BTNPRE: + fun = item.m_btn4PreFun; + break; + case BTNREL: + fun = item.m_btn4RelFun; + break; + } + break; + case 5: + switch(event) + { + case BTNCLICK: + fun = item.m_btn5ClickFun; + break; + case BTNPRE: + fun = item.m_btn5PreFun; + break; + case BTNREL: + fun = item.m_btn5RelFun; + break; + } + break; + default: + fun = -1; + break; + } + excuteOrder(def,fun); +} + +void ControlActionWidget::slotSpeed(int speed) // 手动换挡 +{ + m_speedLevel = speed; +} + +//执行按钮动作 +void ControlActionWidget::excuteOrder(int def, int fun) +{ + if(def < 0 || fun < 0) + { + return; + } + + switch(fun) + { + case OUTCONTROL_ENABLE: + g_pMachine->motoServoCtrl(def, UP_OPEN_ON); + break; + case OUTCONTROL_DISABLE: + g_pMachine->motoServoCtrl(def, DOWN_CLOSE_OFF); + break; + case OUTCONTROL_JOGP://电机点动正转 + g_pMachine->motoMove(def, MT_MOVE_DIR_POSI, m_speedLevel); + break; + + case OUTCONTROL_JOGN://电机点动反转 + g_pMachine->motoMove(def, MT_MOVE_DIR_NEGA, m_speedLevel); + break; + + case OUTCONTROL_STOP://电机点动停止 + g_pMachine->motoMove(def, MT_MOVE_DIR_STOP, 0); + break; + case OUTCONTROL_ZERO://电机归零 + g_pMachine->motoToZero(def); + break; + case OUTCONTROL_UP://气缸上升,输出控制方式的电机正转 + g_pMachine->outputCtrl(def, UP_OPEN_ON, 0); + break; + case OUTCONTROL_DOWN://气缸下降,输出控制方式的电机反转 + g_pMachine->outputCtrl(def, DOWN_CLOSE_OFF, 0); + break; + case MOTORHEADO_UP://缝纫机头1升降 + g_pMachine->outputCtrl(def, UP_OPEN_ON, 1); + break; + case MOTORHEADO_DOWN://缝纫机头1下降 + g_pMachine->outputCtrl(def, DOWN_CLOSE_OFF, 1); + break; + case MANUALACTION_RUN://手动动作执行 + g_pMachine->manualAction(def); + break; + case OUTCONTROL_OPEN://电磁阀开 + g_pMachine->outputCtrl(def, UP_OPEN_ON, 0); + break; + case OUTCONTROL_CLOSE://电磁阀合 + g_pMachine->outputCtrl(def, DOWN_CLOSE_OFF, 0); + break; + case OUTCONTROL_STARTOIL://开始(如手动加油) + g_pMachine->manualOil(1); + break; + case OUTCONTROL_STOPOIL://停止(如手动加油) + g_pMachine->manualOil(0); + break; + } +} + +//设置类型图标 +void ControlActionWidget::setTypeLogo(QString tStyle) +{ + ui->buttonTypeLogo->setUnPreBtnLogo(tStyle); +} + +//设置主title +void ControlActionWidget::setMainTitle(QString str) +{ + ui->labelMainTitle->setText(str); +} + +//设置副title +void ControlActionWidget::setSubTitle(QString str) +{ + ui->labelSubTitle->setText(str); +} + +void ControlActionWidget::addItemList(QList itemList) +{ + m_itemList.append(itemList); + m_allItemList.append(itemList); +} + +//控制按钮被点击 +void ControlActionWidget::slotItemBtnClicked() +{ + MyButton *button = (MyButton*) this->sender() ; + + if(button == NULL) + { + return; + } + + //获取所触发按钮的行和按钮索引 + int rowIdx,btnIdx; + rowIdx = btnIdx = 1; + for(int i = 0; i < m_itemBtnList.size(); i++) + { + if(button == m_itemBtnList[i]) + { + rowIdx = i / m_btnPerRow + 1; + btnIdx = i % m_btnPerRow + 1; + btnAction(rowIdx,btnIdx,BTNCLICK); + break; + } + } +} + +//控制按钮按下 +void ControlActionWidget::slotItemBtnPressed() +{ + MyButton *button = (MyButton*) this->sender() ; + + if(button == NULL) + { + return; + } + + //获取所触发按钮的行和按钮索引 + int rowIdx,btnIdx; + rowIdx = btnIdx = 1; + for(int i = 0; i < m_itemBtnList.size(); i++) + { + if(button == m_itemBtnList[i]) + { + rowIdx = i / m_btnPerRow + 1; + btnIdx = i % m_btnPerRow + 1; + btnAction(rowIdx,btnIdx,BTNPRE); + break; + } + } +} + +//控制按钮抬起 +void ControlActionWidget::slotItemBtnReleased() +{ + MyButton *button = (MyButton*) this->sender() ; + + if(button == NULL) + { + return; + } + + //获取所触发按钮的行和按钮索引 + int rowIdx,btnIdx; + rowIdx = btnIdx = 1; + for(int i = 0; i < m_itemBtnList.size(); i++) + { + if(button == m_itemBtnList[i]) + { + rowIdx = i / m_btnPerRow + 1; + btnIdx = i % m_btnPerRow + 1; + btnAction(rowIdx,btnIdx,BTNREL); + break; + } + } +} + +void ControlActionWidget::on_buttonPgUp_clicked() +{ + m_curPage--; + refreshUi(); +} + +void ControlActionWidget::on_buttonPgDn_clicked() +{ + m_curPage++; + refreshUi(); +} + +void ControlActionWidget::on_buttonBack_clicked() +{ + this->hide(); +} diff --git a/sharedviews/controlactionwidget.h b/sharedviews/controlactionwidget.h new file mode 100644 index 0000000..1916bfd --- /dev/null +++ b/sharedviews/controlactionwidget.h @@ -0,0 +1,77 @@ +#ifndef CONTROLACTIONWIDGET_H +#define CONTROLACTIONWIDGET_H + +#include +#include "items/outctrlitem.h" +#include "mybutton.h" +#include "setcontrolstyle.h" +#include +#include +#include "mctype/mainwidgetfunction.h" +#include + +#define BORDER_RADIUS "5" + +namespace Ui { +class ControlActionWidget; +} + +class ControlActionWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ControlActionWidget(QWidget *parent = 0); + ~ControlActionWidget(); + +private: + Ui::ControlActionWidget *ui; + + enum BTNEVENT { BTNCLICK = 1, BTNPRE, BTNREL}; + + int m_itemPerPage;//界面每页条目数 + int m_btnPerRow;//每行按钮数 + int m_curPage;//当前页数 + QList m_itemFrameList; + QList m_itemLabelList; + QList m_itemBtnList; + QList m_allItemList; + QList m_itemList; + + QTimer * m_motorTimer; // 电机停止命令多次发送 + int m_speedLevel;//换挡速度 + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006();//初始化窗体控件为1920x1080分辨率 + + void initControlStyle();//初始化窗体控件样式 + + void btnAction(int rowidx, int btnidx, int event);//按钮动作,参数包括行、按钮索引、按钮事件 + void excuteOrder(int def,int fun);//执行按钮动作 + +public: + void setTypeLogo(QString tStyle);//设置类型图标 + void setMainTitle(QString str);//设置主title + void setSubTitle(QString str);//设置副title + + void refreshUi(int idx = 0); + +public: + void addItemList(QList itemList); + +private slots: + void slotItemBtnClicked();//控制按钮被点击 + void slotItemBtnPressed();//控制按钮按下 + void slotItemBtnReleased();//控制按钮抬起 + void on_buttonPgUp_clicked(); + void on_buttonPgDn_clicked(); + void on_buttonBack_clicked(); + +public slots: + void slotSpeed(int speed); + +}; + +#endif // CONTROLACTIONWIDGET_H diff --git a/sharedviews/controlactionwidget.ui b/sharedviews/controlactionwidget.ui new file mode 100644 index 0000000..f661782 --- /dev/null +++ b/sharedviews/controlactionwidget.ui @@ -0,0 +1,1577 @@ + + + ControlActionWidget + + + + 0 + 0 + 1024 + 600 + + + + Form + + + + + 0 + 0 + 1024 + 600 + + + + background-color: rgb(182, 182, 182); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 30 + 10 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + + + + 760 + 570 + 241 + 31 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 80 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 0 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 160 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + buttonPgUp + buttonPgDn + buttonBack + + + + + 110 + 10 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Control action + + + + + + 140 + 40 + 261 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Control action < Auxiliary function + + + + + + 20 + 570 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + PageNums: 1/1 + + + + + + 140 + 80 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 120 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 240 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 200 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 280 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 160 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 320 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 360 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 400 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 440 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 480 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + 140 + 520 + 760 + 32 + + + + background-color: rgb(239, 239, 239); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 4 + 331 + 16 + + + + TextLabel + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + 350 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 430 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 510 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 590 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + 670 + 4 + 75 + 23 + + + + Qt::NoFocus + + + PushButton + + + + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/debuginfodialog.cpp b/sharedviews/debuginfodialog.cpp new file mode 100644 index 0000000..af15d0a --- /dev/null +++ b/sharedviews/debuginfodialog.cpp @@ -0,0 +1,249 @@ +#include "debuginfodialog.h" +#include "ui_debuginfodialog.h" + +DebugInfoDialog::DebugInfoDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::DebugInfoDialog), + m_itemPerPage(25) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setAttribute(Qt::WA_TranslucentBackground, true);//设置窗体背景透明 + setWindowModality(Qt::ApplicationModal); + connect(g_pMachine, SIGNAL(siDebugInfo()), this, SLOT(slotDebugInfo())); + + initDialog(); + initControl(); +} + +DebugInfoDialog::~DebugInfoDialog() +{ + delete ui; +} +void DebugInfoDialog::initDialog() +{ + m_curPages = 1;//当前页数 + m_pageNums = 1;//总页数 + m_infoList.clear(); +} +void DebugInfoDialog::initControl() +{ + m_DebugInfoBtnList.append(ui->button1); + m_DebugInfoBtnList.append(ui->button2); + m_DebugInfoBtnList.append(ui->button3); + m_DebugInfoBtnList.append(ui->button4); + m_DebugInfoBtnList.append(ui->button5); + m_DebugInfoBtnList.append(ui->button6); + m_DebugInfoBtnList.append(ui->button7); + m_DebugInfoBtnList.append(ui->button8); + m_DebugInfoBtnList.append(ui->button9); + m_DebugInfoBtnList.append(ui->button10); + m_DebugInfoBtnList.append(ui->button11); + m_DebugInfoBtnList.append(ui->button12); + m_DebugInfoBtnList.append(ui->button13); + m_DebugInfoBtnList.append(ui->button14); + m_DebugInfoBtnList.append(ui->button15); + m_DebugInfoBtnList.append(ui->button16); + m_DebugInfoBtnList.append(ui->button17); + m_DebugInfoBtnList.append(ui->button18); + m_DebugInfoBtnList.append(ui->button19); + m_DebugInfoBtnList.append(ui->button20); + m_DebugInfoBtnList.append(ui->button21); + m_DebugInfoBtnList.append(ui->button22); + m_DebugInfoBtnList.append(ui->button23); + m_DebugInfoBtnList.append(ui->button24); + m_DebugInfoBtnList.append(ui->button25); + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + initControlStyle();//初始化窗体控件样式 + //refreshUi(); +} + +void DebugInfoDialog::initResolution1910() +{ + //上状态栏 + this->resize(1322,935); + this->move(192,65); + ui->frameBack->setGeometry(0,0,1322,935); + ui->labelMainTitle->setGeometry(12,8,300,40); + for(int i = 0; i < m_itemPerPage; i++) + { + m_DebugInfoBtnList[i]->setGeometry(30,52 + i * 34,800,30); + } + ui->labelPage->setGeometry(12,890,400,40); + ui->buttonPgUp->setGeometry(1040,40,118,40); + ui->buttonPgDn->setGeometry(1178,40,118,40); + ui->buttonCancel->setGeometry(1040,100,118,40); +} +void DebugInfoDialog::initResolution1006() +{ + m_itemPerPage = m_itemPerPage -8; + this->resize(707,513); + this->move(101,36); + ui->frameBack->setGeometry(0,0,710,513); + ui->labelMainTitle->setGeometry(10,6,300,28); + for(int i = 0; i < m_itemPerPage; i++) + { + m_DebugInfoBtnList[i]->setGeometry(10,30 + i * 27,500,24); + } + ui->labelPage->setGeometry(10,485,150,30); + ui->buttonPgUp->setGeometry(520,40,82,30); + ui->buttonPgDn->setGeometry(610,40,82,30); + ui->buttonCancel->setGeometry(520,80,82,30); +} +//初始化窗体控件样式 +void DebugInfoDialog::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + //背景图 + //QString style1 = "background-color: rgb(62, 62, 62);outline:none;border:0px;border-radius:10px;"; + QString style1 = "background-color: rgb(246, 242, 239);outline:none;border:0px;border-radius:10px;"; + ui->frameBack->setStyleSheet(style1); + ui->labelMainTitle->setFont(fontNormal_3); + ui->labelMainTitle->setStyleSheet(LABELGREYSTYLE); + + QString style2 = "border:0px;text-align:left;background-color:rgba(255, 255, 255, 0);color: rgb(78, 78, 78);";//0, 183, 13 + for(int i = 0; i < m_DebugInfoBtnList.size(); i++) + { + m_DebugInfoBtnList[i]->setStyleSheet(style2);//文本左对齐 + m_DebugInfoBtnList[i]->setFont(fontNormal_4); + } + ui->labelPage->setFont(fontNormal_4); + ui->labelPage->setStyleSheet(LABELGREYSTYLE); + ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); + ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); + ui->buttonCancel->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()),12); +} + +void DebugInfoDialog::addListInfo() +{ + m_infoList = g_pSettings->readToCsv(TYPE_DEBUGINFO);//读取 QStringList + refreshUi(); +} + +void DebugInfoDialog::refreshUi() +{ + int itemNum; + if (m_infoList.size() <= 0) + { + itemNum = 0; + + for (int i = 0; i < m_itemPerPage; i++) + { + m_DebugInfoBtnList.at(i)->hide(); + } + ui->labelPage->setText(tr("pageNum: 0/0"));//页数: 0/0 + ui->buttonPgUp->setEnabled(false); + ui->buttonPgDn->setEnabled(false); + //ui->buttonOk->setEnabled(false); + + return; + } + else + { + itemNum = m_infoList.size(); + } + + m_pageNums = (itemNum + m_itemPerPage - 1)/m_itemPerPage;// 计算页数 + if (m_curPages > m_pageNums)// 当前页 + { + m_curPages = m_pageNums; + } + if (m_curPages <= 1 && itemNum != 0) + { + m_curPages = 1; + } + + int itemidx = (m_curPages - 1) * m_itemPerPage; + + for (int i = 0; i < m_itemPerPage; i++) + { + if (itemidx < itemNum) + { + //设置图标和文件夹名称 + m_DebugInfoBtnList[i]->setText(m_infoList.at(itemidx)); + m_DebugInfoBtnList.at(i)->show(); + + itemidx++; + } + else + { + m_DebugInfoBtnList.at(i)->hide(); + } + } + + // 翻页按钮 + if (m_curPages <= 1) + { + ui->buttonPgUp->setEnabled(false); + } + else + { + ui->buttonPgUp->setEnabled(true); + } + if (m_curPages >= m_pageNums) + { + ui->buttonPgDn->setEnabled(false); + } + else + { + ui->buttonPgDn->setEnabled(true); + } + + // 页信息 + if(m_pageNums == 0) + { + m_curPages = 0; + } + + QString str = tr("pageNum: ") + QString("%1/%2").arg(m_curPages).arg(m_pageNums);//页数: + ui->labelPage->setText(str); +} +void DebugInfoDialog::slotDebugInfo() +{ + DebugInfo info;//调试信息 + char mDebugInfoStr[1024+1]; + + info = g_pMachine->getDebugInfo(); + memcpy(mDebugInfoStr, info.debugInfoStr, 1024); + mDebugInfoStr[1024] = 0; + + QString strDebugInfoStr; + strDebugInfoStr.sprintf("%s", mDebugInfoStr); + QString strCurTime = QDateTime::currentDateTime().toString("yyyy/MM/dd/hh:mm:ss");//时间 + QString strMessage; + strMessage = QString("%1//%2").arg(strCurTime).arg(strDebugInfoStr);//时间,内容 + m_infoList.insert(0,strMessage); + + //m_infoList = g_pSettings->readToCsv(TYPE_DEBUGINFO);//读取 QStringList + refreshUi(); +} +void DebugInfoDialog::on_buttonCancel_clicked() +{ + done(0); +} +void DebugInfoDialog::on_buttonPgUp_clicked() +{ + m_curPages--; + refreshUi(); +} +void DebugInfoDialog::on_buttonPgDn_clicked() +{ + m_curPages++; + refreshUi(); +} diff --git a/sharedviews/debuginfodialog.h b/sharedviews/debuginfodialog.h new file mode 100644 index 0000000..ee67e57 --- /dev/null +++ b/sharedviews/debuginfodialog.h @@ -0,0 +1,47 @@ +#ifndef DEBUGINFODIALOG_H +#define DEBUGINFODIALOG_H + +#include +#include +#include +#include "setcontrolstyle.h" +#include "mybutton.h" + +namespace Ui { +class DebugInfoDialog; +} + +class DebugInfoDialog : public QDialog +{ + Q_OBJECT + +public: + explicit DebugInfoDialog(QWidget *parent = 0); + ~DebugInfoDialog(); +public: + void initDialog(); + void refreshUi(); + void addListInfo(); +private: + Ui::DebugInfoDialog *ui; +private: + QList m_DebugInfoBtnList; + QStringList m_infoList; + int m_itemPerPage; + int m_curPages;//当前页数 + int m_pageNums;//总页数 + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006(); + void initControlStyle();//初始化窗体控件样式 +public slots: + void slotDebugInfo(); +private slots: + void on_buttonCancel_clicked(); + void on_buttonPgUp_clicked(); + void on_buttonPgDn_clicked(); +}; + +#endif // DEBUGINFODIALOG_H diff --git a/sharedviews/debuginfodialog.ui b/sharedviews/debuginfodialog.ui new file mode 100644 index 0000000..a2d3e3f --- /dev/null +++ b/sharedviews/debuginfodialog.ui @@ -0,0 +1,651 @@ + + + DebugInfoDialog + + + + 0 + 0 + 702 + 603 + + + + Dialog + + + + + + + + 0 + 0 + 701 + 600 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 40 + 440 + 21 + + + + Qt::NoFocus + + + + + + + + + + 0 + 0 + + + + + + + 10 + 189 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 249 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 129 + 440 + 21 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 279 + 440 + 21 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 309 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 369 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 159 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 69 + 440 + 21 + + + + Qt::NoFocus + + + + + + + + + + 0 + 0 + + + + + + + 10 + 219 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 99 + 440 + 21 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 339 + 440 + 21 + + + + Qt::NoFocus + + + + + + + + + + + + 480 + 50 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 560 + 20 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 480 + 20 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 10 + 570 + 101 + 16 + + + + PageNums: 1/1 + + + + + + 10 + 10 + 72 + 15 + + + + DebugInfo: + + + + + + 10 + 399 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 429 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 459 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 489 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 520 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 550 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 550 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 550 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 550 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 550 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 550 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 550 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 550 + 440 + 20 + + + + Qt::NoFocus + + + + + + + + + buttonCancel + buttonPgDn + buttonPgUp + labelPage + labelMainTitle + button1 + button3 + button5 + button9 + button6 + button12 + button10 + button11 + button4 + button7 + button8 + button2 + button13 + button14 + button15 + button16 + button17 + button18 + button19 + button20 + button21 + button22 + button23 + button24 + button25 + + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/debugviews/debugdialog.cpp b/sharedviews/debugviews/debugdialog.cpp new file mode 100644 index 0000000..a96b379 --- /dev/null +++ b/sharedviews/debugviews/debugdialog.cpp @@ -0,0 +1,315 @@ +#include "debugdialog.h" +#include "ui_debugdialog.h" + +DebugDialog::DebugDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::DebugDialog) +{ + ui->setupUi(this); + + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + setAttribute(Qt::WA_TranslucentBackground, true);//设置窗体背景透明 + setFocusPolicy(Qt::NoFocus); + initControlStyle(); + m_flag = 0; + m_funType = 0; + m_headParaFlag = 0; + m_mcParaFlag = 0; + m_id = 0; + m_val = 0; + + memset(m_headParaValues.paraBuf, 0, sizeof(m_headParaValues.paraBuf)); + memset(m_mcParaValues.buf, 0, sizeof(ParaStruct)); + memset(m_wkParaValues.buf, 0, sizeof(ParaStruct)); +} + +DebugDialog::~DebugDialog() +{ + delete ui; +} + +void DebugDialog::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->buttonCancel->setWhiteBlueBottomStyle(); + ui->buttonOk->setWhiteBlueBottomStyle(); +} + +void DebugDialog::resizeUI(int w, int h) +{ + this->resize(w,h); + ui->frameBack->setGeometry(0,0,w,h); +} + +void DebugDialog::resizeTittle(int x, int y, int w, int h) +{ + ui->labelTitle->setGeometry(x,y,w,h); +} + +void DebugDialog::resizeCancelBtn(int x, int y, int w, int h) +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + ui->buttonCancel->setGeometry(x,y,w,h); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()+"_1"),12); +} +void DebugDialog::resizeOkBtn(int x, int y, int w, int h) +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + ui->buttonOk->setGeometry(x,y,w,h); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()+"_1"),12); +} +void DebugDialog::setTitleStr(QString str) +{ + ui->labelTitle->setText(str); +} + +void DebugDialog::setFlag(int flag) +{ + m_flag = flag; +} +void DebugDialog::excuteOrder(int def, int fun) +{ + //def 对应的事件宏定义 + //fun 动作 + if(def < 0 || fun < 0) + { + return; + } + + switch(fun) + { + case OUTCONTROL_ENABLE: + g_pMachine->motoServoCtrl(def, UP_OPEN_ON); + break; + case OUTCONTROL_DISABLE: + g_pMachine->motoServoCtrl(def, DOWN_CLOSE_OFF); + break; + case OUTCONTROL_JOGP://电机点动正转 + g_pMachine->motoMove(def, MT_MOVE_DIR_POSI, 0); + break; + case OUTCONTROL_JOGN://电机点动反转 + g_pMachine->motoMove(def, MT_MOVE_DIR_NEGA, 0); + break; + case OUTCONTROL_STOP://电机点动停止 + g_pMachine->motoMove(def, MT_MOVE_DIR_STOP, 0); + break; + case OUTCONTROL_ZERO://电机归零 + g_pMachine->motoToZero(def); + break; + case OUTCONTROL_UP://气缸上升,输出控制方式的电机正转 + g_pMachine->outputCtrl(def, UP_OPEN_ON, 0); + break; + case OUTCONTROL_DOWN://气缸下降,输出控制方式的电机反转 + g_pMachine->outputCtrl(def, DOWN_CLOSE_OFF, 0); + break; + case MANUALACTION_RUN://手动动作执行 + g_pMachine->manualAction(def); + break; + case OUTCONTROL_OPEN://电磁阀开 + g_pMachine->outputCtrl(def, UP_OPEN_ON, 0); + break; + case OUTCONTROL_CLOSE://电磁阀合 + g_pMachine->outputCtrl(def, DOWN_CLOSE_OFF, 0); + break; + case OUTCONTROL_FOLLOWPOS://跟随位 缠绕压脚 跟随位 + g_pMachine->outputCtrl(def, UP_OPEN_ON, 2); + break; + case OUTCONTROL_ZEROPOS://锯齿零位 + g_pMachine->outputCtrl(def, DOWN_CLOSE_OFF, 0); + break; + case OUTCONTROL_TOUP://锯齿上位 + g_pMachine->outputCtrl(def, DOWN_CLOSE_OFF, 2); + break; + case OUTCONTROL_CTRL1://锯齿摆动位1 + g_pMachine->outputCtrl(def, UP_OPEN_ON, 0); + break; + case OUTCONTROL_CTRL2://锯齿摆动位2 + g_pMachine->outputCtrl(def, UP_OPEN_ON, 2); + break; + case OUTCONTROL_STARTOIL://开始(如手动加油) + g_pMachine->manualOil(1); + break; + case OUTCONTROL_STOPOIL://停止(如手动加油) + g_pMachine->manualOil(0); + break; + } +} +void DebugDialog::on_buttonCancel_clicked() +{ + if(m_flag == 1)//已经发送打开命令 + { + if(g_pMachine != NULL) + { + g_pMachine->encoderVal(0);//显示M轴绝对值编码器值,1打开,0关闭 + m_flag = -1; + } + } + this->close(); +} +void DebugDialog::on_buttonOk_clicked() +{ + if(m_funType == DEBUG_DIECUTTER|| + m_funType == DEBUG_DIECUTTER) + { + saveHeadPara(); + } + + if(m_funType == DEBUG_TRIM||//主轴调试 + m_funType == DEBUG_NEEDLESHUTTLE)//针梭调试 + { + saveMcPara();//发送机器参数 + } +} +//设置界面类型 +void DebugDialog::setFunType(int sel) +{ + m_funType = sel; + if(m_funType == DEBUG_DIECUTTER || + m_funType == DEBUG_DIECUTTER ) + { + g_pMachine->getHeadParasFromMachine(1);//获取机头板参数 + } + if(m_funType == DEBUG_TRIM || + m_funType == DEBUG_NEEDLESHUTTLE ) + { + g_pMachine->getParasFromMachine();//获取参数 + } +// if(m_funType == DEBUG_CUTHEAD || +// m_funType == DEBUG_SPINDLE ) +// { +// ui->buttonOk->hide(); +// } +// else +// { +// ui->buttonOk->show(); +// } +} +//收到下位机参数改变信号的槽 +void DebugDialog::paraChange(int type, int id) +{ + m_mcParaFlag = 0;//参数改变的标志 + //点了主板的按钮后,现在这个g_pMachine就是对应主板的 + if (type == SEW_MCPARA_MACH) + { + if (id == 0) + { //得到当前主板的参数 + memcpy(&m_mcParaValues, &g_pMachine->getMcPara(), sizeof(ParaStruct)); + m_mcParaFlag= 1; + emit siMcParaChange(); + } + } + else if (type == SEW_MCPARA_WORK) + { + if (id == 0) + { + memcpy(&m_wkParaValues, &g_pMachine->getWkPara(), sizeof(ParaStruct)); + // m_mcParaFlag = 1; + emit siWkParaChange(); + } + } +} + +//外围板参数改变的槽函数 +void DebugDialog::EXBParaChange() +{ + m_headParaFlag = 0; + if(g_pMachine->getHeadPara(0) != NULL) + { + memcpy(&m_headParaValues, g_pMachine->getHeadPara(0), sizeof(HeadInfo)); + m_headParaFlag = 1; + emit siEXBParaChange(); + } +} +//读取机头板参数 +int DebugDialog::getHeadPara(int idx) +{ + int value = 0; + value = m_headParaValues.paraBuf[idx]; + return value; +} +//设置机头板参数 +void DebugDialog::setHeadPara(int id,int val) +{ + m_headParaValues.paraBuf[id] = val; +} +//发送机头板参数 +void DebugDialog::saveHeadPara() +{ + if(g_pMachine != NULL) + { + g_pMachine->setHeadBoardPara(&m_headParaValues); + } +} + + +//读取机器参数 +int DebugDialog::getMcPara(int idx) +{ + int mcValue = 0; + mcValue = m_mcParaValues.buf[idx]; + return mcValue; +} +//设置机器参数 +void DebugDialog::setMcPara(int id,int val) +{ + //单个保存 +// m_id = id; +// m_val = val; + m_mcParaValues.buf[id] = val; +} +//发送机器参数 +void DebugDialog::saveMcPara() +{ + if(g_pMachine != NULL) + { + //单个保存 + //g_pMachine->setAMcPara(m_id+1, m_val); + g_pMachine->setMcPara(&m_mcParaValues); + } +} +//读取工作参数 +int DebugDialog::getWkPara(int idx) +{ + int wkValue = 0; + wkValue = m_wkParaValues.buf[idx]; + return wkValue; +} +//设置工作参数 +void DebugDialog::setWkPara(int id,int val) +{ + //单个保存 +// m_id = id; +// m_val = val; + m_wkParaValues.buf[id] = val; +} +//发送工作参数 +void DebugDialog::saveWkPara() +{ + if(g_pMachine != NULL) + { + //单个保存 + //g_pMachine->setAMcPara(m_id+1, m_val); + g_pMachine->setWkPara(&m_wkParaValues); + } +} + + + + + diff --git a/sharedviews/debugviews/debugdialog.h b/sharedviews/debugviews/debugdialog.h new file mode 100644 index 0000000..ceba504 --- /dev/null +++ b/sharedviews/debugviews/debugdialog.h @@ -0,0 +1,99 @@ +#ifndef DEBUGDIALOG_H +#define DEBUGDIALOG_H + +#include +#include "sharedviews/setcontrolstyle.h" + +namespace Ui { +class DebugDialog; +} + +class DebugDialog : public QDialog +{ + Q_OBJECT + +public: + explicit DebugDialog(QWidget *parent = 0); + ~DebugDialog(); + + //调试功能参数类型的枚举 + enum DEBUG_FUNCTION { + DEBUG_TRIM = 1, // 剪线 + DEBUG_DIECUTTER, //冲刀 + DEBUG_NEEDLESHUTTLE // 针梭 + }; +//控制动作 + enum OUTCONTROL_FUN { + OUTCONTROL_ENABLE = 1, // 使能 + OUTCONTROL_DISABLE, // 失能 + OUTCONTROL_JOGP, // 正转 + OUTCONTROL_JOGN, // 反转 + OUTCONTROL_STOP, // 停止 + OUTCONTROL_ZERO, // 归零 + OUTCONTROL_UP, // 上升 + OUTCONTROL_DOWN, // 下降 + MANUALACTION_RUN, // 执行 + OUTCONTROL_OPEN, // 打开 + OUTCONTROL_CLOSE, // 关闭 + OUTCONTROL_STARTOIL, // 开始 + OUTCONTROL_STOPOIL, // 停止 + OUTCONTROL_FOLLOWPOS, // 压脚跟随位 + OUTCONTROL_TOUP, // 锯齿上位 + OUTCONTROL_CTRL1 , //锯齿摆动位1 + OUTCONTROL_CTRL2, //锯齿摆动位2 + OUTCONTROL_ZEROPOS //锯齿零位 + }; + +private: + Ui::DebugDialog *ui; + +private: + void initControlStyle();//初始化窗体样式 + int m_flag; + HeadInfo m_headParaValues; + ParaStruct m_mcParaValues; + ParaStruct m_wkParaValues; + + int m_funType;//功能类型 + int m_headParaFlag;//收到机头板参数改变标志 + int m_mcParaFlag; + int m_id; + int m_val; + +public: + void resizeUI(int w, int h); + void resizeTittle(int x, int y, int w, int h); + void resizeCancelBtn(int x, int y, int w, int h); + void resizeOkBtn(int x, int y, int w, int h); + void setTitleStr(QString str); + void setFlag(int flag = 0); + void excuteOrder(int def, int fun);//控制动作 + void setFunType(int sel); + int getHeadPara(int idx=0);//读取外围板参数 + int getMcPara(int idx = 0);//读取机器参数 + int getWkPara(int idx = 0);//读取工作参数 + void setHeadPara(int id = 0,int val = 0);//设置机头板参数 + void setMcPara(int id = 0,int val = 0);//设置机器参数 + void setWkPara(int id = 0,int val = 0);//设置工作参数 + void saveHeadPara();//发送外围板参数 + void saveMcPara();//发送机器参数 + void saveWkPara();//发送工作参数 + + inline int getParaChange(){return m_headParaFlag;} + inline int getMcParaChange(){return m_mcParaFlag;} + //inline int getMcParaChange(){return m_wkParaFlag;} + +public slots: + void EXBParaChange();//外围板参数改变 + void paraChange(int type, int id);//机器工作参数改变 +private slots: + void on_buttonCancel_clicked(); + void on_buttonOk_clicked(); + +signals: + void siEXBParaChange(); + void siMcParaChange(); + void siWkParaChange(); +}; + +#endif // DEBUGDIALOG_H diff --git a/sharedviews/debugviews/debugdialog.ui b/sharedviews/debugviews/debugdialog.ui new file mode 100644 index 0000000..7e03bb3 --- /dev/null +++ b/sharedviews/debugviews/debugdialog.ui @@ -0,0 +1,102 @@ + + + DebugDialog + + + + 0 + 0 + 572 + 427 + + + + Dialog + + + + + 0 + 0 + 571 + 431 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 0 + 0 + 571 + 48 + + + + + + + DebugFun + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 480 + 380 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 400 + 380 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/debugviews/dialogcutline.cpp b/sharedviews/debugviews/dialogcutline.cpp new file mode 100644 index 0000000..f17b897 --- /dev/null +++ b/sharedviews/debugviews/dialogcutline.cpp @@ -0,0 +1,292 @@ +#include "dialogcutline.h" +#include "ui_dialogcutline.h" + +DialogCutLine::DialogCutLine(QWidget *parent) : + DebugDialog(parent), + ui(new Ui::DialogCutLine) +{ + ui->setupUi(this); + initControl(); + connect(this,SIGNAL(siWkParaChange()),this,SLOT(slotWkParaChangeValue())); +} + +DialogCutLine::~DialogCutLine() +{ + delete ui; +} +void DialogCutLine::initControl() +{ + this->setTitleStr(tr("CuttingLine debug"));//剪线调试 + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + initControlStyle();//初始化窗体控件样式 +} +void DialogCutLine::initResolution1910() +{ + this->resizeUI(1146,1040); + this->move((1920-this->width())/2,(1080-this->height())/2); + this->resizeTittle(40,50,946,60); + this->resizeCancelBtn(918,856,174,70); + this->resizeOkBtn(736,856,174,70); + ui->groupBoxAction->setGeometry(40,100,1256,750); + //主轴电机 + ui->label1->setGeometry(20,50,310,54); + ui->buttonJogP->setGeometry(360,50,120,54); + ui->buttonJogN->setGeometry(500,50,120,54); + ui->buttonZero->setGeometry(640,50,120,54); + ui->buttonEnable->setGeometry(780,50,120,54); + ui->buttonDisable->setGeometry(920,50,120,54); + //下剪刀剪线 + ui->label2->setGeometry(20,140,310,54); + ui->buttonOpen1->setGeometry(360,140,120,54);//90 + ui->buttonClose1->setGeometry(500,140,120,54); + //照明 + ui->label3->setGeometry(20,230,310,54); + ui->buttonOpen2->setGeometry(360,230,120,54);//90 + ui->buttonClose2->setGeometry(500,230,120,54); + //手动操作 + ui->label4->setGeometry(20,320,310,54); + ui->buttonFunction1->setGeometry(360,320,160,54);//90 + ui->buttonFunction2->setGeometry(540,320,160,54); + + ui->labelPara1->setGeometry(20,410,510,40); + ui->buttonPara1->setGeometry(590,410,180,54); + ui->labelUnit1->setGeometry(780,410,100,40); + + ui->labelPara2->setGeometry(20,500,510,40); + ui->buttonPara2->setGeometry(590,500,180,54); + ui->labelUnit2->setGeometry(780,500,100,40); + + ui->labelPara3->setGeometry(20,590,510,40); + ui->buttonPara3->setGeometry(590,590,180,54); + ui->labelUnit3->setGeometry(780,590,100,40); +} +void DialogCutLine::initResolution1006() +{ + this->resizeUI(660,600); + this->move((1024-this->width())/2,(600-this->height())/2); + this->resizeTittle(40,36,600,20); + this->resizeOkBtn(420,500,96,40); + this->resizeCancelBtn(525,500,96,40); + ui->groupBoxAction->setGeometry(40,80,600,420); + //主轴电机 + ui->label1->setGeometry(0,10,90,30); + ui->buttonJogP->setGeometry(90,10,90,36); + ui->buttonJogN->setGeometry(190,10,90,36); + ui->buttonZero->setGeometry(290,10,90,36); + ui->buttonEnable->setGeometry(390,10,90,36); + ui->buttonDisable->setGeometry(490,10,90,36); + //下剪刀剪线 + ui->label2->setGeometry(0,70,90,36); + ui->buttonOpen1->setGeometry(90,70,90,36);//60 + ui->buttonClose1->setGeometry(190,70,90,36); + //照明 + ui->label3->setGeometry(0,130,90,36); + ui->buttonOpen2->setGeometry(90,130,90,36);//60 + ui->buttonClose2->setGeometry(190,130,90,36); + //手动操作 + ui->label4->setGeometry(0,190,90,36); + ui->buttonFunction1->setGeometry(90,190,90,36);//60 + ui->buttonFunction2->setGeometry(190,190,90,36); + + ui->labelPara1->setGeometry(0,250,200,36); + ui->buttonPara1->setGeometry(300,250,120,36); + ui->labelUnit1->setGeometry(440,250,30,36); + + ui->labelPara2->setGeometry(0,300,200,36); + ui->buttonPara2->setGeometry(300,300,120,36);//50 + ui->labelUnit2->setGeometry(440,300,30,36); + + ui->labelPara3->setGeometry(0,350,200,36); + ui->buttonPara3->setGeometry(300,350,120,36); + ui->labelUnit3->setGeometry(440,350,30,36); +} +void DialogCutLine::initControlStyle() +{ + ui->groupBoxAction->setStyleSheet(TRANSPARENTSTYLE); + ui->groupBoxAction->setFont(fontNormal_1); + ui->label1->setStyleSheet(LABELGREYSTYLE); + ui->label1->setFont(fontNormal_1); + ui->label2->setStyleSheet(LABELGREYSTYLE); + ui->label2->setFont(fontNormal_1); + ui->label3->setStyleSheet(LABELGREYSTYLE); + ui->label3->setFont(fontNormal_1); + ui->label4->setStyleSheet(LABELGREYSTYLE); + ui->label4->setFont(fontNormal_1); + + ui->buttonJogP->setFont(fontNormal_1); + ui->buttonJogN->setFont(fontNormal_1); + ui->buttonZero->setFont(fontNormal_1); + ui->buttonEnable->setFont(fontNormal_1); + ui->buttonDisable->setFont(fontNormal_1); + + ui->buttonOpen1->setFont(fontNormal_1); + ui->buttonClose1->setFont(fontNormal_1); + + ui->buttonOpen2->setFont(fontNormal_1); + ui->buttonClose2->setFont(fontNormal_1); + + ui->buttonFunction1->setFont(fontNormal_1); + ui->buttonFunction2->setFont(fontNormal_1); + + + ui->labelPara1->setStyleSheet(LABELGREYSTYLE); + ui->labelPara1->setFont(fontNormal_1); + ui->buttonPara1->setFont(fontNormal_1); + ui->labelUnit1->setStyleSheet(LABELGREYSTYLE); + ui->labelUnit1->setFont(fontNormal_1); + + ui->labelPara2->setStyleSheet(LABELGREYSTYLE); + ui->labelPara2->setFont(fontNormal_1); + ui->buttonPara2->setFont(fontNormal_1); + ui->labelUnit2->setStyleSheet(LABELGREYSTYLE); + ui->labelUnit2->setFont(fontNormal_1); + + ui->labelPara3->setStyleSheet(LABELGREYSTYLE); + ui->labelPara3->setFont(fontNormal_1); + ui->buttonPara3->setFont(fontNormal_1); + ui->labelUnit3->setStyleSheet(LABELGREYSTYLE); + ui->labelUnit3->setFont(fontNormal_1); +} +//参数改变刷新 参数值 +void DialogCutLine::slotWkParaChangeValue() +{ + int mcParaFlag = this->getMcParaChange(); + if(mcParaFlag == 1) + { + s32 para1 =this->getWkPara(11); + float paraValue1 = para1*0.01; + QString paraValueStr1; + paraValueStr1.sprintf("%.2f",paraValue1); + ui->buttonPara1->setText(paraValueStr1); + + s32 para2 =this->getWkPara(12); + float paraValue2 = para2*0.01; + QString paraValueStr2; + paraValueStr2.sprintf("%.2f",paraValue2); + ui->buttonPara2->setText(paraValueStr2); + } +} + +//主轴电机 +void DialogCutLine::on_buttonJogP_pressed() +{ + this->excuteOrder(MT_LM,OUTCONTROL_JOGP); +} +void DialogCutLine::on_buttonJogP_released() +{ + this->excuteOrder(MT_LM,OUTCONTROL_STOP); +} + +void DialogCutLine::on_buttonJogN_pressed() +{ + this->excuteOrder(MT_LM,OUTCONTROL_JOGN); +} +void DialogCutLine::on_buttonJogN_released() +{ + this->excuteOrder(MT_LM,OUTCONTROL_STOP); +} + +void DialogCutLine::on_buttonZero_clicked() +{ + this->excuteOrder(MT_LM,OUTCONTROL_ZERO);//锯齿电机归零 +} + +void DialogCutLine::on_buttonEnable_clicked() +{ + this->excuteOrder(MT_LM,OUTCONTROL_ENABLE); +} + +void DialogCutLine::on_buttonDisable_clicked() +{ + this->excuteOrder(MT_LM,OUTCONTROL_DISABLE); +} +//下剪刀剪线 打开 +void DialogCutLine::on_buttonOpen1_clicked() +{ + this->excuteOrder(OT_DCUT_THREAD,OUTCONTROL_OPEN); +} +//下剪刀剪线 关闭 +void DialogCutLine::on_buttonClose1_clicked() +{ + this->excuteOrder(OT_DCUT_THREAD,OUTCONTROL_CLOSE); +} +//照明 打开 +void DialogCutLine::on_buttonOpen2_clicked() +{ + this->excuteOrder(OT_LIGHT,OUTCONTROL_OPEN); +} +//照明 关闭 +void DialogCutLine::on_buttonClose2_clicked() +{ + this->excuteOrder(OT_LIGHT,OUTCONTROL_CLOSE); +} +//手动操作 缝纫机头升降 +void DialogCutLine::on_buttonFunction1_clicked() +{ + g_pMachine->manualAction(SEW_HEAD_LIFT, 0, 0); +} +//手动操作 缝纫剪线 +void DialogCutLine::on_buttonFunction2_clicked() +{ + g_pMachine->manualAction(CUT_THREAD, 0, 0); +} + +void DialogCutLine::on_buttonPara1_clicked() +{ + // 剪线分线角度, 范围 0--36000,默认 20000 0.01度 + QTextCodec *cod = QTextCodec::codecForLocale(); + int rslt; + NumerInputDialog ndlg(this); + ndlg.setTitleStr(tr("Trimming line angle")); + ndlg.setUnitStr(cod->toUnicode("°")); + ndlg.setValueAndRange(ui->buttonPara1->text().toFloat()*100, 0, 36000, 2); + rslt = ndlg.exec(); + if (rslt == 1) + { + s32 val = ndlg.getValue(); + float value = val*0.01; + QString valueStr; + valueStr.sprintf("%.2f",value); + ui->buttonPara1->setText(valueStr); + this->setWkPara(11,val); + } +} + +void DialogCutLine::on_buttonPara2_clicked() +{ + //剪线完成角度 + QTextCodec *cod = QTextCodec::codecForLocale(); + int rslt; + NumerInputDialog ndlg(this); + ndlg.setTitleStr(tr("Trimming completion angle")); + ndlg.setUnitStr(cod->toUnicode("°")); + ndlg.setValueAndRange(ui->buttonPara1->text().toFloat()*100, 0, 36000, 2); + rslt = ndlg.exec(); + if (rslt == 1) + { + s32 val = ndlg.getValue(); + float value = val*0.01; + QString valueStr; + valueStr.sprintf("%.2f",value); + ui->buttonPara1->setText(valueStr); + this->setWkPara(12,val); + } +} + +void DialogCutLine::on_buttonPara3_clicked() +{ + //剪线行程 + +} diff --git a/sharedviews/debugviews/dialogcutline.h b/sharedviews/debugviews/dialogcutline.h new file mode 100644 index 0000000..05d0053 --- /dev/null +++ b/sharedviews/debugviews/dialogcutline.h @@ -0,0 +1,63 @@ +#ifndef DIALOGCUTLINE_H +#define DIALOGCUTLINE_H + +#include +#include +#include "debugdialog.h" +#include "sharedviews/numerinputdialog.h" + +namespace Ui { +class DialogCutLine; +} + +class DialogCutLine : public DebugDialog +{ + Q_OBJECT + +public: + explicit DialogCutLine(QWidget *parent = 0); + ~DialogCutLine(); +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006(); + void initControlStyle();//初始化窗体控件样式 +private slots: + void slotWkParaChangeValue(); + void on_buttonJogP_pressed(); + + void on_buttonJogP_released(); + + void on_buttonJogN_pressed(); + + void on_buttonJogN_released(); + + void on_buttonZero_clicked(); + + void on_buttonEnable_clicked(); + + void on_buttonDisable_clicked(); + + void on_buttonOpen1_clicked(); + + void on_buttonClose1_clicked(); + + void on_buttonOpen2_clicked(); + + void on_buttonClose2_clicked(); + + void on_buttonFunction1_clicked(); + + void on_buttonFunction2_clicked(); + + void on_buttonPara1_clicked(); + + void on_buttonPara2_clicked(); + + void on_buttonPara3_clicked(); + +private: + Ui::DialogCutLine *ui; +}; + +#endif // DIALOGCUTLINE_H diff --git a/sharedviews/debugviews/dialogcutline.ui b/sharedviews/debugviews/dialogcutline.ui new file mode 100644 index 0000000..1a33296 --- /dev/null +++ b/sharedviews/debugviews/dialogcutline.ui @@ -0,0 +1,487 @@ + + + DialogCutLine + + + + 0 + 0 + 729 + 492 + + + + Dialog + + + + + 30 + -10 + 621 + 481 + + + + + + + + + + + + 190 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogN + + + + + + 90 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogP + + + + + + 410 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Enable + + + + + + 510 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Disable + + + + + + 10 + 70 + 72 + 15 + + + + Spindle + + + + + + 300 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Zero + + + + + + 10 + 110 + 72 + 15 + + + + Lower the scissors to cut the thread + + + + + + 10 + 150 + 72 + 15 + + + + Lighting + + + + + + 10 + 190 + 72 + 15 + + + + Manual operation + + + + + + 90 + 100 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Open + + + + + + 190 + 100 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Close + + + + + + 340 + 355 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 30 + 360 + 181 + 16 + + + + Trimming line angle + + + + + + 430 + 360 + 54 + 12 + + + + deg + + + + + + 30 + 390 + 181 + 16 + + + + Trimming completion angle + + + + + + 340 + 390 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 430 + 400 + 54 + 12 + + + + deg + + + + + + 30 + 430 + 181 + 16 + + + + Thread trimming stroke + + + + + + 340 + 430 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 430 + 440 + 54 + 12 + + + + + + + + + + 190 + 140 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Close + + + + + + 90 + 140 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Open + + + + + + 190 + 180 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Sewing and thread cutting + + + + + + 90 + 180 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Sewing machine head lifting and lowering + + + + + + + diff --git a/sharedviews/debugviews/dialogdiecutter.cpp b/sharedviews/debugviews/dialogdiecutter.cpp new file mode 100644 index 0000000..a19b1b3 --- /dev/null +++ b/sharedviews/debugviews/dialogdiecutter.cpp @@ -0,0 +1,227 @@ +#include "dialogdiecutter.h" +#include "ui_dialogdiecutter.h" + +DialogDieCutter::DialogDieCutter(QWidget *parent) : + DebugDialog(parent), + ui(new Ui::DialogDieCutter) +{ + ui->setupUi(this); + initControl(); +} + +DialogDieCutter::~DialogDieCutter() +{ + delete ui; +} +void DialogDieCutter::initControl() +{ + this->setTitleStr(tr("DieCutter debug"));//冲刀调试 + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + initControlStyle();//初始化窗体控件样式 +} +void DialogDieCutter::initResolution1910() +{ + this->resizeUI(1146,1040); + this->resizeTittle(40,50,946,60); + this->move((1920-this->width())/2,(1080-this->height())/2); + this->resizeCancelBtn(918,856,174,70); + this->resizeOkBtn(736,856,174,70); + ui->groupBoxAction->setGeometry(40,100,1256,750); + //冲孔主轴电机 + ui->label1->setGeometry(20,50,310,54); + ui->buttonJogP1->setGeometry(360,50,120,54); + ui->buttonJogN1->setGeometry(500,50,120,54); + ui->buttonZero1->setGeometry(640,50,120,54); + ui->buttonEnable1->setGeometry(780,50,120,54); + ui->buttonDisable1->setGeometry(920,50,120,54); + //冲孔旋转 + ui->label2->setGeometry(20,140,310,54); + ui->buttonJogP2->setGeometry(360,140,120,54);//90 + ui->buttonJogN2->setGeometry(500,140,120,54); + ui->buttonZero2->setGeometry(640,140,120,54); + ui->buttonEnable2->setGeometry(780,140,120,54); + ui->buttonDisable2->setGeometry(920,140,120,54); + + //手动操作 + ui->label3->setGeometry(20,230,310,54); + ui->buttonFunction1->setGeometry(360,230,160,54);//90 + ui->buttonFunction2->setGeometry(540,230,160,54); + ui->buttonFunction3->setGeometry(720,230,160,54); + ui->buttonFunction4->setGeometry(900,230,160,54); + + ui->buttonFunction5->setGeometry(360,320,160,54); + + +} + + +void DialogDieCutter::initResolution1006() +{ + this->resizeUI(660,600); + this->move((1024-this->width())/2,(600-this->height())/2); + this->resizeTittle(40,36,600,20); + this->resizeOkBtn(420,500,96,40); + this->resizeCancelBtn(525,500,96,40); + ui->groupBoxAction->setGeometry(40,80,600,420); + //冲孔主轴电机 + ui->label1->setGeometry(0,10,90,30); + ui->buttonJogP1->setGeometry(90,10,90,36); + ui->buttonJogN1->setGeometry(190,10,90,36); + ui->buttonZero1->setGeometry(290,10,90,36); + ui->buttonEnable1->setGeometry(390,10,90,36); + ui->buttonDisable1->setGeometry(490,10,90,36); + //冲孔旋转 + ui->label2->setGeometry(0,70,90,30); + ui->buttonJogP2->setGeometry(90,70,90,30);//60 + ui->buttonJogN2->setGeometry(190,70,90,30); + ui->buttonZero2->setGeometry(290,70,90,30); + ui->buttonEnable2->setGeometry(390,70,90,30); + ui->buttonDisable2->setGeometry(490,70,90,30); + + //手动操作 + ui->label3->setGeometry(0,130,90,30); + ui->buttonFunction1->setGeometry(90,130,90,30);//60 + ui->buttonFunction2->setGeometry(190,130,90,30); + ui->buttonFunction3->setGeometry(290,130,90,30); + ui->buttonFunction4->setGeometry(390,130,90,30); + + ui->buttonFunction5->setGeometry(490,130,90,30); + +} + +void DialogDieCutter::initControlStyle() +{ + ui->groupBoxAction->setStyleSheet(TRANSPARENTSTYLE); + ui->groupBoxAction->setFont(fontNormal_1); + ui->label1->setStyleSheet(LABELGREYSTYLE); + ui->label1->setFont(fontNormal_1); + ui->label2->setStyleSheet(LABELGREYSTYLE); + ui->label2->setFont(fontNormal_1); + ui->label3->setStyleSheet(LABELGREYSTYLE); + ui->label3->setFont(fontNormal_1); + + ui->buttonJogP1->setFont(fontNormal_1); + ui->buttonJogN1->setFont(fontNormal_1); + ui->buttonZero1->setFont(fontNormal_1); + ui->buttonEnable1->setFont(fontNormal_1); + ui->buttonDisable1->setFont(fontNormal_1); + + ui->buttonJogP2->setFont(fontNormal_1); + ui->buttonJogN2->setFont(fontNormal_1); + ui->buttonZero2->setFont(fontNormal_1); + ui->buttonEnable2->setFont(fontNormal_1); + ui->buttonDisable2->setFont(fontNormal_1); + + ui->buttonFunction1->setFont(fontNormal_1); + ui->buttonFunction2->setFont(fontNormal_1); + ui->buttonFunction3->setFont(fontNormal_1); + ui->buttonFunction4->setFont(fontNormal_1); + ui->buttonFunction5->setFont(fontNormal_1); +} + +void DialogDieCutter::on_buttonJogP1_pressed() +{ + this->excuteOrder(MT_LPM,OUTCONTROL_JOGP); +} + +void DialogDieCutter::on_buttonJogP1_released() +{ + this->excuteOrder(MT_LPM,OUTCONTROL_STOP); +} + +void DialogDieCutter::on_buttonJogN1_pressed() +{ + this->excuteOrder(MT_LPM,OUTCONTROL_JOGN); +} + +void DialogDieCutter::on_buttonJogN1_released() +{ + this->excuteOrder(MT_LPM,OUTCONTROL_STOP); +} + +void DialogDieCutter::on_buttonZero1_clicked() +{ + this->excuteOrder(MT_LPM,OUTCONTROL_ZERO);//锯齿电机归零 +} + +void DialogDieCutter::on_buttonEnable1_clicked() +{ + this->excuteOrder(MT_LPM,OUTCONTROL_ENABLE); +} + +void DialogDieCutter::on_buttonDisable1_clicked() +{ + this->excuteOrder(MT_LPM,OUTCONTROL_DISABLE); +} + +void DialogDieCutter::on_buttonJogP2_pressed() +{ + this->excuteOrder(MT_LPR,OUTCONTROL_JOGP); +} + +void DialogDieCutter::on_buttonJogP2_released() +{ + this->excuteOrder(MT_LPR,OUTCONTROL_STOP); +} + +void DialogDieCutter::on_buttonJogN2_pressed() +{ + this->excuteOrder(MT_LPR,OUTCONTROL_JOGN); +} + +void DialogDieCutter::on_buttonJogN2_released() +{ + this->excuteOrder(MT_LPR,OUTCONTROL_STOP); +} + +void DialogDieCutter::on_buttonZero2_clicked() +{ + this->excuteOrder(MT_LPR,OUTCONTROL_ZERO);//锯齿电机归零 +} + +void DialogDieCutter::on_buttonEnable2_clicked() +{ + this->excuteOrder(MT_LPR,OUTCONTROL_ENABLE); +} + +void DialogDieCutter::on_buttonDisable2_clicked() +{ + this->excuteOrder(MT_LPR,OUTCONTROL_DISABLE); +} +//冲孔换杆归零 +void DialogDieCutter::on_buttonFunction1_clicked() +{ + g_pMachine->manualAction(PUNCH_CHANGE_ZERO); +} +//冲一个孔 +void DialogDieCutter::on_buttonFunction2_clicked() +{ + g_pMachine->manualAction(PUNCH_MS_POH); +} +//冲孔点动 +void DialogDieCutter::on_buttonFunction3_clicked() +{ + g_pMachine->manualAction(PUNCH_MS_JOG); +} +//冲孔换色 +void DialogDieCutter::on_buttonFunction4_clicked() +{ + +} +//冲孔旋转去零位 +void DialogDieCutter::on_buttonFunction5_clicked() +{ + g_pMachine->manualAction(PUNCH_ROT_TO_ZERO); +} diff --git a/sharedviews/debugviews/dialogdiecutter.h b/sharedviews/debugviews/dialogdiecutter.h new file mode 100644 index 0000000..a6c0a3c --- /dev/null +++ b/sharedviews/debugviews/dialogdiecutter.h @@ -0,0 +1,69 @@ +#ifndef DIALOGDIECUTTER_H +#define DIALOGDIECUTTER_H + +#include +#include +#include "debugdialog.h" +#include "sharedviews/numerinputdialog.h" + +namespace Ui { +class DialogDieCutter; +} + +class DialogDieCutter : public DebugDialog +{ + Q_OBJECT + +public: + explicit DialogDieCutter(QWidget *parent = 0); + ~DialogDieCutter(); +private slots: + void on_buttonJogP1_pressed(); + + void on_buttonJogP1_released(); + + void on_buttonJogN1_pressed(); + + void on_buttonJogN1_released(); + + void on_buttonZero1_clicked(); + + void on_buttonEnable1_clicked(); + + void on_buttonDisable1_clicked(); + + void on_buttonJogP2_pressed(); + + void on_buttonJogP2_released(); + + void on_buttonJogN2_pressed(); + + void on_buttonJogN2_released(); + + void on_buttonZero2_clicked(); + + void on_buttonEnable2_clicked(); + + void on_buttonDisable2_clicked(); + + void on_buttonFunction1_clicked(); + + void on_buttonFunction2_clicked(); + + void on_buttonFunction3_clicked(); + + void on_buttonFunction4_clicked(); + + void on_buttonFunction5_clicked(); + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006(); + void initControlStyle();//初始化窗体控件样式 + +private: + Ui::DialogDieCutter *ui; +}; + +#endif // DIALOGDIECUTTER_H diff --git a/sharedviews/debugviews/dialogdiecutter.ui b/sharedviews/debugviews/dialogdiecutter.ui new file mode 100644 index 0000000..b0445c9 --- /dev/null +++ b/sharedviews/debugviews/dialogdiecutter.ui @@ -0,0 +1,419 @@ + + + DialogDieCutter + + + + 0 + 0 + 653 + 486 + + + + Dialog + + + + + 10 + 0 + 621 + 481 + + + + + + + + + + + + 190 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogN + + + + + + 90 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogP + + + + + + 410 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Enable + + + + + + 510 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Disable + + + + + + 10 + 70 + 72 + 15 + + + + Spindle + + + + + + 300 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Zero + + + + + + 10 + 110 + 72 + 15 + + + + Rotate + + + + + + 90 + 110 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogP + + + + + + 300 + 110 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Zero + + + + + + 190 + 110 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogN + + + + + + 10 + 150 + 72 + 15 + + + + Puch Manual operation + + + + + + 190 + 150 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Punch a hole + + + + + + 90 + 150 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Replacing the pole to zero + + + + + + 510 + 110 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Disable + + + + + + 410 + 110 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Enable + + + + + + 300 + 150 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Punching jog + + + + + + 400 + 150 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Color Change + + + + + + 90 + 190 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Rotate to zero position + + + + + + + diff --git a/sharedviews/debugviews/dialogneedleshuttle.cpp b/sharedviews/debugviews/dialogneedleshuttle.cpp new file mode 100644 index 0000000..906ad99 --- /dev/null +++ b/sharedviews/debugviews/dialogneedleshuttle.cpp @@ -0,0 +1,440 @@ +#include "dialogneedleshuttle.h" +#include "ui_dialogneedleshuttle.h" + +DialogNeedleShuttle::DialogNeedleShuttle(QWidget *parent) : + DebugDialog(parent), + ui(new Ui::DialogNeedleShuttle) +{ + ui->setupUi(this); + initControl(); + connect(this,SIGNAL(siMcParaChange()),this,SLOT(slotMcParaChangeValue()));//机器参数改变 +} + +DialogNeedleShuttle::~DialogNeedleShuttle() +{ + delete ui; +} +void DialogNeedleShuttle::initControl() +{ + this->setTitleStr(tr("Sewing needle shuttle debugging"));//缝纫针梭调试 + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + initControlStyle();//初始化窗体控件样式 +} +void DialogNeedleShuttle::initResolution1910() +{ + this->resizeUI(1146,1040); + this->move((1920-this->width())/2,(1080-this->height())/2); + this->resizeTittle(40,50,946,60); + this->resizeCancelBtn(918,856,174,70); + this->resizeOkBtn(736,856,174,70); + ui->groupBoxAction->setGeometry(40,100,1256,750); + //主轴电机 + ui->label1->setGeometry(20,50,310,54); + ui->buttonJogP1->setGeometry(360,50,120,54); + ui->buttonJogN1->setGeometry(500,50,120,54); + ui->buttonZero1->setGeometry(640,50,120,54); + ui->buttonEnable1->setGeometry(780,50,120,54); + ui->buttonDisable1->setGeometry(920,50,120,54); + //针电机 + ui->label2->setGeometry(20,140,310,54); + ui->buttonJogP2->setGeometry(360,140,120,54);//90 + ui->buttonJogN2->setGeometry(500,140,120,54); + ui->buttonZero2->setGeometry(640,140,120,54); + ui->buttonEnable2->setGeometry(780,140,120,54); + ui->buttonDisable2->setGeometry(920,140,120,54); + //梭电机 + ui->label3->setGeometry(20,230,310,54); + ui->buttonJogP3->setGeometry(360,230,120,54);//90 + ui->buttonJogN3->setGeometry(500,230,120,54); + ui->buttonZero3->setGeometry(640,230,120,54); + ui->buttonEnable3->setGeometry(780,230,120,54); + ui->buttonDisable3->setGeometry(920,230,120,54); + //旋转电机 + ui->label4->setGeometry(20,320,310,54); + ui->buttonJogP4->setGeometry(360,320,120,54);//90 + ui->buttonJogN4->setGeometry(500,320,120,54); + ui->buttonZero4->setGeometry(640,320,120,54); + ui->buttonEnable4->setGeometry(780,320,120,54); + ui->buttonDisable4->setGeometry(920,320,120,54); + //照明 打开 关闭 + ui->label5->setGeometry(20,410,310,54); + ui->buttonUp1->setGeometry(360,410,120,54);//90 + ui->buttonDown1->setGeometry(500,410,120,54); + //手动操作 + ui->label6->setGeometry(20,500,310,54); + ui->buttonFunction1->setGeometry(360,500,160,54);//90 + ui->buttonFunction2->setGeometry(540,500,160,54); + ui->buttonFunction3->setGeometry(720,500,160,54); + ui->buttonFunction4->setGeometry(900,500,160,54); + + ui->labelPara1->setGeometry(20,590,510,40); + ui->buttonPara1->setGeometry(590,590,180,54); + ui->labelUnit1->setGeometry(780,590,100,40); + + ui->labelPara2->setGeometry(20,680,510,40); + ui->buttonPara2->setGeometry(590,680,180,54); + ui->labelUnit2->setGeometry(780,680,100,40); + +} +void DialogNeedleShuttle::initResolution1006() +{ + this->resizeUI(660,640); + this->move((1024-this->width())/2,(600-this->height())/2); + this->resizeTittle(40,36,600,20); + this->resizeOkBtn(420,540,96,40); + this->resizeCancelBtn(525,540,96,40); + ui->groupBoxAction->setGeometry(40,80,600,460); + //主轴电机 + ui->label1->setGeometry(0,10,90,30); + ui->buttonJogP1->setGeometry(90,10,90,36); + ui->buttonJogN1->setGeometry(190,10,90,36); + ui->buttonZero1->setGeometry(290,10,90,36); + ui->buttonEnable1->setGeometry(390,10,90,36); + ui->buttonDisable1->setGeometry(490,10,90,36); + //针电机 + ui->label2->setGeometry(0,70,90,36); + ui->buttonJogP2->setGeometry(90,70,90,36);//60 + ui->buttonJogN2->setGeometry(190,70,90,36); + ui->buttonZero2->setGeometry(290,70,90,36); + ui->buttonEnable2->setGeometry(390,70,90,36); + ui->buttonDisable2->setGeometry(490,70,90,36); + //梭电机 + ui->label3->setGeometry(0,130,90,36); + ui->buttonJogP3->setGeometry(90,130,90,36);//60 + ui->buttonJogN3->setGeometry(190,130,90,36); + ui->buttonZero3->setGeometry(290,130,90,36); + ui->buttonEnable3->setGeometry(390,130,90,36); + ui->buttonDisable3->setGeometry(490,130,90,36); + //旋转电机 + ui->label4->setGeometry(0,190,90,36); + ui->buttonJogP4->setGeometry(90,190,90,36);//60 + ui->buttonJogN4->setGeometry(190,190,90,36); + ui->buttonZero4->setGeometry(290,190,90,36); + ui->buttonEnable4->setGeometry(390,190,90,36); + ui->buttonDisable4->setGeometry(490,190,90,36); + //照明 打开 关闭 + ui->label5->setGeometry(0,250,90,36); + ui->buttonUp1->setGeometry(90,250,90,36);//60 + ui->buttonDown1->setGeometry(190,250,90,36); + //手动操作 + ui->label6->setGeometry(0,310,90,36); + ui->buttonFunction1->setGeometry(90,310,90,36);//60 + ui->buttonFunction2->setGeometry(190,310,90,36); + ui->buttonFunction3->setGeometry(290,310,90,36); + ui->buttonFunction4->setGeometry(390,310,90,36); + + ui->labelPara1->setGeometry(0,370,200,36); + ui->buttonPara1->setGeometry(300,370,120,36); + ui->labelUnit1->setGeometry(440,370,30,36);//50 + + ui->labelPara2->setGeometry(0,420,200,36); + ui->buttonPara2->setGeometry(300,420,120,36); + ui->labelUnit2->setGeometry(440,420,30,36); + +} +void DialogNeedleShuttle::initControlStyle() +{ + ui->groupBoxAction->setStyleSheet(TRANSPARENTSTYLE); + ui->groupBoxAction->setFont(fontNormal_1); + ui->label1->setStyleSheet(LABELGREYSTYLE); + ui->label1->setFont(fontNormal_1); + ui->label2->setStyleSheet(LABELGREYSTYLE); + ui->label2->setFont(fontNormal_1); + ui->label3->setStyleSheet(LABELGREYSTYLE); + ui->label3->setFont(fontNormal_1); + ui->label4->setStyleSheet(LABELGREYSTYLE); + ui->label4->setFont(fontNormal_1); + ui->label5->setStyleSheet(LABELGREYSTYLE); + ui->label5->setFont(fontNormal_1); + ui->label6->setStyleSheet(LABELGREYSTYLE); + ui->label6->setFont(fontNormal_1); + + ui->buttonJogP1->setFont(fontNormal_1); + ui->buttonJogN1->setFont(fontNormal_1); + ui->buttonZero1->setFont(fontNormal_1); + ui->buttonEnable1->setFont(fontNormal_1); + ui->buttonDisable1->setFont(fontNormal_1); + + ui->buttonJogP2->setFont(fontNormal_1); + ui->buttonJogN2->setFont(fontNormal_1); + ui->buttonZero2->setFont(fontNormal_1); + ui->buttonEnable2->setFont(fontNormal_1); + ui->buttonDisable2->setFont(fontNormal_1); + + ui->buttonJogP3->setFont(fontNormal_1); + ui->buttonJogN3->setFont(fontNormal_1); + ui->buttonZero3->setFont(fontNormal_1); + ui->buttonEnable3->setFont(fontNormal_1); + ui->buttonDisable3->setFont(fontNormal_1); + + ui->buttonJogP4->setFont(fontNormal_1); + ui->buttonJogN4->setFont(fontNormal_1); + ui->buttonZero4->setFont(fontNormal_1); + ui->buttonEnable4->setFont(fontNormal_1); + ui->buttonDisable4->setFont(fontNormal_1); + + ui->buttonUp1->setFont(fontNormal_1); + ui->buttonDown1->setFont(fontNormal_1); + + ui->buttonFunction1->setFont(fontNormal_1); + ui->buttonFunction2->setFont(fontNormal_1); + ui->buttonFunction3->setFont(fontNormal_1); + ui->buttonFunction4->setFont(fontNormal_1); + + ui->labelPara1->setStyleSheet(LABELGREYSTYLE); + ui->labelPara1->setFont(fontNormal_1); + ui->buttonPara1->setFont(fontNormal_1); + ui->labelUnit1->setStyleSheet(LABELGREYSTYLE); + ui->labelUnit1->setFont(fontNormal_1); + + ui->labelPara2->setStyleSheet(LABELGREYSTYLE); + ui->labelPara2->setFont(fontNormal_1); + ui->buttonPara2->setFont(fontNormal_1); + ui->labelUnit2->setStyleSheet(LABELGREYSTYLE); + ui->labelUnit2->setFont(fontNormal_1); +} + +//参数改变刷新 参数值 +void DialogNeedleShuttle::slotMcParaChangeValue() +{ + int mcParaFlag = this->getMcParaChange(); + if(mcParaFlag == 1) + { + s32 para1 =this->getMcPara(52); + float paraValue1 = para1*0.01; + QString paraValueStr1; + paraValueStr1.sprintf("%.2f",paraValue1); + ui->buttonPara1->setText(paraValueStr1); + + s32 para2 =this->getMcPara(56); + float paraValue2 = para2*0.01; + QString paraValueStr2; + paraValueStr2.sprintf("%.2f",paraValue2); + ui->buttonPara2->setText(paraValueStr2); + } +} + +//主轴电机 找零 +void DialogNeedleShuttle::on_buttonZero1_clicked() +{ + this->excuteOrder(MT_LM,OUTCONTROL_ZERO);//电机归零 +} +//主轴电机 正转 +void DialogNeedleShuttle::on_buttonJogP1_pressed() +{ + this->excuteOrder(MT_LM,OUTCONTROL_JOGP); +} +//主轴电机 正转 +void DialogNeedleShuttle::on_buttonJogP1_released() +{ + this->excuteOrder(MT_LM,OUTCONTROL_STOP); +} +//主轴电机 反转 +void DialogNeedleShuttle::on_buttonJogN1_pressed() +{ + this->excuteOrder(MT_LM,OUTCONTROL_JOGN); +} +//主轴电机 反转 +void DialogNeedleShuttle::on_buttonJogN1_released() +{ + this->excuteOrder(MT_LM,OUTCONTROL_STOP); +} +// 主轴电机// 使能 +void DialogNeedleShuttle::on_buttonEnable1_clicked() +{ + this->excuteOrder(MT_LM,OUTCONTROL_ENABLE); +} +// 主轴电机// 失能 +void DialogNeedleShuttle::on_buttonDisable1_clicked() +{ + this->excuteOrder(MT_LM,OUTCONTROL_DISABLE); +} +//针电机 正转 +void DialogNeedleShuttle::on_buttonJogP2_pressed() +{ +this->excuteOrder(MT_LN,OUTCONTROL_JOGP); +} +//针电机 正转 +void DialogNeedleShuttle::on_buttonJogP2_released() +{ +this->excuteOrder(MT_LN,OUTCONTROL_STOP); +} +//针电机 反转 +void DialogNeedleShuttle::on_buttonJogN2_pressed() +{ + this->excuteOrder(MT_LN,OUTCONTROL_JOGN); +} +//针电机 反转 +void DialogNeedleShuttle::on_buttonJogN2_released() +{ + this->excuteOrder(MT_LN,OUTCONTROL_STOP); +} +//针电机 归零 +void DialogNeedleShuttle::on_buttonZero2_clicked() +{ +this->excuteOrder(MT_LH,OUTCONTROL_ZERO);//锯齿电机归零 +} +//针电机 使能 +void DialogNeedleShuttle::on_buttonEnable2_clicked() +{ +this->excuteOrder(MT_LH,OUTCONTROL_ENABLE); +} +//针电机 失能 +void DialogNeedleShuttle::on_buttonDisable2_clicked() +{ + this->excuteOrder(MT_LH,OUTCONTROL_DISABLE); +} +//梭电机 正转 +void DialogNeedleShuttle::on_buttonJogP3_pressed() +{ +this->excuteOrder(MT_LH,OUTCONTROL_JOGP); +} +//梭电机 正转 +void DialogNeedleShuttle::on_buttonJogP3_released() +{ + this->excuteOrder(MT_LH,OUTCONTROL_STOP); +} +//梭电机 反转 +void DialogNeedleShuttle::on_buttonJogN3_pressed() +{ + this->excuteOrder(MT_LH,OUTCONTROL_JOGN); +} +//梭电机 反转 +void DialogNeedleShuttle::on_buttonJogN3_released() +{ +this->excuteOrder(MT_LH,OUTCONTROL_STOP); +} +//梭电机 归零 +void DialogNeedleShuttle::on_buttonZero3_clicked() +{ +this->excuteOrder(MT_LH,OUTCONTROL_ZERO);//锯齿电机归零 +} +//梭电机 使能 +void DialogNeedleShuttle::on_buttonEnable3_clicked() +{ + this->excuteOrder(MT_LH,OUTCONTROL_ENABLE); +} +//梭电机 失能 +void DialogNeedleShuttle::on_buttonDisable3_clicked() +{ + this->excuteOrder(MT_LH,OUTCONTROL_DISABLE); +} +//旋转电机 正转 +void DialogNeedleShuttle::on_buttonJogP4_pressed() +{ + this->excuteOrder(MT_LR,OUTCONTROL_JOGP); +} +//旋转电机 正转 +void DialogNeedleShuttle::on_buttonJogP4_released() +{ +this->excuteOrder(MT_LR,OUTCONTROL_STOP); +} +//旋转电机 反转 +void DialogNeedleShuttle::on_buttonJogN4_pressed() +{ +this->excuteOrder(MT_LR,OUTCONTROL_JOGN); +} +//旋转电机 反转 +void DialogNeedleShuttle::on_buttonJogN4_released() +{ + this->excuteOrder(MT_LR,OUTCONTROL_STOP); +} +//旋转电机 归零 +void DialogNeedleShuttle::on_buttonZero4_clicked() +{ + this->excuteOrder(MT_LR,OUTCONTROL_ZERO);//锯齿电机归零 +} +//旋转电机 使能 +void DialogNeedleShuttle::on_buttonEnable4_clicked() +{ + this->excuteOrder(MT_LR,OUTCONTROL_ENABLE); +} +//旋转电机 失能 +void DialogNeedleShuttle::on_buttonDisable4_clicked() +{ + this->excuteOrder(MT_LR,OUTCONTROL_DISABLE); +} +//照明 打开 +void DialogNeedleShuttle::on_buttonUp1_clicked() +{ + this->excuteOrder(OT_LIGHT,OUTCONTROL_OPEN); +} +//照明 关闭 +void DialogNeedleShuttle::on_buttonDown1_clicked() +{ + this->excuteOrder(OT_LIGHT,OUTCONTROL_CLOSE); +} +//缝纫机头升降 +void DialogNeedleShuttle::on_buttonFunction1_clicked() +{ + g_pMachine->manualAction(SEW_HEAD_LIFT, 0, 0); +} +//针梭校对 +void DialogNeedleShuttle::on_buttonFunction2_clicked() +{ + g_pMachine->manualAction(MAINSHAFT_ADJUST,0); +} +//针去勾线位 +void DialogNeedleShuttle::on_buttonFunction3_clicked() +{ + this->excuteOrder(NEEDLE_TO_CUSP,MANUALACTION_RUN);//执行手动动作 +} +//梭去勾线位 +void DialogNeedleShuttle::on_buttonFunction4_clicked() +{ + this->excuteOrder(HOOK_TO_CUSP,MANUALACTION_RUN);//执行手动动作 +} +//主轴停车传感器角度 +void DialogNeedleShuttle::on_buttonPara1_clicked() +{ + // 主轴停车传感器角度,范围0-36000,默认4500 0.01度 + QTextCodec *cod = QTextCodec::codecForLocale(); + int rslt; + NumerInputDialog ndlg(this); + ndlg.setTitleStr(tr("Spindle parking sensor angle")); + ndlg.setUnitStr(cod->toUnicode("°")); + ndlg.setValueAndRange(ui->buttonPara1->text().toFloat()*100, 0, 36000, 2); + rslt = ndlg.exec(); + if (rslt == 1) + { + s32 val = ndlg.getValue(); + float value = val*0.01; + QString valueStr; + valueStr.sprintf("%.2f",value); + ui->buttonPara1->setText(valueStr); + this->setMcPara(52,val); + } +} +//主轴勾线传感器角度 +void DialogNeedleShuttle::on_buttonPara2_clicked() +{ + // 范围0-36000,默认20200 0.01度 + QTextCodec *cod = QTextCodec::codecForLocale(); + int rslt; + NumerInputDialog ndlg(this); + ndlg.setTitleStr(tr("Spindle hook line sensor angle unit")); + ndlg.setUnitStr(cod->toUnicode("°")); + ndlg.setValueAndRange(ui->buttonPara1->text().toFloat()*100, 0, 36000, 2); + rslt = ndlg.exec(); + if (rslt == 1) + { + s32 val = ndlg.getValue(); + float value = val*0.01; + QString valueStr; + valueStr.sprintf("%.2f",value); + ui->buttonPara1->setText(valueStr); + this->setMcPara(56,val); + } +} diff --git a/sharedviews/debugviews/dialogneedleshuttle.h b/sharedviews/debugviews/dialogneedleshuttle.h new file mode 100644 index 0000000..4709f31 --- /dev/null +++ b/sharedviews/debugviews/dialogneedleshuttle.h @@ -0,0 +1,106 @@ +#ifndef DIALOGNEEDLESHUTTLE_H +#define DIALOGNEEDLESHUTTLE_H + +#include +#include +#include "debugdialog.h" +#include "sharedviews/numerinputdialog.h" + +namespace Ui { +class DialogNeedleShuttle; +} + +class DialogNeedleShuttle : public DebugDialog +{ + Q_OBJECT + +public: + explicit DialogNeedleShuttle(QWidget *parent = 0); + ~DialogNeedleShuttle(); + +private slots: + void slotMcParaChangeValue(); + void on_buttonZero1_clicked(); + + void on_buttonJogP1_pressed(); + + void on_buttonJogP1_released(); + + void on_buttonJogN1_pressed(); + + void on_buttonJogN1_released(); + + void on_buttonEnable1_clicked(); + + void on_buttonDisable1_clicked(); + + void on_buttonJogP2_pressed(); + + void on_buttonJogP2_released(); + + void on_buttonJogN2_pressed(); + + void on_buttonJogN2_released(); + + void on_buttonZero2_clicked(); + + void on_buttonEnable2_clicked(); + + void on_buttonDisable2_clicked(); + + void on_buttonJogP3_pressed(); + + void on_buttonJogP3_released(); + + void on_buttonJogN3_pressed(); + + void on_buttonJogN3_released(); + + void on_buttonZero3_clicked(); + + void on_buttonEnable3_clicked(); + + void on_buttonDisable3_clicked(); + + void on_buttonJogP4_pressed(); + + void on_buttonJogP4_released(); + + void on_buttonJogN4_pressed(); + + void on_buttonJogN4_released(); + + void on_buttonZero4_clicked(); + + void on_buttonEnable4_clicked(); + + void on_buttonDisable4_clicked(); + + void on_buttonUp1_clicked(); + + void on_buttonDown1_clicked(); + + void on_buttonFunction1_clicked(); + + void on_buttonFunction2_clicked(); + + void on_buttonFunction3_clicked(); + + void on_buttonFunction4_clicked(); + + void on_buttonPara1_clicked(); + + void on_buttonPara2_clicked(); + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006(); + void initControlStyle();//初始化窗体控件样式 + +private: + Ui::DialogNeedleShuttle *ui; + +}; + +#endif // DIALOGNEEDLESHUTTLE_H diff --git a/sharedviews/debugviews/dialogneedleshuttle.ui b/sharedviews/debugviews/dialogneedleshuttle.ui new file mode 100644 index 0000000..bf75d9a --- /dev/null +++ b/sharedviews/debugviews/dialogneedleshuttle.ui @@ -0,0 +1,809 @@ + + + DialogNeedleShuttle + + + + 0 + 0 + 746 + 535 + + + + Dialog + + + + + 10 + 0 + 621 + 481 + + + + + + + + + + + + 190 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogN + + + + + + 90 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogP + + + + + + 410 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Enable + + + + + + 510 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Disable + + + + + + 10 + 70 + 72 + 15 + + + + Spindle + + + + + + 300 + 60 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Zero + + + + + + 10 + 110 + 72 + 15 + + + + Needle + + + + + + 90 + 110 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogP + + + + + + 300 + 110 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Zero + + + + + + 190 + 110 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogN + + + + + + 300 + 150 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Zero + + + + + + 90 + 150 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogP + + + + + + 10 + 150 + 72 + 15 + + + + Shuttle + + + + + + 190 + 150 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogN + + + + + + 300 + 190 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Zero + + + + + + 10 + 190 + 72 + 15 + + + + Rotate + + + + + + 90 + 190 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogP + + + + + + 190 + 190 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + jogN + + + + + + 190 + 230 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Close + + + + + + 10 + 230 + 72 + 15 + + + + Lighting + + + + + + 90 + 230 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Open + + + + + + 190 + 270 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Needle shuttle proofreading + + + + + + 90 + 270 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Sewing machine head lifting and lowering + + + + + + 10 + 270 + 72 + 15 + + + + Manual operation + + + + + + 340 + 355 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 30 + 360 + 181 + 16 + + + + Spindle parking sensor angle + + + + + + 430 + 360 + 54 + 12 + + + + deg + + + + + + 30 + 400 + 181 + 16 + + + + Angle of spindle hook sensor + + + + + + 340 + 400 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 430 + 410 + 54 + 12 + + + + deg + + + + + + 510 + 110 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Disable + + + + + + 410 + 110 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Enable + + + + + + 510 + 150 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Disable + + + + + + 410 + 150 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Enable + + + + + + 510 + 190 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Disable + + + + + + 410 + 190 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Enable + + + + + + 300 + 270 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Needle off hook position + + + + + + 400 + 270 + 89 + 24 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + Shuttle off hook position + + + + + + + diff --git a/sharedviews/mybutton.cpp b/sharedviews/mybutton.cpp new file mode 100644 index 0000000..36b0c74 --- /dev/null +++ b/sharedviews/mybutton.cpp @@ -0,0 +1,348 @@ +#include "mybutton.h" + +MyButton::MyButton(QWidget *parent):QPushButton(parent) +{ + labelImage = NULL; + labelImage = new QLabel(this); + + labelName = NULL; + labelName = new QLabel(this); + + labelValue = NULL; + labelValue = new QLabel(this); +} + +MyButton::~MyButton() +{ + if(labelImage != NULL) + { + delete labelImage; + } + + if(labelName != NULL) + { + delete labelName; + } + + if(labelValue != NULL) + { + delete labelValue; + } +} + +//设置顶图 +void MyButton::setTopImage(QString imagePath,short int y) +{ + //label加载图片( 方法1) + //QPixmap pix; + //pix.load(imagePath); + //labelImage->setPixmap(pix); + + labelName->hide(); + labelValue->hide(); + labelImage->show(); + + labelImage->setGeometry(0,0,this->width(),this->height()+y); + QString style = "outline: none;background-color: rgba(255, 255, 255, 0);border-image: url(" + imagePath + ");border:0px;"; + labelImage->setStyleSheet(style); +} + +void MyButton::setShortCutTopImage(QString imagePath, QPoint point) +{ + labelName->hide(); + labelValue->hide(); + labelImage->show(); + + labelImage->setGeometry(point.x(),point.y(),this->width(),this->height()); + QString style = "outline: none;background-color: rgba(255, 255, 255, 0);border-image: url(" + imagePath + ");border:0px;"; + labelImage->setStyleSheet(style); +} + +void MyButton::setPreviewImage(QImage image) +{ + //label加载图片 + QPixmap pix = QPixmap::fromImage(image); + labelImage->setPixmap(pix); +} + +//设置条目左侧图标 +void MyButton::setItemLeftIcon(QString imagePath) +{ + labelImage->move(0,0); + QString style = "outline: none;background-color: rgba(255, 255, 255, 0);border-image: url(" + imagePath + ");border:0px;"; + labelImage->setStyleSheet(style); +} + +void MyButton::setLabelValueImage(QString imagePath) +{ + if(imagePath.length() <= 0) + { + QPixmap npix; + labelValue->setPixmap(npix); + return; + } + QImage image; + image.load(imagePath); + QPixmap pix = QPixmap::fromImage(image); + labelValue->setPixmap(pix); + +// labelValue->setAlignment(Qt::AlignLeft); +// labelValue->setAlignment(Qt::AlignBottom); +// QString style = "background-color: rgba(255, 255, 255, 0);border:0px;image: url(" + imagePath + ");"; +// labelValue->setStyleSheet(style); +} + +//设置底层图片(按下、抬起、失效) +void MyButton::setBottomImage(QString imagePath) +{ +//第一种加载图片的方法 +// QPixmap pix; +// pix.load(imageRelPath); +// int w = this->width(); +// int h = this->height(); +// this->setIconSize(QSize(w,h)); +// this->setIcon(pix); + + //第二种加载图片的方法 + QString style = "QPushButton{outline: none;background-color: rgba(255, 255, 255, 0);border-image: url(" + imagePath + "_p0.png" + ");border:0px;}"; + style += "QPushButton:pressed{outline: none;border-image: url(" + imagePath + "_p1.png" + ");}"; + style += "QPushButton:disabled{outline: none;border-image: url(" + imagePath + "_p2.png" + ");}"; + style += "QPushButton:checked{outline: none;border-image: url(" + imagePath + "_p1.png" + ");}"; + //style += "QPushButton:disabled{background-color: rgba(220, 220, 220, 50);}"; + this->setStyleSheet(style); +} + +void MyButton::setWhiteBlueBottomStyle() +{ + //白蓝色渐变、灰蓝色渐变 + QString style = "QPushButton{color:black;background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(255, 255, 255), stop:1 rgb(215, 243, 254));border-radius:5px;}"; + style += "QPushButton:pressed{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(217, 222, 224), stop:1 rgb(191,213,223));}"; + style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(230, 230, 230), stop:1 rgb(182,182,182));}"; + this->setStyleSheet(style); +} + +void MyButton::setBlueBorderBottomStyle() +{ + //蓝色渐变带边框 + QString style = "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(85, 211, 233), stop:1 rgb(28, 183, 210));border-bottom:1px solid rgb(30, 155, 177);border-radius:10px;}"; + style += "QPushButton:pressed{background-color: rgb(73, 181, 192);}"; + style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(230, 230, 230), stop:1 rgb(182,182,182));border-bottom:1px solid rgb(100,100,100);}"; + this->setStyleSheet(style); +} + +void MyButton::setOrangeGradientBottomStyle(QString str) +{ + //橙色渐变 + QString style = "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(253, 231, 140), stop:1 rgb(240,119,12));border-radius:"+str+"px;color:rgb(255,255,255);}"; + style += "QPushButton:pressed{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(222, 196, 128), stop:1 rgb(213,125,54));color:rgb(255,255,255);}"; + style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(227, 227, 227), stop:1 rgb(177,177,177));color:rgb(255,255,255);}"; + this->setStyleSheet(style); +} + +void MyButton::setBlueGradientBottomStyle() +{ + //蓝色渐变 + QString style = "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(79, 219, 254), stop:1 rgb(161,236,255));border-radius:4px;}"; + style += "QPushButton:pressed{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(63, 175, 203), stop:1 rgb(129,189,204));}"; + this->setStyleSheet(style); +} + +void MyButton::setGreenGradientBottomStyle(QString str) +{ + //绿色渐变 + QString style = "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(139, 195, 163), stop:1 rgb(86,172,123));border-radius:"+str+"px;}"; + style += "QPushButton:pressed{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(105, 147, 123), stop:1 rgb(84,138,107));}"; + style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(227, 227, 227), stop:1 rgb(177,177,177));color:rgb(255,255,255);}"; + style += "QPushButton:checked{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(105, 147, 100), stop:1 rgb(84,138,90));}"; + this->setStyleSheet(style); +} + +#if(0) +//设置控制动作界面底层图片(按下、抬起),并设置文字前景色 +void MyButton::setControlWidgetBtnBottomImage(QString imagePath, QString color) +{ + QString style = "QPushButton{outline: none;"+ color + "border-image: url(" + imagePath + "_p0.png" + ");border:0px;}"; + style += "QPushButton:pressed{outline: none;border-image: url(" + imagePath + "_p1.png" + ");}"; + style += "QPushButton:disabled{outline: none;border-image: url(" + imagePath + "_p2.png" + ");}"; + //style += "QPushButton:disabled{background-color: rgba(220, 220, 220, 50);}"; + this->setStyleSheet(style); +} +#endif + +//设置主按钮底层图片 +void MyButton::setCheckedBottomImage(QString imagePath) +{ + //第二种加载图片的方法 + QString style = "QPushButton{outline: none;border-image: url(" + imagePath + "_p0.png" + ");border:0px;}"; + style += "QPushButton:disabled{outline: none;border-image: url(" + imagePath + "_p2.png" + ");}"; + style += "QPushButton:checked{outline: none;border-image: url(" + imagePath + "_p1.png" + ");}"; + this->setStyleSheet(style); +} + +void MyButton::setMainBtnBottomStyle() +{ + //蓝色渐变、灰色渐变、橙色渐变 + QString style = "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(16, 198, 255), stop:1 rgb(65, 107, 255));border-radius:10px;}"; + style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(234, 234, 234), stop:1 rgb(176,176,176));}"; + style += "QPushButton:checked{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(253, 225, 113), stop:1 rgb(240,119,12));}"; + this->setStyleSheet(style); +} + +//设置按钮logo(按钮是没有点击事件的) +void MyButton::setUnPreBtnLogo(QString tStyle) +{ + labelName->hide(); + labelValue->hide(); + labelImage->hide(); + + if(tStyle.length() <= 0) + { + return; + } + + //橙色渐变 + QString style = "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(253, 231, 140), stop:1 rgb(240,119,12));border-radius:10px;border-image: url(" + tStyle + ");border:0px;outline: none;}"; + this->setStyleSheet(style); +} + + +//初始化label条目名称和条目值(参数设置) +void MyButton::initLeftNameRightValue(QRect rectName, QRect rectValue, int right) +{ + labelImage->hide(); + + QString style = "outline: none;background-color: rgba(255, 255, 255, 0);"; + style += "color: rgb(255, 255, 255);"; + labelName->setGeometry(rectName); + labelName->setStyleSheet(style); + labelName->setAlignment(Qt::AlignLeft); + labelName->setAlignment(Qt::AlignBottom); + + labelValue->setGeometry(rectValue); + labelValue->setStyleSheet(style); + if(right == 0) + { + labelValue->setAlignment(Qt::AlignLeft | Qt::AlignBottom); + } + else + { + labelValue->setAlignment(Qt::AlignRight | Qt::AlignBottom); + } + + QString style1 = "QPushButton{outline: none;border:0px;border-radius:7px;background-color:rgba(255, 255, 255, 0);}"; + style1 += "QPushButton:pressed{outline: none;background-color: rgba(255, 255, 255, 50);}"; + this->setStyleSheet(style1); +} + +//初始化label图标显示和条目名称(文件导入) +void MyButton::initLeftImageRightName(QRect rectImage, QRect rectName) +{ + labelValue->hide(); + labelImage->show(); + + labelImage->setGeometry(rectImage); + labelImage->setAlignment(Qt::AlignHCenter); + labelImage->setAlignment(Qt::AlignBottom); + + QString style = "outline: none;background-color: rgba(255, 255, 255, 0);"; + style += "color: rgb(255, 255, 255);"; + + labelName->setGeometry(rectName); + labelName->setStyleSheet(style); + labelName->setAlignment(Qt::AlignLeft); + labelName->setAlignment(Qt::AlignBottom); + + QString style1 = "QPushButton{outline: none;border:0px;border-radius:7px;background-color:rgba(255, 255, 255, 0);}"; + style1 += "QPushButton:checked{outline: none;background-color: rgba(255, 255, 255, 50);}"; + this->setStyleSheet(style1); +} + +void MyButton::initUpImageDownName(QRect rectImage, QRect rectName) +{ + labelValue->hide(); + labelImage->show(); + + labelImage->setGeometry(rectImage); + labelImage->setAlignment(Qt::AlignCenter); + labelImage->setStyleSheet("outline: none;background-color: rgba(255, 255, 255, 0);"); + + QString style = "outline: none;background-color: rgba(255, 255, 255, 0);"; + style += "color: rgb(255, 255, 255);"; + + labelName->setGeometry(rectName); + labelName->setStyleSheet(style); + labelName->setAlignment(Qt::AlignLeft); + labelName->setAlignment(Qt::AlignTop); + labelName->setWordWrap(true); +} + +void MyButton::initLabelValue(QRect rectValue) +{ + labelValue->setGeometry(rectValue); + labelValue->setAlignment(Qt::AlignCenter); +} + +//设置label字体 +void MyButton::setLabelFont(QFont font) +{ + labelName->setFont(font); + labelValue->setFont(font); + //labelValue->show(); +} + +void MyButton::setLabelNameFont(QFont font) +{ + labelName->setFont(font); +} + +void MyButton::setLabelValueFont(QFont font) +{ + labelValue->setFont(font); +} + +//设置条目名称 +void MyButton::setLabelName(QString name) +{ + labelName->setText(name); + labelName->show(); +} + +void MyButton::setLabelNameStyle(QString style) +{ + labelName->setStyleSheet(style); +} + +//设置条目值 +void MyButton::setLabelValue(QString value) +{ + labelValue->setText(value); + labelValue->show(); +} + +void MyButton::setLabelValueStyle(QString style) +{ + labelValue->setStyleSheet(style); +} + +void MyButton::setLabelImage(QString style) +{ + labelImage->setStyleSheet(style); +} + +void MyButton::setBtnBackColor(QString style) +{ + style += "outline: none;border:0px solid rgb(0,0,0);border-style:inset;border-radius:5px;"; + this->setStyleSheet(style); +} + +void MyButton::setImageBackColor(QString style) +{ + style += "outline: none;border:0px solid rgb(0,0,0);border-style:inset;border-radius:5px;"; + labelImage->setStyleSheet(style); +} + +void MyButton::setLabelImageChecked(QString style) +{ + style += "outline: none;border:4px groove rgb(52,52,52);border-style:inset;border-radius:5px;"; + labelImage->setStyleSheet(style); +} diff --git a/sharedviews/mybutton.h b/sharedviews/mybutton.h new file mode 100644 index 0000000..cc66d65 --- /dev/null +++ b/sharedviews/mybutton.h @@ -0,0 +1,81 @@ +#ifndef MYBUTTON_H +#define MYBUTTON_H + +//#include +#include +#include +#include + +//自定义的按钮类,按钮上有一个Label,用于显示双层图片 +class MyButton : public QPushButton +{ +public: + MyButton(QWidget *parent=0); + ~MyButton(); + +public: + QLabel *labelImage;//顶层logo + QLabel *labelName;//参数设置按钮的条目名称 + QLabel *labelValue;//参数设置按钮的条目值 + +public: + void setTopImage(QString imagePath,short int y = 0);//设置顶层图片 + void setShortCutTopImage(QString imagePath,QPoint point);//设置快捷按钮顶层图片 + + void setPreviewImage(QImage image);//设置花样选择预览图片 + void setItemLeftIcon(QString imagePath);//设置条目左侧图标 + void setLabelValueImage(QString imagePath);//设置开关图片 + + //设置底层图片(按下、抬起、失效) + void setBottomImage(QString imagePath); + + //设置白蓝渐变底层按钮样式(匹绣、快进快退、开位线绣) + void setWhiteBlueBottomStyle(); + + //设置蓝色加border底层按钮样式(常用按钮) + void setBlueBorderBottomStyle(); + + //设置橙色渐变底层按钮样式(界面菜单按钮) + void setOrangeGradientBottomStyle(QString str); + + //设置蓝色渐变底层按钮样式(控制动作) + void setBlueGradientBottomStyle(); + + //设置绿色渐变底层按钮样式 + void setGreenGradientBottomStyle(QString str); + +#if(0) + //设置控制动作界面底层图片(按下、抬起),并设置文字前景色 + void setControlWidgetBtnBottomImage(QString imagePath,QString color); +#endif + + //设置主按钮底层图片(选中、失效) + void setCheckedBottomImage(QString imagePath); + + //设置主按钮底层样式(选中、失效) + void setMainBtnBottomStyle(); + + //设置按钮logo(按钮是没有点击事件的) + void setUnPreBtnLogo(QString tStyle); + + void initLeftNameRightValue(QRect rectName, QRect rectValue, int right = 0);//初始化label条目名称和条目值(参数设置) + void initLeftImageRightName(QRect rectImage, QRect rectName);//初始化label图标显示和条目名称(文件导入) + void initUpImageDownName(QRect rectImage,QRect rectName);//初始化label图标和名称(花样选择) + void initLabelValue(QRect rectValue);//初始化labelValue + + void setLabelFont(QFont font);//设置label字体 + void setLabelNameFont(QFont font);//设置label字体 + void setLabelValueFont(QFont font);//设置label字体 + + void setLabelName(QString name);//设置条目名称 + void setLabelNameStyle(QString style);//设置条目名称样式 + void setLabelValue(QString value);//设置条目值 + void setLabelValueStyle(QString style);//设置条目值样式 + void setLabelImage(QString style);//设置图片 + + void setBtnBackColor(QString style); + void setImageBackColor(QString style); + void setLabelImageChecked(QString style); +}; + +#endif // MYBUTTON_H diff --git a/sharedviews/needlebarsetwidget.cpp b/sharedviews/needlebarsetwidget.cpp new file mode 100644 index 0000000..f1120f2 --- /dev/null +++ b/sharedviews/needlebarsetwidget.cpp @@ -0,0 +1,629 @@ +#include "needlebarsetwidget.h" +#include "ui_needlebarsetwidget.h" + +NeedleBarSetWidget::NeedleBarSetWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::NeedleBarSetWidget), + m_pEmbNeedleBtn(NULL), + m_pColorBtn(NULL) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + + initWidget(); + initControl(); +} + +NeedleBarSetWidget::~NeedleBarSetWidget() +{ + delete ui; +} + +void NeedleBarSetWidget::initWidget() +{ + m_setType = 1; + QDir apppath(qApp->applicationDirPath()); + + //配置文件路径 + m_configFile = apppath.path() + apppath.separator() + "config.ini"; + + m_pColorBuf = (QRgb *)(g_pSettings->getColorRgbArray().data()); + m_buttonStyle1 = "QPushButton{outline: none;border:0px solid rgb(0,0,0);border-style:inset;border-radius:5px;"; + m_buttonStyle2 = "QPushButton:checked{outline: none;border:3px groove rgb(80,80,80);}"; + + m_embNeedleBtnList.clear(); + int embNeedleItem = 32; + for(int i = 0; i < embNeedleItem; i++) + { + MyButton *buttonEmbNeedle = new MyButton(ui->frameEmb); + m_embNeedleBtnList.append(buttonEmbNeedle); + connect(buttonEmbNeedle, + SIGNAL(clicked()), + this, + SLOT(embNeedleBtnClick()) + ); + } + + int colorNumer = BF_SW_ND; //颜色数 + m_colorBtnList.clear(); + for(int i = 0; i < colorNumer; i++) + { + QPushButton *buttonColor = new QPushButton(ui->frameColor); + m_colorBtnList.append(buttonColor); + connect(buttonColor, + SIGNAL(clicked()), + this, + SLOT(colorBtnClick()) + ); + } +} + +void NeedleBarSetWidget::initControl() +{ + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + + initControlStyle();//初始化窗体控件样式 +} + +void NeedleBarSetWidget::initResolution1910() +{ + this->resize(1920,1080); + ui->frameBack->setGeometry(0,0,1920,1080); + ui->buttonTypeLogo->setGeometry(128,66,78,78); + ui->labelMainTitle->setGeometry(226,60,1000,44); + ui->labelSubTitle->setGeometry(302,112,1000,36); + + ui->frameRightUp->setGeometry(1366,92,582,72); + ui->buttonEmbSet->setGeometry(176,0,66,66); + ui->buttonPunchSet->setGeometry(88,0,66,66); + ui->buttonSewSet->setGeometry(0,0,66,66); + + ui->frameEmb->setGeometry(62,217,336,720); + ui->labelEmbNeedleNum->setGeometry(10,0,228,48); + ui->buttonEmbNeedleNum->setGeometry(240,0,94,48); + + for(int i = 0; i < 3; i++) + { + int num = 11; + for(int j = 0; j < num; j++) + { + // 颜色显示 + QRgb rgb = m_pColorBuf[((i*num+j) % MC_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + + if(i*num+j < m_embNeedleBtnList.size()) + { + m_embNeedleBtnList[i*num+j]->setGeometry(10+i*115,69+j*59,94,48); + m_embNeedleBtnList[i*num+j]->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + m_embNeedleBtnList[i*num+j]->setFont(fontNormal_1); + m_embNeedleBtnList[i*num+j]->setText(QString::number(i*num+j+1)); + } + } + } + + //右侧 + ui->frameColor->setGeometry(422,218,1426,708); + int hColorNum = 24; + int vColorNum = 12; + for(int i = 0; i < vColorNum; i++) + { + for(int j = 0; j < hColorNum; j++) + { + // 颜色显示 + QRgb rgb = m_pColorBuf[((i*hColorNum+j) % MC_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";"; + m_colorBtnList[i*hColorNum+j]->setGeometry(7+j*59,3+i*59,50,50); + m_colorBtnList[i*hColorNum+j]->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + } + } + + ui->framePageBtn->setGeometry(1120,990,800,70); + ui->buttonOk->setGeometry(600,0,168,70); +} + +void NeedleBarSetWidget::initResolution1006() +{ + this->resize(1024,600); + ui->frameBack->setGeometry(0,0,1024,600); + ui->buttonTypeLogo->setGeometry(25,30,60,60); + ui->labelMainTitle->setGeometry(100,30,200,24); + ui->labelSubTitle->setGeometry(130,64,240,21); + + ui->frameRightUp->setGeometry(663,40,338,61); + ui->buttonEmbSet->setGeometry(114,0,50,50); + ui->buttonPunchSet->setGeometry(57,0,50,50); + ui->buttonSewSet->setGeometry(0,0,50,50); + + ui->frameEmb->setGeometry(30,90,221,441); + ui->labelEmbNeedleNum->setGeometry(6,30,110,20); + ui->buttonEmbNeedleNum->setGeometry(125,30,55,28); + + for(int i = 0; i < 3; i++) + { + int num = 11; + for(int j = 0; j < num; j++) + { + // 颜色显示 + QRgb rgb = m_pColorBuf[((i*num+j) % MC_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + + if(i*num+j < m_embNeedleBtnList.size()) + { + m_embNeedleBtnList[i*num+j]->setGeometry(5+i*63,62+j*34,54,29);//左侧颜色 + m_embNeedleBtnList[i*num+j]->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + m_embNeedleBtnList[i*num+j]->setFont(fontNormal_1); + m_embNeedleBtnList[i*num+j]->setText(QString::number(i*num+j+1)); + } + } + } + + ui->frameColor->setGeometry(236,125,735,420); + int hColorNum = 24; + int vColorNum = 12; + for(int i = 0; i < vColorNum; i++) + { + for(int j = 0; j < hColorNum; j++) + { + // 颜色显示 + QRgb rgb = m_pColorBuf[((i*hColorNum+j) % MC_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";"; + m_colorBtnList[i*hColorNum+j]->setGeometry(3+j*32,3+i*32,26,26); + m_colorBtnList[i*hColorNum+j]->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + } + } + + ui->framePageBtn->setGeometry(595,548,600,45); + ui->buttonOk->setGeometry(318,0,96,40); +} + +//初始化窗体控件样式 +void NeedleBarSetWidget::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + QString frameBackImgPath = setControlStyle.getStyleSheet(this->objectName()); + ui->frameBack->setStyleSheet(frameBackImgPath); + ui->frameEmb->setStyleSheet(TRANSPARENTSTYLE); + ui->frameColor->setStyleSheet(TRANSPARENTSTYLE); + ui->labelMainTitle->setFont(fontBold_1); + ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelSubTitle->setFont(fontNormal_1); + ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); + + //右上方 + ui->frameRightUp->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonEmbSet->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonEmbSet->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonEmbSet->objectName())); + ui->buttonPunchSet->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonPunchSet->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonPunchSet->objectName())); + ui->buttonSewSet->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonSewSet->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonSewSet->objectName())); + + ui->labelEmbNeedleNum->setFont(fontNormal_1); + ui->labelEmbNeedleNum->setStyleSheet(LABELWHITESTYLE); + ui->buttonEmbNeedleNum->setFont(fontNormal_1); + + ui->buttonOk->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()),12); +} + +void NeedleBarSetWidget::embNeedleBtnClick() +{ + m_pEmbNeedleBtn = (QPushButton*) this->sender(); + + if(m_pEmbNeedleBtn == NULL) + { + return; + } + for(int i = 0; i < m_embNeedleBtnList.size(); i++) + { + m_embNeedleBtnList.at(i)->setChecked(false); + m_embNeedleBtnList.at(i)->setCheckable(false); + } + m_pEmbNeedleBtn->setCheckable(true); + m_pEmbNeedleBtn->setChecked(true); +} + +void NeedleBarSetWidget::colorBtnClick() +{ + m_pColorBtn = (QPushButton*) this->sender(); + + if(m_pColorBtn == NULL || m_pEmbNeedleBtn == NULL) + { + return; + } + int idx = 0; + for(int i = 0; i < m_colorBtnList.size(); i++) + { + if(m_pColorBtn == m_colorBtnList.at(i)) + { + idx = i; + } + m_colorBtnList.at(i)->setChecked(false); + m_colorBtnList.at(i)->setCheckable(false); + } + m_pColorBtn->setCheckable(true); + m_pColorBtn->setChecked(true); + + QRgb rgb = m_pColorBuf[(idx % BF_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + + m_pEmbNeedleBtn->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + + //写入配置 + for(int i = 0; i < m_embNeedleBtnList.size(); i++) + { + if(m_pEmbNeedleBtn == m_embNeedleBtnList.at(i)) + { + if(m_setType == SET_TYPE_NEEDLE_EMB) + { + g_pSettings->writeToIniFile("EmbNeedle/"+QString::number(i+1)+"_coloridx",QString::number(idx)); + g_pCurEmbData->setNeedleColorTable(i,idx); + emit siChangeNeedleColor(i,idx); + } + else if(m_setType == SET_TYPE_NEEDLE_PUNCH) + { + g_pSettings->writeToIniFile("PunchNeedle/"+QString::number(i+1)+"_coloridx",QString::number(idx)); + g_pCurEmbData->setNeedleColorTable(i+EMB_NEEDLE_NUM,idx); + emit siChangeNeedleColor(i+EMB_NEEDLE_NUM,idx); + } + else if(m_setType == SET_TYPE_NEEDLE_SEW) + { + g_pSettings->writeToIniFile("SewNeedle/"+QString::number(i+1)+"_coloridx",QString::number(idx)); + g_pCurEmbData->setNeedleColorTable(i+EMB_NEEDLE_NUM+PUNCH_NEEDLE_NUM,idx); + emit siChangeNeedleColor(i+EMB_NEEDLE_NUM+PUNCH_NEEDLE_NUM,idx); + } + + break; + } + } +} + +void NeedleBarSetWidget::setTypeLogo(QString tStyle) +{ + ui->buttonTypeLogo->setUnPreBtnLogo(tStyle); +} + +void NeedleBarSetWidget::setMainTitle(QString str) +{ + ui->labelMainTitle->setText(str); +} + +void NeedleBarSetWidget::setSubTitle(QString str) +{ + ui->labelSubTitle->setText(str); +} + +void NeedleBarSetWidget::initNeedleBar() +{ + //标题显示 + if(m_setType == SET_TYPE_NEEDLE_EMB) + { + ui->labelEmbNeedleNum->setText(tr("EmbNeedleNum:"));//绣花针杆个数: + } + else if(m_setType == SET_TYPE_NEEDLE_PUNCH) + { + ui->labelEmbNeedleNum->setText(tr("PunchNeedleNum:"));//冲孔针杆个数: + } + else if(m_setType == SET_TYPE_NEEDLE_SEW) + { + ui->labelEmbNeedleNum->setText(tr("SewNeedleNum:"));//缝纫针杆个数: + } + + //读入配置 + QFile iniFile(m_configFile); + + int num,idx; + num = idx = 0; + if(!iniFile.exists()) + { + num = 1; + idx = 0; + + QRgb rgb = m_pColorBuf[(idx % BF_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + + for(int i = 0; i < m_embNeedleBtnList.size(); i++) + { + if(i < num) + { + m_embNeedleBtnList.at(i)->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + m_embNeedleBtnList.at(i)->show(); + } + else + { + m_embNeedleBtnList.at(i)->hide(); + } + } + } + else + { + QRgb rgb = qRgb(0,255,0); + + if(m_setType == SET_TYPE_NEEDLE_EMB) + { + num = g_pSettings->readFromIniFile("EmbNeedle/number").toInt(); + } + else if(m_setType == SET_TYPE_NEEDLE_PUNCH) + { + num = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + } + else if(m_setType == SET_TYPE_NEEDLE_SEW) + { + num = g_pSettings->readFromIniFile("SewNeedle/number").toInt(); + } + + for(int i = 0; i < m_embNeedleBtnList.size(); i++)//32个针杆 + { + QString idxStr; + if(m_setType == SET_TYPE_NEEDLE_EMB) + { + idxStr = "EmbNeedle/"+QString::number(i+1)+"_coloridx"; + } + else if(m_setType == SET_TYPE_NEEDLE_PUNCH) + { + idxStr = "PunchNeedle/"+QString::number(i+1)+"_coloridx"; + } + else if(m_setType == SET_TYPE_NEEDLE_SEW) + { + idxStr = "SewNeedle/"+QString::number(i+1)+"_coloridx"; + } + + if(g_pSettings->ifKeyExists(idxStr) == true) + { + idx = g_pSettings->readFromIniFile(idxStr).toInt();//第几个针杆的颜色值 + rgb = m_pColorBuf[(idx % BF_SW_ND)]; + } + else + { + rgb = m_pColorBuf[(i % MC_SW_ND)]; + } + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + if(i < num) + { + m_embNeedleBtnList.at(i)->setStyleSheet(m_buttonStyle1 + cstyle + "}" + m_buttonStyle2); + m_embNeedleBtnList.at(i)->show(); + } + else + { + m_embNeedleBtnList.at(i)->hide(); + } + } + } + ui->buttonEmbNeedleNum->setText(QString::number(num)); +} + +//刷新右上方按钮的显示,包括选中状态 +void NeedleBarSetWidget::refreshTypeBtnShow() +{ + ui->buttonEmbSet->setChecked(false);//不是选中状态,可见 + ui->buttonEmbSet->setVisible(true); + ui->buttonPunchSet->setChecked(false);//不是选中状态,可见 + ui->buttonPunchSet->setVisible(true); + ui->buttonSewSet->setChecked(false);//不是选中状态,可见 + ui->buttonSewSet->setVisible(true); + + if(g_emResolut == resolution1910) + { + ui->buttonEmbSet->setGeometry(176,0,66,66); + ui->buttonPunchSet->setGeometry(88,0,66,66); + ui->buttonSewSet->setGeometry(0,0,66,66); + } + else if(g_emResolut == resolution1006) + { + ui->buttonEmbSet->setGeometry(114,0,50,50); + ui->buttonPunchSet->setGeometry(57,0,50,50); + ui->buttonSewSet->setGeometry(0,0,50,50); + } + + if(g_emMacType == MACHINE_PUNCH_SEW) //等于冲缝机 + { + m_setType = SET_TYPE_NEEDLE_PUNCH; + ui->labelEmbNeedleNum->setText(tr("PunchNeedleNum:"));//冲孔针杆个数: + ui->buttonPunchSet->setCheckable(true);//设置绣花为默认选中 + ui->buttonPunchSet->setChecked(true); + ui->buttonEmbSet->setVisible(false); + } + else if(g_emMacType == MACHINE_PUNCH_SEW_EMB)//等于冲缝绣 + { + m_setType = SET_TYPE_NEEDLE_PUNCH; + ui->labelEmbNeedleNum->setText(tr("PunchNeedleNum:"));//冲孔针杆个数: + ui->buttonPunchSet->setCheckable(true);//设置绣花为默认选中 + ui->buttonPunchSet->setChecked(true); + ui->buttonEmbSet->setVisible(true); + } + else + { + m_setType = SET_TYPE_NEEDLE_PUNCH; + ui->labelEmbNeedleNum->setText(tr("PunchNeedleNum:"));//冲孔针杆个数: + ui->buttonEmbSet->setVisible(false); + ui->buttonPunchSet->setVisible(false); + ui->buttonSewSet->setVisible(false); + } +} + +//刷新针杆数量及颜色 +void NeedleBarSetWidget::refreshNeedleColorShow() +{ + ui->buttonEmbSet->setChecked(false); + ui->buttonPunchSet->setChecked(false); + ui->buttonSewSet->setChecked(false); + initNeedleBar(); +} + +void NeedleBarSetWidget::on_buttonEmbNeedleNum_clicked() +{ + NumerInputDialog numberInputDlg; + numberInputDlg.setTitleStr(tr("Number set"));//个数设置 + numberInputDlg.setUnitStr(""); + + if(m_setType == SET_TYPE_NEEDLE_EMB) + { + numberInputDlg.setValueAndRange(ui->buttonEmbNeedleNum->text().toInt(), 1, 32, 0); + } + else if(m_setType == SET_TYPE_NEEDLE_PUNCH) + { + numberInputDlg.setValueAndRange(ui->buttonEmbNeedleNum->text().toInt(), 1, 15, 0); + } + else if(m_setType == SET_TYPE_NEEDLE_SEW) + { + numberInputDlg.setValueAndRange(ui->buttonEmbNeedleNum->text().toInt(), 1, 1, 0); + } + + //针杆设置的弹窗点击确认按钮就写在配置文件了 + if(numberInputDlg.exec() == 1) + { + s32 val = numberInputDlg.getValue(); + ui->buttonEmbNeedleNum->setText(QString::number(val)); + + for(int i = 0; i < m_embNeedleBtnList.size(); i++) + { + if(i < val) + { + m_embNeedleBtnList.at(i)->show(); + } + else + { + m_embNeedleBtnList.at(i)->hide(); + } + } + + //写入配置 + if(m_setType == SET_TYPE_NEEDLE_EMB) + { + g_pSettings->writeToIniFile("EmbNeedle/number",val); + } + else if(m_setType == SET_TYPE_NEEDLE_PUNCH) + { + g_pSettings->writeToIniFile("PunchNeedle/number",val); + } + else if(m_setType == SET_TYPE_NEEDLE_SEW) + { + g_pSettings->writeToIniFile("SewNeedle/number",val); + } + } +} + +void NeedleBarSetWidget::on_buttonOk_clicked() +{ + int embNum = g_pSettings->readFromIniFile("EmbNeedle/number").toInt(); + for(int i = 0; i < embNum; i++) + { + QString idxStr = "EmbNeedle/"+QString::number(i+1)+"_coloridx"; + + if(g_pSettings->ifKeyExists(idxStr) == false) + { + g_pSettings->writeToIniFile("EmbNeedle/"+QString::number(i+1)+"_coloridx",QString::number(i+1)); + g_pCurEmbData->setNeedleColorTable(i+1,i+1); + emit siChangeNeedleColor(i,i+1); + } + } + + int punchNum = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + for(int i = 0; i < punchNum; i++) + { + QString idxStr = "PunchNeedle/"+QString::number(i+1)+"_coloridx"; + + if(g_pSettings->ifKeyExists(idxStr) == false) + { + g_pSettings->writeToIniFile("PunchNeedle/"+QString::number(i+1)+"_coloridx",QString::number(i+1)); + g_pCurEmbData->setNeedleColorTable(i+1+EMB_NEEDLE_NUM,i+1); + emit siChangeNeedleColor(i+EMB_NEEDLE_NUM,i+1); + } + } + + int sewNum = g_pSettings->readFromIniFile("SewNeedle/number").toInt(); + for(int i = 0; i < sewNum; i++) + { + QString idxStr = "SewNeedle/"+QString::number(i+1)+"_coloridx"; + + if(g_pSettings->ifKeyExists(idxStr) == false) + { + g_pSettings->writeToIniFile("SewNeedle/"+QString::number(i+1)+"_coloridx",QString::number(i+1)); + g_pCurEmbData->setNeedleColorTable(i+1+EMB_NEEDLE_NUM+PUNCH_NEEDLE_NUM,i+1); + emit siChangeNeedleColor(i+EMB_NEEDLE_NUM+PUNCH_NEEDLE_NUM,i+1); + } + } + + //密码权限,单次有效 + g_emUser = operate; + this->hide(); +} + +//绣花针杆颜色设置 +void NeedleBarSetWidget::on_buttonEmbSet_clicked() +{ + m_setType = SET_TYPE_NEEDLE_EMB; + refreshNeedleColorShow(); + ui->buttonEmbSet->setCheckable(true); + ui->buttonEmbSet->setChecked(true); + + ui->buttonPunchSet->setChecked(false); + ui->buttonPunchSet->setCheckable(false); + ui->buttonSewSet->setChecked(false); + ui->buttonSewSet->setCheckable(false); +} + +void NeedleBarSetWidget::on_buttonPunchSet_clicked() +{ + m_setType = SET_TYPE_NEEDLE_PUNCH; + refreshNeedleColorShow(); + ui->buttonPunchSet->setCheckable(true); + ui->buttonPunchSet->setChecked(true); + + ui->buttonEmbSet->setChecked(false); + ui->buttonEmbSet->setCheckable(false); + ui->buttonSewSet->setChecked(false); + ui->buttonSewSet->setCheckable(false); +} + +void NeedleBarSetWidget::on_buttonSewSet_clicked() +{ + m_setType = SET_TYPE_NEEDLE_SEW; + refreshNeedleColorShow(); + ui->buttonSewSet->setCheckable(true); + ui->buttonSewSet->setChecked(true); + + ui->buttonEmbSet->setChecked(false); + ui->buttonEmbSet->setCheckable(false); + ui->buttonPunchSet->setChecked(false); + ui->buttonPunchSet->setCheckable(false); +} diff --git a/sharedviews/needlebarsetwidget.h b/sharedviews/needlebarsetwidget.h new file mode 100644 index 0000000..718dbf6 --- /dev/null +++ b/sharedviews/needlebarsetwidget.h @@ -0,0 +1,75 @@ +#ifndef NEEDLEBARSETWIDGET_H +#define NEEDLEBARSETWIDGET_H + +#include +#include +#include +#include +#include "numerinputdialog.h" +#include "mybutton.h" +#include "setcontrolstyle.h" +#include +#include +#include "mctype/mainwidgetfunction.h" + +enum SET_TYPE { + SET_TYPE_NEEDLE_EMB = 1, //绣花针杆设置 + SET_TYPE_NEEDLE_PUNCH, //冲孔针杆设置 + SET_TYPE_NEEDLE_SEW //缝纫针杆设置 +}; + +namespace Ui { +class NeedleBarSetWidget; +} + +class NeedleBarSetWidget : public QWidget +{ + Q_OBJECT + +public: + explicit NeedleBarSetWidget(QWidget *parent = 0); + ~NeedleBarSetWidget(); + +private: + Ui::NeedleBarSetWidget *ui; + QList m_embNeedleBtnList; + QList m_colorBtnList; + QPushButton *m_pEmbNeedleBtn; + QPushButton *m_pColorBtn; + + QRgb *m_pColorBuf; + QString m_buttonStyle1; + QString m_buttonStyle2; + + QString m_configFile; + s16 m_setType; //针杆设置类型 + +private: + void initWidget(); + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006(); + void initControlStyle();//初始化窗体控件样式 + void refreshNeedleColorShow();//刷新针杆数量及颜色 + +public: + void setTypeLogo(QString tStyle);//设置类型图标 + void setMainTitle(QString str);//设置主title + void setSubTitle(QString str);//设置副title + void initNeedleBar();//初始化针杆 + void refreshTypeBtnShow();//刷新右上方按钮的显示,包括选中状态 + +private slots: + void embNeedleBtnClick(); + void colorBtnClick(); + void on_buttonEmbNeedleNum_clicked(); + void on_buttonOk_clicked(); + void on_buttonEmbSet_clicked(); + void on_buttonPunchSet_clicked(); + void on_buttonSewSet_clicked(); + +signals: + void siChangeNeedleColor(int idx,int colorIdx); +}; + +#endif // NEEDLEBARSETWIDGET_H diff --git a/sharedviews/needlebarsetwidget.ui b/sharedviews/needlebarsetwidget.ui new file mode 100644 index 0000000..88293c5 --- /dev/null +++ b/sharedviews/needlebarsetwidget.ui @@ -0,0 +1,295 @@ + + + NeedleBarSetWidget + + + + 0 + 0 + 1024 + 600 + + + + Form + + + background-color: rgb(154, 154, 154); + + + + + 910 + 560 + 101 + 31 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + + 40 + 10 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + + + + 120 + 10 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + NeedleBar Set + + + + + + 30 + 90 + 221 + 441 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 13 + 10 + 81 + 20 + + + + NumSet: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 100 + 10 + 91 + 23 + + + + Qt::NoFocus + + + QPushButton +{ +background-color:rgba(240, 240, 240);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + 1 + + + + + + + 0 + 0 + 1024 + 600 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 270 + 90 + 711 + 441 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 140 + 40 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + NeedleBar Set + + + + + + 400 + 20 + 591 + 51 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 340 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 420 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 500 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + frameBack + framePageBtn + buttonTypeLogo + labelMainTitle + frameEmb + frameColor + labelSubTitle + frameRightUp + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/numerinputdialog.cpp b/sharedviews/numerinputdialog.cpp new file mode 100644 index 0000000..468d325 --- /dev/null +++ b/sharedviews/numerinputdialog.cpp @@ -0,0 +1,793 @@ +#include "numerinputdialog.h" +#include "ui_numerinputdialog.h" + +NumerInputDialog::NumerInputDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::NumerInputDialog) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + setAttribute(Qt::WA_TranslucentBackground, true);//设置窗体背景透明 + + initDialog(); + initControl(); +} + +NumerInputDialog::~NumerInputDialog() +{ + delete ui; +} + +QString NumerInputDialog::getShowString(int64_t val, int pointflag) +{ + double value = val; + + if (pointflag < 0) + { + pointflag = 0; + } + else if (pointflag > 5) + { + pointflag = 5; + } + + for (int i = 1; i < pointflag; i++) + { + value /= 10; + } + + QString str; + if (pointflag == 0) + { + str.sprintf("%.0f", value); + } + else if (pointflag == 1) + { + str.sprintf("%.0f", value); + str += "."; + } + else if (pointflag == 2) + { + str.sprintf("%.1f", value); + } + else if (pointflag == 3) + { + str.sprintf("%.2f", value); + } + else if (pointflag == 4) + { + str.sprintf("%.3f", value); + } + else // if (pointflag >= 5) + { + str.sprintf("%.4f", value); + } + return str; +} + +int NumerInputDialog::checkValueRange(int64_t val, int pointflag) +{ + int i, xsws; + int64_t min, max; + min = m_min; + max = m_max; + + xsws = pointflag - 1; + if (xsws < 0) + { + xsws = 0; + } + xsws = m_afterPoint - xsws; + if (xsws < 0) + { + xsws = 0; + } + + for (i = 0; i < xsws; i++) + { + min /= 10; + max /= 10; + } + + if (val < min || val > max) + { + return 1; + } + return 0; +} + +int64_t NumerInputDialog::fixValue(int64_t val, int pointflag) +{ + int i, xsws; + int64_t min, max; + min = m_min; + max = m_max; + + xsws = pointflag - 1; + if (xsws < 0) + { + xsws = 0; + } + xsws = m_afterPoint - xsws; + if (xsws < 0) + { + xsws = 0; + } + + for (i = 0; i < xsws; i++) + { + min /= 10; + max /= 10; + } + + if (val < min) + { + val = min; + } + if (val > max) + { + val = max; + } + + return val; +} + +int NumerInputDialog::getPointMuti(int pointflag) +{ + int muti = 1; + for (int i = 1; i < pointflag; i++) + { + muti *= 10; + } + return muti; +} + +void NumerInputDialog::showValue() +{ + ui->labelValue->setText(getShowString(m_value, m_pointFlag)); + + QString str = ui->labelValue->text(); + + // 修复判断数值范围时,无法正确区分小数点的问题 + int val = m_value; + int i; + if (m_pointFlag <= 1) + { + for (i=0; i 0 && val >= m_min && val <= m_max) + { + ui->buttonOk->setEnabled(true); + } + else + { + ui->buttonOk->setEnabled(false); + } +} + +void NumerInputDialog::showRange() +{ + QString min, max, def; + + if (m_afterPoint == 0) + { + min = getShowString(m_min, 0); + max = getShowString(m_max, 0); + def = getShowString(m_defVal, 0); + } + else + { + min = getShowString(m_min, m_afterPoint+1); + max = getShowString(m_max, m_afterPoint+1); + def = getShowString(m_defVal, m_afterPoint+1); + } + + QString rangeStr = "(" + min + "~" + max + ")" + m_unitStr; + ui->labelRange->setText(rangeStr); +} + +void NumerInputDialog::addNum(int num) +{ + if (((m_pointFlag < 5) && + ((m_afterPoint == 0) || (m_pointFlag < m_afterPoint + 1)) && + ((m_value > -100000000) && (m_value < 100000000)) && // 修复数值太大时显示错乱的问题 + 1 ) || + (m_defFlag == 0) || + 0 ) + { + int64_t val; + int pflag; + + if (m_defFlag == 0) + {// 第一次按数字键,从0开始计数,解决每次修改值之前都需要按C键的问题 + m_value = 0; + m_pointFlag = 0; + m_defFlag = 1; + } + val = m_value; + pflag = m_pointFlag; + + if (num < 0) + { + num = 0; + } + else if (num > 9) + { + num = 9; + } + + val *= 10; + val += num*((m_value<0)?-1:1); + + if (pflag != 0) + { + pflag++; + if (pflag > 5) + { + pflag = 5; + } + } + + //if (checkValueRange(val, pflag) == 0) + { + m_value = val; + m_pointFlag = pflag; + } + } +} + +void NumerInputDialog::changeValue(int weights) +{ + int64_t val; + //int pflag; + + val = m_value; + + m_defFlag = 0; // 初始值 + if (weights > -1 && weights < 1) // 小数 + { + + } + + //pflag = m_pointFlag; + val += weights*getPointMuti(m_pointFlag); + + //if (checkValueRange(val, pflag) == 0) + { + // val = fixValue(val, m_pointFlag); + // if (val != m_value) + { + m_value = val; + showValue(); + } + } +} + +//初始化窗体 +void NumerInputDialog::initDialog() +{ + setTitleStr(""); + m_value = 0; + m_min = 0; + m_max = 0; + m_afterPoint = 0; + m_defVal = 0; + m_defFlag = 0; + m_pointFlag = 0; + m_unitStr.clear(); + + m_leftNumberBtnList.clear(); + m_leftNumberBtnList.append(ui->buttonPlusMinus); + m_leftNumberBtnList.append(ui->buttonClean); + m_leftNumberBtnList.append(ui->buttonDelete); + m_leftNumberBtnList.append(ui->buttonNum7); + m_leftNumberBtnList.append(ui->buttonNum8); + m_leftNumberBtnList.append(ui->buttonNum9); + m_leftNumberBtnList.append(ui->buttonNum4); + m_leftNumberBtnList.append(ui->buttonNum5); + m_leftNumberBtnList.append(ui->buttonNum6); + m_leftNumberBtnList.append(ui->buttonNum1); + m_leftNumberBtnList.append(ui->buttonNum2); + m_leftNumberBtnList.append(ui->buttonNum3); + m_leftNumberBtnList.append(ui->buttonNum00); + m_leftNumberBtnList.append(ui->buttonNum0); + m_leftNumberBtnList.append(ui->buttonPoint); + + m_rightNumberBtnList.clear(); + m_rightNumberBtnList.append(ui->buttonDec1000); + m_rightNumberBtnList.append(ui->buttonInc1000); + m_rightNumberBtnList.append(ui->buttonDec100); + m_rightNumberBtnList.append(ui->buttonInc100); + m_rightNumberBtnList.append(ui->buttonDec10); + m_rightNumberBtnList.append(ui->buttonInc10); + m_rightNumberBtnList.append(ui->buttonDec1); + m_rightNumberBtnList.append(ui->buttonInc1); + m_rightNumberBtnList.append(ui->buttonDec01); + m_rightNumberBtnList.append(ui->buttonInc01); +} + +//初始化窗体控件,包括位置、尺寸、样式 +void NumerInputDialog::initControl() +{ + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + default: + this->resize(1920,1080); + break; + } + initControlStyle();//初始化窗体控件样式 +} + +//初始化窗体控件为1920x1080分辨率 +void NumerInputDialog::initResolution1910() +{ + this->resize(1044,800); + this->move((1920-this->width())/2,(1080-this->height())/2); + + ui->frameBack->setGeometry(0,0,1044,800); + ui->labelTitle->setGeometry(26,4,980,56); + ui->labelValue->setGeometry(32,140,550,56); + ui->labelRange->setGeometry(598,140,420,56); + + for(int i = 0; i < 5; i++) + { + for(int j = 0; j < 3; j ++) + { + m_leftNumberBtnList[i*3+j]->setGeometry(40+j*194,266+i*82,174,74); + } + } + + for(int i = 0; i < 5; i++) + { + for(int j = 0; j < 2; j ++) + { + m_rightNumberBtnList[i*2+j]->setGeometry(640+j*194,266+i*82,174,74); + } + } + + ui->buttonOk->setGeometry(640,686,174,74); + ui->buttonCancel->setGeometry(834,686,174,74); +} + +//初始化窗体控件为1024x600分辨率 +void NumerInputDialog::initResolution1006() +{ + this->resize(584,448); + this->move((1024-this->width())/2,(600-this->height())/2); + ui->frameBack->setGeometry(0,0,584,448); + ui->labelTitle->setGeometry(7,-8,544,48); + ui->labelValue->setGeometry(40,74,284,44); + ui->labelRange->setGeometry(340,84,220,21); + + for(int i = 0; i < 5; i++) + { + for(int j = 0; j < 3; j ++) + { + m_leftNumberBtnList[i*3+j]->setGeometry(23+j*107,129+i*52,96,40); + } + } + + for(int i = 0; i < 5; i++) + { + for(int j = 0; j < 2; j ++) + { + m_rightNumberBtnList[i*2+j]->setGeometry(364+j*107,129+i*52,96,40); + } + } + ui->buttonOk->setGeometry(365,389,96,40); + ui->buttonCancel->setGeometry(471,389,96,40); +} + +//初始化窗体控件样式 +void NumerInputDialog::initControlStyle() +{ + //白蓝色渐变、灰蓝色渐变 + QString style = "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(255, 255, 255), stop:1 rgb(215, 243, 254));border-radius:5px;color:rgb(0, 0, 0);}"; + style += "QPushButton:pressed{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(217, 222, 224), stop:1 rgb(191,213,223));color:rgb(0, 0, 0);}"; + style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(230, 230, 230), stop:1 rgb(182,182,182));color:rgb(0, 0, 0);}"; + + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + ui->frameBack->setStyleSheet(setControlStyle.getStyleSheet(this->objectName())); + + for(int i = 0; i < m_leftNumberBtnList.size(); i++) + { + m_leftNumberBtnList[i]->setStyleSheet(style); + m_leftNumberBtnList[i]->setFont(fontNormal_1); + } + + for(int i = 0; i < m_rightNumberBtnList.size(); i++) + { + m_rightNumberBtnList[i]->setStyleSheet(style); + m_rightNumberBtnList[i]->setFont(fontNormal_1); + } + + ui->labelTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelTitle->setFont(fontNormal_1); + ui->labelTitle->setAlignment(Qt::AlignLeft); + ui->labelTitle->setAlignment(Qt::AlignVCenter); + + ui->labelValue->setStyleSheet(LABELNAVYBLUESTYLE); + ui->labelValue->setFont(fontNormal_1); + + ui->labelRange->setStyleSheet(LABELGREYSTYLE); + ui->labelRange->setFont(fontNormal_1); + ui->labelRange->setAlignment(Qt::AlignLeft); + ui->labelRange->setAlignment(Qt::AlignVCenter); + + ui->buttonOk->setWhiteBlueBottomStyle(); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()+"_1"),12); + ui->buttonCancel->setWhiteBlueBottomStyle(); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()+"_1"),12); +} + +//设置标题 +void NumerInputDialog::setTitleStr(QString str) +{ + ui->labelTitle->setText(str); +} + +void NumerInputDialog::setUnitStr(QString str) +{ + m_unitStr = str; +// showRange(); +} + +void NumerInputDialog::setValueAndRange(int64_t val, int64_t min, int64_t max, int afterpoint, int defen, int64_t defvalue) +{ + m_value = val; + m_min = min; + m_max = max; + m_afterPoint = afterpoint; + + if (m_min < -999999999) + { + m_min = -999999999; // 这个值看起来更舒服些 + } + if (m_max > 999999999) + { + m_max = 999999999; // 这个值看起来更舒服些 + } + if (m_min > m_max) + { + double tmp = m_min; + m_min = m_max; + m_max = tmp; + } + + if (m_afterPoint < 0) + { + m_afterPoint = 0; + } + if (m_afterPoint > 4) + { + m_afterPoint = 4; + } + + if (m_value < m_min) + { + m_value = m_min; + } + if (m_value > m_max) + { + m_value = m_max; + } + + if (m_afterPoint != 0) + { + m_pointFlag = m_afterPoint + 1; + } + else + { + m_pointFlag = 0; + } + + m_defFlag = defen; + m_defVal = defvalue; + + showRange(); + showValue(); +} + +int64_t NumerInputDialog::getValue() +{ + int i, j; + int64_t val = m_value; + i = m_pointFlag; + j = m_afterPoint; + if (j != 0) + { + j += 1; + } + + while (i < j) + { + if (i != 0) + { + val *= 10; + } + i++; + } + + return val; +} + +void NumerInputDialog::on_buttonClean_clicked() +{ + m_pointFlag = 0; + m_value = 0; + m_defFlag = 0; + showValue(); +} + +void NumerInputDialog::on_buttonNum00_clicked() +{ + addNum(0); + addNum(0); + showValue(); +} + +void NumerInputDialog::on_buttonDelete_clicked() +{ + m_defFlag = 1; + + if (m_pointFlag != 1) + { + int64_t val; + int pflag; + val = m_value; + pflag = m_pointFlag; + val /= 10; + pflag--; + if (pflag < 0) + { + pflag = 0; + } + //if (checkValueRange(val, pflag) == 0) + { + m_value = val; + } + } + if (m_pointFlag != 0) + { + m_pointFlag--; + } + showValue(); +} + +void NumerInputDialog::on_buttonNum7_clicked() +{ + addNum(7); + showValue(); +} + +void NumerInputDialog::on_buttonNum8_clicked() +{ + addNum(8); + showValue(); +} + +void NumerInputDialog::on_buttonNum9_clicked() +{ + addNum(9); + showValue(); +} + +void NumerInputDialog::on_buttonNum4_clicked() +{ + addNum(4); + showValue(); +} + +void NumerInputDialog::on_buttonNum5_clicked() +{ + addNum(5); + showValue(); +} + +void NumerInputDialog::on_buttonNum6_clicked() +{ + addNum(6); + showValue(); +} + +void NumerInputDialog::on_buttonNum1_clicked() +{ + addNum(1); + showValue(); +} + +void NumerInputDialog::on_buttonNum2_clicked() +{ + addNum(2); + showValue(); +} + +void NumerInputDialog::on_buttonNum3_clicked() +{ + addNum(3); + showValue(); +} + +void NumerInputDialog::on_buttonPlusMinus_clicked() +{ + int64_t val; + val = m_value; + val *= -1; + //if (checkValueRange(val, m_pointFlag) == 0) + { + m_value = val; + showValue(); + } +} + +void NumerInputDialog::on_buttonNum0_clicked() +{ + addNum(0); + showValue(); +} + +void NumerInputDialog::on_buttonPoint_clicked() +{ + if (m_pointFlag == 0 && m_afterPoint != 0) + { + m_pointFlag = 1; + showValue(); + } +} + +void NumerInputDialog::on_buttonDec1000_clicked() +{ + changeValue(-1000); +} + +void NumerInputDialog::on_buttonInc1000_clicked() +{ + changeValue(1000); +} + +void NumerInputDialog::on_buttonDec100_clicked() +{ + changeValue(-100); +} + +void NumerInputDialog::on_buttonInc100_clicked() +{ + changeValue(100); +} + +void NumerInputDialog::on_buttonDec10_clicked() +{ + changeValue(-10); +} + +void NumerInputDialog::on_buttonInc10_clicked() +{ + changeValue(10); +} + +void NumerInputDialog::on_buttonDec1_clicked() +{ + changeValue(-1); +} + +void NumerInputDialog::on_buttonInc1_clicked() +{ + changeValue(1); +} + +void NumerInputDialog::on_buttonDec01_clicked() +{ + if (m_afterPoint != 0) + { + + m_defFlag = 0; + int64_t val; + int pflag, muti; + + int dir; + int weights = -1; + muti = 1; + + //dir = m_value > 0 ? 1:-1; + dir = m_value > 0 ? 1:1; + val = m_value; + pflag = m_pointFlag; + + if (m_pointFlag <= 1) // 是整数 + { + val *= 10; + pflag = 2; // 转换为1位小数 + } + else // 小数 + { + for (int i = 2; i < m_pointFlag; i++) + { + muti *= 10; + } + } + + val += weights * dir * muti; + + //if (checkValueRange(val, pflag) == 0) + { + // val = fixValue(val, pflag); + m_value = val; + m_pointFlag = pflag; + showValue(); + } + } +} + +void NumerInputDialog::on_buttonInc01_clicked() +{ + if (m_afterPoint != 0) + { + + m_defFlag = 0; + int64_t val; + int pflag, muti; + int dir; + int weights = 1; + + //dir = m_value > 0 ? 1:-1; + dir = m_value > 0 ? 1:1; + muti = 1; + + val = m_value; + pflag = m_pointFlag; + + if (m_pointFlag <= 1) // 是整数 + { + val *= 10; + pflag = 2; // 转换为1位小数 + } + else // 小数 + { + + for (int i = 2; i < m_pointFlag; i++) + { + muti *= 10; + } + } + + val += weights * dir * muti; + + //if (checkValueRange(val, pflag) == 0) + { + // val = fixValue(val, pflag); + m_value = val; + m_pointFlag = pflag; + showValue(); + } + } +} + +void NumerInputDialog::on_buttonOk_clicked() +{ + done(1); +} + +void NumerInputDialog::on_buttonCancel_clicked() +{ + done(0); +} diff --git a/sharedviews/numerinputdialog.h b/sharedviews/numerinputdialog.h new file mode 100644 index 0000000..6b01858 --- /dev/null +++ b/sharedviews/numerinputdialog.h @@ -0,0 +1,90 @@ +#ifndef NUMERINPUTDIALOG_H +#define NUMERINPUTDIALOG_H + +#include +#include "mybutton.h" +#include "setcontrolstyle.h" + +namespace Ui { +class NumerInputDialog; +} + +class NumerInputDialog : public QDialog +{ + Q_OBJECT + +public: + explicit NumerInputDialog(QWidget *parent = 0); + ~NumerInputDialog(); + +private: + Ui::NumerInputDialog *ui; + +private: + int64_t m_value; + int64_t m_min; + int64_t m_max; + int m_afterPoint; + int64_t m_defVal; + +private: + int m_defFlag; + int m_pointFlag; // 小数点标志 + QString m_unitStr; + QList m_leftNumberBtnList; + QList m_rightNumberBtnList; + +private: + QString getShowString(int64_t val, int pointflag); + int checkValueRange(int64_t val, int pointflag); + int64_t fixValue( int64_t val, int pointflag); + int getPointMuti(int pointflag); + void showValue(); + void showRange(); + void addNum(int num); + void changeValue(int weights); + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006(); + void initControlStyle();//初始化窗体控件样式 + +public: + void initDialog();//初始化窗体 + void setTitleStr(QString str);//设置标题 + void setUnitStr(QString str); + void setValueAndRange(int64_t val, int64_t min, int64_t max, int afterpoint, int defen = 0, int64_t defvalue = 1); + int64_t getValue(); + +private slots: + void on_buttonClean_clicked(); + void on_buttonNum00_clicked(); + void on_buttonDelete_clicked(); + void on_buttonNum7_clicked(); + void on_buttonNum8_clicked(); + void on_buttonNum9_clicked(); + void on_buttonNum4_clicked(); + void on_buttonNum5_clicked(); + void on_buttonNum6_clicked(); + void on_buttonNum1_clicked(); + void on_buttonNum2_clicked(); + void on_buttonNum3_clicked(); + void on_buttonPlusMinus_clicked(); + void on_buttonNum0_clicked(); + void on_buttonPoint_clicked(); + void on_buttonDec1000_clicked(); + void on_buttonInc1000_clicked(); + void on_buttonDec100_clicked(); + void on_buttonInc100_clicked(); + void on_buttonDec10_clicked(); + void on_buttonInc10_clicked(); + void on_buttonDec1_clicked(); + void on_buttonInc1_clicked(); + void on_buttonDec01_clicked(); + void on_buttonInc01_clicked(); + void on_buttonOk_clicked(); + void on_buttonCancel_clicked(); +}; + +#endif // NUMERINPUTDIALOG_H diff --git a/sharedviews/numerinputdialog.ui b/sharedviews/numerinputdialog.ui new file mode 100644 index 0000000..0575d22 --- /dev/null +++ b/sharedviews/numerinputdialog.ui @@ -0,0 +1,1052 @@ + + + NumerInputDialog + + + + 0 + 0 + 545 + 467 + + + + Dialog + + + + + 120 + 116 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + C + + + false + + + + + + 340 + 114 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + -1000 + + + false + + + + + + 440 + 408 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + + + + false + + + + + + 440 + 114 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + +1000 + + + false + + + + + + 340 + 288 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + -1 + + + false + + + + + + 220 + 232 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 6 + + + false + + + + + + 119 + 174 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 8 + + + false + + + + + + 330 + 70 + 131 + 21 + + + + + + + (0~3000)rmp + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 440 + 230 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + +10 + + + false + + + + + + 20 + 348 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 00 + + + false + + + + + + 220 + 174 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 9 + + + false + + + + + + 22 + 64 + 284 + 44 + + + + background-color: rgb(255, 255, 255); + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 440 + 172 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + +100 + + + false + + + + + + 440 + 288 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + +1 + + + false + + + + + + 220 + 348 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + + + + false + + + + + + 340 + 172 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + -100 + + + false + + + + + + 119 + 232 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 5 + + + false + + + + + + 340 + 408 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + + + + false + + + + + + 18 + 174 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 7 + + + false + + + + + + 18 + 232 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 4 + + + false + + + + + + 0 + 0 + 545 + 48 + + + + + + + Number input + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 220 + 116 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + + + + false + + + + + + 18 + 116 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + -/+ + + + false + + + + + + 119 + 290 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 2 + + + false + + + + + + 119 + 348 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 0 + + + false + + + + + + 18 + 290 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 1 + + + false + + + + + + 440 + 346 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + +0.1 + + + false + + + + + + 220 + 290 + 92 + 50 + + + + + 61 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + 3 + + + false + + + + + + 340 + 346 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + -0.1 + + + false + + + + + + 340 + 230 + 92 + 50 + + + + + 90 + 10 + + + + + 200 + 80 + + + + Qt::NoFocus + + + + + + -10 + + + false + + + + + + 0 + 0 + 545 + 467 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + frameBack + buttonClean + buttonDec1000 + buttonCancel + buttonInc1000 + buttonDec1 + buttonNum6 + buttonNum8 + labelRange + buttonInc10 + buttonNum00 + buttonNum9 + labelValue + buttonInc100 + buttonInc1 + buttonPoint + buttonDec100 + buttonNum5 + buttonOk + buttonNum7 + buttonNum4 + labelTitle + buttonDelete + buttonPlusMinus + buttonNum2 + buttonNum0 + buttonNum1 + buttonInc01 + buttonNum3 + buttonDec01 + buttonDec10 + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/parametersetdialog.cpp b/sharedviews/parametersetdialog.cpp new file mode 100644 index 0000000..ce82d29 --- /dev/null +++ b/sharedviews/parametersetdialog.cpp @@ -0,0 +1,2622 @@ +#include "parametersetdialog.h" +#include "ui_parametersetdialog.h" + +ParameterSetDialog::ParameterSetDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::ParameterSetDialog), + m_itemPerPage(12) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + + this->move(0,0); + m_curPage = 0; + m_rootCurPage = 0; + + //获取网卡ID + m_networkCardID.clear(); + QList interfaces = QNetworkInterface::allInterfaces(); + if(interfaces.size() == 1) + { + QNetworkInterface item = interfaces.at(0); + m_networkCardID = item.hardwareAddress(); + } + else + { + int nCnt = interfaces.count(); + for(int i = 0; i < nCnt; i++) + { + //QNetworkInterface item = interfaces.at(i); + //m_networkCardID = item.hardwareAddress(); + + // 如果此网络接口被激活并且正在运行并且不是回环地址,则就是我们需要找的Mac地址 + if(interfaces[i].flags().testFlag(QNetworkInterface::IsUp) && + interfaces[i].flags().testFlag(QNetworkInterface::IsRunning) && + !interfaces[i].flags().testFlag(QNetworkInterface::IsLoopBack)) + { + m_networkCardID = interfaces[i].hardwareAddress(); + qDebug()<button1); + m_itemBtnList.append(ui->button2); + m_itemBtnList.append(ui->button3); + m_itemBtnList.append(ui->button4); + m_itemBtnList.append(ui->button5); + ui->button6->setVisible(false);//隐藏 + ui->button7->setVisible(false); + ui->button8->setVisible(false); + ui->button9->setVisible(false); + ui->button10->setVisible(false); + ui->button11->setVisible(false); + ui->button12->setVisible(false); + + if(g_emResolut == resolution1910)//1920x1080的分辨率每页显示12个条目 + { + ui->button6->setVisible(true); + ui->button7->setVisible(true); + ui->button8->setVisible(true); + ui->button9->setVisible(true); + ui->button10->setVisible(true); + ui->button11->setVisible(true); + ui->button12->setVisible(true); + m_itemBtnList.append(ui->button6); + m_itemBtnList.append(ui->button7); + m_itemBtnList.append(ui->button8); + m_itemBtnList.append(ui->button9); + m_itemBtnList.append(ui->button10); + m_itemBtnList.append(ui->button11); + m_itemBtnList.append(ui->button12); + } + else if(g_emResolut == resolution1006)//1024x600的分辨率每页显示8个条目 + { + ui->button6->setVisible(true);//显示 + ui->button7->setVisible(true); + ui->button8->setVisible(true); + m_itemBtnList.append(ui->button6); + m_itemBtnList.append(ui->button7); + m_itemBtnList.append(ui->button8); + } + + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + + initControlStyle();//初始化窗体控件样式 +} + +//初始化窗体控件为1920x1080分辨率 +void ParameterSetDialog::initResolution1910() +{ + this->resize(1920,1080); + ui->frameBack->setGeometry(0,0,1920,1080); + ui->buttonTypeLogo->setGeometry(128,66,78,78); + ui->labelMainTitle->setGeometry(226,60,1000,48); + ui->labelSubTitle->setGeometry(302,112,1000,36); + + ui->frameRightUp->setGeometry(1468,92,406,72); + ui->buttonHeadParaImport->setGeometry(76,0,66,66); + ui->buttonHeadParaExport->setGeometry(164,0,66,66); + ui->buttonEXBParaRestore->setGeometry(252,0,66,66); + ui->buttonReturn->setGeometry(340,0,66,66); + + QRect rectName(40,0,925,58); + QRect rectValue(1040,0,272,58); + for(int i = 0; i < m_itemPerPage; i++) + { + m_itemBtnList[i]->setGeometry(295,180 + i * 64,1340,58); + m_itemBtnList[i]->initLeftNameRightValue(rectName,rectValue,1); + } + + ui->framePageBtn->setGeometry(1120,990,800,70); + ui->labelPage->setGeometry(32,1008,400,40); + ui->buttonPgUp->setGeometry(0,0,168,70); + ui->buttonPgDn->setGeometry(200,0,168,70); + ui->buttonOk->setGeometry(400,0,168,70); + ui->buttonCancel->setGeometry(600,0,168,70); +} + +//初始化窗体控件为1024x600分辨率 +void ParameterSetDialog::initResolution1006() +{ + m_itemPerPage = m_itemPerPage - 4; + this->resize(1024,600); + ui->frameBack->setGeometry(0,0,1024,600); + ui->buttonTypeLogo->setGeometry(25,30,60,60); + ui->labelMainTitle->setGeometry(100,30,200,24); + ui->labelSubTitle->setGeometry(130,64,240,21); + + ui->frameRightUp->setGeometry(746,40,800,61); + ui->buttonHeadParaImport->setGeometry(22,0,50,50); + ui->buttonHeadParaExport->setGeometry(86,0,50,50); + ui->buttonEXBParaRestore->setGeometry(150,0,50,50); + ui->buttonReturn->setGeometry(214,0,50,50); + + //内容的位置 + QRect rectName(40,-1,400,53); + QRect rectValue(460,-1,220,53); + for(int i = 0; i < m_itemPerPage; i++)//白色按下的效果 + { + m_itemBtnList[i]->setGeometry(153,96 + i * 53,718,53); + m_itemBtnList[i]->initLeftNameRightValue(rectName,rectValue,1); + } + + ui->framePageBtn->setGeometry(595,545,600,45); + ui->labelPage->setGeometry(20,550,102,45); + ui->buttonPgUp->setGeometry(0,0,96,40); + ui->buttonPgDn->setGeometry(106,0,96,40); + ui->buttonOk->setGeometry(212,0,96,40); + ui->buttonCancel->setGeometry(318,0,96,40); +} + +//初始化窗体控件样式 +void ParameterSetDialog::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + //背景图 + QString frameBackImgPath = setControlStyle.getSharedStyleSheet(); + ui->frameBack->setStyleSheet(frameBackImgPath); + ui->labelMainTitle->setFont(fontBold_1); + ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelSubTitle->setFont(fontNormal_1); + ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelPage->setFont(fontNormal_1); + ui->labelPage->setStyleSheet(LABELWHITESTYLE); + + //右上方 + ui->frameRightUp->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonEXBParaRestore->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonEXBParaRestore->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonEXBParaRestore->objectName())); + ui->buttonReturn->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonReturn->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonReturn->objectName())); + ui->buttonHeadParaImport->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonHeadParaImport->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonHeadParaImport->objectName())); + ui->buttonHeadParaExport->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonHeadParaExport->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonHeadParaExport->objectName())); + + //条目 + for(int i = 0; i < m_itemPerPage; i++) + { + m_itemBtnList[i]->setLabelFont(fontNormal_1); + } + + //四个按钮样式表一样 + ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); + + ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); + + ui->buttonOk->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()),12); + + ui->buttonCancel->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()),12); +} + +void ParameterSetDialog::refreshUi() +{ + ui->buttonOk->setVisible(true);//再进入界面时,刷新界面确认按钮就显示 + + if(m_paraType == PARA_TYPE_HMICONFIGURATION)//等于界面配置 + { + refreshProductType();//刷新产品类型 + } + + if (m_itemList.size() <= 0)//参数列表 + { + for (int i = 0; i < m_itemPerPage; i++) + { + m_itemBtnList.at(i)->hide(); + } + ui->labelPage->setText("PageNum: 0/0"); + ui->buttonPgUp->setEnabled(false); + ui->buttonPgDn->setEnabled(false); + ui->buttonOk->setEnabled(false); + ui->frameRightUp->setVisible(false); + + return;//下边的代码不执行 + } + + if(m_itemPerPage <= 0) + { + return; + } + + ui->buttonOk->setEnabled(true); + QString split1 = ":"; + QString split2 = ";"; + QString str; + + //----------- + int itemNum, pageNums; + itemNum = m_itemList.size();//列表总个数 + pageNums = (itemNum+m_itemPerPage-1) / m_itemPerPage;//一共有的页数 + + if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面 + { + if (m_rootCurPage > pageNums) // 当前页 + { + m_rootCurPage = pageNums; + } + if (m_rootCurPage <= 1) + { + m_rootCurPage = 1; + } + } + else + { + if (m_curPage > pageNums) // 当前页 + { + m_curPage = pageNums; + } + if (m_curPage <= 1) + { + m_curPage = 1; + } + } + + // 条目信息 + int i, itemidx; + if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面 + { + itemidx = (m_rootCurPage-1) * m_itemPerPage; + } + else + { + itemidx = (m_curPage-1) * m_itemPerPage; + } + + for (i = 0; i < m_itemPerPage; i++) + { + if (itemidx < m_itemList.size()) + { + const ParaItem & item = m_itemList.at(itemidx); + + if (item.readonly != 0) // 只读,不能设置 + { + m_itemBtnList.at(i)->show(); + m_itemBtnList.at(i)->setEnabled(false); + if(item.paraTypeSort == PARA_TYPE_MACH)//机器参数 + { + m_itemList[i].value = m_mcParaValues.buf[HEADNUMBERIDX];//机头个数 + //indexInPara 参数的索引 + // m_itemList[i].value = m_mcParaValues.buf[item.indexInPara]; + } + + if(item.paraTypeSort == ROOT_SORT_HEADSENSOR)//信号参数 + { + int w = m_itemBtnList[i]->labelName->width()+m_itemBtnList[i]->labelValue->width(); + int h = m_itemBtnList[i]->labelName->height(); + //重新设置宽度,整行都显示遍历状态信号,无value + m_itemBtnList[i]->labelName->resize(w,h); + } + } + else + { + //超级用户选择工作参数开关型后回到遍历设置会显示开关,以下代码隐藏开关 + if(item.valueType == PARA_VALUE_TYPE_CLICK) + { + m_itemBtnList.at(i)->setLabelValueImage(""); + } + m_itemBtnList.at(i)->show(); + m_itemBtnList.at(i)->setEnabled(true); + } + + m_itemBtnList.at(i)->setLabelName(item.paraName); + + if (item.valueType == PARA_VALUE_TYPE_INT) // = 1, 数字输入型 + { + str = getValueStr(item.value, item.afterPoint);//显示的是默认参数 + str += " " + item.unitStr; + // qDebug()<< item.value << item.afterpoint << item.unitstr; + m_itemBtnList.at(i)->setLabelValue(str);//设置参数显示的值,没连上就显示的默认参数 + m_itemBtnList.at(i)->show(); + } + else if (item.valueType == PARA_VALUE_TYPE_SW) // = 2, 开关选择型 + { + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + QString path; + path = setControlStyle.getBottomStyleSheet1(""); + + if (item.value != 0)//打开 + { + path += "switchOn_logo.png"; + } + else + { + path += "switchOff_logo.png"; + } + + m_itemBtnList.at(i)->setLabelValueImage(path); + } + else if (item.valueType == PARA_VALUE_TYPE_LIST) // = 3, 列表选择型 + { + QStringList vallist; + if(item.selList.indexOf(split1) == -1) + { + // 没找到 二级分割 + vallist = item.selList.split(split2, QString::SkipEmptyParts); + if (vallist.size() <= 0) + { + str = ""; + } + else + { + int selIdx = item.selIdx; + if (selIdx < 0) + { + selIdx = 0; + } + if (selIdx >= vallist.size()) + { + selIdx = vallist.size() - 1; + } + str = vallist.at(selIdx); + } + } + else + { + // 二级分割 + vallist = item.selList.split(split2, QString::SkipEmptyParts); + if (vallist.size() <= 0) + { + str = ""; + } + else + { + int miniIndex = vallist.first().split(split1, QString::SkipEmptyParts).at(1).toInt(); + int maxIndex = vallist.last().split(split1, QString::SkipEmptyParts).at(1).toInt(); + + //int selIdx = item.value; + int selIdx = item.selIdx; + if (selIdx < miniIndex) + { + selIdx = miniIndex; + } + if (selIdx >= maxIndex) + { + selIdx = maxIndex; + } + for (int var = 0; var < vallist.size(); ++var) + { + QStringList sublist = vallist.at(var).split(split1, QString::SkipEmptyParts); + if(sublist.at(1).toInt() == selIdx) + { + str = sublist.at(0); + } + } + } + } + if((m_paraType == PARA_TYPE_PATTERN && item.indexInPara == SET_ROTATESTYLE))//旋转式样 + { + //旋转式样加载P的图片 + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + QString path = setControlStyle.getSharedBottomStyleSheet("") + str + "_logo.png"; + m_itemBtnList.at(i)->setLabelValueImage(path); + } + else + { + m_itemBtnList.at(i)->setLabelValue(str); + } + } + else if (item.valueType == PARA_VALUE_TYPE_STRINPUT) // = 4, 字符串输入型 + { + str = item.valueStr; + m_itemBtnList.at(i)->setLabelValue(str); + m_itemBtnList.at(i)->show(); + } + else // = 0, 无值 + { + m_itemBtnList.at(i)->setLabelValue(""); + } + itemidx++; + } + else + { + m_itemBtnList.at(i)->setEnabled(false); + m_itemBtnList.at(i)->hide(); + } + } + + if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面 + { + // 超级用户界面按钮 + if (m_rootCurPage <= 1) + { + ui->buttonPgUp->setEnabled(false); + } + else + { + ui->buttonPgUp->setEnabled(true); + } + + if (m_rootCurPage >= pageNums) + { + ui->buttonPgDn->setEnabled(false); + } + else + { + ui->buttonPgDn->setEnabled(true); + } + } + else + { + // 按钮 + if (m_curPage <= 1) + { + ui->buttonPgUp->setEnabled(false); + } + else + { + ui->buttonPgUp->setEnabled(true); + } + + if (m_curPage >= pageNums) + { + ui->buttonPgDn->setEnabled(false); + } + else + { + ui->buttonPgDn->setEnabled(true); + } + } + + // 页信息 + QString strPage; + if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面 + { + strPage = tr("pageNum: ") + QString("%1/%2").arg(m_rootCurPage).arg(pageNums);//页数: + } + else + { + strPage = tr("pageNum: ") + QString("%1/%2").arg(m_curPage).arg(pageNums);//页数: + } + + ui->labelPage->setText(strPage); + + if(m_paraType == PARA_TYPE_EXBUPGRADE)//外围板升级参数 + { + ui->buttonOk->setEnabled(false); + } + if(m_paraType == PARA_TYPE_ROOT) + { + ui->buttonOk->setEnabled(false); + //ui->buttonOk->setEnabled(true);//增加了界面调试模式,超级用户界面按钮可用 + } + + if(m_paraType == PARA_TYPE_HEADPARAMETER || //机头板 + m_paraType == PARA_TYPE_MACH || + m_paraType == PARA_TYPE_WORK)//机头板参数或机器参数或工作参数(机器参数或工作参数为超级用户目录下的) + { + ui->frameRightUp->setVisible(true); + ui->buttonEXBParaRestore->setVisible(true);//恢复默认参数按钮 + ui->buttonReturn->setVisible(true);//返回上一级按钮 + ui->buttonHeadParaImport->setVisible(true); + ui->buttonHeadParaExport->setVisible(true); + } + else if( m_paraType == PARA_TYPE_HMICONFIGURATION||//超级用户花样参数 + m_paraType == PARA_TYPE_ROOTTRAVERSE ||//遍历设置 + m_paraType == PARA_TYPE_LOCKTEST ||//锁头测试 + m_paraType == PARA_TYPE_IOTCONFIGURATION ||//物联网配置 + m_paraType == PARA_TYPE_ROOT_PATTERN) //界面配置 + { + ui->frameRightUp->setVisible(true); + ui->buttonEXBParaRestore->setVisible(false); + ui->buttonHeadParaImport->setVisible(false); + ui->buttonHeadParaExport->setVisible(false); + ui->buttonReturn->setVisible(true);//返回上一级按钮 + } + else + { + ui->frameRightUp->setVisible(false); + } + //超级用户界面配置 + if(m_paraType == PARA_TYPE_HMICONFIGURATION) + { + ui->buttonOk->setEnabled(true); + } +} + +QString ParameterSetDialog::getValueStr(int64_t val, int afterpoint) +{ + QString str; + double value = val; + if (afterpoint <= 0) + { + str.sprintf("%.0f", value); + } + else if (afterpoint == 1) + { + value /= 10; + str.sprintf("%.1f", value); + } + else if (afterpoint == 2) + { + value /= 100; + str.sprintf("%.2f", value); + } + else if (afterpoint == 3) + { + value /= 1000; + str.sprintf("%.3f", value); + } + else // if (afterpoint >= 4) + { + value /= 10000; + str.sprintf("%.4f", value); + } + return str; +} + +void ParameterSetDialog::changeValue(int buttenidx) +{ +#if(0) + //等于机器参数或工作参数 + if(((m_paraType & PARA_TYPE_MACH) == PARA_TYPE_MACH) || + ((m_paraType & PARA_TYPE_WORK) == PARA_TYPE_WORK)) + { + if(g_emUser != repair)//权限不够先登录 + { + emit siUserLogin(repair); + if(g_emUser != repair)//发送登录信号后,权限如果还没改变就返回 + return; + } + } +#endif + + QString split1 = ":"; + QString split2 = ";"; + + if (buttenidx < 0 || buttenidx >= m_itemPerPage) + { + return ; + } + + int itemidx; + int selIdx = 0; + if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面 + { + itemidx = (m_rootCurPage-1) * m_itemPerPage; + } + else + { + itemidx = (m_curPage-1) * m_itemPerPage; + } + + itemidx += buttenidx; + + if (itemidx < m_itemList.size()) + { + int chgflag = 0; + s32 newvalue; + QString newStrValue; + const ParaItem & item = m_itemList.at(itemidx); + newvalue = item.value;//等于这个列表现在的值 + newStrValue = item.valueStr; + + if (item.valueType == PARA_VALUE_TYPE_INT) // 数字型 + { + int rslt; + NumerInputDialog ndlg(this); + ndlg.setTitleStr(item.paraName); + ndlg.setUnitStr(item.unitStr); + ndlg.setValueAndRange(item.value, item.minVal, item.maxVal, item.afterPoint); + rslt = ndlg.exec(); + + if (rslt == 1)//点了确认按钮 + { + s32 val = ndlg.getValue(); + if (val != newvalue)//更改后的值不等于之前存的值 + { + chgflag = 1; + newvalue = val; + } + } + } + else if (item.valueType == PARA_VALUE_TYPE_SW) // 开关型 + { + if (newvalue == 0) + { + newvalue = 1; + } + else + { + newvalue = 0; + } + chgflag = 1; + } + else if (item.valueType == PARA_VALUE_TYPE_LIST) + { + QStringList vallist; + if(item.selList.indexOf(split2) == -1) + { //没找到 二级分割 + vallist = item.selList.split(split1, QString::SkipEmptyParts); + if (vallist.size() > 0) + { + selIdx = item.selIdx + 1; + if (selIdx < 0) + { + selIdx = 0; + } + if (selIdx >= vallist.size()) // 循环选择 + { + selIdx = 0; + } + chgflag = 1; + } + } + else + { + //二级分割 注意 key 是 int val是字符串 + //分清楚 key 并不是 字符串的index 需要区分 + vallist = item.selList.split(split2, QString::SkipEmptyParts); + if (vallist.size() <= 0) + { + return; + } + else + { + // 使用 qmap 组成key: val + int miniVal = vallist.first().split(split1, QString::SkipEmptyParts).at(1).toInt(); + int maxVal = vallist.last().split(split1, QString::SkipEmptyParts).at(1).toInt(); + QMap seachDat ; + + for (int var = 0; var < vallist.size(); ++var) + { + QStringList mapDatList = vallist.at(var).split(split1, QString::SkipEmptyParts); + seachDat.insert(mapDatList.at(1).toInt(),mapDatList.at(0)); + } + + selIdx = item.selIdx; + + if(seachDat.contains(selIdx)) + { + //存在这个key + + } + else + { + //不存在这个key 用默认值存储 + selIdx = item.defValue; + } + + //找到下一个val vallist seach_dat + + for (int var = 0; var < vallist.size(); ++var) + { + if( vallist.at(var).split(split1, QString::SkipEmptyParts).at(1).toInt() == selIdx) + { + var++ ; + if( var >= vallist.size()) + { + var = 0 ; + } + selIdx = vallist.at(var).split(split1, QString::SkipEmptyParts).at(1).toInt(); + break; + } + } + if (selIdx < miniVal) + { + selIdx = miniVal; + } + if (selIdx > maxVal) + { + selIdx = maxVal; + } + chgflag = 1; + } + } + } + else if (item.valueType == PARA_VALUE_TYPE_STRINPUT) // 字符输入型 + { + PassWordDialog passWordDlg(this); + QString str(""); + passWordDlg.setTitleStr(tr("Character input"),-1);//字符输入 + passWordDlg.setShowIfVisible(true); + int rslt = passWordDlg.exec(); + if(rslt == 1) + { + str = passWordDlg.getInputStr(); + if (str != item.valueStr) + { + chgflag = 1; + newStrValue = str; + } + } + } + else if (item.valueType == PARA_VALUE_TYPE_CLICK) // 点击触发型 + { + s16 fun = item.indexInPara; + execItemClickEvent(fun); + return; + } + + if (chgflag != 0) + { + if(item.valueType == PARA_VALUE_TYPE_LIST) + { + m_itemList[itemidx].selIdx = selIdx; + m_itemList[itemidx].value = selIdx; + } + else if(item.valueType == PARA_VALUE_TYPE_STRINPUT) + { + m_itemList[itemidx].valueStr = newStrValue; + } + else + { + m_itemList[itemidx].value = newvalue;//列表里的值等于弹窗输入的值 + } + // qDebug()<< " newvalue " << newvalue; + + //等于遍历参数 + if((m_paraType & PARA_TYPE_ROOTTRAVERSE) == PARA_TYPE_ROOTTRAVERSE) + { + //点击节点类型的时候,显示机头个数 + m_itemList[3].paraName = tr("Numbers of heads");//机头个数 + + if(m_itemList[1].value == 2)//全部遍历 + { + m_itemList[1].value = m_mcParaValues.buf[0];//遍历次数改为机头个数 + m_itemList[2].value = 1;//机头号置为1 + m_itemList[2].readonly = 1;//机头号置为可读 + } + else if(m_itemList[1].value == 1)//单独遍历 + { + m_itemList[2].readonly = 0;//机头号置为可设置 + } + } + + refreshUi();//在这个函数里刷新 + } + } +} + +//刷新参数值 +void ParameterSetDialog::refreshValue() +{ + m_mcParaValues = m_mcParaValues; + m_wkParaValues = m_wkParaValues; + + for (int i = 0; i < m_itemList.size(); i++) + { + int type = m_itemList[i].paraType; + int idx = m_itemList.at(i).indexInPara; + int bitInWord = m_itemList[i].bitInWord; + s32 mcTempValue = m_mcParaValues.buf[idx]; + s32 wkTempValue = m_wkParaValues.buf[idx]; + + s32 headTempValue = m_headParaValues.paraBuf[idx]; + + if (idx < PARA_NUM) + { + if (type == PARA_TYPE_MACH) + { + // ljs++ + if (bitInWord == 0) + { + m_itemList[i].value = mcTempValue;//列表里的值,变成主控里的值 + if(m_itemList[i].valueType == PARA_VALUE_TYPE_LIST) + { + m_itemList[i].selIdx = mcTempValue; + } + } + else + { + u32 bitval = 0x01; + bitval <<= (bitInWord - 1); + if ((mcTempValue & bitval) == 0) + { + m_itemList[i].selIdx = 0; + m_itemList[i].value = 0; + } + else + { + m_itemList[i].selIdx = 1; + m_itemList[i].value = 1; + } + } + } + else if (type == PARA_TYPE_WORK) + { + // ljs++ + if (bitInWord == 0) + { + m_itemList[i].value = wkTempValue; + if(m_itemList[i].valueType == PARA_VALUE_TYPE_LIST) + { + m_itemList[i].selIdx = wkTempValue; + } + } + else + { + u32 bitval = 0x01; + bitval <<= (bitInWord - 1); + if ((wkTempValue & bitval) == 0) + { + m_itemList[i].selIdx = 0; + m_itemList[i].value = 0; + } + else + { + m_itemList[i].selIdx = 1; + m_itemList[i].value = 1; + } + } + } + else if (type == PARA_TYPE_HEADPARAMETER) + { + if (bitInWord == 0) + { + m_itemList[i].value = headTempValue; + if(m_itemList[i].valueType == PARA_VALUE_TYPE_LIST) + { + m_itemList[i].selIdx = headTempValue; + } + } + else + { + u32 bitval = 0x01; + bitval <<= (bitInWord - 1); + if ((headTempValue & bitval) == 0) + { + m_itemList[i].selIdx = 0; + m_itemList[i].value = 0; + } + else + { + m_itemList[i].selIdx = 1; + m_itemList[i].value = 1; + } + } + } + } + } +} + +//收到下位机参数改变信号的槽 +void ParameterSetDialog::paraChange(int type, int id) +{ + //点了主板的按钮后,现在这个g_pMachine就是对应主板的 + if (type == SEW_MCPARA_MACH) + { + if (id == 0) + { //得到当前主板的参数 + memcpy(&m_mcParaValues, &g_pMachine->getMcPara(), sizeof(ParaStruct)); + + m_setedFlag |= 0x01;//当前的主板 收到参数包 的标志改变 + } + } + else if (type == SEW_MCPARA_WORK) + { + if (id == 0) + { + memcpy(&m_wkParaValues, &g_pMachine->getWkPara(), sizeof(ParaStruct)); + m_setedFlag |= 0x02; + } + } + + m_mcParaValues = m_mcParaValues; + m_wkParaValues = m_wkParaValues; + + //等于机器参数或工作参数 + if(((m_paraType & PARA_TYPE_MACH) == PARA_TYPE_MACH) || + ((m_paraType & PARA_TYPE_WORK) == PARA_TYPE_WORK)) + { + if (m_setedFlag == 0x03)// = 0x03就是机器参数和主控参数都读过 + { + if (m_itemList.size() > 0)//参数列表 + { + ui->buttonOk->setEnabled(true);//如果从下位机得到了数据包,说明与下位机建立了联系。可以点击确认按钮 + } + refreshValue(); + refreshUi(); + } + } +} + +//刷新遍历参数信息 +void ParameterSetDialog::refreshSensorPara(int min, int max, int num, ParaItem &item, u32 traverseState) +{ + item.paraName.clear(); + int EMBNum = m_mcParaValues.buf[HEADNUMBERIDX];//机头个数 + //冲孔的PUNCH还没用的 + + QString sensorN = "-N";//未遍历成功 + QString sensorY = "-Y";//已遍历成功 + + if(max > num)//如果最大值15大于机头数,最大值减1 + { + max = num - 1; + } + //traverseState:遍历状态(每一位表示机头的状态) + //num:机头个数 + + if(EMBNum == 0) + { + return; + } + else + { + int maxBitEMB = EMBNum-1; + for(int i = min; i <= maxBitEMB; i++)//i等于最小值0 循环32次,一个u32有32位 + { + item.paraName += QString::number(i+1);//1-Y 2-Y 3-Y 4-Y + if(traverseState>>i & 1)//判读每位是0还是1 + { + item.paraName += sensorY; + } + else + { + item.paraName += sensorN; + } + item.paraName += " ";//添加空格 + refreshUi(); + } + } +} + +void ParameterSetDialog::saveParas(int idx) +{ + qDebug()<<"step 1"; + if (m_setedFlag == 0x03 && + (m_paraType == (PARA_TYPE_MACH | PARA_TYPE_WORK) || + m_paraType == PARA_TYPE_MACH || m_paraType == PARA_TYPE_WORK)) + { + int size = m_itemList.size(); + if (idx < 0) + { + int i; + for (i = 0; i < size; i++) + { + int id = m_itemList.at(i).indexInPara; + int type = m_itemList.at(i).paraType; + int bitInWord = m_itemList.at(i).bitInWord; + int value = m_itemList.at(i).value; + if (id < PARA_NUM && type == PARA_TYPE_MACH) + { + if (bitInWord == 0) // ljs++ + { + m_mcParaValues.buf[id] = m_itemList.at(i).value; + } + else + { + u32 bitval = 0x01; + bitval <<= (bitInWord - 1); + if (value == 0) + { + m_mcParaValues.buf[id] &= ~bitval; + } + else + { + m_mcParaValues.buf[id] |= bitval; + } + } + } + } + + qDebug()<<"step 2"; +#if(0) + for(int i = 0; i < MACHINE_NUMBER; i++) + { + g_pMachine[i]->setMcPara(&m_mcParaValues); + } +#endif + g_pMachine->setMcPara(&m_mcParaValues); + qDebug()<<"step 3"; + + for (i = 0; i < size; i++) + { + int id = m_itemList.at(i).indexInPara; + int type = m_itemList.at(i).paraType; + int bitInWord = m_itemList.at(i).bitInWord; + int value = m_itemList.at(i).value; + if (id < PARA_NUM && type == PARA_TYPE_WORK) + { + if (bitInWord == 0) // ljs++ + { + m_wkParaValues.buf[id] = m_itemList.at(i).value; + } + else + { + u32 bitval = 0x01; + bitval <<= (bitInWord - 1); + if (value == 0) + { + m_wkParaValues.buf[id] &= ~bitval; + } + else + { + m_wkParaValues.buf[id] |= bitval; + } + } + } + } + + qDebug()<<"step 4"; +#if(0) + for(int i = 0; i < MACHINE_NUMBER; i++) + { + g_pMachine[i]->setWkPara(&m_wkParaValues); + } +#endif + g_pMachine->setWkPara(&m_wkParaValues); + qDebug()<<"step 5"; + } + else if (idx < size) + { + int id = m_itemList.at(idx).indexInPara; + int type = m_itemList.at(idx).paraType; + int value = m_itemList.at(idx).value; + int bitInWord = m_itemList.at(idx).bitInWord; // ljs++ + if (id < PARA_NUM && type == PARA_TYPE_MACH) + { + if (bitInWord == 0) + { + m_mcParaValues.buf[id] = value; + } + else + { + u32 bitval = 0x01; + bitval <<= (bitInWord - 1); + if (value == 0) + { + m_mcParaValues.buf[id] &= ~bitval; + } + else + { + m_mcParaValues.buf[id] |= bitval; + } + value = m_mcParaValues.buf[id]; + } + + qDebug()<<"step 6"; +#if(0) + for(int i = 0; i < MACHINE_NUMBER; i++) + { + g_pMachine[i]->setAMcPara(id+1, value); + } +#endif + g_pMachine->setAMcPara(id+1, value); + qDebug()<<"step 7"; + } + else if (id < PARA_NUM && type == PARA_TYPE_WORK) + { + if (bitInWord == 0) + { + m_wkParaValues.buf[id] = value; + } + else + { + u32 bitval = 0x01; + bitval <<= (bitInWord - 1); + if (value == 0) + { + m_wkParaValues.buf[id] &= ~bitval; + } + else + { + m_wkParaValues.buf[id] |= bitval; + } + value = m_wkParaValues.buf[id]; + } + + qDebug()<<"step 8"; +#if(0) + for(int i = 0; i < MACHINE_NUMBER; i++) + { + g_pMachine[i]->setAWkPara(id+1, value); + } +#endif + g_pMachine->setAWkPara(id+1, value); + qDebug()<<"step 9"; + } + } + } +} + +//执行点击触发型参数的触发事件 +void ParameterSetDialog::execItemClickEvent(s16 fun) +{ + g_pMachine->getParasFromMachine();//读取参数 + + switch (fun) + { + case ROOT_HMICONFIGURATION://进入界面配置 + setMainTitle(tr("HMI Configuration")); + setSubTitle(tr("Root > HMI Configuration")); + //得到界面配置列表 + if(g_emDebugMode == nodebugMode) + { + if(g_emUser == factory) + { + setItemList(factory,PARA_TYPE_HMICONFIGURATION);//最高权限 + } + else if(g_emUser == root) + { + setItemList(root,PARA_TYPE_HMICONFIGURATION);//最高权限 + } + } + else + { + setItemList(root,PARA_TYPE_HMICONFIGURATION);//最高权限 + } + + //设置参数值 + setItemValue(ROOT_RESOLUTION,g_emResolut); //分辨率 + setItemValue(SET_CONNECTMODE,g_pSettings->readFromIniFile("HMI/connectMode").toInt()); + setItemValue(ROOT_MACTYPE,g_emMacType); //机器类型 + setItemValue(ROOT_PRODUCTTYPE,g_emProductType); //产品类型 + setItemValue(ROOT_WATERMARKSET,g_pSettings->readFromIniFile("HMI/waterMark").toInt()); + setItemValue(ROOT_HIGH_SPEED_SWITCHING,g_pSettings->readFromIniFile("AUFUS/highSpeed").toInt()); + setItemValue(ROOT_WIFI,g_pSettings->readFromIniFile("HMI/wifi").toInt()); + setItemValue(ROOT_PARASORTSET,g_pSettings->readFromIniFile("HMI/paraSort").toInt()); + + refreshUi(); + break; + + case ROOT_IOTCONFIGURATION: //物联网配置 + setMainTitle(tr("IOT Configuration")); + setSubTitle(tr("Root > IOT Configuration")); + // 得到界面配置列表 + setItemList(factory,PARA_TYPE_IOTCONFIGURATION);//最高权限 + //设置参数值 + setItemValue(ROOT_GATEWAYCONNECTIONMETHOD,g_pSettings->readFromIniFile("IOT/gatewayConnectMode").toInt()); //网关连接 + setItemValue(ROOT_RACKNUMBERINPUT,g_pSettings->readFromIniFile("IOT/rackNumber").toInt());//机架号 + setItemStr(ROOT_DELIVERYTIME,g_pSettings->readFromIniFile("IOT/deliveryTime").toString()); //工厂预计交货时间 + setItemValue(ROOT_DEBUGPROGRESS,g_pSettings->readFromIniFile("IOT/debugProgress").toInt());//调试进度 + + refreshUi(); + break; + + case ROOT_FRAMEANGLESETTING: //动框角度设置 + emit siFrameAngleSet(); + break; + + case ROOT_NETWORKSETTINGS: //网络设置 + setMainTitle(tr("Network Settings")); + setSubTitle(tr("IOT Configuration > Network Settings")); + //得到界面配置列表 + //setItemList(factory,PARA_TYPE_NETWORKSETTINGS); + + //设置参数值 + //setItemValue(ROOT_SERVERIPSETTINGS,g_pSettings->readFromIniFile("server/ip").toInt()); //服务器ip设置 + //setItemValue(ROOT_SERVERPORTSETTINGS); + + setGatewayNetworkItemList(PARA_TYPE_NETWORKSETTINGS); + + refreshUi(); + break; + + case ROOT_MACHINEPARA://加载机器参数 + //也用此窗体加载参数 + setMainTitle(tr("Machine parameters")); + setSubTitle(tr("Root > Machine parameters")); + //机器参数 + if(g_emUser == factory) + { + setItemList(factory,PARA_TYPE_MACH);//二级权限 262574 + } + else + { + setItemList(root,PARA_TYPE_MACH);//最高权限 951103 + } + + if(m_setedFlag== 0x03)//如果有从下位机得到过参数包 + { + refreshValue();//不管连没连上,都显示上次保存的值 + } + if(g_pMachine->isConnected() == 3) + { + if(m_setedFlag != 0x03)//界面上显示已就绪 但是没有从下位机得到过参数包(刚上电时) + { + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK); + dlg.setTitleStr(tr("Network error")); + dlg.setContentStr(tr("read parameter..."));//读取参数中... + dlg.exec(); + } + } + else + { +#ifdef Q_OS_LINUX//为了方便windows下查看参数所以加了linux编译条件 + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK); + dlg.setTitleStr(tr("Network error")); + dlg.setContentStr(tr("No connection")); + dlg.exec(); + done(0); +#endif + } + refreshUi(); + break; + + case ROOT_WORKPARA://加载工作参数 + //也用此窗体加载参数 + setMainTitle(tr("Work parameters")); + setSubTitle(tr("Root > Work parameters")); + //工作参数 + if(g_emUser == factory) + { + setItemList(factory,PARA_TYPE_WORK);//二级权限 262574 + } + else + { + setItemList(root,PARA_TYPE_WORK);//最高权限 951103 + } + + if(m_setedFlag == 0x03)//如果有从下位机得到过参数包 + { + refreshValue();//不管连没连上,都显示上次保存的值 + } + if(g_pMachine->isConnected() == 3) + { + if(m_setedFlag != 0x03)//界面上显示已就绪 但是没有从下位机得到过参数包(刚上电时) + { + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK); + dlg.setTitleStr(tr("Network error")); + dlg.setContentStr(tr("read parameter..."));//读取参数中... + dlg.exec(); + } + } + else + { +#ifdef Q_OS_LINUX//为了方便windows下查看参数所以加了linux编译条件 + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK); + dlg.setTitleStr(tr("Network error")); + dlg.setContentStr(tr("No connection")); + dlg.exec(); + done(0); +#endif + } + refreshUi(); + break; + + case ROOT_PATTERNPARAMETERS://超级用户花样参数 + //也用此窗体加载参数 + setMainTitle(tr("Pattern parameters")); + setSubTitle(tr("Root > Pattern parameters")); + //锁头测试参数 + setItemList(factory,PARA_TYPE_ROOT_PATTERN);//最高权限 + setItemValue(SET_LOCKNEEDLESNUM,g_pSettings->readFromIniFile("PatternPara/lockNeedlesNum").toInt());// 锁针次数 + setItemValue(SET_LOCKNEEDLESSTEPNUM,g_pSettings->readFromIniFile("PatternPara/lockNeedlesStepNum").toInt());// 锁针步数 + setItemValue(SET_LOCKNEEDLESSTEPLENTH,g_pSettings->readFromIniFile("PatternPara/lockNeedlesStepLength").toInt());// 锁针针步长度 + refreshUi(); + break; + + case ROOT_TRAVERSESET://进入遍历功能设置 + //也用此窗体加载参数 + setMainTitle(tr("Traverse settings")); + setSubTitle(tr("Root > Traverse settings")); + //遍历设置参数 + setItemList(factory,PARA_TYPE_ROOTTRAVERSE);//最高权限 + refreshUi(); + break; + + case ROOT_AUTOSETSOFTLIMIT://自动定软限位 + emit siAutoSetSoftLimit(); + break; + + case ROOT_SPINDlLEGEARRATIO://主轴齿轮比测试 + emit siSpindleTest(); + break; + + case ROOT_HMIDECRYPT://界面解密 + emit siHMIDecrypt(m_networkCardID); + break; + + case ROOT_TROKECORRECTION://行程矫正 + emit siTrokeCorrect(); + break; + + case ROOT_SKIPEFFECT://跳针生效 + emit siSkipEffect(); + break; + + case ROOT_CLEARPATTERN://花样总清 + emit siPatternClear(); + break; + + case ROOT_DELETEINI://删除配置文件 + emit siDeleteIni();//删除执行目录下的config + break; + + case ROOT_IMPORTCSV://导入CSV文件 + emit siImportCSV(); + break; + + case ROOT_DELETECSV://删除CSV文件 + emit siDeleteCSV(); + break; + + case ROOT_RESETCSV://重置安装调试进度 + emit siResetCSV(); + break; + + case ROOT_DEBUGMODE://界面进入调试模式 + emit siDebugMode(); + break; + + case ROOT_FRAMEIMPORTPARA://动框参数导入 + emit siFrameParaImport(); + break; + + case ROOT_FRAMEEXPORTPARA://动框参数导出 + emit siFrameParaExport(); + break; + + case PSE_SOFTWAREPARA_IMPORTPARA://参数导入 + emit siParameterImport(); + break; + + case PSE_SOFTWAREPARA_EXPORTPARA://参数导出 + emit siParameterExport(); + break; + + case ROOT_CLEARPATTERNFCG_FILEID://删除花样fcg文件影响fileid的数据 + emit siPatternFcgClear(); + break; + + case PSE_SOFTWAREPARA_HMIUPDATE://界面升级 + emit siHMIUpgrade(); + break; + + case PSE_SOFTWAREPARA_MCUPDATE://主控升级 + emit siMCUpgrade(); + break; + case PSE_SOFTWAREPARA_EXIT://退出程序 + emit siExit(); + break; + default: + break; + } +} + +void ParameterSetDialog::initData() +{ + m_setedFlag = 0; + m_curPage = 0; + m_rootCurPage = 0; + m_paraType = 0; //参数类型(机器参数、工作参数、花样参数等) + m_paraTypeSort = 0; //参数类型分类型(动作参数、位置参数、亮片参数等) + m_itemList.clear(); + m_allItemList.clear(); + + memset(m_mcParaValues.buf, 0, sizeof(ParaStruct)); + memset(m_wkParaValues.buf, 0, sizeof(ParaStruct)); + + memset(m_headParaValues.paraBuf, 0, sizeof(m_headParaValues.paraBuf)); + m_filePath.clear(); +} + +//设置类型图标 +void ParameterSetDialog::setTypeLogo(QString tStyle) +{ + ui->buttonTypeLogo->setUnPreBtnLogo(tStyle); +} + +//设置主title +void ParameterSetDialog::setMainTitle(QString str) +{ + ui->labelMainTitle->setText(str); +} + +//设置副title +void ParameterSetDialog::setSubTitle(QString str) +{ + ui->labelSubTitle->setText(str); +} + +//(参数权限、参数类型、参数种类)得到相应参数类型列表 +// sort参数分类的小分类 +void ParameterSetDialog::setItemList(int authority,int64_t type,int64_t sort) +{ + m_paraType = type; + m_paraTypeSort = sort; + m_itemList.clear();//最后筛选出的列表 + + //参数筛选 + for(int i = 0; i < m_allItemList.size(); i++) + { + int aType= m_allItemList.at(i).paraType; + int aAuthority = m_allItemList.at(i).authority; + + if((aType & type) == aType) + { + int aSort= m_allItemList.at(i).paraTypeSort; + if(sort == -1)//等于-1加载全部 + { + //外边传进来的权限 等于 factory + if(authority == factory)//加载除了root所有的 + { + if(aAuthority != root)//如果当前的权限不是root,就是 factory和 operate repair的参数 + { + m_itemList.append(m_allItemList.at(i)); + } + } + else if(authority == root) + { + m_itemList.append(m_allItemList.at(i)); + } + else + { //当前列表里的权限 等于 传进来的权限 + if(aAuthority == authority)//参数权限 + { + m_itemList.append(m_allItemList.at(i)); + } + } + } + else + { + if((aSort & sort)== sort)//参数类型 + { + if(authority == factory)//最高参数权限 + { + if(aAuthority != root) + { + m_itemList.append(m_allItemList.at(i)); + } + } + else if(authority == root) + { + m_itemList.append(m_allItemList.at(i)); + } + else + { + if(aAuthority == authority)//参数权限 + { + m_itemList.append(m_allItemList.at(i)); + } + } + } + } + } + } +} + +void ParameterSetDialog::refreshProductType() // 每一个机型可以选择的其他模块 +{ + int mcType = 0; + for(int i = 0; i < m_itemList.size(); i++) + { + if(m_itemList[i].indexInPara == ROOT_MACTYPE) + { + mcType = m_itemList[i].selIdx; + break; + } + } + + for(int i = 0; i < m_itemList.size(); i++) + { + int index = m_itemList.at(i).indexInPara; + + if(index == ROOT_PRODUCTTYPE)//等于产品类型 + { + switch (mcType) //机器类型 + { + case MACHINE_PUNCH://冲孔机 + if(m_itemList[i].selIdx > PRODUCT_PUNCH_ROTARY || m_itemList[i].selIdx < PRODUCT_PUNCH_TWOHEAD) + { + g_emProductType = PRODUCT_PUNCH_TWOHEAD;//冲孔机,默认双头 + m_itemList[i].value = g_emProductType; + m_itemList[i].selIdx = g_emProductType; + } + m_itemList[i].minVal = PRODUCT_PUNCH_TWOHEAD;//范围从双头—旋转 + m_itemList[i].maxVal = PRODUCT_PUNCH_ROTARY; + break; + + case MACHINE_PUNCH_AUTOPOS://定制冲孔机(自动定位冲孔机) + if(m_itemList[i].selIdx > PRODUCT_PUNCH_ROTARY || m_itemList[i].selIdx < PRODUCT_PUNCH_SINGLEHEAD) + { + g_emProductType = PRODUCT_PUNCH_SINGLEHEAD; + m_itemList[i].value = g_emProductType; + m_itemList[i].selIdx = g_emProductType; + } + m_itemList[i].minVal = PRODUCT_PUNCH_SINGLEHEAD; + m_itemList[i].maxVal = PRODUCT_PUNCH_ROTARY; + break; + + case MACHINE_PUNCH_SEW://冲缝机 //0303 xcy + if(m_itemList[i].selIdx > PRODUCT_PUNCHSEW_TWOHEAD || m_itemList[i].selIdx < PRODUCT_PUNCHSEW_SINGLEHEAD) + { + g_emProductType = PRODUCT_PUNCHSEW_SINGLEHEAD; + m_itemList[i].value = g_emProductType; + m_itemList[i].selIdx = g_emProductType; + } + m_itemList[i].minVal = PRODUCT_PUNCHSEW_SINGLEHEAD; + m_itemList[i].maxVal = PRODUCT_PUNCHSEW_TWOHEAD; + break; + + default://其他机型 + g_emProductType = PRODUCT_NULL; + m_itemList[i].minVal = PRODUCT_NULL; + m_itemList[i].maxVal = PRODUCT_NULL; + m_itemList[i].value = PRODUCT_NULL; + m_itemList[i].selIdx = g_emProductType; + break; + } + break; + } + } +} + +//设置网关网络参数(IP和端口) +void ParameterSetDialog::setGatewayNetworkItemList(int64_t type) +{ + m_paraType = type; + m_itemList.clear(); + + QDir apppath(qApp->applicationDirPath()); + QString serverip, localip; + quint16 serverport, localport; + //服务器IP及端口设置 + int idx = 0; + QString configfile; + configfile = apppath.path() + apppath.separator() + "lotconfig.ini"; + QSettings configIni(configfile, QSettings::IniFormat); + + serverip = configIni.value("server/ip", QVariant("192.168.16.250")).toString(); + ParaItem slpItem; + slpItem.indexInPara = idx; + slpItem.readonly = 0; + slpItem.valueType = PARA_VALUE_TYPE_STRINPUT; + slpItem.paraName = tr("Server IP settings"); //服务器IP设置; + slpItem.valueStr = serverip; + m_itemList.append(slpItem); + + serverport = configIni.value("server/port", QVariant(5001)).toInt(); + idx++; + ParaItem sPortItem; + sPortItem.indexInPara = idx; + sPortItem.readonly = 0; + sPortItem.valueType = PARA_VALUE_TYPE_INT; + sPortItem.paraName = tr("Server Port settings") ;//服务器端口设置 + sPortItem.value = serverport; + sPortItem.minVal = 0; + sPortItem.maxVal = U16_MAX; + sPortItem.defValue = serverport; + m_itemList.append(sPortItem); + + //本地IP设置条目 + localip = configIni.value("local/ip", QVariant("192.168.16.100")).toString(); + idx ++; + ParaItem lIpItem; + lIpItem.indexInPara = idx; + lIpItem.readonly = 0; + lIpItem.valueType = PARA_VALUE_TYPE_STRINPUT; + lIpItem.paraName = tr("Local IP settings");//本地IP设置 + lIpItem.valueStr = localip; + m_itemList.append(lIpItem); + + localport = configIni.value("local/port", QVariant(5000)).toInt(); + idx++; + ParaItem lPortItem; + lPortItem.indexInPara = idx; + lPortItem.readonly = 0; + lPortItem.valueType = PARA_VALUE_TYPE_INT; + lPortItem.paraName = tr("Local Port settings");//本口端口设置 + lPortItem.value = localport; + lPortItem.minVal = 0; + lPortItem.maxVal = U16_MAX; + lPortItem.defValue = localport; + m_itemList.append(lPortItem); +} + +//设置网络参数(IP和端口) +void ParameterSetDialog::setNetworkItemList(int64_t type) +{ + m_paraType = type; + m_itemList.clear(); + + QDir apppath(qApp->applicationDirPath()); + QString serverip,localip; + quint16 serverport,localport; + //服务器IP及端口设置条目(包括网关) + int idx = 0; + QString configfile; + + configfile = apppath.path() + apppath.separator() + "mcconfig.ini";//读取的配置文件名字 + QSettings configIni(configfile, QSettings::IniFormat); + serverip = configIni.value("server/ip", QVariant("192.168.16.253")).toString();//把配置文件里的号转换成字符串 + localip = configIni.value("local/ip", QVariant("192.168.16.100")).toString(); + + ParaItem sIpItem; + sIpItem.indexInPara = idx; + sIpItem.readonly = 0; + sIpItem.valueType = PARA_VALUE_TYPE_STRINPUT; + sIpItem.paraName = tr("Board IP settings");//主板IP设置 + sIpItem.valueStr = serverip;//列表里的值就显示从配置文件读上来的 + m_itemList.append(sIpItem);//把这行加到列表里 + + serverport = configIni.value("server/port", QVariant(5000)).toInt(); + idx++; + ParaItem sPortItem; + sPortItem.indexInPara = idx; + sPortItem.readonly = 0; + sPortItem.valueType = PARA_VALUE_TYPE_INT; + sPortItem.paraName = tr("Board port settings");//主板端口设置 + sPortItem.value = serverport; + sPortItem.minVal = 0; + sPortItem.maxVal = U16_MAX; + sPortItem.defValue = serverport; + m_itemList.append(sPortItem); + + idx++; + + //本地IP设置条目 + ParaItem lIpItem; + lIpItem.indexInPara = idx; + lIpItem.readonly = 0; + lIpItem.valueType = PARA_VALUE_TYPE_STRINPUT; + lIpItem.paraName = tr("Local IP settings");//本地IP设置 + lIpItem.valueStr = localip; + m_itemList.append(lIpItem); + idx++; + + //本地端口设置条目 + localport = configIni.value("local/port", QVariant(5000)).toInt(); + + ParaItem lPortItem; + lPortItem.indexInPara = idx; + lPortItem.readonly = 0; + lPortItem.valueType = PARA_VALUE_TYPE_INT; + lPortItem.paraName = tr("Local port settings");//本地端口设置 + lPortItem.value = localport; + lPortItem.minVal = 0; + lPortItem.maxVal = U16_MAX; + lPortItem.defValue = 5000; + m_itemList.append(lPortItem); +} + +void ParameterSetDialog::setCurPage(int idx) +{ + if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面 + { + m_rootCurPage = idx; + } + else + { + m_curPage = idx; + } +} + +//设置参数值 +void ParameterSetDialog::setItemValue(int idx,int value) +{ + for(int i = 0; i < m_itemList.size(); i++) + { + int index = m_itemList.at(i).indexInPara; + int min = m_itemList.at(i).minVal; + int max = m_itemList.at(i).maxVal; + + if(idx == index)//参数枚举 + { + if(value > max || value < min) // + { + value = m_itemList.at(i).defValue; + } + m_itemList[i].selIdx = value; + m_itemList[i].value = value; + } + } +} + +void ParameterSetDialog::setItemStr(int idx, QString str) +{ + for(int i = 0; i < m_itemList.size(); i++) + { + int index = m_itemList.at(i).indexInPara; + + if(idx == index) + { + m_itemList[i].valueStr = str; + } + } +} + +int ParameterSetDialog::getItemValue(int idx) +{ + int value = 0; + for(int i = 0; i < m_itemList.size(); i++) + { + if(idx == m_itemList.at(i).indexInPara) + { + value = m_itemList.at(i).value; + } + } + return value; +} + +int ParameterSetDialog::exec() +{ + //等于机器参数或工作参数 + if(((m_paraType & PARA_TYPE_MACH) == PARA_TYPE_MACH) || + ((m_paraType & PARA_TYPE_WORK) == PARA_TYPE_WORK)) + { + if (g_pMachine != NULL) + { + qDebug("send GetParasFromMachine"); + + if(m_setedFlag == 0x03)//如果有从下位机得到过参数包 + { + //这个函数会把从主控得到的参数保存在item.value里 + refreshValue();//不管连没连上,都显示上次保存的值 + } + + if(g_pMachine->isConnected() == 3)//这个isConnected检测机制是5秒 + { + if(((m_paraType & PARA_TYPE_MACH) == PARA_TYPE_MACH) || + ((m_paraType & PARA_TYPE_WORK) == PARA_TYPE_WORK)) + { + g_pMachine->getParasFromMachine();//如果连上了主板,发送一个读取参数信息的包 + } + if(m_setedFlag != 0x03)//界面上显示已就绪 但是没有从下位机得到过参数包(刚上电时) + { + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK); + dlg.setTitleStr(tr("Network error")); + dlg.setContentStr(tr("read parameter..."));//读取参数中... + dlg.exec(); + return -1; + } + } + else//如果没连接上 + { +#ifdef Q_OS_LINUX//为了方便windows下查看参数所以加了linux编译条件 + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK); + dlg.setTitleStr(tr("Network error")); + dlg.setContentStr(tr("No connection")); + dlg.exec(); + return -1; + //不进行下边的函数 +#endif + } + } + } + //刷新这个函数,就显示item.value的值 + //ui->buttonOk->setEnabled(false); + refreshUi();//没连接主板的时候就先进到这个函数,就会显示的默认参数 + return QDialog::exec(); +} + +int ParameterSetDialog::addParaItem(const QList &itemList) +{ + int size = m_allItemList.size(); + m_allItemList.append(itemList); + return size; +} + +int ParameterSetDialog::addParaItem(const ParaItem &item) +{ + int size = m_allItemList.size(); + m_allItemList.append(item); + return size; +} +//设置机器状态(用于刷新遍历状态) +//void ParameterSetDialog::setMcStates(MCStatus mcStatus) +//{ +// memset((char*)&m_mcStatus,0,sizeof(MCStatus)); +// memcpy((char*)&m_mcStatus,(char*)&mcStatus,sizeof(MCStatus)); +// u32 traverseState = m_mcStatus.traverseState;//遍历状态 + +// //等于遍历参数 +// if((m_paraType & PARA_TYPE_ROOTTRAVERSE) == PARA_TYPE_ROOTTRAVERSE) +// { +// //刷新遍历状态 +// for(int i = 0; i < m_itemList.size(); i++) +// { +// if(m_itemList[i].paraTypeSort == ROOT_SORT_HEADSENSOR)//信号参数 +// { +// //读取机头遍历状态(遍历功能) +// int NoseNum = 0;//不赋初值,就要保证在各种情况下都有值 +// if(m_nodeType == 0) +// { +// NoseNum = m_mcParaValues.buf[2];//平绣机头个数 +// } +// else if(m_nodeType == 1) +// { +// NoseNum = m_mcParaValues.buf[4];//冲孔机头个数 +// } +// else if(m_nodeType == 2) +// { +// NoseNum = m_mcParaValues.buf[8];//毛巾机头个数 +// } +// //刷新信号参数 (-N -Y) +// refreshSensorPara(m_itemList[i].minVal,m_itemList[i].maxVal,NoseNum,m_itemList[i],traverseState); +// } +// } +// } +//} + +void ParameterSetDialog::on_button1_clicked() +{ + changeValue(0); +} + +void ParameterSetDialog::on_button2_clicked() +{ + changeValue(1); +} + +void ParameterSetDialog::on_button3_clicked() +{ + changeValue(2); +} + +void ParameterSetDialog::on_button4_clicked() +{ + changeValue(3); +} + +void ParameterSetDialog::on_button5_clicked() +{ + changeValue(4); +} + +void ParameterSetDialog::on_button6_clicked() +{ + changeValue(5); +} + +void ParameterSetDialog::on_button7_clicked() +{ + changeValue(6); +} + +void ParameterSetDialog::on_button8_clicked() +{ + changeValue(7); +} + +void ParameterSetDialog::on_button9_clicked() +{ + changeValue(8); +} + +void ParameterSetDialog::on_button10_clicked() +{ + changeValue(9); +} + +void ParameterSetDialog::on_button11_clicked() +{ + changeValue(10); +} + +void ParameterSetDialog::on_button12_clicked() +{ + changeValue(11); +} + +void ParameterSetDialog::on_buttonPgUp_clicked() +{ + if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面 + { + m_rootCurPage--; + } + else + { + m_curPage--; + } + + refreshUi(); +} + +void ParameterSetDialog::on_buttonPgDn_clicked() +{ + if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面 + { + m_rootCurPage++; + } + else + { + m_curPage++; + } + refreshUi(); +} + +void ParameterSetDialog::on_buttonOk_clicked() +{ + PromptDialog promptDlg(this); + qDebug()<<"para ok 1"; + + //等于遍历参数 + if((m_paraType & PARA_TYPE_ROOTTRAVERSE) == PARA_TYPE_ROOTTRAVERSE) + { + qDebug()<<"para ok 2"; + + int para1,para2,para3; + para1 = para2 = para3 = 0; + + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + promptDlg.setContentStr(tr("Whether to start traversing settings?"));//是否开始遍历设置? + if(promptDlg.exec() == 1) + { + if(m_itemList.size() <= 0){return;} + + para1 = m_itemList[0].value;//协议类型 + para2 = m_itemList[1].value;//遍历模式 + + if(para2 == 1)//单独遍历 + { + //起始ID等于设置的机头号 + para3 = m_itemList[2].value; + } + else //全部遍历 + { + //起始ID等于1 + para3 = 1; + } + + if(g_pMachine != NULL) + { + g_pMachine->enterOrExitStates(UCMD_TRA_BOARD,para1,WIREHEAD,para2,para3); + } + } + + qDebug()<<"para ok 3"; + return; + } + + //等于超级用户花样参数 + if((m_paraType & PARA_TYPE_ROOT_PATTERN) == PARA_TYPE_ROOT_PATTERN) + { + // int para = 0; + if(m_itemList.size() <= 0){return;}//是超级用户的花样参数 + int StepLockNeedlesNum = getItemValue(SET_LOCKNEEDLESNUM); // 锁针次数 + g_pSettings->writeToIniFile("PatternPara/lockNeedlesNum",StepLockNeedlesNum); + int StepLockNeedlesStepNum = getItemValue(SET_LOCKNEEDLESSTEPNUM); // 锁针步数 + g_pSettings->writeToIniFile("PatternPara/lockNeedlesStepNum",StepLockNeedlesStepNum); + int StepLockNeedlesStepLength = getItemValue(SET_LOCKNEEDLESSTEPLENTH); // 锁针针步长度 + g_pSettings->writeToIniFile("PatternPara/lockNeedlesStepLength",StepLockNeedlesStepLength); + + done(1);//关闭窗体,并返回1 + } + + //等于机器参数或工作参数 + if(((m_paraType & PARA_TYPE_MACH) == PARA_TYPE_MACH) || + ((m_paraType & PARA_TYPE_WORK) == PARA_TYPE_WORK)) + { + qDebug()<<"para ok 4"; + saveParas(); + if(g_pMachine->isConnected() == 3) + { + promptDlg.initDialog(PromptDialog::BTN_OK); + promptDlg.setTitleStr(tr("Prompt")); + QString str; + str = tr("Parameters saved successfully!");//参数保存成功! + promptDlg.setContentStr(str); + promptDlg.exec(); + } + } + + //等于机头板参数 + if(((m_paraType & PARA_TYPE_HEADPARAMETER) == PARA_TYPE_HEADPARAMETER)) + { + saveParas(); + if(g_pMachine->isConnected() == 3) + { + promptDlg.initDialog(PromptDialog::BTN_OK); + promptDlg.setTitleStr(tr("Prompt")); + QString str; + str = tr("Parameters saved successfully!");//参数保存成功! + promptDlg.setContentStr(str); + promptDlg.exec(); + } + } + + //等于软件设置参数 + if((m_paraType & PARA_TYPE_SOFTWARESET) == PARA_TYPE_SOFTWARESET) + { + qDebug()<<"para ok 5"; + + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + + QString str; + str = tr("The settings take effect after restarting the interface!");//重启界面后设置生效! + promptDlg.setContentStr(str); + if(promptDlg.exec() == 1) + { + int language = m_itemList.at((s16)SET_LANGUAGE).value;//语言 + //int connectMode = m_itemList.at((s16)SET_CONNECTMODE).value;//连接通讯方式 + + g_pSettings->writeToIniFile("HMI/language",language); + //g_pSettings->writeToIniFile("HMI/connectMode",connectMode); + +#ifdef Q_OS_WIN + qApp->exit(); +#endif + +#ifdef Q_OS_LINUX + system("reboot"); +#endif + } + + qDebug()<<"para ok 6"; + return; + } + + //等于网络管理参数 + if((m_paraType & PARA_TYPE_NETWORKSET) == PARA_TYPE_NETWORKSET) + { + qDebug()<<"para ok 7"; + + //网络设置完成,需重启后重新建立连接 + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + QString str = tr("Network settings are completed, re-establish after reboot"); + promptDlg.setTitleStr(tr("Prompt")); + promptDlg.setContentStr(str); + if(promptDlg.exec() == 1) + { + QDir apppath(qApp->applicationDirPath()); + + s16 idx = 0;//参数索引 + QString configfile; + + configfile = apppath.path() + apppath.separator() + "mcconfig.ini"; + QSettings configIni(configfile, QSettings::IniFormat); + + QString serverip = m_itemList.at(idx).valueStr;//服务器IP + int serverport = m_itemList.at(idx).value;//服务器端口 + + // 回写参数 + configIni.setValue("server/ip", serverip); + configIni.setValue("server/port", serverport); + + QString localip = m_itemList.at(idx).valueStr;//本地IP + // 回写参数 + configIni.setValue("local/ip", localip); + + idx++; + + int localport = m_itemList.at(idx).value;//本地端口 + // 回写参数 + configIni.setValue("local/port", localport); + idx++; + + +#ifdef Q_OS_WIN + qApp->exit(); +#endif + +#ifdef Q_OS_LINUX + system("reboot"); +#endif + } + return; + } + + //等于网关网络设置参数 + if((m_paraType & PARA_TYPE_NETWORKSETTINGS) == PARA_TYPE_NETWORKSETTINGS) + { + //网络设置完成,需重启后重新建立连接 + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + QString str = tr("Network settings are completed, re-establish after reboot"); + promptDlg.setTitleStr(tr("Prompt")); + promptDlg.setContentStr(str); + if(promptDlg.exec() == 1) + { + QDir apppath(qApp->applicationDirPath()); + + s16 idx =0; //参数索引 + QString configfile; + configfile = apppath.path() + apppath.separator() +"lotconfig.ini"; + QSettings configIni(configfile, QSettings::IniFormat); + + QString serverip = m_itemList.at(idx).valueStr;//服务器IP + idx++; + int serverport = m_itemList.at(idx).value;//服务器端口 + idx++; + QString localip = m_itemList.at(idx).valueStr;//本地IP + idx++; + int localport = m_itemList.at(idx).value;//本地端口 + + // 回写参数 + configIni.setValue("server/ip", serverip); + configIni.setValue("server/port", serverport); + configIni.setValue("local/ip", localip); + configIni.setValue("local/port", localport); + +#ifdef Q_OS_WIN + qApp->exit(); +#endif + +#ifdef Q_OS_LINUX + system("reboot"); +#endif + } + return; + } + + //等于时间设置参数 + if((m_paraType & PARA_TYPE_TIMESET) == PARA_TYPE_TIMESET) + { + int yearValue = m_itemList.at(0).value; + int monthValue = m_itemList.at(1).value; + int dayValue = m_itemList.at(2).value; + +#ifdef Q_OS_LINUX + int hourValue = m_itemList.at(3).value; + int minuteValue = m_itemList.at(4).value; + int secondValue = m_itemList.at(5).value; +#endif + + int temp = 0; + + //判断是否为闰年,闰年2月份是29天,其他是28天 + if((yearValue % 4 == 0) && (yearValue % 100 != 0)) + { + if(monthValue == 2) + { + if(dayValue > 29) + { + temp = -1; + } + } + } + else + { + if(monthValue == 2) + { + if(dayValue > 28) + { + temp = -1; + } + } + } + + //1、3、5、7、8、10、12是31天,其他是30天 + if(monthValue == 4 || monthValue == 6 || monthValue == 9 || monthValue == 11) + { + if(dayValue > 30) + { + temp = -1; + } + } + + QString showStr; + if(temp == 0) + { + //设置时间 +#ifdef Q_OS_LINUX + struct tm rtcTime; + rtcTime.tm_year = yearValue - 1900; + rtcTime.tm_mon = monthValue - 1; + rtcTime.tm_mday = dayValue; + rtcTime.tm_hour = hourValue; + rtcTime.tm_min = minuteValue; + rtcTime.tm_sec = secondValue; + rtcTime.tm_isdst = 0; + rtcTime.tm_yday = 0; + rtcTime.tm_wday = 0; + + int retval = hal_set_rtc_time(&rtcTime); + if(retval != 0) + { + qDebug("set_rtc_time failed: %d!", retval); + temp = -2; + } +#endif + //时间设置完成,重启后生效 + promptDlg.initDialog(PromptDialog::BTN_RESTART); + showStr = tr("The time setting is completed and will take effect after restart"); + } + else if(temp == -1) + { + //时间设置不合理,请重新设置 + promptDlg.initDialog(PromptDialog::BTN_OK); + showStr = tr("Unreasonable time setting, please reset"); + } + + if(temp == -2) + { + //时间设置失败,请重新设置 + promptDlg.initDialog(PromptDialog::BTN_OK); + showStr = tr("Time setting failed, please reset"); + } + + promptDlg.setTitleStr(tr("Prompt")); + promptDlg.setContentStr(showStr); + promptDlg.exec(); + return; + } + + //等于超级用户界面配置参数 + if((m_paraType & PARA_TYPE_HMICONFIGURATION) == PARA_TYPE_HMICONFIGURATION) + { + qDebug()<<"para ok 5"; + + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + + QString str; + str = tr("The settings take effect after restarting the interface!");//重启界面后设置生效! + promptDlg.setContentStr(str); + if(promptDlg.exec() == 1) + { + //界面配置里的参数都放在了 点击触发型参数枚举 里,要筛选才能获取到相应的value值 + for(int i = 0; i < m_itemList.size(); i++) + { + if(m_itemList[i].indexInPara == ROOT_RESOLUTION) + { + g_emResolut = (Resolution)(m_itemList[i].value);//分辨率 + g_pSettings->writeToIniFile("HMI/resolution",g_emResolut); + } + else if (m_itemList[i].indexInPara == SET_CONNECTMODE) + { + int connectMode = (s16)m_itemList[i].value;//连接通讯方式 + g_pSettings->writeToIniFile("HMI/connectMode",connectMode); + } + else if(m_itemList[i].indexInPara == ROOT_HIGH_SPEED_SWITCHING) + { + s16 speedMode =(s16)(m_itemList[i].value);//是否为高速 + g_pSettings->writeToIniFile("AUFUS/highSpeed",speedMode); + } + else if(m_itemList[i].indexInPara == ROOT_WATERMARKSET) + { + s16 waterMark =(s16)(m_itemList[i].value);//主背景是否带水印 + g_pSettings->writeToIniFile("HMI/waterMark",waterMark); + } + else if(m_itemList[i].indexInPara == ROOT_WIFI) + { + s16 wifi =(s16)(m_itemList[i].value);//是否带wifi + g_pSettings->writeToIniFile("HMI/wifi",wifi); + } + else if(m_itemList[i].indexInPara == ROOT_PARASORTSET) + { + s16 paraSort =(s16)(m_itemList[i].value);//参数是否分类显示 + g_pSettings->writeToIniFile("HMI/paraSort",paraSort); + } + else if(m_itemList[i].indexInPara == ROOT_MACTYPE) + { + g_emMacType = (MachineType)(m_itemList[i].value);//机器类型 + g_pSettings->writeToIniFile("HMI/machineType",g_emMacType); + + if(g_emMacType == MACHINE_PUNCH)//等于冲孔机重新配置常用功能 + { + 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_BACKWORKPOINT);//快捷按钮5的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn6",FUN_SETOFFSETPOINT);//快捷按钮6的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn7",FUN_BACKOFFSETPOINT);//快捷按钮7的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn8",FUN_PUNCHSPINDLEJOG);//快捷按钮8的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn9",FUN_PUNCHMANUALCHANGECOLOR);//快捷按钮9的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn10",FUN_SINGLEPUNCH);//快捷按钮10的功能索引 + } + if(g_emMacType == MACHINE_PUNCH_AUTOPOS)//等于垫板冲孔机重新配置常用功能 + { + g_pSettings->writeToIniFile("HMI/commonbtn1",FUN_PATTERNSELECT);//快捷按钮1的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn2",FUN_SINGLEPUNCH);//快捷按钮2的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn3",FUN_BACKSTARTPOINT);//快捷按钮3的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn4",FUN_CHECKFRAME);//快捷按钮4的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn5",FUN_BACKWORKPOINT);//快捷按钮5的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn6",FUN_SETOFFSETPOINT);//快捷按钮6的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn7",FUN_BACKOFFSETPOINT);//快捷按钮7的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn8",FUN_PUNCHSPINDLEJOG);//快捷按钮8的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn9",FUN_PUNCHMANUALCHANGECOLOR);//快捷按钮9的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn10",FUN_DRAWOUTLINE);//快捷按钮10的功能索引 + } + else if(g_emMacType == MACHINE_PUNCH_SEW)//冲缝机 + { + 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_BACKWORKPOINT);//快捷按钮5的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn6",FUN_SETOFFSETPOINT);//快捷按钮6的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn7",FUN_BACKOFFSETPOINT);//快捷按钮7的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn8",FUN_PUNCHSPINDLEJOG);//快捷按钮8的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn9",FUN_PUNCHMANUALCHANGECOLOR);//快捷按钮9的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn10",FUN_SINGLEPUNCH);//快捷按钮10的功能索引 + } + else + { + 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_BACKWORKPOINT);//快捷按钮5的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn6",FUN_SETOFFSETPOINT);//快捷按钮6的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn7",FUN_BACKOFFSETPOINT);//快捷按钮7的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn8",FUN_PUNCHSPINDLEJOG);//快捷按钮8的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn9",FUN_PUNCHMANUALCHANGECOLOR);//快捷按钮9的功能索引 + g_pSettings->writeToIniFile("HMI/commonbtn10",FUN_SINGLEPUNCH);//快捷按钮10的功能索引 + } + } + else if(m_itemList[i].indexInPara == ROOT_PRODUCTTYPE) + { + g_emProductType =(ProductType)(m_itemList[i].value);//产品类型 + g_pSettings->writeToIniFile("HMI/productType",g_emProductType); + } + } + +#ifdef Q_OS_WIN + qApp->exit(); +#endif + +#ifdef Q_OS_LINUX + system("reboot"); +#endif + } + return; + } + + //等于超级用户物联网配置参数 + if((m_paraType & PARA_TYPE_IOTCONFIGURATION) == PARA_TYPE_IOTCONFIGURATION) + { + qDebug()<<"para ok 66"; + + for(int i = 0; iwriteToIniFile("IOT/rackNumber",RackNumber); + } + else if(m_itemList[i].indexInPara == ROOT_DELIVERYTIME) + { + QString deliveryTime = m_itemList[i].valueStr;//工厂预计交货时间 + g_pSettings->writeToIniFile("IOT/deliveryTime",deliveryTime); + } + else if(m_itemList[i].indexInPara == ROOT_DEBUGPROGRESS) + { + int debugProgress = m_itemList[i].value;//调试进度 + g_pSettings->writeToIniFile("IOT/debugProgress",debugProgress); + } + } + + //网关连接方式改变时需要提示重启 + s16 cFlag = 0; + for(int i = 0; ireadFromIniFile("IOT/gatewayConnectMode").toInt(); + int eVal = m_itemList[i].value;//网关连接方式 + if(bVal != eVal) + { + cFlag = 1; + } + break; + } + } + + if(cFlag == 1) + { + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + QString str; + str = tr("Connection mode changes, take effect after the reboot!");//连接方式改变,重启界面后生效! + promptDlg.setContentStr(str); + if(promptDlg.exec() == 1) + { + for(int i = 0; iwriteToIniFile("IOT/gatewayConnectMode",gatewayConnect); + break; + } + } + +#ifdef Q_OS_WIN + qApp->exit(); +#endif + +#ifdef Q_OS_LINUX + system("reboot"); +#endif + } + return; + } + else + { + done(1); + } + } + //超级用户密码权限,单次有效 + g_emUser = operate; + done(1);//0是关掉 + + qDebug()<<"para ok 8"; + +} + +void ParameterSetDialog::on_buttonCancel_clicked() +{ + //等于遍历参数 + if((m_paraType & PARA_TYPE_ROOTTRAVERSE) == PARA_TYPE_ROOTTRAVERSE) + { + if(g_pMachine != NULL) + { + g_pMachine->exitTraverStates(); + } + g_emUser = operate; + done(0); + return; + } + + //等于锁头测试参数 + if((m_paraType & PARA_TYPE_LOCKTEST) == PARA_TYPE_LOCKTEST) + { + if(g_pMachine != NULL) + { + g_pMachine->enterOrExitStates(MC_STA_EXIT_TRA); + } + g_emUser = operate; + done(0); + return; + } + + //超级用户密码权限,单次有效 + g_emUser = operate; + done(0); +} + +//恢复默认的参数(主板和外围板) +void ParameterSetDialog::on_buttonEXBParaRestore_clicked() +{ + UserRoles emUser = g_emUser; + + if(g_emDebugMode == nodebugMode) + { + if(g_emUser != resetpara)//权限不够先登录 + { + emit siUserLogin(resetpara); + if(g_emUser != resetpara)//发送登录信号后,权限如果还没改变就返回 + { + return; + } + } + } + PromptDialog promptDlg(this); + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + if(m_paraType == PARA_TYPE_HEADPARAMETER) + { + promptDlg.setContentStr(tr("Whether to recover the default parameters for the head board?"));//是否恢复为机头板默认参数? + } + + else if(m_paraType == PARA_TYPE_MACH || + m_paraType == PARA_TYPE_WORK) + { + promptDlg.setContentStr(tr("Whether to recover the default parameters for the board?"));//是否恢复为主板默认参数? + } + + if(promptDlg.exec() == 1) + { + if(g_pMachine != NULL) + { + if(m_paraType == PARA_TYPE_HEADPARAMETER)//设置机头板默认参数 + { + g_pMachine->setToDefaultParas(UCMD_SET_HEADDEF_PARA, 0); + } + else if(m_paraType == PARA_TYPE_MACH || + m_paraType == PARA_TYPE_WORK)//设置主板默认参数 + { + g_pMachine->setToDefaultParas(UCMD_SET_DEF_PARA, 0); + } + + setMainTitle(tr("Root")); + setSubTitle(tr("Accessibility > Root")); + //超级用户参数 + setItemList(root,PARA_TYPE_ROOT); + refreshUi(); + } + } + g_emUser = emUser; +} + +//返回上一级菜单 +void ParameterSetDialog::on_buttonReturn_clicked() +{ + //等于遍历参数 + if((m_paraType & PARA_TYPE_ROOTTRAVERSE) == PARA_TYPE_ROOTTRAVERSE) + { + PromptDialog promptDlg(this); + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + promptDlg.setContentStr(tr("Whether to exit traversing settings?"));//是否退出遍历设置? + if(promptDlg.exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->exitTraverStates(); + } + } + else + { + return; //退出函数,不执行下边的代码 + } + } + + //等于锁头测试参数 + if((m_paraType & PARA_TYPE_LOCKTEST) == PARA_TYPE_LOCKTEST) + { + PromptDialog promptDlg(this); + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + promptDlg.setContentStr(tr("Whether to exit lock test?"));//是否退出锁头测试? + if(promptDlg.exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->enterOrExitStates(MC_STA_EXIT_TRA); + } + } + else + { + return; //退出函数,不执行下边的代码 + } + } + + if(g_emDebugMode == nodebugMode) + { + if(g_emUser == factory) + { + setMainTitle(tr("Root")); + setSubTitle(tr("Accessibility > Root")); + //超级用户参数 + setItemList(factory,PARA_TYPE_ROOT); + refreshUi(); + } + else if (g_emUser == root) + { + setMainTitle(tr("Root")); + setSubTitle(tr("Accessibility > Root")); + //超级用户参数 + setItemList(root,PARA_TYPE_ROOT); + refreshUi(); + } + } + else + { + setMainTitle(tr("Root")); + setSubTitle(tr("Accessibility > Root")); + //超级用户参数 + setItemList(root,PARA_TYPE_ROOT); + refreshUi(); + } +} diff --git a/sharedviews/parametersetdialog.h b/sharedviews/parametersetdialog.h new file mode 100644 index 0000000..73956cc --- /dev/null +++ b/sharedviews/parametersetdialog.h @@ -0,0 +1,159 @@ +#ifndef PARAMETERSETDIALOG_H +#define PARAMETERSETDIALOG_H + +#include +#include +#include +#include +#include + +#include "items/paraitem.h" +#include "numerinputdialog.h" +#include "passworddialog.h" +#include "mybutton.h" +#include "promptdialog.h" +#include "setcontrolstyle.h" + +//设置时间的头文件 +#ifdef Q_OS_LINUX +#include +#include +#endif + +namespace Ui { +class ParameterSetDialog; +} + +class ParameterSetDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ParameterSetDialog(QWidget *parent = 0); + ~ParameterSetDialog(); + +private: + Ui::ParameterSetDialog *ui; + int m_itemPerPage;//界面每页条目数 + int m_curPage;//当前页数 + int m_rootCurPage;//超级用户界面当前页数 + QList m_itemBtnList; + QList m_itemList; + QList m_allItemList; + int m_patchMode; + MCStatus m_mcStatus;//机器状态 + //PromptDialog m_promptDlg; + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006();//初始化窗体控件为1024x600分辨率 + void initControlStyle();//初始化窗体控件样式 + void refreshUi(); + +private: + QString getValueStr(int64_t val, int afterpoint); + void changeValue(int buttenidx); + void refreshValue(); + +public slots: + void paraChange(int type, int id); + +private: + void refreshSensorPara(int min, int max, int num, ParaItem &item, u32 traverseState);//刷新信号参数显示 + void saveParas(int idx = -1); + void execItemClickEvent(s16 fun);//执行点击触发型参数的触发事件 + +private: + ParaStruct m_mcParaValues; + ParaStruct m_wkParaValues; + + HeadInfo m_headParaValues; + int m_setedFlag; + int m_paraType; //参数类型(机器参数、工作参数、花样参数等) + int m_paraTypeSort; //参数类型分类(动作参数、位置参数等) + QString m_networkCardID;//网卡ID(MAC地址) + + QString m_filePath;//配置文件 + bool isAuthority = true;//是否需要权限 + +public: + void initData(); + void setTypeLogo(QString tStyle);//设置类型图标 + void setMainTitle(QString str);//设置主title + void setSubTitle(QString str);//设置副title + //(参数权限、参数类型、参数种类)得到相应参数类型列表,目前参数种类分类未使用 + void setItemList(int authority,int64_t type,int64_t sort = -1); + void refreshProductType();//刷新产品类型 + + //设置网络参数(IP和端口) + void setNetworkItemList(int64_t type); + + //设置网关网络参数(IP和端口) + void setGatewayNetworkItemList(int64_t type); + + void setCurPage(int idx);//设置当前页数 + void setItemValue(int idx,int value);//设置int型参数值 + void setItemStr(int idx,QString str);//设置字符型参数值 + int getItemValue(int idx); + inline int getParaType(){return m_paraType;}//获取参数类型 + int exec(); + +public: + int addParaItem(const QList & itemList); + int addParaItem(const ParaItem & item); + +public: + // void setMcStates(MCStatus mcStatus);//设置机器状态(用于刷新遍历状态) + +private slots: + void on_button1_clicked(); + void on_button2_clicked(); + void on_button3_clicked(); + void on_button4_clicked(); + void on_button5_clicked(); + void on_button6_clicked(); + void on_button7_clicked(); + void on_button8_clicked(); + void on_button9_clicked(); + void on_button10_clicked(); + void on_button11_clicked(); + void on_button12_clicked(); + + void on_buttonPgUp_clicked(); + void on_buttonPgDn_clicked(); + + void on_buttonOk_clicked(); + void on_buttonCancel_clicked(); + void on_buttonEXBParaRestore_clicked(); + void on_buttonReturn_clicked(); + +signals: + void siUserLogin(s16 user); + void siHMIDecrypt(QString id);//界面解密 + void siTrokeCorrect();//行程矫正 + void siSkipEffect();//跳针生效 + void siParameterImport(); + void siParameterExport(); + void siHMIUpgrade(); + void siMCUpgrade(); + void siAutoSetSoftLimit();//自动定软限位 + void siSpindleTest();//测试齿轮比 + void siFrameParaImport();//动框参数导入 + void siFrameParaExport();//动框参数导出 + void siExit();//退出程序 + void siDeleteIni();//删除执行目录下的config.ini + void siImportCSV();//导入csv文件 + void siDeleteCSV();//删除csv文件 + void siResetCSV();//重置安装调试进度 + void siDebugMode();//界面调试模式 + void siPatternClear();//花样总清 + void siPatternFcgClear();//花样总清 + void siFrameAngleSet(); + void siPatternFcgClearFileid();//清除影响fileid的数据 + void siHeadParaImport(QString tStyle,int headType); + void siHeadParaExport(int headType); + void siParaReadPrompt(s16 type,s16 value);//参数读取中的提示 +}; + +#endif // PARAMETERSETDIALOG_H diff --git a/sharedviews/parametersetdialog.ui b/sharedviews/parametersetdialog.ui new file mode 100644 index 0000000..feae14e --- /dev/null +++ b/sharedviews/parametersetdialog.ui @@ -0,0 +1,563 @@ + + + ParameterSetDialog + + + + 0 + 0 + 1024 + 600 + + + + Dialog + + + + + 140 + 200 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 30 + 10 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + + + + 20 + 570 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + PageNums: 1/1 + + + + + + 140 + 320 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 0 + 0 + 1024 + 600 + + + + background-color: rgb(182, 182, 182); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 140 + 80 + 760 + 32 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + + + + + + + + + + 140 + 360 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 440 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 280 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 400 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 110 + 10 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Sub title + + + + + + 140 + 240 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 120 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 680 + 570 + 321 + 31 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 80 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 240 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 160 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 0 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + buttonPgUp + buttonPgDn + buttonOk + buttonCancel + + + + + 140 + 160 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 480 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 520 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 40 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Sub title < Title + + + + + + 520 + 10 + 491 + 51 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 410 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 250 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 330 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 170 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + frameBack + buttonTypeLogo + labelPage + labelMainTitle + framePageBtn + labelSubTitle + button1 + button2 + button3 + button4 + button5 + button6 + button7 + button8 + button9 + button10 + button11 + button12 + frameRightUp + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/passworddialog.cpp b/sharedviews/passworddialog.cpp new file mode 100644 index 0000000..829bf17 --- /dev/null +++ b/sharedviews/passworddialog.cpp @@ -0,0 +1,290 @@ +#include "passworddialog.h" +#include "ui_passworddialog.h" + +PassWordDialog::PassWordDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::PassWordDialog) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + setAttribute(Qt::WA_TranslucentBackground, true);//设置窗体背景透明 + + initControl(); + m_inputStr.clear(); + m_ifShow = false; + m_cleanFlag = 0; + m_ipLength = 0; + refreshUi(); +} + +PassWordDialog::~PassWordDialog() +{ + delete ui; +} + +//初始化窗体控件,包括位置、尺寸、样式 +void PassWordDialog::initControl() +{ + m_NumerBtnlist.clear(); + m_NumerBtnlist.append(ui->buttonNum7); + m_NumerBtnlist.append(ui->buttonNum8); + m_NumerBtnlist.append(ui->buttonNum9); + m_NumerBtnlist.append(ui->buttonNum4); + m_NumerBtnlist.append(ui->buttonNum5); + m_NumerBtnlist.append(ui->buttonNum6); + m_NumerBtnlist.append(ui->buttonNum1); + m_NumerBtnlist.append(ui->buttonNum2); + m_NumerBtnlist.append(ui->buttonNum3); + m_NumerBtnlist.append(ui->buttonNum0); + + for(int var = 0; var < m_NumerBtnlist.size(); var++) + { + connect(m_NumerBtnlist.at(var), + SIGNAL(clicked()), + this, + SLOT(numerBtnClick()) + ); + } + + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + initControlStyle();//初始化窗体控件样式 +} + +//初始化窗体控件为1920x1080分辨率 +void PassWordDialog::initResolution1910() +{ + this->resize(785,880); + this->move((1920-this->width())/2,(1080-this->height())/2); + + ui->frameBack->setGeometry(0,0,785,880); + ui->labelTitle->setGeometry(110,72,500,56); + ui->labelValue->setGeometry(198,221,538,56); + + for(int i = 0; i < 4; i++) + { + for(int j = 0; j < 3; j ++) + { + if(i*3+j == m_NumerBtnlist.size()-1) + { + m_NumerBtnlist[i*3+j]->setGeometry(118+(j+1)*188,326+i*88,172,74); + break; + } + else + { + m_NumerBtnlist[i*3+j]->setGeometry(118+j*188,326+i*88,172,74); + } + } + } + + ui->buttonClean->setGeometry(120,590,172,74); + ui->buttonBack->setGeometry(496,590,172,74); + + ui->buttonOk->setGeometry(306,688,172,74); + ui->buttonCancel->setGeometry(496,688,172,74); +} + +//初始化窗体控件为1024x600分辨率 +void PassWordDialog::initResolution1006() +{ + this->resize(416,505); + this->move((1024-this->width())/2,(600-this->height())/2); + ui->frameBack->setGeometry(0,0,416,505); + ui->labelTitle->setGeometry(52,33,328,48); + ui->labelValue->setGeometry(70,122,270,44); + + for(int i = 0; i < 4; i++) + { + for(int j = 0; j < 3; j ++) + { + if(i*3+j == m_NumerBtnlist.size()-1) + { + m_NumerBtnlist[i*3+j]->setGeometry(58+(j+1)*102,210+i*46,96,40); + break; + } + else + { + m_NumerBtnlist[i*3+j]->setGeometry(58+j*102,210+i*46,96,40); + } + } + } + + ui->buttonClean->setGeometry(58,348,96,40); + ui->buttonBack->setGeometry(262,348,96,40); + + ui->buttonOk->setGeometry(160,404,96,40); + ui->buttonCancel->setGeometry(262,404,96,40); +} + +//初始化窗体控件样式 +void PassWordDialog::initControlStyle() +{ + //白蓝色渐变、灰蓝色渐变 + QString style = "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(255, 255, 255), stop:1 rgb(215, 243, 254));border-radius:5px;}"; + style += "QPushButton:pressed{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(217, 222, 224), stop:1 rgb(191,213,223));}"; + style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(230, 230, 230), stop:1 rgb(182,182,182));}"; + + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + for(int i = 0; i < m_NumerBtnlist.size(); i++) + { + m_NumerBtnlist[i]->setStyleSheet(style); + m_NumerBtnlist[i]->setFont(fontNormal_1); + } + + 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->labelValue->setStyleSheet(LABELNAVYBLUESTYLE); + ui->labelValue->setFont(fontNormal_1); + ui->labelValue->setAlignment(Qt::AlignCenter); + + ui->buttonClean->setStyleSheet(style); + ui->buttonClean->setFont(fontNormal_1); + ui->buttonBack->setStyleSheet(style); + ui->buttonBack->setFont(fontNormal_1); + + ui->buttonOk->setWhiteBlueBottomStyle(); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()+"_1"),10); + ui->buttonCancel->setWhiteBlueBottomStyle(); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()+"_1"),12); +} + +void PassWordDialog::refreshUi() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + QString showStr(""); + QString password = cod->toUnicode("●"); + for (int var = 0; var < m_inputStr.size(); var++) + { + showStr = showStr + password; + } + + if(m_ifShow == false)//不可见 + { + ui->labelValue->setText(showStr); + } + else//可见 + { + ui->labelValue->setText(m_inputStr); + } + + if(m_inputStr.length() > 0) + { + ui->buttonOk->setEnabled(true); + } + else + { + ui->buttonOk->setEnabled(false); + } +} + +void PassWordDialog::numerBtnClick() +{ + QPushButton *button = (QPushButton*) this->sender() ; + + if(button == NULL) + { + return; + } + QString str = button->text(); + m_inputStr.append(str); + refreshUi(); +} + +void PassWordDialog::setTitleStr(QString str,int cFlag) +{ + ui->labelTitle->setText(str); + m_inputStr.clear(); + if(cFlag != 0) + { + m_cleanFlag = cFlag; + ui->buttonClean->setText("."); + } + refreshUi(); +} + +void PassWordDialog::setShowIfVisible(bool bShow) +{ + m_ifShow = bShow; +} + +void PassWordDialog::setIpStr(QString ip) +{ + m_inputStr= ip; + m_ipLength = ip.length(); + refreshUi(); +} + +QString PassWordDialog::getInputStr() +{ + return m_inputStr; +} +void PassWordDialog::on_buttonClean_clicked() +{ + if(m_cleanFlag != 0) + { + QString str = ui->buttonClean->text(); + m_inputStr.append(str); + } + else + { + m_inputStr.clear(); + } + refreshUi(); +} + +void PassWordDialog::on_buttonBack_clicked() +{ + if(m_inputStr.length() <= m_ipLength) + { + return; + } + m_inputStr = m_inputStr.mid(0 , m_inputStr.size() - 1); + refreshUi(); +} + +void PassWordDialog::on_buttonOk_clicked() +{ + if(m_inputStr.indexOf(".") != -1) + { + //检测IP地址是否合法 + QRegExp regExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)"); + if (!regExp.exactMatch(m_inputStr)) + { + PromptDialog promptDlg(this); + promptDlg.initDialog(PromptDialog::BTN_OK); + promptDlg.setTitleStr(tr("Prompt")); + QString str = tr("IP settings are unreasonable!");//IP设置不合理! + promptDlg.setContentStr(str); + promptDlg.exec(); + + return; + } + } + + done(1); +} + +void PassWordDialog::on_buttonCancel_clicked() +{ + m_inputStr.clear(); + done(0); +} diff --git a/sharedviews/passworddialog.h b/sharedviews/passworddialog.h new file mode 100644 index 0000000..57afaa9 --- /dev/null +++ b/sharedviews/passworddialog.h @@ -0,0 +1,49 @@ +#ifndef PASSWORDDIALOG_H +#define PASSWORDDIALOG_H + +#include +#include "setcontrolstyle.h" +#include "promptdialog.h" +#include +namespace Ui { +class PassWordDialog; +} + +class PassWordDialog : public QDialog +{ + Q_OBJECT + +public: + explicit PassWordDialog(QWidget *parent = 0); + ~PassWordDialog(); + +private: + Ui::PassWordDialog *ui; + QString m_inputStr; + QList m_NumerBtnlist; + bool m_ifShow;//输入字符是否可见 + s16 m_cleanFlag;//清除按钮的显示及作用,清空或者. + s16 m_ipLength; + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006(); + void initControlStyle();//初始化窗体控件样式 + void refreshUi(); + +private slots: + void numerBtnClick(); + void on_buttonClean_clicked(); + void on_buttonBack_clicked(); + void on_buttonOk_clicked(); + void on_buttonCancel_clicked(); + +public: + void setTitleStr(QString str,int cFlag = 0);//设置标题并修改按钮文本 + void setShowIfVisible(bool bShow);//设置输入内容是否可见 + void setIpStr(QString ip); + QString getInputStr(); +}; + +#endif // PASSWORDDIALOG_H diff --git a/sharedviews/passworddialog.ui b/sharedviews/passworddialog.ui new file mode 100644 index 0000000..c929694 --- /dev/null +++ b/sharedviews/passworddialog.ui @@ -0,0 +1,3930 @@ + + + PassWordDialog + + + + 0 + 0 + 328 + 416 + + + + Dialog + + + + + 220 + 352 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 200 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + + + + false + + + + + + 120 + 352 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + + + + false + + + + + + 30 + 62 + 270 + 44 + + + + + 100 + 44 + + + + + 360 + 80 + + + + + wqy-microhei + 16 + 50 + false + false + + + + Qt::LeftToRight + + + background-color: rgba(255, 255, 245, 255); + + + + + + + Qt::AlignCenter + + + + + + 0 + 0 + 328 + 48 + + + + + + + Password + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 0 + 0 + 328 + 416 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 222 + 124 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + 9 + + + false + + + + + + 20 + 236 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + 1 + + + false + + + + + + 122 + 236 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + 2 + + + false + + + + + + 222 + 292 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 200 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + + + + false + + + + + + 222 + 236 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + 3 + + + false + + + + + + 222 + 180 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + 6 + + + false + + + + + + 122 + 124 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + 8 + + + false + + + + + + 20 + 292 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 200 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + C + + + false + + + + + + 122 + 292 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + 0 + + + false + + + + + + 122 + 180 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + 5 + + + false + + + + + + 20 + 124 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + 7 + + + false + + + + + + 20 + 180 + 92 + 50 + + + + + 90 + 40 + + + + + 500 + 500 + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + 10 + 10 + 10 + + + + + + + 10 + 10 + 10 + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 168 + 197 + 226 + + + + + 186 + 220 + 255 + + + + + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 110 + 110 + 110 + + + + + + + 110 + 110 + 110 + + + + + + + 200 + 200 + 200 + + + + + + + 200 + 200 + 200 + + + + + + + + Qt::NoFocus + + + + + + 4 + + + false + + + frameBack + buttonCancel + buttonOk + labelValue + labelTitle + buttonNum9 + buttonNum1 + buttonNum2 + buttonBack + buttonNum3 + buttonNum6 + buttonNum8 + buttonClean + buttonNum0 + buttonNum5 + buttonNum7 + buttonNum4 + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/patternmanagewidget.cpp b/sharedviews/patternmanagewidget.cpp new file mode 100644 index 0000000..f6a1367 --- /dev/null +++ b/sharedviews/patternmanagewidget.cpp @@ -0,0 +1,1589 @@ +#include "patternmanagewidget.h" +#include "ui_patternmanagewidget.h" + +PatternManageWidget::PatternManageWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::PatternManageWidget), + m_itemPerPage(22) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + + m_itemBtnList.clear(); + //左侧 + m_itemBtnList.append(ui->button1); + m_itemBtnList.append(ui->button2); + m_itemBtnList.append(ui->button3); + m_itemBtnList.append(ui->button4); + m_itemBtnList.append(ui->button5); + + ui->button6->setVisible(false);//隐藏 + ui->button7->setVisible(false); + ui->button8->setVisible(false); + ui->button9->setVisible(false); + ui->button10->setVisible(false); + ui->button11->setVisible(false); + + if(g_emResolut == resolution1910)//1920x1080的分辨率每页左侧显示12个条目 + { + ui->button6->setVisible(true); + ui->button7->setVisible(true); + ui->button8->setVisible(true); + ui->button9->setVisible(true); + ui->button10->setVisible(true); + ui->button11->setVisible(true); + m_itemBtnList.append(ui->button6); + m_itemBtnList.append(ui->button7); + m_itemBtnList.append(ui->button8); + m_itemBtnList.append(ui->button9); + m_itemBtnList.append(ui->button10); + m_itemBtnList.append(ui->button11); + } + else if(g_emResolut == resolution1006)//1024x600的分辨率每页显示8个条目 + { + ui->button6->setVisible(true);//显示 + ui->button7->setVisible(true); + ui->button8->setVisible(true); + m_itemBtnList.append(ui->button6); + m_itemBtnList.append(ui->button7); + m_itemBtnList.append(ui->button8); + } + + //右侧 + m_itemBtnList.append(ui->button12); + m_itemBtnList.append(ui->button13); + m_itemBtnList.append(ui->button14); + m_itemBtnList.append(ui->button15); + m_itemBtnList.append(ui->button16); + ui->button17->setVisible(false);//隐藏 + ui->button18->setVisible(false); + ui->button19->setVisible(false); + ui->button20->setVisible(false); + ui->button21->setVisible(false); + ui->button22->setVisible(false); + + if(g_emResolut == resolution1910)//1920x1080的分辨率每页右侧显示12个条目 + { + ui->button17->setVisible(true); + ui->button18->setVisible(true); + ui->button19->setVisible(true); + ui->button20->setVisible(true); + ui->button21->setVisible(true); + ui->button22->setVisible(true); + m_itemBtnList.append(ui->button17); + m_itemBtnList.append(ui->button18); + m_itemBtnList.append(ui->button19); + m_itemBtnList.append(ui->button20); + m_itemBtnList.append(ui->button21); + m_itemBtnList.append(ui->button22); + } + else if(g_emResolut == resolution1006)//1024x600的分辨率每页显示8个条目 + { + ui->button17->setVisible(true); + ui->button18->setVisible(true); + ui->button19->setVisible(true); + m_itemBtnList.append(ui->button17); + m_itemBtnList.append(ui->button18); + m_itemBtnList.append(ui->button19); + } + + initControl(); + initialize(); +} + +PatternManageWidget::~PatternManageWidget() +{ + delete ui; +} + +//初始化 +void PatternManageWidget::initialize() +{ + m_curPages = 1; + m_pageNums = 1; + m_fileItemList.clear();//文件列表清空 + m_selectFileItemList.clear(); + m_rootPath.clear();//操作屏根路径 + m_curPath.clear();//当前路径 + m_selectAll = -1; + + QDir apppath(qApp->applicationDirPath()); + QString filePath = apppath.path() + apppath.separator() + PATTERNPATH; + m_rootPath = QDir(filePath).absolutePath();//为了将"\"变为"/" +} + +//初始化窗体控件,包括位置、尺寸、样式 +void PatternManageWidget::initControl() +{ + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + initControlStyle();//初始化窗体控件样式 +} + +//初始化窗体控件为1920x1080分辨率 +void PatternManageWidget::initResolution1910() +{ + this->resize(1920,1080); + ui->frameBack->setGeometry(0,0,1920,1080); + ui->buttonTypeLogo->setGeometry(128,66,78,78); + ui->labelMainTitle->setGeometry(226,60,1000,44); + ui->labelSubTitle->setGeometry(302,112,1000,36); + ui->labelPage->setGeometry(48,0,200,70); + ui->labelPage->setAlignment(Qt::AlignLeft); + + QRect rectImage(0,0,56,56); + QRect rectName(58,0,592,56); + for(int i = 0; i < 2; i++) + { + s16 num = m_itemBtnList.size()/2; + for(int j = 0; j < num; j++) + { + m_itemBtnList[i*num + j]->setLabelFont(fontNormal_1); + m_itemBtnList[i*num + j]->setGeometry(82+i*700,211+j*64,642,56); + m_itemBtnList[i*num + j]->initLeftImageRightName(rectImage,rectName); + } + } + + ui->frameRightUp->setGeometry(1468,92,406,72); + ui->buttonBackUpDir->setGeometry(340,0,66,66); + ui->buttonSelectAll->setGeometry(252,0,66,66); + ui->buttonNewFolder->setGeometry(252,0,66,66); + ui->labelPatternView->setGeometry(1566,250,242,242); + + ui->labelNameValue->setGeometry(1538,564,200,32); + ui->labelX->setGeometry(1538,604,32,32); + ui->labelXValue->setGeometry(1680,604,174,32); + ui->labelY->setGeometry(1538,644,32,32); + ui->labelYValue->setGeometry(1680,644,174,32); + ui->labelW->setGeometry(1538,684,32,32); + ui->labelWValue->setGeometry(1680,684,174,32); + ui->labelH->setGeometry(1538,724,32,32); + ui->labelHValue->setGeometry(1680,724,174,32); + ui->labelC->setGeometry(1538,764,32,32); + ui->labelCValue->setGeometry(1680,764,174,32); + ui->labelN->setGeometry(1538,804,32,32); + ui->labelNValue->setGeometry(1680,804,174,32); + + ui->framePageBtn->setGeometry(1120,990,800,70); + ui->labelPage->setGeometry(32,1008,400,40); + ui->buttonPgUp->setGeometry(0,0,168,70); + ui->buttonPgDn->setGeometry(200,0,168,70); + ui->buttonOk->setGeometry(400,0,168,70); + ui->buttonCancel->setGeometry(600,0,168,70); +} + +//初始化窗体控件为1024x600分辨率 +void PatternManageWidget::initResolution1006() +{ + m_itemPerPage = m_itemPerPage - 6; + this->resize(1024,600); + ui->frameBack->setGeometry(0,0,1024,600); + + ui->buttonTypeLogo->setGeometry(25,30,60,60); + ui->labelMainTitle->setGeometry(100,30,200,24); + ui->labelSubTitle->setGeometry(130,64,240,21); + ui->labelPage->setGeometry(48,0,200,70); + ui->labelPage->setAlignment(Qt::AlignLeft); + + QRect rectImage(0,5,26,28); + QRect rectName(30,0,200,36);//花样名称 + for(int i = 0; i < 2; i++) + { + s16 num = m_itemBtnList.size()/2; + for(int j = 0; j < num; j++) + { + m_itemBtnList[i*num + j]->setLabelFont(fontNormal_1); + m_itemBtnList[i*num + j]->setGeometry(44+i*378,138+j*47,337,38); + m_itemBtnList[i*num + j]->initLeftImageRightName(rectImage,rectName); + } + } + + ui->frameRightUp->setGeometry(800,40,800,61); + ui->buttonBackUpDir->setGeometry(150,0,50,50); + ui->buttonSelectAll->setGeometry(93,0,50,50); + ui->buttonNewFolder->setGeometry(37,0,50,50); + + ui->labelPatternView->setGeometry(824,132,150,150); + ui->labelNameValue->setGeometry(816,315,146,22); + ui->labelX->setGeometry(816,350,141,20); + ui->labelXValue->setGeometry(895,350,91,20); + ui->labelY->setGeometry(816,375,91,20); + ui->labelYValue->setGeometry(895,375,91,20); + ui->labelW->setGeometry(816,400,91,20); + ui->labelWValue->setGeometry(895,400,91,20); + ui->labelH->setGeometry(816,425,91,20); + ui->labelHValue->setGeometry(895,425,91,20); + ui->labelC->setGeometry(816,450,91,20); + ui->labelCValue->setGeometry(895,450,91,20); + ui->labelN->setGeometry(816,475,91,20); + ui->labelNValue->setGeometry(895,475,91,20); + + ui->framePageBtn->setGeometry(595,545,600,45); + ui->labelPage->setGeometry(20,550,102,45); + ui->buttonPgUp->setGeometry(0,0,96,40); + ui->buttonPgDn->setGeometry(106,0,96,40); + ui->buttonOk->setGeometry(212,0,96,40); + ui->buttonCancel->setGeometry(318,0,96,40); +} + +//初始化窗体控件样式 +void PatternManageWidget::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + //背景图 + QString frameBackImgPath = setControlStyle.getStyleSheet1(this->objectName()); + ui->frameBack->setStyleSheet(frameBackImgPath); + + //label样式 + ui->labelMainTitle->setFont(fontBold_1); + ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelSubTitle->setFont(fontNormal_1); + ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelPage->setFont(fontNormal_1); + ui->labelPage->setStyleSheet(LABELWHITESTYLE); + + ui->labelPatternView->setStyleSheet(TRANSPARENTSTYLE); + ui->labelNameValue->setFont(fontNormal_1); + ui->labelNameValue->setStyleSheet(LABELWHITESTYLE); + ui->labelX->setFont(fontNormal_1); + ui->labelX->setStyleSheet(LABELWHITESTYLE); + ui->labelXValue->setFont(fontNormal_1); + ui->labelXValue->setStyleSheet(LABELWHITESTYLE); + ui->labelY->setFont(fontNormal_1); + ui->labelY->setStyleSheet(LABELWHITESTYLE); + ui->labelYValue->setFont(fontNormal_1); + ui->labelYValue->setStyleSheet(LABELWHITESTYLE); + ui->labelW->setFont(fontNormal_1); + ui->labelW->setStyleSheet(LABELWHITESTYLE); + ui->labelWValue->setFont(fontNormal_1); + ui->labelWValue->setStyleSheet(LABELWHITESTYLE); + ui->labelH->setFont(fontNormal_1); + ui->labelH->setStyleSheet(LABELWHITESTYLE); + ui->labelHValue->setFont(fontNormal_1); + ui->labelHValue->setStyleSheet(LABELWHITESTYLE); + ui->labelC->setFont(fontNormal_1); + ui->labelC->setStyleSheet(LABELWHITESTYLE); + ui->labelCValue->setFont(fontNormal_1); + ui->labelCValue->setStyleSheet(LABELWHITESTYLE); + ui->labelN->setFont(fontNormal_1); + ui->labelN->setStyleSheet(LABELWHITESTYLE); + ui->labelNValue->setFont(fontNormal_1); + ui->labelNValue->setStyleSheet(LABELWHITESTYLE); + + ui->framePageBtn->setStyleSheet(TRANSPARENTSTYLE); + ui->frameRightUp->setStyleSheet(TRANSPARENTSTYLE); + + ui->buttonSelectAll->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonSelectAll->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonSelectAll->objectName())); + + ui->buttonBackUpDir->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonBackUpDir->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonBackUpDir->objectName())); + + ui->buttonNewFolder->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonNewFolder->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonNewFolder->objectName())); + + //四个按钮样式表一样 + ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); + + ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); + + ui->buttonOk->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()),12); + + ui->buttonCancel->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()),12); +} + +//设置类型图标 +void PatternManageWidget::setTypeLogo(QString tStyle) +{ + ui->buttonTypeLogo->setUnPreBtnLogo(tStyle); +} + +//设置主title +void PatternManageWidget::setMainTitle(QString str) +{ + ui->labelMainTitle->setText(str); +} + +//设置副title +void PatternManageWidget::setSubTitle(QString str) +{ + ui->labelSubTitle->setText(str); +} + +//初始化当前路径花样(点击选择花样时刷新) +void PatternManageWidget::initDirPath(QString path) +{ + int flag = -1;//该路径下是否存在dst文件或dsr文件的扫描标志 + m_curPath = path; + if(m_curPath == m_usbPath || m_curPath == m_rootPath)//如果当前目录等于优盘目录或操作屏根目录,返回上级按钮不可按 + { + ui->buttonBackUpDir->setEnabled(false); + } + else + { + ui->buttonBackUpDir->setEnabled(true); + } + + m_fileItemList.clear();//文件列表清空 + QDir dir(m_curPath); + //打开路径 + if(!dir.exists()) + { + m_curPages = 0; + m_pageNums = 0; + return; + } + + FileItem item; + QString fileName; + QString filePath; + QString imagePath; + + dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); // 设置类型过滤器,只为文件夹和文件格式 + dir.setSorting(QDir::DirsFirst | QDir::IgnoreCase); //设置排序方式,文件夹优先 + + QFileInfoList fileList = dir.entryInfoList(); + int count = fileList.count(); + for(int i = 0; i < count; i++) + { + QFileInfo fileInfo = fileList[i]; + + if(fileInfo.isDir())//为文件夹 + { + filePath = fileInfo.absoluteFilePath(); + fileName = fileInfo.baseName(); + imagePath = ":/images/folder.png"; + item.setFileInfo(filePath,fileName,imagePath); + m_fileItemList.append(item); + } + else//为文件 + { + QString suffix = fileInfo.suffix().toUpper(); + if(suffix == "DST" || suffix == "DSR") + { + filePath = fileInfo.absoluteFilePath(); + fileName = fileInfo.fileName(); + imagePath = ":/images/file.png"; + item.setFileInfo(filePath,fileName,imagePath); + m_fileItemList.append(item); + flag = 1;//扫描到dst或dsr + } + } + } + + if(flag == -1)//未扫描到dst或dsr + { + ui->buttonSelectAll->setEnabled(false); + } + else//扫描到dst或dsr + { + ui->buttonSelectAll->setEnabled(true); + } + + refreshUi(); +} + +void PatternManageWidget::initExecDirPath(QString path) +{ + m_curPath = path; + if(m_curPath == m_usbPath || m_curPath == m_rootPath)//如果当前目录等于优盘目录或操作屏根目录,返回上级按钮不可按 + { + ui->buttonBackUpDir->setEnabled(false); + } + else + { + ui->buttonBackUpDir->setEnabled(true); + } + + m_fileItemList.clear();//文件列表清空 + QDir dir(m_curPath); + //打开路径 + if(!dir.exists()) + { + m_curPages = 0; + m_pageNums = 0; + return; + } + + FileItem item; + QString fileName; + QString filePath; + QString imagePath; + + dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); // 设置类型过滤器,只为文件夹和文件格式 + + QFileInfoList fileList = dir.entryInfoList(); + int count = fileList.count(); + for(int i = 0; i < count; i++) + { + QFileInfo fileInfo = fileList[i]; + + if(fileInfo.isDir())//为文件夹 + { + filePath = fileInfo.absoluteFilePath(); + fileName = fileInfo.baseName(); + imagePath = ":/images/folder.png"; + item.setFileInfo(filePath,fileName,imagePath); + m_fileItemList.append(item); + } + } + + refreshUi(); +} + +//刷新界面显示 +void PatternManageWidget::refreshUi() +{ + if(m_manageMode == MANAGE_IMPORT_EXEC || m_manageMode == MANAGE_EXPORT_EXEC) + { + QString path = m_curPath; + if(m_manageMode == MANAGE_IMPORT_EXEC) + { + path = path.remove(m_rootPath); + } + if(m_manageMode == MANAGE_EXPORT_EXEC) + { + path = path.remove(m_usbPath); + } + setSubTitle(path); + } + + int itemNum; + if (m_fileItemList.size() <= 0) + { + itemNum = 0; + + for (int i = 0; i < m_itemPerPage; i++) + { + m_itemBtnList.at(i)->hide(); + } + ui->labelPage->setText("pageNum: 0/0"); + ui->buttonPgUp->setEnabled(false); + ui->buttonPgDn->setEnabled(false); + ui->buttonOk->setEnabled(false); + ui->buttonSelectAll->setEnabled(false); + + return; + } + else + { + itemNum = m_fileItemList.size(); + } + + m_pageNums = (itemNum + m_itemPerPage - 1)/m_itemPerPage;// 计算页数 + if (m_curPages > m_pageNums)// 当前页 + { + m_curPages = m_pageNums; + } + if (m_curPages <= 1 && itemNum != 0) + { + m_curPages = 1; + } + + int itemidx = (m_curPages - 1) * m_itemPerPage; + + for (int i = 0; i < m_itemPerPage; i++) + { + if (itemidx < itemNum) + { + //设置图标和文件名 + m_itemBtnList[i]->setItemLeftIcon(m_fileItemList.at(itemidx).getImagePath()); + m_itemBtnList[i]->setLabelName(m_fileItemList.at(itemidx).getShowInfo()); + m_itemBtnList.at(i)->show(); + + itemidx++; + } + else + { + m_itemBtnList.at(i)->hide(); + } + } + + // 翻页按钮 + if (m_curPages <= 1) + { + ui->buttonPgUp->setEnabled(false); + } + else + { + ui->buttonPgUp->setEnabled(true); + } + if (m_curPages >= m_pageNums) + { + ui->buttonPgDn->setEnabled(false); + } + else + { + ui->buttonPgDn->setEnabled(true); + } + + // 页信息 + if(m_pageNums == 0) + { + m_curPages = 0; + } + + QString str = tr("pageNum: ") + QString("%1/%2").arg(m_curPages).arg(m_pageNums);//页数: + ui->labelPage->setText(str); + + refreshCheckedPage(); +} + +QString PatternManageWidget::detectUsb() +{ + QString usbPath = ""; + +#ifdef Q_OS_LINUX + QDir dir(LINUXUSBPATH); + if(!dir.exists()) + { + usbPath = ""; + } + else + { + usbPath = LINUXUSBPATH; + } +#endif + +#ifdef Q_OS_WIN + QFileInfoList list = QDir::drives(); + + for(int i = 0; isetCheckable(true); + m_itemBtnList.at(var)->setChecked(true); + } + else + { + // 不被选中 + m_itemBtnList.at(var)->setChecked(false); + m_itemBtnList.at(var)->setCheckable(false); + } + } + } +} + +//点击某一条目 lxs走到最新的 +void PatternManageWidget::clickItem(int idx) +{ + //全选时点击条目,全选标志置为非全选 + if(m_selectAll == 1) + { + m_selectAll = m_selectAll * -1; + } + + if(idx < 0) //都不选中 + { + m_selectAll = -1; + m_selectFileItemList.clear(); + // 刷新页面中被选择的条目 + for (int var = 0; var < m_itemPerPage ; var++) + { + // 不被选中 + m_itemBtnList[var]->setChecked(false); + m_itemBtnList[var]->setCheckable(false); + ui->buttonOk->setEnabled(false); + } + //清空图片 + QPixmap pix = QPixmap(); + ui->labelPatternView->setPixmap(pix); + clearFileInfo(); + } + else + { + // 计算当前选择按钮对应的花版 + int itemidx = (m_curPages - 1) * m_itemPerPage + idx - 1; + + if (m_fileItemList.size() <= 0) + { + itemidx = -1; + return; + } + else + { + + if (itemidx >= m_fileItemList.size()) + { + return; + } + } + + QString filePath = m_fileItemList.at(itemidx).getFilePath(); + QFileInfo fileInfo(filePath); + + QString fileName = fileInfo.fileName(); + int size = fileName.length(); + if(size > NAMEMAXLENGTH)//花样名称过长时截取 + { + fileName = fileName.mid(0,NAMEMAXLENGTH) + "~"; + } + + if(fileInfo.isDir())//为文件夹 + { + if(m_manageMode == MANAGE_IMPORT_EXEC || m_manageMode == MANAGE_EXPORT_EXEC) + { + initExecDirPath(filePath); + } + else + { + initDirPath(filePath); + } + clickItem(-1); + } + else + { + int retIdx = m_selectFileItemList.indexOf(filePath); + + if(retIdx == -1) + { + // 没有找到相同的文件名 + // 添加条目 + m_selectFileItemList.append(filePath); + } + else + { + m_selectFileItemList.takeAt(retIdx); + } + refreshCheckedPage(); + + if(m_selectFileItemList.size() > 0) + { + QFileInfo lfileInfo(m_selectFileItemList.last()); //最后一个选中Item + QString fileNamePath = lfileInfo.absoluteFilePath(); + QString suffix = lfileInfo.suffix();//后缀 + + QImage image(QSize(ui->labelPatternView->width(), ui->labelPatternView->height()),QImage::Format_ARGB32); + ui->labelNameValue->setText(lfileInfo.fileName()); + + if(suffix.toUpper() == "DST") + { + DataFileDst dst; + dst.initColor(g_pSettings->getColorRgbArray().size(),(QRgb*)g_pSettings->getColorRgbArray().data()); + dst.initFile(fileNamePath);//最后一个选中Item + dst.createPreviewImage(&image, 0, PEN_WIDTH, 1);// 生成预览文件,第2个参数为0不保存图片,1为保存图片 + //刷新文件信息 + ui->labelNValue->setText(QString::number(dst.getStitchNums())); + + double width = dst.getDatWidth()*0.01; + ui->labelWValue->setText(QString("%1").arg(width)); + + double height = dst.getDatHeight()*0.01; + ui->labelHValue->setText(QString("%1").arg(height)); + + double xPos = dst.getMaxX()*0.01; + ui->labelXValue->setText(QString("%1").arg(xPos)); + + double yPos = dst.getMaxY()*0.01; + ui->labelYValue->setText(QString("%1").arg(yPos)); + } + else if(suffix.toUpper() == "DSR") + { + DataFileDsr dsr; + dsr.initColor(g_pSettings->getColorRgbArray().size(),(QRgb*)g_pSettings->getColorRgbArray().data()); + dsr.initFile(fileNamePath);//最后一个选中Item + dsr.convertDataToEmbAbs(); + dsr.createPreviewImage(&image, 0, PEN_WIDTH, 1);// 生成预览文件,第2个参数为0不保存图片,1为保存图片 + //刷新文件信息 + ui->labelNValue->setText(QString::number(dsr.getStitchNums())); + + double width = dsr.getDatWidth()*0.01; + ui->labelWValue->setText(QString("%1").arg(width)); + + double height = dsr.getDatHeight()*0.01; + ui->labelHValue->setText(QString("%1").arg(height)); + + double xPos = dsr.getMaxX()*0.01; + ui->labelXValue->setText(QString("%1").arg(xPos)); + + double yPos = dsr.getMaxY()*0.01; + ui->labelYValue->setText(QString("%1").arg(yPos)); + } + + QPixmap pix = QPixmap::fromImage(image); + ui->labelPatternView->setPixmap(pix); + } + else + { + QPixmap pix = QPixmap(); + ui->labelPatternView->setPixmap(pix); + //清空文件信息 + clearFileInfo(); + } + } + } + + if(m_manageMode == MANAGE_IMPORT_EXEC || m_manageMode == MANAGE_EXPORT_EXEC) + { + //清空图片 + QPixmap pix = QPixmap(); + ui->labelPatternView->setPixmap(pix); + //清空文件信息 + clearFileInfo(); + ui->buttonOk->setEnabled(true); //导入导出文件 + } + else//选择文件 + { + if(m_selectFileItemList.size() <= 0) + { + ui->buttonOk->setEnabled(false); + + //清空图片 + QPixmap pix = QPixmap(); + ui->labelPatternView->setPixmap(pix); + } + else + { + ui->buttonOk->setEnabled(true); + } + } +} + +void PatternManageWidget::patternImportOrExport(QString mainStr,QString subStr,QString path) +{ + QDir apppath(qApp->applicationDirPath()); + + if(m_curPath.length() <= 0) + { + return; + } + + PromptDialog promptDlg(this); + promptDlg.setRange(0, m_cpSelectFileItemList.size()-1); + promptDlg.show(); + s16 showFlag = 1; + + for(int i = 0; i < m_cpSelectFileItemList.size(); i++) + { + QFileInfo fileInfo(m_cpSelectFileItemList.at(i)); + QString fileName = fileInfo.fileName(); + QString suffix = fileInfo.suffix(); + QString newFileName = m_curPath + apppath.separator() + fileName; + + //非5.2和6.3版本的dsr不可导入 + //dst格式错误不可导入 + if(suffix.toUpper() == "DSR" || + suffix.toUpper() == "DST") + { + int rel = 0; + if(suffix.toUpper() == "DSR") + { + DataFileDsr dsr; + dsr.initFile(m_cpSelectFileItemList.at(i)); + rel = dsr.checkDsrVersion(); + } + else if(suffix.toUpper() == "DST") + { + DataFileDst dst; + dst.initFile(m_cpSelectFileItemList.at(i)); + rel = dst.checkDstFile(); + } + if(rel < 0) + { + promptDlg.initDialog(PromptDialog::BTN_OK); + promptDlg.setTitleStr(tr("Prompt")); + + QString str; + if(rel == -2) + { + str = fileName + " " + tr("Over 1.28 million stitches, can not be imported!");//针数超过128万,不能导入! + } + else + { + str = fileName + " " + tr("Format error, can not be imported!");//格式错误,不能导入! + } + promptDlg.setContentStr(str); + promptDlg.exec(); + showFlag = 0; + continue; + } + } + + qDebug()<<"Pattern ImportOrExport"; + qDebug()<<"fileName"< NAMEMAXLENGTH + 12)//花样名称过长时截取 + { + fileName = fileName.mid(0,NAMEMAXLENGTH + 12) + "~"; + } + + wordInputDlg.setOldWordsStr(fileName); + if(wordInputDlg.exec() == 1) + { + if(m_manageMode == MANAGE_IMPORT)//导入文件 + { + //文件名称 + QString name = wordInputDlg.getInputStr(); + QString newName = m_curPath + apppath.separator() + name + "." + suffix; + QFile::copy(m_cpSelectFileItemList.at(i), newName); + QFile::copy(m_cpSelectFileItemList.at(i) + ".fcg", newName + ".fcg"); + } + else if(m_manageMode == MANAGE_EXPORT)//导出文件 + { + //文件名称 + QString name = wordInputDlg.getInputStr();//导出文件路径 + QString newName = m_curPath + apppath.separator() + name + "." + suffix; + QFile::copy(m_cpSelectFileItemList.at(i), newName); + QFile::copy(m_cpSelectFileItemList.at(i) + ".fcg", newName + ".fcg"); + QFile::copy(m_cpSelectFileItemList.at(i) + ".ds16", newName + ".ds16"); + } + } + } + else if(ret == 2)//替换 + { + if(m_manageMode == MANAGE_IMPORT)//导入文件 + { + QFile::remove(newFileName); + if (g_emMacType != MACHINE_ADHESIVE) + { + QFile::remove(newFileName + ".fcg"); + } + QFile::remove(newFileName + ".ds16"); + QFile::copy(m_cpSelectFileItemList.at(i), newFileName); + QFile::copy(m_cpSelectFileItemList.at(i) + ".fcg", newFileName + ".fcg"); + emit siReplacePattrn(newFileName); + //newFileName = D:/work/workQT/XPlatform/Windows/debug/datafiles\0.7盾牌.dst + } + else if(m_manageMode == MANAGE_EXPORT)//导出文件 + { + QFile::remove(newFileName); + QFile::remove(newFileName + ".fcg"); + QFile::copy(m_cpSelectFileItemList.at(i), newFileName); + QFile::copy(m_cpSelectFileItemList.at(i) + ".fcg", newFileName + ".fcg"); + QFile::copy(m_cpSelectFileItemList.at(i) + ".ds16", newFileName + ".ds16"); + } + } + } + else + { + promptDlg.initDialog(PromptDialog::BTN_P_NONE); + promptDlg.setTitleStr(tr("Prompt")); + + if(m_manageMode == MANAGE_IMPORT)//导入文件 + { + promptDlg.setContentProcessStr(tr("Importing ") + fileName); //正在导入 + } + else if(m_manageMode == MANAGE_EXPORT)//导出文件 + { + promptDlg.setContentProcessStr(tr("Exporting ") + fileName); //正在导出 + } + + if(showFlag == 0) + { + promptDlg.show(); + showFlag = 1; + } + if(m_manageMode == MANAGE_IMPORT)//导入文件 + { + QFile::copy(m_cpSelectFileItemList.at(i),newFileName); + QFile::copy(m_cpSelectFileItemList.at(i) + ".fcg", newFileName + ".fcg"); + } + else if(m_manageMode == MANAGE_EXPORT)//导出文件 + { + QFile::copy(m_cpSelectFileItemList.at(i),newFileName); + QFile::copy(m_cpSelectFileItemList.at(i) + ".fcg", newFileName + ".fcg"); + QFile::copy(m_cpSelectFileItemList.at(i) + ".ds16", newFileName + ".ds16"); + } + } + + qDebug()<<"processEvents before"; + QCoreApplication::processEvents(QEventLoop::AllEvents); + qDebug()<<"processEvents end"; + + if(m_manageMode == MANAGE_IMPORT)//导入文件 + { + QImage image(m_imgSize,QImage::Format_ARGB32); + + if(suffix.toUpper() == "DST") + { + DataFileDst dst; + dst.initColor(g_pSettings->getColorRgbArray().size(),(QRgb*)g_pSettings->getColorRgbArray().data()); + dst.initFile(newFileName); + dst.createPreviewImage(&image, 1, PEN_WIDTH);// 生成渐进绘制预览图片,第2个参数为0不保存图片,1为保存图片 + + qDebug()<<"dst.createPreviewImage end"; + } + else if(suffix.toUpper() == "DSR") + { + DataFileDsr dsr; + dsr.initColor(g_pSettings->getColorRgbArray().size(),(QRgb*)g_pSettings->getColorRgbArray().data()); + dsr.initFile(newFileName); + dsr.convertDataToEmbAbs(); + dsr.createPreviewImage(&image, 1, PEN_WIDTH);// 生成渐进绘制预览图片,第2个参数为0不保存图片,1为保存图片 + } + } + + promptDlg.setValue(i); + } + +#ifdef Q_OS_LINUX + system("sync"); +#endif + if(m_manageMode == MANAGE_IMPORT)//导入文件 + { + promptDlg.setContentStr(tr("Import complete")); //导入完成 + } + else if(m_manageMode == MANAGE_EXPORT)//导出文件 + { + promptDlg.setContentStr(tr("Export complete")); //导出完成 + } + promptDlg.hide(); + + setMainTitle(mainStr); + setSubTitle(subStr); + initialize(); + initDirPath(path); + clickItem(-1); + ui->buttonSelectAll->show(); + ui->buttonNewFolder->hide(); +} + +void PatternManageWidget::patternDelete() +{ + if(m_selectAll == 1)//全选时删除整个文件夹 + { + for(int i = 0; i < m_selectFileItemList.size(); i++) + { + QFile::remove(m_selectFileItemList.at(i)); + QFile::remove(m_selectFileItemList.at(i)+".fcg"); + QFile::remove(m_selectFileItemList.at(i)+".ds16"); + QFile::remove(m_selectFileItemList.at(i)+".ds8"); + QFile::remove(m_selectFileItemList.at(i)+".preview.png"); + } + + if(m_curPath != m_rootPath)//非根目录 + { + //得到上级目录 + QDir upDir(m_curPath); + upDir.cdUp(); + QString upPath = upDir.absolutePath(); + + QDir remDir(m_curPath); + if(remDir.exists() == true) + { + remDir.rmpath(remDir.absolutePath());//删除整个文件夹 + } + + initDirPath(upPath);//初始化上级目录 + } + else + { + initDirPath(m_curPath);//初始化当前目录(根目录) + } + } + else + { + //所选文件个数等于目录文件总个数时删除整个文件夹 + if(m_selectFileItemList.size() == m_fileItemList.size()) + { + for(int i = 0; i < m_selectFileItemList.size(); i++) + { + QFile::remove(m_selectFileItemList.at(i)); + QFile::remove(m_selectFileItemList.at(i)+".fcg"); + QFile::remove(m_selectFileItemList.at(i)+".ds16"); + QFile::remove(m_selectFileItemList.at(i)+".ds8"); + QFile::remove(m_selectFileItemList.at(i)+".preview.png"); + } + + if(m_curPath != m_rootPath)//非根目录 + { + //得到上级目录 + QDir upDir(m_curPath); + upDir.cdUp(); + QString upPath = upDir.absolutePath(); + + QDir remDir(m_curPath); + if(remDir.exists() == true) + { + remDir.rmpath(remDir.absolutePath());//删除整个文件夹 + } + + initDirPath(upPath);//初始化上级目录 + } + else + { + initDirPath(m_curPath);//初始化当前目录(根目录) + } + } + else + { + //所选文件个数不等于目录文件总个数时删除整个文件夹 + for(int i = 0; i < m_selectFileItemList.size(); i++) + { + QFile::remove(m_selectFileItemList.at(i)); + QFile::remove(m_selectFileItemList.at(i)+".fcg"); + QFile::remove(m_selectFileItemList.at(i)+".ds16"); + QFile::remove(m_selectFileItemList.at(i)+".ds8"); + QFile::remove(m_selectFileItemList.at(i)+".preview.png"); + initDirPath(m_curPath); + } + } + } + clickItem(-1); +} + +void PatternManageWidget::clearFileInfo() +{ + ui->labelNameValue->setText(""); + ui->labelNValue->setText(""); + ui->labelCValue->setText(""); + ui->labelWValue->setText(""); + ui->labelHValue->setText(""); + ui->labelXValue->setText(""); + ui->labelYValue->setText(""); +} + +//花样导入 +void PatternManageWidget::patternManage(MANAGE_MODE mode) +{ + initialize(); + if(mode != MANAGE_DELETE)//删除操作不检测优盘 + { + m_usbPath.clear(); + m_usbPath = detectUsb(); + if(m_usbPath.length() <= 0) + { + //优盘不存在 + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK); + dlg.setTitleStr(tr("Prompt")); + + QString str; + str = tr("USB flash drive is not detected!");//未检测到优盘! + dlg.setContentStr(str); + dlg.exec(); + return; + } + } + + if(mode == MANAGE_IMPORT) + { + initDirPath(m_usbPath); + } + else + { + initDirPath(m_rootPath); + } + clickItem(-1); + + m_manageMode = mode;//花样导入、导出、删除 + ui->buttonNewFolder->hide(); + ui->buttonSelectAll->show(); + this->show(); +} + +void PatternManageWidget::setImportImageSize(QSize imgSize) +{ + m_imgSize = imgSize; +} + +void PatternManageWidget::on_button1_clicked() +{ + clickItem(1); +} + +void PatternManageWidget::on_button2_clicked() +{ + clickItem(2); +} + +void PatternManageWidget::on_button3_clicked() +{ + clickItem(3); +} + +void PatternManageWidget::on_button4_clicked() +{ + clickItem(4); +} + +void PatternManageWidget::on_button5_clicked() +{ + clickItem(5); +} + +void PatternManageWidget::on_button6_clicked() +{ + clickItem(6); +} + +void PatternManageWidget::on_button7_clicked() +{ + clickItem(7); +} + +void PatternManageWidget::on_button8_clicked() +{ + clickItem(8); +} + +void PatternManageWidget::on_button9_clicked() +{ + clickItem(9); +} + +void PatternManageWidget::on_button10_clicked() +{ + clickItem(10); +} + +void PatternManageWidget::on_button11_clicked() +{ + clickItem(11); +} + +void PatternManageWidget::on_button12_clicked() +{ + //12是右边第一个 + if(g_emResolut == resolution1006) + { + clickItem(9); + } + else + { + clickItem(12); + } +} + +void PatternManageWidget::on_button13_clicked() +{ + if(g_emResolut == resolution1006) + { + clickItem(10); + } + else + { + clickItem(13); + } +} + +void PatternManageWidget::on_button14_clicked() +{ + if(g_emResolut == resolution1006) + { + clickItem(11); + } + else + { + clickItem(14); + } +} + +void PatternManageWidget::on_button15_clicked() +{ + if(g_emResolut == resolution1006) + { + clickItem(12); + } + else + { + clickItem(15); + } +} + +void PatternManageWidget::on_button16_clicked() +{ + if(g_emResolut == resolution1006) + { + clickItem(13); + } + else + { + clickItem(16); + } +} + +void PatternManageWidget::on_button17_clicked() +{ + if(g_emResolut == resolution1006) + { + clickItem(14); + } + else + { + clickItem(17); + } +} + +void PatternManageWidget::on_button18_clicked() +{ + if(g_emResolut == resolution1006) + { + clickItem(15); + } + else + { + clickItem(18); + } +} + +void PatternManageWidget::on_button19_clicked() +{ + if(g_emResolut == resolution1006) + { + clickItem(16); + } + else + { + clickItem(19); + } +} + +void PatternManageWidget::on_button20_clicked() +{ + clickItem(20); +} + +void PatternManageWidget::on_button21_clicked() +{ + clickItem(21); +} + +void PatternManageWidget::on_button22_clicked() +{ + clickItem(22); +} + +void PatternManageWidget::on_buttonPgUp_clicked() +{ + m_curPages--; + refreshUi(); +} + +void PatternManageWidget::on_buttonPgDn_clicked() +{ + m_curPages++; + refreshUi(); +} + +void PatternManageWidget::on_buttonOk_clicked() +{ + if(m_manageMode == MANAGE_DELETE)//花样删除 + { + //是否删除花样的提示 + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK_CANCEL); + dlg.setTitleStr(tr("Prompt")); + + qDebug()<<"import begin 1"; + QString str; + str = tr("Whether to delete the pattern?");//是否删除花样? + dlg.setContentStr(str); + if(dlg.exec() == 1) + { + patternDelete(); + emit siDeletePattern();//删除文件后判断当前文件是否被删除 + } + } + else + { + qDebug()<<"import begin 1.5"; + QString str; + QString path; + if(m_manageMode == MANAGE_IMPORT)//花样导入 + { + qDebug()<<"import begin 2"; + + str = tr("Operation screen");//操作屏 + //导入路径 + path = m_rootPath; + m_manageMode = MANAGE_IMPORT_EXEC; + m_cpSelectFileItemList.clear(); + m_cpSelectFileItemList.append(m_selectFileItemList); + + qDebug()<<"import begin 2.5"; + } + else if(m_manageMode == MANAGE_EXPORT)//花样导出 + { + qDebug()<<"import begin XXX"; + + str = tr("USB");//优盘 + //导出路径 + path = m_usbPath; + m_manageMode = MANAGE_EXPORT_EXEC; + m_cpSelectFileItemList.clear(); + m_cpSelectFileItemList.append(m_selectFileItemList); + qDebug()<<"import begin 3.5"; + } + else if(m_manageMode == MANAGE_IMPORT_EXEC)//花样导入执行 + { + + qDebug()<<"import begin 4"; + m_manageMode = MANAGE_IMPORT; + QString mainStr,subStr,path; + mainStr = tr("Pattern Import"); + subStr = tr("Pattern Import < Pattern setting"); + path = m_usbPath; + patternImportOrExport(mainStr,subStr,path); + + return; + qDebug()<<"import begin 4.5"; + } + else if(m_manageMode == MANAGE_EXPORT_EXEC)//花样导出执行 + { + + qDebug()<<"import begin 5"; + m_manageMode = MANAGE_EXPORT; + QString mainStr,subStr,path; + mainStr = tr("Pattern Export"); + subStr = tr("Pattern Export < Pattern setting"); + path = m_rootPath; + patternImportOrExport(mainStr,subStr,path); + + return; + qDebug()<<"import begin 5.5"; + } + + ui->buttonNewFolder->show(); + ui->buttonSelectAll->hide(); + setMainTitle(str); + setSubTitle(path); + initialize(); + initExecDirPath(path); + clickItem(-1); + } +} + +void PatternManageWidget::on_buttonCancel_clicked() +{ + QString mainStr,subStr,path; + if(m_manageMode == MANAGE_IMPORT || + m_manageMode == MANAGE_EXPORT || + m_manageMode == MANAGE_DELETE )//花样导入、花样导出、花样删除 + { + this->hide(); + return; + } + else if(m_manageMode == MANAGE_IMPORT_EXEC)//花样导入执行 + { + m_manageMode = MANAGE_IMPORT; + mainStr = tr("Pattern Import"); + subStr = tr("Pattern Import < Pattern setting"); + path = m_usbPath; + } + else if(m_manageMode == MANAGE_EXPORT_EXEC)//花样导出执行 + { + m_manageMode = MANAGE_EXPORT; + mainStr = tr("Pattern Import"); + subStr = tr("Pattern Import < Pattern setting"); + path = m_rootPath; + } + + ui->buttonNewFolder->hide(); + ui->buttonSelectAll->show(); + setMainTitle(mainStr); + setSubTitle(subStr); + initialize(); + initDirPath(path); + clickItem(-1); + //密码权限,单次有效 + g_emUser = operate; +} + +void PatternManageWidget::on_buttonBackUpDir_clicked() +{ + QDir dir(m_curPath); + dir.cdUp();//返回上级目录 + QString path = dir.absolutePath();//得到上级目录 + if(m_manageMode == MANAGE_IMPORT_EXEC || m_manageMode == MANAGE_EXPORT_EXEC) + { + initExecDirPath(path); + } + else + { + initDirPath(path); + } + clickItem(-1); +} + +void PatternManageWidget::on_buttonSelectAll_clicked() +{ + m_selectAll = m_selectAll * -1; + if(m_selectAll == 1)//全选 + { + QDir dir(m_curPath); + //打开路径 + if(!dir.exists()) + { + return; + } + + QStringList filters; + filters<labelPatternView->width(), ui->labelPatternView->height()),QImage::Format_ARGB32); + ui->labelNameValue->setText(lfileInfo.fileName()); + + if(suffix.toUpper() == "DST") + { + DataFileDst dst; + dst.initColor(g_pSettings->getColorRgbArray().size(),(QRgb*)g_pSettings->getColorRgbArray().data()); + dst.initFile(fileNamePath);//最后一个选中Item + dst.createPreviewImage(&image, 0, PEN_WIDTH, 1);// 生成预览文件,第2个参数为0不保存图片,1为保存图片 + //刷新文件信息 + ui->labelNValue->setText(QString::number(dst.getStitchNums())); + + double width = dst.getDatWidth()*0.01; + ui->labelWValue->setText(QString("%1").arg(width)); + + double height = dst.getDatHeight()*0.01; + ui->labelHValue->setText(QString("%1").arg(height)); + + double xPos = dst.getMaxX()*0.01; + ui->labelXValue->setText(QString("%1").arg(xPos)); + + double yPos = dst.getMaxY()*0.01; + ui->labelYValue->setText(QString("%1").arg(yPos)); + } + else if(suffix.toUpper() == "DSR") + { + DataFileDsr dsr; + dsr.initColor(g_pSettings->getColorRgbArray().size(),(QRgb*)g_pSettings->getColorRgbArray().data()); + dsr.initFile(fileNamePath);//最后一个选中Item + dsr.convertDataToEmbAbs(); + dsr.createPreviewImage(&image, 0, PEN_WIDTH, 1);// 生成预览文件,第2个参数为0不保存图片,1为保存图片 + //刷新文件信息 + ui->labelNValue->setText(QString::number(dsr.getStitchNums())); + + double width = dsr.getDatWidth()*0.01; + ui->labelWValue->setText(QString("%1").arg(width)); + + double height = dsr.getDatHeight()*0.01; + ui->labelHValue->setText(QString("%1").arg(height)); + + double xPos = dsr.getMaxX()*0.01; + ui->labelXValue->setText(QString("%1").arg(xPos)); + + double yPos = dsr.getMaxY()*0.01; + ui->labelYValue->setText(QString("%1").arg(yPos)); + } + + QPixmap pix = QPixmap::fromImage(image); + ui->labelPatternView->setPixmap(pix); + } + else if(m_selectAll == -1)//全不选 + { + clickItem(m_selectAll); + } + + if(m_selectFileItemList.size() <= 0) + { + ui->buttonOk->setEnabled(false); + } + else + { + ui->buttonOk->setEnabled(true); + } +} + +//新建文件夹 +void PatternManageWidget::on_buttonNewFolder_clicked() +{ + WordsInputDialog wordInputDlg; + wordInputDlg.clean(); + wordInputDlg.setTitleStr(tr("new folder"));//新文件夹 + wordInputDlg.setOldWordsStr(""); + if(wordInputDlg.exec() == 1) + { + //文件路径 + QString name = wordInputDlg.getInputStr(); + QDir apppath(qApp->applicationDirPath()); + QString newFolderPath = m_curPath + apppath.separator() + name; + newFolderPath = QDir(newFolderPath).absolutePath();//为了将"\"变为"/" + + QDir dir(newFolderPath); + if(dir.exists() == false) + { + dir.mkdir(newFolderPath); + initExecDirPath(m_curPath); + } + else + { + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK); + dlg.setTitleStr(tr("Prompt")); + + QString str; + str = tr("This folder already exists!");//此文件夹已经存在! + dlg.setContentStr(str); + dlg.exec(); + return; + } + } +} diff --git a/sharedviews/patternmanagewidget.h b/sharedviews/patternmanagewidget.h new file mode 100644 index 0000000..bab2152 --- /dev/null +++ b/sharedviews/patternmanagewidget.h @@ -0,0 +1,122 @@ +#ifndef PatternManageWidget_H +#define PatternManageWidget_H + +#include +#include + +#ifdef Q_OS_WIN +#include +#include +#endif + +#include "setcontrolstyle.h" +#include "mybutton.h" +#include "items/fileitem.h" +#include "promptdialog.h" +#include "wordsinputdialog.h" +//#include "Include/datafiledst.h" +#include "datafile/datafiledst.h" +#include "datafile/datafiledsr.h" +#include +#include +#include "mctype/mainwidgetfunction.h" + +namespace Ui { +class PatternManageWidget; +} + +class PatternManageWidget : public QWidget +{ + Q_OBJECT + +public: + explicit PatternManageWidget(QWidget *parent = 0); + ~PatternManageWidget(); + enum MANAGE_MODE {MANAGE_IMPORT = 0, MANAGE_EXPORT, MANAGE_DELETE,MANAGE_IMPORT_EXEC,MANAGE_EXPORT_EXEC}; + +private: + Ui::PatternManageWidget *ui; + int m_itemPerPage;//界面每页条目数 + QList m_itemBtnList; + +private: + QList m_fileItemList;//文件列表 + QList m_selectFileItemList;//选中文件列表 + QList m_cpSelectFileItemList;//选中文件列表 + + int m_curPages;//当前页 + int m_pageNums;//总页数 + QString m_usbPath;//优盘路径 + QString m_rootPath;//操作屏根路径 + QString m_curPath;//当前路径 + int m_selectAll;//1:全选 -1:全不选 + MANAGE_MODE m_manageMode;//导入、导出、删除 + + QSize m_imgSize; + +private: + void initialize();//初始化 + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006();//初始化窗体控件为1024x600分辨率 + void initControlStyle();//初始化窗体控件样式 + +public: + void setTypeLogo(QString tStyle);//设置类型图标 + void setMainTitle(QString str);//设置主title + void setSubTitle(QString str);//设置副title + +private: + void initDirPath(QString path);//初始化目录中的目录和文件 + void initExecDirPath(QString path);//初始化目录中的目录 + + void refreshUi();//刷新界面显示 + QString detectUsb();//检测优盘是否存在 + void refreshCheckedPage();//刷新条目选中状态 + void clickItem(int idx);//点击某一条目 + void patternImportOrExport(QString mainStr,QString subStr,QString path);//花样导入或导出 + void patternDelete();//花样删除 + + void clearFileInfo(); + +public: + void patternManage(MANAGE_MODE mode);//花样导入 + void setImportImageSize(QSize imgSize); //设置导入花样时生成预览图片的图片大小(与花样选择界面的图片大小相同) + +signals: + void siDeletePattern();//删除了文件的信号 + void siReplacePattrn(QString path);//替换了文件的信号 + +private slots: + void on_button1_clicked(); + void on_button2_clicked(); + void on_button3_clicked(); + void on_button4_clicked(); + void on_button5_clicked(); + void on_button6_clicked(); + void on_button7_clicked(); + void on_button8_clicked(); + void on_button9_clicked(); + void on_button10_clicked(); + void on_button11_clicked(); + void on_button12_clicked(); + void on_button13_clicked(); + void on_button14_clicked(); + void on_button15_clicked(); + void on_button16_clicked(); + void on_button17_clicked(); + void on_button18_clicked(); + void on_button19_clicked(); + void on_button20_clicked(); + void on_button21_clicked(); + void on_button22_clicked(); + void on_buttonPgUp_clicked(); + void on_buttonPgDn_clicked(); + void on_buttonOk_clicked(); + void on_buttonCancel_clicked(); + void on_buttonBackUpDir_clicked(); + void on_buttonSelectAll_clicked(); + void on_buttonNewFolder_clicked(); +}; + +#endif // PatternManageWidget_H diff --git a/sharedviews/patternmanagewidget.ui b/sharedviews/patternmanagewidget.ui new file mode 100644 index 0000000..5c3c2b8 --- /dev/null +++ b/sharedviews/patternmanagewidget.ui @@ -0,0 +1,1026 @@ + + + PatternManageWidget + + + + 0 + 0 + 1024 + 600 + + + + Form + + + background-color: rgb(172, 172, 172); + + + + + 20 + 560 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + PageNums: 0/0 + + + + + + 100 + 430 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 100 + 110 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 470 + 550 + 531 + 31 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 290 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 450 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 370 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 210 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + + 100 + 310 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 100 + 470 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 100 + 150 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 100 + 70 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 100 + 390 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 100 + 270 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 100 + 350 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 100 + 190 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 100 + 230 + 300 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 30 + 10 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 40 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Sub title < Title + + + + + + 110 + 10 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Sub title + + + + + + 770 + 70 + 200 + 200 + + + + background-color: rgb(255, 255, 255); + + + + + + + + + 0 + 0 + 1024 + 600 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 420 + 270 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 420 + 310 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 420 + 70 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 420 + 390 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 420 + 150 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 420 + 430 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 420 + 350 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 420 + 470 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 420 + 190 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 420 + 230 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 420 + 110 + 241 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 860 + 420 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 1000.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 830 + 400 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + W + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 860 + 360 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 500.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 860 + 440 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 999 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 830 + 420 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + H + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 860 + 460 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 1000000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 860 + 400 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 1000.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 830 + 380 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Y + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 830 + 360 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + X + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 860 + 380 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 800.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 800 + 330 + 72 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + dst + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 830 + 440 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + C + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 830 + 460 + 20 + 16 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + N + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 700 + 10 + 291 + 51 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 130 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 210 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 40 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + frameBack + labelPage + button10 + button2 + framePageBtn + button7 + button11 + button3 + button1 + button9 + button6 + button8 + button4 + button5 + buttonTypeLogo + labelSubTitle + labelMainTitle + labelPatternView + button17 + button18 + button12 + button20 + button14 + button21 + button19 + button22 + button15 + button16 + button13 + labelHValue + labelW + labelXValue + labelCValue + labelH + labelNValue + labelWValue + labelY + labelX + labelYValue + labelNameValue + labelC + labelN + frameRightUp + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/patternselectwidget.cpp b/sharedviews/patternselectwidget.cpp new file mode 100644 index 0000000..7b79124 --- /dev/null +++ b/sharedviews/patternselectwidget.cpp @@ -0,0 +1,912 @@ +#include "patternselectwidget.h" +#include "ui_patternselectwidget.h" + +PatternSelectWidget::PatternSelectWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::PatternSelectWidget), + m_itemPerPage(10) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + + this->move(0,0); + initControl(); + initialize(); +} + +PatternSelectWidget::~PatternSelectWidget() +{ + delete ui; +} + +//初始化窗体控件,包括位置、尺寸、样式 +void PatternSelectWidget::initControl() +{ + m_imageButtonList.clear(); + m_imageButtonList.append(ui->buttonImage1); + m_imageButtonList.append(ui->buttonImage2); + m_imageButtonList.append(ui->buttonImage3); + m_imageButtonList.append(ui->buttonImage4); + m_imageButtonList.append(ui->buttonImage5); + m_imageButtonList.append(ui->buttonImage6); + m_imageButtonList.append(ui->buttonImage7); + m_imageButtonList.append(ui->buttonImage8); + m_imageButtonList.append(ui->buttonImage9); + m_imageButtonList.append(ui->buttonImage10); + + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + + initControlStyle();//初始化窗体控件样式 +} + +//初始化窗体控件为1920x1080分辨率 +void PatternSelectWidget::initResolution1910() +{ + this->resize(1920,1080); + ui->frameBack->setGeometry(0,0,1920,1080); + ui->buttonTypeLogo->setGeometry(128,66,78,78); + ui->labelMainTitle->setGeometry(226,60,1000,44); + ui->labelSubTitle->setGeometry(302,112,1000,36); + ui->frameImage->setGeometry(48,194,1422,748); + + //预览图片 + QRect rectImage(14,12,230,230); + QRect rectName(36,262,210,82); + for(int i = 0; i < 2; i++) + { + s16 num = m_imageButtonList.size()/2; + for(int j = 0; j < num; j++) + { + m_imageButtonList.at(i*num + j)->setGeometry(0+j*288 ,0+i*390,256,356); + m_imageButtonList.at(i*num + j)->initUpImageDownName(rectImage,rectName); + } + } + + ui->frameRightUp->setGeometry(1716,92,172,72); + ui->buttonBackUpDir->setGeometry(102,0,66,66); + + //label样式 + ui->labelMainTitle->setFont(fontBold_1); + ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelSubTitle->setFont(fontNormal_1); + ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelPageNum->setFont(fontNormal_1); + ui->labelPageNum->setStyleSheet(LABELWHITESTYLE); + + ui->frameInfo1->setGeometry(1528,210,328,284); + + QList labelList1; + labelList1.append(ui->labelPatternName); + labelList1.append(ui->labelTotalNeedle); + labelList1.append(ui->labelColorNum); + labelList1.append(ui->labelPatternWidth); + labelList1.append(ui->labelPatternHeight); + labelList1.append(ui->labelX); + labelList1.append(ui->labelY); + for(int i = 0; i < labelList1.size(); i++) + { + labelList1[i]->setGeometry(0,i*40,138,32); + labelList1[i]->setFont(fontNormal_6); + labelList1[i]->setStyleSheet(LABELWHITESTYLE); + } + + QList labelList2; + labelList2.append(ui->labelPatternNameValue); + labelList2.append(ui->labelTotalNeedleValue); + labelList2.append(ui->labelColorNumValue); + labelList2.append(ui->labelPatternWidthValue); + labelList2.append(ui->labelPatternHeightValue); + labelList2.append(ui->labelXValue); + labelList2.append(ui->labelYValue); + for(int i = 0; i < labelList2.size(); i++) + { + labelList2[i]->setGeometry(138,i*40,176,32); + labelList2[i]->setFont(fontNormal_6); + labelList2[i]->setStyleSheet(LABELWHITESTYLE); + } + + ui->frameInfo2->setGeometry(1528,526,328,398); + + QList labelList3; + labelList3.append(ui->labelRotate); + labelList3.append(ui->labelDirection); + labelList3.append(ui->labelHor); + labelList3.append(ui->labelVer); + for(int i = 0; i < labelList3.size(); i++) + { + labelList3[i]->setGeometry(0,40+i*40,200,32); + labelList3[i]->setFont(fontNormal_6); + labelList3[i]->setStyleSheet(LABELWHITESTYLE); + } + + QList labelList4; + labelList4.append(ui->labelRotateValue); + labelList4.append(ui->labelDirectionValue); + labelList4.append(ui->labelHorValue); + labelList4.append(ui->labelVerValue); + for(int i = 0; i < labelList4.size(); i++) + { + labelList4[i]->setGeometry(192,40+i*40,130,32); + labelList4[i]->setFont(fontNormal_6); + labelList4[i]->setStyleSheet(LABELWHITESTYLE); + } + + ui->framePageBtn->setGeometry(1120,990,800,70); + ui->labelPageNum->setGeometry(32,1008,400,40); + ui->buttonPgUp->setGeometry(0,0,168,70); + ui->buttonPgDn->setGeometry(200,0,168,70); + ui->buttonOk->setGeometry(400,0,168,70); + ui->buttonCancel->setGeometry(600,0,168,70); +} + +//初始化窗体控件为1024x600分辨率 +void PatternSelectWidget::initResolution1006() +{ + this->resize(1024,600); + ui->frameBack->setGeometry(0,0,1024,600); + ui->buttonTypeLogo->setGeometry(25,30,60,60); + ui->labelMainTitle->setGeometry(100,30,200,24); + ui->labelSubTitle->setGeometry(130,64,240,21); + ui->frameImage->setGeometry(27,108,791,431); + + //预览图片 + QRect rectImage(7,9,120,120); + QRect rectName(18,144,112,42); + for(int i = 0; i < 2; i++) + { + s16 num = m_imageButtonList.size()/2; + for(int j = 0; j < num; j++) + { + m_imageButtonList.at(i*num + j)->setGeometry(0+j*155,0+i*220,134,197); + m_imageButtonList.at(i*num + j)->initUpImageDownName(rectImage,rectName); + } + } + + ui->frameRightUp->setGeometry(800,40,300,61); + ui->buttonBackUpDir->setGeometry(150,0,50,50); + + //label样式 + ui->labelMainTitle->setFont(fontBold_1); + ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelSubTitle->setFont(fontNormal_1); + ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelPageNum->setFont(fontNormal_1); + ui->labelPageNum->setStyleSheet(LABELWHITESTYLE); + + ui->frameInfo1->setGeometry(804,110,222,191); + + QList labelList1; + labelList1.append(ui->labelPatternName); + labelList1.append(ui->labelTotalNeedle); + labelList1.append(ui->labelColorNum); + labelList1.append(ui->labelPatternWidth); + labelList1.append(ui->labelPatternHeight); + labelList1.append(ui->labelX); + labelList1.append(ui->labelY); + for(int i = 0; i < labelList1.size(); i++) + { + labelList1[i]->setGeometry(5,i*26,90,32); + labelList1[i]->setFont(fontNormal_6); + labelList1[i]->setStyleSheet(LABELWHITESTYLE); + } + + QList labelList2; + labelList2.append(ui->labelPatternNameValue); + labelList2.append(ui->labelTotalNeedleValue); + labelList2.append(ui->labelColorNumValue); + labelList2.append(ui->labelPatternWidthValue); + labelList2.append(ui->labelPatternHeightValue); + labelList2.append(ui->labelXValue); + labelList2.append(ui->labelYValue); + for(int i = 0; i < labelList2.size(); i++) + { + labelList2[i]->setGeometry(42,i*26,140,32); + labelList2[i]->setFont(fontNormal_6); + labelList2[i]->setStyleSheet(LABELWHITESTYLE); + } + + ui->frameInfo2->setGeometry(804,310,222,232); + + QList labelList3; + labelList3.append(ui->labelRotate); + labelList3.append(ui->labelDirection); + labelList3.append(ui->labelHor); + labelList3.append(ui->labelVer); + for(int i = 0; i < labelList3.size(); i++) + { + labelList3[i]->setGeometry(5,i*26,110,32); + labelList3[i]->setFont(fontNormal_6); + labelList3[i]->setStyleSheet(LABELWHITESTYLE); + } + + QList labelList4; + labelList4.append(ui->labelRotateValue); + labelList4.append(ui->labelDirectionValue); + labelList4.append(ui->labelHorValue); + labelList4.append(ui->labelVerValue); + for(int i = 0; i < labelList4.size(); i++) + { + labelList4[i]->setGeometry(72,i*26,110,32); + labelList4[i]->setFont(fontNormal_6); + labelList4[i]->setStyleSheet(LABELWHITESTYLE); + } + + ui->framePageBtn->setGeometry(595,545,600,45); + ui->labelPageNum->setGeometry(20,550,102,45); + ui->buttonPgUp->setGeometry(0,0,96,40); + ui->buttonPgDn->setGeometry(106,0,96,40); + ui->buttonOk->setGeometry(212,0,96,40); + ui->buttonCancel->setGeometry(318,0,96,40); +} + +//初始化窗体控件样式 +void PatternSelectWidget::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + //背景图 + QString frameBackImgPath = setControlStyle.getStyleSheet(this->objectName()); + ui->frameBack->setStyleSheet(frameBackImgPath); + + //frame样式 + ui->framePageBtn->setStyleSheet(TRANSPARENTSTYLE); + ui->frameImage->setStyleSheet(TRANSPARENTSTYLE); + ui->frameInfo1->setStyleSheet(TRANSPARENTSTYLE); + ui->frameInfo2->setStyleSheet(TRANSPARENTSTYLE); + ui->frameRightUp->setStyleSheet(TRANSPARENTSTYLE); + + //条目 + for(int i = 0; i < m_itemPerPage; i++) + { + m_imageButtonList[i]->setCheckedBottomImage(setControlStyle.getBottomStyleSheet(m_imageButtonList[i]->parent()->objectName())); + m_imageButtonList[i]->setLabelFont(fontNormal_12); + } + + ui->buttonBackUpDir->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonBackUpDir->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonBackUpDir->objectName())); + + //四个按钮样式表一样 + ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); + + ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); + + ui->buttonOk->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()),12); + + ui->buttonCancel->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()),12); +} + +//初始化 +void PatternSelectWidget::initialize() +{ + m_firstFilePath.clear(); + m_curFilePath.clear(); + m_fileItemList.clear(); + + m_curPages = 1;//花样选择界面当前页数 + m_pageNums = 1;//总页数 + m_selectedPattenIdx = -1;//被选中的花版号 + + initPattern(); +} + +//初始化花样 +void PatternSelectWidget::initPattern() +{ + //花样文件目录 + QDir apppath(qApp->applicationDirPath()); + QString filePath = apppath.path() + apppath.separator() + PATTERNPATH; + m_firstFilePath = QDir(filePath).absolutePath();//为了将"\"变为"/" + getDirPatternFiles(m_firstFilePath); +} + +//获取花样文件下的路径或者花样 +void PatternSelectWidget::getDirPatternFiles(QString dirPath) +{ + m_curFilePath = dirPath;//记录当前目录 + if(m_curFilePath == m_firstFilePath)//如果当前目录为一级目录 + { + ui->buttonBackUpDir->setEnabled(false);//设置按钮不可按(返回上级目录按钮) + } + else + { + ui->buttonBackUpDir->setEnabled(true);//设置按钮可按(返回上级目录按钮) + } + + createCurDirPatterns(); +} +//刷新界面显示 +void PatternSelectWidget::refreshPageUi() +{ + int itemNum; + if (m_fileItemList.size() <= 0) + { + itemNum = 0; + + for (int i = 0; i < m_itemPerPage; i++) + { + m_imageButtonList.at(i)->hide(); + } + ui->labelPageNum->setText(tr("PageNum: 0/0"));//页数: 0/0 + ui->buttonPgUp->setEnabled(false); + ui->buttonPgDn->setEnabled(false); + ui->buttonOk->setEnabled(false); + + clearFileInfo(); + return; + } + else + { + itemNum = m_fileItemList.size(); + } + + m_pageNums = (itemNum + m_itemPerPage - 1)/m_itemPerPage;// 计算页数 + if (m_curPages > m_pageNums)// 当前页 + { + m_curPages = m_pageNums; + } + if (m_curPages <= 1) + { + m_curPages = 1; + } + + int itemidx = (m_curPages - 1) * m_itemPerPage; + + for (int i = 0; i < m_itemPerPage; i++) + { + if (itemidx < itemNum) + { + QImage image = m_fileItemList.at(itemidx).getPreviewImage(); + m_imageButtonList[i]->setPreviewImage(image); + m_imageButtonList[i]->setLabelName(m_fileItemList.at(itemidx).getShowInfo()); + m_imageButtonList.at(i)->show(); + + itemidx++; + } + else + { + m_imageButtonList.at(i)->hide(); + } + } + + // 翻页按钮 + if (m_curPages <= 1) + { + ui->buttonPgUp->setEnabled(false); + } + else + { + ui->buttonPgUp->setEnabled(true); + } + if (m_curPages >= m_pageNums) + { + ui->buttonPgDn->setEnabled(false); + } + else + { + ui->buttonPgDn->setEnabled(true); + } + + // 页信息 + if(m_pageNums == 0) + { + m_curPages = 0; + } + + // 页信息 + QString str = tr("pageNum: ") + QString("%1/%2").arg(m_curPages).arg(m_pageNums);//页数: + ui->labelPageNum->setText(str); + + //refreshCheckedPage(); + refreshChecked(); +} + +//刷新条目选中状态 +void PatternSelectWidget::refreshCheckedPage() +{ + int num =m_fileItemList.size(); + if (num <= m_selectedPattenIdx)//没有花版 num = 0 + { + m_selectedPattenIdx = -1; + } + + if(m_selectedPattenIdx == -1)//被选中的花版号初始化的时候就是-1 + { + clearFileInfo();//清空花样信息 + ui->buttonOk->setEnabled(false); + } + else + { + ui->buttonOk->setEnabled(true); + } + + // 刷新页面中被选择的条目 + for(int var = 0; var < m_itemPerPage; var++)//var < 花样选择界面每页图片数 + { + int idx = (m_curPages - 1) * (m_itemPerPage) + var; + if(m_selectedPattenIdx == idx)//选中的花版号等于 idx + { + QString filePath = m_fileItemList.at(m_selectedPattenIdx).getFilePath();//m_fileItemList 花样列表,从0开始 + QFileInfo file(filePath); + if(file.isDir())//为文件夹 + { + m_selectedPattenIdx = -1; + getDirPatternFiles(filePath); + return; + } + + //所选文件 + QString ext = file.suffix().toUpper(); + getFileInfo(filePath,ext);//获取花样信息 + + // 条目被选中 + m_imageButtonList.at(var)->setCheckable(true); + m_imageButtonList.at(var)->setChecked(true); + } + else + { + // 不被选中 + m_imageButtonList.at(var)->setChecked(false); + m_imageButtonList.at(var)->setCheckable(false); + } + } +} + +void PatternSelectWidget::refreshChecked() +{ + int num =m_fileItemList.size(); + if (num <= m_selectedPattenIdx)//没有花版 num = 0 + { + m_selectedPattenIdx = -1; + } + + if(m_selectedPattenIdx == -1)//被选中的花版号初始化的时候就是-1 + { + clearFileInfo();//清空花样信息 + ui->buttonOk->setEnabled(false); + } + else + { + ui->buttonOk->setEnabled(true); + } + + // 刷新页面中被选择的条目 + for(int var = 0; var < m_itemPerPage; var++)//var < 花样选择界面每页图片数 + { + int idx = (m_curPages - 1) * (m_itemPerPage) + var; + if(m_selectedPattenIdx == idx)//选中的花版号等于 idx + { + if(m_selectedPattenIdx == -1 || + m_selectedPattenIdx >= m_fileItemList.size()) + { + break; + } + QString filePath = m_fileItemList.at(m_selectedPattenIdx).getFilePath();//m_fileItemList 花样列表,从0开始 + QFileInfo file(filePath); + if(file.isDir())//为文件夹 + { + m_selectedPattenIdx = -1; + getDirPatternFiles(filePath); + return; + } + + // 条目被选中 + m_imageButtonList.at(var)->setCheckable(true); + m_imageButtonList.at(var)->setChecked(true); + } + else + { + // 不被选中 + m_imageButtonList.at(var)->setChecked(false); + m_imageButtonList.at(var)->setCheckable(false); + } + } +} + +//点击花样图片 +void PatternSelectWidget::clickItem(int idx) +{ + if(m_fileItemList.size() <= 0) + { + return; + } + m_selectedPattenIdx = (m_curPages - 1) * m_itemPerPage + idx - 1; + refreshCheckedPage(); +} + +//清空花样信息 +void PatternSelectWidget::clearFileInfo() +{ + ui->labelColorNumValue->clear(); + ui->labelDirectionValue->clear(); + ui->labelPatternHeightValue->clear(); + ui->labelPatternNameValue->clear(); + ui->labelPatternWidthValue->clear(); + ui->labelRotateValue->clear(); + ui->labelTotalNeedleValue->clear(); + ui->labelXValue->clear(); + ui->labelYValue->clear(); +} + +//获取花样信息 +void PatternSelectWidget::getFileInfo(QString filePath, QString suffix) +{ + QFileInfo file(filePath); + QString fileName = file.fileName(); + int size = fileName.length(); + if(size > NAMEMAXLENGTH)//花样名称过长时截取 + { + fileName = fileName.mid(0,NAMEMAXLENGTH) + "~"; + } + + if(suffix == "DST")//dst文件 + { + //qDebug()<<"dst click begin"; + + DataFileDst dst; + dst.initFile(filePath); + + //qDebug()<<"dst.convertDataToAbs() begin"; + dst.convertDataToAbs(); + //qDebug()<<"dst.convertDataToAbs() end"; + + ui->labelPatternNameValue->setText(fileName); + ui->labelTotalNeedleValue->setText(QString::number(dst.getStitchNums())); + ui->labelColorNumValue->setText(QString::number(dst.getColorNums())); + + double width = dst.getDatWidth()*0.01; + ui->labelPatternWidthValue->setText(QString("%1").arg(width)); + + double height = dst.getDatHeight()*0.01; + ui->labelPatternHeightValue->setText(QString("%1").arg(height)); + + double maxX = dst.getMaxX()*0.01; + double minX = dst.getMinX()*0.01; + ui->labelXValue->setText(QString("(%1,%2)").arg(maxX).arg(minX)); + + double maxY = dst.getMaxY()*0.01; + double minY = dst.getMinY()*0.01; + ui->labelYValue->setText(QString("(%1,%2)").arg(maxY).arg(minY)); + + //qDebug()<<"showfileinfo end"; + } + else if(suffix == "DSR")//dsr文件 + { + DataFileDsr dsr; + dsr.initFile(filePath); + dsr.convertDataToEmbAbs(); + + ui->labelPatternNameValue->setText(fileName); + ui->labelTotalNeedleValue->setText(QString::number(dsr.getStitchNums())); + ui->labelColorNumValue->setText(QString::number(dsr.getColorNums())); + + double width = dsr.getDatWidth()*0.01; + ui->labelPatternWidthValue->setText(QString("%1").arg(width)); + + double height = dsr.getDatHeight()*0.01; + ui->labelPatternHeightValue->setText(QString("%1").arg(height)); + + double maxX = dsr.getMaxX()*0.01; + double minX = dsr.getMinX()*0.01; + ui->labelXValue->setText(QString("(%1,%2)").arg(maxX).arg(minX)); + + double maxY = dsr.getMaxY()*0.01; + double minY = dsr.getMinY()*0.01; + ui->labelYValue->setText(QString("(%1,%2)").arg(maxY).arg(minY)); + } + + //qDebug()<<"get patternpara begin"; + + refreshSettingInfo(filePath); +} + +//设置类型图标 +void PatternSelectWidget::setTypeLogo(QString tStyle) +{ + ui->buttonTypeLogo->setUnPreBtnLogo(tStyle); +} + +//设置主title +void PatternSelectWidget::setMainTitle(QString str) +{ + ui->labelMainTitle->setText(str); +} + +//设置副title +void PatternSelectWidget::setSubTitle(QString str) +{ + ui->labelSubTitle->setText(str); +} + +//生成当前路径花样 +void PatternSelectWidget::createCurDirPatterns() +{ + m_fileItemList.clear(); + QDir dir(m_curFilePath); + + // 打开文件所在的路径 + if(!dir.exists()) + { + m_curPages = 0; + m_pageNums = 0; + qDebug() << "dirpath not exist, name=" << m_curFilePath; + + dir.mkdir(m_curFilePath);//创建花样文件夹 + } + + FileItem item; + QString fileName; + QString filePath; + DataFileDst dst; + DataFileDsr dsr; + + dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); // 设置类型过滤器,只为文件夹和dst文件格式 + dir.setSorting(QDir::DirsFirst | QDir::IgnoreCase); // 设置排序方式 + + QFileInfoList fileList = dir.entryInfoList(); + int count = fileList.count(); + for(int i = 0; i < count; i++) + { + QImage image(QSize(ui->buttonImage1->labelImage->width(), ui->buttonImage1->labelImage->height()), IMAGE_TYPE); + QFileInfo fileInfo = fileList[i]; + + if(fileInfo.isDir())//为文件夹 + { + filePath = fileInfo.absoluteFilePath(); + fileName = fileInfo.baseName(); + if(g_emResolut == resolution1910) + { + image.load(":/images/folderBig.png"); + } + else + { + image.load(":/images/folder.png"); + } + item.setFileInfo(filePath,fileName,image); + m_fileItemList.append(item); + } + else//为文件 + { + filePath = fileInfo.absoluteFilePath(); + fileName = fileInfo.fileName(); + QString imageName = filePath + ".preview.png"; + QFile imageFile(imageName); + + if(fileInfo.suffix().toUpper() == "DST")//为dst文件 + { + if(!imageFile.exists())//图片不存在时生成图片 + { + //重新改变图片大小,因为文件夹的图标大小与图片大小不同 + dst.initColor(g_pSettings->getColorRgbArray().size(),(QRgb*)g_pSettings->getColorRgbArray().data()); + dst.initFile(filePath); + dst.createPreviewImage(&image, 1, PEN_WIDTH);// 生成预览文件 + } + else + { + image.load(imageName); + } + item.setFileInfo(filePath,fileName,image); + m_fileItemList.append(item); + } + else if(fileInfo.suffix().toUpper() == "DSR")//dsr文件 + { + if(!imageFile.exists())//图片不存在时生成图片 + { + dsr.initColor(g_pSettings->getColorRgbArray().size(),(QRgb*)g_pSettings->getColorRgbArray().data()); + dsr.initFile(filePath); + dsr.createPreviewImage(&image, 1, PEN_WIDTH);// 生成预览文件 + } + else + { + image.load(imageName); + } + item.setFileInfo(filePath,fileName,image); + m_fileItemList.append(item); + } + } + } + + refreshPageUi(); + refreshChecked(); +} + +void PatternSelectWidget::refreshSettingInfo(QString filePath) +{ + //得到花样参数 + DataFileHead filehead; + memset(&filehead,0,sizeof(DataFileHead)); + QString fPath = filePath + ".fcg"; + QFile sfile(fPath); + if(sfile.exists())//存在fcg文件 + { + if(sfile.open(QIODevice::ReadOnly)) + { + QByteArray ary = sfile.readAll(); + + if((u32)ary.size() >= sizeof(DataFileHead)) + { + memcpy(&filehead,ary.data(),sizeof(DataFileHead)); + } + } + sfile.close(); + } + + //存在fcg的文件时fcg的数据 + s16 para1 = filehead.rotateStyle; //旋转式样 + QString str1; + switch (para1) + { + case 0: + str1 = "p"; + break; + case 1: + str1 = "q"; + break; + case 2: + str1 = "b"; + break; + case 3: + str1 = "d"; + break; + default: + str1 = "p"; + break; + } + ui->labelDirectionValue->setText(str1); + + s16 para2 = filehead.horizontalStyle; //水平旋转式样 + if(para2 == 0) + { + ui->labelHorValue->setText("No");//否 + } + else + { + ui->labelHorValue->setText("Yes");//是 + } + + s16 para3 = filehead.verticalStyle; //垂直旋转式样 + if(para3 == 0) + { + ui->labelVerValue->setText("No");//否 + } + else + { + ui->labelVerValue->setText("Yes");//是 + } + + s16 para4 = filehead.rotateAngle; //旋转角度 + ui->labelRotateValue->setText(QString::number(para4)); +} + +//获取绘图区域大小 +QSize PatternSelectWidget::getImageSize() +{ + QSize size = ui->buttonImage1->labelImage->size(); + return size; +} + +void PatternSelectWidget::on_buttonImage1_clicked() +{ + clickItem(1); +} + +void PatternSelectWidget::on_buttonImage2_clicked() +{ + clickItem(2); +} + +void PatternSelectWidget::on_buttonImage3_clicked() +{ + clickItem(3); +} + +void PatternSelectWidget::on_buttonImage4_clicked() +{ + clickItem(4); +} + +void PatternSelectWidget::on_buttonImage5_clicked() +{ + clickItem(5); +} + +void PatternSelectWidget::on_buttonImage6_clicked() +{ + clickItem(6); +} + +void PatternSelectWidget::on_buttonImage7_clicked() +{ + clickItem(7); +} + +void PatternSelectWidget::on_buttonImage8_clicked() +{ + clickItem(8); +} + +void PatternSelectWidget::on_buttonImage9_clicked() +{ + clickItem(9); +} + +void PatternSelectWidget::on_buttonImage10_clicked() +{ + clickItem(10); +} + +void PatternSelectWidget::on_buttonBackUpDir_clicked() +{ + if(m_curFilePath.size() <= 0) + { + return; + } + + QDir dir(m_curFilePath); + dir.cdUp();//返回上级目录 + QString path = dir.absolutePath();//得到上级目录 + m_fileItemList.clear(); + m_selectedPattenIdx = -1; + getDirPatternFiles(path);//打开上级目录 +} + +void PatternSelectWidget::on_buttonPgUp_clicked() +{ + m_curPages--; + refreshPageUi(); +} + +void PatternSelectWidget::on_buttonPgDn_clicked() +{ + m_curPages++; + refreshPageUi(); +} + +void PatternSelectWidget::on_buttonOk_clicked() +{ + if(m_selectedPattenIdx < 0) + { + return; + } + + int patternNeedles = ui->labelTotalNeedleValue->text().toInt(); + if(patternNeedles > EMBALLOWNEEDLELIMIT)//大于200万针 + { + PromptDialog promptDlg(this); + promptDlg.initDialog(PromptDialog::BTN_OK); + promptDlg.setTitleStr(tr("Prompt")); + + QString str; + //所选花样针数已达上限(200万针),不可绣作! + str = tr("The number of stitches of the selected pattern has reached the upper limit (2 million stitches), and it cannot be embroidered!"); + promptDlg.setContentStr(str); + + promptDlg.exec(); + return; + } + emit siSelectPattern(m_fileItemList.at(m_selectedPattenIdx).getFilePath()); + + //this->hide(); +} + +void PatternSelectWidget::on_buttonCancel_clicked() +{ + this->hide(); +} diff --git a/sharedviews/patternselectwidget.h b/sharedviews/patternselectwidget.h new file mode 100644 index 0000000..f8ab590 --- /dev/null +++ b/sharedviews/patternselectwidget.h @@ -0,0 +1,97 @@ +#ifndef PATTERNSELECTWIDGET_H +#define PATTERNSELECTWIDGET_H + +#include +#include +#include +#include + +#include "mybutton.h" +#include "items/fileitem.h" +#include "setcontrolstyle.h" +#include "datafile/datafiledst.h" +#include "datafile/datafiledsr.h" +#include "promptdialog.h" +#include +#include +#include "mctype/mainwidgetfunction.h" + +#define EMBALLOWNEEDLELIMIT 2000000 //最大针数上限 + +namespace Ui { +class PatternSelectWidget; +} + +class PatternSelectWidget : public QWidget +{ + Q_OBJECT + +public: + explicit PatternSelectWidget(QWidget *parent = 0); + ~PatternSelectWidget(); + +private: + Ui::PatternSelectWidget *ui; + int m_itemPerPage;//花样选择界面每页图片数 + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006(); + void initControlStyle();//初始化窗体控件样式 + +private: + QString m_firstFilePath;//文件一级目录 + QString m_curFilePath;//当前选择目录 + QList m_fileItemList;//花样选择界面花样文件列表 + + int m_curPages;//花样选择界面当前页数 + int m_pageNums;//总页数 + int m_selectedPattenIdx;//被选中的花版号 + + QList m_imageButtonList; + +private: + void initialize();//初始化 + void initPattern();//初始化花样 + void getDirPatternFiles(QString dirPath);//获取路径下的花样 + void refreshPageUi();//刷新界面显示 + void refreshCheckedPage();//刷新条目选中状态 + void refreshChecked();//刷新条目选中状态 + void clickItem(int idx);//点击花样图片 + void clearFileInfo();//清空花样信息 + void getFileInfo(QString filePath, QString suffix);//获取花样信息 + +public: + void setTypeLogo(QString tStyle);//设置类型图标 + void setMainTitle(QString str);//设置主title + void setSubTitle(QString str);//设置副title + void createCurDirPatterns();//生成当前路径花样 + void refreshSettingInfo(QString filePath);//刷新花样设置信息 + +public: + QSize getImageSize();//获取绘图区域大小 + +private slots: + //点击图片按钮事件 + void on_buttonImage1_clicked(); + void on_buttonImage2_clicked(); + void on_buttonImage3_clicked(); + void on_buttonImage4_clicked(); + void on_buttonImage5_clicked(); + void on_buttonImage6_clicked(); + void on_buttonImage7_clicked(); + void on_buttonImage8_clicked(); + void on_buttonImage9_clicked(); + void on_buttonImage10_clicked(); + void on_buttonBackUpDir_clicked(); + void on_buttonPgUp_clicked(); + void on_buttonPgDn_clicked(); + void on_buttonOk_clicked(); + void on_buttonCancel_clicked(); + +signals: + void siSelectPattern(QString filePath, s16 showFlag = 0);//选择花样并点击确定按钮 +}; + +#endif // PATTERNSELECTWIDGET_H diff --git a/sharedviews/patternselectwidget.ui b/sharedviews/patternselectwidget.ui new file mode 100644 index 0000000..cc494f0 --- /dev/null +++ b/sharedviews/patternselectwidget.ui @@ -0,0 +1,813 @@ + + + PatternSelectWidget + + + + 0 + 0 + 1024 + 600 + + + + Form + + + background-color: rgb(162, 162, 162); + + + + + 0 + 90 + 791 + 431 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 120 + 120 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 10 + 120 + 120 + + + + Qt::NoFocus + + + + + + + + + + + + 270 + 10 + 120 + 120 + + + + Qt::NoFocus + + + + + + + + + + + + 400 + 10 + 120 + 120 + + + + Qt::NoFocus + + + + + + + + + + + + 530 + 10 + 120 + 120 + + + + Qt::NoFocus + + + + + + + + + + + + 10 + 196 + 120 + 120 + + + + Qt::NoFocus + + + + + + + + + + + + 530 + 196 + 120 + 120 + + + + Qt::NoFocus + + + + + + + + + + + + 400 + 196 + 120 + 120 + + + + Qt::NoFocus + + + + + + + + + + + + 270 + 196 + 120 + 120 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 196 + 120 + 120 + + + + Qt::NoFocus + + + + + + + + + + + + + 710 + 540 + 301 + 60 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 64 + 40 + + + + Qt::NoFocus + + + + + + + + + 80 + 10 + 64 + 40 + + + + Qt::NoFocus + + + + + + + + + 150 + 10 + 64 + 40 + + + + Qt::NoFocus + + + + + + + + + 220 + 10 + 64 + 40 + + + + Qt::NoFocus + + + + + + + + + + 800 + 90 + 222 + 191 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 110 + 16 + + + + Name: + + + + + + 10 + 30 + 110 + 16 + + + + N + + + + + + 10 + 50 + 110 + 16 + + + + C + + + + + + 10 + 90 + 110 + 16 + + + + H + + + + + + 10 + 70 + 110 + 16 + + + + W + + + + + + 10 + 110 + 110 + 16 + + + + X + + + + + + 10 + 130 + 110 + 16 + + + + Y + + + + + + 130 + 70 + 84 + 16 + + + + Width + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 130 + 130 + 84 + 16 + + + + Y + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 130 + 30 + 84 + 16 + + + + NeedleNum + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 130 + 110 + 84 + 16 + + + + X + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 130 + 10 + 84 + 16 + + + + Name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 130 + 90 + 84 + 16 + + + + Height + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 130 + 50 + 84 + 16 + + + + ColorNum + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 800 + 290 + 222 + 232 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 110 + 16 + + + + RotateAngle: + + + + + + 130 + 10 + 84 + 16 + + + + 0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 130 + 30 + 84 + 16 + + + + P + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 10 + 30 + 110 + 16 + + + + PatternDirect: + + + + + + 10 + 50 + 110 + 16 + + + + PatternHor: + + + + + + 130 + 50 + 84 + 16 + + + + No + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 10 + 70 + 110 + 16 + + + + PatternVer: + + + + + + 130 + 70 + 84 + 16 + + + + No + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 0 + 0 + 1024 + 600 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 20 + 10 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + + + + 100 + 10 + 181 + 21 + + + + + + + Pattern Select + + + + + + 130 + 40 + 181 + 21 + + + + + + + Pattern Select < Pattern Setting + + + + + + 819 + 20 + 191 + 61 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 120 + 20 + 64 + 40 + + + + Qt::NoFocus + + + + + + + + + + 20 + 560 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + PageNums: 0/0 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + frameBack + frameImage + framePageBtn + frameInfo1 + frameInfo2 + buttonTypeLogo + labelMainTitle + labelSubTitle + frameRightUp + labelPageNum + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/promptdialog.cpp b/sharedviews/promptdialog.cpp new file mode 100644 index 0000000..5ccb13e --- /dev/null +++ b/sharedviews/promptdialog.cpp @@ -0,0 +1,1252 @@ +#include "promptdialog.h" +#include "ui_promptdialog.h" + +PromptDialog::PromptDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::PromptDialog) +{ + ui->setupUi(this); + + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + + setAttribute(Qt::WA_TranslucentBackground, true); + connect(g_pMachine, SIGNAL(siMcInfoChange()), this, SLOT(slotMCInfoChange())); + + initDialog(); + initControl(); +} + +PromptDialog::~PromptDialog() +{ + delete ui; +} + +//初始化窗体 +void PromptDialog::initDialog(int sel) +{ + m_totalHead = 0; + m_curColorOrder = 0;//当前色序数 + m_totalColorOrder = 0;//总色序数 + + m_funType = sel; + m_filePath.clear(); + + m_area = 0; + + setTitleStr(""); + setContentStr(""); + setContentProcessStr(""); + ui->frameProcess->hide(); + ui->labelContentInfo->setText(""); + ui->labeBreakHead->setText(""); + ui->labeBottomBreakHead->setText(""); + ui->labelCurNeedleValue->setText("0"); + ui->frameTwo->hide(); + ui->frameThree->hide(); + ui->frameProcessBtn->hide(); + +#if(0) + //全部隐藏,否则新的弹窗显示时会先刷新成之前的再刷新成新的内容,尽管刷新速度很快但仍能看出来,所以先全部隐藏 + ui->frameChangePassword->hide(); + ui->frameElasticCtrl->hide(); + ui->frameHMIDecrypt->hide(); + ui->frameHeadEmb->hide(); + ui->frameLiftMControl->hide(); + ui->frameManualChangeColor->hide(); + ui->frameNoseHead->hide(); + ui->frameProcess->hide(); + ui->frameQuantityMoveFrame->hide(); + ui->frameSpindleRotate->hide(); + ui->frameTraceOffset->hide(); + ui->frameWarrantBtn->hide(); + ui->frameWorkArea->hide(); + ui->frameTwo->hide(); + ui->frameThree->hide(); + ui->frameProcessBtn->hide(); + ui->frameDetecBtn->hide(); + ui->labelContent->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->labelContentWarrant->hide(); + ui->labelContentInfo->hide(); +#endif + + m_selectNeedleIdx = 0; + m_selectHeadleIdx = 0; + + ui->buttonOk->setEnabled(true); + + //蓝色 + m_buttonStyle1 = "QPushButton{outline: none;color:rgb(10,10,10);background-color:rgb(0,151,226);border:0px solid rgb(0,0,0);border-style:inset;border-radius:5px;}"; + //白色 + m_buttonStyle2 = "QPushButton{outline: none;color:rgb(10,10,10);background-color:rgb(250,250,250);border:0px solid rgb(0,0,0);border-style:inset;border-radius:5px;}"; + if (sel == BTN_OK_CANCEL)//确定、取消 + { + ui->frameTwo->show(); + ui->frameThree->hide(); + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->buttonOk->show(); + ui->buttonCancel->show(); + ui->buttonForward->hide();//隐藏正转按钮 + ui->buttonReverse->hide();//隐藏反转按钮 + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameWorkArea->hide(); + + ui->buttonOk->move(m_btnOkPoint); + ui->buttonCancel->move(m_btnCancelPoint); + } + else if (sel == BTN_OK)//确定 + { + ui->frameTwo->show(); + ui->frameThree->hide(); + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->buttonOk->show(); + ui->buttonCancel->hide(); + ui->buttonForward->hide();//隐藏正转按钮 + ui->buttonReverse->hide();//隐藏反转按钮 + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameWorkArea->hide(); + + ui->buttonOk->move(m_btnCancelPoint); + } + else if (sel == BTN_R_R_S)//重命名、替换、跳过 + { + ui->frameTwo->hide(); + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->frameThree->show(); + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameWorkArea->hide(); + } + else if (sel == BTN_RESTART)//重启 + { + ui->frameTwo->hide(); + ui->frameThree->hide(); + ui->frameWarrantBtn->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->frameProcessBtn->show(); + ui->buttonRestart->show(); + ui->buttonUpdataCancel->hide(); + ui->buttonRestart->move(m_btnCancelPoint); + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameWorkArea->hide(); + } + else if (sel == BTN_UCANCEL)//升级取消 + { + ui->frameTwo->hide(); + ui->frameThree->hide(); + ui->frameWarrantBtn->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->frameProcessBtn->show(); + ui->buttonRestart->hide(); + ui->buttonUpdataCancel->show(); + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameWorkArea->hide(); + } + else if (sel == BTN_WARRANT)//授权按钮 + { + ui->frameTwo->hide(); + ui->frameThree->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->frameDetecBtn->hide(); + ui->frameProcessBtn->hide(); + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameWarrantBtn->show(); + ui->frameWorkArea->hide(); + } + //手动换色 + else if(sel == BTN_M_C_C ) + { + ui->frameManualChangeColor->show();//手动换色 + ui->frameTwo->show(); + ui->frameThree->hide(); + ui->frameDetecBtn->hide(); + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->frameProcess->hide(); + ui->labelContentInfo->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->labelContentProcess->hide(); + ui->labelContentWarrant->hide(); + ui->labelContentADC->hide(); + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameWorkArea->hide(); + + ui->buttonOk->show(); + ui->buttonCancel->show(); + ui->buttonForward->hide();//隐藏正转按钮 + ui->buttonReverse->hide();//隐藏反转按钮 + + ui->buttonOk->move(m_btnOkPoint); + ui->buttonCancel->move(m_btnCancelPoint); + } + //面线检测 + else if(sel == BTN_FACE) + { + ui->frameManualChangeColor->show();//手动换色,底线面线检测的时候,手动换色的窗体不能隐藏 + ui->frameDetecBtn->show(); + ui->frameTwo->hide(); + ui->frameThree->hide(); + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->frameProcess->hide(); + ui->labelContentInfo->hide(); + ui->labelContentADC->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->labelContentProcess->hide(); + ui->labelContentWarrant->hide(); + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameWorkArea->hide(); + } + else if(sel == BTN_NONE)//无按钮 + { + ui->frameTwo->hide(); + ui->frameThree->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->frameProcess->hide(); + ui->labelContentInfo->hide(); + ui->labelContentADC->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->labelContentProcess->hide(); + ui->labelContentWarrant->hide(); + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameWorkArea->hide(); + } + else if(sel == BTN_P_NONE)//无按钮 + { + ui->frameTwo->hide(); + ui->frameThree->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->labelContentInfo->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->labelContentWarrant->hide(); + ui->labelContentADC->hide(); + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameWorkArea->hide(); + } + else if(sel == BTN_HMI_DECRYPT)//界面解密 + { + ui->frameThree->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->frameProcess->hide(); + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->labelContentInfo->hide(); + ui->labelContentADC->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->labelContentWarrant->hide(); + ui->frameHMIDecrypt->show(); + ui->frameChangePassword->hide(); + ui->frameTwo->show(); + ui->frameWorkArea->hide(); + + ui->buttonOk->show(); + ui->buttonCancel->show(); + ui->buttonForward->hide();//隐藏正转按钮 + ui->buttonReverse->hide();//隐藏反转按钮 + + ui->buttonOk->move(m_btnOkPoint); + ui->buttonCancel->move(m_btnCancelPoint); + } + else if(sel == BTN_CHANGE_PASSWORD)//修改一级密码 + { + ui->frameThree->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->frameProcess->hide(); + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->labelContentInfo->hide(); + ui->labelContentADC->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->labelContentWarrant->hide(); + ui->frameHMIDecrypt->hide();//界面解密隐藏 + ui->frameChangePassword->show(); + ui->frameWorkArea->hide(); + + ui->frameTwo->show(); + ui->buttonOk->show(); + ui->buttonCancel->show(); + ui->buttonForward->hide();//隐藏正转按钮 + ui->buttonReverse->hide();//隐藏反转按钮 + + ui->buttonOk->move(m_btnOkPoint); + ui->buttonCancel->move(m_btnCancelPoint); + } + else if(sel == BTN_TRIMDOWN)//下剪线 + { + ui->frameThree->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->frameProcess->hide(); + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->labelContentInfo->hide(); + ui->labelContentADC->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->labelContentWarrant->hide(); + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameTwo->show(); + ui->frameWorkArea->hide(); + + ui->buttonOk->show(); + ui->buttonCancel->show(); + ui->buttonForward->hide();//隐藏正转按钮 + ui->buttonReverse->hide();//隐藏反转按钮 + + ui->buttonOk->move(m_btnOkPoint); + ui->buttonCancel->move(m_btnCancelPoint); + } + else if(sel == BTN_WORK_AREA)//设置可工作区域 + { + ui->frameWorkArea->show(); + + ui->buttonX1->setText(tr("X +")); + ui->buttonX2->setText(tr("X -")); + ui->buttonY1->setText(tr("Y +")); + ui->buttonY2->setText(tr("Y -")); + + ui->frameThree->hide(); + ui->frameDetecBtn->hide(); + ui->frameManualChangeColor->hide();//手动换色 + ui->frameProcess->hide(); + ui->frameProcessBtn->hide(); + ui->frameWarrantBtn->hide(); + ui->labelContentInfo->hide(); + ui->labelContentADC->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->labelContentWarrant->hide(); + ui->frameHMIDecrypt->hide(); + ui->frameChangePassword->hide(); + ui->frameTwo->show(); + + ui->buttonOk->show(); + ui->buttonCancel->show(); + ui->buttonForward->hide();//隐藏正转按钮 + ui->buttonReverse->hide();//隐藏反转按钮 + + ui->buttonOk->move(m_btnOkPoint); + ui->buttonCancel->move(m_btnCancelPoint); + } +} + +//初始化窗体控件,包括位置、尺寸、样式 +void PromptDialog::initControl() +{ + m_buttonEmbNeedleList.clear(); + for(int i = 0; i < 32; i++) + { + QPushButton *buttonEmbNeedle = new QPushButton(ui->frameManualChangeColor); + m_buttonEmbNeedleList.append(buttonEmbNeedle); + connect(buttonEmbNeedle, + SIGNAL(clicked()), + this, + SLOT(slotEmbNeedleBtnClick()) + ); + } + + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + initResolution1910(); + break; + } + initControlStyle();//初始化窗体控件样式 +} + +//初始化窗体控件为1920x1080分辨率 +void PromptDialog::initResolution1910() +{ + //上状态栏 + this->resize(946,564); + this->move((1920-this->width())/2,(1080-this->height())/2); + + ui->frameBack->setGeometry(0,0,946,564); + ui->labelTitle->setGeometry(40,18,754,56); + ui->labelContent->setGeometry(80,120,800,300); + ui->labelContentInfo->setGeometry(80,120,800,300); + ui->labelContentADC->setGeometry(80,120,800,300); + ui->labeBreakHead->setGeometry(80,80,900,350); + //ui->labeBottomBreakHead->setGeometry(80,260,900,170); + ui->labelContentWarrant->setGeometry(96,134,800,260); + ui->frameProcess->setGeometry(96,134,820,260); + ui->labelContentProcess->setGeometry(0,20,800,100); + ui->progressBar->setGeometry(0,160,754,36); + + ui->frameTwo->setGeometry(0,426,904,84); + ui->buttonForward->setGeometry(148,0,174,70); + ui->buttonReverse->setGeometry(340,0,174,70); + ui->buttonOk->setGeometry(532,0,174,70); + ui->buttonCancel->setGeometry(724,0,174,70); + m_btnOkPoint.setX(532);//ok按钮位置 + m_btnOkPoint.setY(0); + m_btnCancelPoint.setX(724);//cancel按钮位置 + m_btnCancelPoint.setY(0); + + ui->frameProcessBtn->setGeometry(0,430,904,84);//进度条 + ui->buttonRestart->setGeometry(532,0,174,70); + ui->buttonUpdataCancel->setGeometry(724,0,174,70); + + ui->frameWarrantBtn->setGeometry(0,430,904,84);//授权 + ui->buttonWarrant->setGeometry(532,0,174,70); + ui->buttonWarrantCancel->setGeometry(724,0,174,70); + + //手动换色 + ui->frameManualChangeColor->setGeometry(40,78,904,340); + ui->labelCurNeedle->setGeometry(1,8,230,40); + ui->labelCurNeedleValue->setGeometry(239,8,240,40); + for(int i = 0; i < 4; i++) + { + for(int j = 0; j < 8; j++) + { + m_buttonEmbNeedleList[i*8+j]->setGeometry(3+j*110,64+i*70,88,52); + m_buttonEmbNeedleList[i*8+j]->setFont(fontNormal_1); + m_buttonEmbNeedleList[i*8+j]->setText(QString::number(i*8+j+1)); + } + } + + //设置可移动区域 + ui->frameWorkArea->setGeometry(40,78,904,340); + ui->buttonX1->setGeometry(300,110,160,58);//x+ + ui->buttonX2->setGeometry(10,110,160,58);//x- + ui->buttonY1->setGeometry(150,10,160,58);//y+ + ui->buttonY2->setGeometry(150,205,160,58);//y- + + //界面解密 + ui->frameHMIDecrypt->setGeometry(40,78,904,340); + ui->labelNetworkCardID->setGeometry(1,18,200,40); + ui->labelNetworkCardIDValue->setGeometry(209,18,300,40); + ui->labelHMIPassword->setGeometry(1,104,200,40); + ui->buttonHMIPassword->setGeometry(209,100,300,58); + ui->labelDecryptInfo->setGeometry(1,190,200,40); + ui->labelDecryptInfoValue->setGeometry(209,190,300,40); + + //修改一级密码 + ui->frameChangePassword->setGeometry(40,78,904,340); + ui->labelNewPassword->setGeometry(10,90,420,60); + ui->buttonNewPassword->setGeometry(440,90,300,60); + ui->labelConfirmPassword->setGeometry(10,190,420,60); + ui->buttonConfirmPassword->setGeometry(440,190,300,60); + + ui->frameThree->setGeometry(0,430,904,84); + ui->buttonRename->setGeometry(340,0,174,70); + ui->buttonReplace->setGeometry(532,0,174,70); + ui->buttonSkip->setGeometry(724,0,174,70); + + ui->frameDetecBtn->setGeometry(0,430,904,84); + ui->buttonDetectBegin->setGeometry(340,0,174,70); + ui->buttonDetectEnd->setGeometry(532,0,174,70); + ui->buttonDetectClose->setGeometry(724,0,174,70); +} + +//初始化窗体控件为1024x600分辨率 +void PromptDialog::initResolution1006() +{ + //上状态栏 + this->resize(508,304); + this->move((1024-this->width())/2,(600-this->height())/2); + + ui->frameBack->setGeometry(0,0,508,304); + ui->labelTitle->setGeometry(20,-4,400,56); + ui->labelContent->setGeometry(46,40,400,180); + ui->labelContentInfo->setGeometry(46,40,400,180); + ui->labelContentADC->setGeometry(80,120,800,300); + ui->labeBreakHead->setGeometry(40,40,450,180); + //ui->labeBottomBreakHead->setGeometry(40,65,400,145); + ui->labelContentWarrant->setGeometry(46,40,300,225); + ui->frameProcess->setGeometry(20,70,480,130); + ui->labelContentProcess->setGeometry(10,10,398,40); + ui->progressBar->setGeometry(10,50,446,26); + + ui->frameTwo->setGeometry(-4,225,500,51); + ui->buttonForward->setGeometry(72,0,96,40); + ui->buttonReverse->setGeometry(178,0,96,40); + ui->buttonOk->setGeometry(284,0,96,40); + ui->buttonCancel->setGeometry(390,-1,96,40); + m_btnOkPoint.setX(284);//ok按钮位置 + m_btnOkPoint.setY(0); + m_btnCancelPoint.setX(390);//cancel按钮位置 + m_btnCancelPoint.setY(1); + + ui->frameProcessBtn->setGeometry(0,228,500,51);//进度条 + ui->buttonRestart->setGeometry(284,0,96,40); + ui->buttonUpdataCancel->setGeometry(390,1,96,40); + + ui->frameWarrantBtn->setGeometry(0,235,500,51);//授权 + ui->buttonWarrant->setGeometry(284,0,96,40); + ui->buttonWarrantCancel->setGeometry(390,1,96,40); + + //手动换色 + ui->frameManualChangeColor->setGeometry(40,48,440,165); + ui->labelCurNeedle->setGeometry(0,-10,100,40); + ui->labelCurNeedleValue->setGeometry(120,-10,95,40); + for(int i = 0; i < 3; i++) + { + for(int j = 0; j < 5; j++) + { + m_buttonEmbNeedleList[i*5+j]->setGeometry(3+j*88,34+i*46,66,34);//15个针杆会显示不全 -rq + m_buttonEmbNeedleList[i*5+j]->setFont(fontNormal_1); + m_buttonEmbNeedleList[i*5+j]->setText(QString::number(i*5+j+1)); + } + } + + ui->frameWorkArea->setGeometry(40,58,440,161); + ui->buttonX1->setGeometry(170,60,70,38); + ui->buttonX2->setGeometry(10,60,70,38); + ui->buttonY1->setGeometry(90,10,70,38);//y+ + ui->buttonY2->setGeometry(90,120,70,38); + + //界面解密 + ui->frameHMIDecrypt->setGeometry(40,78,440,161); + ui->labelNetworkCardID->setGeometry(10,12,110,40); + ui->labelNetworkCardIDValue->setGeometry(130,12,200,40); + ui->labelHMIPassword->setGeometry(10,52,110,40); + ui->buttonHMIPassword->setGeometry(130,50,200,40); + ui->labelDecryptInfo->setGeometry(10,92,110,40); + ui->labelDecryptInfoValue->setGeometry(130,92,200,40); + + //修改一级密码 + ui->frameChangePassword->setGeometry(0,78,440,161); + ui->labelNewPassword->setGeometry(0,0,240,40); + ui->buttonNewPassword->setGeometry(280,0,200,40); + ui->labelConfirmPassword->setGeometry(0,52,240,40); + ui->buttonConfirmPassword->setGeometry(280,52,200,40); + + ui->frameThree->setGeometry(0,225,500,51); + ui->buttonRename->setGeometry(187,0,96,40); + ui->buttonReplace->setGeometry(289,0,96,40); + ui->buttonSkip->setGeometry(390,1,96,40); + + ui->frameDetecBtn->setGeometry(0,225,500,51); + ui->buttonDetectBegin->setGeometry(187,0,96,40); + ui->buttonDetectEnd->setGeometry(289,0,96,40); + ui->buttonDetectClose->setGeometry(390,1,96,40); +} + +//初始化窗体控件样式 +void PromptDialog::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + //设置控件图标 + //背景图 + this->setStyleSheet(LABELWHITESTYLE); + ui->frameBack->setStyleSheet(TRANSPARENTSTYLE); + 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->frameProcess->setStyleSheet(TRANSPARENTSTYLE); + ui->progressBar->setFont(fontNormal_1); + + ui->labelContent->setStyleSheet(LABELGREYSTYLE); + ui->labelContent->setFont(fontNormal_1); + ui->labelContent->setAlignment(Qt::AlignLeft); + ui->labelContent->setAlignment(Qt::AlignVCenter); + + ui->labelContentADC->setStyleSheet(LABELGREYSTYLE); + ui->labelContentADC->setFont(fontNormal_1); + ui->labelContentADC->setAlignment(Qt::AlignLeft); + ui->labelContentADC->setAlignment(Qt::AlignVCenter); + + ui->labeBreakHead->setStyleSheet(LABELREDSTYLE); // 断线机头 红色 字体加大 -rq + ui->labeBreakHead->setFont(fontNormal_9); + // ui->labeBreakHead->setAlignment(Qt::AlignHCenter); + // ui->labeBreakHead->setAlignment(Qt::AlignVCenter); + ui->labeBottomBreakHead->setAlignment(Qt::AlignCenter);//文字水平垂直居中 + + //ui->labeBottomBreakHead->setStyleSheet(LABELREDSTYLEGREEN); // 底线断线机头 绿色 字体加大 -rq + ui->labeBottomBreakHead->setFont(fontNormal_9); + ui->labeBottomBreakHead->setAlignment(Qt::AlignCenter); + ui->labeBottomBreakHead->setAlignment(Qt::AlignVCenter); + + ui->labelContentInfo->setStyleSheet(LABELGREYSTYLE); + ui->labelContentInfo->setFont(fontNormal_1); + ui->labelContentInfo->setAlignment(Qt::AlignLeft); + ui->labelContentInfo->setAlignment(Qt::AlignVCenter); + + ui->labelContentProcess->setStyleSheet(LABELGREYSTYLE); + ui->labelContentProcess->setFont(fontNormal_1); + ui->labelContentProcess->setAlignment(Qt::AlignLeft); + ui->labelContentProcess->setAlignment(Qt::AlignVCenter); + + ui->labelContentWarrant->setStyleSheet(LABELGREYSTYLE); + ui->labelContentWarrant->setFont(fontNormal_1); + ui->labelContentWarrant->setAlignment(Qt::AlignLeft); + ui->labelContentWarrant->setAlignment(Qt::AlignVCenter); + + ui->frameTwo->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonOk->setWhiteBlueBottomStyle(); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()+"_1"),12); + ui->buttonCancel->setWhiteBlueBottomStyle(); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()+"_1"),12); + ui->buttonForward->setWhiteBlueBottomStyle(); + ui->buttonForward->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonForward->objectName()),12); + ui->buttonReverse->setWhiteBlueBottomStyle(); + ui->buttonReverse->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonReverse->objectName()),12); + + ui->frameThree->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonRename->setWhiteBlueBottomStyle(); + ui->buttonReplace->setWhiteBlueBottomStyle(); + ui->buttonSkip->setWhiteBlueBottomStyle(); + ui->buttonRename->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonRename->objectName()),12); + ui->buttonReplace->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonReplace->objectName()),12); + ui->buttonSkip->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonSkip->objectName()),12); + + ui->frameDetecBtn->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonDetectBegin->setWhiteBlueBottomStyle(); + ui->buttonDetectBegin->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonDetectBegin->objectName()),12); + ui->buttonDetectEnd->setWhiteBlueBottomStyle(); + ui->buttonDetectEnd->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonDetectEnd->objectName()),12); + ui->buttonDetectClose->setWhiteBlueBottomStyle(); + ui->buttonDetectClose->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()+"_1"),12); + + ui->frameProcessBtn->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonRestart->setWhiteBlueBottomStyle(); + ui->buttonRestart->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonRestart->objectName()),12); + ui->buttonUpdataCancel->setWhiteBlueBottomStyle(); + ui->buttonUpdataCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()+"_1"),12); + + ui->frameManualChangeColor->setStyleSheet(TRANSPARENTSTYLE); + ui->labelCurNeedle->setStyleSheet(LABELGREYSTYLE); + ui->labelCurNeedle->setFont(fontNormal_1); + ui->labelCurNeedleValue->setStyleSheet(LABELGREYSTYLE); + ui->labelCurNeedleValue->setFont(fontNormal_1); + + //设置可工作区域 + ui->frameWorkArea->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonX1->setFont(fontNormal_1); + ui->buttonX2->setFont(fontNormal_1); + ui->buttonY1->setFont(fontNormal_1); + ui->buttonY2->setFont(fontNormal_1); + + //界面解密 + ui->frameHMIDecrypt->setStyleSheet(TRANSPARENTSTYLE); + ui->labelNetworkCardID->setStyleSheet(LABELGREYSTYLE); + ui->labelNetworkCardID->setFont(fontNormal_1); + ui->labelNetworkCardIDValue->setStyleSheet(LABELGREYSTYLE); + ui->labelNetworkCardIDValue->setFont(fontNormal_1); + ui->labelHMIPassword->setStyleSheet(LABELGREYSTYLE); + ui->labelHMIPassword->setFont(fontNormal_1); + ui->buttonHMIPassword->setFont(fontNormal_1); + ui->labelDecryptInfo->setStyleSheet(LABELGREYSTYLE); + ui->labelDecryptInfo->setFont(fontNormal_1); + ui->labelDecryptInfoValue->setStyleSheet(LABELGREYSTYLE); + ui->labelDecryptInfoValue->setFont(fontNormal_1); + + //修改一级密码 + ui->frameChangePassword->setStyleSheet(TRANSPARENTSTYLE); + ui->labelNewPassword->setStyleSheet(LABELGREYSTYLE); + ui->labelNewPassword->setFont(fontNormal_1); + ui->labelConfirmPassword->setStyleSheet(LABELGREYSTYLE); + ui->labelConfirmPassword->setFont(fontNormal_1); + ui->buttonNewPassword->setFont(fontNormal_1); + ui->buttonConfirmPassword->setFont(fontNormal_1); + + ui->frameWarrantBtn->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonWarrant->setWhiteBlueBottomStyle(); + ui->buttonWarrant->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()+"_1"),12); + ui->buttonWarrantCancel->setWhiteBlueBottomStyle(); + ui->buttonWarrantCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()+"_1"),12); +} + +//设置标题 +void PromptDialog::setTitleStr(QString str) +{ + ui->labelTitle->setText(str); +} + +//设置断线机头字体颜色 -rq +void PromptDialog::setStrColor(QString str) +{ + ui->frameProcess->hide(); + ui->labelContentInfo->setText(""); + ui->labelContentInfo->hide(); + ui->labelContentWarrant->setText(""); + ui->labelContentWarrant->hide(); + ui->labelContent->setText(""); + ui->labelContent->hide(); + ui->labeBreakHead->setText(str); + ui->labeBreakHead->show(); + ui->labelContentADC->hide(); + // ui->labeBottomBreakHead->setText(str2); + // ui->labeBottomBreakHead->show(); +} +//设置显示内容 +void PromptDialog::setContentStr(QString str) +{ + ui->frameProcess->hide(); + ui->labelContentInfo->setText(""); + ui->labelContentInfo->hide(); + ui->labeBreakHead->setText("");//断线机头显示 + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->setText("");//底线断线机头显示 + ui->labeBottomBreakHead->hide(); + ui->labelContentWarrant->setText(""); + ui->labelContentWarrant->hide(); + ui->labelContent->setText(str); + ui->labelContent->show(); + ui->labelContentADC->hide(); +} + +void PromptDialog::setADCContentStr() +{ + ui->frameProcess->show(); + ui->labelContentInfo->setText(""); + ui->labelContentInfo->hide(); + ui->labeBreakHead->setText("");//断线机头显示 + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->setText("");//底线断线机头显示 + ui->labeBottomBreakHead->hide(); + ui->labelContent->setText(""); + ui->labelContent->hide(); + ui->labelContentWarrant->setText(""); + ui->labelContentWarrant->hide(); + ui->labelContentProcess->hide(); + ui->labelContentProcess->setText(""); + ui->labelContentADC->show(); +} + +void PromptDialog::setContentProcessStr(QString str) +{ + ui->frameProcess->show(); + ui->labelContentInfo->setText(""); + ui->labelContentInfo->hide(); + ui->labeBreakHead->setText("");//断线机头显示 + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->setText("");//底线断线机头显示 + ui->labeBottomBreakHead->hide(); + ui->labelContent->setText(""); + ui->labelContent->hide(); + ui->labelContentWarrant->setText(""); + ui->labelContentWarrant->hide(); + ui->labelContentProcess->show(); + ui->labelContentProcess->setText(str); + ui->labelContentADC->hide(); +} + +void PromptDialog::setContentInfoShow() +{ + ui->labelContent->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->frameProcess->hide(); + ui->labelContentWarrant->hide(); + ui->labelContentInfo->show(); + ui->labelContentInfo->raise(); + ui->labelContentADC->hide(); +} + +void PromptDialog::setContentWarrantShow() +{ + ui->labelContent->hide(); + ui->labeBreakHead->hide(); + ui->labeBottomBreakHead->hide(); + ui->frameProcess->hide(); + ui->labelContentInfo->hide(); + ui->labelContentWarrant->show(); + ui->labelContentADC->hide(); +} + +void PromptDialog::setContentHMIDecryptShow(QString id) +{ + //将id中的冒号去掉 + QStringList strlist = id.split(":", QString::SkipEmptyParts); + QString nId; + nId.clear(); + for(int i = 0; i < strlist.size(); i++) + { + nId += strlist[i]; + } + ui->labelNetworkCardIDValue->setText(nId); + ui->buttonHMIPassword->setText(""); + + QDir apppath(qApp->applicationDirPath()); + QString HMIDecryptConfigfile; + HMIDecryptConfigfile = apppath.path() + apppath.separator() + "HMIDecryptConfig.ini"; + QSettings iniSetting(HMIDecryptConfigfile, QSettings::IniFormat); + int decryptFlag = iniSetting.value("HMIDecrypt/ifdecrypt").toInt(); + QFile iniFile(HMIDecryptConfigfile); + if(decryptFlag != 0 || !iniFile.exists())//等于1或者配置文件不存在 + { + ui->labelDecryptInfoValue->setText("HMI decrypted");//界面已解密 + } + else + { + ui->labelDecryptInfoValue->setText("HMI unresolved");//界面未解密 + } + + ui->labelContentADC->hide(); + ui->buttonOk->setEnabled(false); +} +void PromptDialog::setContentChangePasswordShow()//修改一级用户密码内容显示 +{ + ui->labelContentADC->hide(); + ui->buttonNewPassword->setText(""); + ui->buttonConfirmPassword->setText(""); + ui->buttonOk->setEnabled(false); +} + +void PromptDialog::setValue(int progress) +{ + ui->progressBar->setValue(progress); +} + +void PromptDialog::setButtonUCancelStr(QString str) +{ + ui->buttonUpdataCancel->setText(str); +} + +void PromptDialog::setRange(int minimum, int maximum) +{ + ui->progressBar->setRange(minimum,maximum); +} + +//当前针杆 +void PromptDialog::setCurNeedleStr(QString idx) +{ + ui->labelCurNeedleValue->setText(idx); +} + +void PromptDialog::setPosValueStr(QString posValue) +{ + QString str = "1 needle:76; 2 needle:127; 3 needle:179; 4 needle:230; 5 needle:281; 6 needle:332; (section:±4) \n \n \n"; + QString strShow = str + posValue; + + ui->labelContentADC->setText(strShow); +} + +//当前针杆label是否可见 +void PromptDialog::setCurNeedleStrVisible(bool bl) +{ + ui->labelCurNeedle->setVisible(bl); + ui->labelCurNeedleValue->setVisible(bl); +} + +//初始化针杆 +void PromptDialog::initNeedleBar(int val) +{ + if(val == 0){} + //读入配置 + QDir apppath(qApp->applicationDirPath()); + + //配置文件路径 + QString configFile = apppath.path() + apppath.separator() + "config.ini"; + QFile iniFile(configFile); + + QRgb * pColorBuf = (QRgb *)(g_pSettings->getColorRgbArray().data()); + QString buttonStyle3 = "QPushButton{outline: none;border:0px solid rgb(0,0,0);border-style:inset;border-radius:5px;"; + QString buttonStyle4 = "QPushButton:checked{outline: none;border:3px groove rgb(80,80,80);}"; + + int num,idx; + num = idx = 0; + if(!iniFile.exists()) + { + num = 1; + idx = 0; + + QRgb rgb = pColorBuf[(idx % BF_SW_ND)]; + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + if(i < num) + { + m_buttonEmbNeedleList.at(i)->setStyleSheet(buttonStyle3 + cstyle + "}" + buttonStyle4); + m_buttonEmbNeedleList.at(i)->show(); + } + else + { + m_buttonEmbNeedleList.at(i)->hide(); + } + } + } + else + { + QRgb rgb = qRgb(0,255,0); + num = g_pSettings->readFromIniFile("PunchNeedle/number").toInt(); + + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++)//针杆按钮 + { + QString idxStr; + idxStr = "PunchNeedle/"+QString::number(i+1)+"_coloridx"; + + if(g_pSettings->ifKeyExists(idxStr) == true)//判断配置文件中是否有这个key(TowelNeedle/1_coloridx) + { + idx = g_pSettings->readFromIniFile(idxStr).toInt();//从配置文件里读的第几个针杆的颜色 + rgb = pColorBuf[(idx % BF_SW_ND)]; + } + else + { + rgb = pColorBuf[(i % MC_SW_ND)]; + } + rgb |= 0xff000000; + QColor bkcolor(rgb); + QColor tcolor = QColor(255-bkcolor.red(), 255-bkcolor.green(), 255-bkcolor.blue()).lighter(168); + QString cstyle = "outline: none;background-color:" + bkcolor.name() + ";" + + " color:" + tcolor.name() + ";"; + if(i < num)//从配置文件里读有几个针杆,然后换色弹窗就显示几个 + { + m_buttonEmbNeedleList.at(i)->setStyleSheet(buttonStyle3 + cstyle + "}" + buttonStyle4); + m_buttonEmbNeedleList.at(i)->show(); + } + else + { + m_buttonEmbNeedleList.at(i)->hide(); + } + } + } + + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + m_buttonEmbNeedleList.at(i)->setChecked(false); + m_buttonEmbNeedleList.at(i)->setCheckable(false); + } + + ui->buttonOk->setEnabled(false); +} + +void PromptDialog::setHeadNum(int headNum) +{ + m_totalHead = headNum; +} + +QString PromptDialog::getNetworkCardID() +{ + return ui->labelNetworkCardIDValue->text(); +} + +QString PromptDialog::getInputPassword() +{ + return ui->buttonHMIPassword->text(); +} + +void PromptDialog::slotMCInfoChange() +{ + QString strInfo; + MCInfo info;//机器信息 + char softwareVerStr[32+1];//软件版本 + char mBoardVerStr[16+1];//主板(n1)板卡版本 + char exBoardVerStr[16+1];//主板(n1-1)板卡版本 + char buildInfoStr[32+1];//编译日期信息 + + info = g_pMachine->getMcInfo(); + memcpy(softwareVerStr, info.softwareVerStr, 32); + memcpy(mBoardVerStr, info.mBoardVerStr, 16); + memcpy(exBoardVerStr, info.exBoardVerStr, 16); + memcpy(buildInfoStr, info.buildInfoStr, 32); + + softwareVerStr[32] = 0; + mBoardVerStr[16]= 0; + exBoardVerStr[16]= 0; + buildInfoStr[32]=0; + + QString strBoardVer; + strBoardVer.sprintf("%s", softwareVerStr); + + QString strMBoardVer; + strMBoardVer.sprintf("%s", mBoardVerStr); + + QString strExBoardVer; + strExBoardVer.sprintf("%s", exBoardVerStr); + + QString strBuildInfo; + strBuildInfo.sprintf("%s", buildInfoStr); + + if(strBoardVer.length() > 0 ) + { + strBoardVer.remove(" ");//清除空格 + } + strInfo += tr("Board:") + " " + strBoardVer + "\n"+ + strBuildInfo+ "\n" + + strMBoardVer + "\n" + + strExBoardVer + "\n" ; + + QString verInfo = "\n" + strInfo; + ui->labelContentInfo->setText(verInfo); + + //连接多块主板也是从g_pMachine(第一块)获取软件授权信息 + MCStatus mcStatus; + mcStatus = g_pMachine->getMcStatus(); //读的一个主板的可工作时间计数器(分钟) + + MCInfo infoID;//机器信息 + infoID = g_pMachine->getMcInfo(); + + QString IDStr(infoID.boardId); + if(IDStr.indexOf(":") != -1) + { + QStringList list = IDStr.split(":"); + IDStr = list.at(1); + } + + QString passwordStr(infoID.installment); + if(passwordStr.indexOf(":") != -1) + { + QStringList list = passwordStr.split(":"); + passwordStr = list.at(1); + } + + int time = mcStatus.workableTimer;//只在上电的时候读取 + QString timeStr; + if( time > TIMELIMITMIN && time < TIMELIMITMAX) + { + timeStr = (tr("Unlimited time")); // 无时间限制 + } + if(time <= 0) + { + timeStr = (tr("Time has run out")); // 时间已用完 + } + if(time > 0 && time < TIMELIMITMIN) + { + QString strDay; + QString strHour; + QString strSec; + + strDay = QString::number(time/(60 *24) , 10); + strHour = QString::number((time%(60 *24))/60 , 10) ; + strSec = QString::number(time%60 , 10); + + timeStr = strDay + " " + tr("Day") + " " + strHour + " " + tr("Hour") + " " + strSec + " " + tr("Minutes") ; // 天 小时 分钟 + } + + QString strBoardInfo; + strBoardInfo = QString(tr("ID: %1\n")).arg(IDStr); + strBoardInfo += QString(tr("Password: %1\n")).arg(passwordStr); + strBoardInfo += QString(tr("Time: %1")).arg(timeStr); + ui->labelContentWarrant->setText(strBoardInfo); +} + +//针杆按钮被点击 +void PromptDialog::slotEmbNeedleBtnClick() +{ + m_pEmbNeedleBtn = (QPushButton*) this->sender(); + + if(m_pEmbNeedleBtn == NULL) + { + return; + } + + for(int i = 0; i < m_buttonEmbNeedleList.size(); i++) + { + if(m_pEmbNeedleBtn == m_buttonEmbNeedleList.at(i)) + { + m_selectNeedleIdx = i+1; + } + m_buttonEmbNeedleList.at(i)->setChecked(false); + m_buttonEmbNeedleList.at(i)->setCheckable(false); + } + m_pEmbNeedleBtn->setCheckable(true); + m_pEmbNeedleBtn->setChecked(true); + + ui->buttonOk->setEnabled(true); +} + +void PromptDialog::on_buttonOk_clicked() +{ + done(1); +} + +void PromptDialog::on_buttonCancel_clicked() +{ + done(0); +} + +void PromptDialog::on_buttonRename_clicked() +{ + done(1); +} + +void PromptDialog::on_buttonReplace_clicked() +{ + done(2); +} + +void PromptDialog::on_buttonSkip_clicked() +{ + done(0); +} + +//重启 +void PromptDialog::on_buttonRestart_clicked() +{ +#ifdef Q_OS_WIN + qApp->exit(); +#endif + +#ifdef Q_OS_LINUX + system("reboot"); +#endif +} + +//升级中断 +void PromptDialog::on_buttonUpdataCancel_clicked() +{ + emit(siUpdataCancel()); + done(0); +} + +void PromptDialog::on_buttonWarrant_clicked() +{ + //输入框 + WordsInputDialog wordInputDlg; + wordInputDlg.clean(); + wordInputDlg.setTitleStr(tr("Warrant")); + wordInputDlg.setOldWordsStr(""); + if(wordInputDlg.exec() == 1) + { + QString textStr = wordInputDlg.getInputStr(); + g_pMachine->setMacKey(( unsigned char * ) textStr.toLatin1().data() ,textStr.toLatin1().size()); + done(1); + } +} + +void PromptDialog::on_buttonWarrantCancel_clicked() +{ + done(0); +} + +//开始检测 +void PromptDialog::on_buttonDetectBegin_clicked() +{ + if(m_funType == BTN_FACE)//等于面线检测 + { + //面线检测开始,绣花机才有,所以是g_pMachine(第一块) + if(g_pMachine != NULL) + { + g_pMachine->testThreadBK(NOODLES,m_selectNeedleIdx); + } + return; + } +} + +//停止检测 +void PromptDialog::on_buttonDetectEnd_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->exitDetectTest(); + } +} + +//关闭检测窗体 +void PromptDialog::on_buttonDetectClose_clicked() +{ + //退出弹窗的时候也发一个 停止检测 的命令 -rq + if(m_funType == BTN_FACE)//等于面线、底线检测 + { + if(g_pMachine != NULL) + { + g_pMachine->exitDetectTest(); + } + } + done(0); +} + +//界面解密ID号输入按钮 +void PromptDialog::on_buttonHMIPassword_clicked() +{ + //输入框 + WordsInputDialog wordInputDlg; + wordInputDlg.clean(); + wordInputDlg.setTitleStr(tr("HMI decrypt")); + wordInputDlg.setOldWordsStr(""); + if(wordInputDlg.exec() == 1) + { + QString textStr = wordInputDlg.getInputStr(); + ui->buttonHMIPassword->setText(textStr); + if(textStr.length() > 0) + { + ui->buttonOk->setEnabled(true); + } + } +} + +//修改一级密码:新密码输入按钮 +void PromptDialog::on_buttonNewPassword_clicked() +{ + //密码输入框 + PassWordDialog passWordDlg; + passWordDlg.setTitleStr(tr("New Password input"));//设置新密码输入的标题 + if(passWordDlg.exec() == 1)//确认 + { + m_newPassword = passWordDlg.getInputStr();//获取输入框里的密码 + QString showStr(""); + for (int var = 0; var < m_newPassword.size(); var++) + { + showStr = showStr + "*"; + } + ui->buttonNewPassword->setText(showStr);//新密码框里显示获取的密码 + } +} +//修改一级密码:确认新密码输入按钮 +void PromptDialog::on_buttonConfirmPassword_clicked() +{ + //密码输入框 + PassWordDialog passWordDlg; + passWordDlg.setTitleStr(tr("Confirm Password input"));//设置确认密码输入的标题 + if(passWordDlg.exec() == 1)//确认 + { + m_confirmPassword = passWordDlg.getInputStr();//获取输入框里的密码 + QString showStr(""); + for (int var = 0; var < m_confirmPassword.size(); var++) + { + showStr = showStr + "*"; + } + ui->buttonConfirmPassword->setText(showStr);//确认密码框里显示获取的密码 + if(m_confirmPassword.length() > 0 ) + { + ui->buttonOk->setEnabled(true); + } + } +} diff --git a/sharedviews/promptdialog.h b/sharedviews/promptdialog.h new file mode 100644 index 0000000..5c3cb8c --- /dev/null +++ b/sharedviews/promptdialog.h @@ -0,0 +1,136 @@ +#ifndef PROMPTDIALOG_H +#define PROMPTDIALOG_H + +#include +#include +#include +#include +#include "wordsinputdialog.h" +#include "numerinputdialog.h" +#include "setcontrolstyle.h" +#include "sharedviews/passworddialog.h" + +#define NOODLES 1 +#define BOTTOM 2 +#define TIMELIMITMAX 2147483647 +#define TIMELIMITMIN 2147385345 + +namespace Ui { +class PromptDialog; +} + +class PromptDialog : public QDialog +{ + Q_OBJECT + +public: + explicit PromptDialog(QWidget *parent = 0); + ~PromptDialog(); + + enum BTN_SHOW + { + BTN_OK_CANCEL, //ok和cancel按钮 + BTN_OK, //ok按钮 + BTN_R_R_S, //重命名、替换、跳过 + BTN_RESTART, //重启按钮 + BTN_UCANCEL, //升级取消按钮 + BTN_WARRANT, //授权按钮 + BTN_M_C_C, //手动换色 + BTN_FACE, //面线检测 + BTN_NONE, //无按钮 + BTN_P_NONE, //进度条模式下无按钮(文件导入导出) + BTN_HMI_DECRYPT, //界面解密 + BTN_CHANGE_PASSWORD, //修改一级密码 + BTN_TRIMDOWN, //下剪线 + BTN_WORK_AREA, //设置可工作区域 + BTN_TEST_ADC //测试电位器 + }; + +private: + Ui::PromptDialog *ui; + QList m_buttonEmbNeedleList; + + QPushButton *m_pEmbNeedleBtn; + QPoint m_btnOkPoint;//ok按钮位置 + QPoint m_btnCancelPoint;//cancel按钮位置 + + int m_selectNeedleIdx;//针杆索引 + int m_selectHeadleIdx;//机头索引 + int m_funType;//功能类型 + + int m_curColorOrder;//当前色序数 + int m_totalColorOrder;//总色序数 + int m_totalHead;//总机头数 + QString m_filePath; + + int m_area;//xy正负位置 + QString m_newPassword;//获取新密码字符串 + QString m_confirmPassword;//获取确认新密码字符串 + + QString m_buttonStyle1; + QString m_buttonStyle2; + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006();//初始化窗体控件为1920x1080分辨率 + void initControlStyle();//初始化窗体控件样式 + +public: + void initDialog(int sel = 0);//初始化窗体 + void setTitleStr(QString str);//设置标题 + void setStrColor(QString str);//设置底线面线断线机头显示字体的颜色 + void setContentStr(QString str);//设置显示内容 + void setADCContentStr();//设置电位器信息显示 + void setContentProcessStr(QString str);//设置进度条显示内容 + void setContentInfoShow();//主板信息内容显示 + void setContentWarrantShow();//授权信息内容显示 + void setContentHMIDecryptShow(QString id);//界面解密网卡ID号显示 + void setContentChangePasswordShow();//修改一级用户密码内容显示 + void setValue(int progress); + void setButtonUCancelStr(QString str); + void setRange(int minimum, int maximum); + void setCurNeedleStr(QString idx = 0);//当前针杆 + void setPosValueStr(QString posValue);//电位器值 + void setCurNeedleStrVisible(bool bl);//当前针杆label是否可见 + void initNeedleBar(int val = MACHINE_PUNCH);//初始化针杆 + inline int getNeedleSelectIdx(){return m_selectNeedleIdx;}//获取所选针杆的索引值 + inline int getArea(){return m_area;} + //inline int getGearValue(){return m_gearValue;}//获取档位值 + inline QString getInputNewPassword(){return m_newPassword;}//获取新密码 + inline QString getInputConfirmPassword(){return m_confirmPassword;}//获取确认新密码 + + void setHeadNum(int headNum);//机头个数 + void initEmbHead(int headNum,int colorOrderNum,QString path);//初始化机头 + + QString getNetworkCardID();//获取网卡ID + QString getInputPassword();//获取界面输入密码 + +signals: + void siUpdataCancel(); + +public slots: + void slotMCInfoChange(); + +private slots: + void slotEmbNeedleBtnClick();//针杆按钮被点击 + +private slots: + void on_buttonOk_clicked(); + void on_buttonCancel_clicked(); + void on_buttonRename_clicked(); + void on_buttonReplace_clicked(); + void on_buttonSkip_clicked(); + void on_buttonRestart_clicked(); + void on_buttonUpdataCancel_clicked(); + void on_buttonWarrant_clicked(); + void on_buttonWarrantCancel_clicked(); + void on_buttonDetectBegin_clicked(); + void on_buttonDetectEnd_clicked(); + void on_buttonDetectClose_clicked(); + void on_buttonHMIPassword_clicked(); + void on_buttonNewPassword_clicked(); + void on_buttonConfirmPassword_clicked(); +}; + +#endif // PROMPTDIALOG_H diff --git a/sharedviews/promptdialog.ui b/sharedviews/promptdialog.ui new file mode 100644 index 0000000..fb5646d --- /dev/null +++ b/sharedviews/promptdialog.ui @@ -0,0 +1,1118 @@ + + + PromptDialog + + + + 0 + 0 + 472 + 274 + + + + Dialog + + + + + + + + 0 + 0 + 472 + 48 + + + + + + + Prompt + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 20 + 70 + 440 + 130 + + + + + 0 + 0 + + + + + 1000 + 800 + + + + border:0px; +background-color: rgb(240, 240, 240, 255); + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + 100 + 210 + 361 + 51 + + + + background-color: rgb(184, 184, 184); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 270 + 10 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 190 + 10 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 110 + 9 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 30 + 10 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + + 190 + 210 + 271 + 51 + + + + background-color: rgb(184, 184, 184); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 100 + 9 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 190 + 10 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 20 + 10 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + + 20 + 70 + 440 + 130 + + + + + 0 + 0 + + + + + 1000 + 800 + + + + border:0px; +background-color: rgb(240, 240, 240, 255); + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + 0 + 0 + 472 + 274 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 20 + 70 + 440 + 130 + + + + background-color: rgb(206, 206, 206); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 411 + 51 + + + + + 100 + 10 + + + + + 600 + 80 + + + + + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + 10 + 80 + 411 + 32 + + + + QProgressBar +{ + color: rgb(255, 255, 255); + border-radius: 5px; + border:0px; + background-color: qlineargradient(spread:pad, x1:0.97, y1:1, x2:1, y2:0, stop:0 rgba(163, 165, 165, 255), stop:1 rgba(214, 214, 214, 255)); +} + +QProgressBar::chunk +{ + background-color: rgb(170, 255, 127); + width: 20px; +} + +QProgressBar +{ + border-radius: 5px; + text-align: center; +} + + + 0 + + + + + + + 190 + 210 + 271 + 51 + + + + background-color: rgb(184, 184, 184); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 100 + 9 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 190 + 10 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + + 190 + 210 + 271 + 51 + + + + background-color: rgb(184, 184, 184); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 100 + 9 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 190 + 10 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + + 20 + 70 + 440 + 130 + + + + + 0 + 0 + + + + + 1000 + 200 + + + + border:0px; +background-color: rgb(240, 240, 240, 255); + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + 20 + 40 + 440 + 161 + + + + background-color: rgb(206, 206, 206); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 130 + 10 + 91 + 16 + + + + 1 + + + + + + 20 + 10 + 91 + 16 + + + + Qt::RightToLeft + + + Current Punch: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 190 + 210 + 271 + 51 + + + + background-color: rgb(184, 184, 184); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 9 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 110 + 10 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 190 + 10 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + + 20 + 40 + 440 + 161 + + + + background-color: rgb(206, 206, 206); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 10 + 91 + 16 + + + + ID: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 20 + 50 + 91 + 16 + + + + Password: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 120 + 50 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 120 + 10 + 71 + 16 + + + + ID + + + Qt::AlignCenter + + + + + + 120 + 100 + 71 + 16 + + + + DecryptInfo + + + Qt::AlignCenter + + + + + + 20 + 100 + 91 + 16 + + + + DecryptInfo: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 20 + 40 + 440 + 161 + + + + background-color: rgb(206, 206, 206); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 50 + 91 + 16 + + + + New Password: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 120 + 50 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 20 + 100 + 91 + 16 + + + + Confirm Password: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 120 + 100 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + + 29 + 40 + 451 + 51 + + + + + 0 + 0 + + + + + 1000 + 400 + + + + + Agency FB + 48 + + + + border:0px; +background-color: rgb(240, 240, 240, 255); + + + + Qt::AlignCenter + + + true + + + + + + 40 + 40 + 440 + 161 + + + + background-color: rgb(206, 206, 206); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 50 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 20 + 80 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 110 + 50 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 110 + 80 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + + 30 + 30 + 451 + 51 + + + + + 0 + 0 + + + + + 1000 + 400 + + + + border:0px; +background-color: rgb(240, 240, 240, 255); + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + 20 + 70 + 440 + 130 + + + + + 0 + 0 + + + + + 1000 + 800 + + + + border:0px; +background-color: rgb(240, 240, 240, 255); + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + labelContentInfo + labeBottomBreakHead + frameBack + labelTitle + labelContent + frameThree + frameProcess + frameProcessBtn + frameWarrantBtn + labelContentWarrant + frameManualChangeColor + frameDetecBtn + frameHMIDecrypt + frameChangePassword + frameTwo + labeBreakHead + frameWorkArea + labelContentADC + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/rotacomwidget.cpp b/sharedviews/rotacomwidget.cpp new file mode 100644 index 0000000..dcd9c35 --- /dev/null +++ b/sharedviews/rotacomwidget.cpp @@ -0,0 +1,820 @@ +#include "rotacomwidget.h" +#include "ui_rotacomwidget.h" + +#include +#include "main.h" +#include "numerinputdialog.h" +#include "items/cmdconfig.h" + +RotaComWidget::RotaComWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::RotaComWidget) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + //setWindowModality(Qt::ApplicationModal); + + ui->pushButtonZeroCom1->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom1").toFloat(),'f',2)); + ui->pushButtonZeroCom2->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom2").toFloat(),'f',2)); + ui->pushButtonZeroCom3->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom3").toFloat(),'f',2)); + ui->pushButtonZeroCom4->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom4").toFloat(),'f',2)); + ui->pushButtonZeroCom5->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom5").toFloat(),'f',2)); + ui->pushButtonZeroCom6->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom6").toFloat(),'f',2)); + + ui->pushButtonZeroCom7->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom7").toFloat(),'f',2)); + ui->pushButtonZeroCom8->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom8").toFloat(),'f',2)); + ui->pushButtonZeroCom9->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom9").toFloat(),'f',2)); + ui->pushButtonZeroCom10->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom10").toFloat(),'f',2)); + ui->pushButtonZeroCom11->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom11").toFloat(),'f',2)); + ui->pushButtonZeroCom12->setText(QString::number(g_pSettings->readFromIniFile("AUFUS/ZeroCom12").toFloat(),'f',2)); + + m_speedLevel = 0; + initControl(); +} + +RotaComWidget::~RotaComWidget() +{ + delete ui; +} + +void RotaComWidget::initControl()//初始化窗体控件,包括位置、尺寸、样式 +{ + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1024,600); + break; + } + initControlStyle();//初始化窗体控件样式 +} + +void RotaComWidget::initResolution1910()//初始化窗体控件为1920x1080分辨率 +{ + this->resize(1920,1080); + this->setGeometry(0,0,1920,1080); + ui->frameRota->setGeometry(0,0,1920,1080); + + ui->labelTitle->setGeometry(9,8,560,60); + ui->frameNeedle->setGeometry( 37,70 ,1650 ,105); + ui->frameZeroCom->setGeometry( 37,190 ,1650 ,105); + ui->frameZeroCom_2->setGeometry( 37,310 ,1650 ,105); + + ui->frameRotaZero->setGeometry( 37,430 ,1650 ,105); + ui->framePunchingSpindle1->setGeometry( 37,550 ,1650 ,105); + ui->framePunchingSpindle2->setGeometry( 37,670 ,1650 ,105); + ui->frameRotaryMotor1->setGeometry( 37,790 ,1650 ,105); + ui->frameRotaryMotor2->setGeometry( 37,910 ,1650 ,105); + + ui->frameOkCancel->setGeometry( 1710,400 ,185 ,290); + + ui->labelNeedle->setGeometry( 0,0 ,370 ,105); + ui->pushButtonNeedel1->setGeometry( 240,0 ,185 ,105); + ui->pushButtonNeedel2->setGeometry( 480,0 ,185 ,105); + ui->pushButtonNeedel3->setGeometry( 720,0 ,185 ,105); + ui->pushButtonNeedel4->setGeometry( 960,0 ,185 ,105); + ui->pushButtonNeedel5->setGeometry( 1200,0 ,185 ,105); + ui->pushButtonNeedel6->setGeometry( 1440,0 ,185 ,105); + + ui->labelZeroCom->setGeometry( 0,0 ,370 ,105); + ui->pushButtonZeroCom1->setGeometry( 240,0 ,185 ,105); + ui->pushButtonZeroCom2->setGeometry( 480,0 ,185 ,105); + ui->pushButtonZeroCom3->setGeometry( 720,0 ,185 ,105); + ui->pushButtonZeroCom4->setGeometry( 960,0 ,185 ,105); + ui->pushButtonZeroCom5->setGeometry( 1200,0 ,185 ,105); + ui->pushButtonZeroCom6->setGeometry( 1440,0 ,185 ,105); + + ui->labelZeroCom_2->setGeometry( 0,0 ,370 ,105); + ui->pushButtonZeroCom7->setGeometry( 240,0 ,185 ,105); + ui->pushButtonZeroCom8->setGeometry( 480,0 ,185 ,105); + ui->pushButtonZeroCom9->setGeometry( 720,0 ,185 ,105); + ui->pushButtonZeroCom10->setGeometry( 960,0 ,185 ,105); + ui->pushButtonZeroCom11->setGeometry( 1200,0 ,185 ,105); + ui->pushButtonZeroCom12->setGeometry( 1440,0 ,185 ,105); + + ui->labelManual->setGeometry( 0,0 ,370 ,105); + ui->buttonChangeTool->setGeometry( 480,0 ,185 ,105); + ui->buttonSinglePunch->setGeometry( 720,0 ,185 ,105); + ui->buttonJog->setGeometry( 960,0 ,185 ,105); + ui->buttonManualChange->setGeometry( 1200,0 ,185 ,105); + ui->buttonRotaZero->setGeometry( 1440,0 ,185 ,105); + + ui->labelPunchingSpindle1->setGeometry( 0,0 ,370 ,105); + ui->buttonChange->setGeometry( 480,0 ,185 ,105); + ui->buttonEnable->setGeometry( 720,0 ,185 ,105); + ui->buttonDisenable->setGeometry( 960,0 ,185 ,105); + ui->buttonForeward->setGeometry( 1200,0 ,185 ,105); + ui->buttonReversal->setGeometry( 1440,0 ,185 ,105); + + ui->labelPunchingSpindle2->setGeometry( 0,0 ,370 ,105); + ui->buttonChange_2->setGeometry( 480,0 ,185 ,105); + ui->buttonEnable_2->setGeometry( 720,0 ,185 ,105); + ui->buttonDisenable_2->setGeometry( 960,0 ,185 ,105); + ui->buttonForeward_2->setGeometry( 1200,0 ,185 ,105); + ui->buttonReversal_2->setGeometry( 1440,0 ,185 ,105); + + ui->labelRotaryMotor1->setGeometry( 0,0 ,370 ,105); + ui->buttonChange_3->setGeometry( 480,0 ,185 ,105); + ui->buttonEnable_3->setGeometry( 720,0 ,185 ,105); + ui->buttonDisenable_3->setGeometry( 960,0 ,185 ,105); + ui->buttonForeward_3->setGeometry( 1200,0 ,185 ,105); + ui->buttonReversal_3->setGeometry( 1440,0 ,185 ,105); + + ui->labelRotaryMotor2->setGeometry( 0,0 ,370 ,105); + ui->buttonChange_4->setGeometry( 480,0 ,185 ,105); + ui->buttonEnable_4->setGeometry( 720,0 ,185 ,105); + ui->buttonDisenable_4->setGeometry( 960,0 ,185 ,105); + ui->buttonForeward_4->setGeometry( 1200,0 ,185 ,105); + ui->buttonReversal_4->setGeometry( 1440,0 ,185 ,105); + + ui->buttonOk->setGeometry( 0,310 ,180 ,105); + ui->buttonCancel->setGeometry( 0,965 ,180 ,105); +} + +void RotaComWidget::initResolution1006()//初始化窗体控件为1024x600分辨率 +{ + this->resize(1024,600); + this->setGeometry(0,0,1024,600); + ui->frameRota->setGeometry(0,0,1024,600); + + ui->labelTitle->setGeometry(5,5,300,35); + ui->frameNeedle->setGeometry( 20,40 ,900 ,60); + ui->frameZeroCom->setGeometry( 20,110 ,900 ,60); + ui->frameZeroCom_2->setGeometry( 20,180 ,900 ,60); + + ui->frameRotaZero->setGeometry( 20,250 ,900 ,60); + ui->framePunchingSpindle1->setGeometry( 20,320 ,900 ,60); + ui->framePunchingSpindle2->setGeometry( 20,390 ,900 ,60); + ui->frameRotaryMotor1->setGeometry( 20,460 ,900 ,60); + ui->frameRotaryMotor2->setGeometry( 20,530 ,900 ,60); + + ui->frameOkCancel->setGeometry( 920,0 ,100 ,600); + + ui->labelNeedle->setGeometry( 0,0 ,110 ,60); + ui->pushButtonNeedel1->setGeometry( 130,0 ,100 ,60); + ui->pushButtonNeedel2->setGeometry( 260,0 ,100 ,60); + ui->pushButtonNeedel3->setGeometry( 390,0 ,100 ,60); + ui->pushButtonNeedel4->setGeometry( 520,0 ,100 ,60); + ui->pushButtonNeedel5->setGeometry( 650,0 ,100 ,60); + ui->pushButtonNeedel6->setGeometry( 780,0 ,100 ,60); + + ui->labelZeroCom->setGeometry( 0,0 ,110 ,60); + ui->pushButtonZeroCom1->setGeometry( 130,0 ,100 ,60); + ui->pushButtonZeroCom2->setGeometry( 260,0 ,100 ,60); + ui->pushButtonZeroCom3->setGeometry( 390,0 ,100 ,60); + ui->pushButtonZeroCom4->setGeometry( 520,0 ,100 ,60); + ui->pushButtonZeroCom5->setGeometry( 650,0 ,100 ,60); + ui->pushButtonZeroCom6->setGeometry( 780,0 ,100 ,60); + + ui->labelZeroCom_2->setGeometry( 0,0 ,110 ,60); + ui->pushButtonZeroCom7->setGeometry( 130,0 ,100 ,60); + ui->pushButtonZeroCom8->setGeometry( 260,0 ,100 ,60); + ui->pushButtonZeroCom9->setGeometry( 390,0 ,100 ,60); + ui->pushButtonZeroCom10->setGeometry( 520,0 ,100 ,60); + ui->pushButtonZeroCom11->setGeometry( 650,0 ,100 ,60); + ui->pushButtonZeroCom12->setGeometry( 780,0 ,100 ,60); + + ui->labelManual->setGeometry( 0,0 ,110 ,60); + ui->buttonChangeTool->setGeometry( 260,0 ,100 ,60); + ui->buttonSinglePunch->setGeometry( 390,0 ,100 ,60); + ui->buttonJog->setGeometry( 520,0 ,100 ,60); + ui->buttonManualChange->setGeometry( 650,0 ,100 ,60); + ui->buttonRotaZero->setGeometry( 780,0 ,100 ,60); + + ui->labelPunchingSpindle1->setGeometry( 0,0 ,200 ,60); + ui->buttonChange->setGeometry( 260,0 ,100 ,60); + ui->buttonEnable->setGeometry( 390,0 ,100 ,60); + ui->buttonDisenable->setGeometry( 520,0 ,100 ,60); + ui->buttonForeward->setGeometry( 650,0 ,100 ,60); + ui->buttonReversal->setGeometry( 780,0 ,100 ,60); + + ui->labelPunchingSpindle2->setGeometry( 0,0 ,200 ,60); + ui->buttonChange_2->setGeometry( 260,0 ,100 ,60); + ui->buttonEnable_2->setGeometry( 390,0 ,100 ,60); + ui->buttonDisenable_2->setGeometry( 520,0 ,100 ,60); + ui->buttonForeward_2->setGeometry( 650,0 ,100 ,60); + ui->buttonReversal_2->setGeometry( 780,0 ,100 ,60); + + ui->labelRotaryMotor1->setGeometry( 0,0 ,200 ,60); + ui->buttonChange_3->setGeometry( 260,0 ,100 ,60); + ui->buttonEnable_3->setGeometry( 390,0 ,100 ,60); + ui->buttonDisenable_3->setGeometry( 520,0 ,100 ,60); + ui->buttonForeward_3->setGeometry( 650,0 ,100 ,60); + ui->buttonReversal_3->setGeometry( 780,0 ,100 ,60); + + ui->labelRotaryMotor2->setGeometry( 0,0 ,200 ,60); + ui->buttonChange_4->setGeometry( 260,0 ,100 ,60); + ui->buttonEnable_4->setGeometry( 390,0 ,100 ,60); + ui->buttonDisenable_4->setGeometry( 520,0 ,100 ,60); + ui->buttonForeward_4->setGeometry( 650,0 ,100 ,60); + ui->buttonReversal_4->setGeometry( 780,0 ,100 ,60); + + ui->buttonOk->setGeometry( 0,180,100 ,60); + ui->buttonCancel->setGeometry( 0,530 ,100 ,60); +} + +void RotaComWidget::initControlStyle()//初始化窗体控件样式 +{ + QString orangeGradient = setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->frameRota->setStyleSheet("background-color: rgb(245, 245, 245);"); + + ui->frameNeedle->setStyleSheet(TRANSPARENTSTYLE); + ui->frameZeroCom->setStyleSheet(TRANSPARENTSTYLE); + ui->frameZeroCom_2->setStyleSheet(TRANSPARENTSTYLE); + ui->frameRotaZero->setStyleSheet(TRANSPARENTSTYLE); + ui->frameOkCancel->setStyleSheet(TRANSPARENTSTYLE); + + ui->framePunchingSpindle1->setStyleSheet(TRANSPARENTSTYLE); + ui->framePunchingSpindle2->setStyleSheet(TRANSPARENTSTYLE); + ui->frameRotaryMotor1->setStyleSheet(TRANSPARENTSTYLE); + ui->frameRotaryMotor2->setStyleSheet(TRANSPARENTSTYLE); + + //xcy 20230512 针杆固定6色 + ui->pushButtonNeedel1->setStyleSheet("QPushButton{background-color:rgb(255, 255, 0); color:rgb(104, 0, 0)}"); + ui->pushButtonNeedel2->setStyleSheet("QPushButton{background-color:rgb(0, 255, 0); color:black}"); + ui->pushButtonNeedel3->setStyleSheet("QPushButton{background-color:rgb(0, 255, 255); color:rgb(0, 104, 104)}"); + ui->pushButtonNeedel4->setStyleSheet("QPushButton{background-color:rgb(0, 0, 255); color:black}"); + ui->pushButtonNeedel5->setStyleSheet("QPushButton{background-color:rgb(104, 0, 0); color:rgb(0, 104, 104)}"); + ui->pushButtonNeedel6->setStyleSheet("QPushButton{background-color:rgb(0, 104, 104); color:black}"); + ui->pushButtonZeroCom1->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom2->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom3->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom4->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom5->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom6->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom7->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom8->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom9->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom10->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom11->setStyleSheet(orangeGradient); + ui->pushButtonZeroCom12->setStyleSheet(orangeGradient); + + ui->buttonOk->setStyleSheet(orangeGradient); + ui->buttonCancel->setStyleSheet(orangeGradient); + + //此界面要求字体略大 + int size = 14; + if(g_emResolut == resolution1910) + { + size = 16; + } + QFont fontNormal(FONTTYPE,size,FONTNORMAL);//微软雅黑常规 + + //label样式 + ui->labelNeedle->setFont(fontNormal); + ui->labelNeedle->setStyleSheet(LABELBLACKSTYLE); + ui->labelZeroCom->setFont(fontNormal); + ui->labelZeroCom->setStyleSheet(LABELBLACKSTYLE); + ui->labelZeroCom_2->setFont(fontNormal); + ui->labelZeroCom_2->setStyleSheet(LABELBLACKSTYLE); + ui->pushButtonNeedel1->setFont(fontNormal); + ui->pushButtonNeedel2->setFont(fontNormal); + ui->pushButtonNeedel3->setFont(fontNormal); + ui->pushButtonNeedel4->setFont(fontNormal); + ui->pushButtonNeedel5->setFont(fontNormal); + ui->pushButtonNeedel6->setFont(fontNormal); + ui->pushButtonZeroCom1->setFont(fontNormal); + ui->pushButtonZeroCom2->setFont(fontNormal); + ui->pushButtonZeroCom3->setFont(fontNormal); + ui->pushButtonZeroCom4->setFont(fontNormal); + ui->pushButtonZeroCom5->setFont(fontNormal); + ui->pushButtonZeroCom6->setFont(fontNormal); + ui->pushButtonZeroCom7->setFont(fontNormal); + ui->pushButtonZeroCom8->setFont(fontNormal); + ui->pushButtonZeroCom9->setFont(fontNormal); + ui->pushButtonZeroCom10->setFont(fontNormal); + ui->pushButtonZeroCom11->setFont(fontNormal); + ui->pushButtonZeroCom12->setFont(fontNormal); + + ui->buttonOk->setFont(fontNormal); + ui->buttonCancel->setFont(fontNormal); + + ui->labelTitle->setFont(fontNormal); + ui->labelTitle->setStyleSheet(LABELBLACKSTYLE); + ui->labelManual->setFont(fontNormal); + ui->labelManual->setStyleSheet(LABELBLACKSTYLE); + ui->labelPunchingSpindle1->setFont(fontNormal); + ui->labelPunchingSpindle1->setStyleSheet(LABELBLACKSTYLE); + ui->labelPunchingSpindle2->setFont(fontNormal); + ui->labelPunchingSpindle2->setStyleSheet(LABELBLACKSTYLE); + ui->labelRotaryMotor1->setFont(fontNormal); + ui->labelRotaryMotor1->setStyleSheet(LABELBLACKSTYLE); + ui->labelRotaryMotor2->setFont(fontNormal); + ui->labelRotaryMotor2->setStyleSheet(LABELBLACKSTYLE); + + ui->buttonChangeTool->setStyleSheet(orangeGradient); + ui->buttonSinglePunch->setStyleSheet(orangeGradient); + ui->buttonJog->setStyleSheet(orangeGradient); + ui->buttonManualChange->setStyleSheet(orangeGradient); + ui->buttonRotaZero->setStyleSheet(orangeGradient); + + ui->buttonChange->setStyleSheet(orangeGradient); + ui->buttonEnable->setStyleSheet(orangeGradient); + ui->buttonDisenable->setStyleSheet(orangeGradient); + ui->buttonForeward->setStyleSheet(orangeGradient); + ui->buttonReversal->setStyleSheet(orangeGradient); + + ui->buttonChange_2->setStyleSheet(orangeGradient); + ui->buttonEnable_2->setStyleSheet(orangeGradient); + ui->buttonDisenable_2->setStyleSheet(orangeGradient); + ui->buttonForeward_2->setStyleSheet(orangeGradient); + ui->buttonReversal_2->setStyleSheet(orangeGradient); + + ui->buttonChange_3->setStyleSheet(orangeGradient); + ui->buttonEnable_3->setStyleSheet(orangeGradient); + ui->buttonDisenable_3->setStyleSheet(orangeGradient); + ui->buttonForeward_3->setStyleSheet(orangeGradient); + ui->buttonReversal_3->setStyleSheet(orangeGradient); + + ui->buttonChange_4->setStyleSheet(orangeGradient); + ui->buttonEnable_4->setStyleSheet(orangeGradient); + ui->buttonDisenable_4->setStyleSheet(orangeGradient); + ui->buttonForeward_4->setStyleSheet(orangeGradient); + ui->buttonReversal_4->setStyleSheet(orangeGradient); + + ui->buttonChangeTool->setFont(fontNormal); + ui->buttonSinglePunch->setFont(fontNormal); + ui->buttonJog->setFont(fontNormal); + ui->buttonManualChange->setFont(fontNormal); + ui->buttonRotaZero->setFont(fontNormal); + + ui->buttonChange->setFont(fontNormal); + ui->buttonEnable->setFont(fontNormal); + ui->buttonDisenable->setFont(fontNormal); + ui->buttonForeward->setFont(fontNormal); + ui->buttonReversal->setFont(fontNormal); + + ui->buttonChange_2->setFont(fontNormal); + ui->buttonEnable_2->setFont(fontNormal); + ui->buttonDisenable_2->setFont(fontNormal); + ui->buttonForeward_2->setFont(fontNormal); + ui->buttonReversal_2->setFont(fontNormal); + + ui->buttonChange_3->setFont(fontNormal); + ui->buttonEnable_3->setFont(fontNormal); + ui->buttonDisenable_3->setFont(fontNormal); + ui->buttonForeward_3->setFont(fontNormal); + ui->buttonReversal_3->setFont(fontNormal); + + ui->buttonChange_4->setFont(fontNormal); + ui->buttonEnable_4->setFont(fontNormal); + ui->buttonDisenable_4->setFont(fontNormal); + ui->buttonForeward_4->setFont(fontNormal); + ui->buttonReversal_4->setFont(fontNormal); +} + +QString RotaComWidget::setOrangeGradientBottomStyle(QString str) +{ + //橙色渐变 + QString style = "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(253, 231, 140), stop:1 rgb(240,119,12));border-radius:"+str+"px;color:rgb(0,0,0);}"; + style += "QPushButton:pressed{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(222, 196, 128), stop:1 rgb(213,125,54));color:rgb(0,0,0);}"; + style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(227, 227, 227), stop:1 rgb(177,177,177));color:rgb(0,0,0);}"; + return style; +} + +void RotaComWidget::setCompensationAngle(QPushButton *button, int idx) +{ + NumerInputDialog numberInputDlg; + numberInputDlg.setTitleStr(tr("Zero compensation angle"));//归零补偿角度 + numberInputDlg.setUnitStr(""); + numberInputDlg.setValueAndRange(0, -36000, 36000, 2);//默认0,0~360 + if(numberInputDlg.exec() == 1) + { + double val = (double)numberInputDlg.getValue() / 100; + QString str = "AUFUS/ZeroCom" + QString::number(idx); + g_pSettings->writeToIniFile(str,QString::number(val,'f',2)); + button->setText(QString::number(val,'f',2)); + } +} + +void RotaComWidget::on_buttonOk_clicked() +{ + if(g_pMachine != NULL) + { + if(g_pMachine->isConnected() != Connected) + { + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK); + dlg.setTitleStr(tr("Network error")); + dlg.setContentStr(tr("No connection")); + dlg.exec(); + return; + } + + ParaStruct wkParaValues; + wkParaValues = g_pMachine->getWkPara(); + + //修改旋转归零补偿角度参数 + int zeroCom1 = g_pSettings->readFromIniFile("AUFUS/ZeroCom1").toFloat() * 100; + int zeroCom2 = g_pSettings->readFromIniFile("AUFUS/ZeroCom2").toFloat() * 100; + int zeroCom3 = g_pSettings->readFromIniFile("AUFUS/ZeroCom3").toFloat() * 100; + int zeroCom4 = g_pSettings->readFromIniFile("AUFUS/ZeroCom4").toFloat() * 100; + int zeroCom5 = g_pSettings->readFromIniFile("AUFUS/ZeroCom5").toFloat() * 100; + int zeroCom6 = g_pSettings->readFromIniFile("AUFUS/ZeroCom6").toFloat() * 100; + + int zeroCom7 = g_pSettings->readFromIniFile("AUFUS/ZeroCom7").toFloat() * 100; + int zeroCom8 = g_pSettings->readFromIniFile("AUFUS/ZeroCom8").toFloat() * 100; + int zeroCom9 = g_pSettings->readFromIniFile("AUFUS/ZeroCom9").toFloat() * 100; + int zeroCom10 = g_pSettings->readFromIniFile("AUFUS/ZeroCom10").toFloat() * 100; + int zeroCom11 = g_pSettings->readFromIniFile("AUFUS/ZeroCom11").toFloat() * 100; + int zeroCom12 = g_pSettings->readFromIniFile("AUFUS/ZeroCom12").toFloat() * 100; + + wkParaValues.buf[233] = zeroCom1; //冲孔1旋转角度补偿 + wkParaValues.buf[234] = zeroCom2; // + wkParaValues.buf[235] = zeroCom3; // + wkParaValues.buf[236] = zeroCom4; // + wkParaValues.buf[237] = zeroCom5; // + wkParaValues.buf[238] = zeroCom6; // + + wkParaValues.buf[245] = zeroCom7; //冲孔2旋转角度补偿 + wkParaValues.buf[246] = zeroCom8; // + wkParaValues.buf[247] = zeroCom9; // + wkParaValues.buf[248] = zeroCom10; // + wkParaValues.buf[249] = zeroCom11; // + wkParaValues.buf[250] = zeroCom12; // + + //设置工作参数 + g_pMachine->setWkPara(&wkParaValues); + } +} + +void RotaComWidget::on_buttonCancel_clicked() +{ + this->hide(); +} + +void RotaComWidget::on_pushButtonZeroCom1_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom1,1); +} + +void RotaComWidget::on_pushButtonZeroCom2_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom2,2); +} + +void RotaComWidget::on_pushButtonZeroCom3_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom3,3); +} + +void RotaComWidget::on_pushButtonZeroCom4_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom4,4); +} + +void RotaComWidget::on_pushButtonZeroCom5_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom5,5); +} + +void RotaComWidget::on_pushButtonZeroCom6_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom6,6); +} + +void RotaComWidget::on_buttonRotaZero_clicked() +{ + PromptDialog promptDlg; + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Rotate to zero"));//旋转归零 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + promptDlg.setContentStr(str); + + if(promptDlg.exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->punchRotToZero();//冲孔旋转去零位 + } + } +} + +void RotaComWidget::on_buttonSinglePunch_clicked() +{ + PromptDialog promptDlg; + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Single punch"));//单次冲孔 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + promptDlg.setContentStr(str); + + if(promptDlg.exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->singlePunch(); + } + } +} + +void RotaComWidget::on_buttonChangeTool_clicked() +{ + PromptDialog promptDlg; + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Change tool position"));//换刀位 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + promptDlg.setContentStr(str); + + if(promptDlg.exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->punchJog(); + } + } +} + +void RotaComWidget::on_buttonJog_clicked() +{ + PromptDialog promptDlg; + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Spindle jog"));//主轴点动 + + QString str; + str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全! + promptDlg.setContentStr(str); + + if(promptDlg.exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->punchJog(); + } + } +} + +void RotaComWidget::on_buttonManualChange_clicked() +{ + emit signalManualColorChange(); +} + +void RotaComWidget::on_buttonChange_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoToZero(MT_LPM); + } +} + +void RotaComWidget::on_buttonEnable_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoServoCtrl(MT_LPM, UP_OPEN_ON); + } +} + +void RotaComWidget::on_buttonDisenable_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoServoCtrl(MT_LPM, DOWN_CLOSE_OFF); + } +} + +void RotaComWidget::on_buttonChange_2_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoToZero(MT_LP2); + } +} + +void RotaComWidget::on_buttonEnable_2_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoServoCtrl(MT_LP2, UP_OPEN_ON); + } +} + +void RotaComWidget::on_buttonDisenable_2_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoServoCtrl(MT_LP2, DOWN_CLOSE_OFF); + } +} + +void RotaComWidget::on_buttonChange_3_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoToZero(MT_PR1); + } +} + +void RotaComWidget::on_buttonEnable_3_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoServoCtrl(MT_PR1, UP_OPEN_ON); + } +} + +void RotaComWidget::on_buttonDisenable_3_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoServoCtrl(MT_PR1, DOWN_CLOSE_OFF); + } +} + +void RotaComWidget::on_buttonChange_4_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoToZero(MT_PR2); + } +} + +void RotaComWidget::on_buttonEnable_4_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoServoCtrl(MT_PR2, UP_OPEN_ON); + } +} + +void RotaComWidget::on_buttonDisenable_4_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoServoCtrl(MT_PR2, DOWN_CLOSE_OFF); + } +} + +void RotaComWidget::on_buttonForeward_pressed() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_LPM, MT_MOVE_DIR_POSI, m_speedLevel); + } +} + +void RotaComWidget::on_buttonForeward_released() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_LPM, MT_MOVE_DIR_STOP, 0); + } +} + +void RotaComWidget::on_buttonReversal_pressed() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_LPM, MT_MOVE_DIR_NEGA, m_speedLevel); + } +} + +void RotaComWidget::on_buttonReversal_released() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_LPM, MT_MOVE_DIR_STOP, 0); + } +} + +void RotaComWidget::on_buttonForeward_2_pressed() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_LP2, MT_MOVE_DIR_POSI, m_speedLevel); + } +} + +void RotaComWidget::on_buttonForeward_2_released() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_LP2, MT_MOVE_DIR_STOP, 0); + } +} + +void RotaComWidget::on_buttonReversal_2_pressed() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_LP2, MT_MOVE_DIR_NEGA, m_speedLevel); + } +} + +void RotaComWidget::on_buttonReversal_2_released() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_LP2, MT_MOVE_DIR_STOP, 0); + } +} + +void RotaComWidget::on_buttonForeward_3_pressed() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_PR1, MT_MOVE_DIR_POSI, m_speedLevel); + } +} + +void RotaComWidget::on_buttonForeward_3_released() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_PR1, MT_MOVE_DIR_STOP, 0); + } +} + +void RotaComWidget::on_buttonReversal_3_pressed() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_PR1, MT_MOVE_DIR_NEGA, m_speedLevel); + } +} + +void RotaComWidget::on_buttonReversal_3_released() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_PR1, MT_MOVE_DIR_STOP, 0); + } +} + +void RotaComWidget::on_buttonForeward_4_pressed() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_PR2, MT_MOVE_DIR_POSI, m_speedLevel); + } +} + +void RotaComWidget::on_buttonForeward_4_released() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_PR2, MT_MOVE_DIR_STOP, 0); + } +} + +void RotaComWidget::on_buttonReversal_4_pressed() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_PR2, MT_MOVE_DIR_NEGA, m_speedLevel); + } +} + +void RotaComWidget::on_buttonReversal_4_released() +{ + if(g_pMachine != NULL) + { + g_pMachine->motoMove(MT_PR2, MT_MOVE_DIR_STOP, 0); + } +} + +void RotaComWidget::on_pushButtonZeroCom7_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom7,7); +} + +void RotaComWidget::on_pushButtonZeroCom8_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom8,8); +} + +void RotaComWidget::on_pushButtonZeroCom9_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom9,9); +} + +void RotaComWidget::on_pushButtonZeroCom10_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom10,10); +} + +void RotaComWidget::on_pushButtonZeroCom11_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom11,11); +} + +void RotaComWidget::on_pushButtonZeroCom12_clicked() +{ + setCompensationAngle(ui->pushButtonZeroCom12,12); +} + +void RotaComWidget::slotSpeedLevel(int speedLevel) +{ + m_speedLevel = speedLevel; +} diff --git a/sharedviews/rotacomwidget.h b/sharedviews/rotacomwidget.h new file mode 100644 index 0000000..c70c985 --- /dev/null +++ b/sharedviews/rotacomwidget.h @@ -0,0 +1,90 @@ +#ifndef ROTACOMWIDGET_H +#define ROTACOMWIDGET_H + +#include +#include +#include "sharedviews/promptdialog.h" + +namespace Ui { +class RotaComWidget; +} + +class RotaComWidget : public QWidget +{ + Q_OBJECT + +public: + explicit RotaComWidget(QWidget *parent = 0); + ~RotaComWidget(); + int m_speedLevel; + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006();//初始化窗体控件为1024x600分辨率 + void initControlStyle();//初始化窗体控件样式 + + //设置橙色渐变底层按钮样式 + QString setOrangeGradientBottomStyle(QString str); + void setCompensationAngle(QPushButton *button, int idx); + +private slots: + void on_buttonOk_clicked(); + void on_buttonCancel_clicked(); + void on_pushButtonZeroCom1_clicked(); + void on_pushButtonZeroCom2_clicked(); + void on_pushButtonZeroCom3_clicked(); + void on_pushButtonZeroCom4_clicked(); + void on_pushButtonZeroCom5_clicked(); + void on_pushButtonZeroCom6_clicked(); + void on_buttonRotaZero_clicked(); + void on_buttonSinglePunch_clicked(); + void on_buttonChangeTool_clicked(); + void on_buttonJog_clicked(); + void on_buttonManualChange_clicked(); + void on_buttonChange_clicked(); + void on_buttonEnable_clicked(); + void on_buttonDisenable_clicked(); + void on_buttonChange_2_clicked(); + void on_buttonEnable_2_clicked(); + void on_buttonDisenable_2_clicked(); + void on_buttonChange_3_clicked(); + void on_buttonEnable_3_clicked(); + void on_buttonDisenable_3_clicked(); + void on_buttonChange_4_clicked(); + void on_buttonEnable_4_clicked(); + void on_buttonDisenable_4_clicked(); + void on_buttonForeward_pressed(); + void on_buttonForeward_released(); + void on_buttonReversal_pressed(); + void on_buttonReversal_released(); + void on_buttonForeward_2_pressed(); + void on_buttonForeward_2_released(); + void on_buttonReversal_2_pressed(); + void on_buttonReversal_2_released(); + void on_buttonForeward_3_pressed(); + void on_buttonForeward_3_released(); + void on_buttonReversal_3_pressed(); + void on_buttonReversal_3_released(); + void on_buttonForeward_4_pressed(); + void on_buttonForeward_4_released(); + void on_buttonReversal_4_pressed(); + void on_buttonReversal_4_released(); + void on_pushButtonZeroCom7_clicked(); + void on_pushButtonZeroCom8_clicked(); + void on_pushButtonZeroCom9_clicked(); + void on_pushButtonZeroCom10_clicked(); + void on_pushButtonZeroCom11_clicked(); + void on_pushButtonZeroCom12_clicked(); + +public slots: + void slotSpeedLevel(int speedLevel); + +signals: + void signalManualColorChange(); + +private: + Ui::RotaComWidget *ui; +}; + +#endif // ROTACOMWIDGET_H diff --git a/sharedviews/rotacomwidget.ui b/sharedviews/rotacomwidget.ui new file mode 100644 index 0000000..12879a3 --- /dev/null +++ b/sharedviews/rotacomwidget.ui @@ -0,0 +1,884 @@ + + + RotaComWidget + + + + 0 + 0 + 674 + 566 + + + + Form + + + + + 9 + 9 + 631 + 521 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 150 + 601 + 43 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 500 + 10 + 75 + 23 + + + + RotaZero + + + + + + 254 + 10 + 75 + 23 + + + + SingleP + + + + + + 173 + 10 + 75 + 23 + + + + CTool + + + + + + 336 + 10 + 75 + 23 + + + + Jog + + + + + + 417 + 10 + 75 + 23 + + + + ManualC + + + + + + 10 + 10 + 101 + 16 + + + + ManualAction: + + + + + + + 10 + 10 + 601 + 43 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 42 + 16 + + + + Needel: + + + + + + 91 + 10 + 75 + 23 + + + + 1 + + + + + + 173 + 10 + 75 + 23 + + + + 2 + + + + + + 254 + 10 + 75 + 23 + + + + 3 + + + + + + 336 + 10 + 75 + 23 + + + + 4 + + + + + + 417 + 10 + 75 + 23 + + + + 5 + + + + + + 499 + 10 + 75 + 23 + + + + 6 + + + + + + + 520 + 410 + 91 + 101 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 20 + 75 + 23 + + + + Set + + + + + + 10 + 60 + 75 + 23 + + + + CLose + + + + + + + 10 + 59 + 601 + 43 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 71 + 16 + + + + Com1Angel: + + + + + + 91 + 10 + 75 + 23 + + + + 1 + + + + + + 173 + 10 + 75 + 23 + + + + 2 + + + + + + 254 + 10 + 75 + 23 + + + + 3 + + + + + + 336 + 10 + 75 + 23 + + + + 4 + + + + + + 417 + 10 + 75 + 23 + + + + 5 + + + + + + 499 + 10 + 75 + 23 + + + + 6 + + + + + + + 10 + 200 + 601 + 43 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 500 + 10 + 75 + 23 + + + + Neg + + + + + + 260 + 10 + 75 + 23 + + + + Enable + + + + + + 180 + 10 + 75 + 23 + + + + Zero + + + + + + 340 + 10 + 75 + 23 + + + + Disable + + + + + + 420 + 10 + 75 + 23 + + + + Pos + + + + + + 10 + 10 + 121 + 16 + + + + PunchingSpindle1: + + + + + + + 0 + 250 + 611 + 43 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 510 + 10 + 75 + 23 + + + + Neg + + + + + + 270 + 10 + 75 + 23 + + + + Enable + + + + + + 190 + 10 + 75 + 23 + + + + Zero + + + + + + 350 + 10 + 75 + 23 + + + + Disable + + + + + + 430 + 10 + 75 + 23 + + + + Pos + + + + + + 20 + 10 + 101 + 16 + + + + PunchingSpindle2: + + + + + + + 0 + 300 + 611 + 43 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 510 + 10 + 75 + 23 + + + + Neg + + + + + + 270 + 10 + 75 + 23 + + + + Enable + + + + + + 190 + 10 + 75 + 23 + + + + Zero + + + + + + 350 + 10 + 75 + 23 + + + + Disable + + + + + + 430 + 10 + 75 + 23 + + + + Pos + + + + + + 20 + 10 + 101 + 16 + + + + PunRotaryMotor1: + + + + + + + 0 + 350 + 611 + 43 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 510 + 10 + 75 + 23 + + + + Neg + + + + + + 270 + 10 + 75 + 23 + + + + Enable + + + + + + 190 + 10 + 75 + 23 + + + + Zero + + + + + + 350 + 10 + 75 + 23 + + + + Disable + + + + + + 430 + 10 + 75 + 23 + + + + Pos + + + + + + 20 + 10 + 101 + 16 + + + + PunRotaryMotor2: + + + + + + + 10 + 0 + 42 + 16 + + + + debugging: + + + + + + 10 + 110 + 601 + 43 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 54 + 16 + + + + Com2Angel: + + + + + + 91 + 10 + 75 + 23 + + + + 1 + + + + + + 173 + 10 + 75 + 23 + + + + 2 + + + + + + 254 + 10 + 75 + 23 + + + + 3 + + + + + + 336 + 10 + 75 + 23 + + + + 4 + + + + + + 417 + 10 + 75 + 23 + + + + 5 + + + + + + 499 + 10 + 75 + 23 + + + + 6 + + + + + + + + diff --git a/sharedviews/sensorinputwidget.cpp b/sharedviews/sensorinputwidget.cpp new file mode 100644 index 0000000..b544edc --- /dev/null +++ b/sharedviews/sensorinputwidget.cpp @@ -0,0 +1,571 @@ +#include "sensorinputwidget.h" +#include "ui_sensorinputwidget.h" + +SensorInputWidget::SensorInputWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::SensorInputWidget), + m_itemPerPage(24), + m_pMachine(NULL), + m_pGetSenserTimer(NULL) +{ + ui->setupUi(this); + + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + + m_sensorsTypeIdx = -1; + + m_pMachine = g_pMachine; + m_pGetSenserTimer = new QTimer(this); + connect(m_pGetSenserTimer, SIGNAL(timeout()), + this, SLOT(slotOnRefTimer())); + + initData(); + initControl(); + refreshUi(); +} + +SensorInputWidget::~SensorInputWidget() +{ + delete m_pGetSenserTimer; + delete ui; +} + +void SensorInputWidget::initData() +{ + m_curPage = 0; // 当前页 + m_allSensorItemList.clear(); + m_sensorItemList.clear(); + m_itemList.clear(); + m_sensorsDat.clear(); +} + +//初始化窗体控件,包括位置、尺寸、样式 +void SensorInputWidget::initControl() +{ + m_SensorBtnList.append(ui->button1); + m_SensorBtnList.append(ui->button2); + m_SensorBtnList.append(ui->button3); + m_SensorBtnList.append(ui->button4); + m_SensorBtnList.append(ui->button5); + ui->button6->setVisible(false); + ui->button7->setVisible(false); + ui->button8->setVisible(false); + ui->button9->setVisible(false); + ui->button10->setVisible(false); + ui->button11->setVisible(false); + ui->button12->setVisible(false); + + if(g_emResolut == resolution1910)//1920x1080的分辨率每页显示12个条目 + { + ui->button6->setVisible(true); + ui->button7->setVisible(true); + ui->button8->setVisible(true); + ui->button9->setVisible(true); + ui->button10->setVisible(true); + ui->button11->setVisible(true); + ui->button12->setVisible(true); + m_SensorBtnList.append(ui->button6); + m_SensorBtnList.append(ui->button7); + m_SensorBtnList.append(ui->button8); + m_SensorBtnList.append(ui->button9); + m_SensorBtnList.append(ui->button10); + m_SensorBtnList.append(ui->button11); + m_SensorBtnList.append(ui->button12); + } + else if(g_emResolut == resolution1006)//1024x600的分辨率每页显示8个条目 + { + ui->button6->setVisible(true);//显示 + ui->button7->setVisible(true); + ui->button8->setVisible(true); + m_SensorBtnList.append(ui->button6); + m_SensorBtnList.append(ui->button7); + m_SensorBtnList.append(ui->button8); + } + + m_SensorBtnList.append(ui->button1_2); + m_SensorBtnList.append(ui->button2_2); + m_SensorBtnList.append(ui->button3_2); + m_SensorBtnList.append(ui->button4_2); + m_SensorBtnList.append(ui->button5_2); + ui->button6_2->setVisible(false); + ui->button7_2->setVisible(false); + ui->button8_2->setVisible(false); + ui->button9_2->setVisible(false); + ui->button10_2->setVisible(false); + ui->button11_2->setVisible(false); + ui->button12_2->setVisible(false); + + if(g_emResolut == resolution1910)//1920x1080的分辨率每页显示12个条目 + { + ui->button6_2->setVisible(true); + ui->button7_2->setVisible(true); + ui->button8_2->setVisible(true); + ui->button9_2->setVisible(true); + ui->button10_2->setVisible(true); + ui->button11_2->setVisible(true); + ui->button12_2->setVisible(true); + m_SensorBtnList.append(ui->button6_2); + m_SensorBtnList.append(ui->button7_2); + m_SensorBtnList.append(ui->button8_2); + m_SensorBtnList.append(ui->button9_2); + m_SensorBtnList.append(ui->button10_2); + m_SensorBtnList.append(ui->button11_2); + m_SensorBtnList.append(ui->button12_2); + } + else if(g_emResolut == resolution1006)//1024x600的分辨率每页显示8个条目 + { + ui->button6_2->setVisible(true); + ui->button7_2->setVisible(true); + ui->button8_2->setVisible(true); + m_SensorBtnList.append(ui->button6_2); + m_SensorBtnList.append(ui->button7_2); + m_SensorBtnList.append(ui->button8_2); + } + + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + + initControlStyle();//初始化窗体控件样式 +} + +//初始化窗体控件为1920x1080分辨率 +void SensorInputWidget::initResolution1910() +{ + this->resize(1920,1080); + ui->frameBack->setGeometry(0,0,1920,1080); + ui->buttonTypeLogo->setGeometry(128,66,78,78); + ui->labelMainTitle->setGeometry(226,60,1000,48); + ui->labelSubTitle->setGeometry(302,112,1000,36); + + QRect rectName(34,2,58,58); + QRect rectValue(74,0,660,58);//传感器信号的名称 + for(int i = 0; i < 2; i++) + { + for(int j = 0; j < m_itemPerPage/2; j++) + { + m_SensorBtnList[i*(m_itemPerPage/2) + j]->setGeometry(295+i*630,180+j*64,660,58); + m_SensorBtnList[i*(m_itemPerPage/2) + j]->initLeftNameRightValue(rectName,rectValue); + } + } + + ui->framePageBtn->setGeometry(1120,990,800,70); + ui->labelPage->setGeometry(32,1008,400,40); + ui->buttonPgUp->setGeometry(200,0,168,70); + ui->buttonPgDn->setGeometry(400,0,168,70); + ui->buttonBack->setGeometry(600,0,168,70); +} + +//初始化窗体控件为1024x600分辨率 +void SensorInputWidget::initResolution1006() +{ + m_itemPerPage = m_itemPerPage - 8; + this->resize(1024,600); + ui->frameBack->setGeometry(0,0,1024,600); + ui->buttonTypeLogo->setGeometry(25,30,60,60); + ui->labelMainTitle->setGeometry(100,30,200,24); + ui->labelSubTitle->setGeometry(130,64,300,21); + + QRect rectName(35,0,53,53); + QRect rectValue(50,0,380,53); + for(int i = 0; i < 2; i++) + { + for(int j = 0; j < m_itemPerPage/2; j++) + { + m_SensorBtnList[i*(m_itemPerPage/2) + j]->setGeometry(140+i*340,94+j*53,380,53); + m_SensorBtnList[i*(m_itemPerPage/2) + j]->initLeftNameRightValue(rectName,rectValue); + } + } + + ui->framePageBtn->setGeometry(700,545,600,45); + ui->labelPage->setGeometry(20,550,102,45); + ui->buttonPgUp->setGeometry(0,0,96,40); + ui->buttonPgDn->setGeometry(106,0,96,40); + ui->buttonBack->setGeometry(212,0,96,40); +} + +//初始化窗体控件样式 +void SensorInputWidget::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + //背景图 + QString frameBackImgPath = setControlStyle.getSharedStyleSheet(); + ui->frameBack->setStyleSheet(frameBackImgPath); + ui->labelMainTitle->setFont(fontBold_1); + ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelSubTitle->setFont(fontNormal_1); + ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelPage->setFont(fontNormal_1); + ui->labelPage->setStyleSheet(LABELWHITESTYLE); + + for(int i = 0; i < m_SensorBtnList.size(); i++) + { + m_SensorBtnList[i]->setEnabled(false); + m_SensorBtnList[i]->setLabelValueFont(fontNormal_1); + m_SensorBtnList[i]->setLabelNameFont(fontBold_1); + } + + //四个按钮样式表一样 + ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); + + ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); + + ui->buttonBack->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonBack->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonBack->objectName()),12); +} + +//设置类型图标 +void SensorInputWidget::setTypeLogo(QString tStyle) +{ + ui->buttonTypeLogo->setUnPreBtnLogo(tStyle); +} + +void SensorInputWidget::setMainTitle(QString title) +{ + ui->labelMainTitle->setText(title); +} + +//设置副title +void SensorInputWidget::setSubTitle(QString title) +{ + ui->labelSubTitle->setText(title); +} + +int SensorInputWidget::addSensorItems(QList itemList) +{ + m_allSensorItemList.append(itemList); + return (m_allSensorItemList.size() - itemList.size()); +} + +void SensorInputWidget::setButtonIdx(int idx) +{ + m_itemList.clear(); + int val = STYPE1; + idx -= 1; + if(idx >= 0) + { + m_sensorsTypeIdx = val << idx; + } + refreshUi(); +} + +void SensorInputWidget::setMachine(Machine *pMc) +{ + g_pMachine = pMc; +} + +void SensorInputWidget::refreshUi() +{ + // QList itemList; + // itemList.clear(); + +#if(0)//测试用 + m_SensorBtnList[0]->setLabelValue("11111"); + m_SensorBtnList[0]->setLabelName("■"); +#endif + + if(m_itemPerPage <= 0) + { + return; + } + + if(m_sensorsTypeIdx == -1)//传感器信号不分类 + { + m_itemList.clear(); + m_itemList.append(m_sensorItemList);//根据下位机位图过滤的传感器信号列表放在itemList里 + } + else + { + getItemList(m_itemList); //根据不同主板加载的分类传感器信号 + } + + //----------- + int itemNum, pageNums; + itemNum = m_itemList.size(); + + //qDebug()<< "RefreshUi m_sensorItemList = "< pageNums) // 当前页 + { + m_curPage = pageNums; + } + if (m_curPage <= 1) + { + m_curPage = 1; + } + + // 刷新文本 + int i, itemidx; + itemidx = (m_curPage-1) * m_itemPerPage; + for (i = 0; i < m_itemPerPage; i++) + { + if (itemidx < itemNum) + { + if(m_itemList[itemidx].m_name.length() <= 0)//字符长度为空 + { + //QString str = "byte:" + QString::number(itemList[itemidx].m_byte_offset) + " bit:" + QString::number(m_sensorItemList[itemidx].m_bit_offset); + QString str = "byte:" + QString::number(m_itemList[itemidx].m_byte_offset) + " bit:" + QString::number(m_itemList[itemidx].m_bit_offset); + m_SensorBtnList.at(i)->setLabelValue(str); + } + else + { + m_SensorBtnList.at(i)->setLabelValue(m_itemList.at(itemidx).m_name); + } + m_SensorBtnList.at(i)->show(); + } + else + { + m_SensorBtnList.at(i)->hide(); + } + itemidx++; + } + + // 刷新信号 + refreshSensors(); + + // 刷新按钮 + if (m_curPage <= 1) + { + ui->buttonPgUp->setEnabled(false); + } + else + { + ui->buttonPgUp->setEnabled(true); + } + if (m_curPage >= pageNums) + { + ui->buttonPgDn->setEnabled(false); + } + else + { + ui->buttonPgDn->setEnabled(true); + } + + if(pageNums == 0) + { + m_curPage = 0; + } + + // 页信息 + QString str = tr("pageNum: ") + QString("%1/%2").arg(m_curPage).arg(pageNums);//页数: + ui->labelPage->setText(str); +} + +void SensorInputWidget::refreshSensors() +{ + QTextCodec *cod = QTextCodec::codecForLocale(); + if(m_sensorsDat.size() <= 0) + { + return; + } + + //-------------------------- + int itemNum, pageNums; + // itemNum = m_sensorItemList.size();//m_sensorItemList + itemNum = m_itemList.size(); + pageNums = (itemNum+m_itemPerPage-1) / m_itemPerPage; + + if (m_curPage > pageNums) // 当前页 + { + m_curPage = pageNums; + } + if (m_curPage <= 1) + { + m_curPage = 1; + } + + // 刷新文本 + int i, itemidx; + itemidx = (m_curPage-1) * m_itemPerPage; + for (i = 0; i < m_itemPerPage; i++) + { + if (itemidx < itemNum) + { + //const SensorItem & item = m_sensorItemList.at(itemidx);//m_sensorItemList + const SensorItem & item = m_itemList.at(itemidx); + + int bytepos = item.m_byte_offset; + int bitinbyte = item.m_bit_offset; + + if ( bytepos >= 0 && + bitinbyte >= 0 && + bytepos < m_sensorsDat.size()) + { + u8 curbyte = m_sensorsDat.at(bytepos); + u8 mod = 0x01 << bitinbyte; + + if ((curbyte & mod) != 0) + { + m_SensorBtnList.at(i)->setLabelName(cod->toUnicode("■")); + } + else + { + m_SensorBtnList.at(i)->setLabelName(cod->toUnicode("□")); + } + } + else + { + m_SensorBtnList.at(i)->setText(""); + } + } + else + { + break; + } + itemidx++; + } +} + +void SensorInputWidget::getItemList(QList &ItemList) +{ + ItemList.clear(); + + for(int i = 0; i < m_sensorItemList.size(); i++) + { + int type = m_sensorItemList[i].m_type; + + if((type & m_sensorsTypeIdx) != 0 && (type != -1)) + { + ItemList.append(m_sensorItemList[i]);//筛选好的传感器信号,分类传感器信号 + } + } +} + +void SensorInputWidget::show() +{ + m_sensorsDat.clear(); + + if (g_pMachine != NULL) + { //如果没有传感器信号位图 + if (g_pMachine->isSensorBmpEn() == 0) + { + m_sensorItemList.clear(); + g_pMachine->getSensorEnBmpFromMachine();//读取传感器有效位图 + refreshUi(); + + qDebug("send GetSensorEnBmpFromMachine"); + } + } + + //emit(siEntrySensorScan()); + if (m_pGetSenserTimer != NULL) + { + m_pGetSenserTimer->start(500);//读取传感器信号 + } + + if (g_pMachine != NULL) + { + g_pMachine->entrySensorScan(); + } + + qDebug("SensorInputWidget::show"); + + QWidget::show(); +} + +void SensorInputWidget::hide() +{ + if (m_pGetSenserTimer != NULL) + { + m_pGetSenserTimer->stop(); + } + + //emit(siExitSensorScan()); + + if (g_pMachine != NULL) + { + g_pMachine->exitSensorScan(); + } + + qDebug("SensorInputWidget::hide"); + + QWidget::hide(); +} + +void SensorInputWidget::slotRefSensorBitmap(SensorsBitmap map) +{ + qDebug("SlotRefSensorBitmap"); + m_sensorItemList.clear(); + + if (g_pMachine != NULL) + { + if (g_pMachine->isSensorBmpEn() != 0) + { + QByteArray sensorsbmp; + sensorsbmp.resize(sizeof(SensorsBitmap)); + memcpy(sensorsbmp.data(), &map, sizeof(SensorsBitmap)); + + int ssize = m_allSensorItemList.size() ;//m_allSensorItemList 8192个 机型里的所有主板的传感器信号 + int fsize = sensorsbmp.size(); + int size = (ssize < fsize) ? ssize:fsize; + for (int i = 0; i < size; i++) + { + unsigned char fdat = sensorsbmp.at(i); + for (int j = 0; j < 8; j++) + { + const SensorItem & item = m_allSensorItemList.at( i*8 + j); + if ((fdat & 0x01) != 0) + { + m_sensorItemList.append(item);//根据下位机过滤好的传感器列表 + } + fdat >>= 1 ; + } + } + + qDebug("m_sensorItemList.size=%d", m_sensorItemList.size()); + refreshUi(); + } + } +} +//接收传感器状态改变的槽函数 +void SensorInputWidget::slotRefSensorsDat(SensorsBitmap dat) +{ + // 读取信号 + m_sensorsDat.clear(); + m_sensorsDat.resize(sizeof(SensorsBitmap)); + memcpy(m_sensorsDat.data(),&dat,sizeof(SensorsBitmap)); + + // 更新视图 + refreshSensors(); +} + +void SensorInputWidget::slotOnRefTimer() +{ + if (g_pMachine != NULL) + { + g_pMachine->getSensorsFromMachine(); // 读取一次信号 + } +} + +void SensorInputWidget::on_buttonPgUp_clicked() +{ + m_curPage--; + refreshUi(); +} + +void SensorInputWidget::on_buttonPgDn_clicked() +{ + m_curPage++; + refreshUi(); +} + +void SensorInputWidget::on_buttonBack_clicked() +{ + this->hide(); +} diff --git a/sharedviews/sensorinputwidget.h b/sharedviews/sensorinputwidget.h new file mode 100644 index 0000000..628aed3 --- /dev/null +++ b/sharedviews/sensorinputwidget.h @@ -0,0 +1,89 @@ +#ifndef SENSORINPUTWIDGET_H +#define SENSORINPUTWIDGET_H + +#include +#include +#include + +#include "items/sensoritem.h" +#include "setcontrolstyle.h" +#include "mybutton.h" +#include "mctype/mainwidgetfunction.h" +#include +#include + +namespace Ui { +class SensorInputWidget; +} + +class SensorInputWidget : public QWidget +{ + Q_OBJECT + +public: + explicit SensorInputWidget(QWidget *parent = 0); + ~SensorInputWidget(); + +private: + Ui::SensorInputWidget *ui; + +public: + void initData(); + void setTypeLogo(QString tStyle); + void setMainTitle(QString title); + void setSubTitle(QString title); + int addSensorItems(QList itemList); + void setButtonIdx(int idx = -1); + void setMachine(Machine *pMc);//设置不同板卡号对应的不同Machine + +public: + void clear(); + +signals: + //void siEntrySensorScan(); + //void siExitSensorScan(); + +public slots: + void slotRefSensorBitmap(SensorsBitmap map); + void slotRefSensorsDat(SensorsBitmap dat); + +private slots: + void slotOnRefTimer(); + void on_buttonPgUp_clicked(); + void on_buttonPgDn_clicked(); + void on_buttonBack_clicked(); + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006();//初始化窗体控件为1024x600分辨率 + void initControlStyle();//初始化窗体控件样式 + +private: + void refreshUi(); + void refreshSensorBtn(); + void refreshSensors(); + +private: + int m_itemPerPage; + QString m_title; + int m_curPage; + QList m_allSensorItemList;//全部传感器信号列表 8196个 + QList m_sensorItemList;//根据下位机位图过滤的传感器信号列表 + QList m_itemList;//根据不同主板筛选传感器信号(20220418-rq) + QByteArray m_sensorsDat; + + Machine *m_pMachine; + QTimer * m_pGetSenserTimer; + QList m_SensorBtnList; + int m_sensorsTypeIdx; // 传感器板卡的索引 + +private: + void getItemList(QList & ItemList); + +public slots: + void show(); + void hide(); +}; + +#endif // SENSORINPUTWIDGET_H diff --git a/sharedviews/sensorinputwidget.ui b/sharedviews/sensorinputwidget.ui new file mode 100644 index 0000000..1efd0c0 --- /dev/null +++ b/sharedviews/sensorinputwidget.ui @@ -0,0 +1,680 @@ + + + SensorInputWidget + + + + 0 + 0 + 1024 + 600 + + + + Form + + + background-color: rgb(139, 139, 139); + + + + + 60 + 120 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 60 + 160 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 30 + 10 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + + + + 60 + 520 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 60 + 240 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 60 + 200 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 110 + 10 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Sensor + + + + + + 60 + 400 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 60 + 280 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 60 + 480 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 0 + 0 + 1024 + 600 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 60 + 80 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 60 + 440 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 40 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Sensor + + + + + + 20 + 570 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + PageNums: 1/1 + + + + + + 60 + 360 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 60 + 320 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 750 + 560 + 241 + 31 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 80 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 160 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 0 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + + 520 + 120 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 400 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 280 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 80 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 440 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 520 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 480 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 240 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 160 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 360 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 200 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 520 + 320 + 440 + 32 + + + + Qt::NoFocus + + + + + + + + + frameBack + buttonTypeLogo + labelMainTitle + labelSubTitle + labelPage + framePageBtn + button2 + button5 + button8 + button1 + button4 + button12 + button3 + button7 + button11 + button6 + button10 + button9 + button2_2 + button9_2 + button6_2 + button1_2 + button10_2 + button12_2 + button11_2 + button5_2 + button3_2 + button8_2 + button4_2 + button7_2 + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/setcontrolstyle.cpp b/sharedviews/setcontrolstyle.cpp new file mode 100644 index 0000000..eada376 --- /dev/null +++ b/sharedviews/setcontrolstyle.cpp @@ -0,0 +1,207 @@ +#include "setcontrolstyle.h" + +SetControlStyle::SetControlStyle(QObject *parent) : QObject(parent) +{ + m_uiName.clear(); +} + +void SetControlStyle::setUiName(QString uiName) +{ + m_uiName = uiName; +} + +QString SetControlStyle::getStyleSheet(QString controlName) +{ + //样式表格式 <分辨率><主题><窗体名称><图片名称> + //例如图片路径 :/images/MainWidget/ButtonConnect_logo.png + QString style; + style = "background-color: rgba(245, 245, 245, 0);color: rgb(255, 255, 255);border:0px;border-image:url(:/images/"; + + style += m_uiName + "/"; + style += controlName + "_logo.png);"; + + return style; +} + +QString SetControlStyle::getStyleSheet1(QString controlName) +{ + //样式表格式 <分辨率><主题><窗体名称><图片名称> + //例如图片路径 :/images/1920x1080/theme1/EmbMainWidget/ButtonConnect_logo.png + QString style; + style = "background-color: rgba(245, 245, 245, 0);color: rgb(255, 255, 255);border:0px;background-image:url(:/images/"; + + //分辨率 + QString str; + str.clear(); + switch (g_emResolut) + { + case resolution1910: + str = "_1910"; + break; + case resolution1006: + str = "_1006"; + break; + default: + break; + } + + style += m_uiName + "/"; + style += controlName + str + "_logo.png);"; + + return style; +} + +QString SetControlStyle::getBorderImageStyleSheet(QString controlName) +{ + //样式表格式 <分辨率><主题><窗体名称><图片名称> + //例如图片路径 :/images/1920x1080/theme1/EmbMainWidget/ButtonConnect_logo.png + QString style; + style = "background-color: rgba(245, 245, 245, 0);color: rgb(255, 255, 255);border:0px;background-image:url(:/images/"; + + //分辨率 + QString str; + str.clear(); + switch (g_emResolut) + { + case resolution1910: + str = "_1910"; + break; + case resolution1006: + str = "_1006"; + break; + default: + break; + } + + style += m_uiName + "/"; + style += controlName + str + "_logo.png);"; + + return style; +} + +QString SetControlStyle::getTopStyleSheet(QString controlName) +{ + //样式表格式 <分辨率><主题><窗体名称><图片名称> + //例如 :/images/1920x1080/theme1/EmbMainWidget/buttonPatternSet_logo + QString style = ":/images/"; + + style += m_uiName + "/"; + style += controlName + "_logo.png"; + + return style; +} + +QString SetControlStyle::getBottomStyleSheet(QString parentName) +{ + //样式表格式 <分辨率><主题><窗体名称><图片前缀> + //例如 :/images/EmbMainWidget/frameMainFunction + QString style = ":/images/"; + + style += m_uiName + "/"; + style += parentName; + + return style; +} + +QString SetControlStyle::getBottomStyleSheet1(QString parentName) +{ + //样式表格式 <分辨率><主题><窗体名称><图片前缀> + //例如 :/images/EmbMainWidget/frameMainFunction + QString style = ":/images/"; + + QString str; + str.clear(); + + switch (g_emResolut) + { + case resolution1910: + str = "1910_"; + break; + case resolution1006: + str = "1006_"; + break; + default: + break; + } + + style += m_uiName +"/" + str; + style += parentName; + + return style; +} + +QString SetControlStyle::getBtnStyleSheet(QString iconName) +{ + QString path = ":/images/"; + + path += m_uiName + "/"; + path += iconName; + + QString style = "QPushButton{"+QString(LABELNAVYBLUESTYLE)+"border-image: url(" + path + "_p0.png" + ");border:0px;}"; + style += "QPushButton:pressed{border-image: url(" + path + "_p1.png" + ");}"; + style += "QPushButton:disabled{border-image: url(" + path + "_p2.png" + ");}"; + + return style; +} + +QString SetControlStyle::getSharedStyleSheet() +{ + //样式表格式 <分辨率><主题><窗体名称><图片名称> + //例如图片路径 :/images/1920x1080/theme1/EmbMainWidget/ButtonConnect_logo.png + QString style; + style = "background-color: rgba(245, 245, 245, 0);color: rgb(255, 255, 255);border:0px;background-image:url(:/images/"; + + //分辨率 + QString str; + str.clear(); + switch (g_emResolut) + { + case resolution1910: + str = "_1910"; + break; + case resolution1006: + str = "_1006"; + break; + default: + break; + } + + style += "SharedIcon/WidgetFrameBack"+ str +"_logo.png);"; + + return style; +} + +QString SetControlStyle::getSharedTopStyleSheet(QString controlName) +{ + //样式表格式 <分辨率><主题><窗体名称><图片名称> + //例如 :/images/1920x1080/theme1/EmbMainWidget/buttonPatternSet_logo + QString style = ":/images/"; + style += "SharedIcon/"; + style += controlName + "_logo.png"; + + return style; +} + +QString SetControlStyle::getSharedBottomStyleSheet(QString parentName) +{ + //样式表格式 <分辨率><主题><窗体名称><图片前缀> + //例如 :/images/1920x1080/theme1/EmbMainWidget/frameMainFunction + QString style = ":/images/"; + style += "SharedIcon/"; + style += parentName; + + return style; +} + +QString SetControlStyle::getSharedBtnStyleSheet(QString iconName) +{ + QString path = ":/images/"; + path += "SharedIcon/"; + path += iconName; + + QString style = "QPushButton{"+QString(LABELNAVYBLUESTYLE)+"border-image: url(" + path + "_p0.png" + ");border:0px;}"; + style += "QPushButton:pressed{border-image: url(" + path + "_p1.png" + ");}"; + style += "QPushButton:disabled{border-image: url(" + path + "_p2.png" + ");}"; + + return style; +} diff --git a/sharedviews/setcontrolstyle.h b/sharedviews/setcontrolstyle.h new file mode 100644 index 0000000..f8493f3 --- /dev/null +++ b/sharedviews/setcontrolstyle.h @@ -0,0 +1,37 @@ +#ifndef SETCONTROLSTYLE_H +#define SETCONTROLSTYLE_H + +#include +#include +#include "main.h" + +class SetControlStyle : public QObject +{ + Q_OBJECT +public: + explicit SetControlStyle(QObject *parent = 0); + +private: + QString m_uiName;//窗体名称 + +public: + void setUiName(QString uiName);//设置窗体名称 + QString getStyleSheet(QString controlName);//获取普通按钮样式表 + QString getStyleSheet1(QString controlName);//获取样式表 + QString getBorderImageStyleSheet(QString controlName);//获取九宫格frame样式表 + QString getTopStyleSheet(QString controlName);//获取自定义按钮顶层样式表 + QString getBottomStyleSheet(QString parentName);//获取自定义按钮底层样式表 + QString getBottomStyleSheet1(QString parentName);//获取自定义按钮底层样式表 + QString getBtnStyleSheet(QString iconName);//获取普通按钮样式表(字符输入) + + QString getSharedStyleSheet();//获取普通按钮样式表 + QString getSharedTopStyleSheet(QString controlName);//获取自定义按钮顶层样式表 + QString getSharedBottomStyleSheet(QString parentName);//获取自定义按钮底层样式表 + QString getSharedBtnStyleSheet(QString iconName);//获取普通按钮样式表(字符输入) + +signals: + +public slots: +}; + +#endif // SETCONTROLSTYLE_H diff --git a/sharedviews/setworkarea.cpp b/sharedviews/setworkarea.cpp new file mode 100644 index 0000000..62f2e19 --- /dev/null +++ b/sharedviews/setworkarea.cpp @@ -0,0 +1,194 @@ +#include "setworkarea.h" +#include "ui_setworkarea.h" + +SetWorkArea::SetWorkArea(QWidget *parent) : + QWidget(parent), + ui(new Ui::SetWorkArea) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::NonModal );//用以设置窗口模态类型 ,ApplicationModal阻塞整个应用程序的所有窗口 + initWidget(); + initControl(); +} + +SetWorkArea::~SetWorkArea() +{ + delete ui; +} + +void SetWorkArea::initWidget() +{ + m_headValue= 0; + m_area = 2; + ui->frameWorkArea->show(); + + //蓝色 + buttonStyle1 = "QPushButton{outline: none;color:rgb(10,10,10);background-color:rgb(0,151,226);border:0px solid rgb(0,0,0);border-style:inset;border-radius:5px;}"; + //白色 + buttonStyle2 = "QPushButton{outline: none;color:rgb(10,10,10);background-color:rgb(250,250,250);border:0px solid rgb(0,0,0);border-style:inset;border-radius:5px;}"; + ui->buttonX1->setText(tr("X +")); + ui->buttonX2->setText(tr("X -")); + ui->buttonY1->setText(tr("Y +")); + ui->buttonY2->setText(tr("Y -")); + + ui->buttonX1->setStyleSheet(buttonStyle1);//初始化默认都是白色,根据从主控上读上来的当前位置值,显示哪个是蓝色 + ui->buttonX2->setStyleSheet(buttonStyle2); + ui->buttonY1->setStyleSheet(buttonStyle2); + ui->buttonY2->setStyleSheet(buttonStyle2); +} + +void SetWorkArea::initControl() +{ + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + initControlStyle();//初始化窗体控件样式 +} +void SetWorkArea::initResolution1910() +{ + //上状态栏 + this->resize(896,497); + this->move((1920-this->width())/2,(1080-this->height())/2); + + ui->frameBack->setGeometry(0,0,946,564); + ui->labelTitle->setGeometry(40,2,754,56); + //设置可移动区域 + ui->frameWorkArea->setGeometry(40,78,904,340); + ui->buttonX1->setGeometry(300,110,160,58);//x+ + ui->buttonX2->setGeometry(10,110,160,58);//x- + ui->buttonY1->setGeometry(150,10,160,58);//y+ + ui->buttonY2->setGeometry(150,205,160,58);//y- + + ui->buttonOk->setGeometry(522,400,174,78); + ui->buttonCancel->setGeometry(704,400,174,78); +} + +void SetWorkArea::initResolution1006() +{ + //上状态栏 + + this->resize(480,268); + this->move((1024-this->width())/2,(600-this->height())/2); + + ui->frameBack->setGeometry(0,0,508,304); + ui->labelTitle->setGeometry(5,-10,400,56); + + ui->frameWorkArea->setGeometry(40,58,440,161); + ui->buttonX1->setGeometry(170,60,70,38); + ui->buttonX2->setGeometry(10,60,70,38); + ui->buttonY1->setGeometry(90,10,70,38);//y+ + ui->buttonY2->setGeometry(90,120,70,38); + + ui->buttonOk->setGeometry(274,216,96,40); + ui->buttonCancel->setGeometry(380,216,96,40); +} + +//初始化窗体控件样式 +void SetWorkArea::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + //设置控件图标 + //背景图 + //ui->SetWorkArea->setStyleSheet(TRANSPARENTSTYLE); + // ui->frameWorkArea->setStyleSheet(TRANSPARENTSTYLE); + //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->frameWorkArea->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonX1->setFont(fontNormal_1); + ui->buttonX2->setFont(fontNormal_1); + ui->buttonY1->setFont(fontNormal_1); + ui->buttonY2->setFont(fontNormal_1); + + ui->buttonOk->setWhiteBlueBottomStyle(); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()+"_1"),12); + ui->buttonCancel->setWhiteBlueBottomStyle(); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()+"_1"),12); +} +void SetWorkArea::setHead(int m_head) +{ + m_headValue= m_head; +} +//设置标题 +void SetWorkArea::setTitleStr(QString str) +{ + ui->labelTitle->setText(str); +} + +void SetWorkArea::show() +{ + QWidget::show(); +} + +void SetWorkArea::on_buttonCancel_clicked() +{ + + this->hide(); +} + +void SetWorkArea::on_buttonOk_clicked() +{ + if(g_pMachine != NULL) + { + g_pMachine->manualAction(SET_WORK_AREA,m_headValue,m_area); + } + + //this->hide(); +} + +//X+ +void SetWorkArea::on_buttonX1_clicked() +{ + ui->buttonX1->setStyleSheet(buttonStyle1); + ui->buttonX2->setStyleSheet(buttonStyle2); + ui->buttonY1->setStyleSheet(buttonStyle2); + ui->buttonY2->setStyleSheet(buttonStyle2); + m_area = 2; +} + +//Y+ +void SetWorkArea::on_buttonY1_clicked() +{ + ui->buttonX1->setStyleSheet(buttonStyle2); + ui->buttonX2->setStyleSheet(buttonStyle2); + ui->buttonY1->setStyleSheet(buttonStyle1); + ui->buttonY2->setStyleSheet(buttonStyle2); + m_area = 4; +} + +//Y- +void SetWorkArea::on_buttonY2_clicked() +{ + ui->buttonX1->setStyleSheet(buttonStyle2); + ui->buttonX2->setStyleSheet(buttonStyle2); + ui->buttonY1->setStyleSheet(buttonStyle2); + ui->buttonY2->setStyleSheet(buttonStyle1); + m_area = 3; +} + +void SetWorkArea::on_buttonX2_clicked() +{ + ui->buttonX1->setStyleSheet(buttonStyle2); + ui->buttonX2->setStyleSheet(buttonStyle1); + ui->buttonY1->setStyleSheet(buttonStyle2); + ui->buttonY2->setStyleSheet(buttonStyle2); + m_area =1; +} diff --git a/sharedviews/setworkarea.h b/sharedviews/setworkarea.h new file mode 100644 index 0000000..c2405e1 --- /dev/null +++ b/sharedviews/setworkarea.h @@ -0,0 +1,59 @@ +#ifndef SETWORKAREA_H +#define SETWORKAREA_H + +#include +#include +#include +#include "promptdialog.h" +#include "mybutton.h" +#include "setcontrolstyle.h" +//#include "Include/datafiledst.h" +#include "datafile/datafiledst.h" +#include "datafile/datafiledsr.h" +#include "mctype/mainwidgetfunction.h" +#include +namespace Ui { +class SetWorkArea; +} + +class SetWorkArea : public QWidget +{ + Q_OBJECT + +public: + explicit SetWorkArea(QWidget *parent = 0); + ~SetWorkArea(); + +private slots: + void on_buttonCancel_clicked(); + void on_buttonOk_clicked(); + void on_buttonX1_clicked(); + void on_buttonY1_clicked(); + void on_buttonY2_clicked(); + void on_buttonX2_clicked(); + +private: + Ui::SetWorkArea *ui; + +private: + int m_area; + int m_headValue; + + QString buttonStyle1; + QString buttonStyle2; + +private: + void initWidget(); + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006();//初始化窗体控件为1024x600分辨率 + void initControlStyle();//初始化窗体控件样式 + +public: + inline int getArea(){return m_area;} + void setHead(int m_head); + void setTitleStr(QString str);//设置标题 + void show(); +}; + +#endif // SETWORKAREA_H diff --git a/sharedviews/setworkarea.ui b/sharedviews/setworkarea.ui new file mode 100644 index 0000000..ec974af --- /dev/null +++ b/sharedviews/setworkarea.ui @@ -0,0 +1,216 @@ + + + SetWorkArea + + + + 0 + 0 + 473 + 274 + + + + Form + + + outline:none;border:0px;background-color: rgba(255, 255, 255, 0); + + + + + 0 + 0 + 472 + 274 + + + + background-color: rgba(245, 245, 245, 0);color: rgb(255, 255, 255); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 40 + 40 + 371 + 161 + + + + background-color: rgb(206, 206, 206); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 20 + 50 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 20 + 80 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 110 + 50 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + 110 + 80 + 75 + 23 + + + + QPushButton +{ +background-color:rgba(250, 250, 250);color: rgb(80, 80, 80);border:0px;border-radius:5px; +} +QPushButton:pressed +{ +background-color: rgba(199, 226, 255); +} + + + + + + + + + + 0 + 0 + 472 + 21 + + + + + + + Prompt + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 350 + 250 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + 250 + 250 + 71 + 31 + + + + Qt::NoFocus + + + + + + + + + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/sheetwidget.cpp b/sharedviews/sheetwidget.cpp new file mode 100644 index 0000000..95d3cc7 --- /dev/null +++ b/sharedviews/sheetwidget.cpp @@ -0,0 +1,540 @@ +#include "sheetwidget.h" +#include "ui_sheetwidget.h" + +SheetWidget::SheetWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::SheetWidget) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + + initWidget(); + initControl(); +} + +SheetWidget::~SheetWidget() +{ + delete ui; +} + +void SheetWidget::initWidget() +{ + m_btnPerPage = COLUMN_NUM * ROW_NUM; + m_curPages = 0; + m_pageNums = 1; + m_reType = RETYPE_X; + memset(&m_frameAngleParaValues, 0, sizeof(EmbMvAng)); + + m_sheetBtnList.clear(); + m_sheetHLabelList.clear(); + m_sheetVLabelList.clear(); + m_itemXList.clear(); + m_itemYList.clear(); + +#if(0) + for(int i = 0; i < MAX_VER; i++) + { + for(int j = 0; j < MAX_HOR; j++) + { + m_itemXList.append(0); + m_itemYList.append(1); + } + } +#endif + + //动框角度调节 + for(int i = 0; i < ROW_NUM; i++) + { + for(int j = 0; j < COLUMN_NUM; j++) + { + QPushButton *buttonSheet = new QPushButton(ui->frameSheet); + m_sheetBtnList.append(buttonSheet); + connect(buttonSheet, + SIGNAL(clicked()), + this, + SLOT(slotSheetBtnClicked()) + ); + } + } + + for(int i = 0; i < COLUMN_NUM; i++) + { + QLabel *labelH = new QLabel(this); + m_sheetHLabelList.append(labelH); + } + + for(int i = 0; i < ROW_NUM; i++) + { + QLabel *labelV = new QLabel(this); + m_sheetVLabelList.append(labelV); + } +} + +void SheetWidget::initControl() +{ + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + + initControlStyle();//初始化窗体控件样式 +} + +void SheetWidget::initResolution1910() +{ + this->resize(1920,1080); + ui->buttonTypeLogo->setGeometry(128,66,78,78); + ui->labelMainTitle->setGeometry(226,60,1000,44); + ui->labelSubTitle->setGeometry(302,112,1000,36); + + ui->frameBack->setGeometry(0,0,1920,1080); + ui->frameSheet->setGeometry(176,244,1680,880); + ui->labelXY->setGeometry(84,190,56,48); + + ui->frameRightUp->setGeometry(1468,92,406,72); + ui->buttonParaRestore->setGeometry(340,0,66,66); + ui->buttonSwitchXY->setGeometry(252,0,66,66); + + for(int i = 0; i < ROW_NUM; i++) + { + for(int j = 0; j < COLUMN_NUM; j++) + { + m_sheetBtnList[i*COLUMN_NUM+j]->setGeometry(3+j*140,3+i*88,140,88); + } + } + + for(int i = 0; i < COLUMN_NUM; i++) + { + m_sheetHLabelList[i]->setGeometry(206+i*140,160,140,72); + } + + for(int i = 0; i < ROW_NUM; i++) + { + m_sheetVLabelList[i]->setGeometry(36,245+i*88,140,88); + } + + ui->labelPageNum->setGeometry(32,1008,400,40); + ui->framePageBtn->setGeometry(920,990,1000,70); + ui->buttonPgUp->setGeometry(200,0,168,70); + ui->buttonPgDn->setGeometry(400,0,168,70); + ui->buttonOk->setGeometry(600,0,168,70); + ui->buttonCancel->setGeometry(800,0,168,70); +} + +void SheetWidget::initResolution1006() +{ + this->resize(1024,600); + ui->buttonTypeLogo->setGeometry(25,30,60,60); + ui->labelMainTitle->setGeometry(100,30,200,24); + ui->labelSubTitle->setGeometry(130,64,240,21); + + ui->frameBack->setGeometry(0,0,1024,600); + ui->frameSheet->setGeometry(102,138,994,484); + ui->labelXY->setGeometry(44,100,56,48); + + ui->frameRightUp->setGeometry(800,40,800,61); + ui->buttonParaRestore->setGeometry(150,0,50,50); + ui->buttonSwitchXY->setGeometry(93,0,50,50); + + for(int i = 0; i < ROW_NUM; i++) + { + for(int j = 0; j < COLUMN_NUM; j++) + { + m_sheetBtnList[i*COLUMN_NUM+j]->setGeometry(3+j*72,3+i*48,72,48); + } + } + + for(int i = 0; i < COLUMN_NUM; i++) + { + m_sheetHLabelList[i]->setGeometry(120+i*72,94,72,40); + } + + for(int i = 0; i < ROW_NUM; i++) + { + m_sheetVLabelList[i]->setGeometry(30,139+i*48,72,48); + } + + ui->labelPageNum->setGeometry(20,550,102,45); + ui->framePageBtn->setGeometry(489,545,600,40); + ui->buttonPgUp->setGeometry(106,0,96,40); + ui->buttonPgDn->setGeometry(212,0,96,40); + ui->buttonOk->setGeometry(318,0,96,40); + ui->buttonCancel->setGeometry(424,0,96,40); +} + +void SheetWidget::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + QString frameBackImgPath = setControlStyle.getStyleSheet(this->objectName()); + + ui->frameBack->setStyleSheet(frameBackImgPath); + ui->labelXY->setFont(fontNormal_1); + ui->labelXY->setStyleSheet(LABELWHITESTYLE); + ui->labelMainTitle->setFont(fontBold_1); + ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelSubTitle->setFont(fontNormal_1); + ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); + + ui->frameRightUp->setStyleSheet(TRANSPARENTSTYLE); + + ui->buttonParaRestore->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonParaRestore->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonParaRestore->objectName())); + + ui->buttonSwitchXY->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonSwitchXY->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonSwitchXY->objectName())); + + for(int i = 0; i < COLUMN_NUM; i++) + { + m_sheetHLabelList[i]->setText(QString::number(i+1)+"mm"); + m_sheetHLabelList[i]->setFont(fontNormal_1); + m_sheetHLabelList[i]->setStyleSheet(LABELWHITESTYLE); + m_sheetHLabelList[i]->setAlignment(Qt::AlignCenter); + m_sheetHLabelList[i]->setAlignment(Qt::AlignBottom); + } + + for(int i = 0; i < ROW_NUM; i++) + { + m_sheetVLabelList[i]->setText(QString::number((i+1)*100)+"rpm"); + m_sheetVLabelList[i]->setFont(fontNormal_1); + m_sheetVLabelList[i]->setStyleSheet(LABELWHITESTYLE); + m_sheetVLabelList[i]->setAlignment(Qt::AlignRight); + m_sheetVLabelList[i]->setAlignment(Qt::AlignCenter); + } + + ui->frameSheet->setStyleSheet(TRANSPARENTSTYLE); + for(int i = 0; i < ROW_NUM; i++) + { + for(int j = 0; j < COLUMN_NUM; j++) + { + m_sheetBtnList[i*COLUMN_NUM+j]->setStyleSheet(BUTTONSHEETSTYLE); + m_sheetBtnList[i*COLUMN_NUM+j]->setFont(fontNormal_1); + } + } + + ui->framePageBtn->setStyleSheet(TRANSPARENTSTYLE); + ui->labelPageNum->setFont(fontNormal_1); + ui->labelPageNum->setStyleSheet(LABELWHITESTYLE); + + //按钮样式表 + ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); + + ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); + + ui->buttonOk->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()),12); + + ui->buttonCancel->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()),12); +} + +//刷新参数数值 +void SheetWidget::refreshValues() +{ + m_itemXList.clear(); + m_itemYList.clear(); + + for(int i = 0; i < MAX_VER; i++) + { + for(int j = 0; j < MAX_HOR; j++) + { + u16 valueX = m_frameAngleParaValues.xMvStAng[i][j]; + u16 valueY = m_frameAngleParaValues.yMvStAng[i][j]; + + m_itemXList.append(valueX); + m_itemYList.append(valueY); + } + } +} + +//设置类型图标 +void SheetWidget::setTypeLogo(QString tStyle) +{ + ui->buttonTypeLogo->setUnPreBtnLogo(tStyle); +} + +//设置主title +void SheetWidget::setMainTitle(QString str) +{ + ui->labelMainTitle->setText(str); +} + +//设置副title +void SheetWidget::setSubTitle(QString str) +{ + ui->labelSubTitle->setText(str); +} + +//刷新界面显示 +void SheetWidget::refreshPageUi() +{ + QList itemList; + if(m_reType == RETYPE_X) + { + itemList = m_itemXList; + } + else + { + itemList = m_itemYList; + } + + ui->buttonSwitchXY->setEnabled(true); + ui->buttonParaRestore->setEnabled(true); + ui->buttonOk->setEnabled(true); + + int itemNum; + if (itemList.size() <= 0) + { + itemNum = 0; + + for (int i = 0; i < m_btnPerPage; i++) + { + m_sheetBtnList.at(i)->hide(); + } + ui->labelPageNum->setText(tr("PageNum: 0/0"));//页数: 0/0 + ui->buttonPgUp->setEnabled(false); + ui->buttonPgDn->setEnabled(false); + ui->buttonSwitchXY->setEnabled(false); + ui->buttonParaRestore->setEnabled(false); + ui->buttonOk->setEnabled(false); + return; + } + else + { + itemNum = itemList.size(); + } + + m_pageNums = (itemNum + m_btnPerPage - 1)/m_btnPerPage;// 计算页数 + if (m_curPages > m_pageNums)// 当前页 + { + m_curPages = m_pageNums; + } + if (m_curPages <= 1) + { + m_curPages = 1; + } + + int itemidx = (m_curPages - 1) * m_btnPerPage; + + for (int i = 0; i < m_btnPerPage; i++) + { + if (itemidx < itemNum) + { + m_sheetBtnList.at(i)->setText(QString::number(itemList[itemidx])); + m_sheetBtnList.at(i)->show(); + + itemidx++; + } + else + { + m_sheetBtnList.at(i)->hide(); + } + } + + for (int i = 0; i < ROW_NUM; i++) + { + int labelIdx = (m_curPages - 1) * ROW_NUM + i; + if(labelIdx < MAX_VER) + { + m_sheetVLabelList[i]->show(); + m_sheetVLabelList[i]->setText(QString::number((ROW_NUM*(m_curPages-1)+i+1)*100)+"rpm"); + } + else + { + m_sheetVLabelList[i]->hide(); + } + } + + // 翻页按钮 + if (m_curPages <= 1) + { + ui->buttonPgUp->setEnabled(false); + } + else + { + ui->buttonPgUp->setEnabled(true); + } + if (m_curPages >= m_pageNums) + { + ui->buttonPgDn->setEnabled(false); + } + else + { + ui->buttonPgDn->setEnabled(true); + } + + // 页信息 + if(m_pageNums == 0) + { + m_curPages = 0; + } + + // 页信息 + QString str = tr("pageNum: ") + QString("%1/%2").arg(m_curPages).arg(m_pageNums);//页数: + ui->labelPageNum->setText(str); +} + +void SheetWidget::show() +{ + //等于机器参数或工作参数 + if (g_pMachine != NULL) + { + if(g_pMachine->isConnected() == 3) + { + g_pMachine->getParasFromMachine(MVSTANG_PARA); + } + else + { +#ifdef Q_OS_LINUX//为了方便windows下查看参数所以加了linux编译条件 + PromptDialog dlg(this); + dlg.initDialog(PromptDialog::BTN_OK); + dlg.setTitleStr(tr("Network error")); + dlg.setContentStr(tr("No connection")); + dlg.exec(); + return; +#endif + } + } + + refreshPageUi(); + QWidget::show(); +} + +//表格中按钮被点击 +void SheetWidget::slotSheetBtnClicked() +{ + MyButton *button = (MyButton*) this->sender() ; + + if(button == NULL) + { + return; + } + u16 value = button->text().toInt(); + + NumerInputDialog ndlg(this); + ndlg.setTitleStr(tr("Frame angle")); + ndlg.setUnitStr(tr("deg")); + ndlg.setValueAndRange(value, 0, 360, 0, 0, 240); + + if (ndlg.exec() == 1) + { + u16 val = ndlg.getValue(); + if (val != value) + { + button->setText(QString::number(val)); + for(int i = 0; i < m_sheetBtnList.size(); i++) + { + if(button == m_sheetBtnList[i]) + { + if(m_reType == RETYPE_X) + { + m_itemXList[(m_curPages-1)*m_btnPerPage+i] = val; + } + else if(m_reType == RETYPE_Y) + { + m_itemYList[(m_curPages-1)*m_btnPerPage+i] = val; + } + break; + } + } + } + } +} + +void SheetWidget::on_buttonPgUp_clicked() +{ + m_curPages--; + refreshPageUi(); +} + +void SheetWidget::on_buttonPgDn_clicked() +{ + m_curPages++; + refreshPageUi(); +} + +void SheetWidget::on_buttonOk_clicked() +{ + for(int i = 0; i < MAX_VER; i++) + { + for(int j = 0; j < MAX_HOR; j++) + { + m_frameAngleParaValues.xMvStAng[i][j] = m_itemXList[i*MAX_HOR+j]; + m_frameAngleParaValues.yMvStAng[i][j] = m_itemYList[i*MAX_HOR+j]; + } + } + + if(g_pMachine != NULL) + { + g_pMachine->setFrameAnglePara(&m_frameAngleParaValues); + } + + this->hide(); +} + +void SheetWidget::on_buttonCancel_clicked() +{ + this->hide(); +} + +//切换xy +void SheetWidget::on_buttonSwitchXY_clicked() +{ + if(m_reType == RETYPE_X) + { + m_reType = RETYPE_Y; + ui->labelXY->setText("Y"); + } + else + { + m_reType = RETYPE_X; + ui->labelXY->setText("X"); + } + m_curPages = 1; + refreshPageUi(); +} + +//还原回默认参数 +void SheetWidget::on_buttonParaRestore_clicked() +{ + PromptDialog promptDlg(this); + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + promptDlg.setContentStr(tr("Whether to recover the default parameters for the frame angle?"));//是否恢复为动框角度默认参数? + + if(promptDlg.exec() == 1) + { + if(g_pMachine != NULL) + { + g_pMachine->setToDefaultParas(UCMD_SET_MVANGDEF_PARA, 0); + } + } +} + +//动框角度参数改变 +void SheetWidget::slotFrameAngleParaChange(int type, int id) +{ + if (type == MVSTANG_PARA) + { + if (id == 0) + { + memcpy(&m_frameAngleParaValues, &g_pMachine->getFrameAnglePara(), sizeof(EmbMvAng)); + } + } + + refreshValues(); + refreshPageUi(); +} diff --git a/sharedviews/sheetwidget.h b/sharedviews/sheetwidget.h new file mode 100644 index 0000000..18cd9ac --- /dev/null +++ b/sharedviews/sheetwidget.h @@ -0,0 +1,78 @@ +#ifndef SHEETWIDGET_H +#define SHEETWIDGET_H + +#include +#include +#include +#include "main.h" +#include "setcontrolstyle.h" +#include "promptdialog.h" + +#define ROW_NUM 8 //按钮行数 +#define COLUMN_NUM 12 //按钮列数 + +#define RETYPE_X 0 +#define RETYPE_Y 1 + +namespace Ui { +class SheetWidget; +} + +class SheetWidget : public QWidget +{ + Q_OBJECT + +public: + explicit SheetWidget(QWidget *parent = 0); + ~SheetWidget(); + +private: + Ui::SheetWidget *ui; + +private: + s16 m_reType;//x、y类型 + int m_btnPerPage;//每页按钮数 + int m_curPages;//花样选择界面当前页数 + int m_pageNums;//总页数 + QList m_sheetBtnList;//表格按钮个数 + QList m_sheetHLabelList;//横向label + QList m_sheetVLabelList;//纵向label + QList m_itemXList;//条目数 + QList m_itemYList;//条目数 + + EmbMvAng m_frameAngleParaValues; + +private: + void initWidget(); + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006(); + void initControlStyle();//初始化窗体控件样式 + + void refreshValues();//刷新参数数值 + +public: + void setTypeLogo(QString tStyle);//设置类型图标 + void setMainTitle(QString str);//设置主title + void setSubTitle(QString str);//设置副title + +public: + void refreshPageUi();//刷新界面显示 + void show(); + +signals: + +private slots: + void slotSheetBtnClicked();//表格中按钮被点击 + void on_buttonPgUp_clicked(); + void on_buttonPgDn_clicked(); + void on_buttonOk_clicked(); + void on_buttonCancel_clicked(); + void on_buttonSwitchXY_clicked();//切换xy + void on_buttonParaRestore_clicked(); + +public slots: + void slotFrameAngleParaChange(int type,int id);//动框角度参数改变 +}; + +#endif // SHEETWIDGET_H diff --git a/sharedviews/sheetwidget.ui b/sharedviews/sheetwidget.ui new file mode 100644 index 0000000..4f74e9d --- /dev/null +++ b/sharedviews/sheetwidget.ui @@ -0,0 +1,299 @@ + + + SheetWidget + + + + 0 + 0 + 1024 + 600 + + + + Form + + + + + 10 + 120 + 1001 + 421 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 0 + 0 + 1024 + 600 + + + + background-color: rgb(176, 176, 176); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 10 + 560 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + PageNums: 0/0 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 610 + 550 + 401 + 41 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 120 + 10 + 64 + 31 + + + + Qt::NoFocus + + + + + + + + + 190 + 10 + 64 + 31 + + + + Qt::NoFocus + + + + + + + + + 260 + 10 + 64 + 31 + + + + Qt::NoFocus + + + + + + + + + 330 + 10 + 64 + 31 + + + + Qt::NoFocus + + + + + + + + + + 30 + 90 + 54 + 12 + + + + X + + + Qt::AlignCenter + + + + + + 810 + 10 + 201 + 51 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 110 + 10 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + + 20 + 10 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + + + + 130 + 40 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Sub title < Title + + + + + + 100 + 10 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Sub title + + + frameBack + frameSheet + labelPageNum + framePageBtn + labelXY + frameRightUp + buttonTypeLogo + labelSubTitle + labelMainTitle + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/systemmanagedialog.cpp b/sharedviews/systemmanagedialog.cpp new file mode 100644 index 0000000..aa5b887 --- /dev/null +++ b/sharedviews/systemmanagedialog.cpp @@ -0,0 +1,820 @@ +#include "systemmanagedialog.h" +#include "ui_systemmanagedialog.h" + +SystemManageDialog::SystemManageDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::SystemManageDialog), + m_itemPerPage(12) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + + //外围板 + connect(g_pMachine, SIGNAL(siEXBInfoChange()), this, SLOT(slotEXBInfoChange())); + + this->move(0,0); + initDialog(); + initControl(); + + m_logType = 0; + + m_curConnectWifi.clear();//当前连接的wifi + m_curConnectWifiPass.clear();//当前连接的wifi密码 + m_curConnectMode = false;//当前连接的方式 + ui->labelCurIP->clear(); + + ui->buttonSetAutoIP->setEnabled(false); + ui->buttonSetStaticIP->setEnabled(false); +} + +SystemManageDialog::~SystemManageDialog() +{ + delete ui; +} + +//初始化窗体控件,包括位置、尺寸、样式 +void SystemManageDialog::initControl() +{ + m_itemBtnList.clear(); + m_itemBtnList.append(ui->button1); + m_itemBtnList.append(ui->button2); + m_itemBtnList.append(ui->button3); + m_itemBtnList.append(ui->button4); + m_itemBtnList.append(ui->button5); + ui->button6->setVisible(false);//隐藏 + ui->button7->setVisible(false); + ui->button8->setVisible(false); + ui->button9->setVisible(false); + ui->button10->setVisible(false); + ui->button11->setVisible(false); + ui->button12->setVisible(false); + + if(g_emResolut == resolution1910)//1920x1080的分辨率每页显示12个条目 + { + ui->button6->setVisible(true);//显示 + ui->button7->setVisible(true); + ui->button8->setVisible(true); + ui->button9->setVisible(true); + ui->button10->setVisible(true); + ui->button11->setVisible(true); + ui->button12->setVisible(true); + m_itemBtnList.append(ui->button6); + m_itemBtnList.append(ui->button7); + m_itemBtnList.append(ui->button8); + m_itemBtnList.append(ui->button9); + m_itemBtnList.append(ui->button10); + m_itemBtnList.append(ui->button11); + m_itemBtnList.append(ui->button12); + } + else if(g_emResolut == resolution1006)//1024x600的分辨率每页显示8个条目 + { + ui->button6->setVisible(true);//显示 + ui->button7->setVisible(true); + ui->button8->setVisible(true); + m_itemBtnList.append(ui->button6); + m_itemBtnList.append(ui->button7); + m_itemBtnList.append(ui->button8); + } + + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + break; + default: + this->resize(1920,1080); + break; + } + + initControlStyle();//初始化窗体控件样式 +} + +//初始化窗体控件为1920x1080分辨率 +void SystemManageDialog::initResolution1910() +{ + this->resize(1920,1080); + ui->frameBack->setGeometry(0,0,1920,1080); + ui->buttonTypeLogo->setGeometry(128,66,78,78); + ui->labelMainTitle->setGeometry(226,60,1000,54); + ui->labelSubTitle->setGeometry(302,112,1000,40); + + ui->frameRightUp->setGeometry(1700,92,300,72); + ui->buttonDelete->setGeometry(0,0,66,66); + ui->buttonSelectAll->setGeometry(0,0,66,66); + ui->buttonExport->setGeometry(80,0,66,66); + + ui->frameRightUpWIFI->setGeometry(1200,92,600,72); + ui->buttonRefresh->setGeometry(500,0,66,66); + ui->labelCurIP->setGeometry(0,0,500,66); + + ui->buttonChangeLog->setGeometry(10,0,66,66); + + for(int i = 0; i < m_itemPerPage; i++) + { + m_itemBtnList[i]->setGeometry(295,180 + i * 64,1330,58); + } + + ui->framePageBtn->setGeometry(1120,990,800,70); + ui->labelPage->setGeometry(32,1008,400,40); + ui->buttonPgUp->setGeometry(0,0,168,70); + ui->buttonPgDn->setGeometry(200,0,168,70); + ui->buttonOk->setGeometry(400,0,168,70); + ui->buttonCancel->setGeometry(600,0,168,70); + ui->framePageBtnWIFI->setGeometry(920,990,1000,70); + ui->buttonPgUpWIFI->setGeometry(0,0,168,70); + ui->buttonPgDnWIFI->setGeometry(200,0,168,70); + ui->buttonSetAutoIP->setGeometry(400,0,168,70); + ui->buttonSetStaticIP->setGeometry(600,0,168,70); + ui->buttonCancelWIFI->setGeometry(800,0,168,70); + ui->labelExplain->setGeometry(240,960,660,110); +} + +void SystemManageDialog::initResolution1006() +{ + m_itemPerPage = m_itemPerPage - 4; + this->resize(1024,600); + ui->frameBack->setGeometry(0,0,1024,600); + + ui->buttonTypeLogo->setGeometry(25,30,60,60); + ui->labelMainTitle->setGeometry(100,30,200,24); + ui->labelSubTitle->setGeometry(130,64,240,21); + + ui->frameRightUp->setGeometry(800,40,800,61); + ui->buttonDelete->setGeometry(150,0,50,50); + ui->buttonSelectAll->setGeometry(150,0,50,50); + ui->buttonExport->setGeometry(90,0,50,50); + + ui->frameRightUpWIFI->setGeometry(600,40,400,61); + ui->buttonRefresh->setGeometry(300,0,50,50); + ui->labelCurIP->setGeometry(0,0,300,50); + + ui->buttonChangeLog->setGeometry(20,0,50,50); + + for(int i = 0; i < m_itemPerPage; i++) + { + m_itemBtnList[i]->setGeometry(153,96 + i * 53,718,53); + } + + ui->framePageBtn->setGeometry(595,545,600,45); + ui->labelPage->setGeometry(20,550,102,45); + ui->labelExplain->setGeometry(130,538,350,50); + ui->buttonPgUp->setGeometry(0,0,96,40); + ui->buttonPgDn->setGeometry(106,0,96,40); + ui->buttonOk->setGeometry(212,0,96,40); + ui->buttonCancel->setGeometry(318,0,96,40); + + ui->framePageBtnWIFI->setGeometry(489,545,600,45); + ui->buttonPgUpWIFI->setGeometry(0,0,96,40); + ui->buttonPgDnWIFI->setGeometry(106,0,96,40); + ui->buttonSetAutoIP->setGeometry(212,0,96,40); + ui->buttonSetStaticIP->setGeometry(318,0,96,40); + ui->buttonCancelWIFI->setGeometry(424,0,96,40); +} + +//初始化窗体控件样式 +void SystemManageDialog::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + //背景图 + QString frameBackImgPath = setControlStyle.getSharedStyleSheet(); + ui->frameBack->setStyleSheet(frameBackImgPath); + ui->labelMainTitle->setFont(fontBold_1); + ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelSubTitle->setFont(fontNormal_1); + ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelPage->setFont(fontNormal_1); + ui->labelPage->setStyleSheet(LABELWHITESTYLE); + + //右上方 + ui->frameRightUp->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonDelete->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonDelete->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonDelete->objectName())); + ui->buttonSelectAll->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonSelectAll->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonSelectAll->objectName())); + ui->buttonExport->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonExport->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonExport->objectName())); + ui->buttonChangeLog->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonChangeLog->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonChangeLog->objectName())); + + //右上方 + ui->frameRightUpWIFI->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonRefresh->setGreenGradientBottomStyle(BORDER_RADIUS1); + ui->buttonRefresh->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonChangeLog->objectName())); + ui->labelCurIP->setFont(fontNormal_1); + ui->labelCurIP->setStyleSheet(LABELWHITESTYLE); + + QString style = "QPushButton{border:0px;text-align:left;border-radius:7px;background-color:rgba(255, 255, 255, 0);color: rgb(255, 255, 255);}"; + style += "QPushButton:checked{background-color: rgba(255, 255, 255, 50);}"; + + for(int i = 0; i < m_itemBtnList.size(); i++) + { + m_itemBtnList[i]->setStyleSheet(style);//文本左对齐 + m_itemBtnList[i]->setFont(fontNormal_1); + } + + //四个按钮样式表一样 + ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); + + ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); + + ui->buttonOk->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()),12); + + ui->buttonCancel->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()),12); + + //WIFI + ui->framePageBtnWIFI->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonPgUpWIFI->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgUpWIFI->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); + + ui->buttonPgDnWIFI->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonPgDnWIFI->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); + + ui->buttonSetAutoIP->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonSetAutoIP->setFont(fontNormal_6); + + ui->buttonSetStaticIP->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonSetStaticIP->setFont(fontNormal_6); + + ui->buttonCancelWIFI->setOrangeGradientBottomStyle(BORDER_RADIUS2); + ui->buttonCancelWIFI->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()),12); + + ui->labelExplain->setFont(fontNormal_1); + ui->labelExplain->setStyleSheet(LABELWHITESTYLE); +} + +void SystemManageDialog::refreshUi() +{ + int itemNum; + if (m_itemList.size() <= 0) + { + itemNum = 0; + + for (int i = 0; i < m_itemPerPage; i++) + { + m_itemBtnList.at(i)->hide(); + } + ui->labelPage->setText(tr("pageNum: 0/0"));//页数: 0/0 + ui->buttonPgUp->setEnabled(false); + ui->buttonPgDn->setEnabled(false); + ui->buttonOk->setEnabled(false); + + return; + } + else + { + itemNum = m_itemList.size(); + } + + m_pageNums = (itemNum + m_itemPerPage - 1)/m_itemPerPage;// 计算页数 + if (m_curPages > m_pageNums)// 当前页 + { + m_curPages = m_pageNums; + } + if (m_curPages <= 1 && itemNum != 0) + { + m_curPages = 1; + } + + int itemidx = (m_curPages - 1) * m_itemPerPage; + + for (int i = 0; i < m_itemPerPage; i++) + { + if (itemidx < itemNum) + { + //设置图标和文件夹名称 + m_itemBtnList[i]->setText(m_itemList.at(itemidx)); + m_itemBtnList.at(i)->show(); + + itemidx++; + } + else + { + m_itemBtnList.at(i)->hide(); + } + } + + // 翻页按钮 + if (m_curPages <= 1) + { + ui->buttonPgUp->setEnabled(false); + } + else + { + ui->buttonPgUp->setEnabled(true); + } + if (m_curPages >= m_pageNums) + { + ui->buttonPgDn->setEnabled(false); + } + else + { + ui->buttonPgDn->setEnabled(true); + } + + // 页信息 + if(m_pageNums == 0) + { + m_curPages = 0; + } + + QString str = tr("pageNum: ") + QString("%1/%2").arg(m_curPages).arg(m_pageNums);//页数: + ui->labelPage->setText(str); + + refreshCheckedPage(); +} + +void SystemManageDialog::refreshCheckedPage() +{ + if(m_selectedIdx == SELECT_NONE) + { + ui->buttonOk->setEnabled(false); + } + else + { + ui->buttonOk->setEnabled(true); + } + + if(m_selectedIdx == SELECT_ALL) + { + // 刷新页面中被选择的条目 + for(int var = 0; var < m_itemPerPage; var++) + { + // 条目被选中 + m_itemBtnList.at(var)->setCheckable(true); + m_itemBtnList.at(var)->setChecked(true); + } + return; + } + + // 刷新页面中被选择的条目 + for(int var = 0; var < m_itemPerPage; var++) + { + int idx = (m_curPages - 1) * m_itemPerPage + var; + if(m_selectedIdx == idx) + { + // 条目被选中 + m_itemBtnList.at(var)->setCheckable(true); + m_itemBtnList.at(var)->setChecked(true); + } + else + { + // 不被选中 + m_itemBtnList.at(var)->setChecked(false); + m_itemBtnList.at(var)->setCheckable(false); + } + } +} + +void SystemManageDialog::clickItem(int idx) +{ + m_selectedIdx = (m_curPages - 1) * m_itemPerPage + idx - 1; + refreshCheckedPage(); + QString wifiName = m_itemList[m_selectedIdx]; + if(m_curConnectWifi != wifiName) + { + ui->buttonSetAutoIP->setEnabled(true); + ui->buttonSetStaticIP->setEnabled(false); + } + else + { + ui->buttonSetAutoIP->setEnabled(false); + ui->buttonSetStaticIP->setEnabled(true); + } +} + +void SystemManageDialog::initDialog(s16 type) +{ + m_setType = type; + m_curPages = 1;//当前页数 + m_pageNums = 1;//总页数 + m_selectedIdx = SELECT_NONE;//被选中的条目 + m_itemList.clear(); + + if(type != 0) + { + ui->frameRightUpWIFI->show(); + ui->framePageBtnWIFI->show(); + ui->frameRightUp->hide(); + ui->framePageBtn->hide(); + ui->labelExplain->show(); + } + else + { + ui->frameRightUpWIFI->hide(); + ui->framePageBtnWIFI->hide(); + ui->frameRightUp->show(); + ui->framePageBtn->show(); + ui->labelExplain->hide(); + } +} + +//设置类型图标 +void SystemManageDialog::setTypeLogo(QString tStyle) +{ + ui->buttonTypeLogo->setUnPreBtnLogo(tStyle); +} + +//设置主title +void SystemManageDialog::setMainTitle(QString str) +{ + ui->labelMainTitle->setText(str); +} + +//设置副title +void SystemManageDialog::setSubTitle(QString str) +{ + ui->labelSubTitle->setText(str); +} + +void SystemManageDialog::addItem(QString str) +{ + m_itemList.append(str); +} + +void SystemManageDialog::addListError() +{ + m_itemList = g_pSettings->readToCsv(TYPE_ERROR);//读取 QStringList +} + +void SystemManageDialog::addListBreakage() +{ + m_itemList = g_pSettings->readToCsv(TYPE_BREAK);//读取 QStringList +} + +int SystemManageDialog::exec(int type)//升级类型 +{ + ui->buttonDelete->setVisible(false); + ui->buttonSelectAll->setVisible(false); + ui->buttonExport->setVisible(false); + + ui->buttonChangeLog->setVisible(false); + + m_updateType = type; + + //当为外围板版本查询时,列表按钮和确定按钮不可按 + if(m_updateType < 0) + { + ui->buttonOk->setEnabled(false); + + for(int i = 0; i < m_itemBtnList.size(); i++) + { + m_itemBtnList[i]->setEnabled(false); + } + } + else + { + //板卡列表显示(连接多块主板时) + if(m_updateType == BOARD_LIST) + { + ui->buttonSelectAll->setVisible(true); + } + + if(m_updateType == PRODUCTSTATIS) + { + ui->buttonDelete->setVisible(true); + ui->buttonOk->setEnabled(false); + + for(int i = 0; i < m_itemBtnList.size(); i++) + { + m_itemBtnList[i]->setEnabled(false); + } + } + else if(m_updateType == JOURNAL) + { + ui->buttonDelete->setVisible(false);//不可见 + ui->buttonOk->setEnabled(false); + ui->buttonExport->setVisible(true); + + ui->buttonChangeLog->setVisible(true); + + for(int i = 0; i < m_itemBtnList.size(); i++) + { + m_itemBtnList[i]->setEnabled(false); + } + } + else + { + ui->buttonOk->setEnabled(true); + + for(int i = 0; i < m_itemBtnList.size(); i++) + { + m_itemBtnList[i]->setEnabled(true); + } + } + } + + refreshUi(); + return QDialog::exec(); +} + +QString SystemManageDialog::getCurFile() +{ + QString fileName = m_itemList.at(m_selectedIdx); + return fileName; +} + +void SystemManageDialog::setWifiInfo(QString ip,QString ssid,QString psd,bool mode) +{ + ui->labelCurIP->setText(ip); + m_curConnectWifi = ssid; + m_curConnectWifiPass = psd; + m_curConnectMode = mode; +} + +void SystemManageDialog::setItemList(QStringList list) +{ + m_itemList.clear(); + m_itemList = list; +} + +//外围板版本信息改变 +void SystemManageDialog::slotEXBInfoChange() +{ + m_itemList.clear(); + ExBoardInfo exboardInfo; + memset(&exboardInfo,0,sizeof(ExBoardInfo)); // 外围板信息 + + //外围板用g_pMachine[0] + exboardInfo = g_pMachine->getEXBInfo(); + for(u16 i = 0; i < MAX_SUPPORT_N5; i++) + { + char verStr[BOARD_VER_LEN]; + memset(verStr,0,sizeof(verStr)); // 外围板信息 + memcpy(verStr,exboardInfo.headInfo[i].softwareVerStr,sizeof(verStr)); + + QString info = QString::fromLocal8Bit(verStr,sizeof(verStr)); + + char clearStr[BOARD_VER_LEN]; + memset(clearStr,0,sizeof(clearStr)); // 外围板信息 + int ret = memcmp(verStr, clearStr, sizeof(verStr)); // 比较两个缓存区内容是否相同(等于0相等) + + if(info.length() > 0 && ret != 0) + { + //过滤掉字符为0的字符,因为linux下会显示为x + for(int j = 0; j < info.length(); j++) + { + if (info.at(j) == 0) + { + info[j] = ' '; + } + } + + u8 nType; + memcpy(&nType, &exboardInfo.headInfo[i].nodeType,sizeof(nType)); + QString str = QString::number(i + 1) + " " + tr("Head board") + " " + info; + m_itemList.append(str);//机头板 + } + } + refreshUi(); +} + +void SystemManageDialog::on_buttonCancel_clicked() +{ + //超级用户密码权限,单次有效 + g_emUser = operate; + done(0); +} + +void SystemManageDialog::on_buttonOk_clicked() +{ + if(m_updateType == HMI_UPDATA)//界面升级 + { + //升级需要重新启动程序,是否重启进行升级? + qDebug()<<"HMI_UPDATA"; + + PromptDialog promptDlg(this); + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + + QString str; + str = tr("The upgrade needs to restart the program. Do you need to restart to upgrade?");//升级需要重新启动程序,是否重启进行升级? + promptDlg.setContentStr(str); + if(promptDlg.exec() != 1) + { + //done(0); + return; + } + } + done(1); +} + +void SystemManageDialog::on_buttonPgUp_clicked() +{ + m_curPages--; + refreshUi(); +} + +void SystemManageDialog::on_buttonPgDn_clicked() +{ + m_curPages++; + refreshUi(); +} + +void SystemManageDialog::on_button1_clicked() +{ + clickItem(1); +} + +void SystemManageDialog::on_button2_clicked() +{ + clickItem(2); +} + +void SystemManageDialog::on_button3_clicked() +{ + clickItem(3); +} + +void SystemManageDialog::on_button4_clicked() +{ + clickItem(4); +} + +void SystemManageDialog::on_button5_clicked() +{ + clickItem(5); +} + +void SystemManageDialog::on_button6_clicked() +{ + clickItem(6); +} + +void SystemManageDialog::on_button7_clicked() +{ + clickItem(7); +} + +void SystemManageDialog::on_button8_clicked() +{ + clickItem(8); +} + +void SystemManageDialog::on_button9_clicked() +{ + clickItem(9); +} + +void SystemManageDialog::on_button10_clicked() +{ + clickItem(10); +} + +void SystemManageDialog::on_button11_clicked() +{ + clickItem(11); +} + +void SystemManageDialog::on_button12_clicked() +{ + clickItem(12); +} + +void SystemManageDialog::on_buttonDelete_clicked() +{ + if(m_updateType == PRODUCTSTATIS)//等于生产统计 + { + PromptDialog promptDlg(this); + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + + QString str; + str = tr("Do you want to clear the production statistics?");//是否清空生产统计? + promptDlg.setContentStr(str); + if(promptDlg.exec() == 1) + { + emit siClearProductStatis(); + } + } + else if(m_updateType == JOURNAL) + { + PromptDialog promptDlg(this); + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + + QString str; + str = tr("Do you want to clear the journal?");//是否清空日志文件? + promptDlg.setContentStr(str); + if(promptDlg.exec() == 1) + { + emit siClearJournal(); + } + + } +} + +void SystemManageDialog::on_buttonSelectAll_clicked() +{ + if(m_selectedIdx == SELECT_ALL) + { + m_selectedIdx = SELECT_NONE; + } + else + { + m_selectedIdx = SELECT_ALL; + } + refreshCheckedPage(); +} + +//导出csv文件 +void SystemManageDialog::on_buttonExport_clicked() +{ + if(m_updateType == JOURNAL)//等于日志文件 + { + PromptDialog promptDlg(this); + promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL); + promptDlg.setTitleStr(tr("Prompt")); + + QString str; + str = tr("Do you want to export journal?");//是否导出日志文件? + promptDlg.setContentStr(str); + if(promptDlg.exec() == 1) + { + emit siCsvExport(m_logType); + } + } +} + +void SystemManageDialog::on_buttonChangeLog_clicked() +{ + //done(0); + //qDebug()<<"buttonChange_clicked" < TYPE_BREAK) + { + m_logType = 0; + } + + if(m_logType == TYPE_ERROR) + { + emit siCsvChangeErro(); + } + else if(m_logType == TYPE_BREAK) + { + emit siCsvChangeBrea(); + } + + refreshUi(); +} + +//刷新wifi +void SystemManageDialog::on_buttonRefresh_clicked() +{ + m_curPages = 1;//当前页数 + m_pageNums = 1;//总页数 + m_selectedIdx = SELECT_NONE;//被选中的条目 + emit siRefreshWifiList(); + refreshUi(); +} + +void SystemManageDialog::on_buttonPgUpWIFI_clicked() +{ + m_curPages--; + refreshUi(); +} + +void SystemManageDialog::on_buttonPgDnWIFI_clicked() +{ + m_curPages++; + refreshUi(); +} + +void SystemManageDialog::on_buttonSetAutoIP_clicked() +{ + if(m_selectedIdx < m_itemList.size() && m_selectedIdx >= 0) + { + QString ssid = m_itemList.at(m_selectedIdx); + emit siSetDynamicIP(ssid); + } +} + +void SystemManageDialog::on_buttonSetStaticIP_clicked() +{ + QString ssid = m_curConnectWifi; + QString psd = m_curConnectWifiPass; + QStringList ipList = ui->labelCurIP->text().split(".", QString::SkipEmptyParts); + QString ip; + ip.clear(); + if(ipList.size() >= 3) + { + ip = ipList[0]+"."+ipList[1]+"."+ipList[2]+"."; + } + + emit siSetStaticIP(ssid,psd,ip); +} + +void SystemManageDialog::on_buttonCancelWIFI_clicked() +{ + done(0); +} diff --git a/sharedviews/systemmanagedialog.h b/sharedviews/systemmanagedialog.h new file mode 100644 index 0000000..2b15f34 --- /dev/null +++ b/sharedviews/systemmanagedialog.h @@ -0,0 +1,113 @@ +#ifndef SYSTEMMANAGEDIALOG_H +#define SYSTEMMANAGEDIALOG_H + +#include +#include +#include "promptdialog.h" + +#include "setcontrolstyle.h" + +#define SELECT_NONE -2 //全不选 +#define SELECT_ALL -1 //全选 + +namespace Ui { +class SystemManageDialog; +} + +class SystemManageDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SystemManageDialog(QWidget *parent = 0); + ~SystemManageDialog(); + +private: + Ui::SystemManageDialog *ui; + int m_itemPerPage;//界面每页条目数 + QList m_itemBtnList; + + int m_curPages;//当前页数 + int m_pageNums;//总页数 + int m_selectedIdx;//被选中的条目 + QStringList m_itemList; + + int m_updateType;//升级类型 + int m_logType;//日志类型 0:报错 1:断线 + s16 m_setType; + + QString m_curConnectWifi;//当前连接的wifi + QString m_curConnectWifiPass;//当前连接的wifi密码 + bool m_curConnectMode;//当前连接的方式 + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006(); + void initControlStyle();//初始化窗体控件样式 + + void refreshCheckedPage();//刷新条目选中状态 + void clickItem(int idx);//点击某一条目 + +public: + void initDialog(s16 type = 0); + void refreshUi(); + void setTypeLogo(QString tStyle);//设置类型图标 + void setMainTitle(QString str);//设置主title + void setSubTitle(QString str);//设置副title + + void addItem(QString str); + + void addListError();//读取CSV + void addListBreakage();//读取CSV + + int exec(int type = 0);//升级类型 + + QString getCurFile();//获取当前选中的文件 + inline int getCurIdx(){return m_selectedIdx;} + void setWifiInfo(QString ip,QString ssid,QString psd,bool mode); + void setItemList(QStringList list); + +signals: + void siClearProductStatis();//清空产量统计 + void siCsvExport(int logType);//导出csv文件 + void siClearJournal();//清空文件日志 + void siCsvChangeErro();//切换报错 + void siCsvChangeBrea();//切换断线 + void siRefreshWifiList();//刷新wifi列表 + void siSetDynamicIP(QString);//设置动态IP + void siSetStaticIP(QString,QString,QString);//设置静态IP + +private slots: + void slotEXBInfoChange();//外围板版本信息改变 + +private slots: + void on_buttonCancel_clicked(); + void on_buttonOk_clicked(); + void on_buttonPgUp_clicked(); + void on_buttonPgDn_clicked(); + void on_button1_clicked(); + void on_button2_clicked(); + void on_button3_clicked(); + void on_button4_clicked(); + void on_button5_clicked(); + void on_button6_clicked(); + void on_button7_clicked(); + void on_button8_clicked(); + void on_button9_clicked(); + void on_button10_clicked(); + void on_button11_clicked(); + void on_button12_clicked(); + void on_buttonDelete_clicked(); + void on_buttonSelectAll_clicked(); + void on_buttonExport_clicked(); + void on_buttonChangeLog_clicked(); + void on_buttonRefresh_clicked(); + void on_buttonPgUpWIFI_clicked(); + void on_buttonPgDnWIFI_clicked(); + void on_buttonSetAutoIP_clicked(); + void on_buttonSetStaticIP_clicked(); + void on_buttonCancelWIFI_clicked(); +}; + +#endif // SYSTEMMANAGEDIALOG_H diff --git a/sharedviews/systemmanagedialog.ui b/sharedviews/systemmanagedialog.ui new file mode 100644 index 0000000..cb3c3ad --- /dev/null +++ b/sharedviews/systemmanagedialog.ui @@ -0,0 +1,747 @@ + + + SystemManageDialog + + + + 0 + 0 + 1024 + 600 + + + + Dialog + + + background-color: rgb(120, 120, 120); + + + + + 140 + 440 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 0 + 0 + 1024 + 600 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 20 + 570 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + PageNums: 1/1 + + + + + + 140 + 280 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 360 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 320 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 480 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 80 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 680 + 560 + 321 + 31 + + + + background-color: rgba(255, 255, 255, 0); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 80 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 240 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 160 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 0 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + + 140 + 160 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 240 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 520 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 200 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 30 + 10 + 60 + 60 + + + + Qt::NoFocus + + + + + + + + + + + + 110 + 10 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Update + + + + + + 140 + 120 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 140 + 40 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + Update + + + + + + 140 + 400 + 760 + 32 + + + + Qt::NoFocus + + + + + + + + + + + + 680 + 10 + 321 + 61 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 250 + 20 + 41 + 40 + + + + Qt::NoFocus + + + + + + + + + 200 + 20 + 40 + 40 + + + + Qt::NoFocus + + + background-color: rgb(255, 255, 255); + + + + + + + + + 150 + 20 + 41 + 40 + + + + Qt::NoFocus + + + + + + + + + 100 + 20 + 41 + 40 + + + + Qt::NoFocus + + + + + + + + + + 680 + 10 + 321 + 61 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 250 + 20 + 41 + 40 + + + + Qt::NoFocus + + + + + + + + + 30 + 20 + 181 + 21 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + 192.168.2.196 + + + + + + + 600 + 560 + 401 + 31 + + + + background-color: rgb(118, 118, 118); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 80 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 240 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + StaticIP + + + + + + 160 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + DynamicIP + + + + + + 0 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + 320 + 0 + 75 + 23 + + + + Qt::NoFocus + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + + + + + + + + 160 + 560 + 421 + 31 + + + + + Arial + 8 + + + + background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); + + + *Before setting the static IP, you need to first set the dynamic IP. After the dynamic IP is set, you need to return to this interface to continue setting the static IP + + + true + + + frameBack + labelPage + button6 + button8 + button7 + button11 + button1 + framePageBtn + button3 + button5 + button12 + button4 + buttonTypeLogo + labelMainTitle + button2 + labelSubTitle + button9 + button10 + frameRightUp + frameRightUpWIFI + framePageBtnWIFI + labelExplain + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +
diff --git a/sharedviews/wordsinputdialog.cpp b/sharedviews/wordsinputdialog.cpp new file mode 100644 index 0000000..035c5a5 --- /dev/null +++ b/sharedviews/wordsinputdialog.cpp @@ -0,0 +1,399 @@ +#include "wordsinputdialog.h" +#include "ui_wordsinputdialog.h" + +WordsInputDialog::WordsInputDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::WordsInputDialog) +{ + ui->setupUi(this); + setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + setWindowModality(Qt::ApplicationModal); + setAttribute(Qt::WA_TranslucentBackground, true);//设置窗体背景透明 + + m_buttonCharacterList.clear(); + m_buttonCharacterList.append(ui->buttonChara1); + m_buttonCharacterList.append(ui->buttonChara2); + m_buttonCharacterList.append(ui->buttonChara3); + m_buttonCharacterList.append(ui->buttonChara4); + m_buttonCharacterList.append(ui->buttonChara5); + m_buttonCharacterList.append(ui->buttonChara6); + m_buttonCharacterList.append(ui->buttonChara7); + m_buttonCharacterList.append(ui->buttonChara8); + m_buttonCharacterList.append(ui->buttonChara9); + m_buttonCharacterList.append(ui->buttonChara10); + + for(int var = 0; var < m_buttonCharacterList.size(); var++) + { + connect(m_buttonCharacterList.at(var), + SIGNAL(clicked()), + this, + SLOT(inputBtnClick()) + ); + } + + m_buttonWordList.clear(); + m_buttonWordList.append(ui->buttonLatterQ); + m_buttonWordList.append(ui->buttonLatterW); + m_buttonWordList.append(ui->buttonLatterE); + m_buttonWordList.append(ui->buttonLatterR); + m_buttonWordList.append(ui->buttonLatterT); + m_buttonWordList.append(ui->buttonLatterY); + m_buttonWordList.append(ui->buttonLatterU); + m_buttonWordList.append(ui->buttonLatterI); + m_buttonWordList.append(ui->buttonLatterO); + m_buttonWordList.append(ui->buttonLatterP); + m_buttonWordList.append(ui->buttonLatterA); + m_buttonWordList.append(ui->buttonLatterS); + m_buttonWordList.append(ui->buttonLatterD); + m_buttonWordList.append(ui->buttonLatterF); + m_buttonWordList.append(ui->buttonLatterG); + m_buttonWordList.append(ui->buttonLatterH); + m_buttonWordList.append(ui->buttonLatterJ); + m_buttonWordList.append(ui->buttonLatterK); + m_buttonWordList.append(ui->buttonLatterL); + m_buttonWordList.append(ui->buttonLatterZ); + m_buttonWordList.append(ui->buttonLatterX); + m_buttonWordList.append(ui->buttonLatterC); + m_buttonWordList.append(ui->buttonLatterV); + m_buttonWordList.append(ui->buttonLatterB); + m_buttonWordList.append(ui->buttonLatterN); + m_buttonWordList.append(ui->buttonLatterM); + + for(int var = 0; var < m_buttonWordList.size(); var++) + { + connect(m_buttonWordList.at(var), + SIGNAL(clicked()), + this, + SLOT(inputBtnClick()) + ); + } + + m_buttonNumberList.clear(); + m_buttonNumberList.append(ui->buttonNum1); + m_buttonNumberList.append(ui->buttonNum2); + m_buttonNumberList.append(ui->buttonNum3); + m_buttonNumberList.append(ui->buttonNum4); + m_buttonNumberList.append(ui->buttonNum5); + m_buttonNumberList.append(ui->buttonNum6); + m_buttonNumberList.append(ui->buttonNum7); + m_buttonNumberList.append(ui->buttonNum8); + m_buttonNumberList.append(ui->buttonNum9); + m_buttonNumberList.append(ui->buttonNum0); + for(int var = 0; var < m_buttonNumberList.size(); var++) + { + connect(m_buttonNumberList.at(var), + SIGNAL(clicked()), + this, + SLOT(inputBtnClick()) + ); + } + + m_shift = 1; + m_inputStr.clear(); + ui->labelNameNewWords->clear(); + ui->labelNameOldWords->clear(); + ui->buttonOk->setEnabled(false); + + initControl(); +} + +WordsInputDialog::~WordsInputDialog() +{ + delete ui; +} + +void WordsInputDialog::setInputStr(QString str) +{ + m_inputStr = m_inputStr + str; + ui->labelNameNewWords->setText(m_inputStr); + if(m_inputStr.length() > 0) + { + ui->buttonOk->setEnabled(true); + ui->buttonOk->resize(174,70); + } +} + +//初始化窗体控件,包括位置、尺寸、样式 +void WordsInputDialog::initControl() +{ + //根据不同分辨率设置控件的位置和尺寸 + switch (g_emResolut) + { + case resolution1910: + initResolution1910(); + break; + case resolution1006: + initResolution1006(); + default: + this->resize(1920,1080); + break; + } + + initControlStyle();//初始化窗体控件样式 +} + +//初始化窗体控件为1920x1080分辨率 +void WordsInputDialog::initResolution1910() +{ + this->resize(1454,840); + this->move((1920-this->width())/2,(1080-this->height())/2); + + ui->frameBack->setGeometry(0,0,1454,840); + ui->labelTitle->setGeometry(68,46,1000,56); + + ui->labelName->setGeometry(82,145,340,56); + ui->labelNameNewWords->setGeometry(452,145,554,56); + ui->labelNameOldWords->setGeometry(1040,151,340,56); + + for(int i = 0; i < m_buttonCharacterList.size(); i++) + { + m_buttonCharacterList[i]->setGeometry(78+i*130,254,122,70); + } + + for(int i = 0; i < m_buttonNumberList.size(); i++) + { + m_buttonNumberList[i]->setGeometry(78+i*130,334,122,70); + } + + int x = 0; + int y = 0; + int idx = 0; + for(int i = 0; i < m_buttonWordList.size(); i++) + { + if(m_buttonWordList[i]->text().toUpper() == "Q") + { + x = 78; + y = 414; + idx = i; + } + if(m_buttonWordList[i]->text().toUpper() == "A") + { + x = 140; + y = 494; + idx = 0; + } + if(m_buttonWordList[i]->text().toUpper() == "Z") + { + x = 270; + y = 574; + idx = 0; + } + m_buttonWordList[i]->setGeometry(x+idx*130,y,122,70); + idx++; + } + + ui->buttonShift->setGeometry(80,574,182,70); + ui->buttonBack->setGeometry(1182,574,192,70); + ui->frameTwo->setGeometry(0,680,1462,894); + ui->buttonOk->setGeometry(1014,0,174,70); + ui->buttonCancel->setGeometry(1204,0,174,70); +} + +//初始化窗体控件为1024x600分辨率 +void WordsInputDialog::initResolution1006() +{ + this->resize(820,501); + this->move((1024-this->width())/2,(600-this->height())/2); + ui->frameBack->setGeometry(0,0,820,501); + ui->labelTitle->setGeometry(40,21,1024,48); + + ui->labelName->setGeometry(50,82,181,44); + ui->labelNameNewWords->setGeometry(258,82,554,44); + ui->labelNameOldWords->setGeometry(560,82,200,44); + + + for(int i = 0; i < m_buttonCharacterList.size(); i++) + { + m_buttonCharacterList[i]->setGeometry(50+i*73,140,62,40); + } + + for(int i = 0; i < m_buttonNumberList.size(); i++) + { + m_buttonNumberList[i]->setGeometry(50+i*73,190,62,40); + } + + int x = 0; + int y = 0; + int idx = 0; + for(int i = 0; i < m_buttonWordList.size(); i++) + { + if(m_buttonWordList[i]->text().toUpper() == "Q") + { + x = 50; + y = 240; + idx = i; + } + if(m_buttonWordList[i]->text().toUpper() == "A") + { + x =86; + y = 290; + idx = 0; + } + if(m_buttonWordList[i]->text().toUpper() == "Z") + { + x = 159; + y = 340; + idx = 0; + } + m_buttonWordList[i]->setGeometry(x+idx*73,y,62,40); + idx++; + } + ui->buttonShift->setGeometry(50,340,98,40); + ui->buttonBack->setGeometry(671,340,98,40); + ui->frameTwo->setGeometry(564,400,321,51); + ui->buttonOk->setGeometry(0,0,96,40); + ui->buttonCancel->setGeometry(108,0,96,40); +} + +//初始化窗体控件样式 +void WordsInputDialog::initControlStyle() +{ + SetControlStyle setControlStyle; + setControlStyle.setUiName(this->objectName()); + + //白蓝色渐变、灰蓝色渐变 + QString style = "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(255, 255, 255), stop:1 rgb(215, 243, 254));border-radius:5px;}"; + style += "QPushButton:pressed{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(217, 222, 224), stop:1 rgb(191,213,223));}"; + style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(230, 230, 230), stop:1 rgb(182,182,182));}"; + + for(int i = 0; i < m_buttonCharacterList.size(); i++) + { + m_buttonCharacterList[i]->setStyleSheet(style); + m_buttonCharacterList[i]->setFont(fontNormal_1); + } + + for(int i = 0; i < m_buttonWordList.size(); i++) + { + m_buttonWordList[i]->setStyleSheet(style); + m_buttonWordList[i]->setFont(fontNormal_1); + } + + for(int i = 0; i < m_buttonNumberList.size(); i++) + { + m_buttonNumberList[i]->setStyleSheet(style); + m_buttonNumberList[i]->setFont(fontNormal_1); + } + + ui->frameBack->setStyleSheet(TRANSPARENTSTYLE); + ui->frameBack->setStyleSheet(setControlStyle.getStyleSheet(this->objectName())); + + ui->labelName->setStyleSheet(LABELNAVYBLUESTYLE); + ui->labelName->setFont(fontNormal_1); + // ui->labelName->setAlignment(Qt::AlignRight); + // ui->labelName->setAlignment(Qt::AlignVCenter); + + ui->labelTitle->setStyleSheet(LABELWHITESTYLE); + ui->labelTitle->setFont(fontNormal_1); + ui->labelTitle->setAlignment(Qt::AlignLeft); + ui->labelTitle->setAlignment(Qt::AlignVCenter); + + ui->labelNameNewWords->setStyleSheet(LABELNAVYBLUESTYLE); + ui->labelNameNewWords->setFont(fontNormal_1); + ui->labelNameNewWords->setAlignment(Qt::AlignLeft); + ui->labelNameNewWords->setAlignment(Qt::AlignVCenter); + + ui->labelNameOldWords->setStyleSheet(LABELNAVYBLUESTYLE); + ui->labelNameOldWords->setFont(fontNormal_1); + ui->labelNameOldWords->setAlignment(Qt::AlignLeft); + ui->labelNameOldWords->setAlignment(Qt::AlignVCenter); + + ui->buttonShift->setStyleSheet(style); + ui->buttonShift->setFont(fontNormal_1); + + ui->buttonBack->setStyleSheet(style); + ui->buttonBack->setFont(fontNormal_1); + + ui->frameTwo->setStyleSheet(TRANSPARENTSTYLE); + ui->buttonOk->setWhiteBlueBottomStyle(); + ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()+"_1"),12); + ui->buttonCancel->setWhiteBlueBottomStyle(); + ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()+"_1"),12); +} + +void WordsInputDialog::setTitleStr(QString str) +{ + ui->labelTitle->setText(str); +} + +void WordsInputDialog::setOldWordsStr(QString str) +{ + ui->labelNameOldWords->setText(str); +} + +void WordsInputDialog::clean() +{ + m_inputStr.clear(); + ui->labelNameNewWords->clear(); + ui->buttonOk->setEnabled(false); +} + +void WordsInputDialog::wifiClean() +{ + m_inputStr.clear(); + ui->labelNameNewWords->clear(); + ui->buttonOk->setEnabled(true); +} + +QString WordsInputDialog::getInputStr() +{ + return m_inputStr; +} + +void WordsInputDialog::inputBtnClick() +{ + QPushButton *button = (QPushButton*) this->sender() ; + + if(button == NULL) + { + return; + } + QString str = button->text(); + setInputStr(str); +} + +void WordsInputDialog::on_buttonShift_clicked() +{ + m_shift = -1 * m_shift; + + for(int i = 0; i < m_buttonWordList.size(); i++) + { + if(m_shift == -1) + { + QString lostr=m_buttonWordList[i]->text().toLower(); + m_buttonWordList[i]->setText(lostr); + } + else if(m_shift == 1) + { + QString upstr=m_buttonWordList[i]->text().toUpper(); + m_buttonWordList[i]->setText(upstr); + } + } +} + +void WordsInputDialog::on_buttonBack_clicked() +{ + if(m_inputStr.length() <= 0) + { + return; + } + + m_inputStr = m_inputStr.remove(m_inputStr.length()-1,m_inputStr.length()); // 删除最后一位字符 + ui->labelNameNewWords->setText(m_inputStr); + + if(m_inputStr.length() <= 0) + { + ui->buttonOk->setEnabled(false); + ui->buttonOk->resize(174,70); + } +} + +void WordsInputDialog::on_buttonOk_clicked() +{ + done(1); +} + +void WordsInputDialog::on_buttonCancel_clicked() +{ + clean(); + done(0); +} diff --git a/sharedviews/wordsinputdialog.h b/sharedviews/wordsinputdialog.h new file mode 100644 index 0000000..f635e0d --- /dev/null +++ b/sharedviews/wordsinputdialog.h @@ -0,0 +1,54 @@ +#ifndef WORDSINPUTDIALOG_H +#define WORDSINPUTDIALOG_H + +#include +#include "mybutton.h" +#include "setcontrolstyle.h" + +namespace Ui { +class WordsInputDialog; +} + +class WordsInputDialog : public QDialog +{ + Q_OBJECT + +public: + explicit WordsInputDialog(QWidget *parent = 0); + ~WordsInputDialog(); + +private: + Ui::WordsInputDialog *ui; + +private: + void setInputStr(QString str);//设置字符 + +private: + void initControl();//初始化窗体控件,包括位置、尺寸、样式 + void initResolution1910();//初始化窗体控件为1920x1080分辨率 + void initResolution1006();//初始化窗体控件为1024x600分辨率 + void initControlStyle();//初始化窗体控件样式 + +private: + QList m_buttonCharacterList; + QList m_buttonWordList; + QList m_buttonNumberList; + int m_shift; //-1:字母小写 1:字母大写 + QString m_inputStr;//输入的字符 + +public: + void setTitleStr(QString str);//设置标题 + void setOldWordsStr(QString str);//设置标题 + void clean(); + void wifiClean(); + QString getInputStr();//获取输入的字符 + +private slots: + void inputBtnClick(); + void on_buttonShift_clicked(); + void on_buttonBack_clicked(); + void on_buttonOk_clicked(); + void on_buttonCancel_clicked(); +}; + +#endif // WORDSINPUTDIALOG_H diff --git a/sharedviews/wordsinputdialog.ui b/sharedviews/wordsinputdialog.ui new file mode 100644 index 0000000..3b02c5a --- /dev/null +++ b/sharedviews/wordsinputdialog.ui @@ -0,0 +1,2214 @@ + + + WordsInputDialog + + + + 0 + 0 + 1010 + 440 + + + + Dialog + + + + + 0 + 0 + 1024 + 48 + + + + background-color: rgb(0, 170, 255); + + + Words input + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 760 + 310 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + M + + + false + + + false + + + false + + + + + + 510 + 130 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + 6 + + + false + + + false + + + false + + + + + + 208 + 190 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + E + + + false + + + false + + + false + + + + + + 610 + 190 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + U + + + false + + + false + + + false + + + + + + 760 + 250 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + K + + + false + + + false + + + false + + + + + + 107 + 130 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + 2 + + + false + + + false + + + false + + + + + + 560 + 250 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + H + + + false + + + false + + + false + + + + + + 660 + 250 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + J + + + false + + + false + + + false + + + + + + 410 + 190 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + T + + + false + + + false + + + false + + + + + + 910 + 190 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + P + + + false + + + false + + + false + + + + + + 360 + 250 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + F + + + false + + + false + + + false + + + + + + 560 + 310 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + B + + + false + + + false + + + false + + + + + + 208 + 130 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + 3 + + + false + + + false + + + false + + + + + + 7 + 190 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + Q + + + false + + + false + + + false + + + + + + 107 + 190 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + W + + + false + + + false + + + false + + + + + + 610 + 130 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + 7 + + + false + + + false + + + false + + + + + + 160 + 250 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + S + + + false + + + false + + + false + + + + + + 58 + 250 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + A + + + false + + + false + + + false + + + + + + 360 + 310 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + C + + + false + + + false + + + false + + + + + + 910 + 130 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + 0 + + + false + + + false + + + false + + + + + + 7 + 130 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + 1 + + + false + + + false + + + false + + + + + + 10 + 70 + 181 + 44 + + + + + + + Name: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 710 + 190 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + I + + + false + + + false + + + false + + + + + + 200 + 70 + 581 + 44 + + + + font: 16pt "wqy-microhei"; +background-color: rgb(255, 255, 255); +border: 0px solid rgb(11 , 137 , 234); + + + + + + Qt::AlignCenter + + + + + + 510 + 190 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + Y + + + false + + + false + + + false + + + + + + 460 + 310 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + V + + + false + + + false + + + false + + + + + + 159 + 310 + 91 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + Z + + + false + + + false + + + false + + + + + + 309 + 190 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + R + + + false + + + false + + + false + + + + + + 860 + 310 + 130 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + + wqy-microhei + 16 + 50 + false + false + + + + Qt::NoFocus + + + + + + + + + false + + + false + + + false + + + + + + 810 + 190 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + O + + + false + + + false + + + false + + + + + + 410 + 130 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + 5 + + + false + + + false + + + false + + + + + + 660 + 310 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + N + + + false + + + false + + + false + + + + + + 309 + 130 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + 4 + + + false + + + false + + + false + + + + + + 710 + 130 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + 8 + + + false + + + false + + + false + + + + + + 260 + 250 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + D + + + false + + + false + + + false + + + + + + 860 + 250 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + L + + + false + + + false + + + false + + + + + + 460 + 250 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + G + + + false + + + false + + + false + + + + + + 0 + 0 + 1010 + 440 + + + + + 30 + 0 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 800 + 70 + 161 + 44 + + + + border:0px; + + + old + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 10 + 310 + 141 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + + wqy-microhei + 16 + 50 + false + false + + + + Qt::NoFocus + + + + + + + + + false + + + false + + + false + + + + + + 670 + 380 + 321 + 51 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 88 + 0 + 92 + 48 + + + + + 10 + 10 + + + + + 500 + 100 + + + + Qt::NoFocus + + + + + + + + + false + + + false + + + false + + + + + + 190 + 0 + 92 + 48 + + + + + 10 + 10 + + + + + 500 + 100 + + + + Qt::NoFocus + + + + + + + + + false + + + false + + + false + + + + + + + 260 + 310 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + X + + + false + + + false + + + false + + + + + + 810 + 130 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + 9 + + + false + + + false + + + false + + + + + + 210 + 110 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + % + + + false + + + false + + + false + + + + + + 710 + 110 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + * + + + false + + + false + + + false + + + + + + 110 + 110 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + @ + + + false + + + false + + + false + + + + + + 10 + 110 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + ! + + + false + + + false + + + false + + + + + + 510 + 110 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + ) + + + false + + + false + + + false + + + + + + 810 + 110 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + _ + + + false + + + false + + + false + + + + + + 310 + 110 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + ^ + + + false + + + false + + + false + + + + + + 610 + 110 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + . + + + false + + + false + + + false + + + + + + 410 + 110 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + ( + + + false + + + false + + + false + + + + + + 910 + 110 + 92 + 50 + + + + + 30 + 10 + + + + + 500 + 200 + + + + Qt::NoFocus + + + + + + - + + + false + + + false + + + false + + + frameBack + labelTitle + buttonLatterM + buttonNum6 + buttonLatterE + buttonLatterU + buttonLatterK + buttonNum2 + buttonLatterH + buttonLatterJ + buttonLatterT + buttonLatterP + buttonLatterF + buttonLatterB + buttonNum3 + buttonLatterQ + buttonLatterW + buttonNum7 + buttonLatterS + buttonLatterA + buttonLatterC + buttonNum0 + buttonNum1 + labelName + buttonLatterI + labelNameNewWords + buttonLatterY + buttonLatterV + buttonLatterZ + buttonLatterR + buttonBack + buttonLatterO + buttonNum5 + buttonLatterN + buttonNum4 + buttonNum8 + buttonLatterD + buttonLatterL + buttonLatterG + labelNameOldWords + buttonShift + frameTwo + buttonLatterX + buttonNum9 + buttonChara3 + buttonChara8 + buttonChara2 + buttonChara1 + buttonChara6 + buttonChara9 + buttonChara4 + buttonChara7 + buttonChara5 + buttonChara10 + + + + MyButton + QPushButton +
sharedviews/mybutton.h
+
+
+ + +