blob: 1cf6bbbc4c32f3313506c097ea057bad20f25877 [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
== EIP Protocol
// https://plantuml.com/de/activity-diagram-legacy
// https://deepu.js.org/svg-seq-diagram/Reference_Guide.pdf
[plantuml,eip-statemachine,svg,opts="inline",svg-type="inline"]
----
@startuml
(*) --> Connect
partition "Connected" #EEEEEE {
===Connected=== -->[API Browse Request] Browse
===Connected=== -->[API Read Request] Read
===Connected=== -->[API Write Request] Write
===Connected=== -->[API Subscription Request] Subscribe
===Connected=== -->[API Unsubscription Request] Unsubscribe
===Connected=== -->[API Disconnect Request] Disconnect
}
partition Connect #EEEECC {
(*) --> "initializing"
"initializing" --> "Send ListServices request"
"Send ListServices request" ..> "Receive ListServices response"
"Receive ListServices response" -->[If successfull, extract 'CIP encapsulation support' setting] "Send EipConnectionRequest request"
"Send EipConnectionRequest request" ..> "Receive EipConnectionRequest response"
if "Response is an EipConnectionResponse"?
-->[true] "Send GetAllAttributes request"
else
-->[false] "Send OpenConnectionManager request"
endif
"Send GetAllAttributes request" ..> "Receive GetAllAttributes response"
if "Extract setting for 'useMessageRouter' and 'useConnectionManager'. If useConnectionManager"
-->[true] "Send OpenConnectionManager request"
else
-->[false] ===Connected===
endif
"Send OpenConnectionManager request" ..> "Receive OpenConnectionManager response"
"Receive OpenConnectionManager response" --> ===Connected===
}
partition Disconnect #EECCCC {
"Disconnect" --> ===DisconnectStart===
if "connectionId != 0"
-->[true] "Send ConnectionManagerClose request"
else
-->[false] "Send Disconnect request"
endif
"Send ConnectionManagerClose request" ..> "Receive ConnectionManagerClose response"
"Receive ConnectionManagerClose response" --> "Send Disconnect request"
"Send Disconnect request" ..> "Receive Disconnect response"
"Receive Disconnect response" --> ===Disconnected===
}
partition Browse #CCCCEE {
"Browse" --> ===BrowseStart===
===BrowseStart=== --> ===Connected===
}
partition Read #CCEECC {
"Read" --> ===ReadStart===
if "useMessageRouter"
if "useConnectionManager"
-->[true] "readWithConnectionManager"
else
-->[false] "readWithoutConnectionManager"
endif
else
-->[false] "readWithoutMessageRouter"
endif
"readWithConnectionManager" --> "Send SendUnitData request"
"Send SendUnitData request" ..> "Receive SendUnitData response"
"Receive SendUnitData response" --> ===Connected===
"readWithoutConnectionManager" --> "Send CipRRData request"
"Send CipRRData request" ..> "Receive CipRRData response"
"Receive CipRRData response" --> ===Connected===
"readWithoutMessageRouter" --> "Send unconnected CipReadRequest request for each tag"
"Send unconnected CipReadRequest request for each tag" ..> "Receive unconnected CipReadRequest response"
"Receive unconnected CipReadRequest response" --> ===Connected===
}
partition Write #EECCCC {
"Write" --> ===WriteStart===
if "useMessageRouter"
if "useConnectionManager"
-->[true] "writeWithConnectionManager"
else
-->[false] "writeWithoutConnectionManager"
endif
else
-->[false] "writeWithoutMessageRouter"
endif
"writeWithConnectionManager" --> "Send SendUnitData request"
"Send SendUnitData request" ..> "Receive SendUnitData response"
"Receive SendUnitData response" --> ===Connected===
"writeWithoutConnectionManager" --> "Send CipRRData request"
"Send CipRRData request" ..> "Receive CipRRData response"
"Receive CipRRData response" --> ===Connected===
"writeWithoutMessageRouter" --> "Send unconnected CipWriteRequest request for each tag"
"Send unconnected CipWriteRequest request for each tag" ..> "Receive unconnected CipWriteRequest response"
"Receive unconnected CipWriteRequest response" --> ===Connected===
}
partition Subscribe #EECCEE {
"Subscribe" --> ===SubscribeStart===
===SubscribeStart=== --> ===Connected===
}
partition Unsubscribe #LightSkyBlue {
"Unsubscribe" --> ===UnsubscribeStart===
===UnsubscribeStart=== --> ===Connected===
}
@enduml
----