You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/07/26 10:53:48 UTC
[plc4x] branch develop updated: refactor(plc4go/s7): cleanup s7 code
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/develop by this push:
new 955055aea refactor(plc4go/s7): cleanup s7 code
955055aea is described below
commit 955055aea56e037eb7564c5eee2698ad43ddeaac
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Jul 26 12:53:42 2022 +0200
refactor(plc4go/s7): cleanup s7 code
---
plc4go/internal/s7/Connection.go | 45 ++++++++++++++-------------
plc4go/internal/s7/Field.go | 53 ++++++++++++++------------------
plc4go/internal/s7/MessageCodec.go | 2 +-
plc4go/internal/s7/Reader.go | 16 +++++-----
plc4go/internal/s7/Writer.go | 14 ++++-----
plc4go/internal/simulated/Reader_test.go | 12 ++------
plc4go/internal/simulated/Writer_test.go | 12 ++------
plc4go/internal/spi/PlcFieldHandler.go | 2 +-
8 files changed, 67 insertions(+), 89 deletions(-)
diff --git a/plc4go/internal/s7/Connection.go b/plc4go/internal/s7/Connection.go
index cde46c333..a1fc7024c 100644
--- a/plc4go/internal/s7/Connection.go
+++ b/plc4go/internal/s7/Connection.go
@@ -184,26 +184,26 @@ func (m *Connection) setupConnection(ch chan plc4go.PlcConnectionConnectResult)
if err := m.messageCodec.SendRequest(
m.createS7ConnectionRequest(cotpPacketConnectionResponse),
func(message spi.Message) bool {
- tpktPacket := message.(readWriteModel.TPKTPacket)
- if tpktPacket == nil {
+ tpktPacket, ok := message.(readWriteModel.TPKTPacketExactly)
+ if !ok {
return false
}
- cotpPacketData := readWriteModel.CastCOTPPacketData(tpktPacket.GetPayload())
- if cotpPacketData == nil {
+ cotpPacketData, ok := tpktPacket.GetPayload().(readWriteModel.COTPPacketDataExactly)
+ if !ok {
return false
}
- messageResponseData := readWriteModel.CastS7MessageResponseData(cotpPacketData.GetPayload())
- if messageResponseData == nil {
+ messageResponseData, ok := cotpPacketData.GetPayload().(readWriteModel.S7MessageResponseDataExactly)
+ if !ok {
return false
}
- parameterSetupCommunication := readWriteModel.CastS7ParameterSetupCommunication(messageResponseData.GetParameter())
- return parameterSetupCommunication != nil
+ _, ok = messageResponseData.GetParameter().(readWriteModel.S7ParameterSetupCommunicationExactly)
+ return ok
},
func(message spi.Message) error {
tpktPacket := message.(readWriteModel.TPKTPacket)
- cotpPacketData := readWriteModel.CastCOTPPacketData(tpktPacket.GetPayload())
- messageResponseData := readWriteModel.CastS7MessageResponseData(cotpPacketData.GetPayload())
- setupCommunication := readWriteModel.CastS7ParameterSetupCommunication(messageResponseData.GetParameter())
+ cotpPacketData := tpktPacket.GetPayload().(readWriteModel.COTPPacketData)
+ messageResponseData := cotpPacketData.GetPayload().(readWriteModel.S7MessageResponseData)
+ setupCommunication := messageResponseData.GetParameter().(readWriteModel.S7ParameterSetupCommunication)
s7ConnectionResult <- setupCommunication
return nil
},
@@ -251,25 +251,26 @@ func (m *Connection) setupConnection(ch chan plc4go.PlcConnectionConnectResult)
if err := m.messageCodec.SendRequest(
m.createIdentifyRemoteMessage(),
func(message spi.Message) bool {
- tpktPacket := readWriteModel.CastTPKTPacket(message)
- if tpktPacket == nil {
+ tpktPacket, ok := message.(readWriteModel.TPKTPacketExactly)
+ if !ok {
return false
}
- cotpPacketData := readWriteModel.CastCOTPPacketData(tpktPacket.GetPayload())
- if cotpPacketData == nil {
+ cotpPacketData, ok := tpktPacket.GetPayload().(readWriteModel.COTPPacketDataExactly)
+ if !ok {
return false
}
- messageUserData := readWriteModel.CastS7MessageUserData(cotpPacketData.GetPayload())
- if messageUserData == nil {
+ messageUserData, ok := cotpPacketData.GetPayload().(readWriteModel.S7MessageUserDataExactly)
+ if !ok {
return false
}
- return readWriteModel.CastS7PayloadUserData(messageUserData.GetPayload()) != nil
+ _, ok = messageUserData.GetPayload().(readWriteModel.S7PayloadUserDataExactly)
+ return ok
},
func(message spi.Message) error {
- tpktPacket := readWriteModel.CastTPKTPacket(message)
- cotpPacketData := readWriteModel.CastCOTPPacketData(tpktPacket.GetPayload())
- messageUserData := readWriteModel.CastS7MessageUserData(cotpPacketData.GetPayload())
- s7IdentificationResult <- readWriteModel.CastS7PayloadUserData(messageUserData.GetPayload())
+ tpktPacket := message.(readWriteModel.TPKTPacket)
+ cotpPacketData := tpktPacket.GetPayload().(readWriteModel.COTPPacketData)
+ messageUserData := cotpPacketData.GetPayload().(readWriteModel.S7MessageUserData)
+ s7IdentificationResult <- messageUserData.GetPayload().(readWriteModel.S7PayloadUserData)
return nil
},
func(err error) error {
diff --git a/plc4go/internal/s7/Field.go b/plc4go/internal/s7/Field.go
index cde3d126b..f28cd7b89 100644
--- a/plc4go/internal/s7/Field.go
+++ b/plc4go/internal/s7/Field.go
@@ -23,31 +23,31 @@ import (
"fmt"
"github.com/apache/plc4x/plc4go/internal/spi/utils"
"github.com/apache/plc4x/plc4go/pkg/api/model"
- readWrite "github.com/apache/plc4x/plc4go/protocols/s7/readwrite/model"
- "github.com/pkg/errors"
+ readWriteModel "github.com/apache/plc4x/plc4go/protocols/s7/readwrite/model"
)
-type S7PlcField interface {
- GetDataType() readWrite.TransportSize
+type PlcField interface {
+ model.PlcField
+ GetDataType() readWriteModel.TransportSize
GetNumElements() uint16
GetBlockNumber() uint16
- GetMemoryArea() readWrite.MemoryArea
+ GetMemoryArea() readWriteModel.MemoryArea
GetByteOffset() uint16
GetBitOffset() uint8
}
-type PlcField struct {
+type plcField struct {
FieldType FieldType
- MemoryArea readWrite.MemoryArea
+ MemoryArea readWriteModel.MemoryArea
BlockNumber uint16
ByteOffset uint16
BitOffset uint8
NumElements uint16
- Datatype readWrite.TransportSize
+ Datatype readWriteModel.TransportSize
}
-func NewField(memoryArea readWrite.MemoryArea, blockNumber uint16, byteOffset uint16, bitOffset uint8, numElements uint16, datatype readWrite.TransportSize) PlcField {
- return PlcField{
+func NewField(memoryArea readWriteModel.MemoryArea, blockNumber uint16, byteOffset uint16, bitOffset uint8, numElements uint16, datatype readWriteModel.TransportSize) PlcField {
+ return plcField{
FieldType: S7Field,
MemoryArea: memoryArea,
BlockNumber: blockNumber,
@@ -59,13 +59,13 @@ func NewField(memoryArea readWrite.MemoryArea, blockNumber uint16, byteOffset ui
}
type PlcStringField struct {
- PlcField
+ plcField
stringLength uint16
}
-func NewStringField(memoryArea readWrite.MemoryArea, blockNumber uint16, byteOffset uint16, bitOffset uint8, numElements uint16, stringLength uint16, datatype readWrite.TransportSize) PlcStringField {
+func NewStringField(memoryArea readWriteModel.MemoryArea, blockNumber uint16, byteOffset uint16, bitOffset uint8, numElements uint16, stringLength uint16, datatype readWriteModel.TransportSize) PlcStringField {
return PlcStringField{
- PlcField: PlcField{
+ plcField: plcField{
FieldType: S7StringField,
MemoryArea: memoryArea,
BlockNumber: blockNumber,
@@ -78,51 +78,44 @@ func NewStringField(memoryArea readWrite.MemoryArea, blockNumber uint16, byteOff
}
}
-func (m PlcField) GetAddressString() string {
+func (m plcField) GetAddressString() string {
// TODO: add missing variables like memory area, block number, byte offset, bit offset
return fmt.Sprintf("%d:%s[%d]", m.FieldType, m.Datatype, m.NumElements)
}
-func (m PlcField) GetTypeName() string {
+func (m plcField) GetTypeName() string {
return m.Datatype.String()
}
-func (m PlcField) GetDataType() readWrite.TransportSize {
+func (m plcField) GetDataType() readWriteModel.TransportSize {
return m.Datatype
}
-func (m PlcField) GetNumElements() uint16 {
+func (m plcField) GetNumElements() uint16 {
return m.NumElements
}
-func (m PlcField) GetBlockNumber() uint16 {
+func (m plcField) GetBlockNumber() uint16 {
return m.BlockNumber
}
-func (m PlcField) GetMemoryArea() readWrite.MemoryArea {
+func (m plcField) GetMemoryArea() readWriteModel.MemoryArea {
return m.MemoryArea
}
-func (m PlcField) GetByteOffset() uint16 {
+func (m plcField) GetByteOffset() uint16 {
return m.ByteOffset
}
-func (m PlcField) GetBitOffset() uint8 {
+func (m plcField) GetBitOffset() uint8 {
return m.BitOffset
}
-func (m PlcField) GetQuantity() uint16 {
+func (m plcField) GetQuantity() uint16 {
return m.NumElements
}
-func CastTos7FieldFromPlcField(plcField model.PlcField) (PlcField, error) {
- if s7Field, ok := plcField.(PlcField); ok {
- return s7Field, nil
- }
- return PlcField{}, errors.New("couldn't cast to s7PlcField")
-}
-
-func (m PlcField) Serialize(writeBuffer utils.WriteBuffer) error {
+func (m plcField) Serialize(writeBuffer utils.WriteBuffer) error {
if err := writeBuffer.PushContext(m.FieldType.GetName()); err != nil {
return err
}
diff --git a/plc4go/internal/s7/MessageCodec.go b/plc4go/internal/s7/MessageCodec.go
index 41716b4b9..2a2f7f697 100644
--- a/plc4go/internal/s7/MessageCodec.go
+++ b/plc4go/internal/s7/MessageCodec.go
@@ -46,7 +46,7 @@ func (m *MessageCodec) GetCodec() spi.MessageCodec {
func (m *MessageCodec) Send(message spi.Message) error {
log.Trace().Msg("Sending message")
// Cast the message to the correct type of struct
- tpktPacket := model.CastTPKTPacket(message)
+ tpktPacket := message.(model.TPKTPacketExactly)
// Serialize the request
wb := utils.NewWriteBufferByteBased()
err := tpktPacket.Serialize(wb)
diff --git a/plc4go/internal/s7/Reader.go b/plc4go/internal/s7/Reader.go
index a63cc1d03..379ae64b4 100644
--- a/plc4go/internal/s7/Reader.go
+++ b/plc4go/internal/s7/Reader.go
@@ -100,12 +100,12 @@ func (m *Reader) Read(readRequest model.PlcReadRequest) <-chan model.PlcReadRequ
if err := m.messageCodec.SendRequest(
tpktPacket,
func(message spi.Message) bool {
- tpktPacket := readWriteModel.CastTPKTPacket(message)
- if tpktPacket == nil {
+ tpktPacket, ok := message.(readWriteModel.TPKTPacketExactly)
+ if !ok {
return false
}
- cotpPacketData := readWriteModel.CastCOTPPacketData(tpktPacket.GetPayload())
- if cotpPacketData == nil {
+ cotpPacketData, ok := tpktPacket.GetPayload().(readWriteModel.COTPPacketDataExactly)
+ if !ok {
return false
}
payload := cotpPacketData.GetPayload()
@@ -117,8 +117,8 @@ func (m *Reader) Read(readRequest model.PlcReadRequest) <-chan model.PlcReadRequ
func(message spi.Message) error {
// Convert the response into an
log.Trace().Msg("convert response to ")
- tpktPacket := readWriteModel.CastTPKTPacket(message)
- cotpPacketData := readWriteModel.CastCOTPPacketData(tpktPacket.GetPayload())
+ tpktPacket := message.(readWriteModel.TPKTPacket)
+ cotpPacketData := tpktPacket.GetPayload().(readWriteModel.COTPPacketData)
payload := cotpPacketData.GetPayload()
// Convert the s7 response into a PLC4X response
log.Trace().Msg("convert response to PLC4X response")
@@ -211,7 +211,7 @@ func (m *Reader) ToPlc4xReadResponse(response readWriteModel.S7Message, readRequ
payloadItems := payload.GetItems()
for i, fieldName := range readRequest.GetFieldNames() {
- field := readRequest.GetField(fieldName).(S7PlcField)
+ field := readRequest.GetField(fieldName).(PlcField)
payloadItem := payloadItems[i]
responseCode := decodeResponseCode(payloadItem.GetReturnCode())
@@ -236,7 +236,7 @@ func (m *Reader) ToPlc4xReadResponse(response readWriteModel.S7Message, readRequ
// Currently we only support the S7 Any type of addresses. This helper simply converts the S7Field from PLC4X into
// S7Address objects.
func encodeS7Address(field model.PlcField) (readWriteModel.S7Address, error) {
- s7Field, ok := field.(S7PlcField)
+ s7Field, ok := field.(PlcField)
if !ok {
return nil, errors.Errorf("Unsupported address type %t", field)
}
diff --git a/plc4go/internal/s7/Writer.go b/plc4go/internal/s7/Writer.go
index 004f86cfa..3c99e31ae 100644
--- a/plc4go/internal/s7/Writer.go
+++ b/plc4go/internal/s7/Writer.go
@@ -103,12 +103,12 @@ func (m Writer) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteR
if err := m.messageCodec.SendRequest(
tpktPacket,
func(message spi.Message) bool {
- tpktPacket := readWriteModel.CastTPKTPacket(message)
- if tpktPacket == nil {
+ tpktPacket, ok := message.(readWriteModel.TPKTPacketExactly)
+ if !ok {
return false
}
- cotpPacketData := readWriteModel.CastCOTPPacketData(tpktPacket.GetPayload())
- if cotpPacketData == nil {
+ cotpPacketData, ok := tpktPacket.GetPayload().(readWriteModel.COTPPacketDataExactly)
+ if !ok {
return false
}
payload := cotpPacketData.GetPayload()
@@ -120,8 +120,8 @@ func (m Writer) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteR
func(message spi.Message) error {
// Convert the response into an
log.Trace().Msg("convert response to ")
- tpktPacket := readWriteModel.CastTPKTPacket(message)
- cotpPacketData := readWriteModel.CastCOTPPacketData(tpktPacket.GetPayload())
+ tpktPacket := message.(readWriteModel.TPKTPacket)
+ cotpPacketData := tpktPacket.GetPayload().(readWriteModel.COTPPacketData)
payload := cotpPacketData.GetPayload()
// Convert the s7 response into a PLC4X response
log.Trace().Msg("convert response to PLC4X response")
@@ -225,7 +225,7 @@ func (m Writer) ToPlc4xWriteResponse(response readWriteModel.S7Message, writeReq
}
func serializePlcValue(field model.PlcField, plcValue values.PlcValue) (readWriteModel.S7VarPayloadDataItem, error) {
- s7Field, ok := field.(S7PlcField)
+ s7Field, ok := field.(PlcField)
if !ok {
return nil, errors.Errorf("Unsupported address type %t", field)
}
diff --git a/plc4go/internal/simulated/Reader_test.go b/plc4go/internal/simulated/Reader_test.go
index 89e5e2701..00895f529 100644
--- a/plc4go/internal/simulated/Reader_test.go
+++ b/plc4go/internal/simulated/Reader_test.go
@@ -20,7 +20,7 @@
package simulated
import (
- s72 "github.com/apache/plc4x/plc4go/internal/s7"
+ s7 "github.com/apache/plc4x/plc4go/internal/s7"
model3 "github.com/apache/plc4x/plc4go/internal/spi/model"
values2 "github.com/apache/plc4x/plc4go/internal/spi/values"
"github.com/apache/plc4x/plc4go/pkg/api/model"
@@ -142,15 +142,7 @@ func TestReader_Read(t *testing.T) {
},
args: args{
fields: map[string]model.PlcField{
- "test": s72.PlcField{
- FieldType: s72.S7Field,
- MemoryArea: model4.MemoryArea_DATA_BLOCKS,
- BlockNumber: 1,
- ByteOffset: 1,
- BitOffset: 0,
- NumElements: 1,
- Datatype: model4.TransportSize_BOOL,
- },
+ "test": s7.NewField(model4.MemoryArea_DATA_BLOCKS, 1, 1, 0, 1, model4.TransportSize_BOOL),
},
fieldNames: []string{"test"},
},
diff --git a/plc4go/internal/simulated/Writer_test.go b/plc4go/internal/simulated/Writer_test.go
index 57126076f..774c2ff90 100644
--- a/plc4go/internal/simulated/Writer_test.go
+++ b/plc4go/internal/simulated/Writer_test.go
@@ -20,7 +20,7 @@
package simulated
import (
- s72 "github.com/apache/plc4x/plc4go/internal/s7"
+ s7 "github.com/apache/plc4x/plc4go/internal/s7"
model3 "github.com/apache/plc4x/plc4go/internal/spi/model"
values2 "github.com/apache/plc4x/plc4go/internal/spi/values"
"github.com/apache/plc4x/plc4go/pkg/api/model"
@@ -151,15 +151,7 @@ func TestWriter_Write(t *testing.T) {
},
args: args{
fields: map[string]model.PlcField{
- "test": s72.PlcField{
- FieldType: s72.S7Field,
- MemoryArea: model4.MemoryArea_DATA_BLOCKS,
- BlockNumber: 1,
- ByteOffset: 1,
- BitOffset: 0,
- NumElements: 1,
- Datatype: model4.TransportSize_BOOL,
- },
+ "test": s7.NewField(model4.MemoryArea_DATA_BLOCKS, 1, 1, 0, 1, model4.TransportSize_BOOL),
},
values: map[string]values.PlcValue{
"test": values2.NewPlcBOOL(false),
diff --git a/plc4go/internal/spi/PlcFieldHandler.go b/plc4go/internal/spi/PlcFieldHandler.go
index 4eebbd993..930997a19 100644
--- a/plc4go/internal/spi/PlcFieldHandler.go
+++ b/plc4go/internal/spi/PlcFieldHandler.go
@@ -22,6 +22,6 @@ package spi
import "github.com/apache/plc4x/plc4go/pkg/api/model"
type PlcFieldHandler interface {
- // ParseQuery Parser function to parse query strings for a given driver and produce PlcField instances from that
+ // ParseQuery Parser function to parse query strings for a given driver and produce plcField instances from that
ParseQuery(query string) (model.PlcField, error)
}