Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
185 commits
Select commit Hold shift + click to select a range
ce1a438
change logging
seb711 Oct 13, 2021
bfe1634
reset
seb711 Oct 13, 2021
268021c
test
seb711 Oct 13, 2021
6f88a87
fix
seb711 Oct 13, 2021
9d238d5
test
seb711 Oct 13, 2021
6df53d5
est
seb711 Oct 13, 2021
02b80ab
teest
seb711 Oct 13, 2021
e2483bc
bugfx
seb711 Oct 13, 2021
1bc1d06
test
seb711 Oct 13, 2021
8ace1c1
t
seb711 Oct 13, 2021
c71a167
test
seb711 Feb 23, 2022
adf1e34
test
seb711 Feb 23, 2022
4562918
test
seb711 Feb 23, 2022
455946a
test
seb711 Feb 23, 2022
3dd7ee9
test
seb711 Feb 23, 2022
6b0dc32
new swat project devices
seb711 Feb 26, 2022
5a78e38
new swat project
seb711 Feb 26, 2022
7ffc8dc
save
seb711 Feb 26, 2022
0ab3d9b
test
seb711 Feb 26, 2022
eea8a11
test
seb711 Feb 26, 2022
bec5b71
state
seb711 Feb 26, 2022
e32bb20
test
seb711 Feb 26, 2022
f79713d
test
seb711 Feb 26, 2022
eeee78f
test
seb711 Feb 26, 2022
c5d5093
rtets
seb711 Feb 26, 2022
9d3315e
rt
seb711 Feb 26, 2022
c094686
test
seb711 Feb 26, 2022
ed13cb3
test
seb711 Feb 26, 2022
9a28d47
test
seb711 Feb 26, 2022
6261fff
test
seb711 Feb 26, 2022
673883b
test
seb711 Feb 26, 2022
66f64eb
test
seb711 Feb 26, 2022
d13879a
tet
seb711 Feb 26, 2022
56e1131
est
seb711 Feb 26, 2022
96f1540
test
seb711 Feb 26, 2022
868adc2
kjh
seb711 Feb 26, 2022
7ef6278
test
seb711 Feb 26, 2022
b3d73a2
set
seb711 Feb 26, 2022
2e37ef6
test
seb711 Feb 26, 2022
1aa0f10
dev start values
seb711 Feb 27, 2022
c29366e
timer
seb711 Feb 27, 2022
9724a05
test
seb711 Feb 27, 2022
cf564f6
test
seb711 Feb 27, 2022
0785415
test
seb711 Feb 27, 2022
f4a35ee
test
seb711 Feb 27, 2022
bdbea35
test
seb711 Feb 27, 2022
66fea46
te
seb711 Feb 27, 2022
932cb4f
new sleep
seb711 Feb 27, 2022
9884c6e
t
seb711 Feb 27, 2022
9619ab4
test
seb711 Feb 27, 2022
887ce22
test
seb711 Feb 27, 2022
ba552f3
test
seb711 Feb 27, 2022
885ba4b
test
seb711 Feb 27, 2022
556d604
test
seb711 Feb 27, 2022
7eaf2c6
test
seb711 Feb 27, 2022
0e7e31c
test
seb711 Feb 27, 2022
ebda117
final
seb711 Feb 27, 2022
68e101a
test
seb711 Feb 27, 2022
b83e497
test
seb711 Feb 27, 2022
6b4b053
test
seb711 Feb 27, 2022
cfcedee
test
seb711 Feb 27, 2022
1a1296f
test
seb711 Feb 27, 2022
5fd419f
test
seb711 Feb 27, 2022
9e87544
test
seb711 Feb 27, 2022
e63138f
test
seb711 Feb 27, 2022
ad60f91
test
seb711 Feb 27, 2022
acc2fed
super
seb711 Feb 28, 2022
264fbc8
test
seb711 Feb 28, 2022
f18163e
etset
seb711 Feb 28, 2022
76b64e5
ate
seb711 Feb 28, 2022
f16569b
test
seb711 Feb 28, 2022
ea0cbad
test
seb711 Feb 28, 2022
ac1d741
test
seb711 Feb 28, 2022
9151a5b
test
seb711 Feb 28, 2022
e650cf7
test
seb711 Feb 28, 2022
a703ef5
test
seb711 Feb 28, 2022
6d933c9
test
seb711 Feb 28, 2022
755e6dd
yes
seb711 Feb 28, 2022
d00f58d
yes
seb711 Feb 28, 2022
5455bd1
comand
seb711 Feb 28, 2022
c3acf47
test
seb711 Feb 28, 2022
327a753
test
seb711 Feb 28, 2022
87503c9
test
seb711 Feb 28, 2022
5b3251e
test
seb711 Feb 28, 2022
5f1f2ea
test
seb711 Feb 28, 2022
3f065f0
test
seb711 Feb 28, 2022
2bc1bad
test
seb711 Feb 28, 2022
82cc797
test
seb711 Feb 28, 2022
94e5c5e
test
seb711 Feb 28, 2022
da30ef4
test
seb711 Feb 28, 2022
7faf915
test
seb711 Feb 28, 2022
91309c0
test
seb711 Feb 28, 2022
4d2f909
test
seb711 Mar 2, 2022
02a4b32
test
seb711 Mar 2, 2022
63c8362
test
seb711 Mar 2, 2022
7b3cb58
test
seb711 Mar 2, 2022
0ad9fa1
added device
seb711 Mar 2, 2022
348ddca
rwar
seb711 Mar 2, 2022
730bfbb
test
seb711 Mar 2, 2022
1d68216
test
seb711 Mar 2, 2022
c89cda4
test
seb711 Mar 2, 2022
711e108
test
seb711 Mar 2, 2022
d62227a
test
seb711 Mar 2, 2022
b332ab1
test
seb711 Mar 2, 2022
4d955b1
test
seb711 Mar 2, 2022
95553e1
tet
seb711 Mar 2, 2022
ceb7007
test
seb711 Mar 2, 2022
b5d6393
test
seb711 Mar 2, 2022
272934d
test
seb711 Mar 2, 2022
6fa8073
test
seb711 Mar 2, 2022
403a62b
device sql connection
seb711 Mar 2, 2022
f226eaf
test
seb711 Mar 3, 2022
c87bce7
test
seb711 Mar 3, 2022
1073afd
test
seb711 Mar 3, 2022
8ba1367
test
seb711 Mar 3, 2022
5d38638
test
seb711 Mar 3, 2022
87c0bb3
test
seb711 Mar 3, 2022
d1a2d0a
test
seb711 Mar 3, 2022
7416c49
test
seb711 Mar 3, 2022
90b56d2
test
seb711 Mar 3, 2022
92ae93c
test
seb711 Mar 3, 2022
1e65ed2
test
seb711 Mar 3, 2022
41784dc
test
seb711 Mar 3, 2022
c454ff3
test
seb711 Mar 4, 2022
6579be1
test
seb711 Mar 4, 2022
ba9db68
test
seb711 Mar 4, 2022
f469d5d
test
seb711 Mar 4, 2022
ad8f997
test
seb711 Mar 4, 2022
a9b4a4c
test
seb711 Mar 4, 2022
1c12d71
test
seb711 Mar 4, 2022
09f0bbc
test
seb711 Mar 4, 2022
5546802
tets
seb711 Mar 4, 2022
08391b9
testt
seb711 Mar 4, 2022
5402664
test
seb711 Mar 4, 2022
f31cfa6
test
seb711 Mar 4, 2022
e8b6f0d
test
seb711 Mar 4, 2022
b5fd9f9
test
seb711 Mar 4, 2022
43b0c0f
test
seb711 Mar 4, 2022
0f5c35f
test
seb711 Mar 4, 2022
add7c09
test
seb711 Mar 4, 2022
c87d60c
test
seb711 Mar 4, 2022
a75ba35
test
seb711 Mar 4, 2022
08bc11a
test
seb711 Mar 4, 2022
72181b7
test
seb711 Mar 4, 2022
ebc1a95
test
seb711 Mar 4, 2022
9c17765
test
seb711 Mar 4, 2022
591a736
test
seb711 Mar 4, 2022
5ab2bed
test
seb711 Mar 4, 2022
c407708
test
seb711 Mar 4, 2022
2e782e9
te
seb711 Mar 4, 2022
f7db4f8
test
seb711 Mar 4, 2022
ae80904
test
seb711 Mar 4, 2022
006e866
test
seb711 Mar 4, 2022
46d83c1
test
seb711 Mar 4, 2022
6f9e6f5
test
seb711 Mar 4, 2022
8b6007e
test
seb711 Mar 4, 2022
9bf0ebe
test
seb711 Mar 4, 2022
64ae15a
tes
seb711 Mar 4, 2022
ecd958b
test
seb711 Mar 4, 2022
bf96743
test
seb711 Mar 4, 2022
78eb59b
test
seb711 Mar 4, 2022
872eee1
test
Mar 4, 2022
7841a1f
Merge branch 'added-profinet' of github.com:seb711/minicps into added…
Mar 4, 2022
21713e2
Merge branch 'added-profinet' of github.com:seb711/minicps into added…
Mar 4, 2022
c8d5d62
Merge branch 'added-profinet' of github.com:seb711/minicps into added…
Mar 4, 2022
cf3907c
test
seb711 Mar 4, 2022
89fb41d
test
seb711 Mar 4, 2022
6425d9d
test
seb711 Mar 4, 2022
2fc75f9
test
seb711 Mar 4, 2022
d797139
test
seb711 Mar 4, 2022
6696c17
mere
Mar 4, 2022
2769e35
test
seb711 Mar 4, 2022
5c02003
test
seb711 Mar 4, 2022
1bd8d06
test
seb711 Mar 4, 2022
55e6f8d
test
seb711 Mar 4, 2022
ad5010b
test
seb711 Mar 4, 2022
163ca6b
test
seb711 Mar 4, 2022
7f70039
test
seb711 Mar 4, 2022
b5767b8
test
seb711 Mar 4, 2022
275bb85
test
seb711 Mar 4, 2022
d0728d4
test
seb711 Mar 4, 2022
fbbe89e
test
seb711 Mar 6, 2022
a0419cd
test
seb711 Mar 6, 2022
492310d
test
seb711 Mar 6, 2022
90f6493
edit
seb711 Mar 6, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ target/
*.err
*.log
*.log*
*.xml
# *.xml
*.pdf
*.json
*.cache
Expand Down
Empty file added examples/swat-s1/__init__.py
Empty file.
16 changes: 8 additions & 8 deletions examples/swat-s1/physical_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ class RawWaterTank(Tank):
def pre_loop(self):

