首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

请问VB串口转RS485通讯的一个有关问题

2012-03-08 
请教VB串口转RS485通讯的一个问题大家好,我用VB的MSComm控件做的上位机,下位机是一片单片机,PC串口上接一

请教VB串口转RS485通讯的一个问题
大家好,我用VB的MSComm控件做的上位机,下位机是一片单片机,PC串口上接一个232转485的转换器与单片机通讯,单片机端用的MAX487芯片。用二进制收发。
1、现在PC给单片机发送数据后,单片机内必须延迟100多ms,再向PC回送数据,PC才能将数据收全,否则接收数据错误。
2、在PC的串口上,将串口的收发线直接短接,就是说用串口自发自收,没问题,串口上加上485 转换器后,就必须在单片机内做延时了
3、如果单片机向PC回送几十个数据,前面的数据错误,从开始正确的数据 开始,往其后的数据都是正确的。比如单片机延时50ms,PC收到的数据前10个不正确,后面的几十个数据都正确
 如延时70ms,PC收到的数据前7个不正确,后面的都正确。
 如不延时,会有近20个数据不正确。
4、用串口调试助手,则不存在需延时的问题。
请教一下这问题怎么解决,先谢了


[解决办法]
没有看到你的接收代码和通信协议,很难提供意见.
RS485口通常是单工的,收和发需分开进行.
PC机侧的VB程序及COM口是双工的.收和发可同时进行.PC机侧的命令间需有适当的时间间隔,以空出等待单片机返回
命令.PC机侧完全可利用MsComm1_OnComm事件触发来实现接收,设置MSComm1.RThreshold = 1或返回命令的字节
长度来控制接收.PC机侧的命令间适当的时间间隔可根据波特率,接收字节长计算由TIMER计时器控制.

[解决办法]
如果是定长31字节,设MSComm1.RThreshold = 31,接收时先判断帧头,通过后再进行校验和校验

热点排行