go645

package module
v0.0.0-...-fd3294a Latest Latest
Warning

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

Go to latest
Published: Sep 14, 2024 License: MIT Imports: 15 Imported by: 0

README

go dlt645-2007/1997

用go语言实现的dlt645解析

    go get github.com/cqqqq/go645
  1. 读请求
c := go645.NewClient(go645.NewRTUClientProvider(go645.WithEnableLogger(), go645.WithSerialConfig(serial.Config{
    Address:  "/dev/ttyUSB3",
    BaudRate: 19200,
    DataBits: 8,
    StopBits: 1,
    Parity:   "E",
    Timeout:  time.Second * 8,
})))

for {
    time.Sleep(time.Second)
    pr, err := c.Read(go645.NewAddress("3a2107000481", go645.LittleEndian), 0x00_01_00_00)
    if err != nil {
        log.Print(err.Error())
    } else {
        println(pr.GetValue())
}

}

  1. protocal_test.go 中可查看更多案例

Documentation

Index

Constants

View Source
const (
	DirTx = iota + 1
	DirRx
)
View Source
const (
	LittleEndian     Order = false
	BigEndian        Order = true
	Start                  = 0x68
	End                    = 0x16
	HeadLen                = 1 + 6 + 1
	BroadcastAddress       = "999999999999"
)
View Source
const SerialDefaultTimeout = 2 * time.Second

SerialDefaultTimeout Serial Default timeout

Variables

This section is empty.

Functions

func Bcd2Number

func Bcd2Number(bcd []byte) string

func DecodeException

func DecodeException(buffer *bytes.Buffer) error

func DecoderData

func DecoderData(buffer *bytes.Buffer, size int) (*bytes.Buffer, error)

func GetHex

func GetHex(protocol *Protocol) (string, error)

GetHex 返回16进制string

func Hex2Byte

func Hex2Byte(str string) []byte

func Int2bytes

func Int2bytes(data int32, ver ProtoVersion) []byte

func IsStateUin8

func IsStateUin8(des uint8, i int) bool

func Number2bcd

func Number2bcd(number string) []byte

func WriteWithOffSet

func WriteWithOffSet(buffer *bytes.Buffer, data byte) error

Types

type Address

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

Address 表计地址

func DecodeAddress

func DecodeAddress(buffer *bytes.Buffer, size int) (Address, error)

func NewAddress

func NewAddress(address string, order Order) Address

NewAddress ,构建设备地址 参数:

address : 设备地址
order : 大小端表示

返回值:

*Address 设备地址

func (Address) Encode

func (a Address) Encode(buffer *bytes.Buffer) error

Encode ,协议解码 参数:

buffer : 字节码缓冲

返回值:

error 解码异常

func (Address) GetLen

func (a Address) GetLen() byte

func (Address) GetStrAddress

func (a Address) GetStrAddress(order Order) string

type Client

type Client interface {
	ClientProvider
	//Read 发送读请求
	Read(ver ProtoVersion, address Address, itemCode int32) (*ReadData, bool, error)
	//ReadWithBlock  读请求使能块
	ReadWithBlock(ver ProtoVersion, address Address, data ReadRequestData) (*Protocol, error)
	//Broadcast 开始广播
	Broadcast(ver ProtoVersion, p InformationElement, control Control) error
}

func NewClient

func NewClient(p ClientProvider, opts ...Option) Client

type ClientProvider

type ClientProvider interface {
	// Connect try to connect the remote server
	Connect() error
	// IsConnected returns a bool signifying whether
	// the client is connected or not.
	IsConnected() bool
	LogMode(enable bool)
	// Close disconnect the remote server
	Close() error

	SendAndRead(*Protocol) (aduResponse []byte, err error)
	SendRawFrameAndRead(station string, aduRequest []byte) (aduResponse []byte, err error)
	SendRawFrame(station string, aduRequest []byte) (err error)
	ReadRawFrame() (aduResponse []byte, err error)
	Send(*Protocol) (err error)
	// contains filtered or unexported methods
}

type ClientProviderOption

type ClientProviderOption func(ClientProvider)

ClientProviderOption client provider option for user.

func WithEnableLogger

func WithEnableLogger() ClientProviderOption

WithEnableLogger enable log output when you has set logger.

func WithLogProvider

func WithLogProvider(provider LogProvider) ClientProviderOption

WithLogProvider set logger provider.

func WithLogSaver

func WithLogSaver(l LogSaver) ClientProviderOption

func WithPrefixHandler

func WithPrefixHandler(prefixHandler PrefixHandler) ClientProviderOption

func WithSerialConfig

func WithSerialConfig(config serial.Config) ClientProviderOption

WithSerialConfig set serial config, only valid on serial.

func WithTCPTimeout

func WithTCPTimeout(t time.Duration) ClientProviderOption

