标题:同步与异步发送\接收的问题!
只看楼主
luochen601
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-23
 问题点数:0 回复次数:12 
同步与异步发送\接收的问题!
做了一个与三菱PLC通讯的程序,使用TCP协议,我是用流来发送和接收的。通讯的具体规则如下:当PLC发送一个数据给计算机后,计算机必须发回一个“响应”(十六进制的E0),然后PLC才接着发送下一个数据;当计算机给PLC发送数据,PLC接收完后会自动给计算机发回一个“响应”(十六进制的00);我现在是写的程序是同步接收和发送,用了一个线程负责接收,可以顺利接收到从PLC发过来的数据;用一个button_click事件来发送数据,但却不能实现;请问这是什么原因?一定要用异步发送和接收吗?同步和异步到底有什么区别?
搜索更多相关主题的帖子: PLC 异步 计算机 三菱 数据 
2006-11-04 22:10
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 
你试试发送出去到等待的时候用一个while循环

里面暂停当前线程,至于用哪种方式暂停,看实际情况

Application.DoEvent

Lock()

Thread.Sleep()


.... 反正等到plc执行完毕返回为止
2006-11-04 22:31
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 
我不知道同步异步之类的,只不过plc是硬件,在如果你发送语句之后跟接收语句,是肯定不能等到plc返回的

所以在接收为空的时候,设置一个循环来来等待

另外想问,为什么不直接用线程?
2006-11-04 22:33
luochen601
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-23
得分:0 
因为PLC设定是每隔30秒发送一次数据,所以用了一个while(true)来接收数据,因此用了一个单独的线程来接收!而且主要是接收,并不要频繁向PLC发送数据!
2006-11-04 23:53
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 

恩,现在C#的timer有个bug,很恼人呢~~~ 唯有先用着线程暂停吧……

2006-11-05 01:40
小海龟
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1068
专家分:4
注 册:2006-8-1
得分:0 
以下是引用live41在2006-11-5 1:40:05的发言:

恩,现在C#的timer有个bug,很恼人呢~~~ 唯有先用着线程暂停吧……


什么bug?


[bc09] 犯强汉者,虽远比诛!
2006-11-05 08:42
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 
2006-11-05 09:20
小海龟
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1068
专家分:4
注 册:2006-8-1
得分:0 
没想到哦,不过我用timer的时候还没出现过,也许测试的太少了吧.

[bc09] 犯强汉者,虽远比诛!
2006-11-05 09:29
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 
不是,你可能没用到太消耗内存的

我试过用form.timer,在多线程下,经常会停,很怪,我设了第三个来控制前两个都不行

结果还是用线程睡眠来实现定时
2006-11-05 09:56
月夜枫华
Rank: 4
等 级:贵宾
威 望:12
帖 子:437
专家分:42
注 册:2006-1-2
得分:0 
Timer控件是每隔一定时间就启动一个线程来执行那个回调函数,
比如设定Timer时间为100ms,那么如果执行的操作100ms没有执行完,系统会再建立一个线程再执行一次,这样长时间下去可能将系统资源耗尽.
之前我写的一个程序就是这样,2天以后我发现这个程序占用1.9G内存

2006-11-05 10:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-100781-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.359839 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved