import QtQuick 2.11 import QtQuick.Controls 1.4 import "modbus.js" as ModbusJs import "sealSelfTest.js" as SealSelfTestJs Item { 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) onPressureDisplaySigFun: { pressureDisplayInput(pressureNumber) } function pressureDisplayInput(number){ //console.log("pressureDisplayInput") pressureCnt++ if(pressureCnt <= 61){ dataArray.push(number) curveDisplay.spline.append(pressureCnt-1,number) } else{ dataArray.push(number) dataArray.shift() curveDisplay.spline.clear() for(var i=0; i<61; i++){ curveDisplay.spline.append(i,dataArray[i]) } } gauge.value = number } onRunningChanged: { SealSelfTestJs.running =running if(running === true) startTimer.restart() else{ sealSelfTestPstep.running =false sealSelfTestNstep.running =false choosevalve.menuEnable = true } } Timer{ id:startTimer repeat: false interval: 500 onTriggered: { choosevalve.menuEnable = false console.log("正在自检....") var ret = ModbusJs.checkModebusDevice(controlSerial,sensorSerial,log) if(ret === false){ log.show("通讯自检错误") startStopButton.running = false return } else{ if(testTypeComboBox.currentText === "高压密封测试"){ console.log(testTypeComboBox.currentText) sealSelfTestPstep.running =true } else{ console.log(testTypeComboBox.currentText) sealSelfTestNstep.running =true } } } } function recordPressure(sensorType){ // ModbusJs.pressureSensorCtrl(controlSerial,sensorType) // console.log("打开"+sensorType+"传感器阀门") var tab = tabview.getTab(0) var modelData = tab.item.modelData modelData.clear() SealSelfTestJs.next = false //读取压力值 var ret = SealSelfTestJs.displayPressure(sensorType,modelData,pressureDisplaySigFun,spy,log) return ret } function pabort(){ console.log("pabort") SealSelfTestJs.next = false sealSelfTestPstep.abort() SealSelfTestJs.running = true SealSelfTestJs.positiveDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log) startStopButton.running = false sealSelfTestPstep.running = false sealSelfTestPstep.reset() ModbusJs.closeAllValve(controlSerial) } function nabort(){ console.log("nabort") SealSelfTestJs.next = false sealSelfTestNstep.abort() SealSelfTestJs.running = true SealSelfTestJs.negativeDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log) startStopButton.running = false sealSelfTestNstep.running = false sealSelfTestNstep.reset() ModbusJs.closeAllValve(controlSerial) } Connections{ target: sealSelfTestNstep onUserNext:{ SealSelfTestJs.next = true } onUserStepClick:{ switch (text){ case "负压罐泄压至0kPa": console.log(text) //下一步 SealSelfTestJs.next = false var ret = SealSelfTestJs.negativeDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log) if(ret === false){ groupbox.nabort() } else{ ModbusJs.closeAllValve(controlSerial) } break case "真空阀负压阀到负压表管路,进气-30kPa": console.log(text) //下一步 SealSelfTestJs.next = false //负压吸气 ret = SealSelfTestJs.setNegativePressure(-30,controlSerial,sensorSerial,pressureDisplaySigFun,spy,log) if(ret === true){ // ModbusJs.negativePressureTankInputCtrl(controlSerial,false) // console.log("关闭负压罐进气阀门") // ModbusJs.pressureSensorCtrl(controlSerial,"关闭") // console.log("关闭传感器阀门") ModbusJs.vacuoValveTestIO(controlSerial,false) console.log("关闭真空阀检测口 负压传感器接在检测口后面") console.log("检测真空阀负压阀到负压表管路是否漏气") //记录压力 ret = groupbox.recordPressure("负压") if(ret === false){ //进入测试退出 泄压步骤 groupbox.nabort() } } else{//进入测试退出 泄压步骤 groupbox.nabort() } break case "负压罐体密封测试": console.log(text) ModbusJs.vacuoValveTestIO(controlSerial,true) console.log("打开真空阀检测口,负压传感器接在检测口后面") SealSelfTestJs.next = false ModbusJs.pressureSensorCtrl(controlSerial,"负压") console.log("打开负压传感器阀门") ret = groupbox.recordPressure("负压") if(ret === false){ //进入测试退出 泄压步骤 groupbox.nabort() } break case "负压呼吸阀测试口密封测试": console.log(text) SealSelfTestJs.next = false //ModbusJs.turnOffAllTestIO(controlSerial) ModbusJs.vacuoValveTestIO(controlSerial,true) console.log("打开真空阀检测口,负压传感器接在检测口后面") ModbusJs.nbreathValveTestIo(controlSerial,true) console.log("打开负压呼吸阀测试口") //打开负压阀门 ModbusJs.pressureSensorCtrl(controlSerial,"负压") console.log("打开负压传感器阀门") var tab = tabview.getTab(0) var modelData = tab.item.modelData modelData.clear() ret = SealSelfTestJs.displayPressure("负压",modelData,pressureDisplaySigFun,spy,log) if(ret === false){ //进入测试退出 泄压步骤 groupbox.nabort() } break // case "真空阀测试口管路": // console.log(text) // SealSelfTestJs.next = false // ModbusJs.turnOffAllTestIO(controlSerial) // ModbusJs.vacuoValveTestIO(controlSerial,true) // ModbusJs.pressureSensorCtrl(controlSerial,"负压") // console.log("打开负压传感器阀门") // tab = tabview.getTab(0) // modelData = tab.item.modelData // modelData.clear() // ret = SealSelfTestJs.displayPressure("负压",modelData,pressureDisplaySigFun,spy,log) // if(ret === false){ // //进入测试退出 泄压步骤 // groupbox.nabort() // } // break case "密封自检结束,请泄压": console.log(text) SealSelfTestJs.next = false SealSelfTestJs.negativeDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log) ModbusJs.closeAllValve(controlSerial) startStopButton.running = false break; } } } Connections{ target: sealSelfTestPstep onUserNext:{ SealSelfTestJs.next = true } onUserStepClick:{ switch (text){ case "正压罐泄压至0kPa": console.log(text) SealSelfTestJs.next = false var ret = SealSelfTestJs.positiveDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log) if(ret === false){ groupbox.pabort() } else{ ModbusJs.closeAllValve(controlSerial) } break case "低压阀到低压表管路,进气50kPa": console.log(text) SealSelfTestJs.next = false ret = SealSelfTestJs.setPositivePressure("低压",50,controlSerial,sensorSerial,pressureDisplaySigFun,spy,log) if(ret === true){ ModbusJs.positivePressureTankInputCtrl(controlSerial,false) console.log("关闭正压罐进气阀门") ModbusJs.proportionalControlWrite(controlSerial,0) console.log("关闭调节阀") ModbusJs.pressureSensorCtrl(controlSerial,"关闭") console.log("关闭传感器阀门") ret = groupbox.recordPressure("低压") if(ret === false){ //进入测试退出 泄压步骤 groupbox.pabort() } } else{//进入测试退出 泄压步骤 groupbox.pabort() } break case "高压阀到高压表管路,进气100kPa": console.log(text) SealSelfTestJs.next = false ret = SealSelfTestJs.setPositivePressure("高压",100,controlSerial,sensorSerial,pressureDisplaySigFun,spy,log) if(ret === true){ ModbusJs.positivePressureTankInputCtrl(controlSerial,false) console.log("关闭正压罐进气阀门") ModbusJs.proportionalControlWrite(controlSerial,0) console.log("关闭调节阀") ModbusJs.pressureSensorCtrl(controlSerial,"关闭") console.log("关闭传感器阀门") ret = groupbox.recordPressure("高压") if(ret === false){ //进入测试退出 泄压步骤 groupbox.pabort() } } else{//进入测试退出 泄压步骤 groupbox.pabort() } break case "正压罐体密封测试": console.log(text) SealSelfTestJs.next = false ModbusJs.pressureSensorCtrl(controlSerial,"高压") console.log("打开高压传感器阀门") ret = groupbox.recordPressure("高压") if(ret === false){ //进入测试退出 泄压步骤 groupbox.pabort() } break case "安全阀测试口管路": console.log(text) SealSelfTestJs.next = false ModbusJs.turnOffAllTestIO(controlSerial) ModbusJs.safeValveTestIo(controlSerial,true) ModbusJs.pressureSensorCtrl(controlSerial,"高压") console.log("打开高压传感器阀门") var tab = tabview.getTab(0) var modelData = tab.item.modelData modelData.clear() ret = SealSelfTestJs.displayPressure("高压",modelData,pressureDisplaySigFun,spy,log) if(ret === false){ //进入测试退出 泄压步骤 groupbox.pabort() } break; case "泄压至20kPa左右": console.log(text) SealSelfTestJs.next = false ModbusJs.turnOffAllTestIO(controlSerial) SealSelfTestJs.positiveDecompression20kPA(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log) if(ret === false){ //进入测试退出 泄压步骤 groupbox.pabort() } break; case "呼吸阀测试口管路": console.log(text) SealSelfTestJs.next = false ModbusJs.turnOffAllTestIO(controlSerial) ModbusJs.pbreathValveTestIo(controlSerial,true) ModbusJs.pressureSensorCtrl(controlSerial,"高压") console.log("打开高压传感器阀门") tab = tabview.getTab(0) modelData = tab.item.modelData modelData.clear() SealSelfTestJs.next = false ret = SealSelfTestJs.displayPressure("高压",modelData,pressureDisplaySigFun,spy,log) if(ret === false){ //进入测试退出 泄压步骤 groupbox.pabort() } break; case "人孔盖测试口管路": console.log(text) SealSelfTestJs.next = false ModbusJs.turnOffAllTestIO(controlSerial) ModbusJs.peopleCoverHoleValveTestIO(controlSerial,true) ModbusJs.pressureSensorCtrl(controlSerial,"高压") console.log("打开高压传感器阀门") tab = tabview.getTab(0) modelData = tab.item.modelData modelData.clear() SealSelfTestJs.next = false ret = SealSelfTestJs.displayPressure("高压",modelData,pressureDisplaySigFun,spy,log) if(ret === false){ //进入测试退出 泄压步骤 groupbox.pabort() } break; case "罐体测试口管路": console.log(text) SealSelfTestJs.next = false ModbusJs.turnOffAllTestIO(controlSerial) ModbusJs.tankValveTestIO(controlSerial,true) ModbusJs.pressureSensorCtrl(controlSerial,"高压") console.log("打开高压传感器阀门") tab = tabview.getTab(0) modelData = tab.item.modelData modelData.clear() SealSelfTestJs.next = false ret = SealSelfTestJs.displayPressure("高压",modelData,pressureDisplaySigFun,spy,log) if(ret === false){ //进入测试退出 泄压步骤 groupbox.pabort() } break; case "密封自检结束,请泄压": console.log(text) SealSelfTestJs.next = false SealSelfTestJs.positiveDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log) ModbusJs.closeAllValve(controlSerial) startStopButton.running = false break; } } } function show(){ animationShow.running = true } function exit(){ animationExit.running = true } //加载任务动画效果 NumberAnimation { id: animationShow target: groupbox property: "x" from: groupbox.x to: 0 duration: 500 } NumberAnimation { id: animationExit target: groupbox property: "x" from: groupbox.x to: 1024 duration: 500 } Column{ anchors.left: parent.left anchors.leftMargin: 2 anchors.top: parent.top anchors.topMargin: 0 spacing: 0 //参数 // Rectangle{ // width: 980 // height: 60 // color: "white" // radius: 6 // Row{ // x:50 // anchors.verticalCenter: parent.verticalCenter // spacing: 100 // UserComboBox{ // id:testTypeComboBox // anchors.verticalCenter: parent.verticalCenter // width: 177 // height:30 // bgColor:"#D2D5D9" // enabled: !groupbox.running // model: ["正压罐密封测试","负压罐密封测试"] // onCurrentTextChanged: { // if(currentText === "正压罐密封测试"){ // sealSelfTestPstep.visible = true // //sealSelfTestNstep.visible = false // } // else if(currentText === "负压罐密封测试"){ // sealSelfTestPstep.visible = false // //sealSelfTestNstep.visible = true // } // } // } // StartStopButton{ // id:startStopButton // width: 45 // height: 45 // anchors.verticalCenter: parent.verticalCenter // } // } // } //曲线 仪表 结果 Row{ x:-10 // y:-10 //曲线 CurveDisplay{ id:curveDisplay anchors.verticalCenter: parent.verticalCenter width: 450 height: 300 axisxMax:60 axisxMin:0 axisyMax:500 axisyMin:-50 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: 500 minimumValue: -100 tickmarkStepSize:100 labelStepSize:100 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 SealSelfTestPstep{ id:sealSelfTestPstep } SealSelfTestNstep{ id:sealSelfTestNstep } Row{ z:sealSelfTestPstep.z+10 anchors.left: resultWindow.left anchors.leftMargin: 50 anchors.top: resultWindow.top anchors.topMargin: 5 //anchors.horizontalCenter: parent.horizontalCenter //anchors.verticalCenter: parent.verticalCenter spacing: 50 UserComboBox{ id:testTypeComboBox anchors.verticalCenter: parent.verticalCenter width: 150 height:30 bgColor:"#D2D5D9" enabled: !groupbox.running model: ["高压密封测试","低压密封测试"] onCurrentTextChanged: { if(currentText === "高压密封测试"){ sealSelfTestPstep.visible = true sealSelfTestNstep.visible = false } else if(currentText === "低压密封测试"){ sealSelfTestPstep.visible = false sealSelfTestNstep.visible = true } } } StartStopButton{ id:startStopButton width: 45 height: 45 anchors.verticalCenter: parent.verticalCenter } } } } } //记录 Row{ id:record spacing: 10 property int tableWidth:980 function dataRandomSet(modelData,max){ for(var i=0;i