def get_local_status(self): var_start = Local_Start var_end = var_start + Const_BOOL okVal = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_BOOL errVal = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_WString(32) status = parse_wstring(bytes(self._Shm.buf[var_start:var_end])) client_arr = [] for i in range(uiSizeRemoteDevice): var_start = var_end var_end = var_start + Const_BOOL conVal = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) if conVal == 1: var_start = var_end var_end = var_start + Const_String(15) ipVal = (bytes(self._Shm.buf[var_start:var_end])).decode('utf8') var_start = var_end var_end = var_start + Const_WString(32) curVal = parse_wstring(bytes(self._Shm.buf[var_start:var_end])) client_arr.append({'con': conVal, 'ip': ipVal, 'status': curVal}) else: var_end = var_end + Const_String(15) + Const_WString(32) return {'ok': okVal, 'err': errVal, 'status': status, 'clients': client_arr}
def set_buff(self, var_address, var_type, var_val): write_shm = shared_memory.SharedMemory( self._WriteMem ) #Attach _SharedMem_UI_Write (_SharedMem_UI_Write 에 접근) uiCnt = int(struct.unpack('H', bytes(write_shm.buf[0:2]))[0]) if uiCnt < uiSizeUIWrite: exist_flag = False var_str = ('"' + var_val + '"').encode(unicodeDecode) start_ind = var_str.find(Const_Unit) end_ind = start_ind + parse_utf16(var_str[start_ind + 1:]) var_str = var_str[start_ind + 1:start_ind + end_ind - 1] for i in range(uiCnt): var_start = Const_UINT + i * Write_Step var_end = var_start + Const_String(32) byte_arr = bytes(write_shm.buf[var_start:var_end]) var_add = (byte_arr.replace(b'\x00', b'')).decode(defaultDecode) if var_add == var_address: var_start = var_end + Const_WORD for ii in range(Const_WString(128) + 1): ii_ind = var_start + ii write_shm.buf[ii_ind:ii_ind + 1] = b'\x00' write_shm.buf[var_start:var_start + len(var_str)] = var_str exist_flag = True break if not exist_flag: var_start = Const_UINT + uiCnt * Write_Step var_address = var_address.encode() write_shm.buf[var_start:var_start + len(var_address)] = var_address var_start = var_start + Const_String(32) + Const_WORD var_type_val = VARIABLE_CONST[var_type]['type'] var_type_val = bytes([var_type_val]) write_shm.buf[var_start - len(var_type_val):var_start] = var_type_val write_shm.buf[var_start:var_start + len(var_str)] = var_str uiCnt += 1 write_shm.buf[0:2] = struct.pack('H', uiCnt) resp = {'status': True} else: resp = {'status': False, 'message': '더이상 수정할수 없습니다.'} return resp
def get_modbus(self, start=0): var_start = Const_Step * start var_end = var_start + Const_BOOL okVal = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_BOOL errVal = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_WString(32) status = parse_wstring(bytes(self._Shm.buf[var_start:var_end])) return {'ok': okVal, 'err': errVal, 'status': status}
def get_modbus_chl(self, start=0): channel_list = [] var_end = Const_Step * start + 2 * Const_BOOL + Const_WString(32) for i in range(uiSizeModbusMasterChannel): var_start = var_end var_end = var_start + Const_BOOL okVal1 = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_BOOL errVal1 = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_WString(32) status1 = parse_wstring(bytes(self._Shm.buf[var_start:var_end])) channel_list.append({ 'ok': okVal1, 'err': errVal1, 'status': status1 }) return channel_list
def get_remote_clients(self): var_end = 0 client_arr = [] for i in range(uiSizeRemoteDevice): var_start = var_end var_end = var_start + Const_BOOL conVal = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_BOOL errVal = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_WString(32) status = parse_wstring(bytes(self._Shm.buf[var_start:var_end])) client_arr.append({'con': conVal, 'err': errVal, 'status': status}) return client_arr
from multiprocessing import shared_memory from app.helper.const import uiSizeAnalog, uiSizeDigital, uiSizeString, uiSizeTime, uiSizeDate, Const_BOOL, Const_WORD,\ Const_LREAL, Const_WString, Const_String, defaultDecode, Bytes2Int, uiSizeUIWrite, unicodeDecode, Const_UINT import struct Const_Digital = "digital" Const_Analog = "analog" Const_WsString = "string" Const_STime = "time" Const_SDate = "date" Const_RemoteSize = 56320 Const_Unit = b'"' WsString_Start = Const_BOOL * uiSizeDigital + uiSizeAnalog * Const_LREAL STime_Start = WsString_Start + uiSizeString * Const_WString(32) SDate_Start = STime_Start + Const_String(12) * uiSizeTime Remote_Step = 56320 Write_Step = 294 VARIABLE_CONST = { Const_Digital: { 'step': Const_BOOL, 'start': 0, 'len': uiSizeDigital, 'decode': defaultDecode, 'type': 1 }, Const_Analog: { 'step': Const_LREAL, 'start': Const_BOOL * uiSizeDigital,
from multiprocessing import shared_memory from app.helper.const import Const_BOOL, Const_WString, parse_wstring, Bytes2Int, uiSizeRemoteDevice, Const_String Local_Start = (2 * Const_BOOL + Const_WString(32)) * uiSizeRemoteDevice class RemoteDevice_Memory: def __init__(self): self._Shm = shared_memory.SharedMemory("_SharedMem_RemoteDevice") def get_remote_clients(self): var_end = 0 client_arr = [] for i in range(uiSizeRemoteDevice): var_start = var_end var_end = var_start + Const_BOOL conVal = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_BOOL errVal = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_WString(32) status = parse_wstring(bytes(self._Shm.buf[var_start:var_end])) client_arr.append({'con': conVal, 'err': errVal, 'status': status}) return client_arr def get_local_status(self):
def get_buff(self, buf_type='', start=0, end=0): buffArr = [] if len(buf_type) == 0: return buffArr var_type = VARIABLE_CONST[buf_type] step = var_type['step'] var_start = var_type['start'] + start * step shm = shared_memory.SharedMemory(self._SharedMem) for i in range(start, end): var_end = var_start + step if buf_type in [Const_Condition, Const_CondGroup, Const_Logic]: buffArr.append( {'val': Bytes2Int(bytes(shm.buf[var_start:var_end]))}) elif buf_type == Const_Action: var_end1 = var_start + Const_BOOL busyVal = Bytes2Int(bytes(shm.buf[var_start:var_end1])) == 1 var_start = var_end1 var_end1 = var_start + Const_BOOL doneVal = Bytes2Int(bytes(shm.buf[var_start:var_end1])) == 1 var_start = var_end1 var_end1 = var_start + Const_BOOL errVal = Bytes2Int(bytes(shm.buf[var_start:var_end1])) == 1 buffArr.append({ 'status': parse_wstring(bytes(shm.buf[var_end1:var_end])), 'busy': busyVal, 'done': doneVal, 'err': errVal }) elif buf_type == Const_ActGroup: var_end1 = var_start + Const_BOOL doneVal = Bytes2Int(bytes(shm.buf[var_start:var_end1])) == 1 var_start = var_end1 var_end1 = var_start + Const_BOOL busyVal = Bytes2Int(bytes(shm.buf[var_start:var_end1])) == 1 var_start = var_end1 var_end1 = var_start + Const_WString(32) cntVal = Bytes2Int(bytes(shm.buf[var_end1:var_end])) buffArr.append({ 'status': parse_wstring(bytes(shm.buf[var_start:var_end1])), 'busy': busyVal, 'done': doneVal, 'cnt': cntVal }) elif buf_type == Const_Control: var_end1 = var_start + Const_BOOL validVal = Bytes2Int(bytes(shm.buf[var_start:var_end1])) == 1 var_start = var_end1 var_end1 = var_start + Const_BOOL busyVal = Bytes2Int(bytes(shm.buf[var_start:var_end1])) == 1 var_start = var_end1 var_end1 = var_start + Const_BOOL doneVal = Bytes2Int(bytes(shm.buf[var_start:var_end1])) == 1 var_start = var_end1 var_end1 = var_start + Const_WString(32) supVal = Bytes2Int(bytes(shm.buf[var_end1:var_end])) buffArr.append({ 'status': parse_wstring(bytes(shm.buf[var_start:var_end1])), 'busy': busyVal, 'done': doneVal, 'sup': supVal, 'valid': validVal }) var_start = var_end return buffArr
from multiprocessing import shared_memory from app.helper.const import uiSizeEval, uiSizeEvalGrp, uiSizeAct, uiSizeActGrp, uiSizeCtrl, uiSizeCtrlPanel, \ Const_BOOL, Const_WString, Const_INT, Bytes2Int, parse_wstring Const_Condition = "condition" Const_CondGroup = "cond_group" Const_Action = "action" Const_ActGroup = "act_group" Const_Control = "control" Const_Logic = "logic" Action_Step = 3 * Const_BOOL + Const_WString(32) ActGrp_Step = Action_Step - Const_BOOL + Const_INT Control_Step = Action_Step + Const_BOOL ActGrp_Start = Const_BOOL * (uiSizeEval + uiSizeEvalGrp) + Action_Step * uiSizeAct Control_Start = ActGrp_Start + ActGrp_Step * uiSizeActGrp VARIABLE_CONST = { Const_Condition: { 'step': Const_BOOL, 'start': 0, 'len': uiSizeEval }, Const_CondGroup: { 'step': Const_BOOL, 'start': Const_BOOL * uiSizeEval, 'len': uiSizeEvalGrp }, Const_Action: {
from multiprocessing import shared_memory from app.helper.const import Const_BOOL, Const_WString, parse_wstring, Bytes2Int, uiSizeModbusMasterChannel Const_Step = (uiSizeModbusMasterChannel + 1) * (2 * Const_BOOL + Const_WString(32)) class Modbus_Memory: def __init__(self): self._Shm = shared_memory.SharedMemory("_SharedMem_Modbus") def get_modbus_chl(self, start=0): channel_list = [] var_end = Const_Step * start + 2 * Const_BOOL + Const_WString(32) for i in range(uiSizeModbusMasterChannel): var_start = var_end var_end = var_start + Const_BOOL okVal1 = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_BOOL errVal1 = Bytes2Int(bytes(self._Shm.buf[var_start:var_end])) == 1 var_start = var_end var_end = var_start + Const_WString(32) status1 = parse_wstring(bytes(self._Shm.buf[var_start:var_end])) channel_list.append({ 'ok': okVal1, 'err': errVal1, 'status': status1