# SPHINX_SWAT_TUTORIAL STATE INIT(
self.set(MV101, 1)
self.set(P101, 0)
self.level = self.set(LIT101, 0.800)
# self.set(MV101, 1)
# self.set(P101, 0)
# self.level = self.set(LIT101, 0.800)
# SPHINX_SWAT_TUTORIAL STATE INIT)

# test underflow
# self.set(MV101, 0)
# self.set(P101, 1)
# self.level = self.set(LIT101, 0.500)
self.set(MV101, 0)
self.set(P101, 1)
self.level = self.set(LIT101, 0.500)

def main_loop(self):

Expand All @@ -60,7 +60,7 @@ def main_loop(self):
if int(mv101) == 1:
self.set(FIT101, PUMP_FLOWRATE_IN)
inflow = PUMP_FLOWRATE_IN * PP_PERIOD_HOURS
# print "DEBUG RawWaterTank inflow: ", inflow
print "DEBUG RawWaterTank inflow: ", inflow
water_volume += inflow
else:
self.set(FIT101, 0.00)
Expand All @@ -70,7 +70,7 @@ def main_loop(self):
if int(p101) == 1:
self.set(FIT201, PUMP_FLOWRATE_OUT)
outflow = PUMP_FLOWRATE_OUT * PP_PERIOD_HOURS
# print "DEBUG RawWaterTank outflow: ", outflow
print "DEBUG RawWaterTank outflow: ", outflow
water_volume -= outflow
else:
self.set(FIT201, 0.00)
Expand Down
24 changes: 12 additions & 12 deletions examples/swat-s1/plc1.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,18 +90,18 @@ def main_loop(self):
print "DEBUG PLC1 - receive lit301: %f" % lit301
self.send(LIT301_1, lit301, PLC1_ADDR)

