///|
fn main {
println("==================================================")
println(
" MoonSim 供应链与物流仓储仿真示例:智能自动化产线 ",
)
println("==================================================")
let sim = @moonsim.Simulation::new()
let buffer : @resource.Store[String] = @resource.Store::new("原料仓区", 5)
let robot = sim.create_resource("组装机械臂", 1)
let battery = @resource.Container::new("蓄电池能量池", 100.0, 100.0)
let mut produced_count = 0
let mut batch_id = 1
// 1. Raw material supplier coroutine
let supplier_steps : Array[(@event.ProcessContext) -> Double?] = [
fn(ctx) {
if batch_id <= 6 {
let mat_name = "零件包-Batch#\{batch_id}"
batch_id = batch_id + 1
println(
"[\{ctx.clock.now_seconds()}s] [供应商] 送达新原料: \{mat_name},放入原料缓冲区",
)
buffer.put(mat_name, fn() {
println(
"[\{sim.now()}s] [缓冲区] \{mat_name} 成功入库,当前库内容量: \{buffer.size()}/\{buffer.capacity()}",
)
})
Some(1.8) // New batch arrives every 1.8s
} else {
None
}
},
]
let _ = sim.start_process(
sim.register_process("供应商生成器", supplier_steps),
0.0,
10,
)
// 2. Robot assembly worker coroutine
let robot_steps : Array[(@event.ProcessContext) -> Double?] = [
fn(ctx) {
if produced_count < 6 {
println(
"[\{ctx.clock.now_seconds()}s] [机械臂] 准备从原料仓抓取零件...",
)
buffer.get(fn(mat : String) {
println(
"[\{sim.now()}s] [机械臂] 抓取到原料: \{mat},请求耗能与工位...",
)
let _ = robot.request(1, 10, fn(_ok) {
battery.get(15.0, fn(_ok2) {
println(
"[\{sim.now()}s] [组装工位] 开始加工 \{mat},消耗能量 15.0,剩余电量: \{battery.level()}/100.0",
)
let _ = sim.schedule(2.5, 10, fn() {
produced_count = produced_count + 1
robot.release(1)
println(
"[\{sim.now()}s] [组装工位] 成品 #\{produced_count} 制造完工出库!释放工位机械臂。",
)
})
})
})
})
Some(3.0) // Next assembly attempt after cycle
} else {
None
}
},
]
let _ = sim.start_process(
sim.register_process("机械臂主控室", robot_steps),
0.5,
10,
)
// 3. Battery recharge monitor coroutine
let recharge_steps : Array[(@event.ProcessContext) -> Double?] = [
fn(ctx) {
if battery.level() < 40.0 {
println(
"[\{ctx.clock.now_seconds()}s] [能源中心] 蓄电池电量偏低(\{battery.level()}),启动快充网格化回充...",
)
battery.put(50.0, fn(_ok) {
println(
"[\{sim.now()}s] [能源中心] 回充完成 +50.0!当前电池电量: \{battery.level()}/100.0",
)
})
}
Some(2.0) // Check battery level every 2 seconds
},
]
let _ = sim.start_process(
sim.register_process("能源调度中心", recharge_steps),
1.0,
10,
)
sim.run_until(25.0)
println("\n==================================================")
println(" 自动化制造运行报告 ")
println("==================================================")
println("仿真总运行虚拟耗时: \{sim.now()}s")
println("成功组装并交付下线成品: \{produced_count} 件")
println("原料仓期末剩余数: \{buffer.size()} / \{buffer.capacity()}")
println(
"蓄电池末期电量水平: \{battery.level()} / \{battery.capacity()}",
)
println("==================================================\n")
}