import QtQuick 2.11 import QtQuick.VirtualKeyboard 2.14 import QtQuick.VirtualKeyboard.Settings 2.14 import QtQuick.Controls 1.4 import QtTest 1.14 import "modbus.js" as ModbusJs import "breatheTest.js" as BreatheTestJs import Qt.labs.platform 1.1 Item{ id:root //阀门生产厂家 property string manufacture //阀门类型 property string type //阀门编号 property string serialNumber //使用单位 property string user //车牌号 property string carplate //试验类型 property string testType //倾覆角度 property string angle //试验次数 property int count:1 // property string state Loader{ id:loader anchors.fill: parent anchors.margins: 5 } function show(){ if(loader.sourceComponent === null){ loader.sourceComponent = componet } loader.item.show() } function exit(){ if(loader.sourceComponent !== null){ loader.item.exit() } } Component{ id:componet GroupBox{ id:groupbox x:width title: "呼吸阀试验" property bool running:startStopButton.running property int pressureCnt:0 property var dataArray: [] signal pressureDisplaySigFun(var pressureNumber) signal resultSigFun(var result) property var pointList0:[] property var pointList1:[] property var pointList2:[] property var pointList3:[] property var pointList4:[] property var pointList5:[] property var pointList6:[] property var pointList7:[] property var pointList8:[] property var pointList9:[] property var pointList10:[] property var pointList11:[] property var pointList12:[] property var pointList13:[] property var pointList14:[] property var currentIndex:0 onResultSigFun: { //需要区分第一次 第二次 第三次 if(testTypeComboBox.currentText === "正压开启压力和密封试验"){ switch(groupbox.currentIndex) { case 0: breatheResult.positiveOpenPressure1 = result.openPressureNumber breatheResult.positiveSealPressure1 = result.sealPressureNumber break case 1: breatheResult.positiveOpenPressure2 = result.openPressureNumber breatheResult.positiveSealPressure2 = result.sealPressureNumber break case 2: breatheResult.positiveOpenPressure3 = result.openPressureNumber breatheResult.positiveSealPressure3 = result.sealPressureNumber break } } else if(testTypeComboBox.currentText === "负压开启压力和密封试验"){ switch(groupbox.currentIndex) { case 0: breatheResult.negativeOpenPressure1 = result.openPressureNumber breatheResult.negativeSealPressure1 = result.sealPressureNumber break case 1: breatheResult.negativeOpenPressure2 = result.openPressureNumber breatheResult.negativeSealPressure2 = result.sealPressureNumber break case 2: breatheResult.negativeOpenPressure3 = result.openPressureNumber breatheResult.negativeSealPressure3 = result.sealPressureNumber break } } else{ if(subversiveComboBox.currentText === "90°"){ breatheResult.capsizeSealPressure1 = result.sealPressureNumber } else if(subversiveComboBox.currentText === "180°"){ breatheResult.capsizeSealPressure2 = result.sealPressureNumber } else if(subversiveComboBox.currentText === "270°"){ breatheResult.capsizeSealPressure3 = result.sealPressureNumber } } } onPressureDisplaySigFun: { pressureDisplayInput(pressureNumber) } onRunningChanged: { BreatheTestJs.running = running if(running === true){ startTimer.start() } } Timer{ id:stopTimer repeat: false interval: 500 onTriggered: { //aModbusJs.closeAllValve(controlSerial) testStop() } } function clearCurveDisplay() { curveDisplay.spline.clear() groupbox.pressureCnt =0 groupbox.dataArray = [] } Timer{ id:startTimer repeat: false interval: 500 onTriggered: { choosevalve.menuEnable = false BreatheTestJs.exit = false console.log("正在自检....") var ret = ModbusJs.checkModebusDevice(controlSerial,sensorSerial,log) if(ret === false){ log.show("自检错误") testStop() choosevalve.menuEnable = true return } console.log("自检正常") clearCurveDisplay() groupbox.currentIndex = 0 if(testTypeComboBox.currentText === "正压开启压力和密封试验"){ do{ let tab = breatheTable.positiveTabview.getTab(groupbox.currentIndex) let tabView = breatheTable.positiveTabview let openPressureModel = tab.item.modelData tab = breatheTable.positiveTabview.getTab(groupbox.currentIndex+3) let sealPressureModel = tab.item.modelData breatheResult.visible = false openPressureModel.clear() sealPressureModel.clear() ret = BreatheTestJs.positiveTestStart(groupbox.currentIndex,tabView,processWindow,controlSerial,sensorSerial, openPressureModel,sealPressureModel, pressureDisplaySigFun,resultSigFun,spy,log) if(ret === false){ processWindow.show("测试退出,泄气中...") BreatheTestJs.runningBackup = groupbox.running BreatheTestJs.positiveTestStop(controlSerial,pressureDisplaySigFun,spy,log) } spy.wait(1500) //延时 确认全关继电器 groupbox.currentIndex++ }while(groupbox.currentIndex curveDisplay.axisyMax ){ curveDisplay.axisyMax = number +2 } if(pressureCnt <= 61){ dataArray.push(number) curveDisplay.spline.append(pressureCnt-1,number) } else{ dataArray.push(number) //dataArray.shift() curveDisplay.spline.clear() curveDisplay.axisxMax = pressureCnt+1 for(var i=0; i180){ text = 180 } } // onTextFocusChanged: { // if(Number(text) >180){ // text = 180 // } // } } UserComboBox{ id:userComboBox width: 80 height:25 bgColor:"#D2D5D9" model: ["试验1次","试验2次", "试验3次"] onActivated: { } Binding{ target: root property: "count" value: userComboBox.currentIndex+1 } } } Row{ spacing: 10 InputLine{ id:userInputLine paraName: "使用单位:" paraLength: 180 onTextChanged: { root.user = text } } CarPlate{ id:carplateInputLine paraName: "车牌:" paraLength: 130-55 onPlattextChanged: { root.carplate = plattext console.log("BreathValve Carplattext:" + plattext) } } UserComboBox{ id:testTypeComboBox anchors.verticalCenter: parent.verticalCenter width: 177 height:25 bgColor:"#D2D5D9" enabled: !groupbox.running model: ["正压开启压力和密封试验","负压开启压力和密封试验", "颠覆性密封试验"] onCurrentTextChanged: { if(currentText === "颠覆性密封试验"){ paraRectagle.addHeight = 35 } else{ paraRectagle.addHeight = 0 } switch(currentText){ case "正压开启压力和密封试验": BreatheTestJs.openPressureTimeMax = 3 BreatheTestJs.sealPressureTimemax = 15 sealPressureTimemaxInputLine.text = BreatheTestJs.sealPressureTimemax openPressureTimeMaxInputLine.text = BreatheTestJs.openPressureTimeMax openPressureTimeMaxInputLine.enabled = true break case "负压开启压力和密封试验": BreatheTestJs.openPressureTimeMax = 3 BreatheTestJs.sealPressureTimemax = 15 sealPressureTimemaxInputLine.text = BreatheTestJs.sealPressureTimemax openPressureTimeMaxInputLine.text = BreatheTestJs.openPressureTimeMax openPressureTimeMaxInputLine.enabled = true break case "颠覆性密封试验": openPressureTimeMaxInputLine.enabled = false BreatheTestJs.sealPressureTimemax = 15 sealPressureTimemaxInputLine.text = BreatheTestJs.sealPressureTimemax openPressureTimeMaxInputLine.text = BreatheTestJs.openPressureTimeMax break } groupbox.clearCurveDisplay() } } InputLine{ id:sealPressureTimemaxInputLine paraName: "密封计时:" paraLength: 39 text: BreatheTestJs.sealPressureTimemax validator:RegExpValidator { regExp: /[0-9]*/ } inputMethodHints: Qt.ImhDigitsOnly onTextChanged: { BreatheTestJs.sealPressureTimemax = Number(text) if(Number(text) >180){ text = 180 } } // onTextFocusChanged: { // if(Number(text) >180){ // text = 180 // } // } } UserComboBox{ id:valveStateComboBox anchors.verticalCenter: parent.verticalCenter width: 80 height:25 bgColor:"#D2D5D9" model: ["在用阀","新阀"] onCurrentTextChanged: { root.state = currentText } } } Row{ visible: paraRectagle.addHeight === 0?false:true spacing: 10 Text{ width: 425 } // InputLine{ // id:openPressureLine // paraName: "开启压力(kPa):" // paraLength: 145 // text: BreatheTestJs.capsizeOpenPresure // validator:RegExpValidator { // regExp: /[0-9.]*/ // } // inputMethodHints: Qt.ImhDigitsOnly // onTextChanged: { // BreatheTestJs.capsizeOpenPresure = Number(text) // console.log(BreatheTestJs.capsizeOpenPresure) // inputPressureLine.text = BreatheTestJs.capsizeOpenPresure+22 // } // } // InputLine{ // id:inputPressureLine // paraName: "进气压力(kPa):" // paraLength: 68 // text: BreatheTestJs.capsizeSetPressure // validator:RegExpValidator { // regExp: /[0-9.]*/ // } // inputMethodHints: Qt.ImhDigitsOnly // onTextChanged: { // BreatheTestJs.capsizeSetPressure = Number(text) // console.log(BreatheTestJs.capsizeSetPressure) // } // } UserComboBox{ id:subversiveComboBox anchors.verticalCenter: parent.verticalCenter width: 177 height:25 bgColor:"#D2D5D9" visible: testTypeComboBox.currentText === "颠覆性密封试验"?true:false model: ["90°","180°", "270°"] } } } } Item { width: 150 height: paraRectagle.height Row{ anchors.verticalCenter: parent.verticalCenter spacing: 20 StartStopButton{ id:startStopButton width: 50 height: 50 anchors.verticalCenter: parent.verticalCenter // onRunningChanged: { // groupbox.running = running // } } ReportButton{ id:reportButton width: 50 height: 50 anchors.verticalCenter: parent.verticalCenter } } } } } Row{ x:-10 CurveDisplay{ id:curveDisplay anchors.verticalCenter: parent.verticalCenter width: 450 height: 300 axisxMax:60 axisxMin:0 axisyMax:{ if(testTypeComboBox.currentText === "正压开启压力和密封试验") return 15 if(testTypeComboBox.currentText === "颠覆性密封试验") return 15 if(testTypeComboBox.currentText === "负压开启压力和密封试验") return 5 } axisyMin:{ if(testTypeComboBox.currentText === "负压开启压力和密封试验") return -10 return 0 } name:"横轴时间(秒) 纵轴压力(kPa)" } Rectangle{ width: (300-18)*0.75 height: 300-18 color: "white" radius: 6 anchors.verticalCenter: parent.verticalCenter Gauge { id:gauge width: parent.width height: parent.width anchors.centerIn: parent value: 0 maximumValue: { if(testTypeComboBox.currentText === "正压开启压力和密封试验") return 50 if(testTypeComboBox.currentText === "颠覆性密封试验") return 50 if(testTypeComboBox.currentText === "负压开启压力和密封试验") return 15 } minimumValue: -10 tickmarkStepSize:5 labelStepSize:5 Behavior on value { NumberAnimation { duration: 1000 }} } } Item { width: 338 height: 300 anchors.verticalCenter: parent.verticalCenter Rectangle{ id:resultWindow anchors.fill: parent anchors.margins: 10 color: "white" radius: 6 ProcessWindow{ id:processWindow width: 280 height: 50 hideWith:resultWindow.width anchors.centerIn: parent } BreatheResult{ id:breatheResult // visible: false } Connections{ target: testTypeComboBox onCurrentIndexChanged: { breatheResult.swipeview.setCurrentIndex(testTypeComboBox.currentIndex) } } } } } Rectangle{ width: 980 height: 265 - paraRectagle.addHeight color: "white" radius: 6 BreatheTable{ id:breatheTable anchors.fill: parent } Connections{ target: testTypeComboBox onCurrentIndexChanged: { breatheTable.swipeview.setCurrentIndex(testTypeComboBox.currentIndex) } } } } InputPanel { id: inputPanel z: 99 x: -11 y: window.height width: window.width onActiveChanged: { if(!active) { manufactureInputLine.textFocus = false typeInputLine.textFocus = false serialNumberInputLine.textFocus = false userInputLine.textFocus = false carplateInputLine.textFocus = false openPressureTimeMaxInputLine.textFocus = false sealPressureTimemaxInputLine.textFocus = false } } states: State { name: "visible" when: inputPanel.active PropertyChanges { target: inputPanel y: window.height/2 } } transitions: Transition { from: "" to: "visible" reversible: true ParallelAnimation { NumberAnimation { properties: "y" duration: 250 easing.type: Easing.InOutQuad } } } Component.onCompleted: { VirtualKeyboardSettings.styleName = "retro" VirtualKeyboardSettings.activeLocales=["en_GB","zh_CN"] VirtualKeyboardSettings.locale = "en_GB";//"fi_FI"; } } } } }