# if fit201 <= FIT_201_THRESH or lit301 >= LIT_301_M['H']:
# # CLOSE p101
# self.set(P101, 0)
# self.send(P101, 0, PLC1_ADDR)
# print "INFO PLC1 - fit201 under FIT_201_THRESH " \
# "or over LIT_301_M['H']: -> close p101."

# elif lit301 <= LIT_301_M['L']:
# # OPEN p101
# self.set(P101, 1)
# self.send(P101, 1, PLC1_ADDR)
# print "INFO PLC1 - lit301 under LIT_301_M['L'] -> open p101."
if fit201 <= FIT_201_THRESH or lit301 >= LIT_301_M['H']:
# CLOSE p101
self.set(P101, 0)
self.send(P101, 0, PLC1_ADDR)
print "INFO PLC1 - fit201 under FIT_201_THRESH " \
"or over LIT_301_M['H']: -> close p101."

elif lit301 <= LIT_301_M['L']:
# OPEN p101
self.set(P101, 1)
self.send(P101, 1, PLC1_ADDR)
print "INFO PLC1 - lit301 under LIT_301_M['L'] -> open p101."

time.sleep(PLC_PERIOD_SEC)
count += 1
Expand Down
8 changes: 4 additions & 4 deletions examples/swat-s1/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ def __init__(self, name, net):
'plc1', 'plc2', 'plc3', 's1')

