dlt645

package
v0.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 6, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	FrameStart    = 0x68
	FrameEnd      = 0x16
	PreambleByte  = 0xFE
	CtrlRead      = 0x11
	CtrlReadResp  = 0x91
	CtrlWrite     = 0x14
	CtrlWriteResp = 0x94
	CtrlErrorMask = 0x40
	AddrLen       = 6
	DataIDLen     = 4
	EncodeOffset  = 0x33
	BroadcastByte = 0xAA
)

Variables

This section is empty.

Functions

func BuildReadFrame added in v0.0.7

func BuildReadFrame(meterAddr [AddrLen]byte, dataID [DataIDLen]byte) []byte

BuildReadFrame builds a read-data request frame (control 0x11).

func BuildWriteFrame added in v0.0.7

func BuildWriteFrame(meterAddr [AddrLen]byte, dataID [DataIDLen]byte, payload []byte) []byte

BuildWriteFrame builds a write-data request frame (control 0x14).

func DataIDString added in v0.0.7

func DataIDString(di [DataIDLen]byte) string

DataIDString formats data identifier bytes as "DI3-DI2-DI1-DI0".

func DecodeValue added in v0.0.7

func DecodeValue(raw []byte, dataType string, scale float64, offset float64) (any, error)

DecodeValue converts raw meter bytes to a typed value per DL/T 645 BCD encoding.

func EncodeMeterAddress added in v0.0.7

func EncodeMeterAddress(addr string) ([AddrLen]byte, error)

EncodeMeterAddress converts a 12-digit decimal meter address to 6-byte BCD (low byte first).

func MeterAddressString added in v0.0.7

func MeterAddressString(addr [AddrLen]byte) string

MeterAddressString converts 6-byte BCD address back to 12-digit string.

func NewDLT645Driver

func NewDLT645Driver() driver.Driver

func ParseDataID added in v0.0.7

func ParseDataID(di string) ([DataIDLen]byte, error)

ParseDataID parses "DI3-DI2-DI1-DI0" or "DI3DI2DI1DI0" into 4 bytes (DI0 lowest index).

func ParseReadResponse added in v0.0.7

func ParseReadResponse(frame *Frame) (dataID [DataIDLen]byte, value []byte, err error)

ParseReadResponse extracts data identifier and value bytes from a read response.

Types

type DLT645Decoder added in v0.0.7

type DLT645Decoder struct {
	// contains filtered or unexported fields
}

DLT645Decoder handles DL/T 645-2007 frame and value encoding/decoding.

func NewDLT645Decoder added in v0.0.7

func NewDLT645Decoder() *DLT645Decoder

func (*DLT645Decoder) ParseAddress added in v0.0.7

func (d *DLT645Decoder) ParseAddress(addr string) (*ParsedAddress, error)

ParseAddress parses "meterAddr#DI3-DI2-DI1-DI0[#extension]" or "DI3-DI2-DI1-DI0".

func (*DLT645Decoder) SetDefaultMeterAddress added in v0.0.7

func (d *DLT645Decoder) SetDefaultMeterAddress(addr string)

type DLT645Driver

type DLT645Driver struct {
	// contains filtered or unexported fields
}

DLT645Driver implements DL/T 645-2007 meter communication over serial or TCP.

func (*DLT645Driver) Connect

func (d *DLT645Driver) Connect(ctx context.Context) error

func (*DLT645Driver) Disconnect

func (d *DLT645Driver) Disconnect() error

func (*DLT645Driver) GetConnectionMetrics

func (d *DLT645Driver) GetConnectionMetrics() (connectionSeconds int64, reconnectCount int64, localAddr string, remoteAddr string, lastDisconnectTime time.Time)

func (*DLT645Driver) GetMetrics

func (d *DLT645Driver) GetMetrics() model.ChannelMetrics

func (*DLT645Driver) Health

func (d *DLT645Driver) Health() driver.HealthStatus

func (*DLT645Driver) Init

func (d *DLT645Driver) Init(cfg model.DriverConfig) error

func (*DLT645Driver) ReadPoints

