Exemple #1
0
    def set_val(self, id_Node, name_field, value=0):
        """
        установка значения, в указанном узле

        :param: * id_node: идентификатор узла
                * name_field: имя поля в структоре узла
                * value: значение тэга узла

        :return: * i_status: код ошибки,
                * i_index: номер элемента в списке узлов

        """
        i_status = PLCGlobals.SET_VAL_FAIL
        length = len(self.list_nodes)
        i_index=length-1
        for i in range(length):
            if self.list_nodes[i]['i_idNode'] == id_Node:
                i_index=i
                for case in switch(name_field):
                    if case("i_code_answer"):
                        self.list_nodes[i]["i_code_answer"] = int(value)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
                    if case("i_codeCommand"):
                        self.list_nodes[i]["i_codeCommand"] = int(value)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
                    if case("s_command"):
                        self.list_nodes[i]["s_command"] = str(value)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
                    if case("s_message"):
                        self.list_nodes[i]["s_message"] = str(value)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
                    if case("Objs"):
                        list_objs=list(value)
                        self.list_nodes[i]["Objs"]=copy.deepcopy(list_objs)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
                    if case("Algoritm"):
                        self.list_nodes[i]["Algoritm"]=AlgoritmInfo(value.status)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
                    if case():
                        result = self.list_nodes[i].get(name_field)
                        i_status = PLCGlobals.UPDATE_OK
                        break
        if i_status == PLCGlobals.SET_VAL_FAIL and "i_idNode" in name_field:
            self.set_dict_val("i_idNode", value)
            i_status=self.add_item_nodes(self.dict_nodes)
        return i_status, i_index
Exemple #2
0
    def set_val_obj_old(self, list_objs, id_Obj, name_field, value=0):
        """
        метод присваивает значения объектам внустри узла

        :param: * list_obj: список объектов внутри узла
                * id_Obj: идентификатор объекта внутри узла
                * name_filed: имя поля в словаре которое указывает на переменную
                * value: значение является необязательныйм параметром

        :return: * i_status: код ошибки
                * list_objs-список объектов

        """
        i_status = PLCGlobals.SET_VAL_FAIL
        length = len(list_objs)
        for i in range(length):
            if list_objs[i]['h_idObj'] == id_Obj:
                for case in switch(name_field):
                    if case("h_idObj"):
                        # i_status меняет свое предназначение на индекс в списке
                        i_status = i
                        return i_status, list_objs
                    if case("h_idSubObj"):
                        list_objs[i]["h_idSubObj"] = int(value)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
                    if case("i_typeData"):
                        list_objs[i]["i_typeData"] = int(value)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
                    if case("d_value"):
                        list_objs[i]["d_value"] = double(value)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
                    if case("b_message"):
                        length, list_objs[i]["b_message"] = \
                            self.mesPacked.setB_message(self.mesPacked.OK,
                                                        self.mesPacked.nodeStruct)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
                    if case("i_check"):
                        list_objs[i]["i_check"] = self.mesPacked.set_CRC(self.mesPacked.nodeStruct)
                        i_status = PLCGlobals.SET_VAL_OK
                        break
        if i_status == PLCGlobals.SET_VAL_FAIL and "h_idObj" in name_field:
            self.set_dict_val_obj("h_idObj", value)
            list_objs=self.add_item_objs(self.dict_objs,list_objs)
        return i_status, list_objs
Exemple #3
0
    def readDataNodeStruct(self, stringData):
        """
        Метод парсит телеграмму от клиента раскладывает ее в поля
        данные записываются в переменную nodeStruct, содержащую строктуру узла и объекта

        :param: stringData: в соответствии с принятым соглашением по телеграмме

        :return: nodeStruct: заполненная структура узла

        """
        i_status = self.OK
        length = len(stringData)
        nodeStruct = NodeInfo()
        index = 0
        for i in range(length):
            if len(stringData[i]) > 0:
                for case in switch(index):
                    if case(0):
                        nodeStruct.i_idNode = int(stringData[i])
                        break
                    if case(1):
                        nodeStruct.i_codeCommand = int(stringData[i])
                        break
                    if case(2):
                        nodeStruct.i_code_answer = int(stringData[i])
                        break
                    if case(3):
                        nodeStruct.o_obj.h_idObj = int(stringData[i])
                        break
                    if case(4):
                        nodeStruct.o_obj.h_idSubObj = int(stringData[i])
                        break
                    if case(5):
                        #nodeStruct.o_obj.i_typeData = int(stringData[i])
                        break
                    if case(6):
                        nodeStruct.o_obj.i_typeData, \
                        nodeStruct.o_obj.d_value = self.setValueNodeStruct(stringData[i])
                        break
                    if case(7):
                        nodeStruct.o_obj.i_check = int(stringData[i])
                        break
                    if case():
                        break
                index += 1
        return nodeStruct
