Hello Demo as a Sequential ProgramΒΆ
Covers:
Sequential Program Modelling
This demo shows the same behavior as Hello, but uses the Moddy sequential program model. I models how two persons, Bob and Joe, talk to eachother.
The words they are talking are the mesages.
The persons send and receive the voice at their IO-port head.
"""
@author: klauspopp@gmx.de
The Moddy 1_hello demo modelled using Moddy sequential programs
"""
import moddy
def bob_prog(self: moddy.VSimpleProg):
    # bob starts talking
    self.head.send("Hi Joe", 1)
    while True:
        msg = self.wait_for_msg(None, self.head)
        self.annotation("got message " + msg)
        self.busy(1.4, "Think")
        if msg == "Hi, How are you?":
            reply = "How are you?"
        else:
            reply = "Hm?"
        self.head.send(reply, 1)
def joe_prog(self: moddy.VSimpleProg):
    while True:
        msg = self.wait_for_msg(None, self.head)
        self.annotation("got message " + msg)
        self.busy(2, "Think")
        if msg == "Hi Joe":
            reply = "Hi, How are you?"
        elif msg == "How are you?":
            reply = "Fine"
        else:
            reply = "Hm?"
        self.head.send(reply, 1.5)
if __name__ == "__main__":
    SIMU = moddy.Sim()
    moddy.VSimpleProg(
        sim=SIMU, obj_name="Bob", target=bob_prog, elems={"QueuingIO": "head"}
    )
    moddy.VSimpleProg(
        sim=SIMU, obj_name="Joe", target=joe_prog, elems={"QueuingIO": "head"}
    )
    SIMU.smart_bind([["Bob.head", "Joe.head"]])
    # let simulator run
    SIMU.run(stop_time=12.0)
    # Output sequence diagram
    moddy.gen_interactive_sequence_diagram(
        sim=SIMU,
        file_name="output/8_hello_program.html",
        show_parts_list=["Bob", "Joe"],
        time_per_div=1.0,
        pix_per_div=30,
        title="Hello Program Demo",
    )
    # Output model structure graph
    moddy.gen_dot_structure_graph(SIMU, "output/8_hello_structure.svg")
The simulation outputs: