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
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
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
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
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
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