计轴rssp 集成

This commit is contained in:
xzb 2023-11-09 17:38:17 +08:00
parent fd12c74e6f
commit be1d65eab2
3 changed files with 34 additions and 81 deletions

View File

@ -82,15 +82,11 @@ type InterlockConfig struct {
// RsspAxleConfig 计轴区段与联锁安全通信配置 // RsspAxleConfig 计轴区段与联锁安全通信配置
type RsspAxleConfig struct { type RsspAxleConfig struct {
Open bool `json:"open" description:"是否开启"`
City string `json:"city" description:"所属城市"` City string `json:"city" description:"所属城市"`
LineId string `json:"lineId" description:"所属线路"` LineId string `json:"lineId" description:"所属线路"`
CentralizedStation string `json:"centralizedStation" description:"所属集中站"` CentralizedStation string `json:"centralizedStation" description:"所属集中站"`
RsspCfgs []RsspConfig `json:"rsspCfgs" description:"主备安全通道配置"` RsspCfg RsspConfig `json:"rsspCfg" description:"安全通道配置"`
SendingPeriod uint32 `json:"sendingPeriod" description:"发送周期值"` //接收方每个安全通信会话对应的发送周期值,单位ms
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系统与计轴设备的安全通信协议配置参数
@ -104,11 +100,11 @@ type RsspConfig struct {
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:"远程服务器端口"` //远程服务器端口

View File

@ -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)
var masterConfig, slaveConfig *config.RsspConfig
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{} mrc := &RsspChannel{}
ra.masterRssp = mrc.Init(masterConfig) ra.rsspChannel = mrc.Init(&cfg.RsspCfg)
}
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)
} }
} }

View File

@ -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(""))
} }
} }
} }