|
@@ -9,6 +9,7 @@ import (
|
|
|
"cicv-data-closedloop/common/util"
|
|
|
"cicv-data-closedloop/pjisuv_msgs"
|
|
|
"cicv-data-closedloop/pjisuv_param"
|
|
|
+ "cicv-data-closedloop/pjisuv_ticker"
|
|
|
"github.com/bluenviron/goroslib/v2"
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msgs/geometry_msgs"
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msgs/nav_msgs"
|
|
@@ -22,6 +23,8 @@ import (
|
|
|
|
|
|
// 所有共享变量
|
|
|
var (
|
|
|
+ tickChan = make(chan string)
|
|
|
+
|
|
|
pjisuvParam = pjisuv_param.PjisuvParam{
|
|
|
ObjDicOfTpperception: make(map[uint32][]float32),
|
|
|
ObjTypeDicOfTpperception: make(map[uint32]uint8),
|
|
@@ -59,18 +62,23 @@ func ProduceWindow() {
|
|
|
subscribersMutexes := make([]sync.Mutex, len(commonConfig.SubscribeTopics))
|
|
|
for i, topic := range commonConfig.SubscribeTopics {
|
|
|
for {
|
|
|
- // 增加了可扩展性
|
|
|
- if topic == masterConfig.TopicOfCicvExtend {
|
|
|
+ // 定时器,区别于订阅者
|
|
|
+ if topic == pjisuv_ticker.TickerTopic {
|
|
|
+ // 1 把所有触发器函数执行一遍,触发器内部创建额外的定时任务goroutine
|
|
|
+ for _, f := range masterConfig.RuleOfCicvTicker {
|
|
|
+ f(shareVars)
|
|
|
+ }
|
|
|
+ // 2 创建goroutine接收定时任务触发器返回的Label和Time,执行触发逻辑
|
|
|
go func() {
|
|
|
for {
|
|
|
- time.Sleep(time.Duration(3500) * time.Millisecond)
|
|
|
- for _, f := range masterConfig.RuleOfCicvExtend {
|
|
|
- label := f(pjisuvParam)
|
|
|
- if label != "" {
|
|
|
- saveTimeWindow(label, util.GetNowTimeCustom(), commonEntity.GetLastTimeWindow())
|
|
|
- subscribersTimes[i] = time.Now()
|
|
|
- break
|
|
|
- }
|
|
|
+ time.Sleep(time.Duration(1)) // 降低循环频率
|
|
|
+ select {
|
|
|
+ case tickInfo := <-pjisuv_ticker.TickerChan:
|
|
|
+ faultLabel := tickInfo.FaultLabel
|
|
|
+ faultHappenTime := tickInfo.FaultHappenTime
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ default:
|
|
|
}
|
|
|
}
|
|
|
}()
|