计轴rssp 集成
This commit is contained in:
parent
fd12c74e6f
commit
be1d65eab2
|
@ -82,37 +82,33 @@ type InterlockConfig struct {
|
||||||
|
|
||||||
// RsspAxleConfig 计轴区段与联锁安全通信配置
|
// RsspAxleConfig 计轴区段与联锁安全通信配置
|
||||||
type RsspAxleConfig struct {
|
type RsspAxleConfig struct {
|
||||||
City string `json:"city" description:"所属城市"`
|
Open bool `json:"open" description:"是否开启"`
|
||||||
LineId string `json:"lineId" description:"所属线路"`
|
City string `json:"city" description:"所属城市"`
|
||||||
CentralizedStation string `json:"centralizedStation" description:"所属集中站"`
|
LineId string `json:"lineId" description:"所属线路"`
|
||||||
RsspCfgs []RsspConfig `json:"rsspCfgs" description:"主备安全通道配置"`
|
CentralizedStation string `json:"centralizedStation" description:"所属集中站"`
|
||||||
SendingPeriod uint32 `json:"sendingPeriod" description:"发送周期值"` //接收方每个安全通信会话对应的发送周期值,单位ms
|
RsspCfg RsspConfig `json:"rsspCfg" description:"安全通道配置"`
|
||||||
SsrRsspTimeout uint32 `json:"ssrRsspTimeout" description:"等待SSR回应的定时器超时值"` //等待SSR回应的定时器超时值,为RsspTimer时间,1=SendingPeriod
|
|
||||||
Mtv uint32 `json:"mtv" description:"最大时序偏差"` //每个安全通信会话可容忍的最大时序偏差,即当前接收的RSD的序列号与上一次RSD的序列号最大允许差值
|
|
||||||
Udl uint32 `json:"udl" description:"RSD应用数据长度配置值"` //每个安全通信会话RSD应用数据长度发送和接收的配置值(支持固定长度和可变长度);0-可变长度,大于0即固定长度
|
|
||||||
DeviceA bool `json:"deviceA" description:"true-A机;false-B机"` //true-A机;false-B机
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RsspConfig CI系统与计轴设备的安全通信协议配置参数
|
// RsspConfig CI系统与计轴设备的安全通信协议配置参数
|
||||||
// 计轴设备(管理一个集中站的所有计轴器)配置
|
// 计轴设备(管理一个集中站的所有计轴器)配置
|
||||||
type RsspConfig struct {
|
type RsspConfig struct {
|
||||||
SrcAddr uint16 `json:"srcAddr" description:"16位源地址,本地地址"` //16位源地址,本地地址
|
SrcAddr uint16 `json:"srcAddr" description:"16位源地址,本地地址"` //16位源地址,本地地址
|
||||||
DstAddr uint16 `json:"dstAddr" description:"16位目的地址,远程地址"` //16位目的地址,远程地址
|
DstAddr uint16 `json:"dstAddr" description:"16位目的地址,远程地址"` //16位目的地址,远程地址
|
||||||
DataVer1 uint32 `json:"dataVer1" description:"通道1数据版本"` //通道1数据版本
|
DataVer1 uint32 `json:"dataVer1" description:"通道1数据版本"` //通道1数据版本
|
||||||
DataVer2 uint32 `json:"dataVer2" description:"通道2数据版本"` //通道2数据版本
|
DataVer2 uint32 `json:"dataVer2" description:"通道2数据版本"` //通道2数据版本
|
||||||
SID1 uint32 `json:"sID1" description:"通道1源标识"` //通道1源标识
|
SID1 uint32 `json:"sID1" description:"通道1源标识"` //通道1源标识
|
||||||
SID2 uint32 `json:"sID2" description:"通道2源标识"` //通道2源标识
|
SID2 uint32 `json:"sID2" description:"通道2源标识"` //通道2源标识
|
||||||
SINIT1 uint32 `json:"sINIT1" description:"通道1序列初始"` //通道1序列初始
|
SINIT1 uint32 `json:"sINIT1" description:"通道1序列初始"` //通道1序列初始
|
||||||
SINIT2 uint32 `json:"sINIT2" description:"通道2序列初始"` //通道2序列初始
|
SINIT2 uint32 `json:"sINIT2" description:"通道2序列初始"` //通道2序列初始
|
||||||
SendingPeriod uint32 //接收方每个安全通信会话对应的发送周期值,单位ms
|
SendingPeriod uint32 `json:"sendingPeriod" description:"发送周期值"` //接收方每个安全通信会话对应的发送周期值,单位ms
|
||||||
SsrRsspTimeout uint32 //等待SSR回应的定时器超时值,为RsspTimer时间,1=SendingPeriod
|
SsrRsspTimeout uint32 `json:"ssrRsspTimeout" description:"等待SSR回应的定时器超时值"` //等待SSR回应的定时器超时值,为RsspTimer时间,1=SendingPeriod
|
||||||
Mtv uint32 //每个安全通信会话可容忍的最大时序偏差,即当前接收的RSD的序列号与上一次RSD的序列号最大允许差值
|
Mtv uint32 `json:"mtv" description:"最大时序偏差"` //每个安全通信会话可容忍的最大时序偏差,即当前接收的RSD的序列号与上一次RSD的序列号最大允许差值
|
||||||
Udl uint32 //每个安全通信会话RSD应用数据长度发送和接收的配置值(支持固定长度和可变长度);0-可变长度,大于0即固定长度
|
Udl uint32 `json:"udl" description:"RSD应用数据长度配置值"` //每个安全通信会话RSD应用数据长度发送和接收的配置值(支持固定长度和可变长度);0-可变长度,大于0即固定长度
|
||||||
DeviceA bool //true-A机;false-B机
|
DeviceA bool `json:"deviceA" description:"true-A机;false-B机"` //true-A机;false-B机
|
||||||
PicType byte `json:"picType" description:"协议交互类别"` //协议交互类别,message.PicType
|
PicType byte `json:"picType" description:"协议交互类别"` //协议交互类别,message.PicType
|
||||||
RemoteIp string `json:"remoteIp" description:"远程服务器ip"` //远程服务器ip
|
RemoteIp string `json:"remoteIp" description:"远程服务器ip"` //远程服务器ip
|
||||||
RemoteUdpPort int `json:"remoteUdpPort" description:"远程服务器端口"` //远程服务器端口
|
RemoteUdpPort int `json:"remoteUdpPort" description:"远程服务器端口"` //远程服务器端口
|
||||||
LocalUdpPort int `json:"localUdpPort" description:"本地服务器端口"` //本地服务器端口
|
LocalUdpPort int `json:"localUdpPort" description:"本地服务器端口"` //本地服务器端口
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckAddress 检测目标源地址目的地址是否在配置中
|
// CheckAddress 检测目标源地址目的地址是否在配置中
|
||||||
|
|
|
@ -29,9 +29,7 @@ type rsspAxle struct {
|
||||||
//接收方每个安全通信会话对应的发送周期值,单位ms
|
//接收方每个安全通信会话对应的发送周期值,单位ms
|
||||||
sendingPeriod uint32
|
sendingPeriod uint32
|
||||||
//主安全通道
|
//主安全通道
|
||||||
masterRssp *RsspChannel
|
rsspChannel *RsspChannel
|
||||||
//备安全通道
|
|
||||||
slaveRssp *RsspChannel
|
|
||||||
//收到应用层消息回调
|
//收到应用层消息回调
|
||||||
messageManager AxleMessageManager
|
messageManager AxleMessageManager
|
||||||
//发送区段状态任务
|
//发送区段状态任务
|
||||||
|
@ -44,34 +42,10 @@ func InitRsspAxle(cfg *config.RsspAxleConfig) RsspAxle {
|
||||||
ra.city = cfg.City
|
ra.city = cfg.City
|
||||||
ra.lineId = cfg.LineId
|
ra.lineId = cfg.LineId
|
||||||
ra.centralizedStation = cfg.CentralizedStation
|
ra.centralizedStation = cfg.CentralizedStation
|
||||||
ra.sendingPeriod = cfg.SendingPeriod
|
ra.sendingPeriod = cfg.RsspCfg.SendingPeriod
|
||||||
//
|
//
|
||||||
cfgLen := len(cfg.RsspCfgs)
|
mrc := &RsspChannel{}
|
||||||
var masterConfig, slaveConfig *config.RsspConfig
|
ra.rsspChannel = mrc.Init(&cfg.RsspCfg)
|
||||||
if cfgLen >= 1 {
|
|
||||||
masterConfig = &cfg.RsspCfgs[0]
|
|
||||||
masterConfig.SendingPeriod = cfg.SendingPeriod
|
|
||||||
masterConfig.SsrRsspTimeout = cfg.SsrRsspTimeout
|
|
||||||
masterConfig.Mtv = cfg.Mtv
|
|
||||||
masterConfig.Udl = cfg.Udl
|
|
||||||
masterConfig.DeviceA = cfg.DeviceA
|
|
||||||
}
|
|
||||||
if cfgLen >= 2 {
|
|
||||||
slaveConfig = &cfg.RsspCfgs[1]
|
|
||||||
slaveConfig.SendingPeriod = cfg.SendingPeriod
|
|
||||||
slaveConfig.SsrRsspTimeout = cfg.SsrRsspTimeout
|
|
||||||
slaveConfig.Mtv = cfg.Mtv
|
|
||||||
slaveConfig.Udl = cfg.Udl
|
|
||||||
slaveConfig.DeviceA = cfg.DeviceA
|
|
||||||
}
|
|
||||||
if masterConfig != nil {
|
|
||||||
mrc := &RsspChannel{}
|
|
||||||
ra.masterRssp = mrc.Init(masterConfig)
|
|
||||||
}
|
|
||||||
if slaveConfig != nil {
|
|
||||||
src := &RsspChannel{}
|
|
||||||
ra.slaveRssp = src.Init(slaveConfig)
|
|
||||||
}
|
|
||||||
//
|
//
|
||||||
return ra
|
return ra
|
||||||
}
|
}
|
||||||
|
@ -85,13 +59,9 @@ func (s *rsspAxle) rcvCmdMsg(data []byte) {
|
||||||
func (s *rsspAxle) Start(amm AxleMessageManager) error {
|
func (s *rsspAxle) Start(amm AxleMessageManager) error {
|
||||||
s.messageManager = amm
|
s.messageManager = amm
|
||||||
//设置安全通道层
|
//设置安全通道层
|
||||||
if s.masterRssp != nil {
|
if s.rsspChannel != nil {
|
||||||
s.masterRssp.handleUserData = s.rcvCmdMsg
|
s.rsspChannel.handleUserData = s.rcvCmdMsg
|
||||||
s.masterRssp.Start()
|
s.rsspChannel.Start()
|
||||||
}
|
|
||||||
if s.slaveRssp != nil {
|
|
||||||
s.slaveRssp.handleUserData = s.rcvCmdMsg
|
|
||||||
s.slaveRssp.Start()
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
sendContext, sendCancel := context.WithCancel(context.Background())
|
sendContext, sendCancel := context.WithCancel(context.Background())
|
||||||
|
@ -101,11 +71,8 @@ func (s *rsspAxle) Start(amm AxleMessageManager) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (s *rsspAxle) Stop() {
|
func (s *rsspAxle) Stop() {
|
||||||
if s.masterRssp != nil {
|
if s.rsspChannel != nil {
|
||||||
s.masterRssp.Stop()
|
s.rsspChannel.Stop()
|
||||||
}
|
|
||||||
if s.slaveRssp != nil {
|
|
||||||
s.slaveRssp.Stop()
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if s.cancelSendStatus != nil {
|
if s.cancelSendStatus != nil {
|
||||||
|
@ -153,14 +120,8 @@ func (s *rsspAxle) doTaskSendStatus(sendContext context.Context) {
|
||||||
// 发送计轴区段状态给联锁
|
// 发送计轴区段状态给联锁
|
||||||
func (s *rsspAxle) sendStatusMsg(msg *message.SectionStatusMsgPack) {
|
func (s *rsspAxle) sendStatusMsg(msg *message.SectionStatusMsgPack) {
|
||||||
data := msg.Encode()
|
data := msg.Encode()
|
||||||
//向备通道发送
|
|
||||||
if s.slaveRssp != nil {
|
|
||||||
data_s := make([]byte, len(data))
|
|
||||||
copy(data_s, data)
|
|
||||||
s.slaveRssp.sendUserData(data_s)
|
|
||||||
}
|
|
||||||
//向主通道发送
|
//向主通道发送
|
||||||
if s.masterRssp != nil {
|
if s.rsspChannel != nil {
|
||||||
s.masterRssp.sendUserData(data)
|
s.rsspChannel.sendUserData(data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
package axle_device
|
package axle_device
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"joylink.club/bj-rtsts-server/config"
|
"joylink.club/bj-rtsts-server/config"
|
||||||
"joylink.club/bj-rtsts-server/third_party/message"
|
"joylink.club/bj-rtsts-server/third_party/message"
|
||||||
"log/slog"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
//联锁集中站计轴与联锁通信管理
|
//联锁集中站计轴与联锁通信管理
|
||||||
|
@ -20,10 +18,8 @@ type AxleMessageManager interface {
|
||||||
func StartLineAllRsspAxleServices(ram AxleMessageManager) {
|
func StartLineAllRsspAxleServices(ram AxleMessageManager) {
|
||||||
cfgs := ram.GetLineAllRsspAxleCfgs()
|
cfgs := ram.GetLineAllRsspAxleCfgs()
|
||||||
for _, cfg := range cfgs {
|
for _, cfg := range cfgs {
|
||||||
if len(cfg.RsspCfgs) > 0 {
|
if cfg.Open {
|
||||||
InitRsspAxle(&cfg).Start(ram)
|
InitRsspAxle(&cfg).Start(ram)
|
||||||
} else {
|
|
||||||
slog.Debug(fmt.Sprintf(""))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue