大棚蔬菜-安防系统+收菜系统案例演示
1 工程文件下载:
2 演示视频
3 说明文档
安防系统:
【所用器件】:振动传感器 蜂鸣器 数码管
【功能概述】:开启安防系统后,振动传感器会监测有无外人入侵,若出现振动,蜂鸣器会报警,提醒管理者可能有入侵者。管理者确认无误可以在HMI上按下按钮关闭蜂鸣器。
实现过程:回调函数检测到振动->0号线圈值变为1->警报->主节点发送指令,将线圈修改为0->蜂鸣器关闭
数据结构说明:
ModBus_Coil [0]:警报器控制位,0关闭,1开启
ModBus_Reg[1]:模式位,0代表处于安防模式
振动监测:
使用振动传感器回调函数,修改Coil[0]的值。
回调函数:SetEventCallBack(enumEventVib,my_task_SV);
功能函数:
voidmySV_callback()
{
if(ModBus_Reg[1]==0) ModBus_Coil[0] = 1;
}
警报功能:
启动:利用10ms回调,每10ms检测一次ModBus_Coil[0]的值,若为1,开启警报,数码管显示生气表情。
关闭:HMI发送指令将该节点1号线圈(ModBus_Coil[0])的值置零,即可关闭警报。(单片机上也可按下K1键关闭警报)
回调函数:SetEventCallBack(enumEventSys10mS,my10mS_callback);
功能函数:
void my10mS_callback(){
if(ModBus_Reg[1]==0){ //表示处于安防模式
Seg7Print(12,12,12,12,12,12,12,12);//数码管显示横杠
if(ModBus_Coil[0]){
SetBeep(1000,100);
Seg7Print(10,18,20,19,10,10,10,10);
}
}
}
收菜系统:
【所用器件】:数码管、步进电机
【功能概述】:按下HMI控制按钮(或者按下状态切换键K2),开启收菜系统,数码管显示成熟蔬菜的数目,步进电机启动,成熟的蔬菜以1s每棵的速率被收割,直到收割完毕,或者切换到其他状态。若处于收菜系统以外的模式,成熟蔬菜会以2s每棵的速度增加。HMI中会显示每一时刻成熟蔬菜的数量。
实现过程:按下K2调用按键回调函数的功能函数->若模式位为0,开启步进电机,若模式为为1,关闭步进电机;
数据结构说明:
Register[1]:表示功能模式, 1为收菜模式
Register[2]:存储成熟蔬菜数量
蔬菜自动成熟:
在非收菜状态下,蔬菜会以每两秒1颗的速度成熟。
回调函数:SetEventCallBack(enumEventSys1S,my1S_callback);
功能函数主要代码:
if(ModBus_Reg[1]!=1){
if(ModBus_Reg[2]<999)
{
count1++;
if(count1==2){
ModBus_Reg[2]++;
count1=0;
}
}
}
自动收割机
收菜状态下,蔬菜每以一秒一棵的速度被收割。(1s回调功能函数)
if(ModBus_Reg[1]==1){
if(ModBus_Reg[2]>0){
ModBus_Reg[2]--;
}
}
同时步进电机启动:
回调函数:SetEventCallBack(enumEventKey, mykey_callback)
功能函数主要代码:
if(GetKeyAct(enumKey2)==enumKeyPress)
{
ModBus_Reg[1] = 1 -ModBus_Reg[1];
if(ModBus_Reg[1]==1){
SetStepMotor(enumStepMotor1,4,ModBus_Reg[2]);
}
else{
EmStop(enumStepMotor1);
}
}

