前一段时间主要做了几个小项目,都是单片机与PC机的串行通信,采用RS485,上位机采用VB6.0语言编写软件。
自己看VB有一段时间了,终于等到用的机会,现在学习的程度还可以完全够用。
单片机采用了51单片机,多机通信中采用了利SM2来区分是数据还是地址,效果还可以。其中RS485部分采用了隔离转换电路,采用高速光耦6N137,效果很好。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
通信规则:
波特率9600 11位异步串行通信 1位起始位,8位数据位,1为地址/数据控制位 一位停止位 采用和校验不采用奇偶校验 地址、数据控制位是1为地址,0为数据。
例如实验采用2台下位机:
第一号机地址为01H
第二号机地址为02H
上位机程序流程:
1. 发送地址帧:A6+地址+?
2. 接受下位机应答:地址+0+校验和+?
3. 若应答正确发送请求数据命令:A5+地址+?
4. 上位机返回数据:A5+数据+校验和+?
5. 上位机计算数据并显示
注:A6或A5为命令起始字节。?为结束字节。初始化所有的从机都采用接受状态,接受上位机的数据判断若地址与本机相符,就清SM2否则继续监听。
实验中主要遇到了以下几个问题:
1. 建议PC机采用的RS232和RS485转换头最好采用带隔离的那种,否则有时在实验室就能发现通信不正常现象。
2. 在上位机或下位机发送数据时发送的数据要采用延时,当发完数据后也要加一段延时再进行接收,而这些时间我发现不同的系统是不一样的,我是经过实验来确定的时间的。
3. 单片机中我采用的是中断的方式进行发送和接收。
4. VB6.0中发送地址时控件MSCOMM控件采用9600,M,8,1然后改为9600,S,8,1状态准备接受单片机的数据,发送数据时就采用9600,S,8,1状态。
5. 在进行多机通信时发现有时发送数据出现错误,例如先进行一号机进行通信,通信正常,再通信2号机发现通信错误,通过仿真器观察2号机接受的数据不读,多接受数据的个数不对,研究很长时间没有找到病根,后来发现网上别人也出现过问题,不过他好像是改成查询方式就好了,而我最后在VB中采用了出错自动重发解决了这个问题。
6. 看了很多的电路图,都是在485的输出端冰上120欧的匹配电阻,这是对的,但是挂多机时要还挂个120的电阻形成回路,这个我实验时发现不对,只能挂一个120欧的电阻。
用户377235 2015-6-16 23:11
帮忙给一个这个,最近正在做这个,多谢694960867@qq.com
用户369554 2011-7-2 13:22
用户1453255 2009-11-10 22:46
用户170494 2009-8-24 16:30
用户1201144 2009-4-23 18:39
用户1110638 2008-12-25 16:59
我现在也碰到这样的问题,请帮忙发一份,谢谢楼主。。
zhbsniper@yahoo.com.cn
用户1110638 2008-12-25 16:57
zhbsniper@yahoo.com.cn
huli184_389376486 2008-9-17 13:27
用户146741 2008-6-13 14:56
用户146643 2008-6-6 21:02