当前位置:首页 » 编程软件 » bfw编程

bfw编程

发布时间: 2022-11-22 09:13:54

㈠ 变频器的作用及原理

变频器工作原理
变频器主要由整流(交流变直流)、滤波、再次整流(直流变交流)、制动单元、驱动单元、检测单元微处理单元等组成的。

1. 电机的旋转速度为什么能够自由地改变?

*1: r/min
电机旋转速度单位:每分钟旋转次数,也可表示为rpm.
例如:2极电机 50Hz 3000 [r/min]
4极电机 50Hz 1500 [r/min]
结论:电机的旋转速度同频率成比例

本文中所指的电机为感应式交流电机,在工业中所使用的大部分电机均为此类型电机。感应式交流电机(以后简称为电机)的旋转速度近似地确决于电机的极数和频率。由电机的工作原理决定电机的极数是固定不变的。由于该极数值不是一个连续的数值(为2的倍数,例如极数为2,4,6),所以一般不适和通过改变该值来调整电机的速度。

另外,频率能够在电机的外面调节后再供给电机,这样电机的旋转速度就可以被自由的控制。

因此,以控制频率为目的的变频器,是做为电机调速设备的优选设备。

n = 60f/p
n: 同步速度
f: 电源频率
p: 电机极对数
结论:改变频率和电压是最优的电机控制方法

如果仅改变频率而不改变电压,频率降低时会使电机出于过电压(过励磁),导致电机可能被烧坏。因此变频器在改变频率的同时必须要同时改变电压。输出频率在额定频率以上时,电压却不可以继续增加,最高只能是等于电机的额定电压。

例如:为了使电机的旋转速度减半,把变频器的输出频率从50Hz改变到25Hz,这时变频器的输出电压就需要从400V改变到约200V

2. 当电机的旋转速度(频率)改变时,其输出转矩会怎样?

*1: 工频电源
由电网提供的动力电源(商用电源)
*2: 起动电流
当电机开始运转时,变频器的输出电流
变频器驱动时的起动转矩和最大转矩要小于直接用工频电源驱动

电机在工频电源供电时起动和加速冲击很大,而当使用变频器供电时,这些冲击就要弱一些。工频直接起动会产生一个大的起动起动电流。而当使用变频器时,变频器的输出电压和频率是逐渐加到电机上的,所以电机起动电流和冲击要小些。

通常,电机产生的转矩要随频率的减小(速度降低)而减小。减小的实际数据在有的变频器手册中会给出说明。

通过使用磁通矢量控制的变频器,将改善电机低速时转矩的不足,甚至在低速区电机也可输出足够的转矩。

3. 当变频器调速到大于50Hz频率时,电机的输出转矩将降低

通常的电机是按50Hz电压设计制造的,其额定转矩也是在这个电压范围内给出的。因此在额定频率之下的调速称为恒转矩调速. (T=Te, P<=Pe)

变频器输出频率大于50Hz频率时,电机产生的转矩要以和频率成反比的线性关系下降。
当电机以大于50Hz频率速度运行时,电机负载的大小必须要给予考虑,以防止电机输出转矩的不足。
举例,电机在100Hz时产生的转矩大约要降低到50Hz时产生转矩的1/2。
因此在额定频率之上的调速称为恒功率调速. (P=Ue*Ie)

4. 变频器50Hz以上的应用情况

大家知道, 对一个特定的电机来说, 其额定电压和额定电流是不变的。

如变频器和电机额定值都是: 15kW/380V/30A, 电机可以工作在50Hz以上。

当转速为50Hz时, 变频器的输出电压为380V, 电流为30A. 这时如果增大输出频率到60Hz, 变频器的最大输出电压电流还只能为380V/30A. 很显然输出功率不变. 所以我们称之为恒功率调速.

这时的转矩情况怎样呢?

因为P=wT (w:角速度, T:转矩). 因为P不变, w增加了, 所以转矩会相应减小。

我们还可以再换一个角度来看:

