diff --git a/src/revpimodio2/helper.py b/src/revpimodio2/helper.py index f1e9176..81b9115 100644 --- a/src/revpimodio2/helper.py +++ b/src/revpimodio2/helper.py @@ -531,20 +531,23 @@ class ProcimgWriter(Thread): continue try: - for dev in self._modio._lst_refresh: - if not dev._shared_procimg: - continue - # Set shared outputs before reading process image - for io in dev._shared_write: - if not io._write_to_procimg(): - raise IOError("error on _write_to_procimg") - dev._shared_write.clear() - fh.seek(0) fh.readinto(bytesbuff) for dev in self._modio._lst_refresh: with dev._filelock: + if dev._shared_procimg: + # Set modified outputs one by one + for io in dev._shared_write: + if not io._write_to_procimg(): + raise IOError("error on _write_to_procimg") + dev._shared_write.clear() + + # Read all device bytes, because it is shared + fh.seek(dev.offset) + bytesbuff[dev._slc_devoff] = \ + fh.read(len(dev._ba_devdata)) + if self._modio._monitoring or dev._shared_procimg: # Inputs und Outputs in Puffer dev._ba_devdata[:] = bytesbuff[dev._slc_devoff] diff --git a/src/revpimodio2/io.py b/src/revpimodio2/io.py index df72dc5..ceafcb3 100644 --- a/src/revpimodio2/io.py +++ b/src/revpimodio2/io.py @@ -594,6 +594,7 @@ class IOBase(object): return False else: + # Write one or more bytes to process image value = bytes(self._parentdevice._ba_devdata[self._slc_address]) with self._parentdevice._modio._myfh_lck: try: