Skip to content

Commit 33ab200

Browse files
committed
fix: asdu UnmarshalBinary failed,EOF fixes #15
1 parent 40e42d7 commit 33ab200

File tree

5 files changed

+278
-25
lines changed

5 files changed

+278
-25
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ go 1.19
44

55
require (
66
github.com/spf13/cast v1.6.0
7-
github.com/wendy512/go-iecp5 v1.2.4
7+
github.com/wendy512/go-iecp5 v1.2.5
88
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
55
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
66
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
77
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
8-
github.com/wendy512/go-iecp5 v1.2.4 h1:6BwiRFXej3Yi/v2I+dVMyVZhgji9btZpPJuF8dVcZls=
9-
github.com/wendy512/go-iecp5 v1.2.4/go.mod h1:d5koVsFZF0IV2JYznykSLJy6d29mHvXlNqm6GvvJQ0k=
8+
github.com/wendy512/go-iecp5 v1.2.5 h1:jQqIVOV6nHy+YD0Llj6jQN5a9NZEx704ouoVuARfMvI=
9+
github.com/wendy512/go-iecp5 v1.2.5/go.mod h1:d5koVsFZF0IV2JYznykSLJy6d29mHvXlNqm6GvvJQ0k=

tests/client_handle.go

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tests
22

33
import (
44
"fmt"
5+
56
"github.com/wendy512/go-iecp5/asdu"
67
"github.com/wendy512/iec104/client"
78
)
@@ -19,7 +20,7 @@ func (c *clientCall) OnInterrogation(packet *asdu.ASDU) error {
1920
// OnCounterInterrogation 总计数器回复
2021
func (c *clientCall) OnCounterInterrogation(packet *asdu.ASDU) error {
2122
addr, value := packet.GetCounterInterrogationCmd()
22-
fmt.Printf("counter interrogation reply, addr: %d, request: 0x%02X, rreeze: 0x%02X\n",
23+
fmt.Printf("counter interrogation reply, addr: %d, request: 0x%02X, freeze: 0x%02X\n",
2324
addr, value.Request, value.Freeze)
2425
return nil
2526
}
@@ -95,81 +96,81 @@ func (c *clientCall) OnASDU(packet *asdu.ASDU) error {
9596
func (c *clientCall) onSinglePoint(packet *asdu.ASDU) {
9697
// [M_SP_NA_1], [M_SP_TA_1] or [M_SP_TB_1] 获取单点信息信息体集合
9798
for _, p := range packet.GetSinglePoint() {
98-
fmt.Printf("single point, ioa: %d, value: %v\n", p.Ioa, p.Value)
99+
fmt.Printf("single point, ioa: %d, value: %v, qds: %d, time: %v\n", p.Ioa, p.Value, p.Qds, p.Time.Format("2006-01-02 15:04:05.000"))
99100
}
100101
}
101102

102103
func (c *clientCall) onDoublePoint(packet *asdu.ASDU) {
103104
// [M_DP_NA_1], [M_DP_TA_1] or [M_DP_TB_1] 获得双点信息体集合
104105
for _, p := range packet.GetDoublePoint() {
105-
fmt.Printf("double point, ioa: %d, value: %v\n", p.Ioa, p.Value)
106+
fmt.Printf("double point, ioa: %d, value: %v, qds: %d, time: %v\n", p.Ioa, p.Value, p.Qds, p.Time.Format("2006-01-02 15:04:05.000"))
106107
}
107108
}
108109

109110
func (c *clientCall) onMeasuredValueScaled(packet *asdu.ASDU) {
110111
// [M_ME_NB_1], [M_ME_TB_1] or [M_ME_TE_1] 获得测量值,标度化值信息体集合
111112
for _, p := range packet.GetMeasuredValueScaled() {
112-
fmt.Printf("measured value scaled, ioa: %d, value: %v\n", p.Ioa, p.Value)
113+
fmt.Printf("measured value scaled, ioa: %d, value: %v, qds: %d, time: %v\n", p.Ioa, p.Value, p.Qds, p.Time.Format("2006-01-02 15:04:05.000"))
113114
}
114115
}
115116

116117
func (c *clientCall) onMeasuredValueNormal(packet *asdu.ASDU) {
117118
// [M_ME_NA_1], [M_ME_TA_1],[ M_ME_TD_1] or [M_ME_ND_1] 获得测量值,规一化值信息体集合
118119
for _, p := range packet.GetMeasuredValueNormal() {
119-
fmt.Printf("measured value normal, ioa: %d, value: %v\n", p.Ioa, p.Value)
120+
fmt.Printf("measured value normal, ioa: %d, value: %v, qds: %d, time: %v\n", p.Ioa, p.Value, p.Qds, p.Time.Format("2006-01-02 15:04:05.000"))
120121
}
121122
}
122123

123124
func (c *clientCall) onStepPosition(packet *asdu.ASDU) {
124125
// [M_ST_NA_1], [M_ST_TA_1] or [M_ST_TB_1] 获得步位置信息体集合
125126
for _, p := range packet.GetStepPosition() {
126127
// state:false: 设备未在瞬变状态 true: 设备处于瞬变状态
127-
fmt.Printf("step position, ioa: %d, state: %t, value: %d\n", p.Ioa, p.Value.HasTransient, p.Value.Val)
128+
fmt.Printf("step position, ioa: %d, state: %t, value: %d, qds: %d, time: %v\n", p.Ioa, p.Value.HasTransient, p.Value.Val, p.Qds, p.Time.Format("2006-01-02 15:04:05.000"))
128129
}
129130
}
130131

131132
func (c *clientCall) onBitString32(packet *asdu.ASDU) {
132-
// [M_ME_NC_1], [M_ME_TC_1] or [M_ME_TF_1].获得测量值,短浮点数信息体集合
133-
for _, p := range packet.GetMeasuredValueFloat() {
134-
fmt.Printf("bigtstring32, ioa: %d, value: %v\n", p.Ioa, p.Value)
133+
// [M_BO_NA_1], [M_BO_TA_1] or [M_BO_TB_1].获得比特位串信息体集合
134+
for _, p := range packet.GetBitString32() {
135+
fmt.Printf("bit string 32, ioa: %d, value: %v, qds: %d, time: %v\n", p.Ioa, p.Value, p.Qds, p.Time.Format("2006-01-02 15:04:05.000"))
135136
}
136137
}
137138

138139
func (c *clientCall) onMeasuredValueFloat(packet *asdu.ASDU) {
139140
// [M_ME_NC_1], [M_ME_TC_1] or [M_ME_TF_1].获得测量值,短浮点数信息体集合
140141
for _, p := range packet.GetMeasuredValueFloat() {
141-
fmt.Printf("measured value float, ioa: %d, value: %v\n", p.Ioa, p.Value)
142+
fmt.Printf("measured value float, ioa: %d, value: %v, qds: %d, time: %v\n", p.Ioa, p.Value, p.Qds, p.Time.Format("2006-01-02 15:04:05.000"))
142143
}
143144
}
144145

145146
func (c *clientCall) onIntegratedTotals(packet *asdu.ASDU) {
146147
// [M_IT_NA_1], [M_IT_TA_1] or [M_IT_TB_1]. 获得累计量信息体集合
147148
for _, p := range packet.GetIntegratedTotals() {
148-
fmt.Printf("integrated totals, ioa: %d, count: %d, SQ: 0x%02X, CY: %t, CA: %t, IV: %t\n",
149-
p.Ioa, p.Value.CounterReading, p.Value.SeqNumber, p.Value.HasCarry, p.Value.IsAdjusted, p.Value.IsInvalid)
149+
fmt.Printf("integrated totals, ioa: %d, count: %d, SQ: 0x%02X, CY: %t, CA: %t, IV: %t, time: %v\n",
150+
p.Ioa, p.Value.CounterReading, p.Value.SeqNumber, p.Value.HasCarry, p.Value.IsAdjusted, p.Value.IsInvalid, p.Time.Format("2006-01-02 15:04:05.000"))
150151
}
151152
}
152153

153154
func (c *clientCall) onEventOfProtectionEquipment(packet *asdu.ASDU) {
154155
// [M_EP_TA_1] [M_EP_TD_1] 获取继电器保护设备事件信息体
155156
for _, p := range packet.GetEventOfProtectionEquipment() {
156-
fmt.Printf("event of protection equipment, ioa: %d, event: %d, qdp: %d, mesc: %d, time: %d\n",
157-
p.Ioa, p.Event, p.Qdp, p.Msec, p.Time.UnixMilli())
157+
fmt.Printf("event of protection equipment, ioa: %d, event: %d, qdp: %d, msec: %d, time: %v\n",
158+
p.Ioa, p.Event, p.Qdp, p.Msec, p.Time.Format("2006-01-02 15:04:05.000"))
158159
}
159160
}
160161

161162
func (c *clientCall) onPackedStartEventsOfProtectionEquipment(packet *asdu.ASDU) {
162163
// [M_EP_TB_1] [M_EP_TE_1] 获取继电器保护设备事件信息体
163164
p := packet.GetPackedStartEventsOfProtectionEquipment()
164-
fmt.Printf("packed start events of protection equipment, ioa: %d, event: %d, qdp: %d, mesc: %d, time: %d\n",
165-
p.Ioa, p.Event, p.Qdp, p.Msec, p.Time.UnixMilli())
165+
fmt.Printf("packed start events of protection equipment, ioa: %d, event: %d, qdp: %d, msec: %d, time: %v\n",
166+
p.Ioa, p.Event, p.Qdp, p.Msec, p.Time.Format("2006-01-02 15:04:05.000"))
166167
}
167168

168169
func (c *clientCall) onPackedOutputCircuitInfo(packet *asdu.ASDU) {
169170
// [M_EP_TC_1] [M_EP_TF_1] 获取继电器保护设备成组输出电路信息信息体
170171
p := packet.GetPackedOutputCircuitInfo()
171-
fmt.Printf("packed Output circuit, ioa: %d, qci: %d, qdp: %d, mesc: %d, time: %d\n",
172-
p.Ioa, p.Oci, p.Qdp, p.Msec, p.Time.UnixMilli())
172+
fmt.Printf("packed output circuit, ioa: %d, qci: %d, qdp: %d, msec: %d, time: %v\n",
173+
p.Ioa, p.Oci, p.Qdp, p.Msec, p.Time.Format("2006-01-02 15:04:05.000"))
173174
}
174175

175176
func (c *clientCall) onPackedSinglePointWithSCD(packet *asdu.ASDU) {

tests/iec104_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"time"
1111
)
1212

13+
var once sync.Once
14+
1315
func TestClient(t *testing.T) {
1416
srv := startServer()
1517
settings := client.NewSettings()
@@ -62,7 +64,7 @@ func TestClient(t *testing.T) {
6264
}
6365

6466
// 测试等待回复,不能结束太快
65-
time.Sleep(time.Second * 10)
67+
time.Sleep(time.Second * 15)
6668
wg.Done()
6769
})
6870

0 commit comments

Comments
 (0)