AB PLC通过Socket实现AOI的教程与应用

版权申诉
5星 · 超过95%的资源 2 下载量 135 浏览量 更新于2024-10-03 收藏 8KB ZIP 举报
资源摘要信息:"此压缩包文件Socket_AOI_Rev3_V28.zip包含了与AB(Allen-Bradley)PLC(可编程逻辑控制器)相关的AOI(Add-On Instruction)模块,用于在Studio 5000开发环境中实现Socket通信功能。AOI是PLC编程中用于扩展其功能的自定义指令集,而Socket通信则是一种网络通信方式,通常用于在不同系统间建立网络连接,实现数据交换。这个资源包为AB PLC提供了特定的AOI,允许开发者在该平台上通过Socket编程实现数据的接收与发送,增加了编程的灵活性和控制器的通信能力。 在标题中提到的'AB PLC_AOI_PLC_SOCKET'指的是Allen-Bradley公司的PLC产品,它通过添加AOI来支持Socket通信。这些AOI模块被设计为易于在Studio 5000这样的PLC编程软件中集成和使用。'AB_aoi plc'则强调了这一资源包是专门针对AB PLC开发的,而'aoi__plc'表明该文件夹可能还包含了与AOI和PLC相关的其他文件或文档。 在描述中提到的'studio5000中使用'指的是Rockwell Automation提供的用于编程和配置AB PLC的软件环境。Studio 5000集成了多种开发工具,可以用来设计、测试和实现PLC程序。通过在Studio 5000中使用此Socket AOI,开发者可以创建出能够在网络上进行通信的PLC应用程序。 根据标签信息'ab_plc', 'aoi', 'plc_socket_ab', 'aoi__plc',可以推断出这些标签代表了软件包的主要特性和用途。'ab_plc'指的是与Allen-Bradley PLC相关的功能,'aoi'指的是软件包中包含的自定义指令集,'plc_socket_ab'表明这是特定于AB PLC的Socket通信功能,而'aoi__plc'可能是为了强调这个文件夹中包含的AOI功能与PLC编程之间的关系。 压缩包文件名称列表中仅包含一个文件名'Socket_AOI_Rev3_V28.L5K',这表明压缩包可能包含一个编译后的PLC程序文件,通常具有.L5K扩展名。这个文件是特定版本的Socket AOI,包含了所有必要的指令和配置信息,可以在Studio 5000软件中被导入和使用,用于编写和部署支持Socket通信的PLC程序。 总的来说,这个文件包为使用Allen-Bradley PLC的开发者提供了一个重要的工具,用于在Studio 5000环境下扩展PLC的功能,使得它们能够处理基于Socket的网络通信。这对于那些需要将PLC集成到更大规模的自动化和工业控制网络中的项目尤其有用。开发者可以利用这个AOI来实现数据的接收、发送以及远程控制等任务,从而提高整个系统的互操作性和效率。"

input_tours_for_drones = 20 len_input_tours_for_drones = 7 aoi = utility.build_random_aoi(width_area, height_area, n_target, n_depots, hovering_time=5, seed=seed) depots = aoi.depots depot_first_drone = depots[0] tours_first_drone=[build_random_tour(aoi,depot_first_drone,np.random.randint(len_input_tours_for_drones - 5,len_input_tours_for_drones + 5)) for i in range(input_tours_for_drones)] depot_second_drone = depots[1] tours_second_drone=[build_random_tour(aoi,depot_second_drone,np.random.randint(len_input_tours_for_drones-5, len_input_tours_for_drones + 5)) for i in range(input_tours_for_drones)] uavs_to_tours = {drones[0]: tours_first_drone, drones[1]: tours_second_drone model = TotalCoverageModel(aoi, uavs_to_tours, max_rounds, debug=False) model.build() model.optimize() mrs = model.solution assert mrs is not None, "optimal solution not found" print("TC-OPT covers", mrs.coverage_score(), "targets using", mrs.max_rounds, "rounds") mrs.plot("TC-OPT") # for big istances (over 200/300 points) remove this plot mrs.plot_cumulative_coverage_for_round("TC-OPT") 以上为用Gurobi求解最优解问题,请解释以上程序: depot_first_drone = depots[0] tours_first_drone=[build_random_tour(aoi,depot_first_drone,np.random.randint(len_input_tours_for_drones - 5,len_input_tours_for_drones + 5)) for i in range(input_tours_for_drones)] depot_second_drone = depots[1] tours_second_drone=[build_random_tour(aoi,depot_second_drone,np.random.randint(len_input_tours_for_drones-5, len_input_tours_for_drones + 5)) for i in range(input_tours_for_drones)] uavs_to_tours = {drones[0]: tours_first_drone, drones[1]: tours_second_drone是什么意思

2023-06-08 上传

class AbstractGreedyAndPrune(): def __init__(self, aoi: AoI, uavs_tours: dict, max_rounds: int, debug: bool = True): self.aoi = aoi self.max_rounds = max_rounds self.debug = debug self.graph = aoi.graph self.nnodes = self.aoi.n_targets self.uavs = list(uavs_tours.keys()) self.nuavs = len(self.uavs) self.uavs_tours = {i: uavs_tours[self.uavs[i]] for i in range(self.nuavs)} self.__check_depots() self.reachable_points = self.__reachable_points() def __pruning(self, mr_solution: MultiRoundSolution) -> MultiRoundSolution: return utility.pruning_multiroundsolution(mr_solution) def solution(self) -> MultiRoundSolution: mrs_builder = MultiRoundSolutionBuilder(self.aoi) for uav in self.uavs: mrs_builder.add_drone(uav) residual_ntours_to_assign = {i : self.max_rounds for i in range(self.nuavs)} tour_to_assign = self.max_rounds * self.nuavs visited_points = set() while not self.greedy_stop_condition(visited_points, tour_to_assign): itd_uav, ind_tour = self.local_optimal_choice(visited_points, residual_ntours_to_assign) residual_ntours_to_assign[itd_uav] -= 1 tour_to_assign -= 1 opt_tour = self.uavs_tours[itd_uav][ind_tour] visited_points |= set(opt_tour.targets_indexes) # update visited points mrs_builder.append_tour(self.uavs[itd_uav], opt_tour) return self.__pruning(mrs_builder.build()) class CumulativeGreedyCoverage(AbstractGreedyAndPrune): choice_dict = {} for ind_uav in range(self.nuavs): uav_residual_rounds = residual_ntours_to_assign[ind_uav] if uav_residual_rounds > 0: uav_tours = self.uavs_tours[ind_uav] for ind_tour in range(len(uav_tours)): tour = uav_tours[ind_tour] quality_tour = self.evaluate_tour(tour, uav_residual_rounds, visited_points) choice_dict[quality_tour] = (ind_uav, ind_tour) best_value = max(choice_dict, key=int) return choice_dict[best_value] def evaluate_tour(self, tour : Tour, round_count : int, visited_points : set): new_points = (set(tour.targets_indexes) - visited_points) return round_count * len(new_points) 如何改写上述程序,使其能返回所有已经探索过的目标点visited_points的数量,请用代码表示

2023-06-10 上传