beremiz

py_ext: fix CSV Writer

18 months ago, Edouard Tisserant
d2f5eb3c7d6e
py_ext: fix CSV Writer

fix POU logic :
- SAVE is a BOOL
- invocation of py_eval on rising edge of SAVE
- remove save python argument

fix python:
- use no encoding for file open (python2)
- re-use detected dialect if any
- use no "rt+" and truncate since no need to re-sniff dialect for output file
- return "OK" instead of "#SUCCESS", preventing POU logic to ACK result
- support creating new line if writing just after last line
- support appending data on short rows

fix example:
- use a HMI:Button to trigger CSV write instead of HMI:Input +1
- reload CSVs on on each new CSV opened in file browser
- add display of CSV write output
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# See COPYING file for copyrights details.
import hashlib
from runtime import PlcStatus
class ConnectorBase(object):
chuncksize = 0xfff # 4KB
PLCObjDefaults = {
"StartPLC": False,
"GetTraceVariables": (PlcStatus.Broken, None),
"GetPLCstatus": (PlcStatus.Broken, None),
"RemoteExec": (-1, "RemoteExec script failed!"),
"GetVersions": "*** Unknown ***"
}
def BlobFromFile(self, filepath, seed):
s = hashlib.new('md5')
s.update(seed.encode())
blobID = self.SeedBlob(seed.encode())
with open(filepath, "rb") as f:
while blobID == s.digest():
chunk = f.read(self.chuncksize)
if len(chunk) == 0:
return blobID
blobID = self.AppendChunkToBlob(chunk, blobID)
s.update(chunk)
raise IOError("Data corrupted during transfer or connection lost")