Exemple #4
0
    def readData(self, stringData, nodeStruct):
        """
        Метод парсит телеграмму от клиента раскладывает ее в поля

        :param: * stringData: в соответствии с принятым соглашением по телеграмме
                * nodeStruct: структура узла

        :return * i_status: код ошибки, заполненная структура узла
                * nodeStruct: заполненная структура узла

        """
        length = len(stringData)
        index = 0
        for i in range(length):
            if len(stringData[i]) > 0:
                for case in switch(index):
                    if case(0):
                        nodeStruct.i_idNode = int(stringData[i])
                        break
                    if case(1):
                        nodeStruct.i_codeCommand = int(stringData[i])
                        break
                    if case(2):
                        nodeStruct.i_code_answer = int(stringData[i])
                        break
                    if case(3):
                        nodeStruct.o_obj.h_idObj = int(stringData[i])
                        break
                    if case(4):
                        nodeStruct.o_obj.h_idSubObj = int(stringData[i])
                        break
                    if case(5):
                        break
                    if case(6):
                        nodeStruct = self.setValue(stringData[i], nodeStruct)
                        # для отладки после убрать, поскольку запускаем без параметр, будет проставляться random()
                        # nodeStruct=self.setD_value(nodeStruct)
                        break
                    if case(7):
                        nodeStruct.o_obj.i_check = int(stringData[i])
                        break
                    if case():
                        break
                index += 1
        return nodeStruct
Exemple #5
0
    def get_val(self, id_Node, name_field):
        """
        чтение значения, в указанном узле

        :param: * id_node: идентификатор узла
                * name_field: имя поля в структоре узла

        :return: result: значения

        """
        result = None
        length = len(self.list_nodes)
        typeVal = self.mesPacked.dict_typeData["None"]
        for i in range(length):
            if self.list_nodes[i]['i_idNode'] == id_Node:
                for case in switch(name_field):
                    if case("i_code_answer"): pass
                    if case("i_codeCommand"):
                        result = int(self.list_nodes[i].get(name_field))
                        typeVal = self.mesPacked.dict_typeData["Integer"]
                        break
                    if case("s_command"): pass
                    if case("s_message"):
                        result = self.list_nodes[i].get(name_field)
                        typeVal = self.mesPacked.dict_typeData["String"]
                        break
                    if case("Objs"):
                        result = self.list_nodes[i].get(name_field)
                        typeVal=self.mesPacked.dict_typeData["Object"]
                        break
                    if case("Algoritm"):
                        result = self.list_nodes[i].get(name_field)
                        typeVal=self.mesPacked.dict_typeData["Algoritm"]
                        break
                    if case():
                        result = self.list_nodes[i].get(name_field)
                        break
        if (result==None and typeVal==self.mesPacked.dict_typeData["None"]):
            self.messageErr="nodes.get_val:".format(result,typeVal)
            self.mesPacked.print_message(self.messageErr,PLCGlobals.INFO)
            result=0
        return result
Exemple #6
0
    def get_val_obj(self, id_Obj, name_field):
        """
        поиск и получение свойства найденого объекта

        :param: * id_Obj: идентификатор объекта
                * name_field: наименование поля в структуре объекта

        :return: значение поля

        """
        result = None
        length = len(self.list_objs)
        typeVal = self.mesPacked.dict_typeData["None"]
        for i in range(length):
            if self.list_objs[i]['h_idObj'] == id_Obj:
                for case in switch(name_field):
                    if case("h_idSubObj"): pass
                    if case("i_typeData"): pass
                    if case("i_check"):
                        result = int(self.list_objs[i].get(name_field))
                        typeVal = self.mesPacked.dict_typeData["Integer"]
                        break
                    if case("d_value"):
                        result = float(self.list_objs[i].get(name_field))
                        typeVal=self.mesPacked.dict_typeData["Double"]
                        break
                    if case("b_message"):
                        result = bytes(self.list_objs[i].get(name_field))
                        typeVal=self.mesPacked.dict_typeData["Bytes"]
                        break
                    if case():
                        result = self.list_objs[i].get(name_field)
        if (result==None and typeVal==self.mesPacked.dict_typeData["None"]):
            self.messageErr="objs.get_val:".format(result,typeVal)
            self.mesPacked.print_message(self.messageErr,PLCGlobals.INFO)
            result=0
        return result