|
@@ -1,7 +1,16 @@
|
|
|
-import QtQuick 2.11
|
|
|
+import QtQuick 2.15
|
|
|
import QtQuick.Layouts 1.3
|
|
|
-import QtQuick.Controls 2.14
|
|
|
-import QtQuick.Controls.Styles 1.2
|
|
|
+import QtQuick.Controls 1.2
|
|
|
+//import QtQuick 2.11
|
|
|
+//import QtQuick.Layouts 1.3
|
|
|
+//import QtQuick.Controls 2.14
|
|
|
+//import QtQuick.Controls.Styles 1.2
|
|
|
+import QtQuick.Controls.Styles 1.4
|
|
|
+import Qt.labs.qmlmodels 1.0
|
|
|
+//import QtQuick.LocalStorage 2.0
|
|
|
+//import io.qt.DataBaseModel 1.0
|
|
|
+import Qt.labs.platform 1.1
|
|
|
+
|
|
|
import TService 1.0
|
|
|
|
|
|
Item {
|
|
@@ -27,33 +36,56 @@ Item {
|
|
|
property var innermaxIstep: [0.0, 0.0, 0.0, 0.0, 0.0]
|
|
|
property var innermaxDstep: [0.0, 0.0, 0.0, 0.0, 0.0]
|
|
|
|
|
|
+ property string background: "#d7e3bc"
|
|
|
+ property string alterBackground: "white"
|
|
|
+ property string highlight: "#e4f7d6"
|
|
|
+ property string headerBkgnd: "#F0F0F0"
|
|
|
+
|
|
|
+ property var normalG: Gradient {
|
|
|
+ GradientStop { position: 0.0; color: "#c7d3ac" }
|
|
|
+ GradientStop { position: 1.0; color: "#F0F0F0" }
|
|
|
+ }
|
|
|
+ property var hoverG: Gradient {
|
|
|
+ GradientStop { position: 0.0; color: "white"; }
|
|
|
+ GradientStop { position: 1.0; color: "#d7e3bc"; }
|
|
|
+ }
|
|
|
+ property var pressG: Gradient {
|
|
|
+ GradientStop { position: 0.0; color: "#d7e3bc"; }
|
|
|
+ GradientStop { position: 1.0; color: "white"; }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
function set_paras(){
|
|
|
var Jsonobj={}
|
|
|
var itemArrayJson=[]
|
|
|
+ var j=0;
|
|
|
+
|
|
|
+ for(var i = 0; i<param_model.count; i++){
|
|
|
+ var row_record = param_model.get(i)
|
|
|
|
|
|
- for(var i = 0; i<5; i++){
|
|
|
- if(volume[i] > 0){
|
|
|
+ if(row_record.volume > 0){
|
|
|
var item={}
|
|
|
|
|
|
- item.max_volume = volume[i]
|
|
|
- item.keep_time = keeptime[i]
|
|
|
-
|
|
|
- item.outermax = outermax[i]
|
|
|
- item.outermin = outermini[i]
|
|
|
- item.outerkp = outerKp[i]
|
|
|
- item.outerki = outerKi[i]
|
|
|
- item.outerkd = outerKd[i]
|
|
|
-
|
|
|
- item.innermax = innermax[i]
|
|
|
- item.innermin =innermini[i]
|
|
|
- item.innerkp = innerKp[i]
|
|
|
- item.innerki = innerKi[i]
|
|
|
- item.innerkd = innerKd[i]
|
|
|
- item.innermaxI = innermaxI[i]
|
|
|
- item.innerIstep = innermaxIstep[i]
|
|
|
- item.innerDstep = innermaxDstep[i]
|
|
|
-
|
|
|
- itemArrayJson[i] = item
|
|
|
+ item.max_volume = row_record.volume
|
|
|
+ item.keep_time = row_record.time
|
|
|
+
|
|
|
+ item.outermax = row_record.out_max
|
|
|
+ item.outermin = row_record.out_min
|
|
|
+ item.outerkp = row_record.out_kp
|
|
|
+ item.outerki = row_record.out_ki
|
|
|
+ item.outerkd = row_record.out_kd
|
|
|
+
|
|
|
+ item.innermax = row_record.inner_max
|
|
|
+ item.innermin =row_record.inner_min
|
|
|
+ item.innerkp = row_record.inner_kp
|
|
|
+ item.innerki = row_record.inner_ki
|
|
|
+ item.innerkd = row_record.inner_kd
|
|
|
+ item.innermaxI = row_record.inner_maxI
|
|
|
+ item.innerIstep = row_record.inner_maxIstep
|
|
|
+ item.innerDstep = row_record.inner_maxDstep
|
|
|
+
|
|
|
+ itemArrayJson[j] = item
|
|
|
+ j++
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -63,100 +95,26 @@ Item {
|
|
|
}
|
|
|
|
|
|
function update_paras(index, item){
|
|
|
- if(index === 0){
|
|
|
- volume1.text = item.max_volume
|
|
|
- keep1.text = item.keep_time
|
|
|
-
|
|
|
- outmax1.text = item.outermax
|
|
|
- outmini1.text = item.outermin
|
|
|
- outp1.text = item.outerkp
|
|
|
- outi1.text = item.outerki
|
|
|
- outd1.text = item.outerkd
|
|
|
-
|
|
|
- inmax1.text = item.innermax
|
|
|
- inmini1.text = item.innermin
|
|
|
- inp1.text = item.innerkp
|
|
|
- ini1.text = item.innerki
|
|
|
- ind1.text = item.innerkd
|
|
|
- inmaxI1.text = item.innermaxI
|
|
|
- inmaxIstep1.text = item.innerIstep
|
|
|
- inmaxDstep1.text = item.innerDstep
|
|
|
|
|
|
- }else if(index === 1){
|
|
|
- volume2.text = item.max_volume
|
|
|
- keep2.text = item.keep_time
|
|
|
-
|
|
|
- outmax2.text = item.outermax
|
|
|
- outmini2.text = item.outermin
|
|
|
- outp2.text = item.outerkp
|
|
|
- outi2.text = item.outerki
|
|
|
- outd2.text = item.outerkd
|
|
|
-
|
|
|
- inmax2.text = item.innermax
|
|
|
- inmini2.text = item.innermin
|
|
|
- inp2.text = item.innerkp
|
|
|
- ini2.text = item.innerki
|
|
|
- ind2.text = item.innerkd
|
|
|
- inmaxI2.text = item.innermaxI
|
|
|
- inmaxIstep2.text = item.innerIstep
|
|
|
- inmaxDstep2.text = item.innerDstep
|
|
|
+ param_model.append({
|
|
|
+ "idx":index,
|
|
|
+ "volume":item.max_volume,
|
|
|
+ "time":item.keep_time,
|
|
|
+ "out_max":item.outermax,
|
|
|
+ "out_min":item.outermin,
|
|
|
+ "out_kp":item.outerkp,
|
|
|
+ "out_ki":item.outerki,
|
|
|
+ "out_kd":item.outerkd,
|
|
|
+ "inner_max":item.innermax,
|
|
|
+ "inner_min":item.innermin,
|
|
|
+ "inner_kp":item.innerkp,
|
|
|
+ "inner_ki":item.innerki,
|
|
|
+ "inner_kd":item.innerkd,
|
|
|
+ "inner_maxI":item.innermaxI,
|
|
|
+ "inner_maxIstep":item.innerIstep,
|
|
|
+ "inner_maxDstep":item.innerDstep})
|
|
|
|
|
|
- }else if(index === 2){
|
|
|
- volume3.text = item.max_volume
|
|
|
- keep3.text = item.keep_time
|
|
|
-
|
|
|
- outmax3.text = item.outermax
|
|
|
- outmini3.text = item.outermin
|
|
|
- outp3.text = item.outerkp
|
|
|
- outi3.text = item.outerki
|
|
|
- outd3.text = item.outerkd
|
|
|
-
|
|
|
- inmax3.text = item.innermax
|
|
|
- inmini3.text = item.innermin
|
|
|
- inp3.text = item.innerkp
|
|
|
- ini3.text = item.innerki
|
|
|
- ind3.text = item.innerkd
|
|
|
- inmaxI3.text = item.innermaxI
|
|
|
- inmaxIstep3.text = item.innerIstep
|
|
|
- inmaxDstep3.text = item.innerDstep
|
|
|
- }else if(index === 3){
|
|
|
- volume4.text = item.max_volume
|
|
|
- keep4.text = item.keep_time
|
|
|
-
|
|
|
- outmax4.text = item.outermax
|
|
|
- outmini4.text = item.outermin
|
|
|
- outp4.text = item.outerkp
|
|
|
- outi4.text = item.outerki
|
|
|
- outd4.text = item.outerkd
|
|
|
-
|
|
|
- inmax4.text = item.innermax
|
|
|
- inmini4.text = item.innermin
|
|
|
- inp4.text = item.innerkp
|
|
|
- ini4.text = item.innerki
|
|
|
- ind4.text = item.innerkd
|
|
|
- inmaxI4.text = item.innermaxI
|
|
|
- inmaxIstep4.text = item.innerIstep
|
|
|
- inmaxDstep4.text = item.innerDstep
|
|
|
- }else if(index === 4){
|
|
|
- volume5.text = item.max_volume
|
|
|
- keep5.text = item.keep_time
|
|
|
-
|
|
|
- outmax5.text = item.outermax
|
|
|
- outmini5.text = item.outermin
|
|
|
- outp5.text = item.outerkp
|
|
|
- outi5.text = item.outerki
|
|
|
- outd5.text = item.outerkd
|
|
|
-
|
|
|
- inmax5.text = item.innermax
|
|
|
- inmini5.text = item.innermin
|
|
|
- inp5.text = item.innerkp
|
|
|
- ini5.text = item.innerki
|
|
|
- ind5.text = item.innerkd
|
|
|
- inmaxI5.text = item.innermaxI
|
|
|
- inmaxIstep5.text = item.innerIstep
|
|
|
- inmaxDstep5.text = item.innerDstep
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
function clear_paras(index){
|
|
|
if(index === 0){
|
|
@@ -258,13 +216,68 @@ Item {
|
|
|
|
|
|
var jsonobj = CalibrationPara.get_paras();
|
|
|
|
|
|
- for(var i=0; i<5; i++){
|
|
|
- clear_paras(i)
|
|
|
- }
|
|
|
+ param_model.clear()
|
|
|
|
|
|
for(var index= 0; index< jsonobj.count; index++){
|
|
|
update_paras(index, jsonobj.pids[index])
|
|
|
}
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function get_role(column){
|
|
|
+ var role = "idx"
|
|
|
+ switch(column){
|
|
|
+ case 1:
|
|
|
+ role = "volume"
|
|
|
+ break
|
|
|
+ case 2:
|
|
|
+ role = "time"
|
|
|
+ break
|
|
|
+ case 3:
|
|
|
+ role = "out_max"
|
|
|
+ break
|
|
|
+ case 4:
|
|
|
+ role = "out_min"
|
|
|
+ break
|
|
|
+ case 5:
|
|
|
+ role = "out_kp"
|
|
|
+ break
|
|
|
+ case 6:
|
|
|
+ role = "out_ki"
|
|
|
+ break
|
|
|
+ case 7:
|
|
|
+ role = "out_kd"
|
|
|
+ break
|
|
|
+ case 8:
|
|
|
+ role = "inner_max"
|
|
|
+ break
|
|
|
+ case 9:
|
|
|
+ role = "inner_min"
|
|
|
+ break
|
|
|
+ case 10:
|
|
|
+ role = "inner_kp"
|
|
|
+ break
|
|
|
+ case 11:
|
|
|
+ role = "inner_ki"
|
|
|
+ break
|
|
|
+ case 12:
|
|
|
+ role = "inner_kd"
|
|
|
+ break
|
|
|
+ case 13:
|
|
|
+ role = "inner_maxI"
|
|
|
+ break
|
|
|
+ case 14:
|
|
|
+ role = "inner_maxIstep"
|
|
|
+ break
|
|
|
+ case 15:
|
|
|
+ role = "inner_maxDstep"
|
|
|
+ break
|
|
|
+ default:
|
|
|
+ break
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return role
|
|
|
}
|
|
|
|
|
|
|
|
@@ -275,6 +288,206 @@ Item {
|
|
|
anchors.fill: parent
|
|
|
title: title_str
|
|
|
|
|
|
+ Column{
|
|
|
+ Rectangle{
|
|
|
+ id:param_rect
|
|
|
+ //x:-10
|
|
|
+ width: 1250
|
|
|
+ height: 420
|
|
|
+ //anchors.centerIn: parent
|
|
|
+ color: "white"
|
|
|
+ radius: 6
|
|
|
+ border.color: "black"
|
|
|
+
|
|
|
+ Text{
|
|
|
+ id:text_title
|
|
|
+ anchors.top: parent.top
|
|
|
+ anchors.topMargin: 10
|
|
|
+ anchors.horizontalCenter: parent.horizontalCenter
|
|
|
+ font.bold: true
|
|
|
+ font.pixelSize: 24
|
|
|
+ text: "PID 参数标定"
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ Component{
|
|
|
+ id:itemDelegateTextEdit
|
|
|
+ TextField {
|
|
|
+ anchors.verticalCenter: parent.verticalCenter
|
|
|
+ text: styleData.value
|
|
|
+ font.pointSize: 10
|
|
|
+ //font.pixelSize: 24
|
|
|
+ //font.bold: true
|
|
|
+ horizontalAlignment: Text.AlignHCenter
|
|
|
+ verticalAlignment: Text.AlignVCenter
|
|
|
+ validator:RegExpValidator {
|
|
|
+ regExp: /(-?[0-9]\d*((.\d+)*))*/
|
|
|
+ // /(-?[0-9]\d*((.\d+)*))|(0.\d+)*/
|
|
|
+ ///[0-9]*/
|
|
|
+ }
|
|
|
+
|
|
|
+ anchors.fill: parent
|
|
|
+ onEditingFinished: {
|
|
|
+ //console.log("row === "+styleData.row );
|
|
|
+ //console.log("column=== "+styleData.column);
|
|
|
+ //console.log("role === "+get_role(styleData.column));
|
|
|
+ var role = get_role(styleData.column)
|
|
|
+ if("idx" !== role){
|
|
|
+ param_model.setProperty(styleData.row, get_role(styleData.column), Number(text))
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Component{
|
|
|
+ id:itemDelegateText
|
|
|
+ Text {
|
|
|
+ anchors.verticalCenter: parent.verticalCenter
|
|
|
+ color: styleData.selected?"#1E90FF":"#000000"
|
|
|
+ elide: styleData.elideMode
|
|
|
+ text: styleData.value
|
|
|
+ font.pointSize: 10
|
|
|
+ //font.pixelSize: 24
|
|
|
+ //font.bold: true
|
|
|
+ horizontalAlignment: Text.AlignHCenter
|
|
|
+ verticalAlignment: Text.AlignVCenter
|
|
|
+ anchors.fill: parent
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ TableView{
|
|
|
+ id:tableView
|
|
|
+ //frameVisible: true
|
|
|
+ width: parent.width
|
|
|
+ focus: true
|
|
|
+ //height: parent.height - 50
|
|
|
+ anchors.top: text_title.bottom
|
|
|
+ anchors.bottom: parent.bottom
|
|
|
+ anchors.topMargin: 10
|
|
|
+
|
|
|
+ TableViewColumn{role: "idx"; title: "ID"; width: 40; movable:false; delegate: itemDelegateText}
|
|
|
+ TableViewColumn{role: "volume"; title: "容积≤(L)"; width: 120; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "time"; title: "稳压时间(秒)"; width: 120; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "out_max"; title: "外环max"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "out_min"; title: "外环min"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "out_kp"; title: "外环KP"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "out_ki"; title: "外环KI"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "out_kd"; title: "外环KD"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "inner_max"; title: "内环max"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "inner_min"; title: "内环min"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "inner_kp"; title: "内环KP"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "inner_ki"; title: "内环KI"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "inner_kd"; title: "内环KD"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "inner_maxI"; title: "内环maxI"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "inner_maxIstep"; title: "内环Istep"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+ TableViewColumn{role: "inner_maxDstep"; title: "内环Rstep"; width: 80; movable:false; delegate: itemDelegateTextEdit}
|
|
|
+
|
|
|
+ //model: modelItems
|
|
|
+
|
|
|
+ headerDelegate: Rectangle{
|
|
|
+ implicitWidth: 16
|
|
|
+ implicitHeight: 24
|
|
|
+
|
|
|
+ gradient: styleData.pressed ? selftest_root.pressG : (styleData.containsMouse ? root.hoverG: root.normalG)
|
|
|
+
|
|
|
+ border.color: "gray"
|
|
|
+ border.width: 1
|
|
|
+ Text{
|
|
|
+ anchors.verticalCenter: parent.verticalCenter
|
|
|
+ anchors.left: parent.left
|
|
|
+ anchors.leftMargin: 4
|
|
|
+ anchors.right: parent.right
|
|
|
+ anchors.rightMargin: 4
|
|
|
+ text: styleData.value
|
|
|
+ color: styleData.pressed ?"red" : "blue"
|
|
|
+ horizontalAlignment: Text.AlignHCenter
|
|
|
+ verticalAlignment: Text.AlignVCenter
|
|
|
+ font.bold: true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ rowDelegate: Rectangle{
|
|
|
+ height: 32
|
|
|
+ //border.color: "gray"
|
|
|
+ //color: styleData.selected?"#f0b0b0af":(styleData.alternate?"#c3c3c0":"#c0c0c3")
|
|
|
+ color: styleData.selected ? root.highlight : root.alterBackground
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ itemDelegate: Rectangle {
|
|
|
+ height: 28
|
|
|
+ //border.color: "gray"
|
|
|
+ color: "transparent"
|
|
|
+ Text {
|
|
|
+ //anchors.centerIn: parent
|
|
|
+ //anchors.left: parent.left
|
|
|
+ anchors.leftMargin: 6
|
|
|
+ anchors.verticalCenter: parent.verticalCenter
|
|
|
+ //color: styleData.textColor
|
|
|
+ color: styleData.selected ? "red" : styleData.textColor
|
|
|
+ text: styleData.value
|
|
|
+ verticalAlignment: Text.AlignVCenter
|
|
|
+ font.pointSize: 13
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ model:ListModel{
|
|
|
+ id: param_model
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ Rectangle{
|
|
|
+ id:button_rect
|
|
|
+ //x:-10
|
|
|
+ width: 1250
|
|
|
+ height: 60
|
|
|
+ color: "transparent"
|
|
|
+
|
|
|
+ Row{
|
|
|
+ spacing:30
|
|
|
+ anchors.fill: parent
|
|
|
+
|
|
|
+ UserButton {
|
|
|
+ id: refresh_button;
|
|
|
+ text: "刷新";
|
|
|
+ font.pixelSize: 20
|
|
|
+
|
|
|
+ anchors.verticalCenter: parent.verticalCenter
|
|
|
+
|
|
|
+ width: 120
|
|
|
+ height: 45
|
|
|
+
|
|
|
+ onClicked: {
|
|
|
+
|
|
|
+ update_detail()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ UserButton {
|
|
|
+ id: save_button;
|
|
|
+ text: "保存";
|
|
|
+ font.pixelSize: 20
|
|
|
+
|
|
|
+ anchors.verticalCenter: parent.verticalCenter
|
|
|
+
|
|
|
+ width: 120
|
|
|
+ height: 45
|
|
|
+
|
|
|
+ onClicked: {
|
|
|
+ set_paras()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+/*
|
|
|
Column{
|
|
|
//spacing:10
|
|
|
anchors.centerIn: parent
|
|
@@ -1117,7 +1330,7 @@ Item {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+*/
|
|
|
}
|
|
|
|
|
|
Component.onCompleted: {
|