登录
首页
电工技术
施耐德电气低压电器论坛
回帖
发帖
正文
主题:【话题】5个接近开关同时感应才能动作,可是总是误动作,什么原因?(20220222)
点击:1771 回复:33
20楼
编辑
引用
管理
微鑫科技
像你这样的老鸟,逻辑上不会出问题,出问题的部分估计是对时间的判定,下面画了一个简单的信号时序图。
22-02-23 22:04
21楼
编辑
引用
管理
微鑫科技
之前做过类似的程序,方法是定义5个变量,如检测第1通道的信号,当检测到通道1从高至低变化后,就开始计时,当到达时间后(如2秒),第1个变量置1,如果在此时间内,只要由低往高跳变,无论之前累加的时间是多少,哪怕是1.9秒,也要全部清零,重新累加,当5个通道的检测变量全部为1后,才算有效。如果传感器不出问题,程序没有写错,还能出问题,那只能找到离你最近的庙里好好烧烧香了。
22-02-23 22:12
22楼
编辑
引用
管理
知道一点
这样是不是要用5个定时器?
5个变量and一下用一个定时器足矣。
22-02-24 08:23
23楼
编辑
引用
管理
微鑫科技
只需要一个定时器。
sbit INT_1=P1.X//第1通道输入
bit INT_1_B=0;//第一通道输入标志变量
unsigned char INT_1_TIM=0;//第一通道输入计时变量
void main()
{
while(1)
{
if(INT_1==1&&INT_1_B==1)//如果通道1为高电平,且通道标志为1,则清零通道1标志和时间
{
INT_1_B=0;INT_1_TIM=0;
}
if(INT_1==0&&INT_1_B==0)//如果通道1为低电平,且通道1标志为0,则将通道1标志为1,且时间清零
{
INT_1_B=1;INT_1_TIM=0;
}
if(INT_1==0&&INT_1_TIM>=200.......)//通道1-通道5
{
//执行有效动作
}
}
}
void Tim1_ISR() interrupt X //定时器中断服务函数
{
if(INT_1==0&&INT_1_B==1&&INT_1_TIM<200)
{
INT_1_TIM++;
}
.
.
.
.
}
22-02-24 09:36
24楼
编辑
引用
管理
秀空
监控一下程序
22-02-24 09:48
25楼
编辑
引用
管理
知道一点
看不懂这个
PLC只要
ld x0 and x1 … and x4 tim 0 #20
ld t0 set(或者out)y0
22-02-24 09:48
26楼
编辑
引用
管理
乌龟船长
引用
知道一点
在 2022/2/24 9:48:41 发言
【内容省略】
有时候PLC就是这么简单粗暴
22-02-24 16:25
27楼
编辑
引用
管理
xiao007
是信号干扰是,用了个新模块,然后报警输入信号老是误感应,信号肉眼可见没有接通,但是程序里感应到了,我还是一个个把信号屏蔽了才找出来出来的
最后修改:
2022/2/24 16:54:10
22-02-24 16:54
28楼
编辑
引用
管理
知道一点
这个干扰不是一班的牛
22-02-24 22:19
29楼
编辑
引用
管理
handafen
干扰总是出现的莫名其妙。
22-02-25 09:24
上一页
下一页
工控新闻
工信部发布“5G+工业互联网”融合应用试点城市名单
艾默生电气如何用153亿美元撼动工业软件市场?
双11特惠狂欢|多款FLIR红外热像仪限时抢购,尽享超值折扣!
加码机器视觉 凌云光拟1亿欧元收购工业相机资产 估值增值率416%
工业和信息化部宣传思想文化工作座谈会在京召开
中控技术荣获MSCI ESG评级A级,展现可持续发展领导力
冲刺四季度,各地努力推动稳工业举措落实到位
10月16-18日,湾芯展揭秘:深入探索小米造车成功的关键因素!
更多新闻资讯