diff --git a/config/config.go b/config/config.go index 1b509b0..1a1d081 100644 --- a/config/config.go +++ b/config/config.go @@ -82,32 +82,37 @@ type InterlockConfig struct { // RsspAxleConfig 计轴区段与联锁安全通信配置 type RsspAxleConfig struct { - City string `json:"City" description:"所属城市"` - LineId string `json:"LineId" description:"所属线路"` + City string `json:"city" description:"所属城市"` + LineId string `json:"lineId" description:"所属线路"` CentralizedStation string `json:"centralizedStation" description:"所属集中站"` RsspCfgs []RsspConfig `json:"rsspCfgs" 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系统与计轴设备的安全通信协议配置参数 // 计轴设备(管理一个集中站的所有计轴器)配置 type RsspConfig struct { - SrcAddr uint16 `json:"srcAddr" description:"16位源地址,本地地址"` //16位源地址,本地地址 - DstAddr uint16 `json:"dstAddr" description:"16位目的地址,远程地址"` //16位目的地址,远程地址 - DataVer1 uint32 `json:"dataVer1" description:"通道1数据版本"` //通道1数据版本 - DataVer2 uint32 `json:"dataVer2" description:"通道2数据版本"` //通道2数据版本 - SID1 uint32 `json:"sID1" description:"通道1源标识"` //通道1源标识 - SID2 uint32 `json:"sID2" description:"通道2源标识"` //通道2源标识 - SINIT1 uint32 `json:"sINIT1" description:"通道1序列初始"` //通道1序列初始 - SINIT2 uint32 `json:"sINIT2" description:"通道2序列初始"` //通道2序列初始 - 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即固定长度 - PicType byte `json:"picType" description:"协议交互类别"` //协议交互类别,message.PicType - DeviceA bool `json:"deviceA" description:"true-A机;false-B机"` //true-A机;false-B机 - RemoteIp string `json:"remoteIp" description:"远程服务器ip"` //远程服务器ip - RemoteUdpPort int `json:"remoteUdpPort" description:"远程服务器端口"` //远程服务器端口 - LocalUdpPort int `json:"localUdpPort" description:"本地服务器端口"` //本地服务器端口 + SrcAddr uint16 `json:"srcAddr" description:"16位源地址,本地地址"` //16位源地址,本地地址 + DstAddr uint16 `json:"dstAddr" description:"16位目的地址,远程地址"` //16位目的地址,远程地址 + DataVer1 uint32 `json:"dataVer1" description:"通道1数据版本"` //通道1数据版本 + DataVer2 uint32 `json:"dataVer2" description:"通道2数据版本"` //通道2数据版本 + SID1 uint32 `json:"sID1" description:"通道1源标识"` //通道1源标识 + SID2 uint32 `json:"sID2" description:"通道2源标识"` //通道2源标识 + SINIT1 uint32 `json:"sINIT1" description:"通道1序列初始"` //通道1序列初始 + SINIT2 uint32 `json:"sINIT2" description:"通道2序列初始"` //通道2序列初始 + SendingPeriod uint32 //接收方每个安全通信会话对应的发送周期值,单位ms + SsrRsspTimeout uint32 //等待SSR回应的定时器超时值,为RsspTimer时间,1=SendingPeriod + Mtv uint32 //每个安全通信会话可容忍的最大时序偏差,即当前接收的RSD的序列号与上一次RSD的序列号最大允许差值 + Udl uint32 //每个安全通信会话RSD应用数据长度发送和接收的配置值(支持固定长度和可变长度);0-可变长度,大于0即固定长度 + DeviceA bool //true-A机;false-B机 + PicType byte `json:"picType" description:"协议交互类别"` //协议交互类别,message.PicType + RemoteIp string `json:"remoteIp" description:"远程服务器ip"` //远程服务器ip + RemoteUdpPort int `json:"remoteUdpPort" description:"远程服务器端口"` //远程服务器端口 + LocalUdpPort int `json:"localUdpPort" description:"本地服务器端口"` //本地服务器端口 } // CheckAddress 检测目标源地址目的地址是否在配置中 diff --git a/third_party/axle_device/rssp_axle.go b/third_party/axle_device/rssp_axle.go index 43fa3dd..0617041 100644 --- a/third_party/axle_device/rssp_axle.go +++ b/third_party/axle_device/rssp_axle.go @@ -26,6 +26,8 @@ type rsspAxle struct { lineId string //所属集中站 centralizedStation string + //接收方每个安全通信会话对应的发送周期值,单位ms + sendingPeriod uint32 //主安全通道 masterRssp *RsspChannel //备安全通道 @@ -42,14 +44,25 @@ func InitRsspAxle(cfg *config.RsspAxleConfig) RsspAxle { ra.city = cfg.City ra.lineId = cfg.LineId ra.centralizedStation = cfg.CentralizedStation + ra.sendingPeriod = cfg.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{} @@ -133,7 +146,7 @@ func (s *rsspAxle) doTaskSendStatus(sendContext context.Context) { slog.Debug(e.Error()) } //todo - time.Sleep(300 * time.Millisecond) + time.Sleep(time.Duration(s.sendingPeriod) * time.Millisecond) } }