完成基本功能
This commit is contained in:
commit
003adac6bd
31
PlugBoardCommTestTool/PlugBoardCommTestTool.pro
Normal file
31
PlugBoardCommTestTool/PlugBoardCommTestTool.pro
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
QT += core gui serialport
|
||||||
|
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
|
CONFIG += c++11
|
||||||
|
|
||||||
|
# The following define makes your compiler emit warnings if you use
|
||||||
|
# any Qt feature that has been marked deprecated (the exact warnings
|
||||||
|
# depend on your compiler). Please consult the documentation of the
|
||||||
|
# deprecated API in order to know how to port your code away from it.
|
||||||
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
|
||||||
|
# You can also make your code fail to compile if it uses deprecated APIs.
|
||||||
|
# In order to do so, uncomment the following line.
|
||||||
|
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||||
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp \
|
||||||
|
mainwindow.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
mainwindow.h
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
mainwindow.ui
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
319
PlugBoardCommTestTool/PlugBoardCommTestTool.pro.user
Normal file
319
PlugBoardCommTestTool/PlugBoardCommTestTool.pro.user
Normal file
|
@ -0,0 +1,319 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE QtCreatorProject>
|
||||||
|
<!-- Written by QtCreator 4.11.1, 2024-08-14T13:15:48. -->
|
||||||
|
<qtcreator>
|
||||||
|
<data>
|
||||||
|
<variable>EnvironmentId</variable>
|
||||||
|
<value type="QByteArray">{b72ef07e-303d-4886-ad48-cd1f209eb895}</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||||
|
<value type="int">0</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||||
|
<value type="QString" key="language">Cpp</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||||
|
<value type="QString" key="language">QmlJS</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||||
|
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
|
||||||
|
<value type="QString">-fno-delayed-template-parsing</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/_SRC/_tools/PlugBoardCommTestTool/build-PlugBoardCommTestTool-Desktop_Qt_5_14_2_MinGW_64_bit-Debug</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/_SRC/_tools/PlugBoardCommTestTool/build-PlugBoardCommTestTool-Desktop_Qt_5_14_2_MinGW_64_bit-Release</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/_SRC/_tools/PlugBoardCommTestTool/build-PlugBoardCommTestTool-Desktop_Qt_5_14_2_MinGW_64_bit-Profile</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
|
||||||
|
<value type="int" key="Analyzer.Perf.Frequency">250</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
|
||||||
|
<value type="QString">-e</value>
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
<value type="QString">--call-graph</value>
|
||||||
|
<value type="QString">dwarf,4096</value>
|
||||||
|
<value type="QString">-F</value>
|
||||||
|
<value type="QString">250</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
|
||||||
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
||||||
|
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
||||||
|
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:D:/_SRC/_tools/PlugBoardCommTestTool/PlugBoardCommTestTool/PlugBoardCommTestTool.pro</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">D:/_SRC/_tools/PlugBoardCommTestTool/PlugBoardCommTestTool/PlugBoardCommTestTool.pro</value>
|
||||||
|
<value type="QString" key="RunConfiguration.Arguments"></value>
|
||||||
|
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
|
||||||
|
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory.default">D:/_SRC/_tools/PlugBoardCommTestTool/build-PlugBoardCommTestTool-Desktop_Qt_5_14_2_MinGW_64_bit-Release</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||||
|
<value type="int">1</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||||
|
<value type="int">22</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>Version</variable>
|
||||||
|
<value type="int">22</value>
|
||||||
|
</data>
|
||||||
|
</qtcreator>
|
11
PlugBoardCommTestTool/main.cpp
Normal file
11
PlugBoardCommTestTool/main.cpp
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
MainWindow w;
|
||||||
|
w.show();
|
||||||
|
return a.exec();
|
||||||
|
}
|
844
PlugBoardCommTestTool/mainwindow.cpp
Normal file
844
PlugBoardCommTestTool/mainwindow.cpp
Normal file
|
@ -0,0 +1,844 @@
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
|
||||||
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
|
: QMainWindow(parent)
|
||||||
|
, ui(new Ui::MainWindow)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
Init();
|
||||||
|
SerialPortInfo_Init();
|
||||||
|
Config_Init(); // 文件初始化
|
||||||
|
BindSlot(); // 槽函数 绑定
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow()
|
||||||
|
{
|
||||||
|
DeInit();
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: 相关句柄的初始化
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::Init()
|
||||||
|
{
|
||||||
|
this->serial = new QSerialPort;
|
||||||
|
this->settings = new QSettings(CONFIG_FILE_LOCATION, QSettings::IniFormat);
|
||||||
|
this->recvTimer = new QTimer;
|
||||||
|
this->loopTimer = new QTimer;
|
||||||
|
|
||||||
|
recvTimer->setSingleShot(true); // 单次模式
|
||||||
|
loopTimer->setSingleShot(true); // 单次模式
|
||||||
|
|
||||||
|
// ui初始化
|
||||||
|
ui->textEdit_receive->document()->setMaximumBlockCount(500); //最多500行
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: 去初始化
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::DeInit()
|
||||||
|
{
|
||||||
|
delete recvTimer;
|
||||||
|
delete loopTimer;
|
||||||
|
delete settings;
|
||||||
|
delete serial;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: 串口信息初始化
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::SerialPortInfo_Init()
|
||||||
|
{
|
||||||
|
ui->comboBox_port->clear(); // 清除数据
|
||||||
|
for (QSerialPortInfo serialPortInfo : QSerialPortInfo::availablePorts())
|
||||||
|
{
|
||||||
|
ui->comboBox_port->addItem(serialPortInfo.portName() + " [" + serialPortInfo.description() + ']');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: 文件相关初始化
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::Config_Init()
|
||||||
|
{
|
||||||
|
// 配置文件 configuration 键值需要为true,否则是为没有配置文件或配置文件异常,需要清空配置文件随后重新初始化
|
||||||
|
if (this->settings->value("configuration", false).toInt() != 1)
|
||||||
|
{
|
||||||
|
this->settings->clear();
|
||||||
|
this->Config_SettingInit();
|
||||||
|
}
|
||||||
|
this->Config_SettingUpdate(); // 更新界面显示
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: 初始化配置文件
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::Config_SettingInit()
|
||||||
|
{
|
||||||
|
QCheckBox *checkBox = new QCheckBox;
|
||||||
|
|
||||||
|
this->settings->setValue("configuration", 1);
|
||||||
|
for (uint16_t i = 0; i <= 0xff; i++)
|
||||||
|
{
|
||||||
|
if (i % 16 == 0) // 16的倍数为全选框的配置
|
||||||
|
{
|
||||||
|
checkBox = this->findChild<QCheckBox *>(tr("checkBox_mix_%1x").arg(i / 16, 1, 16));
|
||||||
|
if (checkBox != nullptr)
|
||||||
|
{
|
||||||
|
this->settings->setValue(checkBox->objectName(), 0); // 初始化设置为不勾选
|
||||||
|
}
|
||||||
|
}
|
||||||
|
checkBox = this->findChild<QCheckBox *>(tr("checkBox_mix_%1").arg(i, 2, 16, QLatin1Char('0')));
|
||||||
|
if (checkBox != nullptr)
|
||||||
|
{
|
||||||
|
this->settings->setValue(checkBox->objectName(), 0); // // 初始化设置为不勾选
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: 配置文件更新显示
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::Config_SettingUpdate()
|
||||||
|
{
|
||||||
|
QCheckBox *checkBox = new QCheckBox;
|
||||||
|
QString checkBoxName = NULL;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
for (uint16_t i = 0; i <= 0xff; i++)
|
||||||
|
{
|
||||||
|
if (i % 16 == 0) // 16的倍数为全选框的配置
|
||||||
|
{
|
||||||
|
checkBoxName = tr("checkBox_mix_%1x").arg(i / 16, 1, 16);
|
||||||
|
ret = this->settings->value(checkBoxName, -1).toInt();
|
||||||
|
if (ret != -1)
|
||||||
|
{
|
||||||
|
checkBox = this->findChild<QCheckBox *>(checkBoxName);
|
||||||
|
checkBox->setChecked((bool)ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
checkBoxName = tr("checkBox_mix_%1").arg(i, 2, 16, QLatin1Char('0'));
|
||||||
|
ret = this->settings->value(checkBoxName, -1).toInt();
|
||||||
|
if (ret != -1)
|
||||||
|
{
|
||||||
|
checkBox = this->findChild<QCheckBox *>(checkBoxName);
|
||||||
|
checkBox->setChecked((bool)ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: 计算数据的校验和
|
||||||
|
* @para: uint8_t*:传入数组
|
||||||
|
* @return: uint8_t 获取到的校验和
|
||||||
|
*/
|
||||||
|
uint8_t MainWindow::Serial_GetSumCheck(uint8_t* array)
|
||||||
|
{
|
||||||
|
uint8_t cs = 0;
|
||||||
|
cs += array[SERIAL_COMM_INDEX_ADDR];
|
||||||
|
cs += array[SERIAL_COMM_INDEX_LEN];
|
||||||
|
for (uint8_t i = 0; i < array[SERIAL_COMM_INDEX_LEN]; i++)
|
||||||
|
{
|
||||||
|
cs += array[i + 4];
|
||||||
|
}
|
||||||
|
return cs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: 接收到串口数据后进行数据刷新
|
||||||
|
* @para:
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::Serial_UpdateData(uint8_t* array)
|
||||||
|
{
|
||||||
|
uint8_t mixIndex = array[SERIAL_COMM_INDEX_MIXINDEX];
|
||||||
|
uint16_t mixData = array[SERIAL_COMM_INDEX_MIXDATA] << 8 | array[SERIAL_COMM_INDEX_MIXDATA + 1];
|
||||||
|
PLUG_BOARD_POWER_STATUS_UNION powerStatus; // 电源上传的32位标志位
|
||||||
|
powerStatus.inWord = ((uint32_t)(array[SERIAL_COMM_INDEX_STATUS] << 24) |
|
||||||
|
(uint32_t)(array[SERIAL_COMM_INDEX_STATUS + 1] << 16) |
|
||||||
|
(uint32_t)(array[SERIAL_COMM_INDEX_STATUS + 2] << 8) |
|
||||||
|
(uint32_t)(array[SERIAL_COMM_INDEX_STATUS + 3]));
|
||||||
|
|
||||||
|
// 32位状态位显示
|
||||||
|
for (uint8_t i = 0; i < 32; i++)
|
||||||
|
{
|
||||||
|
QLabel* label = this->findChild<QLabel*>(QString("label_statusbits_%1").arg(i));
|
||||||
|
if (label)
|
||||||
|
{
|
||||||
|
if (powerStatus.inWord & (1 << i)) // 如果为1
|
||||||
|
{
|
||||||
|
label->setStyleSheet("QLabel{background-color:rgb(255,0,0);}"); // 设置样式表
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
label->setText("应急");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
label->setText("强起");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
case 7:
|
||||||
|
label->setText("手动");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
case 5:
|
||||||
|
case 6:
|
||||||
|
case 27:
|
||||||
|
case 29:
|
||||||
|
case 30:
|
||||||
|
label->setText("故障");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
label->setText("有效");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // 如果为0
|
||||||
|
{
|
||||||
|
label->setStyleSheet("QLabel{background-color:rgb(0,255,0);}"); // 设置样式表
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
case 7:
|
||||||
|
label->setText("自动");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
case 5:
|
||||||
|
case 6:
|
||||||
|
case 27:
|
||||||
|
case 29:
|
||||||
|
case 30:
|
||||||
|
label->setText("正常");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
label->setText("无效");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 融合数据显示
|
||||||
|
QLabel *label = this->findChild<QLabel *>(tr("label_mix_%1").arg(mixIndex, 2, 16, QLatin1Char('0')));
|
||||||
|
static QLabel* lastLabel = nullptr; // 保存上一次刷新的label控件
|
||||||
|
if (label)
|
||||||
|
{
|
||||||
|
label->clear(); // 清除当前文字显示
|
||||||
|
if (lastLabel)
|
||||||
|
{
|
||||||
|
lastLabel->setStyleSheet("QLabel{background-color:yellow;}"); // 重置上一个label的样式表
|
||||||
|
}
|
||||||
|
label->setStyleSheet("QLabel{background-color:#c8ffff;}"); // 显示当前需要刷新的控件的样式表
|
||||||
|
|
||||||
|
// 进行融合数据的显示
|
||||||
|
switch (mixIndex) // 判断融合数据索引
|
||||||
|
{
|
||||||
|
case 0x01: // 版本号
|
||||||
|
{
|
||||||
|
QString str = QString::number(array[10]) + QString::number(array[11]).asprintf("%02d", array[11]);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x02: // 回路数量
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x03: // 备电数量
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x04: // 电源设置
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x05: // 备电调试模式
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x10: // 主电电压
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " V");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x11: // 输出电压
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mV");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x12: // 输出电流
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mA");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x13: // 电池电压
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mV");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x14: // 充电电流
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mA");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x1f: // 备电切断电压
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mV");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x20: // 欠压电池
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x21: // 过放电池
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x22: // 过压电池
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x23: // 开路电池
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x24: // 短路电池
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x30: // 开路回路
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x31: // 短路回路
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x32: // 熔断保险丝
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x33: // 过载回路
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData, 16);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x40: // 电源地址码
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x41: // can波特率设置
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x42: // 灯具亮度等级
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x50: // 电池1温度
|
||||||
|
{
|
||||||
|
QString str1 = nullptr, str2 = nullptr;
|
||||||
|
if(array[10] & 0x80)
|
||||||
|
{
|
||||||
|
str1 += "包:-";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
str1 += "包:";
|
||||||
|
}
|
||||||
|
str1 += QString::number(array[10] & 0x7f);
|
||||||
|
if(array[11] & 0x80)
|
||||||
|
{
|
||||||
|
str2 += "内:-";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
str2 += "内:";
|
||||||
|
}
|
||||||
|
str2 += QString::number(array[11] & 0x7f);
|
||||||
|
label->setText(str1 + " " + str2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
break;
|
||||||
|
case 0xa0: // 回路电流_1
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mA");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xa1: // 回路电流_2
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mA");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xa2: // 回路电流_3
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mA");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xa3: // 回路电流_4
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mA");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xa4: // 回路电流_5
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mA");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xa5: // 回路电流_6
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mA");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xa6: // 回路电流_7
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mA");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xa7: // 回路电流_8
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mA");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xb0: // 电池电压1
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mV");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xb1: // 电池电压2
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mV");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xb2: // 电池电压3
|
||||||
|
{
|
||||||
|
QString str = QString::number(mixData);
|
||||||
|
label->setText(str + " mV");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xff: // 获取额定功率
|
||||||
|
{
|
||||||
|
QString str = QString::number(array[11] << 8 | array[10]);
|
||||||
|
label->setText(str + " W");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastLabel = label; // 保存上一次刷新的
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],融合数据查询按钮回调函数
|
||||||
|
* @para: QByteArray:待发送数据
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::Serial_SendData(QByteArray senddata)
|
||||||
|
{
|
||||||
|
if (this->serial->isOpen())
|
||||||
|
{
|
||||||
|
this->serial->write(senddata);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QMessageBox messageBox;
|
||||||
|
messageBox.setIcon(QMessageBox::Warning);
|
||||||
|
messageBox.setWindowTitle("警告");
|
||||||
|
messageBox.setText("请先打开串口");
|
||||||
|
messageBox.exec();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************<槽函数>*/
|
||||||
|
/* @brief: [槽函数],融合数据查询按钮回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow:: pushButton_mix_clicked_callback()
|
||||||
|
{
|
||||||
|
QPushButton *btn = qobject_cast<QPushButton *>(sender()); // 获取信号的发送者
|
||||||
|
uint8_t mixIndex = btn->text().mid(1, 2).toUInt(nullptr, 16); // 转16进制
|
||||||
|
uint8_t sendbuf[] = {0x78, 0x02, 0x09, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, mixIndex, 0x00, 0x17};
|
||||||
|
sendbuf[SERIAL_COMM_INDEX_CS] = Serial_GetSumCheck(sendbuf);
|
||||||
|
Serial_SendData(QByteArray(reinterpret_cast<char *>(sendbuf), sizeof(sendbuf) / sizeof(sendbuf[0])));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],融合数据查询按钮回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow:: pushButton_mixsend_clicked_callback()
|
||||||
|
{
|
||||||
|
QPushButton *btn = qobject_cast<QPushButton *>(sender()); // 获取信号的发送者
|
||||||
|
uint8_t mixIndex = btn->text().mid(1, 2).toUInt(nullptr, 16); // 转16进制
|
||||||
|
QLineEdit *lineEdit = this->findChild<QLineEdit*>("lineEdit_mixsend_" + btn->text().mid(1, 2));
|
||||||
|
if (lineEdit)
|
||||||
|
{
|
||||||
|
uint8_t sendbuf[] = {0x78, 0x02, 0x09, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, mixIndex, 0x00, 0x00, 0x00, 0x00, 0x17};
|
||||||
|
|
||||||
|
uint16_t mixData = lineEdit->text().toUShort(nullptr, 10);
|
||||||
|
sendbuf[SERIAL_COMM_INDEX_MIXDATA] = (uint8_t)(mixData >> 8);
|
||||||
|
sendbuf[SERIAL_COMM_INDEX_MIXDATA + 1] = (uint8_t)(mixData);
|
||||||
|
sendbuf[SERIAL_COMM_INDEX_CS] = Serial_GetSumCheck(sendbuf);
|
||||||
|
Serial_SendData(QByteArray(reinterpret_cast<char *>(sendbuf), sizeof(sendbuf) / sizeof(sendbuf[0])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],命令按钮回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow:: pushButton_cmd_clicked_callback()
|
||||||
|
{
|
||||||
|
QPushButton *btn = qobject_cast<QPushButton *>(sender()); // 获取信号的发送者
|
||||||
|
uint8_t cmd = btn->text().mid(1, 2).toUInt(nullptr, 16); // 转16进制
|
||||||
|
uint8_t sendbuf[] = {0x78, 0x02, 0x09, 0x78, cmd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17};
|
||||||
|
sendbuf[SERIAL_COMM_INDEX_CS] = Serial_GetSumCheck(sendbuf);
|
||||||
|
Serial_SendData(QByteArray(reinterpret_cast<char *>(sendbuf), sizeof(sendbuf) / sizeof(sendbuf[0])));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],全选框回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::checkbox_mix_all_stateChanged_callback()
|
||||||
|
{
|
||||||
|
QCheckBox* checkbox_all = qobject_cast<QCheckBox *>(sender()); // 获取信号的发送者
|
||||||
|
QCheckBox* checkbox_singal = new QCheckBox;
|
||||||
|
QString section = checkbox_all->objectName().mid(13, 1);
|
||||||
|
int ret = checkbox_all->isChecked();
|
||||||
|
|
||||||
|
this->settings->setValue(checkbox_all->objectName(), ret);
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i <= 0x0f; i++)
|
||||||
|
{
|
||||||
|
checkbox_singal = this->findChild<QCheckBox *>(tr("checkBox_mix_%1%2").arg(section).arg(i, 1, 16));
|
||||||
|
if (checkbox_singal)
|
||||||
|
{
|
||||||
|
this->settings->setValue(checkbox_singal->objectName(), ret);
|
||||||
|
checkbox_singal->setChecked(checkbox_all->isChecked());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],单个选中该框回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::checkbox_mix_single_stateChanged_callback()
|
||||||
|
{
|
||||||
|
QCheckBox* checkbox = qobject_cast<QCheckBox *>(sender()); // 获取信号的发送者
|
||||||
|
int data = checkbox->isChecked();
|
||||||
|
this->settings->setValue(checkbox->objectName(), data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],循环发送框回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::checkbox_mix_loop_stateChanged_callback()
|
||||||
|
{
|
||||||
|
if (ui->checkBox_mix_loop->isChecked())
|
||||||
|
{
|
||||||
|
if (this->serial->isOpen())
|
||||||
|
{
|
||||||
|
loopTimer->start(ui->lineEdit_looptime->text().toUInt());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QMessageBox messageBox;
|
||||||
|
messageBox.setIcon(QMessageBox::Warning);
|
||||||
|
messageBox.setWindowTitle("警告");
|
||||||
|
messageBox.setText("请先打开串口");
|
||||||
|
messageBox.exec();
|
||||||
|
ui->checkBox_mix_loop->setChecked(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
loopTimer->stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],端口刷新回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::pushButton_refresh_clicked_callback()
|
||||||
|
{
|
||||||
|
this->SerialPortInfo_Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],开启串口按钮回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::pushButton_open_clicked_callback()
|
||||||
|
{
|
||||||
|
QStringList portStrList = ui->comboBox_port->currentText().split(" ["); // 获取端口号
|
||||||
|
this->serial->setPortName(portStrList.at(0)); // 设置端口号
|
||||||
|
this->serial->setBaudRate(ui->comboBox_bandrate->currentText().toUInt()); // 获取波特率
|
||||||
|
this->serial->setDataBits(QSerialPort::Data8); // 串口数据位数
|
||||||
|
this->serial->setStopBits(QSerialPort::OneStop); // 以为停止位
|
||||||
|
this->serial->setParity(QSerialPort::NoParity); // 无奇偶校验
|
||||||
|
this->serial->setFlowControl(QSerialPort::NoFlowControl); // 硬件控制
|
||||||
|
|
||||||
|
if (this->serial->open(QIODevice::ReadWrite)) // 打开成功
|
||||||
|
{
|
||||||
|
ui->pushButton_open->setDisabled(true);
|
||||||
|
ui->pushButton_close->setEnabled(true);
|
||||||
|
ui->comboBox_port->setDisabled(true);
|
||||||
|
ui->pushButton_refresh->setDisabled(true);
|
||||||
|
ui->comboBox_bandrate->setDisabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->pushButton_open->setEnabled(true);
|
||||||
|
ui->pushButton_close->setDisabled(true);
|
||||||
|
ui->comboBox_port->setEnabled(true);
|
||||||
|
ui->pushButton_refresh->setEnabled(true);
|
||||||
|
ui->comboBox_bandrate->setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],关闭串口按钮回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::pushBurron_close_clicked_callback()
|
||||||
|
{
|
||||||
|
if (serial->isOpen())
|
||||||
|
{
|
||||||
|
recvTimer->stop(); // 关闭接收定时器
|
||||||
|
loopTimer->stop(); // 关闭循环发送定时器
|
||||||
|
serial->close(); // 关闭串口
|
||||||
|
ui->pushButton_open->setEnabled(true);
|
||||||
|
ui->pushButton_close->setDisabled(true);
|
||||||
|
ui->comboBox_port->setEnabled(true);
|
||||||
|
ui->pushButton_refresh->setEnabled(true);
|
||||||
|
ui->comboBox_bandrate->setEnabled(true);
|
||||||
|
ui->checkBox_mix_loop->setChecked(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],串口接收到数据回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::qserail_readyread_callback()
|
||||||
|
{
|
||||||
|
this->recvTimer->start(ui->lineEdit_timeout->text().toUInt()); // 开启接收超时定时器
|
||||||
|
recvByteArray.append(serial->readAll()); // 读取接收数据
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @brief: [槽函数],串口接收超时回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::recvtimer_timeout_callback()
|
||||||
|
{
|
||||||
|
QString timeStr = QDateTime::currentDateTime().toString(); // 获取时间戳
|
||||||
|
uint8_t recvBuf[SERIAL_BUF_MAXSIZE] = {0};
|
||||||
|
QByteArray dataStr = nullptr;
|
||||||
|
|
||||||
|
/********** 接收数据的显示 **********/
|
||||||
|
for(uint8_t i = 0; i < recvByteArray.toHex().length(); i += 2)
|
||||||
|
{
|
||||||
|
dataStr += "0x" + recvByteArray.toHex().mid(i, 2) + ' '; // 转化为十六进制
|
||||||
|
}
|
||||||
|
ui->textEdit_receive->insertPlainText('[' + timeStr + "] " + dataStr);
|
||||||
|
|
||||||
|
/********** 进行接收数据的解析 **********/
|
||||||
|
memcpy(recvBuf, recvByteArray.data(), recvByteArray.length()); // 将QByteArray转化为uint8_t
|
||||||
|
// 帧头帧尾的判断
|
||||||
|
if (recvBuf[SERIAL_COMM_INDEX_HEAD] == SERIAL_COMM_HEAD && \
|
||||||
|
recvBuf[recvBuf[SERIAL_COMM_INDEX_LEN] + 5] == SERIAL_COMM_TIAL)
|
||||||
|
{
|
||||||
|
// 校验和判断
|
||||||
|
if (Serial_GetSumCheck(recvBuf) == recvBuf[recvBuf[SERIAL_COMM_INDEX_LEN] + 4])
|
||||||
|
{
|
||||||
|
ui->textEdit_receive->insertPlainText(" [sumcheck - OK]\n");
|
||||||
|
this->Serial_UpdateData(recvBuf); // 进行数据显示
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->textEdit_receive->insertPlainText(" [sumcheck - ERROR]\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->textEdit_receive->insertPlainText(" [head&tail - ERROR]\n");
|
||||||
|
}
|
||||||
|
recvByteArray.clear(); // 清除接收数据
|
||||||
|
ui->textEdit_receive->moveCursor(QTextCursor::End); // 自动滚动
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @brief: [槽函数],循环发送定时到回调函数
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::looptimer_timeout_callback()
|
||||||
|
{
|
||||||
|
loopTimer->start(ui->lineEdit_looptime->text().toUInt());
|
||||||
|
QCheckBox* checkBox = nullptr;
|
||||||
|
QPushButton* btn = nullptr;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
btn = this->findChild<QPushButton *>(QString("pushButton_mix_%1").arg(loopIndex, 2, 16, QLatin1Char('0')));
|
||||||
|
checkBox = this->findChild<QCheckBox *>(QString("checkBox_mix_%1").arg(loopIndex++, 2, 16, QLatin1Char('0')));
|
||||||
|
}while(!btn || !checkBox || !checkBox->isChecked());
|
||||||
|
btn->click(); // 手动触发
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @brief: 绑定槽函数,用于部分控件回调函数绑定
|
||||||
|
* @para: void
|
||||||
|
* @return: void
|
||||||
|
*/
|
||||||
|
void MainWindow::BindSlot()
|
||||||
|
{
|
||||||
|
QCheckBox* checkbox = new QCheckBox;
|
||||||
|
QPushButton* btn = new QPushButton;
|
||||||
|
|
||||||
|
// 融合数据索引按钮
|
||||||
|
for (uint16_t i = 0; i <= 0xff; i++)
|
||||||
|
{
|
||||||
|
btn = this->findChild<QPushButton *>(tr("pushButton_mix_%1").arg(i, 2, 16, QLatin1Char('0'))); // 宽度2,不足补0
|
||||||
|
if (btn)
|
||||||
|
{
|
||||||
|
connect(btn, &QPushButton::clicked, this, &MainWindow::pushButton_mix_clicked_callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 融合数据发送按钮
|
||||||
|
for (uint16_t i = 0; i <= 0xff; i++)
|
||||||
|
{
|
||||||
|
btn = this->findChild<QPushButton *>(tr("pushButton_mixsend_%1").arg(i, 2, 16, QLatin1Char('0'))); // 宽度2,不足补0
|
||||||
|
if (btn)
|
||||||
|
{
|
||||||
|
connect(btn, &QPushButton::clicked, this, &MainWindow::pushButton_mixsend_clicked_callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 命令按钮
|
||||||
|
for (uint16_t i = 0; i <= 0xff; i++)
|
||||||
|
{
|
||||||
|
btn = this->findChild<QPushButton *>(tr("pushButton_cmd_%1").arg(i, 2, 16, QLatin1Char('0'))); // 宽度2,不足补0
|
||||||
|
if (btn)
|
||||||
|
{
|
||||||
|
connect(btn, &QPushButton::clicked, this, &MainWindow::pushButton_cmd_clicked_callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 全选框
|
||||||
|
for (uint8_t i = 0; i <= 0xf; i++)
|
||||||
|
{
|
||||||
|
checkbox = this->findChild<QCheckBox *>(tr("checkBox_mix_%1x").arg(i, 0, 16));
|
||||||
|
if (checkbox)
|
||||||
|
{
|
||||||
|
connect(checkbox, &QCheckBox::stateChanged, this, &MainWindow::checkbox_mix_all_stateChanged_callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 单个选择发送函数
|
||||||
|
for (uint16_t i = 0; i <= 0xff; i++)
|
||||||
|
{
|
||||||
|
checkbox = this->findChild<QCheckBox *>(tr("checkBox_mix_%1").arg(i, 2, 16, QLatin1Char('0')));
|
||||||
|
if (checkbox)
|
||||||
|
{
|
||||||
|
connect(checkbox, &QCheckBox::stateChanged, this, &MainWindow::checkbox_mix_single_stateChanged_callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 循环发送框
|
||||||
|
connect(ui->checkBox_mix_loop, &QCheckBox::stateChanged, this, &MainWindow::checkbox_mix_loop_stateChanged_callback);
|
||||||
|
|
||||||
|
// 端口刷新按钮回调函数
|
||||||
|
connect(ui->pushButton_refresh, &QPushButton::clicked, this, &MainWindow::pushButton_refresh_clicked_callback);
|
||||||
|
|
||||||
|
// 打开串口按钮回调函数
|
||||||
|
connect(ui->pushButton_open, &QPushButton::clicked, this, &MainWindow::pushButton_open_clicked_callback);
|
||||||
|
|
||||||
|
// 关闭串口按钮回调函数
|
||||||
|
connect(ui->pushButton_close, &QPushButton::clicked, this,&MainWindow::pushBurron_close_clicked_callback);
|
||||||
|
|
||||||
|
// 清除接收显示回调函数
|
||||||
|
connect(ui->pushButton_clear, &QPushButton::clicked, this, [=](){
|
||||||
|
ui->textEdit_receive->clear();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 串口接收数据回调函数
|
||||||
|
connect(serial, &QSerialPort::readyRead, this, &MainWindow::qserail_readyread_callback);
|
||||||
|
|
||||||
|
// 串口接收超时回调函数
|
||||||
|
connect(this->recvTimer, &QTimer::timeout, this, &MainWindow::recvtimer_timeout_callback);
|
||||||
|
|
||||||
|
// 循环发送定时器定时达到回调函数
|
||||||
|
connect(loopTimer, &QTimer::timeout, this, &MainWindow::looptimer_timeout_callback);
|
||||||
|
|
||||||
|
// 十六进制发送按钮回调
|
||||||
|
connect(ui->pushButton_send, &QPushButton::clicked, this, [=](){
|
||||||
|
Serial_SendData(QByteArray::fromHex(ui->lineEdit_send->text().toLocal8Bit()));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
152
PlugBoardCommTestTool/mainwindow.h
Normal file
152
PlugBoardCommTestTool/mainwindow.h
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <QSerialPort>
|
||||||
|
#include <qserialportinfo>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include <QDateTime> // 日期
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
|
||||||
|
#define RESET "\033[0m"
|
||||||
|
#define RED "\033[31m" /* Red */
|
||||||
|
#define GREEN "\033[32m" /* Green */
|
||||||
|
|
||||||
|
#define CONFIG_FILE_LOCATION "./config.ini" // 配置文件的存储路径
|
||||||
|
|
||||||
|
#define SERIAL_BUF_MAXSIZE 50 // 串口通信缓存大小
|
||||||
|
#define SERIAL_COMM_HEAD 0x78 // 串口数据帧头
|
||||||
|
#define SERIAL_COMM_TIAL 0x17 // 串口数据帧尾
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SERIAL_COMM_INDEX_HEAD = 0, // 帧头索引
|
||||||
|
SERIAL_COMM_INDEX_ADDR = 1, // 地址索引
|
||||||
|
SERIAL_COMM_INDEX_LEN = 2, // 帧长度索引
|
||||||
|
SERIAL_COMM_INDEX_STATUS = 5, // 32位标志位索引
|
||||||
|
SERIAL_COMM_INDEX_MIXINDEX = 9, // 融合数据索引
|
||||||
|
SERIAL_COMM_INDEX_MIXDATA = 10, // 融合数据
|
||||||
|
SERIAL_COMM_INDEX_MIXASK = 12, // 需要查询的融合数据索引
|
||||||
|
SERIAL_COMM_INDEX_CS = 13, // 校验和
|
||||||
|
}SERIAL_COMM_INDEX;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
|
||||||
|
uint32_t Emergency_Flag : 1; // 应急状态[0:无效 1:有效]
|
||||||
|
uint32_t forceButtonFlg : 1; // 强启开关[0:无效 1:有效]
|
||||||
|
uint32_t WorkingModeBatMaintain : 1; // 手自动模式[0:自动 1:手动]
|
||||||
|
uint32_t mainPowerLostFlg : 1; // 主电状态[0:正常 1:丢失]
|
||||||
|
|
||||||
|
uint32_t outPutERR : 1; // 输出故障[0:正常 1:故障]
|
||||||
|
uint32_t batErrFlg : 1; // 备电故障[0:正常 1:故障]
|
||||||
|
uint32_t LOOPERR : 1; // 输出状态[0:正常 1:故障]
|
||||||
|
uint32_t METOD_AUTO_ERR : 1; // 自检状态[0:正常 1:故障]
|
||||||
|
|
||||||
|
uint32_t isAC220Lost : 1; // 联动控制端2状态[0:无效 1:有效] //220V市电
|
||||||
|
uint32_t dryNode : 1; // 联动控制端3状态[0:无效 1:有效] //干接点
|
||||||
|
uint32_t outPutOCFlg : 1; // 输出开路状态[0:无效 1:开路]
|
||||||
|
uint32_t outPutOLFlg : 1; // 输出过载状态[0:正常 1:过载]
|
||||||
|
|
||||||
|
uint32_t Start_Comp_Flag : 1; // 启动完成状态[0:无效 1:有效]
|
||||||
|
uint32_t batOCFlg : 1; // 电池端口开路状态[0:无效 1:开路]
|
||||||
|
uint32_t batSCFlg : 1; // 电池端口短路状态[0:无效 1:短路]
|
||||||
|
uint32_t batSampleLineErrFlg : 1; // 电池采样线故障[0:无效 1:故障]
|
||||||
|
|
||||||
|
uint32_t batUVFlg : 1; // 电池电压低于欠压点[0:无效 1:欠压]
|
||||||
|
uint32_t batUCVFlg : 1; // 电池电压低于切断点[0:无效 1:欠压]
|
||||||
|
uint32_t batOVFlg : 1; // 电池电压高于最大预设电压[0:无效 1:过压]
|
||||||
|
uint32_t : 1; // reserve
|
||||||
|
|
||||||
|
uint32_t chargingFlg : 1; // 充电中状态[0:无效 1:充电]
|
||||||
|
uint32_t chargeCpltFlg : 1; // 充电完成状态[0:无效 1:充满]
|
||||||
|
uint32_t LOOPOCFlg : 1; // 路由开路状态[0:无效 1:开路]
|
||||||
|
uint32_t LOOPSCFlg : 1; // 路由短路状态[0:无效 1:短路]
|
||||||
|
|
||||||
|
uint32_t FUSEOCFlg : 1; // 保险丝开路状态[0:无效 1:开路]
|
||||||
|
uint32_t LOOPOLFlg : 1; // 回路过载状态[0:正常 1:过载]
|
||||||
|
uint32_t reserve1 : 1;
|
||||||
|
uint32_t reserve2 : 1;
|
||||||
|
|
||||||
|
uint32_t AC220ENStatus : 1; // 市电检测使能标志[0:未使能 1:使能]
|
||||||
|
uint32_t reserve4 : 1;
|
||||||
|
uint32_t reserve5 : 1;
|
||||||
|
uint32_t reserve6 : 1;
|
||||||
|
|
||||||
|
} PLUG_BOARD_STATUS_TypeDef;
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
PLUG_BOARD_STATUS_TypeDef inBit;
|
||||||
|
uint32_t inWord;
|
||||||
|
} PLUG_BOARD_POWER_STATUS_UNION;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui { class MainWindow; }
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MainWindow(QWidget *parent = nullptr);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void pushButton_mix_clicked_callback(); // 融合数据查询按钮回调函数
|
||||||
|
|
||||||
|
void pushButton_mixsend_clicked_callback(); // 融合数据发送按钮回调函数
|
||||||
|
|
||||||
|
void pushButton_cmd_clicked_callback(); // 指令按钮回调函数
|
||||||
|
|
||||||
|
void checkbox_mix_all_stateChanged_callback(); // 全选框回调函数
|
||||||
|
|
||||||
|
void checkbox_mix_single_stateChanged_callback(); // 单个选中框回调函数
|
||||||
|
|
||||||
|
void checkbox_mix_loop_stateChanged_callback(); // 循环发送框回调函数
|
||||||
|
|
||||||
|
void pushButton_refresh_clicked_callback(); // 端口刷新回调函数
|
||||||
|
|
||||||
|
void pushButton_open_clicked_callback(); // 打开串口回调函数
|
||||||
|
|
||||||
|
void pushBurron_close_clicked_callback(); // 关闭串口回调函数
|
||||||
|
|
||||||
|
void qserail_readyread_callback(); // 串口准备读取回调函数
|
||||||
|
|
||||||
|
void recvtimer_timeout_callback(); // 串口接收超时回调函数
|
||||||
|
|
||||||
|
void looptimer_timeout_callback(); // 循环发送定时器定时到回调函数
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
QSerialPort *serial = nullptr; // 串口句柄
|
||||||
|
QSettings *settings = nullptr; // 配置文件
|
||||||
|
QTimer* recvTimer = nullptr; // 串口接收定时器
|
||||||
|
QTimer* loopTimer = nullptr; // 串口循环发送定时器
|
||||||
|
QByteArray recvByteArray = nullptr; // 串口接收数据
|
||||||
|
uint8_t loopIndex = 0; // 循环发送索引
|
||||||
|
|
||||||
|
void Init(); // 句柄初始化函数
|
||||||
|
void DeInit(); // 去初始化
|
||||||
|
void BindSlot(); // 槽函数绑定
|
||||||
|
void SerialPortInfo_Init(); // 串口信息初始化
|
||||||
|
void Config_Init(); // 文件相关初始化
|
||||||
|
void Config_SettingInit(); // 配置文件初始化
|
||||||
|
void Config_SettingUpdate(); // 配置文件更新显示
|
||||||
|
|
||||||
|
uint8_t Serial_GetSumCheck(uint8_t *array); // 获取校验和
|
||||||
|
void Serial_UpdateData(uint8_t* array); // 更新串口数据
|
||||||
|
void Serial_SendData(QByteArray senddata); // 串口发送数据
|
||||||
|
};
|
||||||
|
#endif // MAINWINDOW_H
|
2580
PlugBoardCommTestTool/mainwindow.ui
Normal file
2580
PlugBoardCommTestTool/mainwindow.ui
Normal file
File diff suppressed because it is too large
Load Diff
31
README.md
Normal file
31
README.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
|
||||||
|
|
||||||
|
# 更新列表
|
||||||
|
|
||||||
|
| 更新时间 | 更新内容 |
|
||||||
|
| ---------- | ------------------------------------------------------------ |
|
||||||
|
| 2024-07-18 | 1. 完成循环发送功能<br>2. 实现指令的发送功能以及输入框的发送功能<br>3. 调整布局<br> |
|
||||||
|
| 2024-07-17 | 1. 完成部分循环发送定时器逻辑处理<br>2. 增加插板通信32位状态位以及融合数据内容的解析<br>3. 调整开启/关闭串口按键在使能和禁用时的样式表<br>4. 增加串口接收超时和显示的逻辑,完成串口接收功能<br> |
|
||||||
|
| 2024-07-12 | 1. 完成串口配置功能<br>2. 完成串口 开启和关闭的功能<br> |
|
||||||
|
| 2024-07-11 | 1. 完成多选框配置文件的写入和读取操作<br>2. 完成页面的基本绘制<br> |
|
||||||
|
| 2024-07-09 | 1. 修改配置文件读写的方法(QFile -> QSettings)<br>2. 实现单选框配置文件的写入和读取操作<br> |
|
||||||
|
| 2024-06-28 | 1. 增加配置文件的创建读取和初始化写入操作<br> |
|
||||||
|
| 2024-06-25 | 1. 完成融合数据以及32位状态位的界面绘制和控件摆放<br>2. 完成融合数据全选框以及单个按钮的回调逻辑框架<br> |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
|
||||||
|
- [x] 增加多选框配置文件的写入和读取操作
|
||||||
|
- [x] 单选框和多选框的逻辑如何处理
|
||||||
|
- [ ] 串口功能的实现
|
||||||
|
- [ ] 串口与显示多线程处理
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
release/D3Dcompiler_47.dll
Normal file
BIN
release/D3Dcompiler_47.dll
Normal file
Binary file not shown.
BIN
release/PlugBoardCommTestTool.exe
Normal file
BIN
release/PlugBoardCommTestTool.exe
Normal file
Binary file not shown.
BIN
release/Qt5Core.dll
Normal file
BIN
release/Qt5Core.dll
Normal file
Binary file not shown.
BIN
release/Qt5Gui.dll
Normal file
BIN
release/Qt5Gui.dll
Normal file
Binary file not shown.
BIN
release/Qt5SerialPort.dll
Normal file
BIN
release/Qt5SerialPort.dll
Normal file
Binary file not shown.
BIN
release/Qt5Svg.dll
Normal file
BIN
release/Qt5Svg.dll
Normal file
Binary file not shown.
BIN
release/Qt5Widgets.dll
Normal file
BIN
release/Qt5Widgets.dll
Normal file
Binary file not shown.
47
release/config.ini
Normal file
47
release/config.ini
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
[General]
|
||||||
|
configuration=1
|
||||||
|
checkBox_mix_0x=0
|
||||||
|
checkBox_mix_01=0
|
||||||
|
checkBox_mix_02=0
|
||||||
|
checkBox_mix_03=0
|
||||||
|
checkBox_mix_04=0
|
||||||
|
checkBox_mix_05=0
|
||||||
|
checkBox_mix_1x=0
|
||||||
|
checkBox_mix_10=0
|
||||||
|
checkBox_mix_11=0
|
||||||
|
checkBox_mix_12=0
|
||||||
|
checkBox_mix_13=0
|
||||||
|
checkBox_mix_14=0
|
||||||
|
checkBox_mix_1f=0
|
||||||
|
checkBox_mix_2x=1
|
||||||
|
checkBox_mix_20=1
|
||||||
|
checkBox_mix_21=1
|
||||||
|
checkBox_mix_22=1
|
||||||
|
checkBox_mix_23=1
|
||||||
|
checkBox_mix_24=1
|
||||||
|
checkBox_mix_3x=0
|
||||||
|
checkBox_mix_30=0
|
||||||
|
checkBox_mix_31=0
|
||||||
|
checkBox_mix_32=0
|
||||||
|
checkBox_mix_33=0
|
||||||
|
checkBox_mix_4x=0
|
||||||
|
checkBox_mix_40=0
|
||||||
|
checkBox_mix_41=0
|
||||||
|
checkBox_mix_42=0
|
||||||
|
checkBox_mix_5x=0
|
||||||
|
checkBox_mix_50=1
|
||||||
|
checkBox_mix_ax=0
|
||||||
|
checkBox_mix_a0=1
|
||||||
|
checkBox_mix_a1=1
|
||||||
|
checkBox_mix_a2=1
|
||||||
|
checkBox_mix_a3=1
|
||||||
|
checkBox_mix_a4=0
|
||||||
|
checkBox_mix_a5=0
|
||||||
|
checkBox_mix_a6=0
|
||||||
|
checkBox_mix_a7=0
|
||||||
|
checkBox_mix_bx=0
|
||||||
|
checkBox_mix_b0=0
|
||||||
|
checkBox_mix_b1=0
|
||||||
|
checkBox_mix_b2=0
|
||||||
|
checkBox_mix_fx=0
|
||||||
|
checkBox_mix_ff=0
|
BIN
release/iconengines/qsvgicon.dll
Normal file
BIN
release/iconengines/qsvgicon.dll
Normal file
Binary file not shown.
BIN
release/imageformats/qgif.dll
Normal file
BIN
release/imageformats/qgif.dll
Normal file
Binary file not shown.
BIN
release/imageformats/qicns.dll
Normal file
BIN
release/imageformats/qicns.dll
Normal file
Binary file not shown.
BIN
release/imageformats/qico.dll
Normal file
BIN
release/imageformats/qico.dll
Normal file
Binary file not shown.
BIN
release/imageformats/qjpeg.dll
Normal file
BIN
release/imageformats/qjpeg.dll
Normal file
Binary file not shown.
BIN
release/imageformats/qsvg.dll
Normal file
BIN
release/imageformats/qsvg.dll
Normal file
Binary file not shown.
BIN
release/imageformats/qtga.dll
Normal file
BIN
release/imageformats/qtga.dll
Normal file
Binary file not shown.
BIN
release/imageformats/qtiff.dll
Normal file
BIN
release/imageformats/qtiff.dll
Normal file
Binary file not shown.
BIN
release/imageformats/qwbmp.dll
Normal file
BIN
release/imageformats/qwbmp.dll
Normal file
Binary file not shown.
BIN
release/imageformats/qwebp.dll
Normal file
BIN
release/imageformats/qwebp.dll
Normal file
Binary file not shown.
BIN
release/libEGL.dll
Normal file
BIN
release/libEGL.dll
Normal file
Binary file not shown.
BIN
release/libGLESv2.dll
Normal file
BIN
release/libGLESv2.dll
Normal file
Binary file not shown.
BIN
release/opengl32sw.dll
Normal file
BIN
release/opengl32sw.dll
Normal file
Binary file not shown.
BIN
release/platforms/qwindows.dll
Normal file
BIN
release/platforms/qwindows.dll
Normal file
Binary file not shown.
BIN
release/styles/qwindowsvistastyle.dll
Normal file
BIN
release/styles/qwindowsvistastyle.dll
Normal file
Binary file not shown.
BIN
release/translations/qt_ar.qm
Normal file
BIN
release/translations/qt_ar.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_bg.qm
Normal file
BIN
release/translations/qt_bg.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_ca.qm
Normal file
BIN
release/translations/qt_ca.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_cs.qm
Normal file
BIN
release/translations/qt_cs.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_da.qm
Normal file
BIN
release/translations/qt_da.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_de.qm
Normal file
BIN
release/translations/qt_de.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_en.qm
Normal file
BIN
release/translations/qt_en.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_es.qm
Normal file
BIN
release/translations/qt_es.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_fi.qm
Normal file
BIN
release/translations/qt_fi.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_fr.qm
Normal file
BIN
release/translations/qt_fr.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_gd.qm
Normal file
BIN
release/translations/qt_gd.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_he.qm
Normal file
BIN
release/translations/qt_he.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_hu.qm
Normal file
BIN
release/translations/qt_hu.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_it.qm
Normal file
BIN
release/translations/qt_it.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_ja.qm
Normal file
BIN
release/translations/qt_ja.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_ko.qm
Normal file
BIN
release/translations/qt_ko.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_lv.qm
Normal file
BIN
release/translations/qt_lv.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_pl.qm
Normal file
BIN
release/translations/qt_pl.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_ru.qm
Normal file
BIN
release/translations/qt_ru.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_sk.qm
Normal file
BIN
release/translations/qt_sk.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_uk.qm
Normal file
BIN
release/translations/qt_uk.qm
Normal file
Binary file not shown.
BIN
release/translations/qt_zh_TW.qm
Normal file
BIN
release/translations/qt_zh_TW.qm
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user