前言
公司写界面的小伙伴离职了,下一个项目不得不承担起来,公司需要什么就要补上。
**
目录
1、准备工作
**
1.1 上位机和下位机的概念
简单来说,上位机是发出命令的计算机,承担主要命令的发布;下位机是执行命名的计算机,承担功能实现和错误信息返回。简而言之,一个是领导(上位机),一个是员工(下位机)。
接下来为官方概念,可跳过。上位机和下位机是分布式系统中的两个重要概念。
上位机通常指的是更高级别的计算机设备,如桌面计算机、服务器或嵌入式计算机等。它们在系统中负责控制和管理整个系统,收集并处理数据,执行复杂的算法和逻辑操作。上位机通常运行着高级语言编写的软件程序,提供用户友好的图形界面,以便用户可以与系统进行交互。
下位机通常指的是更低级别的计算机设备,如微控制器、单片机、传感器等。它们在系统中负责执行简单的控制任务,收集传感器数据并将其传递给上位机,或执行上位机发送的指令。下位机通常使用低级语言编写的程序,可以直接与硬件交互。
在分布式系统中,上位机和下位机之间通过通信协议进行通信。例如,可以使用不同的通讯协议(如RS232的串口通讯或者RS485串行通讯)实现上位机和下位机之间的远程控制和监控,以及实时数据和状态信息的获取。
1.2 串口是什么?
既然双方已经准备好了,那上位机如何将命令传输为下位机,这就涉及到数据传输的通道,也就是串口通信接口,或者COM接口。
我用的是232转USB的通信方式,需要先安装驱动;电脑上相对应的COM口自然就出现啦!win键点击右键,选择设备管理器。![在这里插入图片描述](https://img-blog.csdnimg.cn/487064b5a4854151914f62bdeb13cf84.png)
1.3 环境搭建
因为我的上位机和下位机都是计算机,所以在两个设备上分别装上了驱动以及串口通信工具。
备注:用串口通信工具主要为了排查是连接以及设备硬件出现了问题,否则python通信代码写错了再归为硬件的问题。
2、程序
2.1 上位机代码
上位机主要是发指令。
```python
import serial #导入模块
import time
# 端口号,根据自己实际情况输入,可以在设备管理器查看
port = "COM1"
# 串口波特率,根据自己实际情况输入(232的都是9600)
bps = 9600
# 超时时间,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
# 打开串口,并返回串口对象
ser = serial.Serial(port, bps, timeout=0.1)
# 发送数据的代码
def receive_command():
data = ser.readline().hex().strip()
if data != '':
print('Received:', data)
def send_command(hex_command):
try:
# 串口发送一个字符串
# len = ser.write("hello world".encode('utf-8'))
command = bytes.fromhex(hex_command)
len = ser.write(command)
print("send len: ", len)
receive_command()
# 关闭串口
# ser.close()
except Exception as result:
print("******error******:", result)
def main():
while True:
# 定时发送数据
# 关机指令,16进制编码
hex_command = '24 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 03 06 66 2A'
send_command(hex_command)
# print("send len: ", len)
time.sleep(10)
main()
```
2.2 下位机代码
下位机主要是收指令。
```python
import serial #导入模块
import time
# 端口号,根据自己实际情况输入,可以在设备管理器查看
port = "COM1"
# 串口波特率,根据自己实际情况输入
bps = 9600
# 超时时间,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
# 打开串口,并返回串口对象
ser = serial.Serial(port, bps, timeout=0.1)
# 发送数据的代码
def receive_command():
data = ser.readline().hex().strip()
if data != '':
print('Received:', data)
def main():
while True:
receive_command()
main()
```
3、结束
当上位机和下位机通信正常后,剩下就是基于指令信息完成相应功能,那我开发新功能去了呀!!