电机的定子电压 U = E + I*R (I为电流, R为电子电阻, E为感应电势)
可以看出, U,I不变时, E也不变.
而E = k*f*X, (k:常数, f: 频率, X:磁通), 所以当f由50-->60Hz时, X会相应减小
对于电机来说, T=K*I*X, (K:常数, I:电流, X:磁通), 因此转矩T会跟着磁通X减小而减小.
同时, 小于50Hz时, 由于I*R很小, 所以U/f=E/f不变时, 磁通(X)为常数. 转矩T和电流成正比. 这也就是为什么通常用变频器的过流能力来描述其过载(转矩)能力. 并称为恒转矩调速(额定电流不变-->最大转矩不变)
结论: 当变频器输出频率从50Hz以上增加时, 电机的输出转矩会减小.

5. 其他和输出转矩有关的因素

发热和散热能力决定变频器的输出电流能力,从而影响变频器的输出转矩能力。
载波频率: 一般变频器所标的额定电流都是以最高载波频率, 最高环境温度下能保证持续输出的数值. 降低载波频率, 电机的电流不会受到影响。但元器件的发热会减小。
环境温度:就象不会因为检测到周围温度比较低时就增大变频器保护电流值.
海拔高度: 海拔高度增加, 对散热和绝缘性能都有影响.一般1000m以下可以不考虑. 以上每1000米降容5%就可以了.

㈡ 用java编程,题目为冒泡法排序。

public class Sort {

public static void main(String[] args){
//随机产生10个整数
int[] temp = new int[10];
for(int i=0;i<temp.length;i++){
temp[i]=(int) (Math.random()*100);
}

//冒泡法排序
int a;
for(int j=0;j<temp.length-1;j++){
for(int k=j+1;k<temp.length;k++){
if(temp[j]>temp[k]){
a=temp[j];
temp[j]=temp[k];
temp[k]=a;
}

}

}
//输出排序结果
//输出排序结果

try {
File file = new File("E:/a.txt");
BufferedWriter bfw= new BufferedWriter(new FileWriter(file));
for(int i=0;i<temp.length;i++){
bfw.write(temp[i]+";");
}
bfw.close();
System.out.println("数据存储完毕");
}
catch (Exception e) {
System.out.println("数据写入失败!!!!");
}
}

}

㈢ JAVA实现面对对象编程,这道题怎么做

Index.java

importjava.io.BufferedWriter;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.Map;
importjava.util.Scanner;
importjava.util.Set;

