64 lines
1.3 KiB
Go
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]
|
|
}
|