SealSelfTest.qml 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
  1. import QtQuick 2.11
  2. import QtQuick.Controls 1.4
  3. import "modbus.js" as ModbusJs
  4. import "sealSelfTest.js" as SealSelfTestJs
  5. Item {
  6. Loader{
  7. id:loader
  8. anchors.fill: parent
  9. anchors.margins: 5
  10. }
  11. function show(){
  12. if(loader.sourceComponent === null){
  13. loader.sourceComponent = componet
  14. }
  15. loader.item.show()
  16. }
  17. function exit(){
  18. if(loader.sourceComponent !== null){
  19. loader.item.exit()
  20. }
  21. }
  22. Component{
  23. id:componet
  24. GroupBox{
  25. id:groupbox
  26. x:width
  27. title: "密封自检"
  28. property bool running:startStopButton.running
  29. property int pressureCnt:0
  30. property var dataArray: []
  31. signal pressureDisplaySigFun(var pressureNumber)
  32. onPressureDisplaySigFun: {
  33. pressureDisplayInput(pressureNumber)
  34. }
  35. function pressureDisplayInput(number){
  36. //console.log("pressureDisplayInput")
  37. pressureCnt++
  38. if(pressureCnt <= 61){
  39. dataArray.push(number)
  40. curveDisplay.spline.append(pressureCnt-1,number)
  41. }
  42. else{
  43. dataArray.push(number)
  44. dataArray.shift()
  45. curveDisplay.spline.clear()
  46. for(var i=0; i<61; i++){
  47. curveDisplay.spline.append(i,dataArray[i])
  48. }
  49. }
  50. gauge.value = number
  51. }
  52. onRunningChanged: {
  53. SealSelfTestJs.running =running
  54. if(running === true)
  55. startTimer.restart()
  56. else{
  57. sealSelfTestPstep.running =false
  58. sealSelfTestNstep.running =false
  59. choosevalve.menuEnable = true
  60. }
  61. }
  62. Timer{
  63. id:startTimer
  64. repeat: false
  65. interval: 500
  66. onTriggered: {
  67. choosevalve.menuEnable = false
  68. console.log("正在自检....")
  69. var ret = ModbusJs.checkModebusDevice(controlSerial,sensorSerial,log)
  70. if(ret === false){
  71. log.show("通讯自检错误")
  72. startStopButton.running = false
  73. return
  74. }
  75. else{
  76. if(testTypeComboBox.currentText === "高压密封测试"){
  77. console.log(testTypeComboBox.currentText)
  78. sealSelfTestPstep.running =true
  79. }
  80. else{
  81. console.log(testTypeComboBox.currentText)
  82. sealSelfTestNstep.running =true
  83. }
  84. }
  85. }
  86. }
  87. function recordPressure(sensorType){
  88. // ModbusJs.pressureSensorCtrl(controlSerial,sensorType)
  89. // console.log("打开"+sensorType+"传感器阀门")
  90. var tab = tabview.getTab(0)
  91. var modelData = tab.item.modelData
  92. modelData.clear()
  93. SealSelfTestJs.next = false
  94. //读取压力值
  95. var ret = SealSelfTestJs.displayPressure(sensorType,modelData,pressureDisplaySigFun,spy,log)
  96. return ret
  97. }
  98. function pabort(){
  99. console.log("pabort")
  100. SealSelfTestJs.next = false
  101. sealSelfTestPstep.abort()
  102. SealSelfTestJs.running = true
  103. SealSelfTestJs.positiveDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log)
  104. startStopButton.running = false
  105. sealSelfTestPstep.running = false
  106. sealSelfTestPstep.reset()
  107. ModbusJs.closeAllValve(controlSerial)
  108. }
  109. function nabort(){
  110. console.log("nabort")
  111. SealSelfTestJs.next = false
  112. sealSelfTestNstep.abort()
  113. SealSelfTestJs.running = true
  114. SealSelfTestJs.negativeDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log)
  115. startStopButton.running = false
  116. sealSelfTestNstep.running = false
  117. sealSelfTestNstep.reset()
  118. ModbusJs.closeAllValve(controlSerial)
  119. }
  120. Connections{
  121. target: sealSelfTestNstep
  122. onUserNext:{
  123. SealSelfTestJs.next = true
  124. }
  125. onUserStepClick:{
  126. switch (text){
  127. case "负压罐泄压至0kPa":
  128. console.log(text)
  129. //下一步
  130. SealSelfTestJs.next = false
  131. var ret = SealSelfTestJs.negativeDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log)
  132. if(ret === false){
  133. groupbox.nabort()
  134. }
  135. else{
  136. ModbusJs.closeAllValve(controlSerial)
  137. }
  138. break
  139. case "真空阀负压阀到负压表管路,进气-30kPa":
  140. console.log(text)
  141. //下一步
  142. SealSelfTestJs.next = false
  143. //负压吸气
  144. ret = SealSelfTestJs.setNegativePressure(-30,controlSerial,sensorSerial,pressureDisplaySigFun,spy,log)
  145. if(ret === true){
  146. // ModbusJs.negativePressureTankInputCtrl(controlSerial,false)
  147. // console.log("关闭负压罐进气阀门")
  148. // ModbusJs.pressureSensorCtrl(controlSerial,"关闭")
  149. // console.log("关闭传感器阀门")
  150. ModbusJs.vacuoValveTestIO(controlSerial,false)
  151. console.log("关闭真空阀检测口 负压传感器接在检测口后面")
  152. console.log("检测真空阀负压阀到负压表管路是否漏气")
  153. //记录压力
  154. ret = groupbox.recordPressure("负压")
  155. if(ret === false){
  156. //进入测试退出 泄压步骤
  157. groupbox.nabort()
  158. }
  159. }
  160. else{//进入测试退出 泄压步骤
  161. groupbox.nabort()
  162. }
  163. break
  164. case "负压罐体密封测试":
  165. console.log(text)
  166. ModbusJs.vacuoValveTestIO(controlSerial,true)
  167. console.log("打开真空阀检测口,负压传感器接在检测口后面")
  168. SealSelfTestJs.next = false
  169. ModbusJs.pressureSensorCtrl(controlSerial,"负压")
  170. console.log("打开负压传感器阀门")
  171. ret = groupbox.recordPressure("负压")
  172. if(ret === false){
  173. //进入测试退出 泄压步骤
  174. groupbox.nabort()
  175. }
  176. break
  177. case "负压呼吸阀测试口密封测试":
  178. console.log(text)
  179. SealSelfTestJs.next = false
  180. //ModbusJs.turnOffAllTestIO(controlSerial)
  181. ModbusJs.vacuoValveTestIO(controlSerial,true)
  182. console.log("打开真空阀检测口,负压传感器接在检测口后面")
  183. ModbusJs.nbreathValveTestIo(controlSerial,true)
  184. console.log("打开负压呼吸阀测试口")
  185. //打开负压阀门
  186. ModbusJs.pressureSensorCtrl(controlSerial,"负压")
  187. console.log("打开负压传感器阀门")
  188. var tab = tabview.getTab(0)
  189. var modelData = tab.item.modelData
  190. modelData.clear()
  191. ret = SealSelfTestJs.displayPressure("负压",modelData,pressureDisplaySigFun,spy,log)
  192. if(ret === false){
  193. //进入测试退出 泄压步骤
  194. groupbox.nabort()
  195. }
  196. break
  197. // case "真空阀测试口管路":
  198. // console.log(text)
  199. // SealSelfTestJs.next = false
  200. // ModbusJs.turnOffAllTestIO(controlSerial)
  201. // ModbusJs.vacuoValveTestIO(controlSerial,true)
  202. // ModbusJs.pressureSensorCtrl(controlSerial,"负压")
  203. // console.log("打开负压传感器阀门")
  204. // tab = tabview.getTab(0)
  205. // modelData = tab.item.modelData
  206. // modelData.clear()
  207. // ret = SealSelfTestJs.displayPressure("负压",modelData,pressureDisplaySigFun,spy,log)
  208. // if(ret === false){
  209. // //进入测试退出 泄压步骤
  210. // groupbox.nabort()
  211. // }
  212. // break
  213. case "密封自检结束,请泄压":
  214. console.log(text)
  215. SealSelfTestJs.next = false
  216. SealSelfTestJs.negativeDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log)
  217. ModbusJs.closeAllValve(controlSerial)
  218. startStopButton.running = false
  219. break;
  220. }
  221. }
  222. }
  223. Connections{
  224. target: sealSelfTestPstep
  225. onUserNext:{
  226. SealSelfTestJs.next = true
  227. }
  228. onUserStepClick:{
  229. switch (text){
  230. case "正压罐泄压至0kPa":
  231. console.log(text)
  232. SealSelfTestJs.next = false
  233. var ret = SealSelfTestJs.positiveDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log)
  234. if(ret === false){
  235. groupbox.pabort()
  236. }
  237. else{
  238. ModbusJs.closeAllValve(controlSerial)
  239. }
  240. break
  241. case "低压阀到低压表管路,进气50kPa":
  242. console.log(text)
  243. SealSelfTestJs.next = false
  244. ret = SealSelfTestJs.setPositivePressure("低压",50,controlSerial,sensorSerial,pressureDisplaySigFun,spy,log)
  245. if(ret === true){
  246. ModbusJs.positivePressureTankInputCtrl(controlSerial,false)
  247. console.log("关闭正压罐进气阀门")
  248. ModbusJs.proportionalControlWrite(controlSerial,0)
  249. console.log("关闭调节阀")
  250. ModbusJs.pressureSensorCtrl(controlSerial,"关闭")
  251. console.log("关闭传感器阀门")
  252. ret = groupbox.recordPressure("低压")
  253. if(ret === false){
  254. //进入测试退出 泄压步骤
  255. groupbox.pabort()
  256. }
  257. }
  258. else{//进入测试退出 泄压步骤
  259. groupbox.pabort()
  260. }
  261. break
  262. case "高压阀到高压表管路,进气100kPa":
  263. console.log(text)
  264. SealSelfTestJs.next = false
  265. ret = SealSelfTestJs.setPositivePressure("高压",100,controlSerial,sensorSerial,pressureDisplaySigFun,spy,log)
  266. if(ret === true){
  267. ModbusJs.positivePressureTankInputCtrl(controlSerial,false)
  268. console.log("关闭正压罐进气阀门")
  269. ModbusJs.proportionalControlWrite(controlSerial,0)
  270. console.log("关闭调节阀")
  271. ModbusJs.pressureSensorCtrl(controlSerial,"关闭")
  272. console.log("关闭传感器阀门")
  273. ret = groupbox.recordPressure("高压")
  274. if(ret === false){
  275. //进入测试退出 泄压步骤
  276. groupbox.pabort()
  277. }
  278. }
  279. else{//进入测试退出 泄压步骤
  280. groupbox.pabort()
  281. }
  282. break
  283. case "正压罐体密封测试":
  284. console.log(text)
  285. SealSelfTestJs.next = false
  286. ModbusJs.pressureSensorCtrl(controlSerial,"高压")
  287. console.log("打开高压传感器阀门")
  288. ret = groupbox.recordPressure("高压")
  289. if(ret === false){
  290. //进入测试退出 泄压步骤
  291. groupbox.pabort()
  292. }
  293. break
  294. case "安全阀测试口管路":
  295. console.log(text)
  296. SealSelfTestJs.next = false
  297. ModbusJs.turnOffAllTestIO(controlSerial)
  298. ModbusJs.safeValveTestIo(controlSerial,true)
  299. ModbusJs.pressureSensorCtrl(controlSerial,"高压")
  300. console.log("打开高压传感器阀门")
  301. var tab = tabview.getTab(0)
  302. var modelData = tab.item.modelData
  303. modelData.clear()
  304. ret = SealSelfTestJs.displayPressure("高压",modelData,pressureDisplaySigFun,spy,log)
  305. if(ret === false){
  306. //进入测试退出 泄压步骤
  307. groupbox.pabort()
  308. }
  309. break;
  310. case "泄压至20kPa左右":
  311. console.log(text)
  312. SealSelfTestJs.next = false
  313. ModbusJs.turnOffAllTestIO(controlSerial)
  314. SealSelfTestJs.positiveDecompression20kPA(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log)
  315. if(ret === false){
  316. //进入测试退出 泄压步骤
  317. groupbox.pabort()
  318. }
  319. break;
  320. case "呼吸阀测试口管路":
  321. console.log(text)
  322. SealSelfTestJs.next = false
  323. ModbusJs.turnOffAllTestIO(controlSerial)
  324. ModbusJs.pbreathValveTestIo(controlSerial,true)
  325. ModbusJs.pressureSensorCtrl(controlSerial,"高压")
  326. console.log("打开高压传感器阀门")
  327. tab = tabview.getTab(0)
  328. modelData = tab.item.modelData
  329. modelData.clear()
  330. SealSelfTestJs.next = false
  331. ret = SealSelfTestJs.displayPressure("高压",modelData,pressureDisplaySigFun,spy,log)
  332. if(ret === false){
  333. //进入测试退出 泄压步骤
  334. groupbox.pabort()
  335. }
  336. break;
  337. case "人孔盖测试口管路":
  338. console.log(text)
  339. SealSelfTestJs.next = false
  340. ModbusJs.turnOffAllTestIO(controlSerial)
  341. ModbusJs.peopleCoverHoleValveTestIO(controlSerial,true)
  342. ModbusJs.pressureSensorCtrl(controlSerial,"高压")
  343. console.log("打开高压传感器阀门")
  344. tab = tabview.getTab(0)
  345. modelData = tab.item.modelData
  346. modelData.clear()
  347. SealSelfTestJs.next = false
  348. ret = SealSelfTestJs.displayPressure("高压",modelData,pressureDisplaySigFun,spy,log)
  349. if(ret === false){
  350. //进入测试退出 泄压步骤
  351. groupbox.pabort()
  352. }
  353. break;
  354. case "罐体测试口管路":
  355. console.log(text)
  356. SealSelfTestJs.next = false
  357. ModbusJs.turnOffAllTestIO(controlSerial)
  358. ModbusJs.tankValveTestIO(controlSerial,true)
  359. ModbusJs.pressureSensorCtrl(controlSerial,"高压")
  360. console.log("打开高压传感器阀门")
  361. tab = tabview.getTab(0)
  362. modelData = tab.item.modelData
  363. modelData.clear()
  364. SealSelfTestJs.next = false
  365. ret = SealSelfTestJs.displayPressure("高压",modelData,pressureDisplaySigFun,spy,log)
  366. if(ret === false){
  367. //进入测试退出 泄压步骤
  368. groupbox.pabort()
  369. }
  370. break;
  371. case "密封自检结束,请泄压":
  372. console.log(text)
  373. SealSelfTestJs.next = false
  374. SealSelfTestJs.positiveDecompression(controlSerial,sensorSerial,pressureDisplaySigFun,spy,log)
  375. ModbusJs.closeAllValve(controlSerial)
  376. startStopButton.running = false
  377. break;
  378. }
  379. }
  380. }
  381. function show(){
  382. animationShow.running = true
  383. }
  384. function exit(){
  385. animationExit.running = true
  386. }
  387. //加载任务动画效果
  388. NumberAnimation {
  389. id: animationShow
  390. target: groupbox
  391. property: "x"
  392. from: groupbox.x
  393. to: 0
  394. duration: 500
  395. }
  396. NumberAnimation {
  397. id: animationExit
  398. target: groupbox
  399. property: "x"
  400. from: groupbox.x
  401. to: 1024
  402. duration: 500
  403. }
  404. Column{
  405. anchors.left: parent.left
  406. anchors.leftMargin: 2
  407. anchors.top: parent.top
  408. anchors.topMargin: 0
  409. spacing: 0
  410. //参数
  411. // Rectangle{
  412. // width: 980
  413. // height: 60
  414. // color: "white"
  415. // radius: 6
  416. // Row{
  417. // x:50
  418. // anchors.verticalCenter: parent.verticalCenter
  419. // spacing: 100
  420. // UserComboBox{
  421. // id:testTypeComboBox
  422. // anchors.verticalCenter: parent.verticalCenter
  423. // width: 177
  424. // height:30
  425. // bgColor:"#D2D5D9"
  426. // enabled: !groupbox.running
  427. // model: ["正压罐密封测试","负压罐密封测试"]
  428. // onCurrentTextChanged: {
  429. // if(currentText === "正压罐密封测试"){
  430. // sealSelfTestPstep.visible = true
  431. // //sealSelfTestNstep.visible = false
  432. // }
  433. // else if(currentText === "负压罐密封测试"){
  434. // sealSelfTestPstep.visible = false
  435. // //sealSelfTestNstep.visible = true
  436. // }
  437. // }
  438. // }
  439. // StartStopButton{
  440. // id:startStopButton
  441. // width: 45
  442. // height: 45
  443. // anchors.verticalCenter: parent.verticalCenter
  444. // }
  445. // }
  446. // }
  447. //曲线 仪表 结果
  448. Row{
  449. x:-10
  450. // y:-10
  451. //曲线
  452. CurveDisplay{
  453. id:curveDisplay
  454. anchors.verticalCenter: parent.verticalCenter
  455. width: 450
  456. height: 300
  457. axisxMax:60
  458. axisxMin:0
  459. axisyMax:500
  460. axisyMin:-50
  461. name:"横轴时间(秒) 纵轴压力(kPa)"
  462. }
  463. //仪表
  464. Rectangle{
  465. width: (300-18)*0.75
  466. height: 300-18
  467. color: "white"
  468. radius: 6
  469. anchors.verticalCenter: parent.verticalCenter
  470. Gauge {
  471. id:gauge
  472. width: parent.width
  473. height: parent.width
  474. anchors.centerIn: parent
  475. value: 0
  476. maximumValue: 500
  477. minimumValue: -100
  478. tickmarkStepSize:100
  479. labelStepSize:100
  480. Behavior on value { NumberAnimation { duration: 1000 }}
  481. }
  482. }
  483. //试验结果
  484. Item {
  485. width: 338
  486. height: 300
  487. anchors.verticalCenter: parent.verticalCenter
  488. Rectangle{
  489. id:resultWindow
  490. anchors.fill: parent
  491. anchors.margins: 10
  492. color: "white"
  493. radius: 6
  494. SealSelfTestPstep{
  495. id:sealSelfTestPstep
  496. }
  497. SealSelfTestNstep{
  498. id:sealSelfTestNstep
  499. }
  500. Row{
  501. z:sealSelfTestPstep.z+10
  502. anchors.left: resultWindow.left
  503. anchors.leftMargin: 50
  504. anchors.top: resultWindow.top
  505. anchors.topMargin: 5
  506. //anchors.horizontalCenter: parent.horizontalCenter
  507. //anchors.verticalCenter: parent.verticalCenter
  508. spacing: 50
  509. UserComboBox{
  510. id:testTypeComboBox
  511. anchors.verticalCenter: parent.verticalCenter
  512. width: 150
  513. height:30
  514. bgColor:"#D2D5D9"
  515. enabled: !groupbox.running
  516. model: ["高压密封测试","低压密封测试"]
  517. onCurrentTextChanged: {
  518. if(currentText === "高压密封测试"){
  519. sealSelfTestPstep.visible = true
  520. sealSelfTestNstep.visible = false
  521. }
  522. else if(currentText === "低压密封测试"){
  523. sealSelfTestPstep.visible = false
  524. sealSelfTestNstep.visible = true
  525. }
  526. }
  527. }
  528. StartStopButton{
  529. id:startStopButton
  530. width: 45
  531. height: 45
  532. anchors.verticalCenter: parent.verticalCenter
  533. }
  534. }
  535. }
  536. }
  537. }
  538. //记录
  539. Row{
  540. id:record
  541. spacing: 10
  542. property int tableWidth:980
  543. function dataRandomSet(modelData,max){
  544. for(var i=0;i<max; i++){
  545. var number= Math.round(Math.random()*100)
  546. number *= 10
  547. var obj={}
  548. obj.pressure=number
  549. modelData.append(obj)
  550. }
  551. }
  552. TabView {
  553. id:tabview
  554. width: record.tableWidth
  555. height: 265+10+60
  556. GraphButton{
  557. id:graphButton
  558. x:910
  559. y:-25
  560. width: 48
  561. height: 24
  562. onUserClicked: {
  563. var tab = tabview.getTab(tabview.currentIndex)
  564. var axisxMax = tab.item.modelData.count
  565. generateCurve.show(0,axisxMax,0,50,tab.item.modelData,tab.title,"横轴时间(秒) 纵轴压力(kPa)")
  566. }
  567. }
  568. Tab {
  569. title: "压力记录"
  570. active: true
  571. RecordTable{
  572. }
  573. }
  574. }
  575. }
  576. }
  577. }
  578. }
  579. }