前言
本博文主要是对编写的串口通讯demo进行一个分享,程序已经通过测试,内含源码和exe文件,可以直接在博文中下载使用,也可以从串口数据接受demo.zip进行下载。
485串口通讯
485串口通讯是一种常见的串行通信协议,也称为RS-485协议。它是一种差分信号传输协议,通过两条信号线(通常称为“双绞线”)进行数据传输。下面是对485串口通讯的一些详细介绍:
- 硬件接口:RS-485标准定义了两个线:接收线(通常是红色或棕色)和发送线(通常是白色或蓝色)。这两条线在逻辑上是对称的,用于传输差分信号。这种接口通常采用9针的D型连接器。
- 传输距离与速度:RS-485具有较长的传输距离,最高可达1200米,但速度相对较慢,通常在9600-115200 bps之间。
- 多点通信:RS-485支持多点通信,即多个设备可以通过一条总线进行通信,最多可挂载32个设备。为了实现这一功能,主设备(通常是PC或其他微控制器)通过发送设备地址来选择与哪个从设备通信。
- 方向控制:RS-485具有方向控制功能,允许主设备通过发送特殊字符(例如,ESC序列)来控制数据的发送方向,即从设备发送或主设备发送。
- 电气特性:RS-485具有半双工的通信方式,以及针对长距离通信的电气特性规定。它使用差分信号传输方式,可以抵抗电气噪声干扰,因此在工业环境中经常使用。
- 应用领域:RS-485广泛应用于各种领域,如工业自动化、智能家居、楼宇自动化、安防系统等。由于其长距离和多设备的支持能力,RS-485在需要分布式数据采集和控制的系统中非常受欢迎。
- 与RS-232的比较:RS-232是另一种常见的串行通信协议,但与RS-485不同,它使用单端信号传输方式,不支持长距离或多点通信。因此,对于需要更远距离或更多设备通信的应用,RS-485通常是更好的选择。
总之,RS-485是一种可靠、长距离、多设备的串行通信协议,适用于多种应用场景。
测试效果展示
额外补充
【QT】串口通讯demo分享部分就先到这!接下来,是一些个人平时整理的c++要点概要,如有需要可以进行阅读!
结构体
- 第一种是最基本的结构体定义, 其定义了一个结构体 A。
struct A { int a;};
- 第二种则是在定义了一个结构体 B 的同时定义了一个结构体 B 的变量 m。
struct B { int b;}m;
- 第三种结构体定义没有给出该结构体的名称, 但是定义了一个该结构体的变量 n, 也就是说,若是想要在别处定义该结构体的变量是不行的, 只有变量 n 这种在定义结构体的同时定义变量才行。
struct { int c;}n;
- 第四种结构体定义在第一种结构定义的基础上加了关键字
typedef
, 此时我们将struct D{int d}
看成是一个数据类型, 但是因为并没有给出别名, 直接用 D 定义变量是不行的。 如D test;
,不能直接这样定义变量 test。 但struct D test;
可行。
typedef struct D { int d;};
- 第五种结构体定义在第四种结构体定义的基础上加上了别名 x, 此时像在第四种结构体定义中说得那样, 此时的结构体 E 有别名 x, 故可以用 x 定义 E 的结构体变量。 用 E 不能直接定义, 需要在前面加
struct,
如struct E test;
。
typedef struct E { int e;}x;
- 第六种结构体定义在第五种的基础上减去了结构体名, 但是若是直接使用 y 来定义该结构体类型的变量也是可以的。 如
y test;
。 (常用)
typedef struct { int f;}y;
函数重载
- C++函数重载的判断依据
- 函数形参的个数;
- 函数形参的类型;
- 形参的顺序;
- 不能把返回值作为函数重载的条件, 原因是编译器在编译时不会去判断函数的返回类型,函数只有调用后, 编译器才会去验证返回类型, 所以返回值不能作为函数重载的依据;
- 常函数 const 可以作为函数重载判断依据, 原因: 重载[]运算符时, 有没有 const 的区别是: 有 const 只读, 没有 const 读写都可以。
- 注意事项:
- 形参的个数或类型至少要有一项是不同的;
- 编译器不以返回值来区分函数。
虚函数和纯虚函数
纯虚函数是指在 C++中, 函数可以用“virtual”和“= 0”关键字来声明。 该函数是一个虚函数,但是在声明时, 没有定义它的函数体。 它是一个空函数, 只提供函数声明, 而不提供实际实现。 由于它编译器不能确定如何实现, 因此需要在子类中实现它。 因此, 纯虚函数也被称为抽象函数。 形如:
class <类名>
{
virtual <类型><函数名>(<参数表>)=0;
…
};
虚函数和纯虚函数的特性:
- 虚函数可以在类中声明, 也可以在类的外部声明, 编译器会自动将它们转换为虚函数;但是纯虚函数只能在类中声明, 而不能在类的外部声明。
- 虚函数可以有实现, 也可以没有实现; 而纯虚函数没有实现, 不可以有实现。
- 虚函数可以在子类中覆盖, 也可以不被覆盖; 而纯虚函数必须在子类中覆盖, 否则编译器将报错。
- 虚函数可以被多态调用, 也可以被静态调用; 而纯虚函数只可以被多态调用, 不可以被静态调用。
内敛函数
使用内联函数的时候要注意:
- 递归函数不能定义为内联函数。
- 内联函数一般适合于不存在 while 和 switch 等复杂的结构且只有 1~5 条语句的小函数上,否则编译系统将该函数视为普通函数。
- 内联函数只能先定义后使用, 否则编译系统也会把它认为是普通函数。
- 对内联函数不能进行异常的接口声明。
重载
两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,在编译时,由编译器根据实参的类型和个数,自动确定调用哪一个函数,即为重载。
注意事项:
- 形参的个数或类型至少要有一项是不同的;
- 编译器不以返回值来区分函数。