Files
bj_power/bj_power_mes/internal/preload/signal.go
T

64 lines
1.3 KiB
Go

/*
* Copyright (c) 2025 Beijing Hardman Automation Equipment Co., LTD. All rights reserved.
*
* Project: adapter
* File: signal.go
* Last: 2025-01-11 11:22:28
* Author: wangcheng@bj-hardman.com
*/
package preload
import (
"context"
"log/slog"
"sync"
"bj_power_mes/ent"
"bjhardman.cn/bjhardman/goplc/s7"
)
var (
signals = make(map[string]MAddress)
signalsMu sync.RWMutex
)
func Init(entClient *ent.Client) {
slog.Info("start to preload signals")
ss, err := entClient.Signal.Query().All(context.Background())
if err != nil {
slog.Error("查询信号数据失败", "error", err.Error())
panic(err)
}
loaded := make(map[string]MAddress, len(ss))
validSignals := 0
for _, s := range ss {
addr, err := s7.ParseAddress(s.Address)
if err != nil {
slog.Error("解析PLC地址失败,跳过该信号", "signal", s.Name, "address", s.Address, "error", err.Error())
panic(err)
}
loaded[s.Name] = MAddress{
Name: s.Name,
Desc: s.Description,
Addr: *addr,
ReplyOffset: s.ReplyOffset,
}
validSignals++
}
signalsMu.Lock()
signals = loaded
signalsMu.Unlock()
slog.Info("preload signals successfully", "total", len(ss), "valid", validSignals)
}
func GetMAddress(name string) MAddress {
signalsMu.RLock()
defer signalsMu.RUnlock()
return signals[name]
}