打印
[C语言]

rs485的问题

[复制链接]
2579|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
logokfu|  楼主 | 2013-7-28 08:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ningling_21| | 2013-7-28 10:17 | 只看该作者
485需要控制数据的方向,也就是发送还是接收,一般把两个控制端连到一起控制。
所以,发送前,先把485设置为发送状态(有时需要短暂延时),再写SBUF;
接收时,先把485设置为接收状态,再等待接收完成;

地址是通信协议里规定的,可以有,一对多时必须有地址区分不同的模块....

使用特权

评论回复
板凳
ningling_21| | 2013-7-28 10:48 | 只看该作者
如果是一对多,那从机必须确定自己的地址,解码时对地址进行比较 相同则响应, 不同不响应...
地址可通过外部 拨码开关或软件固定地址...

使用特权

评论回复
地板
fzkqi| | 2013-7-28 22:10 | 只看该作者
所有从机接收,判断协议地址和自身地址相同则响应。你用rs232做多机通讯,难道所有从机的TX都接在一起吗,能正常工作吗?

使用特权

评论回复
5
fp123123| | 2013-7-28 23:14 | 只看该作者
楼主已经知道485理论的东西了,不需要多说,给个例子你看看就明白了,很简单的:

从硬件上看,485任何时候都是广播的通讯方式,所以有下面的做法:

例如, 主机发送一个消息给全部从机, 格式是
第1个字节 #
第2个字节 消息代码 例如 0x01
第3个字节 从机地址
n个字节 消息数据
最后1个字节 CRC校验码

主机发送的这个消息, 全部从机都会收到, 如果从机发现"消息代码"是自己可以识别和处理的类型, 并且自己的地址和消息中的地址相同, 则处理消息并按以下格式发送响应消息

第1个字节 #
第2个字节 响应消息代码 例如 0x02
n个字节 消息数据
最后1个字节 CRC校验码

要注意的是,这个响应消息同样是"广播"的,所有从机和主机都会收到,在这个例子里,0x02的消息代码是只发送给主机的,所以消息里没有地址. 实际上如果需要的话, 这个响应消息也可以加上地址码, 由这个从机发送给另外一个从机, 达到令牌传递的效果

因为485的广播特点, 在各个节点, 包括主机和从机, 消息响应的程序必须考虑到各种消息类型都能正确处理, 或正确"忽略", 否则接收到无法处理的消息就乱了

使用特权

评论回复
6
jlass| | 2013-7-29 08:53 | 只看该作者
这个直接去看485的通讯协议不就完了么。

使用特权

评论回复
7
joyme| | 2013-7-29 08:59 | 只看该作者
“自己编码的话岂不是可以随意设计通信协议了”
本来就可以随便定义协议的,如果想兼容性好点,就用modbus协议,一般都会用这个
485的芯片就是差分转换,没有含任何协议栈

使用特权

评论回复
8
joyme| | 2013-7-29 11:46 | 只看该作者
理解都没有问题啦,实际做一下就会发现是很简单的

使用特权

评论回复
9
ningling_21| | 2013-7-29 12:08 | 只看该作者
**kfu 发表于 2013-7-29 11:16
按照你的意思的话,只有两台设备通讯的话,不用寻址的话,那rs485和rs232在收发数据软件写法上就没有什么 ...

这样理解是没问题了...

使用特权

评论回复
10
江枫渔火| | 2013-7-29 16:51 | 只看该作者
跟RS232一样使用呀,没有用帧数据协议是不能寻址的~ 串口也可以一对多的呀,这一点上,其实只是硬件电平不一样,其他几乎区别不大。

使用特权

评论回复
11
zdhlixiang2006| | 2013-8-2 22:42 | 只看该作者
既然是通讯,肯定有协议,安排个地址元素不就可以了

使用特权

评论回复
12
人生之际| | 2013-8-3 21:06 | 只看该作者
学习Modbus协议,你就全明白了。

使用特权

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

本版积分规则

76

主题

2646

帖子

7

粉丝