/* * 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] }