我以前一直以为计算机等的信号传输速率都是非常快的,不用计算时间差。
然而在实际应用中发现信息是需要传输时间的,而这些时间somehow是可以计算的。
为什么在RS485通讯实际应用中需要计算收发信息时间差?
在RS485通讯的实际应用中,计算收发信息的时间差是非常重要的,主要是为了确保通讯的可靠性、同步性和精确性。以下是在RS485通讯中需要计算时间差的几个关键原因:
1. 通讯同步: RS485通讯中的设备(例如控制器和执行器)通常需要在特定的时间点进行数据传输,以确保各个设备之间的操作同步。通过计算收发信息时间差,可以帮助设备确定何时开始接收或发送数据,从而实现数据的同步传输,避免数据冲突和错位。
2. 延迟补偿: 在RS485通讯中,信号传输需要一定的时间,特别是在较长的通讯距离中。设备之间的通信可能会受到信号传输的延迟影响。通过计算时间差,可以补偿由于信号传输延迟引起的不同步问题,确保数据在预期的时间内到达。
3. 数据完整性: RS485通讯中,数据的传输可能受到噪声、干扰或其他因素的干扰,导致数据传输的错误或丢失。通过计算时间差,可以检测接收到的数据是否在预期的时间范围内到达,从而判断数据的完整性和准确性。
4. 控制精度: 在一些应用中,特别是工业自动化和控制系统中,精确的时间控制是至关重要的。通过计算时间差,可以确保在准确的时间点触发设备操作或控制信号,从而实现系统的高精度控制。
5. 通讯速率和协议要求: RS485通讯协议规定了数据的传输速率和格式。在特定通讯速率下,数据的传输时间是固定的。通过计算时间差,可以确保数据在规定的时间窗口内传输,符合通讯协议的要求。
6. 系统性能优化: 通过计算时间差,可以优化系统性能,减少通讯延迟,提高通讯效率,从而使整个系统更加稳定和可靠。
综上所述,RS485通讯中计算收发信息时间差的主要目的是确保通讯的可靠性、同步性和精确性,从而实现准确的数据传输和系统控制。这对于工业自动化、仪器仪表、控制系统等领域的应用至关重要。
前提信息
波特率 9600;
控制器和执行器通过RS485通信;
控制器发出同步的命令为sync;
RS485: 1 bit start bit, 8 bits length, 1 bit stop bit, no parity check; 所以传输一次需要 10 bits的时间;
情景
控制器Control Unit 通过RS485与执行器Actuator通信,控制器在SyncTimeMark
这个时间点发出一个命令,说我需要在SkewTime
之后进行某个动作,而这个动作根据实际工况可能200ms就需要做一次。
执行器收到这个命令的时候已经在SyncTimeMark
之后又过了一个信息传输时间,我们称这个传输时间为TransferTime
,开始接到这个信号的时间点为ReceiveTime
。而一条信息可能长这样: 0x00 0x11 0x22 0x33 0x44 0x55 0x7F
。这样起始位为0x00,结束位为0x7F,一条信息总共占7个character,也就是7个bytes, 也就是需要传输7次,因为RS485一个数据帧有效数据只有8个bits。而传输一次需要加上起始位,也就是需要10 bits时间。总共需要70 bits的时间。
time of 1 bit = 1/baud rate = 1/9600 = 0.104 ms;
time of 70 bits = 70 * 0.104 = 7.3 ms;
在一个200ms的动作周期里延迟7ms其实是很大的一个延迟了, 所以我们才需要计算信号延迟时间。
如何计算
在RS485通信中,计算接收端的时间偏移量涉及到通信的波特率、传输时间和同步时间等因素。下面是一个简单的计算步骤:
-
确定通信波特率: 首先,需要明确通信中所使用的波特率。波特率表示每秒钟传输的位数。假设通信波特率为9600。
-
计算一个位时间: 计算每位数据传输所需要的时间。这可以通过公式计算:
1 / 波特率
。对于波特率为9600,一个位时间约为0.104 毫秒。 -
计算传输时间: 在RS485通信中,每次传输需要传输的比特数是固定的,通常为10位(包括起始位、数据位和停止位)。因此,传输一次需要的时间可以计算为:
传输位数 * 一个位时间
。 -
确定同步时间: 在控制系统中,为了保持设备之间的同步,可能需要在某个时间点发送同步信号。这个时间点被称为"SyncTimeMark"。
-
接收时间和计算: 当执行器接收到数据时,记录下接收的时间点(ReceiveTime)。根据上面的计算,计算出传输时间(TransferTime)。
-
计算偏移量: 通过下述公式计算时间偏移量:
BaudSkew = 1 / BaudRate; SkewWidth = SkewWidth + BaudSkew * 10 bits; // 从接收信息的起始信号开始计算 SyncTimeMark = ReceiveTime - SkewWidth;
这样,你就可以得到接收端的时间偏移量。请注意,实际应用中可能会有更多的因素需要考虑,比如硬件延迟、通信协议要求等,因此上述步骤可能会稍作调整。在设计通信系统时,确保所有因素都被充分考虑是非常重要的。
summery
在实际应用里,这个计算肯定会再稍微复杂一些,但是原理就差不多。
这里有一个名词:
“Overrun time" is to represent the additional time that need to process a received character.