- 浏览: 39728 次
-
最新评论
-
icedcoco:
恩,现在不用配置也没有问题,不过刚才的问题还是时常出现,比较郁 ...
webwork在resin3.0.12下面发布之后的问题 -
boin:
我用过 resin3和spring2.0 ,没有改resin的 ...
webwork在resin3.0.12下面发布之后的问题 -
icedcoco:
问题解决了。
过程是这样的,因为我用了spring2.0,在网 ...
webwork在resin3.0.12下面发布之后的问题 -
icedcoco:
怎么只有人浏览没有人回复呢,难道没有人遇到过这样的问题吗?
webwork在resin3.0.12下面发布之后的问题
Java上传下载FTP服务器代码
import java.io.*;
import java.util.*;
import java.sql.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetAddress;
import sun.net.ftp.*;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
/*
* 用于连接到FTP服务器上
* @return String 若失败则返回失败信息,成功返回空字符串
*/
private String connectToFtpServer(){
if ((this.ftpserver==null)||(this.ftpserver.equals(""))) return "FTP服务器名设置不正确!";
try{
fc.openServer(this.ftpserver);
fc.login(this.ftpuser,this.ftppwd);
fc.ascii();
}catch(FtpLoginException e){
return "没有与FTP服务器连接的权限,或用户名密码设置不正确!";
}catch(IOException e){
return "与FTP服务器连接失败!";
}catch(SecurityException e){
return "没有权限与FTP服务器连接";
}
return "";
}
/*
* 用于关闭与FTP服务器的连接
*/
private void closeFtpConnect(){
if (fc.serverIsOpen()){
try{
fc.closeServer();
}catch(Exception e){
}finally{
fc = null;
}
}
}
public String downloadFile(String fileName){
//只下载文本文件或XML文件
if (!this.isTextFile(fileName)) return fileName + "不是XML文件或文本文件";
String retMessage = "";
if (!fc.serverIsOpen()){
retMessage = this.connectToFtpServer();
if (!retMessage.equals("")) return "下载文件:" + fileName + "时无法和FTP服务器连接";
}
//if (conn == null) return "下载文件:" + fileName + "时无法连接到数据库";
String chkSql = "select 1 from t_trans_log where file_name = '" + fileName + "'";
if (sqlbean.checkQueryRowCount(chkSql) > 0) return retMessage;
if (this.dldir==null) this.dldir = "";
try{
TelnetInputStream is = fc.get(this.dldir + "/" + fileName);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//读取文件内容到stringbuffer
StringBuffer sb = new StringBuffer();
int length;
char buffer[] = new char[1];
while((length = br.read(buffer,0,1)) != -1) sb.append(buffer);
//构造sql语句插入记录
//String ls_lsh = get_lsh(12);
String ls_lsh = ah.getAutoID("xf_lsh",12);
String ls_sql = "insert into t_trans_log(tran_id,tran_flag,file_name,file_content)values('"
ls_sql += ls_lsh + "','0','" + fileName + "','" + sb.toString() + "')";
conn = connmanager.getConnection();
conn.setAutoCommit(false);
sqlbean.executeUpdate(conn,ls_sql);
//将stringbuffer写入文件中
byte buf[] = sb.toString().getBytes();
OutputStream f1 = new FileOutputStream(this.bdldir + "/" + fileName);
f1.write(buf);
f1.close();
is.close();
br.close();
//删除文件
this.deleteFile(this.dldir + "/" + fileName);
conn.commit();
conn.setAutoCommit(true);
connmanager.close(conn);
}catch(SQLException e){
retMessage = "下载文件:" + fileName + "时发生数据库错误:" + e.getMessage();
}catch(IOException e){
retMessage = "下载文件:" + fileName + "时发生文件读写错误:" + e.getMessage();
}
return retMessage;
}
//下载指定目录下的所有文件
public String downloadFiles(String dirName){
String retMessage = "";
if ((dirName == null)||(dirName.equals(""))) dirName = this.dldir;
String[] sa = this.list();
for (int i = 0;i < sa.length;i++){
retMessage = this.downloadFile(sa[i]);
if (!retMessage.equals("")) return retMessage;
}
return retMessage;
}
//下载FTP服务器上的所有文件
public String downloadFiles(){
return downloadFiles(this.dldir);
}
public String uploadFile(String fileName){
String retMessage = "";
if (!fc.serverIsOpen()){
retMessage = this.connectToFtpServer();
if (!retMessage.equals("")) return "上传文件:" + fileName + "时无法和FTP服务器连接";
}
//if (conn == null) return "上传文件:" + fileName + "时无法连接到数据库";
//String chkSql = "select 1 from t_trans_log where file_name = '" + fileName + "'";
//if (Utils.checkQueryRowCount(conn,chkSql) > 0) return retMessage;
try{
if (this.uldir==null) this.uldir = "";
if (this.buldir==null) this.buldir = "";
TelnetOutputStream os = fc.put(this.uldir + "/" + fileName);
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(os));
StringBuffer sb = new StringBuffer();
InputStream f1 = new FileInputStream(this.buldir + "/" + fileName);
int size = f1.available();
byte b[] = new byte[size];
while(f1.read(b)!= -1) sb.append(new String(b,0,b.length));
//构造sql语句插入记录
//String ls_sql = "insert into t_trans_log(tran_id,file_name,file_content)values('" + get_lsh(12) + "','" + fileName + "','" + sb.toString() + "')";
String ls_sql = "insert into t_trans_log(tran_id,file_name,file_content)values('" + ah.getAutoID("xf_lsh",12) + "','" + fileName + "','" + sb.toString() + "')";
conn = connmanager.getConnection();
conn.setAutoCommit(false);
sqlbean.executeUpdate(conn,ls_sql);
//写入文件
wr.write(sb.toString());
f1.close();
wr.close();
os.close();
//删除本地文件
File ls_file = new File(this.buldir + "/" + fileName);
ls_file.delete();
conn.commit();
conn.setAutoCommit(true);
connmanager.close(conn);
}catch(SQLException e){
retMessage = "上传文件:" + fileName + "时发生数据库错误:" + e.getMessage();
}catch(IOException e){
retMessage = "上传文件:" + fileName + "时发生文件读写错误:" + e.getMessage();
}
return retMessage;
}
/**
* 功能:获取指定目录文件列表并上传每一个文件
*/
public String uploadFiles(){
String retMessage = "";
if (this.buldir == null) this.buldir = "";
File ls_file = new File(this.buldir);
File[] entries = ls_file.listFiles();
for(int i=0; i this.uploadFile(entries[i].getName());
if (!retMessage.equals("")) return retMessage;
}
return retMessage;
}
public String deleteFile(String fileName){
String retMessage = "";
try{
Socket socket = new Socket(this.ftpserver,this.ftpport);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
if (!reader.readLine().startsWith("220")) return "DELE 无法连接到指定的FTP服务器";
Writer writer = new OutputStreamWriter(socket.getOutputStream());
writer.write("USER " + this.ftpuser + "rn");
writer.flush();
if (!reader.readLine().startsWith("331")) return "DELE 指定的登录FTP用户名无效";
writer.write("PASS " + this.ftppwd + "rn");
writer.flush();
if (!reader.readLine().startsWith("230")) return "DELE FTP用户的登录口令错误";
writer.write("DELE " + fileName + "rn");
writer.flush();
if (!reader.readLine().startsWith("250")) return "无法删除指定文件" + fileName;
writer.close();
reader.close();
socket.close();
}catch(Exception e){
retMessage = "删除文件" + fileName + "时发生错误" + e.getMessage();
}
return retMessage;
}
/**
* 功能:获取指定目录下以分号分隔的文件名列表
*/
public String getDownloadFileList(String dirName){
StringBuffer sb = new StringBuffer();
String[] sa = list(dirName);
int saLength = sa.length;
for (int i = 0; i < saLength; i++) sb.append(sa[i]).append(";");
return sb.toString();
}
/**
* 功能:获取默认下载目录下以分号分隔的文件名列表
*/
public String getDownloadFileList(){
return getDownloadFileList(this.dldir);
}
/**
* 功能:以数组的形式返回服务器上指定目录下的文件名列表
*/
public String[] list(String dirName){
String[] fileNameList = new String[0];
Vector lines = new Vector();
String line = null;
if (fc.serverIsOpen()){
try{
fc.cd(dirName.equals("")?this.dldir:dirName);
TelnetInputStream ins = fc.list();
fc.cd("/");
LineNumberReader in = new LineNumberReader(new InputStreamReader(ins));
line = in.readLine();
while((line != null)&&!(line.trim().equals(""))&&!(line.trim().equals("/n"))){
lines.add(line.substring(line.lastIndexOf(" ") + 1,line.length()));
line = in.readLine();
}
in.close();
ins.close();
}catch(Exception e){
}
if (!lines.isEmpty()) fileNameList = (String[])lines.toArray(fileNameList);
}
return fileNameList;
}
/**
* 功能:以数组的形式返回服务器上默认下载目录下的文件名列表
*/
public String[] list(){
return this.list(this.dldir);
}
public String getDlDir(){return this.dldir;}
/**
* 功能:用于判断文件是否是XML或TXT文件
*/
private boolean isTextFile(String fileName){
return (fileName.toLowerCase().endsWith(".xml")||fileName.toLowerCase().endsWith(".txt"));
}
}
import java.io.*;
import java.util.*;
import java.sql.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetAddress;
import sun.net.ftp.*;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
/*
* 用于连接到FTP服务器上
* @return String 若失败则返回失败信息,成功返回空字符串
*/
private String connectToFtpServer(){
if ((this.ftpserver==null)||(this.ftpserver.equals(""))) return "FTP服务器名设置不正确!";
try{
fc.openServer(this.ftpserver);
fc.login(this.ftpuser,this.ftppwd);
fc.ascii();
}catch(FtpLoginException e){
return "没有与FTP服务器连接的权限,或用户名密码设置不正确!";
}catch(IOException e){
return "与FTP服务器连接失败!";
}catch(SecurityException e){
return "没有权限与FTP服务器连接";
}
return "";
}
/*
* 用于关闭与FTP服务器的连接
*/
private void closeFtpConnect(){
if (fc.serverIsOpen()){
try{
fc.closeServer();
}catch(Exception e){
}finally{
fc = null;
}
}
}
public String downloadFile(String fileName){
//只下载文本文件或XML文件
if (!this.isTextFile(fileName)) return fileName + "不是XML文件或文本文件";
String retMessage = "";
if (!fc.serverIsOpen()){
retMessage = this.connectToFtpServer();
if (!retMessage.equals("")) return "下载文件:" + fileName + "时无法和FTP服务器连接";
}
//if (conn == null) return "下载文件:" + fileName + "时无法连接到数据库";
String chkSql = "select 1 from t_trans_log where file_name = '" + fileName + "'";
if (sqlbean.checkQueryRowCount(chkSql) > 0) return retMessage;
if (this.dldir==null) this.dldir = "";
try{
TelnetInputStream is = fc.get(this.dldir + "/" + fileName);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//读取文件内容到stringbuffer
StringBuffer sb = new StringBuffer();
int length;
char buffer[] = new char[1];
while((length = br.read(buffer,0,1)) != -1) sb.append(buffer);
//构造sql语句插入记录
//String ls_lsh = get_lsh(12);
String ls_lsh = ah.getAutoID("xf_lsh",12);
String ls_sql = "insert into t_trans_log(tran_id,tran_flag,file_name,file_content)values('"
ls_sql += ls_lsh + "','0','" + fileName + "','" + sb.toString() + "')";
conn = connmanager.getConnection();
conn.setAutoCommit(false);
sqlbean.executeUpdate(conn,ls_sql);
//将stringbuffer写入文件中
byte buf[] = sb.toString().getBytes();
OutputStream f1 = new FileOutputStream(this.bdldir + "/" + fileName);
f1.write(buf);
f1.close();
is.close();
br.close();
//删除文件
this.deleteFile(this.dldir + "/" + fileName);
conn.commit();
conn.setAutoCommit(true);
connmanager.close(conn);
}catch(SQLException e){
retMessage = "下载文件:" + fileName + "时发生数据库错误:" + e.getMessage();
}catch(IOException e){
retMessage = "下载文件:" + fileName + "时发生文件读写错误:" + e.getMessage();
}
return retMessage;
}
//下载指定目录下的所有文件
public String downloadFiles(String dirName){
String retMessage = "";
if ((dirName == null)||(dirName.equals(""))) dirName = this.dldir;
String[] sa = this.list();
for (int i = 0;i < sa.length;i++){
retMessage = this.downloadFile(sa[i]);
if (!retMessage.equals("")) return retMessage;
}
return retMessage;
}
//下载FTP服务器上的所有文件
public String downloadFiles(){
return downloadFiles(this.dldir);
}
public String uploadFile(String fileName){
String retMessage = "";
if (!fc.serverIsOpen()){
retMessage = this.connectToFtpServer();
if (!retMessage.equals("")) return "上传文件:" + fileName + "时无法和FTP服务器连接";
}
//if (conn == null) return "上传文件:" + fileName + "时无法连接到数据库";
//String chkSql = "select 1 from t_trans_log where file_name = '" + fileName + "'";
//if (Utils.checkQueryRowCount(conn,chkSql) > 0) return retMessage;
try{
if (this.uldir==null) this.uldir = "";
if (this.buldir==null) this.buldir = "";
TelnetOutputStream os = fc.put(this.uldir + "/" + fileName);
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(os));
StringBuffer sb = new StringBuffer();
InputStream f1 = new FileInputStream(this.buldir + "/" + fileName);
int size = f1.available();
byte b[] = new byte[size];
while(f1.read(b)!= -1) sb.append(new String(b,0,b.length));
//构造sql语句插入记录
//String ls_sql = "insert into t_trans_log(tran_id,file_name,file_content)values('" + get_lsh(12) + "','" + fileName + "','" + sb.toString() + "')";
String ls_sql = "insert into t_trans_log(tran_id,file_name,file_content)values('" + ah.getAutoID("xf_lsh",12) + "','" + fileName + "','" + sb.toString() + "')";
conn = connmanager.getConnection();
conn.setAutoCommit(false);
sqlbean.executeUpdate(conn,ls_sql);
//写入文件
wr.write(sb.toString());
f1.close();
wr.close();
os.close();
//删除本地文件
File ls_file = new File(this.buldir + "/" + fileName);
ls_file.delete();
conn.commit();
conn.setAutoCommit(true);
connmanager.close(conn);
}catch(SQLException e){
retMessage = "上传文件:" + fileName + "时发生数据库错误:" + e.getMessage();
}catch(IOException e){
retMessage = "上传文件:" + fileName + "时发生文件读写错误:" + e.getMessage();
}
return retMessage;
}
/**
* 功能:获取指定目录文件列表并上传每一个文件
*/
public String uploadFiles(){
String retMessage = "";
if (this.buldir == null) this.buldir = "";
File ls_file = new File(this.buldir);
File[] entries = ls_file.listFiles();
for(int i=0; i this.uploadFile(entries[i].getName());
if (!retMessage.equals("")) return retMessage;
}
return retMessage;
}
public String deleteFile(String fileName){
String retMessage = "";
try{
Socket socket = new Socket(this.ftpserver,this.ftpport);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
if (!reader.readLine().startsWith("220")) return "DELE 无法连接到指定的FTP服务器";
Writer writer = new OutputStreamWriter(socket.getOutputStream());
writer.write("USER " + this.ftpuser + "rn");
writer.flush();
if (!reader.readLine().startsWith("331")) return "DELE 指定的登录FTP用户名无效";
writer.write("PASS " + this.ftppwd + "rn");
writer.flush();
if (!reader.readLine().startsWith("230")) return "DELE FTP用户的登录口令错误";
writer.write("DELE " + fileName + "rn");
writer.flush();
if (!reader.readLine().startsWith("250")) return "无法删除指定文件" + fileName;
writer.close();
reader.close();
socket.close();
}catch(Exception e){
retMessage = "删除文件" + fileName + "时发生错误" + e.getMessage();
}
return retMessage;
}
/**
* 功能:获取指定目录下以分号分隔的文件名列表
*/
public String getDownloadFileList(String dirName){
StringBuffer sb = new StringBuffer();
String[] sa = list(dirName);
int saLength = sa.length;
for (int i = 0; i < saLength; i++) sb.append(sa[i]).append(";");
return sb.toString();
}
/**
* 功能:获取默认下载目录下以分号分隔的文件名列表
*/
public String getDownloadFileList(){
return getDownloadFileList(this.dldir);
}
/**
* 功能:以数组的形式返回服务器上指定目录下的文件名列表
*/
public String[] list(String dirName){
String[] fileNameList = new String[0];
Vector lines = new Vector();
String line = null;
if (fc.serverIsOpen()){
try{
fc.cd(dirName.equals("")?this.dldir:dirName);
TelnetInputStream ins = fc.list();
fc.cd("/");
LineNumberReader in = new LineNumberReader(new InputStreamReader(ins));
line = in.readLine();
while((line != null)&&!(line.trim().equals(""))&&!(line.trim().equals("/n"))){
lines.add(line.substring(line.lastIndexOf(" ") + 1,line.length()));
line = in.readLine();
}
in.close();
ins.close();
}catch(Exception e){
}
if (!lines.isEmpty()) fileNameList = (String[])lines.toArray(fileNameList);
}
return fileNameList;
}
/**
* 功能:以数组的形式返回服务器上默认下载目录下的文件名列表
*/
public String[] list(){
return this.list(this.dldir);
}
public String getDlDir(){return this.dldir;}
/**
* 功能:用于判断文件是否是XML或TXT文件
*/
private boolean isTextFile(String fileName){
return (fileName.toLowerCase().endsWith(".xml")||fileName.toLowerCase().endsWith(".txt"));
}
}
发表评论
-
软件需求说明书的编写提示
2011-03-22 23:31 983软件需求说明书的编写 ... -
软件需求分析方法总结--如何分析问题和需求
2011-03-22 23:25 1412如何分析问题和需求 ... -
下拉菜单多选
2011-03-21 18:24 2600可以尝试用多选下拉列表,这样不会破坏样式,比较好,你觉得呢, ... -
Java中abstract和interface的区别
2011-03-11 17:16 865abstract class和interface是Java语言 ... -
java动态加载jar
2011-03-11 16:53 1960本文引用自bluedavid《java动态加载jar》 ... -
理解Java类加载原理(翻译)
2011-03-11 16:51 691第一部分. 提示 我需要 ... -
JDK6的新特性之十二:脚本语言支持(Scripting)转载
2011-03-11 16:46 889JDK6增加了对脚本语言的支持(JSR 223),原理上是将脚 ... -
快速精确的对数学表达式求值
2011-03-11 16:43 943使用这个方便的 applet ... -
自定义公式生成伪SQL
2011-03-11 16:41 1605由于小弟在文档编写能力上很不足,所以想通过学习一些别人的东西来 ... -
BeanShell简介
2011-03-11 16:32 865简介: BeanShell是一种脚 ... -
Spring事务配置的五种方式
2011-03-08 13:53 869前段时间对Spring的事务配置做了比较深入的研究,在此之间对 ... -
移动WAP代理SOCKET通信
2011-03-01 23:29 936URL url=new URL(path); Proxy pr ... -
web文件上传于下载
2011-03-01 23:17 819文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功 ...
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip