打印

找到了一篇**:232-485智能转换器

[复制链接]
3738|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ztb|  楼主 | 2007-3-23 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
来自 2楼
ztb|  楼主 | 2007-3-30 00:36 | 只看该作者

我前面手懒了,再"详细"解释一遍

   首先感谢各位的回帖.
    回chunyang:讲话直是好事,搞技术的最烦拐弯抹角!我非常赞同你的这段话:"一个行业里的“大牛”换个“山头”一问三不知也属正常".我在意的是在看清楚问题以前上来就批!
    回到技术问题.我的问题要是在DOS实模式下根本不是问题,因为所有程序都可以很简单的用汇编直接控制.犹如探囊取物.问题的起因就来自于方便易用的Windows+VB.(其它的方法我不会,不敢臆测)
    我做通讯试验时是架着双踪示波器进行的.在VB下时间的分辨率无法优于20mS(大约).而每次正常发送间隔不能小于50mS(大约).这样对于已经不快的9600pbs来讲,通讯线上2/3的时间在等待.而对于38400bps来说88%的时间在等待.(以上计算基于ModBus协议最常用的双向报文长度8字节+4字节间隔).这个问题在子站数量少的情况下不易被注意到,而子站多了就不能忽视了.如果采用简单的232转485方案,只要VB的50mS无法去掉这个问题就只能如此!这就我前面提到的第一个方案即单串口的方案.
    我说得第二个方案就是要彻底解决这个问题--采用双串口设计.这里MCU已经不是简单的仅控制485芯片的收/发线,而是负责更复杂的协议转换.即把VB直接控制下效率低的ModBus协议转换为更适合Vb控制的效率更高的其它协议.
例如,既然间隔不能在缩小就加大报文长度,把需要上百个短报文完成的巡检命令变成批巡检命令.由MCU翻译成高效的ModBus命令.
    我想肯定有第三种方案;修改Windows,加入实时内核,把它变得即有Windows的易用又有DOS下的准确.网上看到过由于不常用担心比第二种方案的成本还要高(这的确是臆测的).感叹,技术进步了我却低能了,我已经没有能力像当年把CP/M修改成实时多任务那样驾驭Windows了.
   突然想起一个故事:说一个小孩子上学去,第1天学了一个字"一",第2天又学了一个字"二",第3天也学了一个字"三".第4天他就不来了,说: ......!

    回21ele:千万不要打标准协议的歪主意,修改标准就是向众多专家的经验提出挑战!眼前站点便宜以后会有很多麻烦.(传出去,名声也不好呀!).遵守协议就是为了交流,自成体系就是自我封闭!
好心人,你那个非常好用Modbus Poll调试软件是否可以共享!我早已是垂涎三尺啦.

使用特权

评论回复
来自 3楼
chunyang| | 2007-3-30 14:40 | 只看该作者

还是接着就事论是,顺便总结一下

    串口的收发是可以同时进行的,这一点无论PC还是MCU都相同,PC在硬件上还有缓冲存储,又可实现多任务调度,关键是软件平台的处理,两次通讯间的间隔长达50mS不可怕,只要在编程上注意发完即收就行,这样可以保证一个信息帧的通讯可靠性。PC内存中开的缓冲区收发要独立,某些现成的使用简单的控件可能不能满足,但可以自己重写控件。前贴中提到当年我的一个设计曾用VB做上位平台,收发间无延时(MCU的软件是我写的,源代码现在还在我的机器里,收到PC指令后就立刻开始上传数据了,未做延时处理),VB平台操作正常。当然,早期版本的VB和现在的VB差别明显,但那已经是Windows平台下的32位系统了而非For DOS的版本。
    如采用MCU系统做485/Modbus主机,采用双串口MCU当然方便,成本会因此上升10元左右(双串口MCU与单串口MCU的差价),工控系统应该也是能够接受的,好处是可以处理485和PC同时发起的通讯,但485是单向的,所以若不考虑485和PC同时发起通讯请求的极端情况,普通单串口MCU就足以满足,根据优先级或应用的特性选择静态时MCU侦听PC还是485即可,前帖中提到的“一片模拟开关或数据分配器/选择器之类的逻辑芯片,用于选择MCU的串口通路”的设计思想就是基于此点,MCU在此不作协议处理仅做转发的缓冲即可,这样的MCU编程是很简单的。当然,用MCU做485主机也是可以的,与PC可以采用另一套自定协议交互。
    MCU的引入可以有3类做法:1、做485主机,同时侦听PC和485的话才用双串口MCU,否则单串口MCU就可以了,这类做法MCU上要跑协议。2、MCU仅担当485方向控制和数据的缓冲、转发,本身与总线的协议和数据内容无关,PC是真正的485主机只是不直接参与总线通讯,协议在PC平台上运行。这种做法PC平台软件的运行时间、收发转换时间和波特率等均与485节点无关,缺点是最大帧长度受MCU片内RAM的限制,但现在256Byte的MCU很多,带片内XRAM的MCU也很多,且不必花费额外的成本开销,如STC的89C51内存配置为128+128+256,89C54及以上规格的配置为128+128+1024。3、MCU仅做方向控制,这是最廉价的方案,MCU采用最简单的型号即可,但PC平台的响应速度要相应足够,只要处理得当,VB平台下的单次收发应该也不会有问题。

使用特权

评论回复
地板
chunyang| | 2007-3-23 11:38 | 只看该作者

不能用RTS做方向控制

外接232-485转换器就可以了,自己做的话用个MCU实现,也极简单,PC与MCU交互,MCU再控制485即可。

使用特权

评论回复
5
ztb|  楼主 | 2007-3-23 15:03 | 只看该作者

难道就没有直接控制的方法了?

谢谢您的回答.我也曾经想到过这个方法,它可以得到最高性能!只是成本太高了.这个方法是万不得已的方法.难道就没有直接控制的方法了?有许多厂家做的Modbus通讯软件难道都需要外挂一个单片机?

使用特权

评论回复
6
chunyang| | 2007-3-25 13:33 | 只看该作者

成本高吗?

几块钱就搞定的事!

使用特权

评论回复
7
ztb|  楼主 | 2007-3-26 15:18 | 只看该作者

谢谢!是否可以提供您的方案所使用的器件列表,我核算一下

使用特权

评论回复
8
chunyang| | 2007-3-26 18:15 | 只看该作者

在原基础上增加一两片IC就可搞定

一片232接口芯片,用于与PC串口连接,一片485接口芯片,这两片IC不是额外的,不用这类方案也必须,直接转除这两片IC外也得有其它逻辑IC或晶体管。真正增加成本的是一片MCU和一片模拟开关或数据分配器/选择器之类的逻辑芯片,用于选择MCU的串口通路,MCU用任何带串口的型号即可,如51、AVR、PIC、68HC08系列等都行,二者价格之和是6元,再考虑PCB、人工等,自己做10块钱足矣。

使用特权

评论回复
9
ztb|  楼主 | 2007-3-26 21:05 | 只看该作者

如果有MCU和串口参加进来那方案不确定性就更大了!

例如:
1.仅仅用一路串口,识别PC发出的数据控制485的方向.因为Windows最不擅长控制RTS了.这样做还是不能使得Windows的通讯效率与下面的单片机匹配.因为我看到用VB执行串口的收发.两次收发的间隔几乎没有办法小于50mS(无论速率多快).
2.用两路串口.作协议翻译.大多数事情又这个MCU来做.与Windows的通讯使用更适合VB处理的大数据包格式.这样就有通讯的最大效率.但是复杂程度增加很多,并且会丧失通用行.成本就增加的更多了!

 我这里死认VB也主要是为用户着想.毕竟更多的应用程序要他们来完成嘛.
是不是我把问题复杂化了?

使用特权

评论回复
10
chunyang| | 2007-3-27 13:48 | 只看该作者

你的理解根本没有依据

一路串口就够了,何来两路?看来你还是缺乏串口通讯和MCU应用的基本概念,建议还是买成品吧,232—485的智能型互转器市场上大把,直接用吧。

使用特权

评论回复
11
ztb|  楼主 | 2007-3-28 23:39 | 只看该作者

找到了一篇**:232-485智能转换器

MAXIM北京办事处 刘武光写的,很详细的讲述232/485转换器软硬件设计的好文章.与同样和我一样"缺乏串口通讯和MCU应用的基本概念"的电工共享.
http://www.mculib.com/files/tele/te1146.pdf
另外,还是拜托楼上的:看在我从83年就开始学Z80的老脸上,把我的观点仔细看看,再想想,再评论.

使用特权

评论回复
12
fiann| | 2007-3-29 09:14 | 只看该作者

一般的modbus方案在pc端都会做转换

485转232
485转usb
接着你的上位机软件实现就很容易了
成本很小了,几十快钱!

使用特权

评论回复
13
fiann| | 2007-3-29 09:15 | 只看该作者

楼主还是大牛阿

从83年就开始学Z80

使用特权

评论回复
14
21ele| | 2007-3-29 10:05 | 只看该作者

如果下位机也是自己做的,可以控制他们适当延时再回应数据.

如果下位机也是自己做的,可以控制他们适当延时再回应数据,pc主机有足够时间切换为接收,从modbus协议上讲是没有问题的,但是延时太长会使响应变慢,总线效率下降.

如果下位机是现成的设备,那响应的延时大致是无法改变的,那最好是用单片机监视pc有无发送数据,因为这里并不关心数据内容,本质上只是在一个字符周期内是否起始位和停止位,如果没有,视为暂无数据发送,所以不一定用有串口的mcu,随便什么mcu都可以的.软件定时检测起始位和停止位即可.

我正在做modbus程序,pc上用Modbus Poll调试,非常好用,Simply Modbus 6.0.1这个软件也不错,只是没有注册版可用.

使用特权

评论回复
15
computer00| | 2007-3-29 12:17 | 只看该作者

应该不关VB的时,主要是操作系统调度的原因.

如果你的软件优先级足够高,控制它应该是可以反应很快的。

使用特权

评论回复
16
cfanandham| | 2007-3-30 11:40 | 只看该作者

vb如果调用多媒体定时器好像速度就会高点

记得能达到1ms,具体就不确定了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

ztb

139

主题

660

帖子

9

粉丝