|
|
|
|
package protocol
|
|
|
|
|
|
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
|
|
type MError uint8
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
// Success 成功
|
|
|
|
|
Success MError = 0
|
|
|
|
|
// IllegalFunction 接收到的功能码不可识别或服务端(从机)未实现其功能
|
|
|
|
|
IllegalFunction MError = 1
|
|
|
|
|
// IllegalDataAddress 数据地址不可接收
|
|
|
|
|
IllegalDataAddress MError = 2
|
|
|
|
|
// IllegalDataValue 数据不被识别
|
|
|
|
|
IllegalDataValue MError = 3
|
|
|
|
|
// SlaveDeviceFailure 不可恢复的错误
|
|
|
|
|
SlaveDeviceFailure MError = 4
|
|
|
|
|
// AcknowledgeSlave 已接受并正在处理的耗时请求,防止发生超时错误,主站可以发送一个poll(pgc)来确定消息是否处理完成
|
|
|
|
|
AcknowledgeSlave MError = 5
|
|
|
|
|
// SlaveDeviceBusy 从站正在处理耗时指令,从站忙
|
|
|
|
|
SlaveDeviceBusy MError = 6
|
|
|
|
|
// NegativeAcknowledge 从站无法处理此请求
|
|
|
|
|
NegativeAcknowledge MError = 7
|
|
|
|
|
// MemoryParityError 从站检测到奇偶校验错误,但仍然需要提供服务,故此返回此错误
|
|
|
|
|
MemoryParityError MError = 8
|
|
|
|
|
// GatewayPathUnavailable Modbus网关配置错误
|
|
|
|
|
GatewayPathUnavailable MError = 10
|
|
|
|
|
// GatewayTargetDeviceFailedToRespond Modbus网关,从机无法响应
|
|
|
|
|
GatewayTargetDeviceFailedToRespond MError = 11
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func (e MError) Error() string {
|
|
|
|
|
return fmt.Sprintf("%d", e)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (e MError) String() string {
|
|
|
|
|
var str string
|
|
|
|
|
switch e {
|
|
|
|
|
case Success:
|
|
|
|
|
str = fmt.Sprintf("Success")
|
|
|
|
|
case IllegalFunction:
|
|
|
|
|
str = fmt.Sprintf("IllegalFunction")
|
|
|
|
|
case IllegalDataAddress:
|
|
|
|
|
str = fmt.Sprintf("IllegalDataAddress")
|
|
|
|
|
case IllegalDataValue:
|
|
|
|
|
str = fmt.Sprintf("IllegalDataValue")
|
|
|
|
|
case SlaveDeviceFailure:
|
|
|
|
|
str = fmt.Sprintf("SlaveDeviceFailure")
|
|
|
|
|
case AcknowledgeSlave:
|
|
|
|
|
str = fmt.Sprintf("AcknowledgeSlave")
|
|
|
|
|
case SlaveDeviceBusy:
|
|
|
|
|
str = fmt.Sprintf("SlaveDeviceBusy")
|
|
|
|
|
case NegativeAcknowledge:
|
|
|
|
|
str = fmt.Sprintf("NegativeAcknowledge")
|
|
|
|
|
case MemoryParityError:
|
|
|
|
|
str = fmt.Sprintf("MemoryParityError")
|
|
|
|
|
case GatewayPathUnavailable:
|
|
|
|
|
str = fmt.Sprintf("GatewayPathUnavailable")
|
|
|
|
|
case GatewayTargetDeviceFailedToRespond:
|
|
|
|
|
str = fmt.Sprintf("GatewayTargetDeviceFailedToRespond")
|
|
|
|
|
default:
|
|
|
|
|
str = fmt.Sprintf("unknown")
|
|
|
|
|
}
|
|
|
|
|
return str
|
|
|
|
|
}
|