rts-sim-testing-service/config/config.go

245 lines
12 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package config
import (
"flag"
"fmt"
"github.com/spf13/viper"
"joylink.club/iot/dto"
"log/slog"
)
const (
SystemName = "rtsts"
)
type AppConfig struct {
// Env string
Server server
Datasource datasource
Logging log
Messaging messaging
// Dynamics DynamicsConfig
// Vobc VobcConfig
// Interlock InterlockConfig
}
type server struct {
Port int
}
type datasource struct {
Dsn string
}
type log struct {
Level string // 日志打印级别 debug info warn error
Format string // 输出日志格式 logfmt, json
Path string // 输出日志文件路径
FileName string // 输出日志文件名称
FileMaxSize int // 【日志分割】单个日志文件最多存储量 单位(mb)
FileMaxBackups int // 【日志分割】日志备份文件最多数量
MaxAge int // 日志保留时间,单位: 天 (day)
Compress bool // 是否压缩日志
Stdout bool // 是否输出到控制台
}
type messaging struct {
Mqtt mqtt
}
// MQTT客户端配置
type mqtt struct {
Address string
Username string
Password string
}
// type centrifugo struct {
// TokenSecret string
// ApiKey string
// ApiEndpoint string
// Address string
// }
// 第三方配置结构
type ThirdPartyConfig struct {
Id int32 `json:"id"`
Dynamics DynamicsConfig `json:"dynamics" description:"动力学配置"`
Vobc VobcConfig `json:"vobc" description:"半实物配置"`
Interlocks []InterlockConfig `json:"interlock" description:"联锁配置"`
RsspAxleConfig RsspAxleConfig `json:"rsspAxleCfgs" description:"计轴通信配置"`
//ElectricMachinery ElectricMachineryConfig `json:"electricMachinery" description:"电机配置"`
ElectricMachinerys []ElectricMachineryConfig `json:"electricMachinerys" description:"电机配置"`
BtmCanet BtmCanetConfig `json:"btmCanet" description:"BTM关联的网关设备CANET配置"`
CidcModbus []CidcModbusConfig `json:"cidcModbus" description:"联锁驱采Modbus接口配置"`
Radar RadarConfig `json:"radar" description:"车载雷达相关配置"`
Acc AccConfig `json:"acc" description:"车载加速计"`
//PcSimConfig VehiclePCSimConfig `json:"pcSimConfig" description:"车载pc仿真平台通信"`
PcSimConfigs []VehiclePCSimConfig `json:"pcSimConfigs" description:"车载pc仿真平台通信"`
BtmVobc BtmVobcConfig `json:"btmVobc" description:"Btm Vobc 11号线相关配置"`
}
type RadarConfig struct {
Open bool `json:"open" description:"是否开启"`
RemoteIp string `json:"remoteIp" description:"远端接收列车信息ip"`
RemotePort uint32 `json:"remotePort" description:"远端接收列车信息端口"`
//LocalPort uint32 `json:"localPort" description:"本地端口"`
}
type AccConfig struct {
Open bool `json:"open" description:"是否开启"`
RemoteIp string `json:"remoteIp" description:"远端接收列车信息ip"`
RemotePort uint32 `json:"remotePort" description:"远端接收列车信息端口"`
}
type CidcModbusConfig struct {
Open bool `json:"open" description:"是否开启"`
Url string `json:"url" description:"接口URL【格式tcp://{ip}:{port}】" default:"tcp://127.0.0.1:502"` // 连接地址
UnitId uint32 `json:"unitId" description:"从机unitId"` // 从机unitId
Endianness dto.Modbus_Endianness `json:"endianness" description:"字节序【大端/小端】"` // 16位寄存器字节序
Interval uint32 `json:"interval" description:"定时请求间隔" default:"1000"` // 循环请求间隔(毫秒),0表示不主动请求,只当有变化时请求
Timeout uint32 `json:"timeout" description:"请求超时时间" default:"1000"` // 超时时间(毫秒)
Ecs string `json:"ecs" description:"联锁集中站"` // 所属集中站
Mapping []ModbusDcMapping `json:"mapping" description:"modbus数据与驱动/采集码表映射配置"`
}
type ModbusDcMapping struct {
Function dto.Modbus_Function `json:"function" description:"Modbus功能"` // 功能
Addr uint32 `json:"addr" description:"Modbus功能起始地址【位类型的功能为起始位地址,寄存器类型的功能为起始字(2个字节)地址】"` // 起始地址,当功能为位功能时,表示起始位地址,当功能为寄存器功能时,表示起始字(2个字节)地址
Quantity uint32 `json:"quantity" description:"Modbus读取数量【位类型的为位数,寄存器类型的为字(2个字节)数】"` // 数量,当功能为位功能时,表示位数,当功能为寄存器功能时,表示字(2个字节)数
// WriteStrategy proto.Modbus_WriteStrategy `json:"writeStrategy" description:"写入策略"` // 当功能为写入类功能时(不包含读写类功能),写策略
Type dto.DataType `json:"type" description:"映射的数据类型"` // 对应数据类型
Start uint32 `json:"start" description:"映射数据的起始地址【位类型的为起始位地址,寄存器类型的为起始字节地址】"` // 映射起始地址
}
type DynamicsConfig struct {
Ip string `json:"ip" description:"IP配置"`
UdpLocalPort int `json:"udpLocalPort" description:"本机监听接收端口"`
UdpRemotePort int `json:"udpRemotePort" description:"远端接收道岔信息端口"`
UdpRemoteTrainPort int `json:"udpRemoteTrainPort" description:"远端接收列车信息端口"`
HttpPort int `json:"httpPort" description:"http服务端口"`
Open bool `json:"open" description:"是否开启"`
}
type VobcConfig struct {
Ip string `json:"ip" description:"IP配置"`
LocalPort int `json:"localPort" description:"本机监听接收端口"`
RemotePort int `json:"remotePort" description:"远端接收列车信息端口"`
Open bool `json:"open" description:"是否开启"`
}
type InterlockConfig struct {
Open bool `json:"open" description:"是否开启"`
Ip string `json:"ip" description:"IP配置"`
LocalPort int `json:"localPort" description:"本机监听接收端口"`
RemotePort int `json:"remotePort" description:"远端接收采集信息端口"`
Code string `json:"code" description:"所属集中站"`
Line string `json:"line" description:"联锁通信协议所属线路"`
Period int `json:"period" description:"采集任务执行周期ms"`
}
type ElectricMachineryConfig struct {
Ip string `json:"ip" description:"IP配置"`
RemotePort int `json:"remotePort" description:"远端接收信息端口"`
Open bool `json:"open" description:"是否开启"`
EndPointA bool `json:"endPointA" description:"一号电机"`
}
// BtmVobcConfig 11 号线 BTM vobc 网关设备配置
type BtmVobcConfig struct {
LocalUdpIp string `json:"LocalUdpIp" description:"本机监听接收UDP ip 配置"`
LocalUdpPort int `json:"localUdpPort" description:"本机监听接收UDP端口"`
RemoteIp string `json:"remoteIp" description:"btm串口设备IP配置"`
RemoteUdpPort int `json:"remoteUdpPort" description:"btm串口设备UDP端口"`
Open bool `json:"open" description:"是否开启"`
}
// BtmCanetConfig BTM CANET网关设备配置
type BtmCanetConfig struct {
LocalUdpPort int `json:"localUdpPort" description:"本机监听接收UDP端口"`
RemoteIp string `json:"remoteIp" description:"CANET设备IP配置"`
RemoteUdpPort int `json:"remoteUdpPort" description:"CANET设备UDP端口"`
Open bool `json:"open" description:"是否开启"`
}
type VehiclePCSimConfig2 struct {
TrainEnds bool `json:"trainEnds" description:"列车端点A"`
Open bool `json:"open" description:"是否开启"`
PcSimIp string `json:"pcSimIp" description:"pc仿真平台通信ip"`
PcSimPort uint32 `json:"pcSimPort" description:"pc仿真平台通信端口"`
LocalTestingPort uint32 `json:"localTestingPort" description:"本地测试端口"`
}
type VehiclePCSimConfig struct {
Open bool `json:"open" description:"是否开启"`
//TrainEnds bool `json:"trainEnds" description:"列车端点A?"`
ConfigName string `json:"configName" description:"连接名称"`
OpenA bool `json:"openA" description:"是否开启A端"`
APcSimIp string `json:"apcSimIp" description:"pc仿真平台通信ip A端"`
APcSimPort uint32 `json:"apcSimPort" description:"pc仿真平台通信端口A端"`
OpenB bool `json:"openB" description:"是否开启B端"`
BPcSimIp string `json:"bpcSimIp" description:"pc仿真平台通信ip B端"`
BPcSimPort uint32 `json:"bpcSimPort" description:"pc仿真平台通信端口B端"`
//LocalTestingPort uint32 `json:"localTestingPort" description:"本地测试端口"`
}
// RsspAxleConfig Rssp计轴通信配置
type RsspAxleConfig struct {
Open bool `json:"open" description:"开启"`
StationCode string `json:"stationCode" description:"集中站编号"`
NetAConfig RsspNetConfig `json:"netAConfig" description:"A网配置"`
}
// RsspNetConfig 计轴通信配置
type RsspNetConfig struct {
RemoteIp string `json:"remoteIp" description:"远端IP"`
RemotePort int `json:"remotePort" description:"远端端口"`
LocalPort int `json:"localPort" description:"本地端口"`
RemoteAddr string `json:"sourceAddr" description:"联锁地址16进制2字节"`
LocalAddr string `json:"targetAddr" description:"计轴地址16进制2字节"`
RemoteSid1 string `json:"remoteSid1" description:"联锁SID_116进制4字节"`
RemoteSid2 string `json:"remoteSid2" description:"联锁SID_216进制4字节"`
LocalSid1 string `json:"localSid1" description:"计轴SID_116进制4字节"`
LocalSid2 string `json:"localSid2" description:"计轴SID_216进制4字节"`
RemoteSinit1 string `json:"remoteSinit1" description:"联锁SINIT_116进制4字节"`
RemoteSinit2 string `json:"remoteSinit2" description:"联锁SINIT_216进制4字节"`
LocalSinit1 string `json:"localSinit1" description:"计轴SINIT_116进制4字节"`
LocalSinit2 string `json:"localSinit2" description:"计轴SINIT_216进制4字节"`
RemoteDataVer1 string `json:"remoteDataVer1" description:"联锁DATAVER_116进制4字节"`
RemoteDataVer2 string `json:"remoteDataVer2" description:"联锁DATAVER_216进制4字节"`
LocalDataVer1 string `json:"localDataVer1" description:"计轴DATAVER_116进制4字节"`
LocalDataVer2 string `json:"localDataVer2" description:"计轴DATAVER_216进制4字节"`
MaxDeviation int `json:"maxDeviation" description:"可容忍的最大时序偏差"`
WaitSSRTimeout int `json:"waitSSRTimeout" description:"等待SSR回应的定时器超时值ms"`
Period int `json:"period" description:"RSD发送周期ms"`
}
///////////////////////////////////////////////////////////////////////////////////////
var Config AppConfig
// 获取配置文件名称,从运行flag参数config中获取若未提供使用默认'dev'
func getConfigName() string {
configName := ""
flag.StringVar(&configName, "config", "dev", "config name, eg: -config test")
flag.Parse()
if configName == "" {
configName = "dev"
}
slog.Info("读取配置文件", "配置文件名称", configName)
return configName
}
// 加载配置
func LoadConfig() {
cnf := viper.New()
cnf.SetConfigName(getConfigName())
cnf.SetConfigType("yml")
cnf.AddConfigPath("./config/")
cnf.AddConfigPath(".")
err := cnf.ReadInConfig()
if err != nil {
panic(fmt.Errorf("读取配置文件错误: %w", err))
}
err = cnf.Unmarshal(&Config)
if err != nil {
panic(fmt.Errorf("解析配置文件错误: %w", err))
}
slog.Info("成功加载配置", "config", Config)
}