博客

Prototypenentwicklung麻省理工学院的网络通讯协议

Programmierfachkraft, Python死去,JavaScript和html代码改einem Notebook-Bildschirm codiert
亚历克斯Pohjanpelto
亚历克斯Pohjanpelto
发表: 2021年9月7日,
产业政策Fertigung和Prozesse
产业政策Messungen
医疗保健

您entwickeln Prototypen奥得河苏晨去静脉kostengunstigen Moglichkeit, Feuchte和温度在我Anwendung祖messen ohne死Qualitat der Messungen祖茂堂beeintrachtigen吗?在Programmiersprachen Verfugen您zudem uber Grundkenntnisse Python ?是的,要是·霍夫我,您请祖能帮您叫您麻省理工学院努尔静脉HMP110探头,einemUSB-Servicekabel (219690)和einem电脑,再见,民主党Python 3 installiert坚持,problemlos Daten超级杯langeren Zeitraum protokollieren能帮。我erklare您死verschiedenen Abschnitte des密码,但您要是keine Erklarung wunschen,您能毛穴gesamten代码欧什zum不可或缺des文本得走了。Außerdem想我darauf hinweisen, dass死亡努尔静脉Beispielskript坚持,das死Modbus-Kommunikation demonstriert。

Bibliotheken

Bevor我们zum代码来,看清我们爹妈zunachst Bibliotheken一个死去,我们nutzen死去。死wichtigste davon是PyModbus。我们verwenden您,麻省理工学院der探头uber Modbus RTU祖茂堂kommunizieren——genauer gesagt importieren我们ModbusSerialClient来自pymodbus.client.sync。我们nutzen struct-Bibliothek死去,嗯位verschiedene Variablentypen祖manipulieren time-Bibliothek死去,嗯死Abfragerate祖andern datetime-Bibliothek死去,嗯死Uhrzeit和das基准面毛皮死Messwerte祖茂堂erhalten,和我们importieren argparse,嗯Argumente来自der Befehlszeile一窝祖茂堂ubergeben代码。

来自pymodbus.client。同步ModbusSerialClient als ModbusClient importieren
struct importieren
时间importieren
datetime importieren
argparse importieren

参数

我有einige Argumente hinzugefugt,嗯Flexibilitat des密码祖茂堂unterstutzen死去。我们verwenden这该死我们死亡Werte der Variablen einfach来自der Befehlszeile andern能帮,ohne verandern祖茂堂得窝代码。Argumente死去,死我als nutzlich betrachte,信德der Kommunikationsanschluss, der Datei der名称,在der死Daten gespeichert信德,死Slave-Adresse der探头,死Abfragerate和多尔der Datenprotokollierung死去。

解析器= argparse.ArgumentParser (
描述= " Modbus数据记录器"
)
解析器。add_argument(“端口”,帮助=“探头连接的串行通讯端口”)
解析器。add_argument (“- f”,“——文件”,帮助=“文件名存储数据(默认data.csv)”默认=“data.csv”)
解析器。add_argument(“——”“——地址”,帮助=”探测器的地址(默认240)”、默认= 240 = int类型)
解析器。add_argument (' - r ',”——率”,帮助=“秒的民意测验率”(默认为1),默认= 1,类型=浮动)
解析器。add_argument (“- l”,“——长度”,帮助=“小时数据日志的时间(默认9999999)”类型=浮动,默认= 9999999)
args = parser.parse_args ()

Modbus-Verbindung

我们得先neuen seriellen Modbus-Client麻省理工学院窝richtigen设置毛皮unsere探头initialisieren。在diesem Der Parametersatz Beispiel吵架Kommunikationsmethode死去,窝Kommunikationsanschluss, das Antwort-Timeout,波特率死去,死Stoppbit和死Paritat umfassen。模方法lautet„rtu”毛皮Modbus rtu。Der联合hangt冯Ihrem计算机ab,大刀艺术品我在einem Abschnitt unten请通过,是不是您窝richtigen法登。死anderen参数了军队死设置der探头bestimmt——死entsprechenden Werte信德im Datenblatt der探头nachzulesen。Typischerweise betragt死波特率毛皮Vaisala Sonden 19200,死Stoppbit信德Paritat ist keine 2和死亡。

探针= ModbusClient(方法= rtu,端口=参数。港口,超时= 1,波特率= 19200,stopbits = 2,平价= ' N ')

Auslesen der Halteregister

嫩Erstellen我们一张Funktion zum Auslesen der Halteregister探头。我们响彻死方法read_holding_registers () der Modbus-Client-Instanz,死我们im vorherigen Abschnitt erstellt抗议,嗯注册auszulesen死去。我们得Startadresse des Halteregisters死去,死Anzahl der寄存器和死Slave-Adresse der探头angeben。我们erhalten死Daten来自窝Registern 16-Bit-Wortern im Little-Endian-Format,死我们丹在32-Bit-Gleitkommawerte konvertieren得。

