.import "modbus.js" as ModbusJs //试验运行标志 var running = false var runningBackup = false //开启压力测试计时时间 var openPressureTimeMax = 3 //密封压力测试计时时间 var sealPressureTimemax = 30 //安全阀默认整定压力 var setPressure = 100 //次参数不用 var exit = false var pthreshold_Setzero = 0.5 var delaycount_Setzero = 3 var delayInterval = 10 // ms //var maxPressureStableTime = 20 var releasePressureTimeOut = 180 //罐体压力检查 用于液压升降时 压力检查 function valvePressureCheckStop(controlSerial,processWindow,pressureDisplaySigFun,spy,log) { ModbusJs.pressureSensorCtrl(controlSerial,"高压") console.log("打开高压传感器阀门") //打开正压罐头泄气阀门 var loseFlag = true ModbusJs.bigTuningValveControl(controlSerial,false) ModbusJs.bigTuningValveControl(controlSerial,false) //关闭正压罐进气阀门 ModbusJs.positivePressureTankInputCtrl(controlSerial,false) console.log("关闭正压罐进气阀门") //查看高压传感器值 等待正压罐头压力降到最低值 do{ if(runningBackup === false && running === true){ console.log("停止检查") ModbusJs.closeAllValve(controlSerial) return false } var obj = ModbusJs.highPressureSensorReadReq(sensorSerial) if(obj.ret === false){ log.show("高传感器通讯错误") return false } // signal 压力显示函数 pressureDisplaySigFun(obj.pressureNumber) if(obj.pressureNumber > pthreshold_Setzero && loseFlag === true ){ loseFlag = false ModbusJs.positivePressureTankOutputCtrl(controlSerial,true) console.log("打开正压罐头泄气阀门") processWindow.text("检查压力,泄气中") } else if(obj.pressureNumber > pthreshold_Setzero){ //延时 spy.wait(900) } }while(obj.pressureNumber > pthreshold_Setzero ) // ModbusJs.closeAllValve(controlSerial) ModbusJs.positivePressureTankOutputCtrl(controlSerial,false) console.log("关闭正压罐头泄气阀门") ModbusJs.pressureSensorCtrl(controlSerial,"关闭") console.log("关闭正压仪表阀门") return true } //试验异常中止退出 泄压操作 /* controlSerial 控制串口对象 * pressureDisplaySigFun 压力显示信号函数(回调函数) * resultSigFun 结果显示信号函数(回调函数) * spy 仅用于延时的对象 * log 异常显示对象 */ function valveStop(controlSerial,pressureDisplaySigFun,spy,log){ //打开正压罐头泄气阀门 var loseFlag = true ModbusJs.bigTuningValveControl(controlSerial,false) ModbusJs.bigTuningValveControl(controlSerial,false) //关闭正压罐进气阀门 ModbusJs.positivePressureTankInputCtrl(controlSerial,false) console.log("关闭正压罐进气阀门") //查看高压传感器值 等待正压罐头压力降到最低值 do{ if(runningBackup === false && running === true){ console.log("停止测试") ModbusJs.closeAllValve(controlSerial) return } if(exit === true) return var obj = ModbusJs.highPressureSensorReadReq(sensorSerial) if(obj.ret === false){ log.show("高传感器通讯错误") return false } // signal 压力显示函数 pressureDisplaySigFun(obj.pressureNumber) //延时 spy.wait(900) if(obj.pressureNumber > pthreshold_Setzero && loseFlag === true ){ loseFlag = false ModbusJs.positivePressureTankOutputCtrl(controlSerial,true) console.log("打开正压罐头泄气阀门") } }while(obj.pressureNumber > pthreshold_Setzero ) // ModbusJs.closeAllValve(controlSerial) ModbusJs.closeSingalValve(controlSerial) console.log("关闭 关闭所有阀门") } //正压开启压力和密封试验 /* currentIndex 当前第几次试验 * controlSerial 控制串口对象 * sensorSerial 压力传感器串口对象 * pressureDisplaySigFun 压力显示信号函数(回调函数) * resultSigFun 结果显示信号函数(回调函数) * spy 仅用于延时的对象 * log 异常显示对象 * openPressureModel 测试整定压力记录压力的数据模型 * sealPressureModel 测试密封压力记录压力的数据模型 */ function valveStart(currentIndex,tabView,processWindow,controlSerial,sensorSerial, openPressureModel,sealPressureModel, pressureDisplaySigFun,resultSigFun,spy,log) { runningBackup = running var ret = true //var StablePressureCount = maxPressureStableTime*1000/readPressureInterval var openPressureNumber var sealPressureNumber console.log("安全阀测试开始") //step 1 // 关闭所有测试口 ModbusJs.turnOffAllTestIO(controlSerial) console.log("关闭所有测试口") //step 2 //压力清零 ModbusJs.pressureSensorCtrl(controlSerial,"高压") console.log("打开高压传感器阀门") //关闭正压罐进气阀门 ModbusJs.positivePressureTankInputCtrl(controlSerial,false) console.log("关闭正压罐进气阀门") //打开正压罐头泄气阀门 ModbusJs.positivePressureTankOutputCtrl(controlSerial,true) console.log("打开正压罐头泄气阀门") //查看高压传感器值 等待压力罐压力为0 processWindow.show("等待压力降到0") //var checkPressure = true var timeout = 0 var end_count = 0 do{ //延时 spy.wait(900) if(running === false){ console.log("停止测试") return false } var obj = ModbusJs.highPressureSensorReadReq(sensorSerial) if(obj.ret === false){ log.show("高压传感器通讯错误") return false } // signal 压力显示函数 pressureDisplaySigFun(obj.pressureNumber) timeout++ if(obj.pressureNumber <= pthreshold_Setzero){ end_count++; } }while(end_count < delaycount_Setzero && timeout < releasePressureTimeOut) console.log("压力降压到 0 kPa") if(timeout === releasePressureTimeOut){ log.show("泄压超时") ModbusJs.closeAllValve(controlSerial) console.log("关闭所有阀门") return false } //关闭正压罐头泄气阀门 ModbusJs.positivePressureTankOutputCtrl(controlSerial,false) console.log("关闭正压罐头泄气阀门") //step 3 整定压力测试 /*********测试整定压力*************/ //打开安全阀测试口阀门 ModbusJs.safeValveTestIo(controlSerial,true) console.log("打开安全阀测试口阀门") //打开进气阀门 ModbusJs.positivePressureTankInputCtrl(controlSerial,true) console.log("打开正压罐进气阀门") ModbusJs.bigTuningValveControl(controlSerial,true) console.log("打开 粗调开关") ModbusJs.higspeedControl(controlSerial,true) console.log("打开 快速进气阀") processWindow.show("整定压力测试") console.log("整定压力测试开始") //切换当前tab页面 tabView.currentIndex = currentIndex var delta = 0 var keepCnt = 0 obj = ModbusJs.highPressureSensorReadReq(sensorSerial) if(obj.ret === false){ log.show("高压传感器通讯错误") return false } var pre_pressure = obj.pressureNumber2 var prevTime = Date.now() var preDelta = 0 var min = 0.6*setPressure var max = 1.2*setPressure var switch_pressure = setPressure-30; var highspeed_open = true //var setPressure = 100 ret = true //StablePressureCount = openPressureTimeMax*1000/readPressureInterval do{ //延时 spy.wait(delayInterval) if(running === false){ console.log("安全阀整定压力--停止测试") return false } var curTime = Date.now() var deltaTime = curTime - prevTime if(deltaTime >= 980){ obj = ModbusJs.highPressureSensorReadReq(sensorSerial) if(obj.ret === false){ log.show("高压传感器通讯错误") return false } //开启压力超出范围了 if(obj.pressureNumber > max){ log.show("安全阀无法开启") break } if((obj.pressureNumber >= switch_pressure) && (true === highspeed_open)){ ModbusJs.higspeedControl(controlSerial,false) console.log("关闭 快速进气阀") highspeed_open = false } delta = obj.pressureNumber2 - pre_pressure pre_pressure = obj.pressureNumber2 if((delta < 0.8) && ((delta < (preDelta-0.03)) || (delta <= 0.2))){ keepCnt++ }else{ keepCnt=0 } //console.log("current pressure:"+obj.pressureNumber2+", delta:"+delta+", preDelta: "+preDelta) //console.log("keepCnt:"+ keepCnt +" ") if(keepCnt >= openPressureTimeMax){ //console.log("keepCnt > StablePressureCount") break; } preDelta = delta prevTime = curTime pressureDisplaySigFun(obj.pressureNumber) // add pressure table var table={} table.pressure=obj.pressureNumber //开启压力模型赋值 openPressureModel.append(table) } }while(1) //通知数据 pressureDisplaySigFun(obj.pressureNumber) // add pressure table table={} table.pressure=obj.pressureNumber openPressureModel.append(table) openPressureNumber = obj.pressureNumber var result={} result.openPressureNumber = obj.pressureNumber result.sealPressureNumber = "" resultSigFun(result) console.log("安全阀整定压力:",obj.pressureNumber) console.log("安全阀整定压力测试结束") // obj = ModbusJs.testFixedPressure(controlSerial,setPressure+30) // if(obj.ret === true){ // ModbusJs.proportionalControlWrite(controlSerial,obj.voltage) // console.log("比例调压阀压力值:",obj.voltage) // } // // ModbusJs.proportionalControlWrite(controlSerial,427) //139.8 kPa // console.log("打开调节阀") // /*********测试整定压力*************/ // // //打开正压安全阀测试口阀门 // // ModbusJs.safeValveTestIo(controlSerial,true) // // console.log("打开安全阀测试口阀门") // //关闭正压罐头泄气阀门 // ModbusJs.positivePressureTankOutputCtrl(controlSerial,false) // console.log("关闭正压罐头泄气阀门") // //打开进气阀门 // ModbusJs.positivePressureTankInputCtrl(controlSerial,true) // console.log("打开进气阀门") // tabView.currentIndex = currentIndex ////切换当前tab页面 // var min = 0 // var max = setPressure*2 //高压最大范围 // if(max > 450) // max = 450 // // console.log("setPressure:",setPressure) // // console.log("min:",min) // // console.log("max:",max) // var prevTime = Date.now() // var openCnt = 0 // var bigAcive = true // ModbusJs.bigTuningValveControl(controlSerial,true) // console.log("打开 粗调开关") // /********粗调压力*************/ // processWindow.show("调整压力中") // var bitCnt = 0 // do{ // if(running === false){ // console.log("停止测试") // return false // } // obj = ModbusJs.highPressureSensorReadReq(sensorSerial) // if(obj.ret === false){ // log.show("高压传感器通讯错误") // return false // } // spy.wait(10) // var curTime = Date.now() // var deltaTime = curTime - prevTime // if(deltaTime > 900){ // prevTime = curTime // pressureDisplaySigFun(obj.pressureNumber) // bitCnt++ // // console.log("obj.pressureNumber:",obj.pressureNumber) // // console.log("bitCnt:",bitCnt) // } // //粗调压力值 // //控制逻辑改动 先这样修改 // var bigLevel = setPressure+20 // if(obj.pressureNumber > bigLevel && bigAcive === true){ // bigAcive = false // ModbusJs.bigTuningValveControl(controlSerial,false) // ModbusJs.bigTuningValveControl(controlSerial,false) // console.log("关闭 粗调开关") // //打开正压安全阀测试口阀门 // ModbusJs.safeValveTestIo(controlSerial,true) // console.log("打开安全阀测试口阀门") // break // } // }while(obj.pressureNumber < max && bitCnt < 120) // if(bitCnt === 120){ // processWindow.show("调整压力失败") // return false // } // processWindow.show("整定试验开始") // do{ // if(running === false){ // console.log("停止测试") // return false // } // obj = ModbusJs.highPressureSensorReadReq(sensorSerial) // if(obj.ret === false){ // log.show("高压传感器通讯错误") // return false // } // pressureDisplaySigFun(obj.pressureNumber) // // add pressure table // var table={} // table.pressure=obj.pressureNumber // //开启压力模型赋值 // openPressureModel.append(table) // spy.wait(900) // openCnt++ // processWindow.text("整定压力试验时间"+(openPressureTimeMax-openCnt)+"s") // }while(obj.pressureNumber <=max && openCnt < openPressureTimeMax) // if(obj.pressureNumber >=min && obj.pressureNumber <= max && openCnt ===openPressureTimeMax){ // openPressureNumber = obj.pressureNumber.toString() // var result={} // result.openPressureNumber = openPressureNumber // result.sealPressureNumber = "" // resultSigFun(result) // console.log("整定压力:",openPressureNumber) // } // else{ // if(obj.pressureNumber < min){ // openPressureNumber=obj.pressureNumber+"<"+min+"kPa" // } // else if(obj.pressureNumber > max){ // openPressureNumber=obj.pressureNumber+">"+max+"kPa" // } // result={} // result.openPressureNumber = openPressureNumber // result.sealPressureNumber = "" // resultSigFun(result) // //关闭正压罐进气阀门 // ModbusJs.positivePressureTankInputCtrl(controlSerial,false) // console.log("关闭正压罐进气阀门") // console.log("整定压力:",openPressureNumber) // console.log("整定压力测试结束") // return false // } // console.log("整定压力测试结束") //step 4 /*********测试密封压力*************/ console.log("密封压力开始") processWindow.show("密封压力试验开始") //关闭正压罐进气阀门 ModbusJs.positivePressureTankInputCtrl(controlSerial,false) console.log("关闭正压罐进气阀门") ModbusJs.bigTuningValveControl(controlSerial,false) console.log("关掉 粗调开关") tabView.currentIndex = currentIndex+3 obj = ModbusJs.highPressureSensorReadReq(sensorSerial) if(obj.ret === false){ log.show("高压传感器通讯错误") return false } pre_pressure = obj.pressureNumber prevTime = Date.now() keepCnt = 0 preDelta = 0 //StablePressureCount = sealPressureTimemax*1000/readPressureInterval do{ //延时 spy.wait(delayInterval) if(running === false){ console.log("停止测试") return false } //压力数据通知 curTime = Date.now() deltaTime = curTime - prevTime if(deltaTime >=980){ prevTime = curTime obj = ModbusJs.highPressureSensorReadReq(sensorSerial) if(obj.ret === false){ log.show("高压传感器通讯错误") return false } keepCnt++ pressureDisplaySigFun(obj.pressureNumber) // add pressure table table={} table.pressure=obj.pressureNumber sealPressureModel.append(table) processWindow.text("密封压力试验时间"+(sealPressureTimemax-keepCnt)+"s") //processWindow.text("21kPa压力进气时间"+(sealPressureTimemax-sealCnt)+"s") } }while(keepCnt < sealPressureTimemax) pressureDisplaySigFun(obj.pressureNumber) // add pressure table table={} table.pressure=obj.pressureNumber sealPressureModel.append(table) sealPressureNumber = obj.pressureNumber//.toString() result={} result.openPressureNumber = openPressureNumber result.sealPressureNumber = sealPressureNumber resultSigFun(result) console.log("密封压力:",obj.pressureNumber) console.log("密封压力结束") // /*********测试密封压力*************/ // console.log("密封压力开始") // processWindow.show("密封压力试验开始") // //关闭正压罐进气阀门 // ModbusJs.positivePressureTankInputCtrl(controlSerial,false) // console.log("关闭正压罐进气阀门") // var holdTimeCnt=0 // tabView.currentIndex = currentIndex+3 //切换当前tab页面 // do{ // if(running === false){ // console.log("停止测试") // return false // } // obj = ModbusJs.highPressureSensorReadReq(sensorSerial) // if(obj.ret === false){ // log.show("高压传感器通讯错误") // return false // } // //密封压力模型赋值 // table={} // table.pressure=obj.pressureNumber // sealPressureModel.append(table) // //压力实时显示 // pressureDisplaySigFun(obj.pressureNumber) // spy.wait(900) // holdTimeCnt++ // processWindow.text("密封压力试验时间"+(sealPressureTimemax-holdTimeCnt)+"s") // }while(holdTimeCnt < sealPressureTimemax ) // sealPressureNumber = obj.pressureNumber.toString() // // //整定压力<0.3MPa时取(整定压力-0.03)MPa,整定压力≥0.3MPa时,取整定压力*0.9倍。 // // if(setPressure < 300) // // var level = Number(setPressure) - 30 // // else { // // level = Number(setPressure)*0.9 // // level = level.toFixed(1) // // } // // if(obj.pressureNumber < level){ // // sealPressureNumber = obj.pressureNumber+"<"+level+"kPa" // // } // // else{ // // sealPressureNumber = obj.pressureNumber.toString() // // } // result={} // result.openPressureNumber = openPressureNumber // result.sealPressureNumber = sealPressureNumber // resultSigFun(result) // console.log("密封压力结束") //setp 5 //打开正压罐头泄气阀门 ModbusJs.positivePressureTankOutputCtrl(controlSerial,true) console.log("打开正压罐头泄气阀门") ModbusJs.peopleCoverHoleValveTestIO(controlSerial,true) console.log("打开人孔盖测试口,用来泄压") console.log("等待压力 0kPa") //查看低压传感器值 等待正压罐头压力降到最低值 processWindow.show("试验结束,泄气中") timeout = 0 end_count = 0 do{ if(running === false){ console.log("停止测试") return false } obj = ModbusJs.highPressureSensorReadReq(sensorSerial) if(obj.ret === false){ log.show("低压传感器通讯错误") return false } // signal 压力显示函数 pressureDisplaySigFun(obj.pressureNumber) //延时 spy.wait(950) timeout++ if(obj.pressureNumber <= pthreshold_Setzero){ end_count++; } }while(end_count < (2*delaycount_Setzero) && timeout < 180) //关闭正压罐头泄气阀门 ModbusJs.positivePressureTankOutputCtrl(controlSerial,false) console.log("关闭正压罐泄气阀门") ModbusJs.peopleCoverHoleValveTestIO(controlSerial,false) console.log("关闭人孔盖测试口") // //打开正压罐头泄气阀门 // ModbusJs.positivePressureTankOutputCtrl(controlSerial,true) // console.log("打开正压罐头泄气阀门") // console.log("等待压力 0kPa") // //查看低压传感器值 等待正压罐头压力降到最低值 // processWindow.show("试验结束,泄气中") // do{ // if(running === false){ // console.log("停止测试") // return // } // obj = ModbusJs.highPressureSensorReadReq(sensorSerial) // if(obj.ret === false){ // log.show("高压传感器通讯错误") // return false // } // // signal 压力显示函数 // pressureDisplaySigFun(obj.pressureNumber) // //延时 // spy.wait(900) // }while(obj.pressureNumber > pthreshold_Setzero ) // //关闭正压罐头泄气阀门 // console.log("压力 0kPa") //step 6 //ModbusJs.closeAllValve(controlSerial) //ModbusJs.closeAllValve(controlSerial) console.log("关闭所有阀门") return true } ////调用之前 先自检 ///* openPressureModel 测试开启压力过程表模型 // * sealPressureModel 测试密封压力过程表模型 // * pressureDisplaySigFun 压力显示信号函数 // * resultSigFun 结果显示信号函数 // */ //function testStart(controlSerial,sensorSerial,openPressureModel,sealPressureModel,pressureDisplaySigFun,resultSigFun,spy,log,fixedPressure){ // var openPressureNumber // var sealPressureNumber // // 关闭所有测试口 // ModbusJs.turnOffAllTestIO(controlSerial) // //打开 高压传感器阀门 // ModbusJs.highPressureSensorCtrl(controlSerial,true ) // //关闭 低压传感器阀门 // ModbusJs.lowPressureSensorCtrl(controlSerial,false) // //关闭正压罐进气阀门 // ModbusJs.positivePressureTankInputCtrl(controlSerial,false) // //打开正压罐头泄气阀门 // ModbusJs.positivePressureTankOutputCtrl(controlSerial,true) // //查看传感器值 等待正压罐头压力降到最低值 // do{ // var obj = ModbusJs.highPressureSensorReadReq(sensorSerial) // if(obj.ret === false){ // log.show("低压传感器通讯错误") // return false // } // //压力显示函数 // pressureDisplaySigFun(obj.pressureNumber) // //延时 // spy.wait(950) // }while(obj.pressureNumber > 2 ) // /*********测试整定压力*************/ // //打开安全阀测试口 // ModbusJs.safeValveTestIo(controlSerial,true) // //关闭正压罐头泄气阀门 // ModbusJs.positivePressureTankOutputCtrl(controlSerial,false) // //打开进气阀门 // ModbusJs.positivePressureTankInputCtrl(controlSerial,true) // //等待20s 根据介质需求(开启范围在±0.015MPa内) // var openCnt = 0 // var min = fixedPressure-15 // var max = fixedPressure+15 // var timeout = 20 // do{ // obj = ModbusJs.highPressureSensorReadReq(sensorSerial) // if(obj.ret === false){ // log.show("高压传感器通讯错误") // return false // } // //压力显示 // pressureDisplaySigFun(obj.pressureNumber) // // add pressure table // var table={} // table.pressure=obj.pressureNumber // //整定压力测试表模型赋值 // openPressureModel.append(table) // spy.wait(950) // openCnt++ // }while(obj.pressureNumber >=min && obj.pressureNumber <=max && openCnt < timeout) // openPressureNumber = obj.pressureNumber.toString() // //根据介质需求(开启范围在±0.015MPa内) 得到整定压力测试值 // if(obj.pressureNumber >=min && obj.pressureNumber <= max && openCnt ===timeout){ // var result={} // result.openPressureNumber = openPressureNumber // result.sealPressureNumber = "" // //结果显示整定压力值 // resultSigFun(result) // } // else{ // if(obj.pressureNumber < min){ // openPressureNumber=obj.pressureNumber+"<"+min+"kPa" // } // else if(obj.pressureNumber > max){ // openPressureNumber=obj.pressureNumber+">"+max+"kPa" // } // result={} // result.openPressureNumber = openPressureNumber // result.sealPressureNumber = "" // //结果显示整定压力值 // resultSigFun(result) // log.show(openPressureNumber) // return false // } // /*********测试密封压力*************/ // //关闭安全阀测试口 // ModbusJs.safeValveTestIo(controlSerial,false) // //整定压力<0.3MPa时取(整定压力-0.03)MPa,整定压力≥0.3MPa时,取整定压力*0.9倍。 // if(fixedPressure < 300) // var targetPressure = fixedPressure - 30 // else // targetPressure = 0.9*fixedPressure // targetPressure = targetPressure.toFixed(0) //小数点 四舍五入 // //调节压力=targetPressure 具体步骤 现场确定 // var prevTime = Date.now() // do{ // obj = ModbusJs.highPressureSensorReadReq(sensorSerial) // if(obj.ret === false){ // log.show("高压传感器通讯错误") // return false // } // var curTime = Date.now() // var deltaTime = curTime - prevTime // if(deltaTime > 950){ // prevTime = curTime // pressureDisplaySigFun(obj.pressureNumber) // } // }while(obj.pressureNumber !== targetPressure ) // //得到targetPressure 压力值后 // //打开 安全阀测试口 // ModbusJs.safeValveTestIo(controlSerial,true) // var holdTimeCnt=0 // timeout = 600 // do{ // obj = ModbusJs.highPressureSensorReadReq(sensorSerial) // if(obj.ret === false){ // log.show("高压传感器通讯错误") // return false // } // //密封压力模型赋值 // table={} // table.pressure=obj.pressureNumber // sealPressureModel.append(table) // //压力实时显示 // pressureDisplaySigFun(obj.pressureNumber) // spy.wait(950) // holdTimeCnt++ // }while(holdTimeCnt < timeout ) // sealPressureNumber = obj.pressureNumber.toString() // result={} // result.openPressureNumber = openPressureNumber // result.sealPressureNumber = sealPressureNumber // resultSigFun(result) // return true //}