WithTCPTimeout set tcp Connect & Read timeout, only valid on TCP.

type Control

type Control struct {
	Data ControlType
}

func DecodeControl

func DecodeControl(buffer *bytes.Buffer) (*Control, error)

func NewControl

func NewControl() *Control

func NewControlValue

func NewControlValue(data ControlType) *Control

func (*Control) Encode

func (c *Control) Encode(buffer *bytes.Buffer) error

func (*Control) IsState

func (c *Control) IsState(ver ProtoVersion, state ControlKind) bool

func (*Control) IsStates

func (c *Control) IsStates(ver ProtoVersion, state ...ControlKind) bool

IsStates 判断控制域

func (*Control) Reset

func (c *Control) Reset()

func (*Control) SetState

func (c *Control) SetState(ver ProtoVersion, state ControlKind)

func (*Control) SetStates

func (c *Control) SetStates(ver ProtoVersion, state ...ControlKind)

SetStates 批量设置状态

type ControlKind

type ControlKind int
const (
	IsSlave ControlKind = iota + 1
	SlaveErr
	HasNext
	//Retain 保留
	Retain
	//Broadcast 广播校时
	Broadcast
	// ReadNext 读后续10001
	ReadNext
	//ReadAddress 读通讯地址
	ReadAddress
	//Write 写数据
	Write
	//WriteAddress 读通讯地址
	WriteAddress
	//ToChangeCommunicationRate 更改通讯速率
	ToChangeCommunicationRate
	Freeze
	//PassWord 修改密码
	PassWord
	ResetMaxDemand
	//ResetEM 电表清零
	ResetEM
	ResetEvent
	//Read 读
	Read
)

type ControlType

type ControlType byte

type DateTime

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

func (DateTime) Encode

func (t DateTime) Encode(buffer *bytes.Buffer) error

func (DateTime) GetLen

func (t DateTime) GetLen() byte

type Decoder

type Decoder func(buffer *bytes.Buffer) (*InformationElement, error)

type DefaultPrefix

type DefaultPrefix struct {
}

func (DefaultPrefix) DecodePrefix

func (d DefaultPrefix) DecodePrefix(reader io.Reader) ([]byte, bool, error)

func (DefaultPrefix) EncodePrefix

func (d DefaultPrefix) EncodePrefix(buffer *bytes.Buffer) error

type Exception

type Exception struct {
	Err uint16
}

Exception 错误

func (Exception) Encode

func (e Exception) Encode(buffer *bytes.Buffer) error

func (*Exception) Error

func (e *Exception) Error() string

func (Exception) GetLen

func (e Exception) GetLen() byte

GetLen 错误响应报文长度2

type InformationElement

type InformationElement interface {
	Encode(buffer *bytes.Buffer) error
	GetLen() byte
}

func DecodeNullData

func DecodeNullData(*bytes.Buffer) InformationElement

func DecodeRead

func DecodeRead(buffer *bytes.Buffer, size int, ver ProtoVersion) InformationElement

func Handler

func Handler(control *Control, buffer *bytes.Buffer, size byte, ver ProtoVersion) (InformationElement, error)

type LogProvider

type LogProvider interface {
	Errorf(format string, v ...interface{})
	Debugf(format string, v ...interface{})
}

LogProvider log message levels only Debug and Error

type LogSaver

type LogSaver interface {
	Write(dir int, url string, station string, data []byte)
}

type NullData

type NullData struct {
}

func (NullData) Encode

func (n NullData) Encode(buffer *bytes.Buffer) error

func (NullData) GetLen

func (n NullData) GetLen() byte

type Option

type Option func(c *client)

Option custom option

type Order

type Order bool

Order 地址大小端

type PrefixHandler

type PrefixHandler interface {
	EncodePrefix(buffer *bytes.Buffer) error
	// DecodePrefix 前缀内容,是否是前缀,错误
	DecodePrefix(reader io.Reader) ([]byte, bool, error)
}

type ProtoVersion

type ProtoVersion int
const (
	Ver1997 ProtoVersion = iota + 1
	Ver2007
)

type Protocol

type Protocol struct {
	Version ProtoVersion
	//Start 645协议起始符号
	Start byte
	//设备地址 6个字节的BCD
	Address Address
	//Start  645协议起始符号 标志报文头结束
	Start2 byte
	//Control 控制域
	Control *Control
	//Control 数据长度
	DataLength byte
	//Control 数据抽象
	Data InformationElement
	//CS 校验和
	CS byte
	//End 0x16
	End byte
}

Protocol 协议

func Decode

func Decode(ver ProtoVersion, buffer *bytes.Buffer) (*Protocol, error)

func NewProtocol

func NewProtocol(address Address, data InformationElement, control *Control) *Protocol

func ReadRequest

func ReadRequest(ver ProtoVersion, address Address, itemCode int32) *Protocol

ReadRequest 读数据