publicclassIndex{
//创建全局键盘输入对象.
staticScannersc;

publicstaticvoidmain(String[]args)throwsIOException{
sc=newScanner(System.in);
//创建Map映射,键为球队编号,值为球队类.
HashMap<String,Team>teams=newHashMap<String,Team>();
//循环命名,用于指定退出和继续.
Loop:while(true){
//打印选项
System.out.println("1.添加球队2.查看球队3.删除球员信息4.导出球队信息5.退出");
Stringoption=sc.nextLine();
switch(option){
case"1": //1.添加球队
addTeam(teams);
break;
case"2": //2.查看球队
viewTeam(teams);
break;
case"3": //3.删除球员
deletePlayer(teams);
break;
case"4": //4.导出信息
exportInfo(teams);
break;
case"5": //5.退出系统
exit();
sc.close();//退出此系统之前关闭输入流.
breakLoop;
default: //其他情况
System.out.println("错误输入,请重新输入:");
continueLoop;
}
}
}

//根据球队编号添加队伍,添加队伍的同时在球队中添加球员对象.
publicstaticvoidaddTeam(Map<String,Team>teams){
System.out.println("请输入球队编号:");
StringteamID=sc.nextLine();
//创建新球队对象.
Teamteam=newTeam();
team.setTeamID(teamID);
//把创建的球队对象加入map映射中.
teams.put(teamID,team);
System.out.println("请输入球队名字:");
StringteamName=sc.nextLine();
team.setTeamName(teamName);
System.out.println("请输入球队所在城市:");
StringteamCity=sc.nextLine();
team.setTeamCity(teamCity);
//新建一个布尔变量用于判断是否继续添加.
booleanflag=true;
while(flag){
System.out.println("请输入球员名字:");
StringplayerName=sc.nextLine();
System.out.println("请输入球员场均得分:");
doublepointsPerGame=sc.nextDouble();
sc.nextLine();
System.out.println("请选择球员类型:1.前锋2.中锋3.后卫");
//新建一个position变量,判断添加的球员类型.
intposition=sc.nextInt();
sc.nextLine();
if(position==1){
Forwardplayer=newForward();
team.setPlayers(player);
player.setPlayerPosition("前锋");
System.out.println("请输入场均篮板:");
doublereboundsPerGame=sc.nextDouble();
sc.nextLine();
player.setPlayerName(playerName);
player.setPointsPerGame(pointsPerGame);
player.setReboundsPerGame(reboundsPerGame);
}elseif(position==2){
Centerplayer=newCenter();
team.setPlayers(player);
player.setPlayerPosition("中锋");
System.out.println("请输入场均盖帽:");
doubleblocksPerGame=sc.nextDouble();
sc.nextLine();
player.setPlayerName(playerName);
player.setPointsPerGame(pointsPerGame);
player.setBlocksPerGame(blocksPerGame);
}else{
Guardplayer=newGuard();
team.setPlayers(player);
player.setPlayerPosition("后卫");
System.out.println("请输入场均助攻:");
doubleassistsPerGame=sc.nextDouble();
sc.nextLine();
player.setPlayerName(playerName);
player.setPointsPerGame(pointsPerGame);
player.setAssistsPerGame(assistsPerGame);
}
System.out.println("是否继续添加:(Y/N)");
StringisAdd=sc.nextLine();
if(isAdd.equalsIgnoreCase("y"))
flag=true;
else
flag=false;
}
System.out.println("球队编号 球队名称 球队所在城市");
System.out.println(team.getTeamID()+" "+team.getTeamName()+" "+team.getTeamCity());
}

//根据队伍,输出球员信息.
publicstaticvoidviewTeam(Map<String,Team>teams){
//用keySet方法取出map映射中的键.用于迭代取Team对象.
Set<String>keyset=teams.keySet();
for(Iterator<String>itt=keyset.iterator();itt.hasNext();){
Stringtmp=itt.next();
Teamteam=teams.get(tmp);
System.out.println("球队编号 球队名称 球队所在城市");
System.out.println(team.getTeamID()+" "+team.getTeamName()+" "+team.getTeamCity());
//得到Team对象之后,迭代其中的ArrayList,其中存储了球员对象.
System.out.println("球员名字 场均得分 球员类型");
for(Iterator<Player>itp=team.getPlayers().iterator();itp.hasNext();){
Playerplayer=itp.next();
if(player.getPlayerPosition().equals("前锋"))
player=(Forward)player;
elseif(player.getPlayerPosition().equals("中锋"))
player=(Center)player;
else
player=(Guard)player;
System.out.println(player);
}
}
}

//先根据球队编号,再删除球员,如没有球队/员则会提示.
publicstaticvoiddeletePlayer(Map<String,Team>teams){
System.out.println("请输入要删除的球队编号");
StringteamID=sc.nextLine();
//判断map映射中是否存在输入的球队编号,无则跳回选择界面.
if(teams.containsKey(teamID)){
Teamteam=teams.get(teamID);
System.out.println("请输入球员姓名:");
StringplayerName=sc.nextLine();
booleanflag=false;
for(Iterator<Player>it=team.getPlayers().iterator();it.hasNext();){
Playertmp=it.next();
if(playerName.equals(tmp.getPlayerName())){
flag=true;
it.remove();
System.out.println("删除成功");
break;
}
}
if(!flag)
System.out.println("删除失败,无此球员");
}else
System.out.println("无此球队,请重新选择功能.");
}

//导出球队信息到当前目录.

publicstaticvoidexportInfo(Map<String,Team>teams)throwsIOException{
Set<String>keyset=teams.keySet();
//通过判断keySet的长度判断是否输入过球队信息.
if(keyset.size()!=0){
BufferedWriterbfw=newBufferedWriter(newFileWriter("Teams.txt"));
for(Iterator<String>it=keyset.iterator();it.hasNext();){
Stringtmp=it.next();
Teamteam=teams.get(tmp);
bfw.write("球队编号 球队名称 球队所在城市");
bfw.newLine();
bfw.write(team.getTeamID()+" "+team.getTeamName()+" "+team.getTeamCity());
bfw.newLine();
}
bfw.close();
}else{
System.out.println("请先输入球队信息,再导出.");
}
}

//退出系统.
publicstaticvoidexit(){
System.out.println("欢迎下次再来.");
}
}

