Windows系统python与RS485型传感器通讯

Windows系统python与RS485型传感器通讯

一、准备操作
1.硬件:需要准备电脑一台,RS485型传感器两个,传感器供电设备一个(与传感器供电电压一致),USB转RS485线一根
2.软件: 电脑安装python3.X版本,需要安装serial库,或者使用pycharm,Anoconda,Mu等软件都可以。RS485驱动,CRC(循环冗余校验)。
二、测试
1.通过卖家给的传感器测试软件测试传感器是否有问题。
2.通过传感器资料查看传感器问询码。
3.通过串口调试助手测试能否传感器通讯成功
4.如果重新设置传感器参数,需要重新计算校验码。
在线计算CRC链接:https://editor.csdn.net/md?not_checkout=1&articleId=122897495
参数模型详见传感器资料
三、程序编辑
编辑以下程序:

import serial
import time

CO = "04 03 00 02 00 01 25 9F"           # 一氧化碳传感器问询帧
smoke = "03 03 00 03 00 01 75 E8"        # 烟雾传感器问询帧
temp_GS = 1                                   # 报警标志    1 正常   0 报警

ser = serial.Serial("COM3", 9600)  # 选择串口,设置波特率

def read_data(temp):
    global temp_GS
    if ser.is_open:
        print("port open success")
        # hex(16进制)转换为bytes(2进制),应注意python3.7与python2.7此处转换不同
        if temp:
            send_data = bytes.fromhex(CO)  # 发送数据转换为b'\xff\xff\xff\xff\xff'
        else:
            send_data = bytes.fromhex(smoke)
        ser.write(send_data)  # 发送数据
        time.sleep(0.1)       # 延时,否则len_return_data将返回0
        len_return_data = ser.inWaiting()  # 将获取缓冲数据(接收数据)长度
        # print(len_return_data)
        if len_return_data:
            return_data = ser.read(len_return_data)    # 读取缓冲数据
            # bytes(2进制)转换为hex(16进制),应注意python3.7与python2.7此处转换不同
            str_return_data = str(return_data.hex())
            # print(str_return_data)
            if temp:
                print("当前CO浓度为:", end="")
                print(int(str_return_data[6:10], 16) / 10, end="")  # 16进制转为整形   CO值
                print("ppm")
                if int(str_return_data[6:10], 16) > 50000:
                    print("当前CO浓度过高!")
                    temp_GS = 0
            else:
                print("当前烟雾状态:", end="")
                if int(str_return_data[6:10]):  # 16进制转为整形
                    print("警告")
                    print("起烟了!")
                    temp_GS = 0
                else:
                    print("正常")
    else:
        print("port open failed")
def main():
    read_data(1)
    time.sleep(0.5)
    read_data(0)
    time.sleep(0.5)
if __name__ == "__main__":
    # global temp_GS
    while temp_GS:
        main()

运行程序即可。

你可能感兴趣的:(windows,python,开发语言)