联锁驱采添加所属集中站id字段和查询方法

This commit is contained in:
walker 2023-12-13 11:21:13 +08:00
parent f624ae5f08
commit 4a58792c65
4 changed files with 40 additions and 6 deletions

View File

@ -17,6 +17,7 @@ var (
// 联锁驱采数据表 // 联锁驱采数据表
type CiQcTable struct { type CiQcTable struct {
EcsUid string
// 驱动码表 // 驱动码表
QdBits []*proto.QdData QdBits []*proto.QdData
// 采集码表 // 采集码表
@ -25,6 +26,14 @@ type CiQcTable struct {
QdIndex map[string]int QdIndex map[string]int
} }
func NewCiQcTable(ecsUid string, qdbits []*proto.QdData, cjbits []*proto.CjData) *CiQcTable {
return &CiQcTable{
EcsUid: ecsUid,
QdBits: qdbits,
CjBits: cjbits,
}
}
func (qc *CiQcTable) BuildQcIndex() error { func (qc *CiQcTable) BuildQcIndex() error {
qc.QdIndex = make(map[string]int) qc.QdIndex = make(map[string]int)
for i, qd := range qc.QdBits { for i, qd := range qc.QdBits {
@ -50,10 +59,18 @@ type CiQcState struct {
} }
func NewCiQcState(qlen int, clen int) *CiQcState { func NewCiQcState(qlen int, clen int) *CiQcState {
qbl := qlen / 8
if qlen%8 != 0 {
qbl++
}
cbl := clen / 8
if clen%8 != 0 {
cbl++
}
return &CiQcState{ return &CiQcState{
component_proto.CiQcState{ component_proto.CiQcState{
Qbs: make([]byte, qlen), Qbs: make([]byte, qbl),
Cbs: make([]byte, clen), Cbs: make([]byte, cbl),
}, },
} }
} }

View File

@ -83,6 +83,17 @@ func (wd *WorldData) SetQdBit(uid string, v bool) error {
return fmt.Errorf("没有定义id=%s的继电器的驱动码表", uid) return fmt.Errorf("没有定义id=%s的继电器的驱动码表", uid)
} }
// 获取集中站id对应的联锁驱采实体
func (wd *WorldData) FindQcEntityByEcsId(ecsId string) *ecs.Entry {
for _, entry := range wd.CiQcEntities {
qc := CiQcTableType.Get(entry)
if qc.EcsUid == ecsId {
return entry
}
}
return nil
}
type QdBitParam struct { type QdBitParam struct {
Uid string Uid string
Val bool Val bool

View File

@ -29,10 +29,7 @@ func LoadCiQC(w ecs.World) error {
continue continue
} }
entry := newCiQC(w, data) entry := newCiQC(w, data)
qctable := &component.CiQcTable{ qctable := component.NewCiQcTable(csr.StationId, csr.QdList, csr.CjList)
QdBits: csr.QdList,
CjBits: csr.CjList,
}
err := qctable.BuildQcIndex() err := qctable.BuildQcIndex()
if err != nil { if err != nil {
return err return err

View File

@ -256,6 +256,15 @@ func (repo *Repository) FindPhysicalSection(id string) *PhysicalSection {
return repo.physicalSectionMap[id] return repo.physicalSectionMap[id]
} }
func (repo *Repository) FindStationByStationName(name string) *Station {
for _, s := range repo.StationList() {
if s.code == name {
return s
}
}
return nil
}
func (repo *Repository) FindPsd(id string) *Psd { func (repo *Repository) FindPsd(id string) *Psd {
return repo.psdMap[id] return repo.psdMap[id]
} }