自动门示例要求
- 当人体传感器检测到有人时打开门
- 当门打开后,保持开门5秒
- 当检测到仍有人存在,延长5秒开门时间
- 5秒过后,关门
motor与driver名字互换了
event函数
event(Task名, 事件名);
event函数可以实现在多个任务(Task)之间进行事件交流
当 处理单元格 处理event时,event函数激活指定Task的指定事件
创建项目并完成基本设置
创建autodoor任务(Task)
autodoor STM表
说明
OpenedSignal、ClosedSignal:为motor中开关门传感器返回的已开门/已关门状态
单元格(1,1):
先通过event函数使motor激活open事件,然后设置全局变量t = 2;之后启动timer计时器计时2秒定时关闭motor电机;
单元格(1,2):
当接收到有人信号,并处于closing状态时,先停止motor,然后启动motor正转,并设置2秒计时器定时关闭motor电机
单元格(1,3):
当接收到有人信号,并处于opened状态,此时自动门已打开,设置全局变量t=5;并执行刷新计时器操作,以等待行人通过自动门;当定时器超时timer任务向autodoor任务发送TimeOut事件,使之转入closing状态;
创建motor任务(Task)
motor STM表
说明
motor表为driver表的抽象,抽象出open、close、stop——开门、关门、停止状态,封装底层硬件driver的电机正转与反转状态;
单元格(1,1):
向电机发送停止与反转状态;
单元格(3,1):
此时motor传感器发送已开门状态,通过event函数向autodoor发送openedSignal事件;
创建driver任务(Task)
dirver STM表
说明
K为驱动器继电器状态控制端口,在driver Task中创建控制端口文件,并在文件中定义int K=0;
创建timer任务(Task)
创建timer Task私有变量
创建timer的私有变量,用于接收全局变量t的值
timer STM表
创建条件状态转移单元格(快捷键:CTRL+E)
对单元格进行处理/转移切分(快捷键:CTRL+W)
上半单元格进行--操作,下半单元格条件转移分割,判断tt状态
说明
click事件为系统中断操纵的定时计时模拟器,也可以手动发送秒数减少操作
单元格(0,0):
创建条件转移单元格,判断全局变量t的值,当t>0时代表计时器需要刷新时间,执行timer局部变量tt=t;
单元格(1,1):
创建条件转移单元格,判断局部变量tt的值,当tt<=0时代表计时器时间归零,通过event函数通知autodoor,发送时间timeOut事件;
创建Task之间共享的全局变量
创建全局变量t,将autodoor Task中STM表的变量t传递给timer Task中STM表
创建inter时间中断(Handler)
创建时间中断,向timer发消息自动计时
将事件属性设置为中断
通过ZIPC内置仿真定时器
创建OS模拟器过程
选择OS模拟器
选择自定义仿真工具
选择后自动生成OS核心
对OS模拟器进行设置
创建定时器
Comments | NOTHING