# SPHINX_SWAT_TUTORIAL RUN(
plc2.cmd(sys.executable + ' plc2.py &')
plc3.cmd(sys.executable + ' plc3.py &')
plc1.cmd(sys.executable + ' plc1.py &')
s1.cmd(sys.executable + ' physical_process.py &')
# plc2.cmd(sys.executable + ' plc2.py &')
# plc3.cmd(sys.executable + ' plc3.py &')
# plc1.cmd(sys.executable + ' plc1.py &')
# s1.cmd(sys.executable + ' physical_process.py &')
# SPHINX_SWAT_TUTORIAL RUN)

CLI(self.net)
Expand Down
Empty file added examples/swat-s2/__init__.py
Empty file.
77 changes: 77 additions & 0 deletions examples/swat-s2/dev1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
"""
swat-s1 plc1.py
"""

from minicps.devices import IODevice
from utils import DEV1_DATA, STATE, DEV1_PROTOCOL
from utils import PLC_PERIOD_SEC, PLC_SAMPLES
from utils import IP
from utils import PUMP_FLOWRATE_IN

import time

PLC1_ADDR = IP['plc1']
DEV1_ADDR = IP['dev1']

FIT101 = ('FIT101', 4)
FIT101_PLC = ('FIT101', 1)

MV101 = ('MV101', 5)


# SPHINX_SWAT_TUTORIAL PLC1 LOGIC)

# TODO: real value tag where to read/write flow sensor
class SwatDev1(IODevice):

def pre_loop(self, sleep=0.1):
print 'DEBUG: swat-s2 dev1 enters pre_loop'
start_value = 0
self.set(FIT101, start_value)
self.send(FIT101, start_value, DEV1_ADDR)
print
time.sleep(45)
time.sleep(sleep)

def main_loop(self):
"""fit101 main loop.

- reads sensors value
- updates its enip server
"""

print 'DEBUG: swat-s2 dev1 enters main_loop.'
print

count = 0
while(count <= PLC_SAMPLES):
# TODO: SIMULATE VIRTUAL PROCESS VALUE SHOULD NOT DEPEND FROM MV101 but normal deviations
mv101 = float(self.get(MV101))
fit101 = float(self.get(FIT101))

if (mv101 == 1 and fit101 == 0):
# lit101 [meters]
self.set(FIT101, PUMP_FLOWRATE_IN)
elif mv101 == 0:
self.set(FIT101, 0)

fit101 = float(self.get(FIT101))

# print 'DEBUG dev1 fit101: %.5f' % fit101
self.send(FIT101, fit101, DEV1_ADDR)

time.sleep(PLC_PERIOD_SEC)
count += 1

print 'DEBUG swat-s2 dev1 shutdown'


if __name__ == "__main__":

# notice that memory init is different form disk init
dev1 = SwatDev1(
name='dev1',
state=STATE,
protocol=DEV1_PROTOCOL,
memory=DEV1_DATA,
disk=DEV1_DATA)
61 changes: 61 additions & 0 deletions examples/swat-s2/dev2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
"""
swat-s1 plc1.py
"""

from minicps.devices import IODevice
from utils import DEV2_DATA, STATE, DEV2_PROTOCOL
from utils import PLC_PERIOD_SEC, PLC_SAMPLES
from utils import IP
from utils import PUMP_FLOWRATE_IN

import time

PLC1_ADDR = IP['plc1']
DEV2_ADDR = IP['dev2']

MV101 = ('MV101', 5)
MV101_PLC = ('MV101', 1)

# SPHINX_SWAT_TUTORIAL PLC1 LOGIC)

