ZIPC自动门示例

发布于 2022-10-20  1141 次阅读


自动门示例要求

  • 当人体传感器检测到有人时打开门
  • 当门打开后,保持开门5秒
  • 当检测到仍有人存在,延长5秒开门时间
  • 5秒过后,关门

image.png
motor与driver名字互换了

event函数

event(Task名, 事件名);
event函数可以实现在多个任务(Task)之间进行事件交流
当 处理单元格 处理event时,event函数激活指定Task的指定事件

创建项目并完成基本设置

创建autodoor任务(Task)

autodoor STM表

image.png

说明

OpenedSignal、ClosedSignal:为motor中开关门传感器返回的已开门/已关门状态
image.png
单元格(1,1):
先通过event函数使motor激活open事件,然后设置全局变量t = 2;之后启动timer计时器计时2秒定时关闭motor电机;
image.png
单元格(1,2):
当接收到有人信号,并处于closing状态时,先停止motor,然后启动motor正转,并设置2秒计时器定时关闭motor电机
image.png
单元格(1,3):
当接收到有人信号,并处于opened状态,此时自动门已打开,设置全局变量t=5;并执行刷新计时器操作,以等待行人通过自动门;当定时器超时timer任务向autodoor任务发送TimeOut事件,使之转入closing状态;

创建motor任务(Task)

motor STM表

image.png

说明

motor表为driver表的抽象,抽象出open、close、stop——开门、关门、停止状态,封装底层硬件driver的电机正转与反转状态;
image.png
单元格(1,1):
向电机发送停止与反转状态;
image.png
单元格(3,1):
此时motor传感器发送已开门状态,通过event函数向autodoor发送openedSignal事件;

创建driver任务(Task)

dirver STM表

image.png

说明

K为驱动器继电器状态控制端口,在driver Task中创建控制端口文件,并在文件中定义int K=0;
image.png

创建timer任务(Task)

创建timer Task私有变量

创建timer的私有变量,用于接收全局变量t的值
image.png
image.png

timer STM表

创建条件状态转移单元格(快捷键:CTRL+E)
image.png
对单元格进行处理/转移切分(快捷键:CTRL+W)
image.png
上半单元格进行--操作,下半单元格条件转移分割,判断tt状态
image.png
image.png

说明

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表
image.png
image.png
image.png

创建inter时间中断(Handler)

创建时间中断,向timer发消息自动计时

image.png

将事件属性设置为中断

image.png

通过ZIPC内置仿真定时器

创建OS模拟器过程

选择OS模拟器

image.png

选择自定义仿真工具

image.pngimage.png

选择后自动生成OS核心

image.png

对OS模拟器进行设置

image.png
image.png

创建定时器

image.png
image.png
image.png