RS485 和 RS232 在串口通讯编程上有什么区别?因为485是一对多,那么主机怎么与指定的设备通讯呢?

lh1611 2012-06-08 03:17:08
我以前写过RS232通讯,对RS232串口通讯的流程比较了解,但最近公司的项目变成了RS485通讯,我想问一下各位大侠,RS485通讯与RS232通讯在程序代码上有什么区别。
1,我在网上查了一下,都说RS232与RS485在代码上没有任何区别,这是我不能够理解的,因为RS232是一对一通讯,只要把COM口打开,只须接收数据就行了。
但是RS485,它是一对多通讯,我把COM口打开,接收到的数据,我怎么知道这个数据是哪台设备发过来的呢,而且我要向指定的设备发数据又怎么实现呢。
我想,至少485通讯的时候,每次数据的收发,要把设备号带上吧, 要不然怎么识别那么多的从设备呢??


求解,最好是有源代码,因为用代码讲解是最清楚的,如果有485通讯的源程序更好,我的开发语言是C#。 谢谢大家了,分不多,是个意思。呵呵。
...全文
26728 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongqi1029 2015-02-24
  • 打赏
  • 举报
回复
学习了,我们买的485的设备,确实可以通过显示屏、菜单、按键设置地址;
卑微谜 2014-10-13
  • 打赏
  • 举报
回复
485一般+modbus协议
agilis 2014-04-15
  • 打赏
  • 举报
回复
可以传输图像啊,不过图像封包和解包得自己来定协议,此外图像太大用串口传效率很低哦。
天行剑 2013-03-25
  • 打赏
  • 举报
回复
顺便问一下,RS232串口之间能实现图像传输吗?
fulings55 2013-01-22
  • 打赏
  • 举报
回复
用485通信的时候,给每台设备都发送命令,发命令时代上地址,设备地址在出厂时都有,比如FS2500的出厂地址就是0x02或者其他的16进制数,如果命令符合某台设备的命令形式的话,就会返回数据,在返回的数据中也会带有他本身的地址,你只要通过地址就可以识别是哪个设备了
bdsutx 2012-06-11
  • 打赏
  • 举报
回复
我没搞过RS232,我现在正在做RS-485.我觉得它们两者是协议的不同.大部分情况下RS-485都是用465协议
发送什么指令都是要根据协议的.485通讯设备都会有自已的通讯地址的.通讯地址可以是出产的时候已经设好了
我们公司是生产智能电表的.表地址是出产的时候就已经设置好的,不可更改,客户只能更改表号.
我举一个例子,如果客户要更改表号,就要发送命令:FE FE FE 68 A0-A5 68 1C L DI0-DI3 PA PO P1 P2
C0-C3 B0-B5 R0-RM S0-SM CS 16
A0-A5就是表地址。B0-B5就是表号。
FE是唤醒符号,1C是控制码,L是数据长度,DI0-DI3是数据标识,PA是密码权限,P0-P3是密码,C0-C3是操
作者代码,R0-RM是随机数1,S0-SM是密文1,CS是校验和。
lh1611 2012-06-11
  • 打赏
  • 举报
回复
谢谢小猪及各位大侠,结帖给分了。
showlie 2012-06-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

设备的地址如何设定呢??

是用命令吗? 是什么命令?请大侠回复一下啊,谢谢。
[/Quote]

设备地址一般都是人为设定的,如果此设备支持485,那么它可能有个地方能设置设备地址,或是拨片,或是配置界面中设置。这个需要咨询一下硬件工程师了。
然后,上位机与设备的通讯协议中肯定包含了一个设备地址的。这个查下设备的开发文档协议就清楚了。
lh1611 2012-06-11
  • 打赏
  • 举报
回复
设备的地址如何设定呢??

是用命令吗? 是什么命令?请大侠回复一下啊,谢谢。
showlie 2012-06-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

一个485上多个设备,设备用地址区分,发命令的时候就根据地址去识别噻,发给谁谁就响应,数据发回也有地址的
[/Quote]

照2楼的意思,如果与设备的通讯协议是固定的,也就是说在通讯命令中包含了设备号,那样的话就没问题了。
xuqing19830921 2012-06-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

我再问一下,485设备地址是怎么确定的呢? 是自己随意确定的,还是有什么规律,还是设备出厂时就已经有了?
[/Quote]
地址在设备上可以人为设定,一般支持485总线的设备都有设定地址的功能
lh1611 2012-06-11
  • 打赏
  • 举报
回复
第二个问题, 那终端回数据的格式又是怎么样的呢 应该带自己的设备号码吧。
比如01010102的设备回ok,是不是就是ff f8 01010102 0002 ok 呢,
谢谢楼上的啊,有人在围观啊,呵呵
lh1611 2012-06-11
  • 打赏
  • 举报
回复
我再问一下,485设备地址是怎么确定的呢? 是自己随意确定的,还是有什么规律,还是设备出厂时就已经有了?
只在此山中 2012-06-11
  • 打赏
  • 举报
回复
我这用的时候也是和232一样,就是在数据中 前面加了485设备地址,
如发数据abc给地址01010101的设备,串口数据就是ff f8 01010101 0003 abc ,ff f8是标志头,0003是数据长度
如发数据ok给地址01010102的设备,数据就是ff f8 01010102 0002 ok
无常名 2012-06-11
  • 打赏
  • 举报
回复
每个485的设备回发数据的时候,前面带上设备的"地址"。或者可以使用串口转网口的转换器,那个有IP地址。
showlie 2012-06-11
  • 打赏
  • 举报
回复
帮顶,一般都在用RS232,485的还真没用过,关注一下。
lh1611 2012-06-11
  • 打赏
  • 举报
回复
呵呵,终于有个人冒了个泡。谢谢啊。

你的意思是不是我在发送指令的时候,自己在指令的前面加上终端设备号。 而485发送的时候,是群发,所有的终端设备都会收到这个指令,然后各个终端设备自己去查一下,如果命令前面的设备号是自己的号码,自己就去接收,否则不接收啊。
终端发命令的时候,也把自己的设备号码带在指令前面,这样,主端接收到命令,根据命令前面的终端号,就知道是哪个终端发的命令啊,

不知道楼上说的是不是这个意思。
lfqsy 2012-06-11
  • 打赏
  • 举报
回复
一个485上多个设备,设备用地址区分,发命令的时候就根据地址去识别噻,发给谁谁就响应,数据发回也有地址的
lh1611 2012-06-11
  • 打赏
  • 举报
回复
怎么没有人回复呢? 难道大家都没有写过这样的程序吗? 求高手指点。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