博客

Prototyyppien kehittaminen Modbusin avulla

Ohjelmoija koodaamassa Python、JavaScript、HTML-koodia tietokoneen naytolla。
亚历克斯Pohjanpelto
亚历克斯Pohjanpelto
Julkaistu: 07年。Syys 2021
Teollisuustuotanto ja -prosessit
Teollisuuden mittaukset
生命科学

Kehitatko prototyyppeja tai etsitko edullista tapaa mitata kosteutta ja lampotilaa sovelluksessasi mittausten laatua vaarantamatta吗?Onko sinulla myo perustiedot jostakin ohjelmointikielesta, kuten python支持者吗?乔斯vastasit naihin kysymyksiin myontavasti, toivon voivani nayttaa sinulle, miten我们kirjata tietoja pitkiltakin aikavaleilta helposti itse。Tarvitset徒劳HMP110-mittapaan,USB-huoltokaapelin (219690)时tietokoneen, jossa asennettuna Python 3。Kayn lapi koodin eri osiot, mutta乔斯et halua selityksia,我们hypata suoraan alareunaan, josta我们ladata可可koodin。虚荣esimerkkikomentosarja Haluaisin myo painottaa,埃特名叫阿玉,joka esittelee Modbus-tietoliikennetta。

Kirjastot

Ennen kuin siirrymme koodiin, haluan esitella kirjastot, joita kaytamme。Tarkein niista pymodbus。Tarvitsemme悉viestimiseen mittapaan kanssa Modbus RTU: n kautta,新罗tuomme ModbusSerialClient-luokan pymodbus.client.sync-moduulista。Kaytamme struct-kirjastoa bittien muuttamiseen eri muuttujatyypeiksi, time-kirjastoa kyselyvalin muuttamiseen ja datetime-kirjastoa lukemien kellonaikojen ja paivamaarien noutamiseen。Lisaksi tuomme argparse-moduulin voidaksemme valittaa argumentteja komentorivilta koodiin。

从pymodbus.client。同步导入ModbusSerialClient ModbusClient
进口结构
导入的时间
进口日期时间
进口argparse

Parametrit

克拉lisannyt joitakin argumentteja, jotka lisaavat koodiin joustavuutta。Niiden avulla voimme muuttaa muuttujien arvoja helposti komentorivilta koodia muuttamatta。Hyodyllisia argumentteja saattavat什锦菜esimerkiksi sarjaportti, tietojen tallennukseen kaytettavan tiedoston nimi, mittapaan aliosoite, kyselyvali时tietojen tallennusajan pituus。

