这个函数怎么写

那该多好啊!!! 2019-07-22 11:30:31
用一个函数控制控制卡的气缸动作,如果这个气缸动作时间超时了,(读取一个IO信号)如果50秒这个IO信号还不是1,那么就输出一个错误,



在这个函数里传入的参数是这个气缸的序号,以及这个感应器的序号

根据这个气缸的序号就能控制这个气缸动作,
当气缸动作时就计时,
如果在50秒内,那个感应器还不是ON,表示这个气缸动作超时了,就输出一个错误
...全文
2700 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
平底锅锅锅 2019-07-28
  • 打赏
  • 举报
回复
定时或者线程
卫士斯基 2019-07-26
  • 打赏
  • 举报
回复
既然有50秒时间,说明你能允许有50秒的不动作失误,也说明这个时间之前你不会有别的损害设备或者造成事故的操作,也就是说你50.0001秒之后才会有别的动作,那好办,留足提前量去检测,检测为否,提前输出故障就完事,不要纠结精确的时间,你这是50秒,不是50ms
豆皮没有豆 2019-07-25
  • 打赏
  • 举报
回复
获取当前时间计算
冠辰 2019-07-25
  • 打赏
  • 举报
回复
额 我本地已经改了;还是这样 ....
冠辰 2019-07-25
  • 打赏
  • 举报
回复
额 图片竟然 反了;0.o;
冠辰 2019-07-25
  • 打赏
  • 举报
回复
手写了一下思路 不好看 见谅;不过希望能对你有所帮助;(*^▽^*);
kousansky 2019-07-24
  • 打赏
  • 举报
回复
顶一个,不能让好帖子沉底
qq_45448720 2019-07-24
  • 打赏
  • 举报
回复
https://blog.csdn.net/xiawu1990/article/details/78350253
zhuang198 2019-07-23
  • 打赏
  • 举报
回复
了解一下,又学习一个新知识
weixin_44069206 2019-07-23
  • 打赏
  • 举报
回复
学习了~~~~~~~~~~~~~~~
  • 打赏
  • 举报
回复
这种动作的不能异步啊,会撞机的
  • 打赏
  • 举报
回复
private bool DoControl_WaitDiValue_1(int DoChannel, int DoValue, int DiChannel)//判断输入是否=1
{

if (gtsCard.Write_Do(settingConfig.gtsCard, didotable.DO[DoChannel],(short) DoValue))
{
DateTime start = DateTime.Now;
while (true)
{
if (didotable.DI[DiChannel].value == 1)
{
break;
}

TimeSpan span = DateTime.Now - start;
if (5 < span.Seconds)
{
return false;
}
}
}
else
{
return false;
}
return true;
}
datafansbj 2019-07-23
  • 打赏
  • 举报
回复
引用 14 楼 矫揉造作 的回复:
[quote=引用 12 楼 datafansbj 的回复:] 在主线程另外开一个线程执行这段代码,主线程就不会阻塞了。
首先我的这个自动线程也不是主线程,它只是十几个线程中的一个 另外,这个验证气缸的状态在自动程序中至少用几十次,少说十个气缸,一个气缸动作一次验证一次,所以至少几十次 不可以每用一次时,把这个线程在start一次,也有可能二个气缸同时用,那感觉有点复杂化了[/quote] 不太明白你的需求,如果是这样,可以使用定时器定时启动一个线程去轮询,或使用无线循环不停地判断。
  • 打赏
  • 举报
回复
[quote=引用 1 楼 北京.NET-6年 的回复:]
感觉 你这个函数执行完了要50秒,可是我的异步调用线程里执行了一个while,当这个while里运行到这个函数进行气缸状状态检测时岂不是要等50后才能检测别的函数,

难道我要为这个函数单独弄一个异步线程吗
北京.NET 2019-07-22
  • 打赏
  • 举报
回复
线程或异步调用

public void Operation(object Num,object No)
{
气缸动作


for (int i = 0; i < 50; i++)
{
获取气缸状态
if (状态 != "ON")
{
Console.WriteLine("错误");
return;
}
else
{
Console.WriteLine("完成");

}
Thread.Sleep(1000);
}
Console.WriteLine("超时错误");
}
ManBOyyy 2019-07-22
  • 打赏
  • 举报
回复
引用 17 楼 矫揉造作 的回复:
[quote=引用 16 楼 ManBOyyy 的回复:]
一般都是這種異步,其他都是少數吧


我测试了一下这个代码有很多报错,


[/quote]
这个是.NET 4.5的特性,所以要求最低.NET版本为4.5。
  • 打赏
  • 举报
回复
引用 16 楼 ManBOyyy 的回复:
一般都是這種異步,其他都是少數吧


我测试了一下这个代码有很多报错,


ManBOyyy 2019-07-22
  • 打赏
  • 举报
回复
一般都是這種異步,其他都是少數吧
ManBOyyy 2019-07-22
  • 打赏
  • 举报
回复
可以這種異步
https://blog.csdn.net/xiawu1990/article/details/78350253
  • 打赏
  • 举报
回复
引用 12 楼 datafansbj 的回复:
在主线程另外开一个线程执行这段代码,主线程就不会阻塞了。

首先我的这个自动线程也不是主线程,它只是十几个线程中的一个
另外,这个验证气缸的状态在自动程序中至少用几十次,少说十个气缸,一个气缸动作一次验证一次,所以至少几十次
不可以每用一次时,把这个线程在start一次,也有可能二个气缸同时用,那感觉有点复杂化了
加载更多回复(10)

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