MyException - 我的异常网
当前位置:我的异常网» VB » 200分大赏求多串口设备同时通讯的解决方案,不够再

200分大赏求多串口设备同时通讯的解决方案,不够再加解决办法

www.MyException.Cn  网友分享于:2013-04-21  浏览:17次
200分大赏求多串口设备同时通讯的解决方案,不够再加
一台计算机有10几个串口(RS485),每个串口设备接10台Modbus的设备(总线通讯),如果我在这台电脑上同时连接这些设备的话,就会对10个COM口进行读操作,我现在的方案是:
由于每个串口所连接的设备数量和型号相同,所以,我写一个类模块,对单个串口所连接的设备进行通讯和数据处理。然后在主程序中创建10个类实例(其中内部参数不同)。
但是问题是,运行程序的时候,我感觉电脑慢了下来,我不知道实例化10个类的时候,这个主程序是不是还是单线程的,这10个类实例运行的时候还是占用这一个单线程的队列,如果我把这10个类写成10个exe程序,然后再运行的话是不是会好些,这是我的想法。

我觉得慢下来应该是单线程满负荷或者是超负荷运行造成的,各位大侠,请给点意见,绝不吝啬分。


------解决方案--------------------
VB 是单线程的,感觉满是因为串口本身慢。做成ActiveEXE 的话会好点。
建议使用支持多线程的开发工具。
------解决方案--------------------
http://www.iocomp.com

控件
------解决方案--------------------
好多的设备啊,10几个串口,每个串口10个设备,合起来有100多个设备,真牛啊 :)

是单线程运行的
你可以试试将串口封装为 activex.exe,工程属性中设置为多线程运行,并且要使用事件回调技术(如果使用等待,用户端则会在调用返回前被挂起)
------解决方案--------------------
最根本的问题是,串口通讯的速度与 PC 代码的运行速度相差好多数量级。当你的程序以阻塞方式一一与之通讯时,如果设备很多,当然会感觉到慢。

1 既然是 RS485 总线,发送命令可以考虑广播方式。

2 即使是逐台设备发送命令,也不要立即读取应答。因为这需要等待设备处理完成,累积的时间也很可观。你把通讯分成两轮次,即命令轮次和应答轮次。当你回到第一台设备取应答时,它已经利用了你向其他设备发送命令的时间来进行处理。

3 不要用 VB 中的 MSComm 控件来做 RS485 操作,最好用 VC++ 写 API DLL 调用。因为控件在地址模式和数据模式之间相互切换时,需要先禁用,再切换,再启用,会很慢。两者的差距很大。

4 其实可以只用一个串口,通过 RS485 Hub 级联的方式把设备都连进来。因为 PC 上的串口并不具备自动缓存数据和命令以自行操作的功能,多了也并不快。如果你能用单片机自己搞一种代理接口,让它来自动与设备交互,然后把缓存的数据传给你,那就值得用多个串口。就好比你只管理十几个工头,让他们去管理工人。
------解决方案--------------------
ActiveX EXE 是与主程序运行与不同进程的部件,两者运行基本上互不影响,并且可以使用事件或者回调函数向调用者反馈信息,建议你仔细看一下vb的帮助文件,里面很仔细的讲了如何创建ActiveX EXE部件,你只要按照他说的做一遍,就知道是怎么回事了。

------解决方案--------------------
对于VB而言,不管你是10个串口,还是1个串口,不管你是1个下位机还是100个下位机,你每次都只能通信一个对象,原因有二。
1、VB是单线程的
2、Moudle Bus通信每次只能读取一个下位机。

再发表一点不成熟的看法,像楼主这样的情况,不管有多少个串口,我们就管计算机连接的下位机数量,共计100个以上的下位机,如果每个下位机通信占用20ms,那么读完一次也是2s时间,实际时间开销会比这大,建议楼主将串口通信代码放到Timer中,且区别对待,对不精要的数据读取时间间隔放宽些,减少通信时间开销,此外,不要采用OnComm方式通信,发送了命令后等待的方式,并且在等待的循环体中添加DoEvents来释放CPU资源,这样可以有效的防止程序界面“假死”的现象。

再者,在硬件上,你可以考虑减少串口,采用 RS485 HUB,把下位机数据缓存在HUB上,这样也能有效的提高通信效率。这样处理,时效性会大幅提高,但成本可能也会提高不少。

文章评论

科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
鲜为人知的编程真相
鲜为人知的编程真相
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
老程序员的下场
老程序员的下场
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员必看的十大电影
程序员必看的十大电影
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
Java程序员必看电影
Java程序员必看电影
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
总结2014中国互联网十大段子
总结2014中国互联网十大段子
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
我是如何打败拖延症的
我是如何打败拖延症的
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
中美印日四国程序员比较
中美印日四国程序员比较
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
一个程序员的时间管理
一个程序员的时间管理
编程语言是女人
编程语言是女人
为什么程序员都是夜猫子
为什么程序员都是夜猫子
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
 程序员的样子
程序员的样子
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
如何成为一名黑客
如何成为一名黑客
每天工作4小时的程序员
每天工作4小时的程序员
那些争议最大的编程观点
那些争议最大的编程观点
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
代码女神横空出世
代码女神横空出世
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员的鄙视链
程序员的鄙视链
程序员应该关注的一些事儿
程序员应该关注的一些事儿
我的丈夫是个程序员
我的丈夫是个程序员
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
10个调试和排错的小建议
10个调试和排错的小建议
旅行,写作,编程
旅行,写作,编程
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有