解析器= argparse.ArgumentParser (
描述= " Modbus-dataloggeri "
)
解析器。add_argument(“端口”,帮助= " Sarjaportti, johon mittapaa liitetaan”)
解析器。add_argument (“- f”,“——文件”,帮助=“森tiedoston nimi, johon tiedot tallennetaan (oletusarvo data.csv)”默认=“data.csv”)
解析器。add_argument(“——”“——地址”,帮助=“Mittapaan osoite (oletusarvo 240)”、默认= 240 = int类型)
解析器。add_argument (' - r ',”——率”,帮助=“Kyselyvali sekunteina (oletusarvo 1)”,默认= 1,类型=浮动)
解析器。add_argument (“- l”,“——长度”,帮助=“Tietojen tallennusajan pituus tunteina (oletusarvo 9999999)”类型=浮动,默认= 9999999)
args = parser.parse_args ()

Modbus-liitanta

Ensin meidan taytyy alustaa uusi Modbus-sarja-asiakas,拉mittapaan kannalta oikeat asetukset。塔曼esimerkin parametrijoukon taytyy sisaltaa tietoliikennemenetelma、sarjaportti vastauksen aikakatkaisu, baudinopeus, pysaytysbitit时pariteetti。Modbus RTU: n menetelma RTU。Portti maaraytyy tietokoneen mukaan, ja真主安拉olevassa osiossa selitan, miten tunnistat oikean portin。Muut parametrit maaraytyvat mittapaan asetusten mukaan, joten sinun taytyy tarkistaa sopivat arvot mittapaan datalehdesta。Vaisalan mittapaiden tyypillinen baudinopeus 19200, pysaytysbitit 2 ja pariteetti没有。

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

Pitorekisterien lukeminen

纽约时报Luodaan funktio, joka lukee mittapaan pitorekisterit。Rekisterien lukua varten kutsumme edellisessa osiossa luomamme Modbus-asiakasinstanssin metodin read_holding_registers ()。Meidan taytyy maarittaa pitorekisterin aloitusosoite, rekisterien maara时mittapaan aliosoite。Vastaanotamme tiedot rekistereista little-endian-muotoisina 16-bittisina sanoina, jotka meidan taytyy sitten muuntaa 32-bittisiksi liukuluvuiksi。

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

Rekisterien muuntaminen 32-bittisiksi arvoiksi

Rekisterit tallennetaan 16-bittisina kokonaislukuina, ja meidan taytyy muuntaa ne 32-bittisiksi liukuluvuiksi。Laadin funktion, joka ottaa rekisterin arvot ja rekisterin indeksin ja palauttaa sitten indeksin tietojen 32-bittisen liukulukuarvon。Teemme花园muunnoksen kayttamalla struct-moduulia。

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

Tietojen tallennus

纽约时报,库恩voimme lukea pitorekisterit ja muuntaa niiden arvot 32-bittisiksi liukulukuarvoiksi, meidan taytyy laatia funktio, joka tallentaa arvot .csv-tiedostoon。爱因斯坦塔塔tarkoitusta varten funktion nimelta data_logger ()。Se kutsuu funktion holding_registers_data () ja liittaa vastaanotetut tiedot tiedostoon muodossa paivamaara-kellonaika, suhteellinen kosteus, lampotila kastepiste。

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)

Mittapaan sarjaportin maarittaminen

在liitetty Varmista ensin,埃特mittapaa tietokoneeseen oikein。

窗户
Windows-kayttojarjestelmassa loydat laitteen sarjaportin Laitehallinta-kohdasta。Avaa Laitehallinta-ikkuna napsauttamalla nayton vasemmassa alakulmassa olevaa aloituspainiketta ja kirjoittamalla“Laitehallinta”。Laitehallinta tulee nakyviin帕拉斯vastaavuus - kohtaan ensimmaisena vaihtoehtona。森Avaa se napsauttamalla kuvaketta tai painamalla Enter-nappainta。Laajenna portit napsauttamalla portit (COM和涡轮)- kohdan vieressa olevaa nuolta。Luettelossa pitaisi nakya Vaisalan USB-laite, jonka vieressa nakyy sen sarjaportti, tassa tapauksessa COM6。

图像
确定调查的通信端口

Linux
看到Linuxissa maarittaa sarjaportin kirjoittamalla komentoriville komennon dmesg | grep电传。森pitaisi palauttaa muun muassa tamantyyppinen掌声:“现在cp210x转换器ttyUSBn相连”,弥撒上ttyUSBn haluamamme portti。

Koodin suorittaminen

上看到Jotta suorittaa komentosarjan, kaikkien kirjastojen oltava asennettuina。我们tarvittaessa asentaa pymodbus-kirjaston pip-komennon

pip3 - u pymodbus安装
avulla。Muiden kirjastojen pitaisi tulla python 3 - paketin mukana。
乔斯haluat argumentteihin liittyvia ohjeita, siirry komentokehotteessa hakemistoon, johon Python-komentosarja tallennettu, ja kirjoita
python Modbus_RTU - h

了一只名叫阿玉palauttaa ohjetekstit, jotka nakyvat komentokehotteessa。真主安拉在nayttokuva tulosteesta。

图像
终端

Ainoa pakollinen parametri sarjaportti。看到Muilla argumenteilla oletusarvot, joita halutessasi muuttaa。Sarjaportin argumentti ei tarvitse tunnistetta,晶澳森voi sijoittaa mihin tahansa tiedostonimen jalkeen。Muut, valinnaiset argumentit vaativat tunnisteen。
在esimerkki Tassa tyypillisesta komennosta pitkassa ja lyhyessa muodossa:

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

Lataa可可koodi晶澳101 - webinaari katso Modbus。

Kirjoita kommentti