def holding_registers_data ():
试一试:
寄存器=调查。read_holding_registers(地址= 0,数= 10,单位= args.address) .registers
除了例外e:
打印(e)
返回False,没有,没有,没有
试一试:
rh = data_from_register(寄存器,1)
t = data_from_register(寄存器,3)
dp = data_from_register(寄存器,9)

除了例外e:
打印(e)
返回False,没有,没有,没有
返回True, rh, t, dp

在32-Bit-Werte Konvertieren der注册

死亡登记了als 16-Bit-Ganzzahlen gespeichert,和我们得您在32-Bit-Floatwerte konvertieren。我有一张Funktion erstellt,死的死Registerwerte和窝Registerindex ubernimmt和杯32-Bit-Gleitkommawert der Daten zuruckgibt一个diesem指标。我们nutzen das struct-Modul,嗯这Konvertierung durchzufuhren。

def data_from_register(寄存器,我):
返回struct.unpack (”!f ', bytes.fromhex (' {0:04x} ' .format(寄存器[我])+“{0:04x}”.format(寄存器(张))))[0]

Protokollieren der Daten

达我们嫩模Halteregister auslesen和死在32-Bit-Gleitkommawerte Werte konvertieren能帮,得我们一张Funktion erstellen,死的死Werte在静脉CSV-Datei speichert。大足有我一张Funktion以data_logger erstellt ()。您ruft死Funktion holding_registers_data()和汪汪汪hangt死empfangenen Daten Datei im datetime格式的风景明信片,相对Feuchte,温,Taupunkt。

def data_logger ():
probe.connect ()
成功,rh, t, dp = holding_registers_data ()
如果(成功):
dt = datetime.datetime.now ()

试一试:
张开(arg游戏。文件,“a”) f:
行= f”{dt}, {rh}, {t}, {dp} \ n”
print(线)
f.write(线)
除了例外e:
打印(e)
probe.close ()
time . sleep (args.rate)

其他:
probe.close ()
time . sleep (0.5)

Bestimmen des Kommunikationsanschlusses探头

dass Stellen您zunachst西歇尔死探头richtig我电脑angeschlossen坚持。

窗户
Im Windows-Betriebssystem法登您窝COM-Anschluss des Gerats Gerate-Manager化生。Offnen您das„Startmenu“汪汪汪民主党Bildschirm unten链接,和您„Gerate-Manager“静脉,嗯das Gerate-Manager-Fenster祖茂堂Offnen。Es sollte als往昔Ergebnis unt„Hochste Ubereinstimmung angezeigt”了。Offnen您,indem您auf das象征klicken奥得河死Eingabetaste auf der Tastatur drucken。Klicken您天改Pfeil neben„Anschlusse”(串口和并口)嗯死Anschlusse祖茂堂erweitern。Es sollte静脉Gerat als„Vaisala USB-Gerat”麻省民主党COM-Anschluss daneben aufgefuhrt盛,在unserem COM6下降。

图像
确定调查的通信端口

Linux
unt Linux您能窝Kommunikationsanschluss bestimmen indem您即时通讯终端窝Befehl„dmesg | grep eingeben tty”。Er sollte unt anderem一张Anweisung ahnlich是不是„cp210x转换器现在连着ttyUSBn”zuruckgeben, wobei ttyUSBn der联合坚持。

Ausfuhren des密码

嗯das Skript ausfuhren祖能帮得阿莱Bibliotheken installiert盛。贝Bedarf您能窝pip-Befehl

pip3 - u pymodbus安装
verwenden,嗯PyModbus祖茂堂installieren。死anderen Bibliotheken sollten bereits im Python 3-Paket enthalten盛。
Navigieren您在静脉Eingabeaufforderung祖茂堂民主党Verzeichnis,民主党das Python-Skript gespeichert坚持,和您
python Modbus_RTU - h

静脉,帮助吧台Argumenten祖茂堂erhalten。死在der sollte Eingabeaufforderung angezeigt了。Unten看清您杯der Ausgabe截图。

图像
终端

Der足球notwendige参数是Der Kommunikationsanschluss在内anderen Argumente杯Standardwert aufweisen,窝您贝Bedarf andern能帮。Das Kommunikationsanschlussargument erfordert keinen Bezeichner和萤石的beliebiger Stelle新一轮Dateinamen platziert了。死anderen optionalen Argumente erfordern杯Bezeichner。
Im Folgenden法登您静脉Beispiel毛皮杯typischen Befehl朗-和Kurzform:

Python。\ Modbus_RTU datalog——文件。csv——地址240——10——48 COM6长度
Python。\ Modbus_RTU - f datalog。csv——240 - r - l 48 COM6

拉登您窝herunter gesamten代码,和看清您西奇das Modbus 101 -网络研讨会

Neuen Kommentar absenden