Team.java

importjava.util.ArrayList;

publicclassTeam{
privateStringteamID; //球队编号
privateStringteamName; //球队名字
privateStringteamCity; //球队所在城市
privateArrayList<Player>players; //球员集合

publicTeam(){//实例化Team的同时,实例化ArrayList集合.
players=newArrayList<>();
}

//各属性get和set方法
publicStringgetTeamID(){
returnteamID;
}

publicvoidsetTeamID(StringteamID){
this.teamID=teamID;
}

publicStringgetTeamName(){
returnteamName;
}

publicvoidsetTeamName(StringteamName){
this.teamName=teamName;
}

publicStringgetTeamCity(){
returnteamCity;
}

publicvoidsetTeamCity(StringteamCity){
this.teamCity=teamCity;
}

publicArrayList<Player>getPlayers(){
returnplayers;
}

//players的set方法,直接将球员添加到ArrayList中.
publicvoidsetPlayers(Playerplayer){
players.add(player);
}

}

Player.java

publicclassPlayer{
protectedStringplayerName; //球员姓名
protecteddoublepointsPerGame; //场均得分
protectedStringplayerPosition; //球员类型

//各个属性的get,set方法
publicStringgetPlayerName(){
returnplayerName;
}

publicvoidsetPlayerName(StringplayerName){
this.playerName=playerName;
}

publicdoublegetPointsPerGame(){
returnpointsPerGame;
}

publicvoidsetPointsPerGame(doublepointsPerGame){
this.pointsPerGame=pointsPerGame;
}

publicStringgetPlayerPosition(){
returnplayerPosition;
}

publicvoidsetPlayerPosition(StringplayerPosition){
this.playerPosition=playerPosition;
}

//重写toString方法,方便输出
publicStringtoString(){
returnplayerName+" "+pointsPerGame+" "+playerPosition;
}
}

Forward.java

{
privatedoublereboundsPerGame;//场均篮板

//get,set方法
(){
returnreboundsPerGame;
}

publicvoidsetReboundsPerGame(doublereboundsPerGame){
this.reboundsPerGame=reboundsPerGame;
}

//重写toString方法,方便输出
publicStringtoString(){
returnplayerName+" "+pointsPerGame+" "+playerPosition+" "+"场均篮板 "+reboundsPerGame;
}
}

Center.java

{
privatedoubleblocksPerGame;//场均盖帽

//get,set方法
publicdoublegetBlocksPerGame(){
returnblocksPerGame;
}

publicvoidsetBlocksPerGame(doubleblocksPerGame){
this.blocksPerGame=blocksPerGame;
}

//重写toString方法,方便输出
publicStringtoString(){
returnplayerName+" "+pointsPerGame+" "+playerPosition+" "+"场均盖帽 "+blocksPerGame;
}
}

Guard.java

publicclassGuardextendsPlayer{
privatedoubleassistsPerGame;//场均助攻

//get,set方法
publicdoublegetAssistsPerGame(){
returnassistsPerGame;
}

publicvoidsetAssistsPerGame(doubleassistsPerGame){
this.assistsPerGame=assistsPerGame;
}

//重写toString方法,方便输出
publicStringtoString(){
returnplayerName+" "+pointsPerGame+" "+playerPosition+" "+"场均助攻 "+assistsPerGame;
}
}

除了注释外有不懂的追问,功能都测试过可以使用,求采纳.

㈣ 凯撒密码,要求C语言编写,求救!

写的一般般,希望对LZ有所帮助
#include <stdio.h>
#include <string.h>
int main()
{
char str[201];//存放字符
char tmp[11];//临时变量
int i;//循环变量
int len;//存放消息长度
scanf("%s",tmp);//这里输入START,开始
getchar();//接收回车
while(strcmp(tmp,"ENDOFINPUT"))
{
gets(str);//由于输入中有空格,所以用gets输入
getchar();//接收回车
len = strlen(str);
for(i=0;i<len;i++)
{
if(str[i]>='A'&&str[i]<='Z')
{
str[i] -= 5 ;
if(str[i] < 65)
{
str[i] +=26;
}
}
}
scanf("%s",tmp);//这里输入END,结束
printf("%s\n",str);//处理完就直接输出结果
scanf("%s",tmp);//输入START表示继续,输入ENDOFINPUT则表示最后一个数据集
getchar();//接收回车
}
return 0;

}

㈤ 宝马发动机制造过程全是机器,这就是为什么德国汽车牛

宝马汽车公司也是德国一家历史悠久的企业。1913年,德国四冲程内燃机的发明人奥托的儿子古斯塔夫-奥托与他的合伙人佛瑞德雷-瑞浦和马克斯-弗里兹在慕尼黑北郊一个机场附近成立了瑞浦发动机公司,专门从事飞机发动机的制造。由于第一次世界大战的需要,公司扩大,1916年3月7日改名为Bayerische Flugzeug Werke AG(巴伐利亚飞机公司),缩写为BFW。这一天也就是宝马公司的创始日。
古斯塔夫-奥托退休后,BFW公司开始重组,于1917年7月21日登记注册为Bayerische Motoren Werke GmbH(巴伐利亚发动机有限公司)。公司有了两位新老板,一位是杰克-莎柏奴,另一位是甘美路-卡斯丁哥尼,这两个人都是日后宝马公司发展史上举足轻重的人物。

宝马全新一代3系,代号F30,充满杀气的外观,吸引了不少人的眼球,而这款来自德国的战马,究竟是如何诞生的呢?宝马的慕尼黑工厂,展示出了这款科技与艺术的结晶的诞生过程!
在对公司总部(其建筑外型象征一部四缸引擎)附近的厂房进 行现代化改造与扩展过程中,一种新型的滑轨输送带系统已于2003年底/2004年初安装在宝马3系列车身组装生产线上。凭借这种全新的系统,宝马公司将能够适应未来的车型要求。
车身组装车间安装了宝马3系列的全套内部系统。组装工作 大部分在运动之中进行。而在自动安装汽车顶蓬,驾驶员座 舱和车窗过程中,车身保持静止。两名人员专门负责一辆汽 车组装的每个步骤。在工作过程中,他们沿着组装生产线进行检查,然后再返回到起始点。这条长约800米的组装生产 线上大约有500名工作人员在进行操作。

这套输送带系统包括146个铰接的推动托盘。由于慕尼黑工 厂位于一个历史沿袭下来的特殊地理位置,因此,只有采用一种折衷灵活的解决方案才行。这些平台都没有安装自己的驱动设备,但通过沿组装生产线分布的侧面磨擦驱动设备加以推动。绝对值编码器同时监控102部驱动设备的精确同步,并防止托盘之间产生缝隙。
在组装过程中,这一全新的组装生产线需要在线上的任何位 置都能对车身高度进行调整,以确保在符合人机工程学的最 佳位置上完成组装工作。因此,每一个托盘都带有一个升降台,车身最大限度可以被提升80公分。
同时,根据宝马汽车公司的一项重要的生产计划要求,在每个平台任意定义的一个点上都能对12伏的测试电压进行安 全地开关转换。在组装时,将对驾驶员座舱的车载电子设备和喇叭进行测试。由于没有安装电池,因此,必须从外部提供12伏电压。在诸如安装安全气囊的敏感区域,必须能够 可靠地切断电压,而不必在组装部分进行永久性布线。

每个推动托盘都有一个带CPU IM 151的SIMATIC ET200S外部接口,既可以用作SIMATIC S7-400总控器的从站,同 时也可用作平台上的一个主站,以便驱动车身和绝对值解 码器的升降机构。托盘通过电源导轨信号放大器与SIMATIC中央控制器连接,它们通过集线来可靠地传输PROFIBUS信 号。升降装置也可以通过这种方式在操作中的任意位置进行单独设置。
整个工厂根据STEP7进行配置,并由2部SIMATIC S7-400s 进行集中控制。工厂的可视化操作使用WinCC进行编程, 从而使得工厂能够展现不同的细部特点-对每个托盘上 的二进位编码器状态进行总体浏览。通过扫描辨识标记 可以确定每个托盘的确切位置。作为一种中央现场总线, PROFIBUS DP可以提供控制器与外围设备之间的可靠通信。 使用proTool/Pro进行组态的SIMATIC Multi Panel MP 270B 设备可以用作局部的手工操纵设备,并且允许方便地分布式 访问输送带系统。

因为每个托盘具有独立的智能性,而且可以经由电源导轨信号放大器来实现通信,因此,工厂在工作周期内具有最大的 任务分配灵活性。这意味着一条生产线可以同时生产几款车型,并且可以连续馈送新的车型。
车身运输器包含一个感应式Moby数据载体,这样可以在任 何时候对车身加以辨识。对于宝马汽车公司的生产控制、文 件管理和质量保证来说,这都是一个相当重要的环节。

避免偏移
宝马汽车公司将平台上的组装员工的人身安全问题始终放 在第一位。其单个元件之间并未彼此连接,以确保单个托盘 不会产生偏移和危及人身安全。即使托盘在移动过程中仅仅 偏移几毫米,输送带也将自动停止运行,从而避免造**身 伤害。
为此,绝对值编码器将不断对每个托盘的位置进行扫描。以 安全为中心的SIMATIC控制器SIMATIC S7-416F设备负责不 断地监视光栅、防护门、托盘传感器和紧急制动开关,并且在必要的时候可以在几百毫秒之内关闭设备。
本地化安装的手控 HMI装置,可以使用 SIMATIC MP270B来实现分布式HMI和紧急制动功能。来自市场领先者的统一标准输送带系统的自动化仅是整个生产组合方案的一个环节而 已,其中,西门子公司已经开始接手从车身组装到通过 六个单元进行传送的宝马 3 系列整个生产进程的自动化。 SIMATIC的全集成自动化优点可以在此大显身手。系统界面 实现了最小化,并且获得了同质化的控制架构。宝马汽车公司结构规划负责人Jakob Wersching解释说,单一单元的自 动化本身已经是一项复杂的任务,而使六个生产单元互相协 调且不出现重大疏漏问题,这在一个非均质的自动化环境之 中几乎是不可能实现的。
确保未来两代车型的生产效率
宝马汽车公司提供的设备实用性达99%。在工厂投入试运 行之后的六周之内,没有出现任何大的故障。其中一项原因 就是,这些宝贵的经验来源于在Lohhof宝马汽车生产厂的安装测试,而在测试之中使用了30个滑动托盘。之后,这 些经验被运用到了慕尼黑的这家工厂。
宝马汽车公司相信,生产线上全新的人机工程学理念能够为 员工创造理想的条件,从而将员工的能动性用于提升生产效 率。
通过电源导轨信号放大器的转换,可以实现组装周期分配中 的最大灵活性,从而确保能够根据生产需求迅速做出反应, 同时也确保了宝马汽车公司能够经受得起未来车型的冲击。 慕尼黑工厂的新型滑轨输送带系统将为未来两代汽车提供轻松自如的车身输送过程。

热点内容
c语言负数运算 发布:2025-05-13 18:45:21 浏览:427
太空杀电脑版连接不到服务器 发布:2025-05-13 18:40:19 浏览:456
同样的配置为什么跑分不同 发布:2025-05-13 18:39:06 浏览:278
获取linuxcpu序列号 发布:2025-05-13 18:36:35 浏览:738
appleid为什么连接服务器出现问题 发布:2025-05-13 18:17:37 浏览:971
书翁怎么配置 发布:2025-05-13 18:17:36 浏览:911
云数据库mongodb 发布:2025-05-13 18:16:12 浏览:774
A7编程 发布:2025-05-13 18:15:26 浏览:742
python视图 发布:2025-05-13 18:14:01 浏览:759
win为什么干不过安卓 发布:2025-05-13 18:12:27 浏览:586