10 from inspect import getmembers, isfunction |
10 from inspect import getmembers, isfunction |
11 |
11 |
12 import erpc |
12 import erpc |
13 |
13 |
14 # eRPC service code |
14 # eRPC service code |
15 from erpc_interface.erpc_PLCObject.common import PSKID, PLCstatus, TraceVariables, trace_sample, PLCstatus_enum, log_message |
15 from erpc_interface.erpc_PLCObject.common import PSKID, PLCstatus, TraceVariables, trace_sample, PLCstatus_enum, log_message, IECtype_enum |
16 from erpc_interface.erpc_PLCObject.interface import IBeremizPLCObjectService |
16 from erpc_interface.erpc_PLCObject.interface import IBeremizPLCObjectService |
17 from erpc_interface.erpc_PLCObject.server import BeremizPLCObjectServiceService |
17 from erpc_interface.erpc_PLCObject.server import BeremizPLCObjectServiceService |
18 |
18 |
19 from runtime import GetPLCObjectSingleton as PLC |
19 from runtime import GetPLCObjectSingleton as PLC |
20 from runtime.loglevels import LogLevelsDict |
20 from runtime.loglevels import LogLevelsDict |
21 from runtime.ServicePublisher import ServicePublisher |
21 from runtime.ServicePublisher import ServicePublisher |
22 |
22 |
23 |
23 |
24 CRITICAL_LOG_LEVEL = LogLevelsDict["CRITICAL"] |
24 CRITICAL_LOG_LEVEL = LogLevelsDict["CRITICAL"] |
|
25 |
|
26 enum_to_IECtype = dict(map(lambda t:(t[1],t[0]),getmembers(IECtype_enum, lambda x:type(x)==int))) |
25 |
27 |
26 def ReturnAsLastOutput(method, args_wrapper, *args): |
28 def ReturnAsLastOutput(method, args_wrapper, *args): |
27 args[-1].value = method(*args_wrapper(*args[:-1])) |
29 args[-1].value = method(*args_wrapper(*args[:-1])) |
28 return 0 |
30 return 0 |
29 |
31 |
41 "GetPLCID":TranslatedReturnAsLastOutput( |
43 "GetPLCID":TranslatedReturnAsLastOutput( |
42 lambda res:PSKID(*res)), |
44 lambda res:PSKID(*res)), |
43 "GetPLCstatus":TranslatedReturnAsLastOutput( |
45 "GetPLCstatus":TranslatedReturnAsLastOutput( |
44 lambda res:PLCstatus(getattr(PLCstatus_enum, res[0]),res[1])), |
46 lambda res:PLCstatus(getattr(PLCstatus_enum, res[0]),res[1])), |
45 "GetTraceVariables":TranslatedReturnAsLastOutput( |
47 "GetTraceVariables":TranslatedReturnAsLastOutput( |
46 lambda res:TraceVariables(res[0],[trace_sample(*sample) for sample in res[1]])), |
48 lambda res:TraceVariables(getattr(PLCstatus_enum, res[0]),[trace_sample(*sample) for sample in res[1]])), |
47 "MatchMD5":ReturnAsLastOutput, |
49 "MatchMD5":ReturnAsLastOutput, |
48 "NewPLC":ReturnAsLastOutput, |
50 "NewPLC":ReturnAsLastOutput, |
49 "SeedBlob":ReturnAsLastOutput, |
51 "SeedBlob":ReturnAsLastOutput, |
|
52 "SetTraceVariablesList": ReturnAsLastOutput, |
|
53 "StopPLC":ReturnAsLastOutput, |
50 } |
54 } |
51 |
55 |
52 ArgsWrappers = { |
56 ArgsWrappers = { |
53 "AppendChunkToBlob": |
57 "AppendChunkToBlob": |
54 lambda data, blobID:(data, bytes(blobID)), |
58 lambda data, blobID:(data, bytes(blobID)), |
55 "NewPLC": |
59 "NewPLC": |
56 lambda md5sum, plcObjectBlobID, extrafiles: ( |
60 lambda md5sum, plcObjectBlobID, extrafiles: ( |
57 md5sum, bytes(plcObjectBlobID), [(f.fname, bytes(f.blobID)) for f in extrafiles]), |
61 md5sum, bytes(plcObjectBlobID), [(f.fname, bytes(f.blobID)) for f in extrafiles]), |
58 "SetTraceVariablesList": |
62 "SetTraceVariablesList": |
59 lambda orders : ([(order.idx, order.iectype, order.force) for order in orders],) |
63 lambda orders : ([(order.idx, enum_to_IECtype[order.iectype], None if len(order.force)==0 else order.force) for order in orders],) |
60 } |
64 } |
61 |
65 |
62 def rpc_wrapper(method_name): |
66 def rpc_wrapper(method_name): |
63 PLCobj = PLC() |
67 PLCobj = PLC() |
64 method=getattr(PLCobj, method_name) |
68 method=getattr(PLCobj, method_name) |