Browse Source

实现让DI与DO的com只要有一个闭合,则公共点就闭合

jevian ma(马作伟_沃航科技) 1 month ago
parent
commit
3c6db8d198
1 changed files with 21 additions and 3 deletions
  1. 21 3
      src/utils/worker.js

+ 21 - 3
src/utils/worker.js

@@ -24,8 +24,13 @@ const initWasm = (url) => {
     _Init()
     while (true) {
       _Loop()
+      let trustDO = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
       for (let i = 0; i < 10; i++) {
-        drawPlc('DO', i, _GetTrustDO(i))
+        trustDO[i] = _GetTrustDO(i)
+      }
+      doCom = trustDO[0] || trustDO[1] || trustDO[2] || trustDO[3] || trustDO[4] || trustDO[5] || trustDO[6] || trustDO[7] || trustDO[8] || trustDO[9]
+      for (let i = 0; i < 10; i++) {
+        drawPlc('DO', i, trustDO[i])
       }
       for (let i = 0; i < 2; i++) {
         drawPlc('AO', i, Math.floor(_GetTrustAO(i) / 100))
@@ -121,7 +126,7 @@ const drawPlc = async (key, index, val, type) => {
 
     // left com
     ctx.beginPath()
-    ctx.fillStyle = 'red'
+    ctx.fillStyle = (DIValMap[0] || DIValMap[1] || DIValMap[2] || DIValMap[3] || DIValMap[4] || DIValMap[5] || DIValMap[6] || DIValMap[7] || DIValMap[8] || DIValMap[9]) ? '#green' : 'red'
     ctx.arc(l_r_dis, l_r_dis, r, 0, 2 * Math.PI)
     ctx.fill()
     const textInfo = ctx.measureText('COM')
@@ -286,6 +291,18 @@ const drawPlc = async (key, index, val, type) => {
   switch (key) {
     case 'DI':
     case 'DO':
+      // left com
+      ctx.beginPath()
+      ctx.fillStyle = (DIValMap[0] || DIValMap[1] || DIValMap[2] || DIValMap[3] || DIValMap[4] || DIValMap[5] || DIValMap[6] || DIValMap[7] || DIValMap[8] || DIValMap[9]) ? 'green' : 'red'
+      ctx.arc(l_r_dis, l_r_dis, r, 0, 2 * Math.PI)
+      ctx.fill()
+
+      // right com
+      ctx.beginPath()
+      ctx.fillStyle = doCom ? 'green' : 'red'
+      ctx.arc(canvasMsg.width - l_r_dis, l_r_dis, r, 0, 2 * Math.PI)
+      ctx.fill()
+
       ctx.clearRect(key === 'DI' ? l_r_dis - r : canvasMsg.width - l_r_dis - r, y - r, r * 2, r * 2)
       ctx.beginPath()
       ctx.fillStyle = val !== 0 ? 'green' : 'red'
@@ -402,7 +419,8 @@ const drawPlc = async (key, index, val, type) => {
   }
 }
 
-const DIValMap = {}
+const DIValMap = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+let doCom = false
 
 onmessage = (e) => {
   const { type, url, ratio, canvas, position, val, i } = e.data