func (d *DLT645Driver) ReadPoints(ctx context.Context, points []model.Point) (map[string]model.Value, error)

func (*DLT645Driver) SetDeviceConfig

func (d *DLT645Driver) SetDeviceConfig(config map[string]any) error

func (*DLT645Driver) SetSlaveID

func (d *DLT645Driver) SetSlaveID(slaveID uint8) error

func (*DLT645Driver) WritePoint

func (d *DLT645Driver) WritePoint(ctx context.Context, p model.Point, value any) error

type DLT645Scheduler added in v0.0.7

type DLT645Scheduler struct {
	// contains filtered or unexported fields
}

DLT645Scheduler coordinates batch reads grouped by meter address.

func NewDLT645Scheduler added in v0.0.7

func NewDLT645Scheduler(transport *DLT645Transport, decoder *DLT645Decoder) *DLT645Scheduler

func (*DLT645Scheduler) GetStats added in v0.0.7

func (s *DLT645Scheduler) GetStats() (totalRequests, successCount, failureCount int64)

func (*DLT645Scheduler) ReadPoints added in v0.0.7

func (s *DLT645Scheduler) ReadPoints(ctx context.Context, points []model.Point) (map[string]model.Value, error)

ReadPoints reads all points, grouping by meter address when possible.

func (*DLT645Scheduler) WritePoint added in v0.0.7

func (s *DLT645Scheduler) WritePoint(ctx context.Context, p model.Point, value any) error

WritePoint writes a single point when the meter supports it.

type DLT645Transport added in v0.0.7

type DLT645Transport struct {
	// contains filtered or unexported fields
}

DLT645Transport manages serial (RTU) or TCP connections and frame I/O.

func NewDLT645Transport added in v0.0.7

func NewDLT645Transport(cfg map[string]any) *DLT645Transport

func (*DLT645Transport) Connect added in v0.0.7

func (t *DLT645Transport) Connect(ctx context.Context) error

func (*DLT645Transport) Disconnect added in v0.0.7

func (t *DLT645Transport) Disconnect() error

func (*DLT645Transport) GetConnectionMetrics added in v0.0.7

func (t *DLT645Transport) GetConnectionMetrics() (connectionSeconds int64, reconnectCount int64, localAddr string, remoteAddr string, lastDisconnectTime time.Time)

func (*DLT645Transport) IsConnected added in v0.0.7

func (t *DLT645Transport) IsConnected() bool

func (*DLT645Transport) ReadData added in v0.0.7

func (t *DLT645Transport) ReadData(ctx context.Context, meterAddr [AddrLen]byte, dataID [DataIDLen]byte) ([]byte, error)

ReadData sends a read request and returns the response value bytes (without DI prefix).

func (*DLT645Transport) RecordFailure added in v0.0.7

func (t *DLT645Transport) RecordFailure(err error)

func (*DLT645Transport) RecordSuccess added in v0.0.7

func (t *DLT645Transport) RecordSuccess()

func (*DLT645Transport) WriteData added in v0.0.7

func (t *DLT645Transport) WriteData(ctx context.Context, meterAddr [AddrLen]byte, dataID [DataIDLen]byte, payload []byte) error

WriteData sends a write request with encoded payload (password + data per meter spec).

type Frame added in v0.0.7

type Frame struct {
	MeterAddr [AddrLen]byte
	Control   byte
	Data      []byte
}

Frame represents a parsed DL/T 645-2007 response/request frame.

func DecodeFrame added in v0.0.7

func DecodeFrame(raw []byte) (*Frame, error)

DecodeFrame parses a complete frame (without leading preamble).

func (Frame) ErrorCode added in v0.0.7

func (f Frame) ErrorCode() byte

func (Frame) IsError added in v0.0.7

func (f Frame) IsError() bool

type ParsedAddress added in v0.0.7

type ParsedAddress struct {
	MeterAddr [AddrLen]byte
	DataID    [DataIDLen]byte
	Extension string
}

ParsedAddress holds meter address and data identifier from a point address string.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL