栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

易事特UPS电源(非标准modbus协议)对接

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

易事特UPS电源(非标准modbus协议)对接

self.debug(_msg) if private in self.data2attrs[dataId][ config ][ param ] and self.data2attrs[dataId][ config ][ param ][ private ] first_point : if type(_msg) tuple: return _msg else: return () except Exception as e: self.debug( error e)

驱动解析 编写环境为python2(python3也可以 首先需要导入modbus_tk和paho.mqtt等、数据解析和modbus通讯的相关包
# encoding: utf-8
# python 3.6
import random
import time
import threading
from paho.mqtt import client as mqtt_client
import serial
from serial import Serial
import modbus_tk.modbus_rtu as modbus_rtu
 利用modbus_tk里面的modbus_rtu打开服务器的串口并向其发送指令 其中serialObjTmp serial.Serial(port com11 , baudrate 9600, timeout 0.5)中port表示串口号 baudrate表示波特率 timeout表示超时时间。打开串口后利用ser.write(b xEAx01x01xEAx01x81x00x82xEF )向串口发送数据 需要发送十六进制的bytes类型。读取数据后进行数据的处理
class com_get_info():
 def master(self):
 try:
 ser serial.Serial( com3 , 9600, timeout 0.5)
 ser.write(b xEAx01x01xEAx01x81x00x82xEF )
 pre_data ser.readline()
 print pre_data
 data .join([hex(ord(c)) for c in pre_data])
 data1 data.split( 0x )
 data2 
 for i in data1:
 if len(i) 1:
 data2 0 
 data2 i
 U101 int(data2[12: 16]) * 0.1
 U102 int(data2[16: 20]) * 0.1
 U103 int(data2[20: 24]) * 0.1
 U104 int(data2[24: 28]) * 0.1
 U105 int(data2[28: 32]) * 0.1
 U106 int(data2[32: 36]) * 0.1
 U107 int(data2[36: 40]) * 0.1
 U108 int(data2[40: 44]) * 0.1
 U109 int(data2[44: 48]) * 0.1
 U110 int(data2[48: 52]) * 0.1
 U111 int(data2[52: 56]) * 0.1
 U112 int(data2[56: 60]) * 0.1
 # 输出R相视在功率
 A int(data2[84: 87])
 if int(data2[87]) 0:
 U113 A 1
 # 输出S相视在功率
 B int(data2[88: 91])
 if int(data2[91]) 0:
 U114 B 1
 # 输出T相视在功率
 C int(data2[92: 95])
 if int(data2[94]) 0:
 U115 C 1
 # 1号电池组电压
 U116 int(data2[60: 64]) * 0.1
 # 2号电池组电压
 U117 int(data2[64: 68]) * 0.1
 # 逆变输出频率
 U120 int(data2[76: 80]) * 0.1
 # 主输入状态
 if U101 150:
 U123 1
 else:
 U123 0
 # 逆变状态
 if U104 150:
 U124 1
 else:
 U124 0
 # 旁路输入状态
 if U107 150:
 U125 1
 else:
 U125 0
 # 电池供电状态
 if U101 100:
 U126 1
 else:
 U126 0
 # 整流器状态
 if U125 1 and U126 0:
 U127 1
 else:
 U127 0
 # 旁路供电状态
 if U125 1 and U110 0.1 and U124 0:
 U128 1
 else:
 U128 0
 # 输入C相过压
 if U103 250:
 U0113 1
 else:
 U0113 0
 # 输入C相欠压
 if U103 180:
 U0114 1
 else:
 U0114 0
 # 输入B相过压
 if U102 250:
 U0115 1
 else:
 U0115 0
 # 输入B相欠压
 if U102 180:
 U0116 1
 else:
 U0116 0
 # 输入A相过压
 if U101 250:
 U0117 1
 else:
 U0117 0
 # 输入A相欠压
 if U101 180:
 U0118 1
 else:
 U0118 0
 # 旁路C相过压
 if U109 250:
 U0123 1
 else:
 U0123 0
 # 旁路C相欠压
 if U109 180:
 U0124 1
 else:
 U0124 0
 # 旁路B相过压
 if U108 250:
 U0125 1
 else:
 U0125 0
 # 旁路B相欠压
 if U108 180:
 U0126 1
 else:
 U0126 0
 # 旁路A相过压
 if U107 250:
 U0127 1
 else:
 U0127 0
 # 旁路A相欠压
 if U107 180:
 U0128 1
 else:
 U0128 0
 # 逆变C相过压
 if U106 250:
 U0133 1
 else:
 U0133 0
 # 逆变C相欠压
 if U106 180:
 U0134 1
 else:
 U0134 0
 # 逆变B相过压
 if U105 250:
 U0135 1
 else:
 U0135 0
 # 逆变B相过压
 if U105 180:
 U0136 1
 else:
 U0136 0
 # 逆变A相过压
 if U104 250:
 U0137 1
 else:
 U0137 0
 # 逆变A相欠压
 if U104 180:
 U0138 1
 else:
 U0138 0
 data_code_false (U101, U102, U103, U104, U105, U106, U107, U108, U109, U110, U111, U112, A, B, C, U116, U117, U120, U123, U124, U125, U126, U127, U128, U0113, U0114, U0115, U0116, U0117, U0118, U0123, U0124, U0125, U0126, U0127, U0128, U0133, U0134, U0135, U0136, U0137, U0138,)
 print len(data_code_false)
 return data_code_false
 except Exception,e:
 pass
读取数据并处理后返回 利用mqtt将其发布到对应的topic
class info():
 def __init__(self):
 self.broker ***.***.***.*** #mqtt服务器地址,需要自行填写
 self.port *** #mqtt的端口 需要自行填写
 self.topic_airc /python/mqtt/ups #准备发布到mqtt的topic
 # generate client ID with pub prefix randomly
 self.client_id admin123
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267976.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号