|
@@ -20,17 +20,27 @@ const yieldCPU = () => {
|
|
const initWasm = (url) => {
|
|
const initWasm = (url) => {
|
|
importScripts(url)
|
|
importScripts(url)
|
|
Module.onRuntimeInitialized = async function () {
|
|
Module.onRuntimeInitialized = async function () {
|
|
|
|
+ let last_timestamp = 0
|
|
_Init()
|
|
_Init()
|
|
while (true) {
|
|
while (true) {
|
|
_Loop()
|
|
_Loop()
|
|
|
|
+ let trustDO = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
|
for (let i = 0; i < 10; i++) {
|
|
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++) {
|
|
for (let i = 0; i < 2; i++) {
|
|
drawPlc('AO', i, Math.floor(_GetTrustAO(i) / 100))
|
|
drawPlc('AO', i, Math.floor(_GetTrustAO(i) / 100))
|
|
}
|
|
}
|
|
// drawPlc('time', 0, _GetTimeStamp())
|
|
// drawPlc('time', 0, _GetTimeStamp())
|
|
- postMessage({ type: 'setTime', val: _GetTimeStamp() })
|
|
|
|
|
|
+ let now_timestamp = _GetTimeStamp()
|
|
|
|
+ if (now_timestamp != last_timestamp) { // 防止反复高频调用postMessage,把主线程的性能也拉低了。
|
|
|
|
+ postMessage({ type: 'setTime', val: now_timestamp })
|
|
|
|
+ last_timestamp = now_timestamp
|
|
|
|
+ }
|
|
await yieldCPU() // 让出cpu,保证有间隔进入消息接收回调
|
|
await yieldCPU() // 让出cpu,保证有间隔进入消息接收回调
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -116,7 +126,7 @@ const drawPlc = async (key, index, val, type) => {
|
|
|
|
|
|
// left com
|
|
// left com
|
|
ctx.beginPath()
|
|
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.arc(l_r_dis, l_r_dis, r, 0, 2 * Math.PI)
|
|
ctx.fill()
|
|
ctx.fill()
|
|
const textInfo = ctx.measureText('COM')
|
|
const textInfo = ctx.measureText('COM')
|
|
@@ -281,6 +291,18 @@ const drawPlc = async (key, index, val, type) => {
|
|
switch (key) {
|
|
switch (key) {
|
|
case 'DI':
|
|
case 'DI':
|
|
case 'DO':
|
|
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.clearRect(key === 'DI' ? l_r_dis - r : canvasMsg.width - l_r_dis - r, y - r, r * 2, r * 2)
|
|
ctx.beginPath()
|
|
ctx.beginPath()
|
|
ctx.fillStyle = val !== 0 ? 'green' : 'red'
|
|
ctx.fillStyle = val !== 0 ? 'green' : 'red'
|
|
@@ -397,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) => {
|
|
onmessage = (e) => {
|
|
const { type, url, ratio, canvas, position, val, i } = e.data
|
|
const { type, url, ratio, canvas, position, val, i } = e.data
|