- 浏览: 44453 次
- 性别:
- 来自: 上海
-
最近访客 更多访客>>
文章分类
最新评论
-
sysudengle:
关于快速排序,归并排序,堆排序 -
vanchee:
解析得很不错
Spring MVC代码详解 -
sublun:
看起来不错。谢谢啦。
关于JSP静态化与伪静态 -
vincent_com:
可变兼容性好的圆角
关于JSP静态化与伪静态
首先是静态化:
以上是个方法,可以摘摘剪剪的放在自己的程序里。
但是要注意,request传值,一定要放在这个上面去做,否则得话,页面里将没有内容。反正我试的结果就是这样。
下面是伪静态。这块我也是从网上摘找的工具类,试了一下,很好使,很强大。
第一步,创建两个工具类。
代码如下,直接粘过去就可以用了。
OK。就是这些。
private static final String CONTENT_TYPE = "text/html; charset=utf-8"; public static String isStatus(String picName,String jspName,HttpSession session,HttpServletRequest request, HttpServletResponse response){ String uuid=java.util.UUID.randomUUID().toString(); session=request.getSession(); DAOFactory dao=DAOFactory.getInstance(); String name = ""; String htmlName=""; try { response.setContentType(StatUtil.CONTENT_TYPE); String url = ""; ServletContext sc =session.getServletContext(); // 你要访问的jsp文件,如index.jsp // 则你访问这个servlet时加参数.如http://localhost/toHtml?file_name=index url = "/"+jspName; // 这是你要生成HTML的jsp文件,如 name = request.getRealPath("/")+"pic-name-"+uuid+".html"; htmlName="pic-name-"+uuid+".html"; // 这是生成的html文件名,如index.htm. RequestDispatcher rd = sc.getRequestDispatcher(url); final ByteArrayOutputStream os = new ByteArrayOutputStream(); final ServletOutputStream stream = new ServletOutputStream() { public void write(byte[] data, int offset, int length) { os.write(data, offset, length); } public void write(int b) throws IOException { os.write(b); } }; final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os)); HttpServletResponse rep = new HttpServletResponseWrapper(response) { public ServletOutputStream getOutputStream() { return stream; } public PrintWriter getWriter() { return pw; } }; rd.include(request, rep); pw.flush(); FileOutputStream fos = new FileOutputStream(name); // 把jsp输出的内容写到xxx.htm os.writeTo(fos); fos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return htmlName; }
以上是个方法,可以摘摘剪剪的放在自己的程序里。
但是要注意,request传值,一定要放在这个上面去做,否则得话,页面里将没有内容。反正我试的结果就是这样。
下面是伪静态。这块我也是从网上摘找的工具类,试了一下,很好使,很强大。
第一步,创建两个工具类。
代码如下,直接粘过去就可以用了。
public class Base64Coder { private static char[] map1 = new char[64]; static { int i = 0; for (char c = 'a'; c <= 'z'; c++) map1[i++] = c; for (char c = '0'; c <= '9'; c++) map1[i++] = c; for (char c = 'A'; c <= 'Z'; c++) map1[i++] = c; map1[i++] = '+'; map1[i++] = '/'; } private static byte[] map2 = new byte[128]; static { for (int i = 0; i < map2.length; i++) map2[i] = -1; for (int i = 0; i < 64; i++) map2[map1[i]] = (byte) i; } public static String encodeString(String s) { return new String(encode(s.getBytes())); } public static char[] encode(byte[] in) { return encode(in, in.length); } public static char[] encode(byte[] in, int iLen) { int oDataLen = (iLen * 4 + 2) / 3; // output length without padding int oLen = ((iLen + 2) / 3) * 4; // output length including padding char[] out = new char[oLen]; int ip = 0; int op = 0; while (ip < iLen) { int i0 = in[ip++] & 0xff; int i1 = ip < iLen ? in[ip++] & 0xff : 0; int i2 = ip < iLen ? in[ip++] & 0xff : 0; int o0 = i0 >>> 2; int o1 = ((i0 & 3) << 4) | (i1 >>> 4); int o2 = ((i1 & 0xf) << 2) | (i2 >>> 6); int o3 = i2 & 0x3F; out[op++] = map1[o0]; out[op++] = map1[o1]; out[op] = op < oDataLen ? map1[o2] : '_'; op++; out[op] = op < oDataLen ? map1[o3] : '_'; op++; } return out; } public static String decodeString(String s) { return new String(decode(s)); } public static byte[] decode(String s) { return decode(s.toCharArray()); } public static byte[] decode(char[] in) { int iLen = in.length; if (iLen % 4 != 0) throw new IllegalArgumentException( "Length of Base64 encoded input string is not a multiple of 4."); while (iLen > 0 && in[iLen - 1] == '_') iLen--; int oLen = (iLen * 3) / 4; byte[] out = new byte[oLen]; int ip = 0; int op = 0; while (ip < iLen) { int i0 = in[ip++]; int i1 = in[ip++]; int i2 = ip < iLen ? in[ip++] : 'A'; int i3 = ip < iLen ? in[ip++] : 'A'; if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127) throw new IllegalArgumentException( "Illegal character in Base64 encoded data."); int b0 = map2[i0]; int b1 = map2[i1]; int b2 = map2[i2]; int b3 = map2[i3]; if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0) throw new IllegalArgumentException( "Illegal character in Base64 encoded data."); int o0 = (b0 << 2) | (b1 >>> 4); int o1 = ((b1 & 0xf) << 4) | (b2 >>> 2); int o2 = ((b2 & 3) << 6) | b3; out[op++] = (byte) o0; if (op < oLen) out[op++] = (byte) o1; if (op < oLen) out[op++] = (byte) o2; } return out; } private Base64Coder() { } } ----------------------------------------------------------------------------------------------- import java.util.*; public class HtmlUtil { protected static int JSP=20091; protected static int ACTION=20092; protected static int HTML=20093; protected static int SEALED=404; protected static String propertyName;//项目名称以及 前面得 那段文件夹路径 protected static String actionName;//action的名称 protected static String operate;//action执行的方 或则 jsp页面的名称 protected static int type;//类型 protected static HashMap<String, String> items=new HashMap<String, String>(); /** * 把真实得url转换为html路径 (例:/Shopping/user.do?operate=doLogin&userName=xiaowu&password=19890104) */ public static synchronized String getHtmlUrl(String url){ //判断类型 type=getType(url); propertyName=getPropertyName(url); //如果是一个ACTION if(type==ACTION){ actionName=getActionName(url,true); operate=getFunctionName(url,true); items=getItems(url,true); } if(type==JSP){ actionName=getJspName(url,true); items=getItems(url,true); } //创建URL return createHtmlUrl(); } /** * 创建Html路径 * @return */ protected static String createHtmlUrl(){ StringBuffer newUrl=new StringBuffer(""); newUrl.append(actionName); newUrl.append("_"); if(operate!=null&&!operate.equals("")){ newUrl.append(operate); } newUrl.append("_"); newUrl.append(type); newUrl.append("_"); Set<String> keys=items.keySet(); for (Object key : keys) { newUrl.append(key+"_"+items.get(key)+"_"); } //对字符串进行编码 String coding=Base64Coder.encodeString(newUrl.toString()); if(propertyName!=null&&!propertyName.equals("")){ return propertyName+coding+".html"; } return coding+".html"; } /** * 把html路径转换为真实的路径 */ public static synchronized String getRealityUrl(String url){ //判断类型 type=getType(url); if(type==JSP||type==ACTION){ //路径为加密就直接返回 return url; } propertyName=getPropertyName(url); String newUrl=""; if(type==HTML){ try{ newUrl=url.substring(url.lastIndexOf("/")+1,url.length()-5); //对字符串进行解码 newUrl=Base64Coder.decodeString(newUrl); actionName=getActionName(newUrl, false); operate=getFunctionName(newUrl,false); items=getItems(newUrl,false); type=getUrlType(newUrl); }catch(Exception ee){ //如果是html页面强制改为jsp if(url.substring(url.length()-5).equalsIgnoreCase(".html")){ //newUrl被改写过 所有要重新取得 newUrl=url.substring(url.lastIndexOf("/")+1,url.length()-5); return newUrl+".jsp"; } //如果URL无法通过解码那么就直接返回 return url; } } return createRealityUrl(); } // /** // * 动态创建 // */ // public static synchronized String getHtmlUrl(String url,boolean b){ // if(b==true){ // if(url.indexOf("?")==-1){ // url+="?"; // url+="id"+System.currentTimeMillis()+"="+new Random().nextFloat(); // }else{ // url+="&id"+System.currentTimeMillis()+"="+new Random().nextFloat(); // } // } // return getHtmlUrl(url); // } /** * 还原真实路径 * @return */ protected static String createRealityUrl(){ StringBuffer newUrl=new StringBuffer(""); if(propertyName!=null&&!propertyName.equals("")){ newUrl.append(propertyName); } if(actionName!=null&&!actionName.equals("")){ if(type==ACTION){ if(!operate.equals("")){ newUrl.append(actionName+".do?operate="+operate); }else{ newUrl.append(actionName+".do"); } }else if(type==JSP){ newUrl.append(actionName+".jsp"); }else if(type==HTML){ newUrl.append(actionName+".html"); }else{ newUrl.append(actionName); } } Set<String> keys=items.keySet(); boolean isInterrogation=newUrl.toString().indexOf("?")!=-1?true:false; for (Object key : keys) { if(isInterrogation==false){ newUrl.append("?"); isInterrogation=true; }else{ newUrl.append("&"); } newUrl.append(key+"="+items.get(key)); } return newUrl.toString(); } // public static void main(String[] args) { // String strs[]={"/Shopping/user.do?operate=doLogin&userName=xiaowu&password=19890104", // "/Shopping/user.jsp?userName=xiaowu&password=19890104", // "user.do?operate=doLogin&userName=xiaowu&password=19890104", // "user.jsp?userName=xiaowu&password=19890104", // "/user.do?operate=doLogin&userName=xiaowu&password=19890104", // "/user.jsp?userName=xiaowu&password=19890104", // "user.do?operate=doLogin", // "/user.jsp", // "/Shopping/user.do", // "/Shopping/user.jsp", // "user.do", // "/user.do", // "user.jsp", // "/user.jsp", // "/Shopping/MyJsp.jsp"}; // for (int i = 0; i < strs.length; i++) { // System.err.println("原路径"+strs[i]); // String str=HtmlUtil.getHtmlUrl(strs[i]); // System.err.println("加密后"+str); // str=HtmlUtil.getRealityUrl(str); // System.err.println("还原后"+str); // System.err.println("-----------------------------------------"); // } // } /** * 返回类型 */ protected static int getUrlType(String url){ if(url.indexOf("__")!=-1){ return Integer.parseInt(getStr(url,1,"_")); } return Integer.parseInt(getStr(url,2,"_")); } /** * 返回项目名称 */ protected static String getPropertyName(String url){ if(url.indexOf("/")==-1){ return ""; } return url.substring(0,url.lastIndexOf("/")+1); } /** * 返回ACTION名称 */ protected static String getActionName(String url,boolean b){ if(b==false){ return getStr(url,0,"_"); } if(url.indexOf("/")==-1){ return url.substring(0,url.indexOf(".")); } return url.substring(url.lastIndexOf("/")+1,url.indexOf(".")); } /** * 返回JSP名称 */ protected static String getJspName(String url,boolean b){ if(url.indexOf("/")==-1){ return url.substring(0,url.indexOf(".")); } return url.substring(url.lastIndexOf("/")+1,url.indexOf(".")); } /** * 返回方法名称 */ protected static String getFunctionName(String url,boolean b){ if(b==false){ if(url.indexOf("__")!=-1){ return ""; } return getStr(url,1,"_"); } if(url.indexOf("?")==-1) return ""; url=url.substring(url.lastIndexOf("operate=")+8,url.length()); if(url.indexOf("&")==-1){ return url; } return url.substring(0,url.indexOf("&")); } /** * */ protected static String getStr(String str,int count,String condition){ java.util.StringTokenizer tok=new StringTokenizer(str,condition); int index=0; while(tok.hasMoreElements()){ String newStr=tok.nextElement().toString(); if(index==count){ return newStr; } index++; } return ""; } /** * 返回items */ protected static HashMap<String, String> getItems(String url,boolean b){ HashMap<String, String> items=new HashMap<String, String>(); if(b==false){ java.util.StringTokenizer tok=new StringTokenizer(url,"_"); int index=0; if(url.indexOf("__")!=-1){ index++; } while(tok.hasMoreElements()){ String newStr=tok.nextToken(); if(index>=3){ String key=newStr; String value=null; try { value=tok.nextToken(); } catch (Exception e) { value=""; } items.put(key, value); } index++; } return items; } url=url.substring(url.lastIndexOf("?")+1,url.length()); java.util.StringTokenizer tok=new StringTokenizer(url,"&"); while(tok.hasMoreElements()){ String str=tok.nextToken(); if(str.indexOf("operate=")==-1&&str.indexOf("=")!=-1){ StringTokenizer newTok=new StringTokenizer(str,"="); if(newTok.hasMoreElements()){ String key=newTok.nextToken(); newTok.hasMoreElements(); String value=null; try { value=newTok.nextToken(); if(value.equals("")){ value=null; } } catch (Exception e) { value=null; } if(key.equals("")){ key=null; } items.put(key, value); } } } return items; } /** * 判断类型 */ protected static int getType(String url){ if(url.toUpperCase().indexOf(".DO")!=-1){ return ACTION; }else if(url.toUpperCase().indexOf(".JSP")!=-1){ return JSP; }else if(url.toUpperCase().indexOf(".HTML")!=-1){ return HTML; }else{ return SEALED; } } } ------------------------------------------ 第二步,创建一个servlet。嗯,我的程序时用status做的,只要在web.xml里面添加一个servlet标签就可以了。如下: <servlet> <servlet-name>HtmlDecode</servlet-name> <servlet-class> com.clothes.util.statUtil.HtmlDecode ///////这是你的servlet的位置 </servlet-class> </servlet> <servlet-mapping> <servlet-name>HtmlDecode</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> ///这是让你的所有以*.html跳转都跑到这个servlet里面,当然,也可以改成别的。都可以的。只要在htmlUtil类里去修改一下就可以了。用起来很舒服的。 第三步,就是使用咯。很简单,如下: <A href="<%=HtmlUtil.getHtmlUrl("findProject.do?goodsid=123“)%>" >啦啦啦</a> 直接使用HtmlUtil里面的getHtmlUrl方法,他会在servlet编译的时候,将你要跳转的地址栏加密,同时在提交的时候,先跑到我们上面配置的哪个servlet里面,进行解密,然后跳转到你的.do或者其他的里面。挺好用的,不过一定要注意一点,就是那个goodsid这最好别加“_”,前面也最好别加。否则得话,就不灵了。嗯,这也是亲身经历。当然,这个传中文。。。我先试下! 嗯,不错,刚试了<a>提交和表单提交。结果是都可以的。如果用<a>提交出现乱码的话,就用我之前发的那个转乱码的工具类转一下就好了。可以支持中文 可以了。以上就这些,希望可以对大家有些帮助。 哎呀。。发现servlet忘了写进去了。现在加上,第二步的servlet: import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import util.*; public class HtmlDecode extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("GBK"); request.setCharacterEncoding("GBK"); //取出URL String url=request.getRequestURI(); //对URL进行解码 String newUrl=HtmlUtil.getRealityUrl(url); System.out.println(newUrl); newUrl=newUrl.replaceAll(request.getContextPath()+"/", ""); //跳转到解码后的页面 request.getRequestDispatcher(newUrl).forward(request, response); } }
OK。就是这些。
相关推荐
风光储直流微电网Simulink仿真模型:光伏发电、风力发电与混合储能系统的协同运作及并网逆变器VSR的研究,风光储直流微电网Simulink仿真模型:MPPT控制、混合储能系统、VSR并网逆变器的设计与实现,风光储、风光储并网直流微电网simulink仿真模型。 系统由光伏发电系统、风力发电系统、混合储能系统(可单独储能系统)、逆变器VSR?大电网构成。 光伏系统采用扰动观察法实现mppt控制,经过boost电路并入母线; 风机采用最佳叶尖速比实现mppt控制,风力发电系统中pmsg采用零d轴控制实现功率输出,通过三相电压型pwm变器整流并入母线; 混合储能由蓄电池和超级电容构成,通过双向DCDC变器并入母线,并采用低通滤波器实现功率分配,超级电容响应高频功率分量,蓄电池响应低频功率分量,有限抑制系统中功率波动,且符合储能的各自特性。 并网逆变器VSR采用PQ控制实现功率入网。 ,风光储; 直流微电网; simulink仿真模型; 光伏发电系统; 最佳叶尖速比控制; MPPT控制; Boost电路; 三相电压型PWM变换器;
以下是针对初学者的 **51单片机入门教程**,内容涵盖基础概念、开发环境搭建、编程实践及常见应用示例,帮助你快速上手。
【Python毕设】根据你提供的课程代码,自动排出可行课表,适用于西工大选课_pgj
【毕业设计】[零食商贩]-基于vue全家桶+koa2+sequelize+mysql搭建的移动商城应用
电动汽车充电背景下的微电网谐波抑制策略与风力发电系统仿真研究,电动汽车充电微电网的谐波抑制策略与风力发电系统仿真研究,基于电动汽车充电的微电网谐波抑制策略研究,包括电动汽车充电负 载模型,风电模型,光伏发现系统,储能系统,以及谐波处理模块 风力发电系统仿真 ,电动汽车充电负载模型; 风电模型; 光伏发现系统; 储能系统; 谐波处理模块; 风力发电系统仿真,电动汽车充电微电网的谐波抑制策略研究:整合负载模型、风电模型与光伏储能系统
Vscode部署本地Deepseek的continue插件windows版本
内容概要:本文详细介绍了滤波器的两个关键参数——截止频率(F0)和品质因素(Q),并探讨了不同类型的滤波器(包括低通、高通、带通和带阻滤波器)的设计方法及其特性。文章首先明确了F0和Q的基本概念及其在滤波器性能中的作用,接着通过数学推导和图形展示的方式,解释了不同Q值对滤波器频率响应的影响。文中特别指出,通过调整Q值可以控制滤波器的峰谷效果和滚降速度,进而优化系统的滤波性能。此外,还讨论了不同类型滤波器的具体应用场景,如低通滤波器适用于消除高频噪声,高通滤波器用于去除直流分量和低频干扰,而带通滤波器和带阻滤波器分别用于选取特定频段信号和排除不需要的频段。最后,通过对具体案例的解析,帮助读者更好地理解和应用相关理论。 适合人群:电子工程及相关领域的技术人员、研究人员以及高校学生,特别是那些需要深入了解滤波器设计原理的人群。 使用场景及目标:适用于从事模拟电路设计的专业人士,尤其是希望掌握滤波器设计细节和技术的应用场合。目标是让读者能够灵活运用Q值和F0来优化滤波器设计,提升系统的信噪比和选择性,确保信号的纯净性和完整性。
内容概要:本文主要讲述了利用QUARTUSⅡ进行电子设计自动化的具体步骤和实例操作,详细介绍了如何利用EDA技术在QUARTUSⅡ环境中设计并模拟下降沿D触发器的工作过程,重点探讨了系统规格设计、功能描述、设计处理、器件编译和测试四个步骤及相关的设计验证流程,如功能仿真、逻辑综合及时序仿真等内容,并通过具体的操作指南展示了电路设计的实际操作方法。此外还强调了QUARTUSⅡ作为一款集成了多种功能的综合平台的优势及其对于提高工作效率的重要性。 适用人群:电子工程、自动化等相关专业的学生或者工程师,尤其适用于初次接触EDA技术和QuartusⅡ的用户。 使用场景及目标:旨在帮助用户理解和掌握使用QUARTUSⅡ这一先进的EDA工具软件进行从概念设计到最后成品制作整个电路设计过程的方法和技巧。目标是在实际工作中能够熟练运用QUARTUSⅡ完成各类复杂电子系统的高效设计。 其他说明:文中通过具体的案例让读者更直观理解EDA设计理念和技术特点的同时也为进一步探索EDA领域的前沿课题打下了良好基础。此外它还提到了未来可能的发展方向,比如EDA工具的功能增强趋势等。
Simulink建模下的光储系统与IEEE33节点配电网的协同并网运行:光照强度变化下的储能系统优化策略与输出性能分析,Simulink模型下的光伏微网系统:光储协同,实现380v电压等级下的恒定功率并网与平抑波动,Simulink含光伏的IEEE33节点配电网模型 微网,光储系统并网运行 光照强度发生改变时,储能可以有效配合光伏进行恒定功率并网,平抑波动,实现削峰填谷。 总的输出有功为270kw(图23) 无功为0 检验可以并网到电压等级为380v的电网上 逆变侧输出电压电流稳定(图4) ,Simulink; 含光伏; 配电网模型; 微网; 光储系统; 储能配合; 恒定功率并网; 电压等级; 逆变侧输出。,Simulink光伏微网模型:光储协同并网运行,实现功率稳定输出
基于Andres ELeon新法的双馈风机次同步振荡抑制策略:附加阻尼控制(SDC)的实践与应用,双馈风机次同步振荡的抑制策略研究:基于转子侧附加阻尼控制(SDC)的应用与效能分析,双馈风机次同步振荡抑制策略(一) 含 基于转子侧附加阻尼控制(SDC)的双馈风机次同步振荡抑制,不懂就问, 附加阻尼控制 (SDC)被添加到 RSC 内部控制器的q轴输出中。 这种方法是由Andres ELeon在2016年提出的。 该方法由增益、超前滞后补偿器和带通滤波器组成。 采用实测的有功功率作为输入信号。 有关更多信息,你可以阅读 Andres ELeon 的lunwen。 附lunwen ,关键词:双馈风机、次同步振荡、抑制策略;转子侧附加阻尼控制(SDC);RSC内部控制器;Andres ELeon;增益;超前滞后补偿器;带通滤波器;实测有功功率。,双馈风机次同步振荡抑制技术:基于SDC与RSCq轴控制的策略研究
springboot疫情防控期间某村外出务工人员信息管理系统--
高效光伏并网发电系统MATLAB Simulink仿真设计与MPPT技术应用及PI调节闭环控制,光伏并网发电系统MATLAB Simulink仿真设计:涵盖电池、BOOST电路、逆变电路及MPPT技术效率提升,光伏并网发电系统MATLAB Simulink仿真设计。 该仿真包括电池,BOOST升压电路,单相全桥逆变电路,电压电流双闭环控制部分;应用MPPT技术,提高光伏发电的利用效率。 采用PI调节方式进行闭环控制,SPWM调制,采用定步长扰动观测法,对最大功率点进行跟踪,可以很好的提高发电效率和实现并网要求。 ,光伏并网发电系统; MATLAB Simulink仿真设计; 电池; BOOST升压电路; 单相全桥逆变电路; 电压电流双闭环控制; MPPT技术; PI调节方式; SPWM调制; 定步长扰动观测法。,光伏并网发电系统Simulink仿真设计:高效MPPT与PI调节控制策略
PFC 6.0高效循环加载系统:支持半正弦、半余弦及多级变荷载功能,PFC 6.0循环加载代码:支持半正弦、半余弦及多级变荷载的强大功能,PFC6.0循环加载代码,支持半正弦,半余弦函数加载,中间变荷载等。 多级加载 ,PFC6.0; 循环加载代码; 半正弦/半余弦函数加载; 中间变荷载; 多级加载,PFC6.0多级半正弦半余弦循环加载系统
某站1K的校园跑腿小程序 多校园版二手市场校园圈子失物招领 食堂/快递代拿代买跑腿 多校版本,多模块,适合跑腿,外卖,表白,二手,快递等校园服务 需要自己准备好后台的服务器,已认证的小程序,备案的域名!
【Python毕设】根据你提供的课程代码,自动排出可行课表,适用于西工大选课
COMSOL锂枝晶模型:五合一的相场、浓度场与电场模拟研究,涵盖单枝晶定向生长、多枝晶生长及无序生长等多元现象的探索,COMSOL锂枝晶模型深度解析:五合一技术揭示单枝晶至雪花枝晶的生长机制与物理场影响,comsol锂枝晶模型 五合一 单枝晶定向生长、多枝晶定向生长、多枝晶随机生长、无序生长随机形核以及雪花枝晶,包含相场、浓度场和电场三种物理场(雪花枝晶除外),其中单枝晶定向生长另外包含对应的参考文献。 ,comsol锂枝晶模型; 五合一模型; 单枝晶定向生长; 多枝晶定向生长; 多枝晶随机生长; 无序生长随机形核; 雪花枝晶; 相场、浓度场、电场物理场; 参考文献,COMSOL锂枝晶模型:多场景定向生长与相场电场分析
嵌入式大学生 点阵代码
那个有delphi12 tedgebrowser 使用的dll
基于DQN算法的微网储能优化调度与能量管理:深度强化学习的应用与实践,基于DQN算法的微网储能优化调度与能量管理:深度强化学习的应用与实践,基于DQN算法的微网储能运行优化与能量管理 关键词:微网 优化调度 储能优化 深度强化学习 DQN 编程语言:python 参考文献:《Explainable AI Deep Reinforcement Learning Agents for Residential Demand Side Cost Savings in Smart Grids》 内容简介: 受深层强化学习(RL)最新进展的激励,我们开发了一个RL代理来管理家庭中存储设备的操作,旨在最大限度地节省需求侧的成本。 所提出的技术是数据驱动的,并且RL代理从头开始学习如何在可变费率结构下有效地使用能量存储设备,即收缩“黑匣子”的概念,其中代理所学的技术被忽略。 我们解释了RL-agent的学习过程,以及基于存储设备容量的策略。 ,微网; 优化调度; 储能优化; 深度强化学习; DQN; 家庭存储设备; 需求侧成本节省; 智能电网; RL代理; 能量存储设备。,基于DQN算法的微网储
内容概要:该文档为FM17580的原理图设计文件,重点介绍了这款非接触式IC卡读写芯片的电路设计细节。文档详细列出了各个元器件及其连接方式、引脚分配及具体值设定。特别值得注意的是,为了确保性能和可靠性,在PCB布局时强调了GND线需要尽量以最短路径连回FM175xx芯片的TVSS引脚附近,并且靠近电源输入端(TVDD)。同时明确了FM17580只兼容SPI通讯协议,其他如IIC或UART选项则不在支持范围内。此外还提供了关于降低能耗的选择——移除不必要的ADC检测电路,这对于一些特定应用场景非常有用。 适合人群:具备硬件开发经验和RFID/NFC领域基础知识的技术人员或研究人员。 使用场景及目标:适用于需要详细了解FM17580内部结构和技术特性的项目团队;旨在帮助工程师们快速上手搭建实验平台并测试FM17580的功能特性。主要目的是为实际应用开发提供技术支持和参考。 其他说明:文档最后附带了一些附加信息,包括设计师名字、公司名称以及审查流程的相关内容,但具体内容并未公开。此外还提到该文档是针对FM17580评估板(即FM17580Demo)的设计图纸。文中出现多次类似表格可能是不同版本之间的对比或者记录修改历史的部分内容。