60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
|
package component
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"joylink.club/ecs"
|
||
|
"joylink.club/rtsssimulation/component/component_proto"
|
||
|
"joylink.club/rtsssimulation/repository/model/proto"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
// 驱采表引用
|
||
|
CiQcTableType = ecs.NewComponentType[CiQcTable]()
|
||
|
// 联锁驱动、采集状态表
|
||
|
CiQcStateType = ecs.NewComponentType[CiQcState]()
|
||
|
)
|
||
|
|
||
|
// 联锁驱采数据表
|
||
|
type CiQcTable struct {
|
||
|
// 驱动码表
|
||
|
QdBits []*proto.QdData
|
||
|
// 采集码表
|
||
|
CjBits []*proto.CjData
|
||
|
// 驱动索引
|
||
|
QdIndex map[string]int
|
||
|
}
|
||
|
|
||
|
func (qc *CiQcTable) BuildQcIndex() error {
|
||
|
qc.QdIndex = make(map[string]int)
|
||
|
for i, qd := range qc.QdBits {
|
||
|
if len(qd.RefRelays) > 0 {
|
||
|
key := qd.RefRelays[0]
|
||
|
if _, ok := qc.QdIndex[key]; ok {
|
||
|
return fmt.Errorf("联锁驱动数据重复,驱动码表存在多个相同继电器: '%s'", key)
|
||
|
} else {
|
||
|
qc.QdIndex[key] = i
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (qc *CiQcTable) QueryQdIndex(uid string) (int, bool) {
|
||
|
idx, ok := qc.QdIndex[uid]
|
||
|
return idx, ok
|
||
|
}
|
||
|
|
||
|
type CiQcState struct {
|
||
|
component_proto.CiQcState
|
||
|
}
|
||
|
|
||
|
func NewCiQcState(qlen int, clen int) *CiQcState {
|
||
|
return &CiQcState{
|
||
|
component_proto.CiQcState{
|
||
|
Qbs: make([]byte, qlen),
|
||
|
Cbs: make([]byte, clen),
|
||
|
},
|
||
|
}
|
||
|
}
|