cdust 发表于 2017-8-21 10:02:03

请教C#编程中通信处理实时问题

在C#编程中,需要100毫秒访问一次PLC进行数据交换,然后还需要对数据作出响应的反应,反应的动作时间都很长,需要堵塞几秒左右,请问如何编程为好?
C#刚刚开始用,请轻喷,谢谢

youkebing 发表于 2017-8-21 10:08:10

你可以尝试开两个线程,一个处理100毫秒的定时,一个处理数据

youkebing 发表于 2017-8-21 10:12:23

如果通讯的实时性能要求过高,可以模仿一下西门子的MPI编程电缆,硬件保证实时性,pc仅仅处理数据,另外你处理要几秒钟,你有这么大的运算量?

cdust 发表于 2017-8-21 11:43:38

youkebing 发表于 2017-8-21 10:08
你可以尝试开两个线程,一个处理100毫秒的定时,一个处理数据

理论上是这样,但是,我开了N个线程,但是通信和任务堵塞式的        TASK,怕有相互影响,如果是你,你是咋做的,请教,谢谢!

youkebing 发表于 2017-8-21 12:09:47

cdust 发表于 2017-8-21 11:43
理论上是这样,但是,我开了N个线程,但是通信和任务堵塞式的        TASK,怕有相互影响,如果是你,你是咋做的 ...

要区分一下,是io密集型还是计算密集型,而后根据这些模型,选择处理方法,一般是异步处理,当然,如果你的任务本身就很少,那么选择同步的方式会让编程更简单,我感觉这类系统一般就你这样处理就可以了,线程之间交互,一般把握:锁变量,不锁方法,效率一般不会差哪去

yuyu87 发表于 2017-8-21 12:48:17

线程,task任务都可能

yuyu87 发表于 2017-8-21 12:49:04

task,或者通过OPC访问PLC

makesoft 发表于 2017-8-21 14:09:47

100MS定时中断接收数据,需要时间要是很短直接就在中断里面处理,需要时间稍长直接开一个线程就可以了。

makesoft 发表于 2017-8-21 14:10:38

阻塞应该是程序设计问题

cdust 发表于 2017-8-21 14:53:06

makesoft 发表于 2017-8-21 14:10
阻塞应该是程序设计问题

特地阻塞处理其他程序,怕相互干扰

霸气侧漏 发表于 2017-8-21 15:21:35

同问,怎么开启线程?我需要1s通过串口发送一次数据,现在是用定时器里面发,但是把发送程序放在定时器里面,发出来的数据有误,忘给个例程,谢谢

youkebing 发表于 2017-8-21 16:48:18

霸气侧漏 发表于 2017-8-21 15:21
同问,怎么开启线程?我需要1s通过串口发送一次数据,现在是用定时器里面发,但是把发送程序放在定时器里面 ...

有误和定时器还是线程没有关系,是真的没有关系

xstt 发表于 2017-8-21 17:54:46

要看量啊。无限开线程也是死的。

霸气侧漏 发表于 2017-8-21 23:09:25

youkebing 发表于 2017-8-21 16:48
有误和定时器还是线程没有关系,是真的没有关系

明白,我的问题搞定

yongke 发表于 2017-9-12 21:36:21

我一般用线程和消息处理
页: [1]
查看完整版本: 请教C#编程中通信处理实时问题