1. 三角洲黑鹰坠落怎么用地图编辑器
编辑好了,点编辑器菜单里的Export Binary Mission,
导出一个bms文件,把这个bms文件放到黑鹰坠落的文件夹里。
进入游戏,在相关的玩法里就可以看到新地图了,
也就是以这个bms文件名命名的一关。
BS:楼主是学编程的?编辑器里面大量的if then语句,
你是怎么搞定的?很是羡慕…… ^_^
没找到什么?导出一个bms文件,这个没问题了吧?
bms文件放进游戏文件夹里,就是和那些dfbhd.exe什么的,
在一起的,然后进入游戏,这就要看你编辑的地图,
具体是哪种玩法的,单人的?多人的就包括很多了:
死亡比赛,团队死亡比赛,搜索和破坏,山中王……
你设置的是哪种模式的,就在哪种模式里面找,
怎么会找不到?
2. 无人机应用工程师都培养什么样的人
无人机软件工程师岗位职责
职责描述:
1、负责BMS软件开发工作,包括BMS软件架构的搭建、策略方案的制定和开发文档的编写。
2、对动力电池BMS中SOX、主被动均衡等核心算法进行研究和实现。
3、编写BMS应用测试程序,输出设计文档 。
4、配合硬件工程师一起分析并解决开发过程中遇到的问题。
任职要求:
1. 有锂电池行业或BMS相关经验优先,熟悉ISO26262体系与开发流程优先。
2. 熟悉STM32等主流单片机软硬件系统。
2. 能熟练使用C语言进行产品软件开发,有良好编程习惯和风格。
3. 熟悉使用SPI、I2C、UART、CAN等通讯接口驱动及通信协议。
4. 熟悉数字电路和模拟电路,具有较强的电路分析能力。
5. 独立完成产品的软件设计和调试。
6. 英语CET6以上,良好的英语文档阅读能力。
7.本科以上学历。
3. java使用面向对象编程思维编写图书管理系统:增加,查询,修改,删除,退出,怎么写
package com.bms;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// book对象
public class Book {
private String bId; // 编号
private String bName; // 书名
// getset方法
public String getbId() {
return bId;
}
public void setbId(String bId) {
this.bId = bId;
}
public String getbName() {
return bName;
}
public void setbName(String bName) {
this.bName = bName;
}
//构造方法
public Book() {
}
public Book(String bId, String bName) {
this.bId = bId;
this.bName = bName;
}
/*
* 增加
* */
public static List<Book> add(List<Book> list) {
Scanner sn = new Scanner(System.in);
System.out.print("请输入编号:");
String bid = sn.next();
System.out.print("请输入名称:");
String bName = sn.next();
Book book = new Book(bid, bName);
for (Book b : list) {
if (b.bId.equals(book.bId)) {
System.out.println("编号重复,请重新输入!");
return list;
}
}
list.add(book);
System.out.println("添加成功!");
return list;
}
/*
* 查询
* */
public static void query(List<Book> list) {
System.out.println("编号\t书名");
for (Book b : list) {
System.out.println(b.getbId() + "\t" + b.getbName());
}
}
/*
* 修改
* */
public static void update(List<Book> list) {
query(list);
Scanner sc = new Scanner(System.in); // 键盘输入的对象
System.out.print("请输入编号:");
String s = sc.next();
Integer id = null;
for (int i = 0; i < list.size(); i++) {
id = list.get(i).getbId().equals(s) ? i : null;
}
if (id == null) {
System.out.println("输入的编号不存在,请重新选择!");
return;
}
System.out.print("请输入新的书名:");
String newName = sc.next();
list.get(id).setbName(newName);
System.out.print("修改成功!");
}
/*
* 删除
* */
public static void del(List<Book> list) {
query(list);
Scanner sc = new Scanner(System.in); // 键盘输入的对象
System.out.print("请输入编号:");
String s = sc.next();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getbId().equals(s)) {
list.remove(i);
return;
}
}
System.out.println("输入的编号不存在,请重新选择!");
}
}
/*
* 测试*/
class Test {
public static void main(String[] args) {
List<Book> bookList = new ArrayList<>(); // 存放所有图书的列表
bookList.add(new Book("1", "Java 基础")); // 图书的列表添加一本图书
System.out.print("欢迎进入图书管理系统,");
boolean b = true;
while (b) {
System.out.print("请选择:\n1.增加\n2.查询\n3.修改\n4.删除\n5.退出\n(输入序号):");
Scanner sn = new Scanner(System.in); // 键盘输入的对象
String select = sn.next();
switch (select) {
case "1":
System.out.println("您选择了增加");
Book.add(bookList);
break;
case "2":
System.out.println("您选择了查询:");
Book.query(bookList);
break;
case "3":
System.out.println("您选择了修改");
Book.update(bookList);
break;
case "4":
System.out.println("您选择了删除");
Book.del(bookList);
break;
case "5":
System.out.println("您选择了退出");
b = false;
System.out.println("退出程序!");
break;
default:
System.out.println("输入错误的序号,请重新输入");
break;
}
}
}
}
4. 如何通过对ba系统的科学设置,帮助用户节约运营费用
目前,设计师在设计照明系统时一般仍沿用传统的方法设计,比较先进的就是在某些照明回路中串联由楼宇自控(BA)系统控制的触点,通过控制这些触点可以实现诸如区域控制、定时开关、中央监控等功能。
但是,这种控制方法具有一定的局限性: 1) 考虑造价因素,这些回路的数量一般较少,一般只是大面积区域控制。若将回路划分的较细则造价昂贵。 2) 现场通常不设置开关,所有照明回路通过BA中控室控制,现场无法根据实际情况干预照明状态,使用不便。 3) 控制功能简单,只能实现定时、开关的功能,若要实现场景预设、亮度调节,软启动软关断等复杂的功能技术难度较大。 4) 由于照明系统并不是一个独立的系统,所以,在BA系统出故障时,照明系统也受到影响。
ABB智能照明系统则是一个专门针对照明需要而开发的一个智能化系统,可以独立运行。它有一套独立的控制协议,相对BA系统来说比较简单,完全能满足对照明控制的需求,价格也更有竞争力。如果将照明作为一个独立的子系统来设计,采用专业的照明控制系统,既可降低造价又可实现更加完美的智能照明控制。系统总线上协议为开放的协议,每个支线可接64个单元,各支线之间可以灵活连接。ABB i-Bus系统协议符合OSI模型和ISO标准,系统开放性好。目前,ABB公司已经开发出了多种接口单元(RS232、以太网等)和功能强大的接口程序,任何系统或软件均可方便得与i-Bus系统集成.因此,采用ABB i-Bus系统会使设计更简单,安装更快捷,使用更灵活,管理更方便。 ABB智能照明系统功能及特点 * 照明线路设计简单,系统安装方便,操作维护容易,其软件的可编程性和硬件的灵活结构,大大节省建筑开发商的投资成本和维修运行费用,缩短安装工期,提高投资回报率。* 任意实现单点、双点、多点、区域、群组逻辑控制,定时开关、亮度手/自动调节、红外线监测、遥控、场景组合等多种照明控制功能,不但可以展现丰富的灯光效果,而且还能节约能源。* 根据用户需求和外界环境的变化,仅仅是修改软件设置,或少量改造线路,就可以调整照明布局和扩充功能,适合于商业、工业、居家的不同使用要求。* 系统中每个输入输出单元里都存储有系统状态和控制指令,停电后不丢失数据。在恢复供电时,系统会根据预设记忆参数,自动恢复停电前的工作状态,实现无人值守。* 控制回路与负载回路分离,输入输出单元仅用一根2芯控制线做为总线相连,并且在网络中可以随时添加新的控制单元。总线上开关的工作电压为安全电压DC24V,确保人身安全。* i-BUS系统具有分布式智能控制的特点和开放性,可以和其它建筑管理系统(BMS)、楼宇自控系统(BA)、保安及消防系统结合起来,提高物业智能化管理水平,符合现代化生活的发展趋势。
投资回报
1、安装便捷,节省线缆 i-Bus系统是一种二线制的照明控制系统,,将系统中的各个输入、输出和系统支持单元连接起来,大截面的负载线缆从输出单元的输出端直接接到照明灯具或其它用电负载上,而无须经过开关。安装时不必考虑任何控制关系,在整个系统安装完毕后再通过软件设置各个单元的地址编码,从而建立对应的控制关系。由于i-Bus系统仅在输出单元和负载之间使用负载线缆连接,与传统控制方法相比节省了大量原本要接到开关的线缆,也缩短了安装施工的时间,节省人工费用。
2、可编程性 i-Bus系统可以通过电脑,用控制软件对整个照明系统进行远程控制和中央监控,并可以随时方便地根据用户需求修改控制关系。i-Bus系统提供的可编程性对今后可能发生的变动有很强的适应性,当某种原因需要变更照明控制关系时,只需在软件中进行修改,而无须重新敷设线缆。
3、节约能源,降低运行维护费用 由于i-Bus系统中采用了红外线传感器、亮度传感器、定时开关以及可调光技术,智能化的运行模式,使整个照明系统可以按照经济有效的最佳方案来准确运作,不但大大降低运行管理费用,而且最大限度地节约能源,与传统的照明控制方式相比较,可以节约电能20-30%。,大约两年半就可收回投资。
4、长期的、可观的潜在收益 i-Bus还采用软启动、软关断技术,可使每一负载回路在一定时间里缓慢启动、关断,或者间隔一小段时间(通常几十到几百毫秒)启动、关断,避免冲击电压对灯具的损害,成倍地延长了灯具的使用寿命。同时,系统具有开放性,提供与BA系统(包括闭路监控、消防报警、安全防范系统)相连接的接口和软件协议,便于构成一个完整的楼宇自控系统。采用了BA系统的大厦,如果也使用ABB智能照明系统,将会提高大厦的智能化程度,增加该物业的亮点,提高大厦的出售和出租率,这些无疑都获得了许多潜在的收益。
5. plc读取bms数据
新的PLC大都开始支持以太网(以前的串口局限性太大了),有的甚至在CPU上直接设置以太网接口,编程,数据传输,都可以通过这个端口来搞定,不再需要增加一个以太网接口卡。
下面是我整理的采集PLC数据的25种姿势:PLC->组态软件->OPC客户端/Modbus客户端2.PLC直连PLC协议转换器3.Kepware加嵌入式工控机,上面跑iot平台的agent。4.MatlabOPC工具箱5.LabviewOPC6.Pyopc加paho加mqttbroker7.PostgresqlSPI通过plc协议读PLC串口,将采集到的数据直接往数据库表里写8.Nodejs串口plc协议解析加mqtt9.awssitewiseopcua10.PLC自带Modbus协议支持,pymodbus加paho。11.最省硬件成本和流量的方案:WiFi芯片里跑协议解析和数据发送云平台。12.串口plc串口转以太网,tcp透传到公网服务器,ie浏览器里嵌入socket控件,用iisasp页面发送数据给服务器,然后返回。13.dtu透传串口或网口到公网服务器,公网服务器跑plc采集数据程序。14.PLC协议转换软件运行在嵌入式linux上,如kuraboschiot15.单片机,上面放两块芯片,一块通过网口或串口采集plc数据,一块主控。16.stm32单片机上跑micropython,用串口自己实现plc协议解析。17.安卓手机接usb转串口线,接plc,再把数据通过awsIoTandroidsdk发到云端http接口。接口收到后用微信python库发送数据到微信群里。18.给某水果公司代工的工厂,用macmini当工控机,用objective-c写plc数据采集驱动采集数据,通过vpn发送到苹果公司总部。让苹果公司总部实时掌握每天产量质量。19.pyopc或pyserial采集数据,然后用zeromq或amqp协议发送到云端。20.nodejs模块,然后用JS通过MQTToverwebsocket来发送数据到云端。前端界面开发人员分分钟变身物联网全栈开发人员。21.不写代码,用node-red拖。类似的是litmus。22.给工控人员用要简单易用,用c#开发agent,内置vbscript或lua脚本,提供几个函数,串口打开关闭,mqtt连接发布订阅。当然也可以java加jython。23.要是连懒得拖node-red,外包给thingworx或ignition的二次开发商。跟工厂用metasys二次开发商监控一回事。24.有钱像高铁或公安网建专网,或者像水果公司建vpn,plc就变成局域网设备,又安全又方便。没钱,就透传或中继。25.Wolfram的OPCClassic这是个Modelica库,可以让仿真模型通过OPC标准连接到OPC服务器,从而连到PLC设备。
在工业的信息化、智能化,甚至工业4.0的大潮中,很多高级算法都是由上位机、云来实现,那么PLC数据采集是最基本的前提条件之一。
6. java计算器编程!!急急急!
//一本参考书上的
importjava.awt.*;
importjava.awt.event.*;
{
doubledResult=0;
doubledNowInput=0;
doubledMemory;
intn=0;//记载小数位数
intnOperation=1;//记录运算符类型
intnBitsNum=0;//记录总共输入的位数
booleanalreadyHaveDot=false;//已经有小数点?
booleankeyAvailable=true;
booleanalreadyClickedEqueal=false;//是否按下过"="?
booleanisTempNowInput=false;//是否在计算出结果后直接按运算符将结果赋给了当前输入值?
Framef;
Panelp1,p2,p3,p4,p5,p6;
TextFieldtf1,tf2;
Buttonb1,b2,b3,b4,b5,b6,b7,b8,b9,b0;
ButtonbDiv,bSqrt,bMulti,bMinus,bPercent,bPlus,bReciprocal,bEqual,bDot,bNegative;
ButtonbBackspace,bCE,bC,bMR,bMS,bMC,bM;
publicvoiddisplay()
{
f=newFrame("计算器");
f.setSize(280,213);
f.setLocation(200,200);
f.setBackground(Color.LIGHT_GRAY);
f.setResizable(false);
f.setLayout(newBorderLayout(3,3));
p1=newPanel(newGridLayout(1,3,5,5));//用于存放backspace,ce,c三键
p2=newPanel(newGridLayout(4,5,5,5));//用于存放数字区及附近共20键,此处间隙设置可能不合理,以后调整
p3=newPanel(newGridLayout(5,1,5,5));//用于存放MC,MR,MS,M+键及显示M状态文本框,此处间隙设置可能不合理,以后调整
p4=newPanel(newFlowLayout());//用于存放p1,p2
p5=newPanel(newFlowLayout());
p6=newPanel(newFlowLayout());
p4.add(p1);
p4.add(p2);
tf1=newTextField(35);//存放显示区
tf1.setText("0.");
tf1.setEditable(false);
p5.add(tf1);
f.add(p5,BorderLayout.NORTH);
f.add(p4,BorderLayout.CENTER);
f.add(p3,BorderLayout.WEST);
b1=newButton("1");
b2=newButton("2");
b3=newButton("3");
b4=newButton("4");
b5=newButton("5");
b6=newButton("6");
b7=newButton("7");
b8=newButton("8");
b9=newButton("9");
b0=newButton("0");
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b0.addActionListener(this);
bDiv=newButton("/");
bSqrt=newButton("sqrt");
bMulti=newButton("*");
bMinus=newButton("-");
bPercent=newButton("%");
bPlus=newButton("+");
bReciprocal=newButton("1/x");
bEqual=newButton("=");
bDot=newButton(".");
bNegative=newButton("+/-");
bDiv.addActionListener(this);
bSqrt.addActionListener(this);
bMulti.addActionListener(this);
bMinus.addActionListener(this);
bPercent.addActionListener(this);
bPlus.addActionListener(this);
bReciprocal.addActionListener(this);
bEqual.addActionListener(this);
bDot.addActionListener(this);
bNegative.addActionListener(this);
p2.add(b7);
p2.add(b8);
p2.add(b9);
p2.add(bDiv);
p2.add(bSqrt);
p2.add(b4);
p2.add(b5);
p2.add(b6);
p2.add(bMulti);
p2.add(bPercent);
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(bMinus);
p2.add(bReciprocal);
p2.add(b0);
p2.add(bNegative);
p2.add(bDot);
p2.add(bPlus);
p2.add(bEqual);
bBackspace=newButton("Backspace");
bCE=newButton("CE");
bC=newButton("C");
bBackspace.addActionListener(this);
bCE.addActionListener(this);
bC.addActionListener(this);
p1.add(bBackspace);
p1.add(bCE);
p1.add(bC);
tf2=newTextField(2);
tf2.setEnabled(false);
tf2.setBackground(Color.LIGHT_GRAY);
bMC=newButton("MC");
bMR=newButton("MR");
bMS=newButton("MS");
bM=newButton("M+");
bMC.addActionListener(this);
bMR.addActionListener(this);
bMS.addActionListener(this);
bM.addActionListener(this);
p6.add(tf2);
p3.add(p6);
p3.add(bMC);
p3.add(bMR);
p3.add(bMS);
p3.add(bM);
f.setVisible(true);
f.addWindowListener(this);
}
publicvoidactionPerformed(ActionEvente)
{
//key0to9
if(this.keyAvailable&&e.getActionCommand().length()==1&&e.getActionCommand().compareTo("0")>=0&&e.getActionCommand().compareTo("9")<=0)
{
if(this.isTempNowInput)
{
this.dNowInput=0;
this.isTempNowInput=false;
}
this.nBitsNum++;
if(this.alreadyHaveDot==false)
this.dNowInput=this.dNowInput*10+Double.parseDouble(e.getActionCommand());
else
{
doubletemp=Double.parseDouble(e.getActionCommand());
for(inti=this.n;i<0;i++)
{
temp*=0.1;
}
this.dNowInput+=temp;
this.n--;
}
this.tf1.setText(Double.toString(this.dNowInput));
}
//keydot
if(this.keyAvailable&&e.getActionCommand()==".")
{
if(this.alreadyHaveDot==false)
{
this.nBitsNum++;
this.alreadyHaveDot=true;
this.n=-1;
}
}
//key"+","-","*","/"
if(this.keyAvailable&&e.getActionCommand()=="+"||e.getActionCommand()=="-"||e.getActionCommand()=="*"||e.getActionCommand()=="/")
{
if(this.alreadyClickedEqueal)
{
this.dNowInput=this.dResult;
this.isTempNowInput=true;
}
else
{
switch(this.nOperation)
{
case1:this.dResult+=this.dNowInput;break;
case2:this.dResult-=this.dNowInput;break;
case3:this.dResult*=this.dNowInput;break;
case4:
{
if(this.dNowInput==0)
{
tf1.setText("除数不能为零");
this.keyAvailable=false;
}
elsethis.dResult=this.dResult/this.dNowInput;
}
}
if(this.keyAvailable)tf1.setText(Double.toString(this.dResult));
this.dNowInput=0;
}
if(e.getActionCommand()=="+")
{
this.nOperation=1;
}
if(e.getActionCommand()=="-")
{
this.nOperation=2;
}
if(e.getActionCommand()=="*")
{
this.nOperation=3;
}
if(e.getActionCommand()=="/")
{
this.nOperation=4;
}
this.nBitsNum=0;
this.alreadyClickedEqueal=false;
}
//key"+/-"
if(this.keyAvailable&&e.getActionCommand()=="+/-")
{
this.dNowInput=0-this.dNowInput;
tf1.setText(Double.toString(this.dNowInput));
}
//key"C"
if(e.getActionCommand()=="C")
{
this.nBitsNum=0;
this.dResult=0;
this.dNowInput=0;
this.alreadyHaveDot=false;
this.n=0;
this.nOperation=1;
this.keyAvailable=true;
this.alreadyClickedEqueal=false;
tf1.setText("0.");
}
//key"CE"
if(e.getActionCommand()=="CE")
{
this.nBitsNum=0;
this.dNowInput=0;
this.alreadyHaveDot=false;
this.n=0;
this.nOperation=1;
this.keyAvailable=true;
tf1.setText("0.");
}
//key"sqrt"
if(this.keyAvailable&&e.getActionCommand()=="sqrt")
{
if(this.alreadyClickedEqueal)
{
if(this.dResult>=0)
{
this.dResult=Math.sqrt(this.dResult);
tf1.setText(Double.toString(this.dResult));
}
else
{
tf1.setText("函数输入无效");
this.keyAvailable=false;
}
}
else
{
if(this.dNowInput>=0)
{
this.dNowInput=Math.sqrt(this.dNowInput);
tf1.setText(Double.toString(this.dNowInput));
}
else
{
tf1.setText("函数输入无效");
this.keyAvailable=false;
}
}
}
//key"1/x"
if(this.keyAvailable&&e.getActionCommand()=="1/x")
{
if(this.dNowInput==0)
{
tf1.setText("除数不能为零");
this.keyAvailable=false;
}
else
{
this.dNowInput=1/this.dNowInput;
tf1.setText(Double.toString(this.dNowInput));
}
}
//key"="
if(this.keyAvailable&&e.getActionCommand()=="=")
{
this.alreadyClickedEqueal=true;
switch(this.nOperation)
{
case1:this.dResult+=this.dNowInput;break;
case2:this.dResult-=this.dNowInput;break;
case3:this.dResult*=this.dNowInput;break;
case4:
{
if(this.dNowInput==0)
{
tf1.setText("除数不能为零");
this.keyAvailable=false;
}
elsethis.dResult=this.dResult/this.dNowInput;
}
}
if(this.keyAvailable)tf1.setText(Double.toString(this.dResult));
}
//key"MS"
if(this.keyAvailable&&e.getActionCommand()=="MS")
{
this.dMemory=this.dNowInput;
if(this.dMemory!=0)
tf2.setText("M");
}
//key"MC"
if(this.keyAvailable&&e.getActionCommand()=="MC")
{
this.dMemory=0;
tf2.setText("");
}
//key"MR"
if(this.keyAvailable&&e.getActionCommand()=="MR")
{
this.dNowInput=this.dMemory;
tf1.setText(Double.toString(this.dNowInput));
}
//key"M+"
if(this.keyAvailable&&e.getActionCommand()=="M+")
{
this.dMemory+=this.dNowInput;
if(this.dMemory!=0)
tf2.setText("M");
elsetf2.setText("");
}
//key"%"
if(this.keyAvailable&&e.getActionCommand()=="%")
{
this.dNowInput=(this.dResult*this.dNowInput)/100;
tf1.setText(Double.toString(this.dNowInput));
}
//key"Backspace"
if(this.keyAvailable&&e.getActionCommand()=="Backspace")
{
if(!this.alreadyClickedEqueal){
if(this.dNowInput!=0)
{
if(this.alreadyHaveDot)
{
if(this.n==-1)
{
this.alreadyHaveDot=false;
this.n=0;
}
else
{
Stringstr,str1;
str=tf1.getText();
str1=str.substring(0,this.nBitsNum-1);
this.nBitsNum--;
this.n++;
this.dNowInput=Double.parseDouble(str1);
tf1.setText(Double.toString(this.dNowInput));
}
}
else
{
inttemp;
temp=(int)(this.dNowInput/10);
this.dNowInput=(double)temp;
tf1.setText(Double.toString(this.dNowInput));
}
}
}
}
}
publicstaticvoidmain(Stringargs[])
{
Calculationcal=newCalculation();
cal.display();
}
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
}
7. 电动汽车直流充电如何控制
一、直流充电系统构成直流充电系统由_整流装置、直流输入控制装置、直流输出控制装置和直流充电管理装 置组成。其系统框图如图1所示。
图4
工作流程描述如下:MCM首先通过射频卡读 卡器读取用户信息,并显示E卡信息,提示用户 正确连接充电插头,选择充电时间、充电方式等, 并确认启动充电。
在充电过程中,MCM定时获取电量数据。当达到用户设置的充电时间或充电电量时,发送停 止充电指令给直流输入控制模块,控制直流输入 控制模块中主接触器动作,切断动力电源,并在人机操作界面上提示用户充电结束,用户拔下插头 后,可以进行结帐、查看消费信息、打印票据等操 作。
三 、系统特点1、釆用模块化设计思想,充电系统的电源模块、控制模块、输出模块逻辑、物理上分开,便于 维修和替换。
2、控制模块满足通用化要求,可通过配置 不同的电源模块和充电模块形成不同的产品系列。
3、各模块之间米用弱亲合连接,适应未来 不同的电动汽车能源供给服务模式需求。
4、系统具有在线编程功能,程序开发方便, 具有集成度高、可靠性好等突出特点。
5、系统显示形式多样、准确性高,具有良好 的人机交互界面,操作便利。
6、系统采用冗余设计,预留大量开发空间, 便于功能的扩展和升级换代。