Multiple Output Ports bound to one Input PortΒΆ
This demo demonstrates how multiple output ports can be connected to a single input port. Available since Moddy 1.8.
"""
test binding of multiple output ports to a single input port
@author: klauspopp@gmx.de
"""
import moddy
from moddy import MS, US
def producer_prog(self):
self.net_port2.set_color("blue")
while True:
self.wait(100 * US)
self.net_port1.send("test1a", 100 * US)
self.net_port2.send("test2a", 100 * US)
self.busy(100 * US, "TX1", moddy.BC_WHITE_ON_BLUE)
self.net_port1.send("test1b", 100 * US)
self.busy(100 * US, "TX1", moddy.BC_WHITE_ON_BLUE)
self.net_port2.send("test2b", 100 * US)
def consumer_prog(self):
while True:
msg = self.wait_for_msg(timeout=None, ports=self.net_port)
self.annotation("got message " + msg)
if __name__ == "__main__":
SIMU = moddy.Sim()
SIMU.tracing.set_display_time_unit("us")
PROD = moddy.VSimpleProg(
sim=SIMU,
obj_name="Producer",
target=producer_prog,
elems={"out": ["net_port1", "net_port2"]},
)
CONS = moddy.VSimpleProg(
sim=SIMU,
obj_name="Consumer",
target=consumer_prog,
elems={"QueuingIn": "net_port"},
)
# bind two output ports to same input port
SIMU.smart_bind(
[["Producer.net_port1", "Producer.net_port2", "Consumer.net_port"]]
)
# let simulator run
try:
SIMU.run(stop_time=3 * MS)
except Exception:
raise
finally:
# create sequence diagram
moddy.gen_interactive_sequence_diagram(
sim=SIMU,
file_name="output/7_multi_port_binding.html",
show_parts_list=["Producer", "Consumer"],
excluded_element_list=["allTimers"],
title="Multi Port Binding",
time_per_div=50 * US,
pix_per_div=30,
)
# Output model structure graph
moddy.gen_dot_structure_graph(
SIMU, "output/7_multi_port_binding_structure.svg"
)
The simulation outputs: