登录
首页
电工技术
施耐德电气低压电器论坛
回帖
发帖
正文
主题:【话题】5个接近开关同时感应才能动作,可是总是误动作,什么原因?(20220222)
点击:2080 回复: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
上一页
下一页
工控新闻
制造业的未来蓝图:“超自动化”工厂何以实现?
卡奥斯携手强胜实业,共建行业领先工业互联网平台!
制造业转型升级应怎么看,怎么干?昨天这场研讨会干货满满!
赛意信息全球研发中心奠基
豪恩汽电与上海智元新创技术达成合作,积极布局机器人领域
从“制造”到“智造”: 魏德米勒2024年营收近10亿欧元,加码全球基地建设
天硕工业级M.2 NVMe SSD固态硬盘主控控制颗粒全景科普
工控赋能,智算未来:华北工控EMB-3513专为边缘AI应用设计
更多新闻资讯