Example #1
0
    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
Example #5
0
    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
Example #6
0
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,
Example #7
0
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