485通讯,上位机发送数据和下位机发送数据如何协调会不会总线上接受和发送冲突呢在程序里如何规定呢。

485通讯,上位机发送数据和下位机发送数据如何协调会不会总线上接受和发送冲突呢在程序里如何规定呢。,第1张

RS-485接口大多都是基于RS-232接口与电脑进行通信的,485协议编程都是基于串口编程的,而由于RS-232与RS-485接口的不同,由于RS-232只支持点对点通信,全双工通信,而RS-485是支持点对多点通信,半双工通信,基于其编写的协议有一定的相关性又有一定的区别。

RS-232接口支持点对点通信,全双工通信模式,现在对于RS-232的使用大多都是基于无Modem连接,其分为握手连接和无握手连接,握手连接方式类似于打电话,请求连接方发起连接请求发送,等待对方准备就绪并且允许发送,然后发送数据,发送数据的同时也可以接收对方发送的数据。而无握手连接则是类似于对讲,直接发送相关的数据过去,由于现在硬件功能增强,串口可以随时处于准备接收状态。在针对RS-232串口进行编程,无握手连接最简单,而握手连接则需要编写相应的应答命令之类的代码。

RS-485接口支持点对多点通信,半双工通信模式,由于485是半双工通信模式,就必须要解决数据流向问题,就像某条铁路可以双向通车,为了防止撞车追尾等事故的发生,必须要通过相应的调度来解决该问题,同样的道理,由于支持点对多点通信,也必须要通过主机进行相应的调度来解决该问题,而且主机对于整个总线必须具有绝对的控制权。关于485通信问题,我们利用老师在教室讲课作为例子来说明。

我们假设老师作为RS-485总线的主机,而学生作为485总线的从设备,而学生的学号则是从设备的地址码。老师对于整个课堂具有绝对的掌控力,一般来说,老师在上课之前会对学生进行点名以确实学生是否有缺课的,同样的道理,RS-485总线的主机一开始也会对从设备进行一次轮询,逐个地址码去询问设备是否正常并且对相关情况做个记录,防止在正常通信的时候不断呼叫并不存在的地址码而导致通信效率下降。主机对于从设备的控制是利用广播方式发送下去的,而从设备只对含有自己地址码的指令做相关的回应,在从设备做回应的情况下,其他的从设备和主机保持沉默,当从设备执行完相关指令之后,发送完毕信号给主机,主机继续执行下一条指令。就像老师在课堂讲课的时候,指定某个学生回答问题,学生回答问题过程中,其他学生和老师保持沉默,不容许课堂上有讲小话的情况,只有当学生回答完问题之后并且告知老师自己回答完毕,老师才会继续讲课或者指令另外的学生做相应的动作。485协议的编程基于上面的思路编写。

RS-485总线协议对于意外情况的处理,当485总线主机对其从设备发送相关的指令的时候,从设备可能会因为种种原因而不执行相关指令的情况,比如从设备在使用过程中损坏而不能回应相关指令,主机一般都会设定一个时延,在设定的时间之内得不到相关从设备的回应,其应该做相应的记录并且执行下一条指令。就像老师点名要求某个学生回答问题,而没有得到相应的回应,点名三次之后,还是没有回应,对于该学生的缺课做相关的记录,然后继续下面的课程。

关于485总线线路另外的一些问题也可以用老师讲课来做比喻,如老师讲课过程中,外面的噪音非常的大,从而导致学生听不到,那就需要加扩音器,对于485总线而言,就是外部干扰过大,导致衰减的485信号淹没在噪声中,需要增加485中继器中继还原相关信号再次传输,同样的道理,如果教室过大,导致老师说的话并不能传到最后面的学生处,也是增加扩音器来解决问题,当485总线传输距离过长的时候,也是通过485中继器放大信号延长传输距离,还有就是如果讲课过程中,产生了混音的情况有可能会导致整个课堂都听不清楚,就将其划分为多个小教室,通过多个广播将老师的声音分别传入各个教室,使其不混杂都能够听清楚,如果将多个RS-485总线简单的按照星型连接或者树形连接方式连接,就会产生信号反射等问题,就必须采用485集线器或者485中继器将其相互隔离,独立驱动,不会相互影响,从而保证485通信的稳定性。