# TODO: real value tag where to read/write flow sensor
class SwatDev2(IODevice):

def pre_loop(self, sleep=0.1):
print 'DEBUG: swat-s2 dev2 enters pre_loop'
start_value = 1
self.set(MV101, start_value)
time.sleep(sleep)
time.sleep(45)

def main_loop(self):
"""mv101 main loop.

- reads sensors value
- updates its enip server
"""

print 'DEBUG: swat-s2 dev2 enters main_loop.'
print

count = 0
while(count <= PLC_SAMPLES):
# TODO: SIMULATE VIRTUAL PROCESS
mv101_1 = float(self.receive(MV101_PLC, PLC1_ADDR))
self.set(MV101, mv101_1)

time.sleep(PLC_PERIOD_SEC)
count += 1

print 'DEBUG swat-s2 dev2 shutdown'


if __name__ == "__main__":

# notice that memory init is different form disk init
dev2 = SwatDev2(
name='dev2',
state=STATE,
protocol=DEV2_PROTOCOL,
memory=DEV2_DATA,
disk=DEV2_DATA)
106 changes: 106 additions & 0 deletions examples/swat-s2/dev3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
"""
swat-s1 plc1.py
"""

from minicps.devices import IODevice
from utils import DEV3_DATA, STATE, DEV3_PROTOCOL
from utils import PLC_PERIOD_SEC, PLC_SAMPLES
from utils import IP
from utils import PUMP_FLOWRATE_IN
from utils import PUMP_FLOWRATE_IN, PUMP_FLOWRATE_OUT
from utils import TANK_HEIGHT, TANK_SECTION, TANK_DIAMETER
from utils import LIT_101_M, RWT_INIT_LEVEL
from utils import STATE, PP_PERIOD_SEC, PP_PERIOD_HOURS, PP_SAMPLES

import time

PLC1_ADDR = IP['plc1']
DEV3_ADDR = IP['dev3']

LIT101 = ('LIT101', 6)
LIT101_PLC = ('LIT101', 1)

MV101 = ('MV101', 5)
P101 = ('P101', 7)

# SPHINX_SWAT_TUTORIAL PLC1 LOGIC)

# TODO: real value tag where to read/write flow sensor
class SwatDev3(IODevice):

def pre_loop(self, sleep=0.1):
print 'DEBUG: swat-s2 dev2 enters pre_loop'
start_level = 0.500
time.sleep(45)
self.set(LIT101, start_level)
self.send(LIT101, start_level, DEV3_ADDR)
time.sleep(sleep)


def main_loop(self):
"""mv101 main loop.

- reads sensors value
- updates its enip server
"""

# print 'DEBUG: swat-s2 dev2 enters main_loop.'
print

count = 0
while(count <= PLC_SAMPLES):
# TODO: SIMULATE VIRTUAL PROCESS
new_level = float(self.get(LIT101))

water_volume = TANK_SECTION * new_level

# inflows volumes
mv101 = float(self.get(MV101))
if int(mv101) == 1:
inflow = PUMP_FLOWRATE_IN * PP_PERIOD_HOURS
# print "DEBUG RawWaterTank inflow: ", inflow
water_volume += inflow

# outflows volumes
p101 = float(self.get(P101))
if int(p101) == 1:
outflow = PUMP_FLOWRATE_OUT * PP_PERIOD_HOURS
# print "DEBUG RawWaterTank outflow: ", outflow
water_volume -= outflow

# compute new water_level
new_level = water_volume / TANK_SECTION

# level cannot be negative
if new_level <= 0.0:
new_level = 0.0

# update internal and state water level
self.set(LIT101, new_level)
self.send(LIT101, new_level, DEV3_ADDR)

# 988 sec starting from 0.500 m
if new_level >= LIT_101_M['HH']:
# print 'DEBUG RawWaterTank above HH count: ', count
break

# 367 sec starting from 0.500 m
elif new_level <= LIT_101_M['LL']:
# print 'DEBUG RawWaterTank below LL count: ', count
break

time.sleep(PLC_PERIOD_SEC)
count += 1

print 'DEBUG swat-s2 dev3 shutdown'


if __name__ == "__main__":

# notice that memory init is different form disk init
dev3 = SwatDev3(
name='dev3',
state=STATE,
protocol=DEV3_PROTOCOL,
memory=DEV3_DATA,
disk=DEV3_DATA)
Loading