Re: [Minimalmodbus-list] Problems with missig device
Status: Beta
Brought to you by:
pyhys
|
From: <fr...@in...> - 2015-02-18 07:36:53
|
Hello Edwin,
here is my (beginners) Script i wrote to read from 8 different devices:
modbus4.py:
#################################################################
#!/usr/bin/env python
import minimalmodbus
import datetime
from os import path, chdir
# Import fuer FTP
from socket import gaierror
from ftplib import FTP
from glob import glob
from os.path import join
from socket import gaierror
#IMPORT VON DATUM UND UHRZEIT
datum = []
heute = datetime.date.today()
datum.append(heute)
# HOLEN DER ADRESSEN AUS CONFIG FILE (config.py muss im selben
Verzeichnis liegen)
from config import *
# MODBUS-ADAPTER AN COM PORT KONFIGURIEREN
minimalmodbus.BAUDRATE = 19200
minimalmodbus.PARITY = 'E'
minimalmodbus.BYTESIZE = 8
minimalmodbus.stopbits = 1
minimalmodbus.TIMEOUT = 0.31
while True:
#DEFINITION VON HARDWARE UND SLAVE-ADRESSE
instrument1 = minimalmodbus.Instrument(str(Port), + Adresse1)
instrument2 = minimalmodbus.Instrument(str(Port), + Adresse2)
instrument3 = minimalmodbus.Instrument(str(Port), + Adresse3)
instrument4 = minimalmodbus.Instrument(str(Port), + Adresse4)
instrument5 = minimalmodbus.Instrument(str(Port), + Adresse5)
instrument6 = minimalmodbus.Instrument(str(Port), + Adresse6)
instrument7 = minimalmodbus.Instrument(str(Port), + Adresse7)
instrument8 = minimalmodbus.Instrument(str(Port), + Adresse8)
#Definition von Temperaturmodulen (Nicht noetig)
instrument1t = minimalmodbus.Instrument(str(Port), + Adresse1)
instrument2t = minimalmodbus.Instrument(str(Port), + Adresse2)
instrument3t = minimalmodbus.Instrument(str(Port), + Adresse3)
instrument4t = minimalmodbus.Instrument(str(Port), + Adresse4)
instrument5t = minimalmodbus.Instrument(str(Port), + Adresse5)
instrument6t = minimalmodbus.Instrument(str(Port), + Adresse6)
instrument7t = minimalmodbus.Instrument(str(Port), + Adresse7)
instrument8t = minimalmodbus.Instrument(str(Port), + Adresse8)
#AUSLESEN VON REGISTER 1 ( ACHTUNG: REGISTER 1 IST 0) UND DEFINITION VON
preassure1 = instrument1.read_register(0, numberOfDecimals=3,
functioncode=4, signed=True)
preassure2 = instrument2.read_register(0, numberOfDecimals=3,
functioncode=4, signed=True)
preassure3 = instrument3.read_register(0, numberOfDecimals=3,
functioncode=4, signed=True)
preassure4 = instrument4.read_register(0, numberOfDecimals=3,
functioncode=4, signed=True)
preassure5 = instrument5.read_register(0, numberOfDecimals=3,
functioncode=4, signed=True)
preassure6 = instrument6.read_register(0, numberOfDecimals=3,
functioncode=4, signed=True)
preassure7 = instrument7.read_register(0, numberOfDecimals=3,
functioncode=4, signed=True)
preassure8 = instrument8.read_register(0, numberOfDecimals=3,
functioncode=4, signed=True)
temperature1 = instrument1.read_register(4, numberOfDecimals=1,
functioncode=4, signed=True)
temperature2 = instrument2.read_register(4, numberOfDecimals=1,
functioncode=4, signed=True)
temperature3 = instrument3.read_register(4, numberOfDecimals=1,
functioncode=4, signed=True)
temperature4 = instrument4.read_register(4, numberOfDecimals=1,
functioncode=4, signed=True)
temperature5 = instrument5.read_register(4, numberOfDecimals=1,
functioncode=4, signed=True)
temperature6 = instrument6.read_register(4, numberOfDecimals=1,
functioncode=4, signed=True)
temperature7 = instrument7.read_register(4, numberOfDecimals=1,
functioncode=4, signed=True)
temperature8 = instrument8.read_register(4, numberOfDecimals=1,
functioncode=4, signed=True)
#Ausgabe definieren und formatieren
Datum = heute.strftime('%d-%b-%Y')
Zeit = datetime.datetime.now().strftime("%H:%M:%S.%f")
Zeit2 = datetime.datetime.now().strftime("%H:%M:%S")
test1 = heute.strftime('%Y-%m-%d'),datetime.datetime.now().strftime("-%H-%M")
datei = "".join(str(x) for x in test1)
print datei
# Verzeichnis zum Schreiben der Werte wechseln
myfile = path.join('/', 'Logger_Test')
chdir(myfile)
# Datei oeffnen, schreiben, schliessen
with open(datei + ".txt", "w") as myfile:
myfile.write("Date: ")
myfile.write(str(Datum))
myfile.write(" ")
myfile.write(str(Zeit))
myfile.write("\n")
myfile.write("\n")
myfile.write("Sensor Count: ")
myfile.write(str(sensorcount))
myfile.write("\n")
myfile.write("\n")
# Sensornamen Auflistung
myfile.write("Name: ")
myfile.write(str(sensorname1))
myfile.write("\n")
myfile.write("Name: ")
myfile.write(str(sensorname2))
myfile.write("\n")
myfile.write("Name: ")
myfile.write(str(sensorname3))
myfile.write("\n")
myfile.write("Name: ")
myfile.write(str(sensorname4))
myfile.write("\n")
myfile.write("Name: ")
myfile.write(str(sensorname5))
myfile.write("\n")
myfile.write("Name: ")
myfile.write(str(sensorname6))
myfile.write("\n")
myfile.write("Name: ")
myfile.write(str(sensorname7))
myfile.write("\n")
myfile.write("Name: ")
myfile.write(str(sensorname8))
myfile.write("\n")
#Sensornamen Teperatur
myfile.write("Name: ")
myfile.write(str(sensorname1))
myfile.write("t\n")
myfile.write("Name: ")
myfile.write(str(sensorname2))
myfile.write("t\n")
myfile.write("Name: ")
myfile.write(str(sensorname3))
myfile.write("t\n")
myfile.write("Name: ")
myfile.write(str(sensorname4))
myfile.write("t\n")
myfile.write("Name: ")
myfile.write(str(sensorname5))
myfile.write("t\n")
myfile.write("Name: ")
myfile.write(str(sensorname6))
myfile.write("t\n")
myfile.write("Name: ")
myfile.write(str(sensorname7))
myfile.write("t\n")
myfile.write("Name: ")
myfile.write(str(sensorname8))
myfile.write("t\n")
myfile.write("\n")
# Sensornamen
myfile.write("Timestamp\t")
myfile.write(str(sensorname1))
myfile.write("\t")
myfile.write(str(sensorname2))
myfile.write("\t")
myfile.write(str(sensorname3))
myfile.write("\t")
myfile.write(str(sensorname4))
myfile.write("\t")
myfile.write(str(sensorname5))
myfile.write("\t")
myfile.write(str(sensorname6))
myfile.write("\t")
myfile.write(str(sensorname7))
myfile.write("\t")
myfile.write(str(sensorname8))
myfile.write("\t")
# Sensornamen Temperatur
myfile.write(str(sensorname1))
myfile.write("t\t")
myfile.write(str(sensorname2))
myfile.write("t\t")
myfile.write(str(sensorname3))
myfile.write("t\t")
myfile.write(str(sensorname4))
myfile.write("t\t")
myfile.write(str(sensorname5))
myfile.write("t\t")
myfile.write(str(sensorname6))
myfile.write("t\t")
myfile.write(str(sensorname7))
myfile.write("t\t")
myfile.write(str(sensorname8))
myfile.write("t\n")
# Zeile fuer Messwerte
myfile.write(str(Datum))
myfile.write(" ")
myfile.write(str(Zeit2))
myfile.write("\t")
myfile.write(str(preassure1))
myfile.write("\t")
myfile.write(str(preassure2))
myfile.write("\t")
myfile.write(str(preassure3))
myfile.write("\t")
myfile.write(str(preassure4))
myfile.write("\t")
myfile.write(str(preassure5))
myfile.write("\t")
myfile.write(str(preassure6))
myfile.write("\t")
myfile.write(str(preassure7))
myfile.write("\t")
myfile.write(str(preassure8))
myfile.write("\t")
# Temperaturmesswerte
myfile.write(str(temperature1))
myfile.write("\t")
myfile.write(str(temperature2))
myfile.write("\t")
myfile.write(str(temperature3))
myfile.write("\t")
myfile.write(str(temperature4))
myfile.write("\t")
myfile.write(str(temperature5))
myfile.write("\t")
myfile.write(str(temperature6))
myfile.write("\t")
myfile.write(str(temperature7))
myfile.write("\t")
myfile.write(str(temperature8))
myfile.write("\t")
myfile.close()
#AUSGABE VON PREASSURE
print
"SENSOR1\t","1\t",preassure1,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR2\t","2\t",preassure2,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR3\t","3\t",preassure3,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR4\t","4\t",preassure4,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR5\t","5\t",preassure5,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR6\t","6\t",preassure6,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR7\t","7\t",preassure7,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR8\t","8\t",preassure8,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print "TEMPERATUR"
print
"SENSOR1\t","t1\t",temperature1,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR2\t","t2\t",temperature2,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR3\t","t3\t",temperature3,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR4\t","t4\t",temperature4,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR5\t","t5\t",temperature5,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR6\t","t6\t",temperature6,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR7\t","t7\t",temperature7,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
print
"SENSOR8\t","t8\t",temperature8,"\t",heute.strftime('%d.%m.%Y'),"\t",datetime.datetime.now().strftime("%H:%M:%S")
# FTP-TRANSFER
print 'FTP-UPLOAD'
dir_name = "/Logger_Test"
filter = "*.txt"
url, user_name, password = "XXXXXXXXX", "XXXXXXXXXXXXXX", "XXXXXXXXXXXXXX"
try:
session = FTP(url, user_name, password)
for file_name in glob(join(dir_name, filter)):
with open(file_name, "rb") as file_handler:
session.storbinary("STOR %s" % file_name, file_handler)
session.quit()
except gaierror:
print("error: maybe no connection")
print 'FTP-TRANSFER BEENDET'
# BACKUP DER GESENDETEN FILES
print 'FILES-BACKUP START'
import os
import os.path
import shutil
import fnmatch
list_of_dirs_to_copy = ['/Logger_Test'] # List of source dirs
excluded_subdirs = ['backup'] # subdir to exclude from copy
dest_dir = '/Logger_Test/backup' # folder for the destination of the copy
files_patterns = ['*.txt', '*.doc']
for root_path in list_of_dirs_to_copy:
for root, dirs, files in os.walk(root_path): # recurse walking
for dir in excluded_subdirs:
if dir in dirs:
dirs.remove(dir) # remove the dir from the subdirs to visit
if not os.path.exists(dest_dir):
os.makedirs(dest_dir) # create the dir if not exists
for pattern in files_patterns:
for thefile in fnmatch.filter(files, pattern): # filter the files to copy
shutil.move(os.path.join(root, thefile), dest_dir) #copy file
print 'FILES-BACKUP BEENDET'
import time
# Wait for X seconds
time.sleep(60)
#################################################################
config.py
###########################
Adresse1=9
Adresse2=10
Adresse3=11
Adresse4=12
Adresse5=13
Adresse6=14
Adresse7=15
Adresse8=16
Port='/dev/ttyUSB0'
sensorcount=16 #Anzahl der Sensoren
sensorname1='TEST1'
sensorname2='TEST2'
sensorname3='TEST3'
sensorname4='TEST4'
sensorname5='TEST5'
sensorname6='TEST6'
sensorname7='TEST7'
sensorname8='TEST8'
############################
I hope, anybody can help me (and as you see, it is really a script
from a beginner ;-))
Regards
Franz
Zitat von Edwin van den Oetelaar <oet...@gm...>:
> On Mon, Feb 16, 2015 at 9:36 PM, Franz Löseke <fr...@in...> wrote:
>>
>>
>> Hello,
>>
>> i want to create a datalogger with minimalmodbus.. until now it works
>> great buut i have one problem. At the moment i have 8 devices on 8
>> different adresses. If someone is not reachable (maybe broken or
>> maintenace) then the script crashes. I have not much experiences in
>> python and so i have no idea how i can handle this problem. I want
>> that minimalmodbus ignore the missing adress after a specified timeout
>> (maybe 2 seconds) and collect the other adresses. Now it crashes and
>> did not collect any data. Does it need a modification in my "learning
>> by doing" script or in minimalmodbus? Maybe it is possible to modify
>> minimalmodbus in case of not reachable adress send as answer "XXXX"
>> for example.
>>
>> Can anyone help me in this case?
>
> Can you post a minimal script?
> You can most likely detect a missing device and prevent a crash.
> Just show your approach as you are using now. try/except or what?
>
>>
>>
>> Regards
>>
>> Franz
>
> Greetings,
> Edwin
|