-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathiotvm
More file actions
executable file
·76 lines (59 loc) · 2.34 KB
/
iotvm
File metadata and controls
executable file
·76 lines (59 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/python3
import os,sys
import logging
import traceback
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
lh = logging.StreamHandler(sys.stdout)
lh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
lh.setFormatter(formatter)
logger.addHandler(lh)
from argparse import ArgumentParser
from lib.compiler import compile
from lib.compiler import CompileException
from lib.stackmachine import run
from lib.loader import scriptformat
from lib.loader import load_script_file,save_script_file
parser = ArgumentParser()
parser.add_argument("-f", "--file", dest="logfile",
help="write report to FILE", metavar="FILE")
parser.add_argument("-q", "--quiet",
action="store_false", dest="verbose", default=False,
help="don't print status messages to stdout")
parser.add_argument("-t","--format",default='b8',dest="format",help="Byte size b8, b16 or b32",choices=['b8','b16','b32'])
parser.add_argument(
'script', metavar='script',
nargs='+', help='script filename')
args = parser.parse_args()
script_filename = args.script[0]
logger.debug("Processing script %s",script_filename)
format = args.format
''' Fake device . In real unit tests complex logic may be applied '''
ports = {
'1': -1, #Temperature
'2': 30, #Regulator
'3': 1 #Switch
}
class FakePLCDevice:
def port_in(self,port):
value = ports[str(port)]
logger.debug("[DEVICE]Read port %s . Return %s" % (port,value))
return value
def port_out(self,port,value):
logger.debug("[DEVICE]Write port %s value %s" % (port,value))
if port == 3:
logger.debug("[DEVICE]Port %s changed to value %s" % (port,value))
ports["3"] = value
device = FakePLCDevice()
if script_filename.endswith('.iot.src'):
try:
compiled_ = compile(script_filename,registersize=getattr(scriptformat,format).get_byte_size()*8)
except CompileException as e:
print("Compliler error: Error in line %s : %s" % (e.line,e.error))
sys.exit(-1)
script_filename = script_filename[:-4]
save_script_file(script_filename,compiled_,format=getattr(scriptformat,format))
bytecode = load_script_file(script_filename)
result = run(bytecode,[34])
print("Script complete result : %s" % result)