@Harry-van-der-Wolf Thanks for the hint!
-
MOD-Bus Plugin
-
After I tested my script yesterday evening, I recognized a few things…
The most critical thing was, that I didn’t get the response in the same session / thread that I was requesting.
So I wrote a few changes and here’s the new version.The major change is the different executing of the script. Now you write your request in the file modreq and you get the answer in a second file modresp
See typical usage in the script below!!!
It’s not tested yet on pimatic! -> Now I tested it and it’s NOT running! I get Problems with more than 1 device -> researching…
#/usr/bin/env python import minimalmodbus import pipes import time t = pipes.Template() t.append('tr a-z A-Z', '--') # only for first run # write the requestfile f = t.open('modreq', 'w') f.write('000 00000 00 00000')# typical usage for writing "echo 001 00001 15 00001 > modreq" (add reg fc val) f.close() # write the response file g = t.open('modresp', 'w') g.write(' ')# typical usage for reading "echo 001 00640 01 00000 > modreq && sleep 0.5 && cat modresp g.close() # do this till '255 999999 99 99999' while 1: f.close() x = open('modreq').read() mbadd = int(x[:3]) f.close() instrument = minimalmodbus.Instrument('/dev/ttyUSB0', mbadd) instrument.serial.baudrate = 57600 instrument.serial.parity = 'N' instrument.serial.bytesize = 8 instrument.serial.stopbits = 1 instrument.serial.timeout = 2.00 if x[:-1] == '255 99999 99 99999': break if (int(x[-9:-6])) == 1: try: gelesen = instrument.read_bit(int(x[4:9]),1) g = t.open('modresp', 'w') g.write("%d\n" %gelesen) g.close() f.close() f = t.open('modreq', 'w') f.write('000 00000 00 00000') f.close() except IOError: g = t.open('modresp', 'w') g.write("Fehler beim lesen\n") g.close() if (int(x[-9:-6])) == 2: try: gelesen = instrument.read_bit(int(x[4:9]),2) g = t.open('modresp', 'w') g.write("%d\n" %gelesen) g.close() f.close() f = t.open('modreq', 'w') f.write('000 00000 00 00000') f.close() except IOError: g = t.open('modresp', 'w') g.write("Fehler beim lesen\n") g.close() if (int(x[-9:-6])) == 3: try: gelesen = instrument.read_register(int(x[4:9]),0,3) g = t.open('modresp', 'w') g.write("%d\n" %gelesen) g.close() f.close() f = t.open('modreq', 'w') f.write('000 00000 00 00000') f.close() except IOError: g = t.open('modresp', 'w') g.write("Fehler beim lesen\n") g.close() if (int(x[-9:-6])) == 4: try: gelesen = instrument.read_register(int(x[4:9]),2,4) g = t.open('modresp', 'w') g.write("%d\n" %gelesen) g.close() f.close() f = t.open('modreq', 'w') f.write('000 00000 00 00000') f.close() except IOError: g = t.open('modresp', 'w') g.write("Fehler beim lesen\n") g.close() if (int(x[-9:-6])) == 5: try: instrument.write_bit(int(x[4:9]), int(x[-6:-1]),5) f = t.open('modreq', 'w') f.write('000 00000 00 00000') f.close() except IOError: g = t.open('modresp', 'w') g.write("Fehler beim lesen\n") g.close() if (int(x[-9:-6])) == 6: try: instrument.write_register(int(x[4:9]), int(x[-6:-1]),0,6) f = t.open('modreq', 'w') f.write('000 00000 00 00000') f.close() except IOError: g = t.open('modresp', 'w') g.write("Fehler beim lesen\n") g.close() if (int(x[-9:-6])) == 15: try: instrument.write_bit(int(x[4:9]), int(x[-6:-1]),15) f = t.open('modreq', 'w') f.write('000 00000 00 00000') f.close() except IOError: g = t.open('modresp', 'w') g.write("Fehler beim lesen\n") g.close() if (int(x[-9:-6])) == 16: try: instrument.write_register(int(x[4:9]),int(x[-6:-1]),0,16) f = t.open('modreq', 'w') f.write('000 00000 00 00000') f.close() except IOError: g = t.open('modresp', 'w') g.write("Fehler beim lesen\n") g.close() else: time.sleep(0.1) f.close()