Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
152 changes: 142 additions & 10 deletions 0mq/test0mq4.graphml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd" xmlns:y="http://www.yworks.com/xml/graphml">
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="1749405632299" projectName="test4fun">
<graph edgedefault="directed" id="1749634499987" projectName="test4fun">
<node id="bd92f9d8-7d63-42b2-968b-3909ef4c7237">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="50" width="136" x="587.1578118466556" y="100.44232926537836"/>
<y:Geometry height="50" width="136" x="590.4776831985885" y="94.90921034549002"/>
<y:Fill color="#ffcc00" opacity="1"/>
<y:BorderStyle color="#000" width="1"/>
<y:NodeLabel>PZ:pmpymax.py</y:NodeLabel>
Expand All @@ -17,7 +17,7 @@
<node id="d95f7887-42bf-4e12-a022-021869701c6a">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="50" width="122" x="260.2237964505762" y="311.3201270682564"/>
<y:Geometry height="50" width="122" x="355.1430245621742" y="381.426750852234"/>
<y:Fill color="#ffcc00" opacity="1"/>
<y:BorderStyle color="#000" width="1"/>
<y:NodeLabel>CZ:cpymax.py</y:NodeLabel>
Expand All @@ -28,7 +28,7 @@
<node id="f56f8b24-41a6-45b4-882b-6596040b6af0">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="50" width="159" x="603" y="306.7736228262331"/>
<y:Geometry height="50" width="159" x="601.680128648067" y="382.4133655300991"/>
<y:Fill color="#ffcc00" opacity="1"/>
<y:BorderStyle color="#000" width="1"/>
<y:NodeLabel>F1:funcall_zmq.py</y:NodeLabel>
Expand All @@ -39,7 +39,7 @@
<node id="db31be3f-3e58-4c36-979d-41fb28aefe68">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="50" width="169" x="336.01863708558665" y="100.93769244530341"/>
<y:Geometry height="50" width="169" x="332.6987657336537" y="94.2979497414374"/>
<y:Fill color="#ffcc00" opacity="1"/>
<y:BorderStyle color="#000" width="1"/>
<y:NodeLabel>F2:funbody_zmq.py</y:NodeLabel>
Expand All @@ -54,7 +54,7 @@
<y:Arrows source="none" target="delta"/>
<y:EdgeLabel>U</y:EdgeLabel>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="462.11189861303046" y="308.64234395420476"/>
<y:Point x="508.9115766843281" y="382.05264766318663"/>
</y:Path>
</y:GenericEdge>
</data>
Expand All @@ -66,7 +66,7 @@
<y:Arrows source="none" target="delta"/>
<y:EdgeLabel>Y</y:EdgeLabel>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="367.6090946002987" y="246.02075112116216"/>
<y:Point x="423.7156210948696" y="308.20768730653435"/>
</y:Path>
</y:GenericEdge>
</data>
Expand All @@ -78,7 +78,7 @@
<y:Arrows source="none" target="delta"/>
<y:EdgeLabel>U2</y:EdgeLabel>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="503.8382244660904" y="100.60667393916803"/>
<y:Point x="503.8382244673214" y="94.70390953396765"/>
</y:Path>
</y:GenericEdge>
</data>
Expand All @@ -90,7 +90,7 @@
<y:Arrows source="none" target="delta"/>
<y:EdgeLabel>Y2</y:EdgeLabel>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="405.3581746383734" y="34.67328832493144"/>
<y:Point x="398.0428316759128" y="19.435495567257725"/>
</y:Path>
</y:GenericEdge>
</data>
Expand All @@ -102,7 +102,7 @@
<y:Arrows source="none" target="delta"/>
<y:EdgeLabel>0x1234_U3</y:EdgeLabel>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="485.7225570685165" y="216.3556576357683"/>
<y:Point x="478.81870716131584" y="250.85565763576832"/>
</y:Path>
</y:GenericEdge>
</data>
Expand Down Expand Up @@ -599,5 +599,137 @@
</equivalent>
<hash>6455bbb0a3114ec3ba44920b64bd0266</hash>
</actionHistory>
<actionHistory>
<tid>1749634829919</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MjYwLjIyMzc5NjQ1MDU3NjIsInkiOjMxMS4zMjAxMjcwNjgyNTY0fSx7IngiOjI2MS4yMjM3OTY0NTA1NzYyLCJ5IjozODguMzIwMTI3MDY4MjU2NH1d</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MjYxLjIyMzc5NjQ1MDU3NjIsInkiOjM4OC4zMjAxMjcwNjgyNTY0fSx7IngiOjI2MC4yMjM3OTY0NTA1NzYyLCJ5IjozMTEuMzIwMTI3MDY4MjU2NH1d</parameters>
</equivalent>
<hash>6db1c3f5876e499e3af23bc64c8c5bb0</hash>
</actionHistory>
<actionHistory>
<tid>1749634829941</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjAzLCJ5IjozMDYuNzczNjIyODI2MjMzMX0seyJ4Ijo2MDQsInkiOjM4My43NzM2MjI4MjYyMzMxfV0=</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA0LCJ5IjozODMuNzczNjIyODI2MjMzMX0seyJ4Ijo2MDMsInkiOjMwNi43NzM2MjI4MjYyMzMxfV0=</parameters>
</equivalent>
<hash>cbf7736ec743327ba43b837143224398</hash>
</actionHistory>
<actionHistory>
<tid>1749634835985</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MjYxLjIyMzc5NjQ1MDU3NjIsInkiOjM4OC4zMjAxMjcwNjgyNTY0fSx7IngiOjMzNS4yMjM3OTY0NTA1NzYyLCJ5IjozODAuMzIwMTI3MDY4MjU2NH1d</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MzM1LjIyMzc5NjQ1MDU3NjIsInkiOjM4MC4zMjAxMjcwNjgyNTY0fSx7IngiOjI2MS4yMjM3OTY0NTA1NzYyLCJ5IjozODguMzIwMTI3MDY4MjU2NH1d</parameters>
</equivalent>
<hash>bcd1d06be8ec425b80883b7e8ed78ebb</hash>
</actionHistory>
<actionHistory>
<tid>1749634843769</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA0LCJ5IjozODMuNzczNjIyODI2MjMzMX0seyJ4Ijo2MDUsInkiOjM3NS43NzM2MjI4MjYyMzMxfV0=</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA1LCJ5IjozNzUuNzczNjIyODI2MjMzMX0seyJ4Ijo2MDQsInkiOjM4My43NzM2MjI4MjYyMzMxfV0=</parameters>
</equivalent>
<hash>d22a89c1436e739adc827b2c9c5ed9fb</hash>
</actionHistory>
<actionHistory>
<tid>1749638394047</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA1LCJ5IjozNzUuNzczNjIyODI2MjMzMX0seyJ4Ijo2MDYuMTA2NjIzNzgzOTc3NiwieSI6Mzg0LjYyNjYxMzA5ODA1NDQ2fV0=</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA2LjEwNjYyMzc4Mzk3NzYsInkiOjM4NC42MjY2MTMwOTgwNTQ0Nn0seyJ4Ijo2MDUsInkiOjM3NS43NzM2MjI4MjYyMzMxfV0=</parameters>
</equivalent>
<hash>98a2cdaa9c637e3b1f80e191689ef228</hash>
</actionHistory>
<actionHistory>
<tid>1749638406118</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MzM1LjIyMzc5NjQ1MDU3NjIsInkiOjM4MC4zMjAxMjcwNjgyNTY0fSx7IngiOjM1NS4xNDMwMjQ1NjIxNzQyLCJ5IjozODEuNDI2NzUwODUyMjM0fV0=</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MzU1LjE0MzAyNDU2MjE3NDIsInkiOjM4MS40MjY3NTA4NTIyMzR9LHsieCI6MzM1LjIyMzc5NjQ1MDU3NjIsInkiOjM4MC4zMjAxMjcwNjgyNTY0fV0=</parameters>
</equivalent>
<hash>461addecc2f83c39d144dd59fe140d7a</hash>
</actionHistory>
<actionHistory>
<tid>1749638411387</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA2LjEwNjYyMzc4Mzk3NzYsInkiOjM4NC42MjY2MTMwOTgwNTQ0Nn0seyJ4Ijo2MDEuNjgwMTI4NjQ4MDY3LCJ5IjozODIuNDEzMzY1NTMwMDk5MX1d</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjAxLjY4MDEyODY0ODA2NywieSI6MzgyLjQxMzM2NTUzMDA5OTF9LHsieCI6NjA2LjEwNjYyMzc4Mzk3NzYsInkiOjM4NC42MjY2MTMwOTgwNTQ0Nn1d</parameters>
</equivalent>
<hash>a65da086d27f4b89fde06386803b6c83</hash>
</actionHistory>
<actionHistory>
<tid>1749638417166</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo1OTEuNTg0MzA2OTgyNTY2MiwieSI6MTAxLjU0ODk1MzA0OTM1NjAzfV0=</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTkxLjU4NDMwNjk4MjU2NjIsInkiOjEwMS41NDg5NTMwNDkzNTYwM30seyJ4Ijo1ODcuMTU3ODExODQ2NjU1NiwieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fV0=</parameters>
</equivalent>
<hash>f084c23a413d578cc6f24c99f4abf593</hash>
</actionHistory>
<actionHistory>
<tid>1749638421768</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTkxLjU4NDMwNjk4MjU2NjIsInkiOjEwMS41NDg5NTMwNDkzNTYwM30seyJ4Ijo1OTAuNDc3NjgzMTk4NTg4NSwieSI6OTQuOTA5MjEwMzQ1NDkwMDJ9XQ==</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTkwLjQ3NzY4MzE5ODU4ODUsInkiOjk0LjkwOTIxMDM0NTQ5MDAyfSx7IngiOjU5MS41ODQzMDY5ODI1NjYyLCJ5IjoxMDEuNTQ4OTUzMDQ5MzU2MDN9XQ==</parameters>
</equivalent>
<hash>7351dd339614af3284a27265645c683e</hash>
</actionHistory>
<actionHistory>
<tid>1749638428404</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6MzM0LjkxMjAxMzMwMTYwODk3LCJ5Ijo5MC45NzgwNzgzODk1MDQ0fV0=</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM0LjkxMjAxMzMwMTYwODk3LCJ5Ijo5MC45NzgwNzgzODk1MDQ0fSx7IngiOjMzNi4wMTg2MzcwODU1ODY2NSwieSI6MTAwLjkzNzY5MjQ0NTMwMzQxfV0=</parameters>
</equivalent>
<hash>e6e0b6e82708953b8f2a3a53d75d7480</hash>
</actionHistory>
<actionHistory>
<tid>1749638434730</tid>
<inverse>
<actionName>SET_POS</actionName>
<parameters>WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM0LjkxMjAxMzMwMTYwODk3LCJ5Ijo5MC45NzgwNzgzODk1MDQ0fSx7IngiOjMzMi42OTg3NjU3MzM2NTM3LCJ5Ijo5NC4yOTc5NDk3NDE0Mzc0fV0=</parameters>
</inverse>
<equivalent>
<actionName>SET_POS</actionName>
<parameters>WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzMyLjY5ODc2NTczMzY1MzcsInkiOjk0LjI5Nzk0OTc0MTQzNzR9LHsieCI6MzM0LjkxMjAxMzMwMTYwODk3LCJ5Ijo5MC45NzgwNzgzODk1MDQ0fV0=</parameters>
</equivalent>
<hash>5308877f34d57a16e83da8243a43a98f</hash>
</actionHistory>
</graph>
</graphml>
32 changes: 29 additions & 3 deletions concore.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,38 @@ def __init__(self, port_type, address, zmq_socket_type):
self.socket = self.context.socket(zmq_socket_type)
self.port_type = port_type # "bind" or "connect"
self.address = address

self.socket.setsockopt(zmq.RCVTIMEO, 2000)
self.socket.setsockopt(zmq.SNDTIMEO, 2000)
self.socket.setsockopt(zmq.LINGER, 0)

if self.port_type == "bind":
self.socket.bind(address)
print(f"ZMQ Port bound to {address}")
else:
self.socket.connect(address)
print(f"ZMQ Port connected to {address}")

def send_json_with_retry(self, message):
for attempt in range(5):
try:
self.socket.send_json(message)
return
except zmq.Again:
print(f"Send timeout (attempt {attempt + 1}/5)")
time.sleep(0.5)
print("Failed to send after retries.")
return

def recv_json_with_retry(self):
for attempt in range(5):
try:
return self.socket.recv_json()
except zmq.Again:
print(f"Receive timeout (attempt {attempt + 1}/5)")
time.sleep(0.5)
print("Failed to receive after retries.")
return None

# Global ZeroMQ ports registry
zmq_ports = {}
Expand Down Expand Up @@ -143,7 +169,7 @@ def read(port_identifier, name, initstr_val):
if isinstance(port_identifier, str) and port_identifier in zmq_ports:
zmq_p = zmq_ports[port_identifier]
try:
message = zmq_p.socket.recv_json()
message = zmq_p.recv_json_with_retry()
return message
except zmq.error.ZMQError as e:
print(f"ZMQ read error on port {port_identifier} (name: {name}): {e}. Returning default.")
Expand Down Expand Up @@ -209,12 +235,12 @@ def write(port_identifier, name, val, delta=0):
if isinstance(port_identifier, str) and port_identifier in zmq_ports:
zmq_p = zmq_ports[port_identifier]
try:
zmq_p.socket.send_json(val)
zmq_p.send_json_with_retry(val)
except zmq.error.ZMQError as e:
print(f"ZMQ write error on port {port_identifier} (name: {name}): {e}")
except Exception as e:
print(f"Unexpected error during ZMQ write on port {port_identifier} (name: {name}): {e}")
return

try:
if isinstance(port_identifier, str) and port_identifier in zmq_ports:
file_path = os.path.join("../"+port_identifier, name)
Expand Down