命名调整,文件名调整
This commit is contained in:
parent
374dc77a0e
commit
694ece6350
2
main.go
2
main.go
@ -17,7 +17,7 @@ func main() {
|
||||
AddSource: false,
|
||||
})))
|
||||
dc := model.NewDC(make([]byte, 2), make([]byte, 2))
|
||||
mds, err := service.NewModbusDcService(&proto.ModbusConfig{
|
||||
mds, err := service.NewModbusQcService(&proto.ModbusConfig{
|
||||
Url: "tcp://127.0.0.1:502",
|
||||
UnitId: 2,
|
||||
Timeout: 500,
|
||||
|
@ -13,15 +13,15 @@ import (
|
||||
sproto "joylink.club/iot/service/proto"
|
||||
)
|
||||
|
||||
// Modbus驱动采集服务
|
||||
type modbusDcService struct {
|
||||
// Modbus驱采服务
|
||||
type modbusQcService struct {
|
||||
config *sproto.ModbusConfig
|
||||
cli modbus.MasterClient
|
||||
dc model.DC
|
||||
qc model.QC
|
||||
cancel context.CancelFunc
|
||||
}
|
||||
|
||||
func NewModbusDcService(config *sproto.ModbusConfig, dc model.DC) (IotService, error) {
|
||||
func NewModbusQcService(config *sproto.ModbusConfig, dc model.QC) (IotService, error) {
|
||||
if err := checkConfig(config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -39,10 +39,10 @@ func NewModbusDcService(config *sproto.ModbusConfig, dc model.DC) (IotService, e
|
||||
cli.SetUnitId(uint8(config.UnitId))
|
||||
cli.SetEndianness(convertEndianness(config.Endianness))
|
||||
cli.Start()
|
||||
s := &modbusDcService{
|
||||
s := &modbusQcService{
|
||||
config: config,
|
||||
cli: cli,
|
||||
dc: dc,
|
||||
qc: dc,
|
||||
}
|
||||
s.initOnUpdateTask()
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
@ -51,7 +51,7 @@ func NewModbusDcService(config *sproto.ModbusConfig, dc model.DC) (IotService, e
|
||||
return s, nil
|
||||
}
|
||||
|
||||
func (m *modbusDcService) initOnUpdateTask() {
|
||||
func (m *modbusQcService) initOnUpdateTask() {
|
||||
mapping := m.config.Mapping
|
||||
for _, mdm := range mapping {
|
||||
if mdm.WriteStrategy == sproto.Modbus_OnUpdate && isWriteFunction(mdm.Function) {
|
||||
@ -59,7 +59,7 @@ func (m *modbusDcService) initOnUpdateTask() {
|
||||
if mdm.Type == sproto.DataType_CollectTable {
|
||||
et = model.DCE_Collect_Update
|
||||
}
|
||||
m.dc.On(et, func(d model.DC) {
|
||||
m.qc.On(et, func(d model.QC) {
|
||||
if !m.cli.IsConnected() {
|
||||
slog.Warn("Modbus驱动采集服务数据更新写入失败,modbus客户端未连接", "url", m.config.Url, "Function", mdm.Function)
|
||||
return
|
||||
@ -94,7 +94,7 @@ func isWriteFunction(modbus_Function sproto.Modbus_Function) bool {
|
||||
modbus_Function == sproto.Modbus_RWRegisters
|
||||
}
|
||||
|
||||
func (m *modbusDcService) run(ctx context.Context) {
|
||||
func (m *modbusQcService) run(ctx context.Context) {
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
@ -107,7 +107,7 @@ func (m *modbusDcService) run(ctx context.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *modbusDcService) mappingTaskExecute() {
|
||||
func (m *modbusQcService) mappingTaskExecute() {
|
||||
if m.cli.IsConnected() {
|
||||
for _, mdm := range m.config.Mapping {
|
||||
switch mdm.Function {
|
||||
@ -198,44 +198,44 @@ func (m *modbusDcService) mappingTaskExecute() {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *modbusDcService) GetDcBits(mdm *sproto.ModbusDcMapping) []bool {
|
||||
func (m *modbusQcService) GetDcBits(mdm *sproto.ModbusDcMapping) []bool {
|
||||
switch mdm.Type {
|
||||
case sproto.DataType_CollectTable: // 采集数据
|
||||
return m.dc.GetCollectBits(mdm.Start, mdm.Quantity)
|
||||
return m.qc.GetCollectBits(mdm.Start, mdm.Quantity)
|
||||
case sproto.DataType_DriveTable: // 驱动数据
|
||||
return m.dc.GetDriveBits(mdm.Start, mdm.Quantity)
|
||||
return m.qc.GetDriveBits(mdm.Start, mdm.Quantity)
|
||||
default:
|
||||
panic("未知数据类型")
|
||||
}
|
||||
}
|
||||
|
||||
func (m *modbusDcService) GetDcBytes(mdm *sproto.ModbusDcMapping) []byte {
|
||||
func (m *modbusQcService) GetDcBytes(mdm *sproto.ModbusDcMapping) []byte {
|
||||
switch mdm.Type {
|
||||
case sproto.DataType_CollectTable: // 采集数据
|
||||
return m.dc.GetCollectBytes(mdm.Start, mdm.Quantity*2)
|
||||
return m.qc.GetCollectBytes(mdm.Start, mdm.Quantity*2)
|
||||
case sproto.DataType_DriveTable: // 驱动数据
|
||||
return m.dc.GetDriveBytes(mdm.Start, mdm.Quantity*2)
|
||||
return m.qc.GetDriveBytes(mdm.Start, mdm.Quantity*2)
|
||||
default:
|
||||
panic("未知数据类型")
|
||||
}
|
||||
}
|
||||
|
||||
func (m *modbusDcService) updateDcByBits(mdm *sproto.ModbusDcMapping, bits []bool) error {
|
||||
func (m *modbusQcService) updateDcByBits(mdm *sproto.ModbusDcMapping, bits []bool) error {
|
||||
switch mdm.Type {
|
||||
case sproto.DataType_CollectTable: // 采集数据
|
||||
return m.dc.UpdateCollectByBits(mdm.Start, bits)
|
||||
return m.qc.UpdateCollectByBits(mdm.Start, bits)
|
||||
case sproto.DataType_DriveTable: // 驱动数据
|
||||
return m.dc.UpdateDriveByBits(mdm.Start, bits)
|
||||
return m.qc.UpdateDriveByBits(mdm.Start, bits)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *modbusDcService) updateDcByBytes(mdm *sproto.ModbusDcMapping, bytes []byte) error {
|
||||
func (m *modbusQcService) updateDcByBytes(mdm *sproto.ModbusDcMapping, bytes []byte) error {
|
||||
switch mdm.Type {
|
||||
case sproto.DataType_CollectTable: // 采集数据
|
||||
return m.dc.UpdateCollectByBytes(mdm.Start, bytes)
|
||||
return m.qc.UpdateCollectByBytes(mdm.Start, bytes)
|
||||
case sproto.DataType_DriveTable: // 驱动数据
|
||||
return m.dc.UpdateDriveByBytes(mdm.Start, bytes)
|
||||
return m.qc.UpdateDriveByBytes(mdm.Start, bytes)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -259,12 +259,12 @@ func checkConfig(config *sproto.ModbusConfig) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *modbusDcService) Start() error {
|
||||
func (m *modbusQcService) Start() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *modbusDcService) Stop() error {
|
||||
func (m *modbusQcService) Stop() error {
|
||||
m.cancel()
|
||||
modbus.DeleteClient(m.config.Url)
|
||||
return nil
|
@ -15,7 +15,7 @@ const (
|
||||
)
|
||||
|
||||
// 驱动采集数据
|
||||
type DC interface {
|
||||
type QC interface {
|
||||
// 更新驱动数据,位数组
|
||||
UpdateDriveByBits(start uint32, bits []bool) error
|
||||
// 更新驱动数据,字节数组
|
||||
@ -47,12 +47,12 @@ type DC interface {
|
||||
// 发布事件
|
||||
Emit(event DCEvent)
|
||||
// 订阅事件
|
||||
On(event DCEvent, callback func(dc DC))
|
||||
On(event DCEvent, callback func(dc QC))
|
||||
// 取消订阅
|
||||
Off(event DCEvent, callback func(dc DC))
|
||||
Off(event DCEvent, callback func(dc QC))
|
||||
}
|
||||
|
||||
type dc struct {
|
||||
type qc struct {
|
||||
// 驱动数据
|
||||
drive []byte
|
||||
driveBits []bool
|
||||
@ -60,36 +60,36 @@ type dc struct {
|
||||
collect []byte
|
||||
collectBits []bool
|
||||
// 事件
|
||||
subscribes map[DCEvent][]func(dc DC)
|
||||
subscribes map[DCEvent][]func(dc QC)
|
||||
}
|
||||
|
||||
// GetCollect implements DC.
|
||||
func (d *dc) GetCollect() []byte {
|
||||
func (d *qc) GetCollect() []byte {
|
||||
return d.collect
|
||||
}
|
||||
|
||||
func (d *dc) GetCollectBit(start uint32) bool {
|
||||
func (d *qc) GetCollectBit(start uint32) bool {
|
||||
if start >= uint32(len(d.collectBits)) {
|
||||
panic(fmt.Errorf("GetCollectBit超出范围"))
|
||||
}
|
||||
return d.collectBits[start]
|
||||
}
|
||||
|
||||
func (d *dc) GetCollectBits(start uint32, quantity uint32) []bool {
|
||||
func (d *qc) GetCollectBits(start uint32, quantity uint32) []bool {
|
||||
if start+quantity > uint32(len(d.collectBits)) {
|
||||
panic(fmt.Errorf("GetCollectBits超出范围"))
|
||||
}
|
||||
return d.collectBits[start : start+quantity]
|
||||
}
|
||||
|
||||
func (d *dc) GetCollectByte(start uint32) byte {
|
||||
func (d *qc) GetCollectByte(start uint32) byte {
|
||||
if start >= uint32(len(d.collect)) {
|
||||
panic(fmt.Errorf("GetCollectByte超出范围"))
|
||||
}
|
||||
return d.collect[start]
|
||||
}
|
||||
|
||||
func (d *dc) GetCollectBytes(start uint32, quantity uint32) []byte {
|
||||
func (d *qc) GetCollectBytes(start uint32, quantity uint32) []byte {
|
||||
if start+quantity > uint32(len(d.collect)) {
|
||||
panic(fmt.Errorf("GetCollectBytes超出范围"))
|
||||
}
|
||||
@ -97,32 +97,32 @@ func (d *dc) GetCollectBytes(start uint32, quantity uint32) []byte {
|
||||
}
|
||||
|
||||
// GetDrive implements DC.
|
||||
func (d *dc) GetDrive() []byte {
|
||||
func (d *qc) GetDrive() []byte {
|
||||
return d.drive
|
||||
}
|
||||
|
||||
func (d *dc) GetDriveBit(start uint32) bool {
|
||||
func (d *qc) GetDriveBit(start uint32) bool {
|
||||
if start >= uint32(len(d.driveBits)) {
|
||||
panic(fmt.Errorf("GetDriveBit超出范围"))
|
||||
}
|
||||
return d.driveBits[start]
|
||||
}
|
||||
|
||||
func (d *dc) GetDriveBits(start uint32, quantity uint32) []bool {
|
||||
func (d *qc) GetDriveBits(start uint32, quantity uint32) []bool {
|
||||
if start+quantity > uint32(len(d.driveBits)) {
|
||||
panic(fmt.Errorf("GetDriveBits超出范围"))
|
||||
}
|
||||
return d.driveBits[start : start+quantity]
|
||||
}
|
||||
|
||||
func (d *dc) GetDriveByte(start uint32) byte {
|
||||
func (d *qc) GetDriveByte(start uint32) byte {
|
||||
if start >= uint32(len(d.drive)) {
|
||||
panic(fmt.Errorf("GetDriveByte超出范围"))
|
||||
}
|
||||
return d.drive[start]
|
||||
}
|
||||
|
||||
func (d *dc) GetDriveBytes(start uint32, quantity uint32) []byte {
|
||||
func (d *qc) GetDriveBytes(start uint32, quantity uint32) []byte {
|
||||
if start+quantity > uint32(len(d.drive)) {
|
||||
panic(fmt.Errorf("GetDriveBytes超出范围"))
|
||||
}
|
||||
@ -130,7 +130,7 @@ func (d *dc) GetDriveBytes(start uint32, quantity uint32) []byte {
|
||||
}
|
||||
|
||||
// UpdateCollectByBits implements DC.
|
||||
func (d *dc) UpdateCollectByBits(start uint32, bits []bool) error {
|
||||
func (d *qc) UpdateCollectByBits(start uint32, bits []bool) error {
|
||||
total := len(d.collectBits)
|
||||
if start >= uint32(total) {
|
||||
return fmt.Errorf("UpdateCollectByBits参数start超出范围")
|
||||
@ -149,7 +149,7 @@ func (d *dc) UpdateCollectByBits(start uint32, bits []bool) error {
|
||||
}
|
||||
|
||||
// UpdateCollectByBytes implements DC.
|
||||
func (d *dc) UpdateCollectByBytes(start uint32, values []byte) error {
|
||||
func (d *qc) UpdateCollectByBytes(start uint32, values []byte) error {
|
||||
total := len(d.collect)
|
||||
if start >= uint32(total) {
|
||||
return fmt.Errorf("UpdateCollectByBytes参数start超出范围")
|
||||
@ -166,7 +166,7 @@ func (d *dc) UpdateCollectByBytes(start uint32, values []byte) error {
|
||||
}
|
||||
|
||||
// UpdateDriveByBits implements DC.
|
||||
func (d *dc) UpdateDriveByBits(start uint32, bits []bool) error {
|
||||
func (d *qc) UpdateDriveByBits(start uint32, bits []bool) error {
|
||||
total := len(d.driveBits)
|
||||
if start >= uint32(total) {
|
||||
return fmt.Errorf("UpdateDriveByBits参数start超出范围")
|
||||
@ -185,7 +185,7 @@ func (d *dc) UpdateDriveByBits(start uint32, bits []bool) error {
|
||||
}
|
||||
|
||||
// UpdateDriveByBytes implements DC.
|
||||
func (d *dc) UpdateDriveByBytes(start uint32, values []byte) error {
|
||||
func (d *qc) UpdateDriveByBytes(start uint32, values []byte) error {
|
||||
total := len(d.drive)
|
||||
if start >= uint32(total) {
|
||||
return fmt.Errorf("UpdateDriveByBytes参数start超出范围")
|
||||
@ -202,7 +202,7 @@ func (d *dc) UpdateDriveByBytes(start uint32, values []byte) error {
|
||||
}
|
||||
|
||||
// Emit implements DC.
|
||||
func (d *dc) Emit(event DCEvent) {
|
||||
func (d *qc) Emit(event DCEvent) {
|
||||
listeners := d.subscribes[event]
|
||||
for _, v := range listeners {
|
||||
v(d)
|
||||
@ -210,22 +210,22 @@ func (d *dc) Emit(event DCEvent) {
|
||||
}
|
||||
|
||||
// On implements DC.
|
||||
func (d *dc) On(event DCEvent, callback func(d DC)) {
|
||||
func (d *qc) On(event DCEvent, callback func(d QC)) {
|
||||
d.subscribes[event] = append(d.subscribes[event], callback)
|
||||
}
|
||||
|
||||
// Off implements DC.
|
||||
func (d *dc) Off(event DCEvent, callback func(d DC)) {
|
||||
func (d *qc) Off(event DCEvent, callback func(d QC)) {
|
||||
panic("unimplemented")
|
||||
}
|
||||
|
||||
func NewDC(d []byte, c []byte) DC {
|
||||
return &dc{
|
||||
func NewDC(d []byte, c []byte) QC {
|
||||
return &qc{
|
||||
drive: d,
|
||||
driveBits: decodeBools(d),
|
||||
collect: c,
|
||||
collectBits: decodeBools(c),
|
||||
subscribes: make(map[DCEvent][]func(d DC)),
|
||||
subscribes: make(map[DCEvent][]func(d QC)),
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user