罗克韦尔PowerFlex变频器应用教程:从入门到实战

需积分: 0 4 下载量 90 浏览量 更新于2024-07-17 1 收藏 6.66MB PDF 举报
"循序渐进AB变频器实例part1.pdf"是一份由东北大学罗克韦尔自动化实验室编写的关于PowerFlex系列变频器的应用实例文档。该文档详尽地介绍了变频器的基础理论、工作原理以及在实际项目中的应用和配置。 首先,章节1着重于变频器的入门知识,包括交流调速系统的概述,解释了交流调速原理,以及如何根据负载需求选择合适的变频器容量和电动机。外部设备的连接也至关重要,如变压器T1、无熔丝低压断路器QF、接触器KM、电抗器FIL、制动电阻和过载继电器等,它们都是变频器系统的重要组成部分,用于保护设备和确保稳定运行。 章节2深入探讨了变频器的两种主要控制方式:U/f控制和矢量控制。U/f控制简单直观,适用于对动态性能要求不高的场合;而矢量控制则能提供更高的精度和动态响应,通过转子磁场定向技术实现更精确的控制。这两种控制方式的选择取决于具体的应用需求。 文档的核心内容集中在PowerFlex 4系列变频器上,如PowerFlex 40和PowerFlex 400。PowerFlex 40变频器主要用于实验,详细讲解了选型、硬件接线、基本操作(如内置键盘和网络通信)以及高级功能如设备级控制和多变频器模式。PowerFlex 400则更为全面,不仅涵盖了选型、硬件连接,还涉及Auto/Manual模式、休眠/唤醒功能、内置PID调节、一拖多功能以及飞速起动和断电后重起动等高级特性。 PowerFlex 4变频器同样有详细的配置步骤和功能介绍,适合进行实际项目的实施。在整个文档中,通过丰富的实例和详细的步骤,读者可以了解到如何将PowerFlex系列变频器有效地集成到控制系统中,实现高效、节能的电机驱动。 此外,LabVIEW作为该文档可能的编程语言标签,暗示了PowerFlex变频器的控制可能涉及到LabVIEW编程接口,使得用户能够利用LabVIEW进行变频器的参数设置和数据采集,进一步提升自动化程度。 这份文档为学习者提供了PowerFlex变频器的系统性知识,无论是在教学还是工程实践中,都能为理解和应用这些先进的工业自动化设备提供宝贵参考。"

def forward(self, l, ab, y, idx=None): K = int(self.params[0].item()) T = self.params[1].item() Z_l = self.params[2].item() Z_ab = self.params[3].item() momentum = self.params[4].item() batchSize = l.size(0) outputSize = self.memory_l.size(0) # the number of sample of memory bank inputSize = self.memory_l.size(1) # the feature dimensionality # score computation if idx is None: # 用 AliasMethod 为 batch 里的每个样本都采样 4096 个负样本的 idx idx = self.multinomial.draw(batchSize * (self.K + 1)).view(batchSize, -1) # sample positives and negatives idx.select(1, 0).copy_(y.data) # sample weight_l = torch.index_select(self.memory_l, 0, idx.view(-1)).detach() weight_l = weight_l.view(batchSize, K + 1, inputSize) out_ab = torch.bmm(weight_l, ab.view(batchSize, inputSize, 1)) # sample weight_ab = torch.index_select(self.memory_ab, 0, idx.view(-1)).detach() weight_ab = weight_ab.view(batchSize, K + 1, inputSize) out_l = torch.bmm(weight_ab, l.view(batchSize, inputSize, 1)) if self.use_softmax: out_ab = torch.div(out_ab, T) out_l = torch.div(out_l, T) out_l = out_l.contiguous() out_ab = out_ab.contiguous() else: out_ab = torch.exp(torch.div(out_ab, T)) out_l = torch.exp(torch.div(out_l, T)) # set Z_0 if haven't been set yet, # Z_0 is used as a constant approximation of Z, to scale the probs if Z_l < 0: self.params[2] = out_l.mean() * outputSize Z_l = self.params[2].clone().detach().item() print("normalization constant Z_l is set to {:.1f}".format(Z_l)) if Z_ab < 0: self.params[3] = out_ab.mean() * outputSize Z_ab = self.params[3].clone().detach().item() print("normalization constant Z_ab is set to {:.1f}".format(Z_ab)) # compute out_l, out_ab out_l = torch.div(out_l, Z_l).contiguous() out_ab = torch.div(out_ab, Z_ab).contiguous() # # update memory with torch.no_grad(): l_pos = torch.index_select(self.memory_l, 0, y.view(-1)) l_pos.mul_(momentum) l_pos.add_(torch.mul(l, 1 - momentum)) l_norm = l_pos.pow(2).sum(1, keepdim=True).pow(0.5) updated_l = l_pos.div(l_norm) self.memory_l.index_copy_(0, y, updated_l) ab_pos = torch.index_select(self.memory_ab, 0, y.view(-1)) ab_pos.mul_(momentum) ab_pos.add_(torch.mul(ab, 1 - momentum)) ab_norm = ab_pos.pow(2).sum(1, keepdim=True).pow(0.5) updated_ab = ab_pos.div(ab_norm) self.memory_ab.index_copy_(0, y, updated_ab) return out_l, out_ab

2023-04-19 上传