Forráskód Böngészése

fit: 与WaitValue对应, 增加一个WaitNotValue的方法, 用来监听点位值是否不符合预期

gaoyagang 10 hónapja
szülő
commit
be382fa1c8
2 módosított fájl, 66 hozzáadás és 3 törlés
  1. 32 0
      envitem/func.go
  2. 34 3
      envitem/func_test.go

+ 32 - 0
envitem/func.go

@@ -466,6 +466,38 @@ func (e *EnvItem) WaitValue(v string, op int, interval time.Duration, retry int)
 	return c
 }
 
+// WaitNotValue 等待点位的值, 变为非指定值
+// vs: 非等待的值
+// interval: 轮询间隔
+// retry: 最多尝试次数 0: 表示不限制
+func (e *EnvItem) WaitNotValue(vs []string, interval time.Duration, retry int) <-chan string {
+	c := make(chan string)
+	m := make(map[string]struct{}, len(vs))
+	for _, v := range vs {
+		m[v] = struct{}{}
+	}
+	go func() {
+		t := 0
+		for {
+			val, _, err := e.getCurrentValue()
+			if _, ok := m[val]; err == nil && !ok {
+				c <- val
+			}
+
+			if retry > 0 {
+				t += 1
+				if t >= retry {
+					c <- ""
+				}
+			}
+
+			time.Sleep(interval)
+		}
+	}()
+
+	return c
+}
+
 func (e *EnvItem) ClearAdjust() {
 	if adjustValue == false {
 		return

+ 34 - 3
envitem/func_test.go

@@ -9,14 +9,26 @@ import (
 )
 
 func TestEnvItem_GetCurrentData(t *testing.T) {
-	SetOptions(Options{GtServerIp: "120.55.44.4:8900"})
+	SetOptions(Options{GtServerIp: "120.55.44.4:8900", PlcItemSecret: "237c92d2-8795-1094-11ef-00e2e48fce4a"})
 	e := EnvItem{
 		ProjectId: 92,
-		Item:      "C.M.UF1_DB@press_PV",
+		Item:      "C5.M5.RO1_SJSCXS",
 	}
 
-	v, ht, err := e.getCurrentValue()
+	gk := EnvItem{
+		ProjectId: 92,
+		Item:      "C5.M5.RO1_SJJSKG",
+	}
+	gk.SetValue("1", "0")
+
+	v, ht, err := gk.getCurrentValue()
+	t.Log(v, ht, err)
+	//
+	//t.Log(e.SetValue("0", "1"))
 
+	//b := <-e.WaitValue("0", 0, 3*time.Second, 0)
+	//t.Log(b)
+	v, ht, err = e.getCurrentValue()
 	t.Log(v, ht, err)
 
 }
@@ -172,3 +184,22 @@ func ToString(data interface{}) string {
 	bs, _ := json.Marshal(data)
 	return string(bs)
 }
+
+func TestEnvItem_WaitNotValue(t *testing.T) {
+	SetOptions(Options{GtServerIp: "47.96.12.136:8788", PlcItemSecret: "237c92d2-8795-1094-11ef-00e2e48fce4a"})
+	e := &EnvItem{
+		ProjectId: 92,
+		Item:      "C.M.RO1_DB@control_word",
+	}
+
+	t.Log(e.GetItemInt64Val())
+
+	err := e.SetValue(fmt.Sprintf("%d", e.Value), "72")
+	if err != nil {
+		t.Log(err)
+	} else {
+		c := e.WaitNotValue([]string{"24"}, 3*time.Second, 20)
+
+		t.Log(<-c)
+	}
+}