如果与电脑连接的话,直接用单片机通过max232与电脑连接就行啦

如果用485,电脑端、单片机都要加个485芯片转成485才能通信

电路图如图,

把其中一端改成电脑并加个232转485模块就行啦,

单片机端程序

#include <reg51h>

#define uchar unsigned char

sbit sendkey=P2^0;

unsigned char tempy;

void init(void)//串口初始化

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

PCON=0x00;

TCON=0x40;

TR1=1;

SCON=0x50;

}

void main()

{

init();

while(1)

{

//------------------

//485接收字符

sendkey=0;

while(RI==0);

tempy=SBUF;

RI=0;

//------------------

//485发送字符

sendkey=1;

SBUF=tempy;

while(TI==0);TI=0;

//-------------------

}

}

好好检查下你的硬件

程序我没有改

运行效果见图

晶振110592MHz

设置MODBUS通讯,以PLC为主站,流量计为从站,建立通讯。这里,8 位二进制,以十六进制数09,AF来表示。编写SEND子程序来完成16进制查询命令的生成和数据的发送;RECV子程序完成接收到的数据的处理;CRC子程序完成发送数据和接收数据的校验码生成 SEND子程序调用指令格式为-[ECALLP “SEND” P700 W30 W35 W3A]。ECALLP是子程序调用指令;“SEND”是子程序名称;P700是公用指针号;链接寄存器W30、W35和W3A是子程序的传递参数,分别表示设备号、功能代码和数据。例如:链接寄存器W30、W35和W3A的值分别为1、5和64(16进制);则表示设定设备号为1的质量流量计的流量输出值为100sccm,QJ71C24-R4将发送16进制查询命令0106 0011 0064 D824。

台达PLC本身就有自带的485通讯口,因此不需要另外再做485通讯程序。

台达PLC采用可以编制程序的存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计数和算术运算等 *** 作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。

台达PLC除了具有快速执行程序运算、丰富指令集、多元扩展功能卡及高性价比等特色外,并且支持多种通讯协议,使工业自动控制系统联成一个整体。

PLC品种齐全的各种硬件装置,可以组成能满足各种要求的控制系统,用户不必自己再设计和制作硬件装置。不必改变PLC的硬设备,只需改编程序就可以满足要求。

扩展资料:

台达PLC的优点:

1、功能强,适应面广

现代PLC不仅有逻辑运算、计时、计数、顺序控制等功能,还具有数字和模拟量的输入输出、功率驱动、通信、人机对话、自检、记录显示等功能。既可控制一台生产机械、一条生产线,又可控制一个生产过程。

2、编程简单,容易掌握

大多数PLC仍采用继电控制形式的“梯形图编程方式”。既继承了传统控制线路的清晰直观,又考虑到大多数工厂企业电气技术人员的读图习惯及编程水平,所以非常容易接受和掌握。

3、减少了控制系统的设计及施工的工作量

由于PLC采用了软件来取代继电器控制系统中大量的中间继电器、时间继电器、计数器等器件,控制柜的设计安装接线工作量大为减少。

参考资料来源:百度百科—台达PLC

以上就是关于485通讯,上位机发送数据和下位机发送数据如何协调会不会总线上接受和发送冲突呢在程序里如何规定呢。全部的内容,包括:485通讯,上位机发送数据和下位机发送数据如何协调会不会总线上接受和发送冲突呢在程序里如何规定呢。、求AT89C52单片机用MAX485与PC机串口通讯程序、台达PLC与带有485功能输出的流量计如何通讯且读写数据,程序怎么写~~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10211723.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存