func ReadRequestWithBlock

func ReadRequestWithBlock(ver ProtoVersion, address Address, data ReadRequestData) *Protocol

ReadRequestWithBlock 读数据

func ReadResponse

func ReadResponse(ver ProtoVersion, address Address, itemCode int32, control *Control, rawValue string) *Protocol

ReadResponse 创建读响应

func (Protocol) Encode

func (p Protocol) Encode(buffer *bytes.Buffer) error

func (Protocol) GetLen

func (p Protocol) GetLen() byte

type RTUClientProvider

type RTUClientProvider struct {
	PrefixHandler
	// contains filtered or unexported fields
}

func NewRTUClientProvider

func NewRTUClientProvider(opts ...ClientProviderOption) *RTUClientProvider

NewRTUClientProvider allocates and initializes a RTUClientProvider. it will use default /dev/ttyS0 19200 8 1 N and timeout 1000

func (*RTUClientProvider) Close

func (sf *RTUClientProvider) Close() (err error)

Close current connection.

func (*RTUClientProvider) Connect

func (sf *RTUClientProvider) Connect() (err error)

Connect try to connect the remote server

func (RTUClientProvider) Debugf

func (sf RTUClientProvider) Debugf(format string, v ...interface{})

Debug Log DEBUG level message.

func (RTUClientProvider) Errorf

func (sf RTUClientProvider) Errorf(format string, v ...interface{})

Error Log ERROR level message.

func (*RTUClientProvider) IsConnected

func (sf *RTUClientProvider) IsConnected() (b bool)

IsConnected returns a bool signifying whether the client is connected or not.

func (*RTUClientProvider) LogMode

func (sf *RTUClientProvider) LogMode(enable bool)

LogMode set enable or disable log output when you has set logger.

func (*RTUClientProvider) ReadRawFrame

func (sf *RTUClientProvider) ReadRawFrame() (aduResponse []byte, err error)

ReadRawFrame 读取返回数据

func (*RTUClientProvider) Send

func (sf *RTUClientProvider) Send(p *Protocol) (err error)

func (*RTUClientProvider) SendAndRead

func (sf *RTUClientProvider) SendAndRead(p *Protocol) (aduResponse []byte, err error)

SendAndRead 发送数据并读取返回值

func (*RTUClientProvider) SendRawFrame

func (sf *RTUClientProvider) SendRawFrame(station string, aduRequest []byte) (err error)

func (*RTUClientProvider) SendRawFrameAndRead

func (sf *RTUClientProvider) SendRawFrameAndRead(station string, aduRequest []byte) (aduResponse []byte, err error)

type ReadData

type ReadData struct {
	Negative bool
	// contains filtered or unexported fields
}

ReadData 数据域

func DecodeData

func DecodeData(buffer *bytes.Buffer, size byte) (*ReadData, error)

func NewReadData

func NewReadData(dataType int32, value string, ver ProtoVersion) ReadData

func (ReadData) Encode

func (d ReadData) Encode(buffer *bytes.Buffer) error

func (*ReadData) GetDataType

func (d *ReadData) GetDataType() []byte

func (*ReadData) GetDataTypeStr

func (d *ReadData) GetDataTypeStr() string

func (*ReadData) GetFloat64Value

func (d *ReadData) GetFloat64Value() float64

func (*ReadData) GetFloat64ValueUnsigned

func (d *ReadData) GetFloat64ValueUnsigned() float64

func (*ReadData) GetFloat64ValueWithTime

func (d *ReadData) GetFloat64ValueWithTime() *ReadDataWithTime

func (ReadData) GetLen

func (d ReadData) GetLen() byte

func (ReadData) GetValue

func (d ReadData) GetValue() string

type ReadDataWithTime

type ReadDataWithTime struct {
	ReadData
	// contains filtered or unexported fields
}

type ReadRequestData

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

func (ReadRequestData) Encode

func (r ReadRequestData) Encode(buffer *bytes.Buffer) error

func (ReadRequestData) GetLen

func (r ReadRequestData) GetLen() byte

type Value

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

type WriteData

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

WriteData 写数据

type YearDateTimeS

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

func NewTimeS

func NewTimeS() *YearDateTimeS

func (YearDateTimeS) Encode

func (t YearDateTimeS) Encode(buffer *bytes.Buffer) error

func (YearDateTimeS) GetLen

func (t YearDateTimeS) GetLen() byte

type ZapLogger

type ZapLogger struct {
	*zap.Logger
}

default log.

func (ZapLogger) Debugf

func (sf ZapLogger) Debugf(format string, v ...interface{})

Debug Log DEBUG level message.

func (ZapLogger) Errorf

func (sf ZapLogger) Errorf(format string, v ...interface{})

Error Log ERROR level message.

Directories

Path Synopsis
example
bf command
gaea command

Jump to

Keyboard shortcuts

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