- 浏览: 1475013 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
前一篇 自己实现了http长连接 , 很繁琐,后来看到pushlet 好评如潮 ,就用pushlet 重写了一遍,由于 pushlet ajax api 以及 servlet 使用 get 方法来实现 ,并且对于中文有的问题 ,故 将其改为 post 方式,并对于中文两次编码 。
修改了 ajax api , ajax-pushlet-client.js ,改为 post 方式提交数据 ,并 在网络处状况时 通知 回调函数
修改 pushlet servlet , (nl\justobjects\pushlet\servlet\Pushlet.java) 使其支持 post 方式,原来只是支持post xml
首先 ext chat window 的建立: 用了 pushlet 代码就简洁多了 ,我基本上是把pushlet当作一个数据库使用的
使用代码 : (代码简要分析见后)
/* 利用pushlet 实现了 用户登录及时通知,退出及时通知,发送消息及时通知,用户单点登陆功能 */ Ext.onReady(function () { var chatWin = new Ext.Window({ width: 800, height: 500, title: 'Ext聊天窗口测试版', renderTo: document.body, border: false, hidden: true, layout: 'border', closeAction: 'hide', collapsible: true, constrain: true, iconCls: 'my-userCommentIcon', maximizable: true, items: [{ region: 'west', id: 'chat-west-panel', title: '用户面板', split: true, width: 170, minSize: 100, maxSize: 200, collapsible: true, constrain: true, //margins:'0 0 0 5', layout: 'accordion', layoutConfig: { animate: true }, items: [{ items: new Ext.tree.TreePanel({ id: 'im-tree', //rootVisible: false, lines: false, border: false, dataUrl: 'chat/getUserFirst.jsp', singleExpand: true, selModel: new Ext.tree.MultiSelectionModel(), root: new Ext.tree.AsyncTreeNode({ text: 'Sunrise', id: 'SunriseIm', //nodeType: 'async', singleClickExpand: true, expandable: true, expanded: true }) }), title: '在线人员', //layout:'form', border: false, autoScroll: true, iconCls: 'im_list', tools: [{ id: 'refresh', qtip: '刷新在线信息', // hidden:true, handler: function (event, toolEl, panel) { imRootNode.reload(); //reloadUser(); } }, { id: 'close', qtip: '清除选定', // hidden:true, handler: function (event, toolEl, panel) { Ext.getCmp('im-tree').getSelectionModel().clearSelections(); } }] }, { title: 'Settings', html: '<p>Some settings in here.</p>', border: false, iconCls: 'settings' }] }, { region: 'center', layout: 'border', items: [{ region: 'center', title: '历史记录 ', id: 'history_panel', autoScroll: true, iconCls: 'my-userCommentIcon', tools: [{ id: 'refresh', qtip: '注意:如果长时间没有收到对方回应,试一下', // hidden:true, handler: function (event, toolEl, panel) { // refresh logic } }] }, { region: 'south', title: '聊天啦', layout: 'fit', iconCls: 'user_edit', autoScroll: true, height: 200, collapsible: true, //margins:'0 0 0 0', items: { xtype: 'form', baseCls: 'x-plain', autoHeight: true, autoWidth: true, bodyStyle: 'padding:10 10px 0;', defaults: { anchor: '95%' }, items: [{ xtype: 'htmleditor', height: 130, id: 'htmleditor', hideLabel: true }] }, bbar: [{ text: '发送请输入Ctrl-Enter', handler: function () { sendmsg(); }, iconCls: 'my-sendingIcon' }, '-', { text: '清除', handler: function () { Ext.getCmp("htmleditor").reset(); } }] }] }] }); var tree = Ext.getCmp('im-tree'); var imRootNode = tree.getNodeById('SunriseIm'); tree.getLoader().on("loadexception", function (this1, node, response) { window.net_status = '_0'; if (!Ext.Msg.isVisible()) Ext.Msg.wait('网络出问题了,正在重新连接中....');; setTimeout(function () { imRootNode.reload(); }, 5000); }); tree.getLoader().on("load", function (this1, node, response) { Ext.Msg.hide(); if (window.net_status) { if (window.net_status == '_0') { window.net_status = '_1'; PL.state = 2; init_my_chat(); } } }); var query = location.search.substring(1); //获取查询串 var sessionId = SESSION; //Ext.urlDecode(query).sid; // 发送消息 function onMsg(content, sender, receivers) { var msg = '<div style="margin:20px 5px 10px 5px"> <img src="js/ext/user_comment.png"/> {0} <b>{1}</b> 对 <b>{2}</b> 说:<br></div>'; var chat_record = new Ext.Element(document.createElement('div')); chat_record.addClass('chat_record'); chat_record.update('<span style="margin:0px 5px 0px 5px">' + decodeURIComponent(content) + '</span>'); Ext.getCmp("history_panel").body.appendChild(chat_record); var canvas = new Ext.Element(document.createElement('canvas')); var size_chat = chat_record.getSize(); if (!Ext.isIE && size_chat.height < 100) { chat_record.setHeight(100); size_chat.height = 100; } canvas.setSize(size_chat.width - 30, size_chat.height); //canvas.setSize(size_chat.width-,40); chat_record.appendChild(canvas); if (window['G_vmlCanvasManager']) { G_vmlCanvasManager.initElement(canvas.dom); } google_dialog_draw_m(chat_record.dom.lastChild, '#FFB100'); var mc = String.format(((msg)), new Date().toLocaleString(), sender, receivers); Ext.getCmp("history_panel").body.insertHtml('beforeEnd', mc); Ext.getCmp("history_panel").body.scroll('b', 10000, { duration: 0.1 }); } function sendmsg() { Ext.getCmp("htmleditor").syncValue(); var content_value = Ext.getCmp("htmleditor").getValue(); if (content_value.trim() == '') { alert("您没有输入消息文本内容!"); Ext.getCmp("htmleditor").focus(true); return; } var receivers_values = []; var tree = Ext.getCmp('im-tree'); var receivers = tree.getSelectionModel().getSelectedNodes(); for (var i = 0; i < receivers.length; ++i) { receivers_values.push(receivers[i].attributes.loginId); } if (receivers_values.length == 0) { alert("您没有选择接收者!"); tree.focus(); return; } if (receivers_values.length > 1) { if (!confirm("您选择了多个接收者,是否继续?")) { return; } } for (var i = 0; i < receivers_values.length; i++) { p_publish('/CHAT/' + receivers_values[i], 'action', 'CHAT', 'msg', encodeURIComponent(encodeURIComponent(content_value)), 'sender', encodeURIComponent(CURRENTUSERID), 'receivers', encodeURIComponent(receivers_values.join(','))); } onMsg(encodeURIComponent(content_value), CURRENTUSERID, receivers_values); Ext.getCmp("htmleditor").reset(); } //event for source editing mode new Ext.KeyMap(Ext.getCmp("htmleditor").getEl(), [{ key: 13, ctrl: true, stopEvent: true, fn: sendmsg }]); //event for normal mode Ext.getCmp("htmleditor").onEditorEvent = function (e) { this.updateToolbar(); var keyCode = (document.layers) ? keyStroke.which : e.keyCode; if (keyCode == 13 && e.ctrlKey) sendmsg(); //it'a my handler } /* 对pushlet各种事件的处理 */ window.onError = function (event) { imRootNode.reload(); //PL.state = 2; //setTimeout(init_my_chat , 1000); /* var p_errortype = event.get('p_errortype'); //alert(p_errortype); if(p_errortype) { if(p_errortype == 'network') { PL.state = 2; setTimeout(p_join , 1000); //p_join(); //alert(PL.state); } } // alert(event.get('p_event') +' - error'); */ } window.onData = function (event) { var action = event.get('action'); //alert(action); if (action == 'CHAT') { var msg = event.get('msg'); var sender = event.get('sender'); var receivers = event.get('receivers').split(','); //if(sender == CURRENTUSERID) return; onMsg(msg, sender, receivers); if (!chatWin.isVisible()) { self.focus(); Ext.example.msg('叮当', '您有新的短消息 <a href="javascript:window.startChatWin()">查看</a>'); } } else if (action == 'USER') { var loginId = event.get('loginId'); var loginName = decodeURIComponent(event.get('loginName')); var c = imRootNode.childNodes; var i = 0; for (i = 0; i < c.length; i++) { if (c[i].attributes.loginId == loginId) break; } if (i == c.length) { imRootNode.appendChild({ loginId: loginId, leaf: true, iconCls: 'user', loginName: loginName, text: loginId + "(" + loginName + ")" }); } } else if (action == 'EXPIRE') { // Stop pushlet session p_leave(); // Give some time to send the leave request to server setTimeout(function () { alert('有人从其它地方登陆了,你被退出!'); window.location = 'index.jsp'; }, 1000); } else if (action == 'USERDEL') { var loginId = event.get('loginId'); var c = imRootNode.findChild('loginId', loginId); imRootNode.removeChild(c); } }; if (!Ext.isIE) { chatWin.collapse(); } function init_my_chat() { /* 监控各种事件源 */ p_join(); //监控发给自己的消息 p_listen('/CHAT/' + encodeURIComponent(CURRENTUSERID)); //监控自己是否在其他地方的登陆 p_listen('/EXPIREDSESSIONID/' + encodeURIComponent(SESSION)); //监控系统总的人数 p_listen('/USER'); //通知我来了 p_publish('/USER', 'action', 'USER', 'loginId', encodeURIComponent(CURRENTUSERID), 'loginName', encodeURIComponent((encodeURIComponent(CURRENTUSERNAME)))); } init_my_chat(); //失效的session id var expiredSessionIdStr = Ext.urlDecode(window.location.search.substring(1)); setTimeout(function () { //通知失效的sessionid窗口 if (expiredSessionIdStr.expiredSessionId) { p_publish('/EXPIREDSESSIONID/' + encodeURIComponent(expiredSessionIdStr.expiredSessionId), 'action', 'EXPIRE', 'expiredSessionId', encodeURIComponent(expiredSessionIdStr.expiredSessionId)); } }, 1000); window.startChatWin = function () { chatWin.show(); chatWin.center(); //Ext.getCmp('htmleditor').focus(); }; //心跳函数 五分钟更新一次,整体user数据,防止不按退出关闭浏览器 var chatTask = { run: function () { imRootNode.reload(); }, //scope:this, interval: 10 * 60 * 1000 //1 second }; time_pro = new Ext.util.TaskRunner(); time_pro.start(chatTask); function google_dialog_draw_m(canvas, color) { var context = canvas.getContext("2d"); var width = canvas.width; var height2 = canvas.height - 4.5; var height = canvas.height; context.beginPath(); context.strokeStyle = color; context.moveTo(0.5, 0.5 + 5); context.arc(5.5, 5.5, 5, -Math.PI, -Math.PI / 2, false); context.lineTo(width - 0.5 - 5, 0.5); context.arc(width - 0.5 - 5, 5.5, 5, -Math.PI / 2, 0, false); context.lineTo(width - 0.5, height2 - 5); context.arc(width - 0.5 - 5, height2 - 5, 5, 0, Math.PI / 2, false); context.lineTo(width / 2 + 3, height2); context.lineTo(width / 2, height); context.lineTo(width / 2 - 3, height2); context.lineTo(0.5 + 5, height2); context.arc(0.5 + 5, height2 - 5, 5, Math.PI / 2, Math.PI, false); context.lineTo(0.5, 0.5 + 5); context.stroke(); } });
简单上述代码分析
还是很多人问我问题,我就简单解释一下上面代码,本来没打算做教程,只是自己记录一下的呀
报什么错啊,java那个替换好原来的java文件,在pushlet根目录要重新ant编译成一个jar,放在lib下面
ajax.js 放在头部
Ext.onReady 后进行其他处理
首先指明自己要监听的队列
init_my_chat 这个函数
发送消息就是往一个队列发送一个信号:
例如
p_publish('/CHAT/' + receivers_values[i], 'action', 'CHAT', 'msg', encodeURIComponent(encodeURIComponent(content_value)),
'sender', encodeURIComponent(CURRENTUSERID), 'receivers', encodeURIComponent(receivers_values.join(',')));
接收消息就是
对各种信号处理
:
window.onData = function(event)
代码不难的,要细致一点,出错也要告诉我具体的信息才行,用firebug 调试,java 要配置 log4j
- pushlet.zip (162 KB)
- 下载次数: 1870
评论
00:55:39,019 WARN pushlet:93 - S-0:0:0:0:0:0:0:1[1]: [Subscriber] not alive for at least: 45000ms, leaving...
00:55:39,020 INFO pushlet:79 - SessionManager: Thu Apr 04 00:55:39 CST 2013 1 at 0:0:0:0:0:0:0:1 removed
00:59:10,636 INFO pushlet:79 - SessionManager: Thu Apr 04 00:59:10 CST 2013 AgingTimerTask: Session expired: 0:0:0:0:0:0:0:1[5]
00:59:10,636 INFO pushlet:79 - SessionManager: Thu Apr 04 00:59:10 CST 2013 5 at 0:0:0:0:0:0:0:1 removed
好像没用的,一定要自己客户端encodeURIComponent进行编码
pushlet传递中文有问题,页面什么都不显示!我的解决方法是后台编码,前台解码!详细见我博客!
http://cuisuqiang.iteye.com/多指教
好像没用的,一定要自己客户端encodeURIComponent进行编码
pushlet传递中文有问题,页面什么都不显示!我的解决方法是后台编码,前台解码!详细见我博客!
好像没用的,一定要自己客户端encodeURIComponent进行编码
一般不上qq,可以直接站内信
我都忘了,你再仔细看下,似乎代码直接用arguments引用其他参数的吧,不需要形参
恩 是arguments引用其他参数。我现在看了好多帖子,但是好像也不知道怎么去写一个pushlet的例子,我下载了源码 在其中仔细看chat的那个示例,里面有一个ajax的js文件,还有一个js-pushlet-client的js文件,为什么会有两个。就是觉得东看看,西看看,就迷糊了,想问问你当时是如何看的,如何着手写第一个pushlet的示例,我现在不知道模仿哪个,麻烦了
给你两个链接仔细看下吧:
https://www.ibm.com/developerworks/cn/web/wa-lo-comet/
http://www.javaworld.com/jw-03-2000/jw-03-pushlet.html
谢谢。。。 再有不懂得再来请教
我都忘了,你再仔细看下,似乎代码直接用arguments引用其他参数的吧,不需要形参
恩 是arguments引用其他参数。我现在看了好多帖子,但是好像也不知道怎么去写一个pushlet的例子,我下载了源码 在其中仔细看chat的那个示例,里面有一个ajax的js文件,还有一个js-pushlet-client的js文件,为什么会有两个。就是觉得东看看,西看看,就迷糊了,想问问你当时是如何看的,如何着手写第一个pushlet的示例,我现在不知道模仿哪个,麻烦了
给你两个链接仔细看下吧:
https://www.ibm.com/developerworks/cn/web/wa-lo-comet/
http://www.javaworld.com/jw-03-2000/jw-03-pushlet.html
我都忘了,你再仔细看下,似乎代码直接用arguments引用其他参数的吧,不需要形参
恩 是arguments引用其他参数。我现在看了好多帖子,但是好像也不知道怎么去写一个pushlet的例子,我下载了源码 在其中仔细看chat的那个示例,里面有一个ajax的js文件,还有一个js-pushlet-client的js文件,为什么会有两个。就是觉得东看看,西看看,就迷糊了,想问问你当时是如何看的,如何着手写第一个pushlet的示例,我现在不知道模仿哪个,麻烦了
我都忘了,你再仔细看下,似乎代码直接用arguments引用其他参数的吧,不需要形参
当时看它的源码好像写死了(编)解码方式,不依赖与服务器配置的话就是用encodeURIComponent 编码发送消息
服务器端程序再解码
这只是权且之计,效率不是很好
问题解决了,谢谢...
当时看它的源码好像写死了(编)解码方式,不依赖与服务器配置的话就是用encodeURIComponent 编码发送消息
服务器端程序再解码
这只是权且之计,效率不是很好
xiaoyu966 写道
楼主,我怎么弄不不能让他跑起来。。。主要刚学没多久,毕业设计就要做带数据库的即时聊天。难度太大了。可以给我一份完整的代码吗?我想参考一下,跪谢!!主要时间实在是不够了,我得新学struts2,spring,ibatis,还有ext。。还有comet。公司给定的题目。每天只有2小时可以学习。有种想跳楼的感觉了。。。项目的一部分,后台分解太麻烦,我的建议:关于pushlet你可以看看 http://www.matrix.org.cn/resource/article/2007-01-16/bcc2c490-a502-11db-8440-755941c7293d.html后台请努力先看看简单的jsp即可 ,ext 方面要多看自带的example
好的,谢谢你!
楼主,我怎么弄不不能让他跑起来。。。主要刚学没多久,毕业设计就要做带数据库的即时聊天。难度太大了。可以给我一份完整的代码吗?
我想参考一下,跪谢!!主要时间实在是不够了,我得新学struts2,spring,ibatis,还有ext。。还有comet。公司给定的题目。每天只有2小时可以学习。有种想跳楼的感觉了。。。
项目的一部分,后台分解太麻烦,我的建议:
关于pushlet你可以看看
http://www.matrix.org.cn/resource/article/2007-01-16/bcc2c490-a502-11db-8440-755941c7293d.html
后台请努力先看看简单的jsp即可 ,
ext 方面要多看自带的example
发表评论
-
Extjs 实践细节备忘 -3
2009-04-12 20:26 24391. dragdrop 继承层次 dd - ... -
Extjs 实践细节备忘 -2
2009-04-12 05:43 27591. grid 列宽问题 可以指定 每列的宽度数值 ... -
Extjs 实践细节备忘 -1
2009-04-11 01:47 2719在使用 extjs 开发 OAOP 应用中 ,除了API文档外 ... -
长字串换行问题
2009-03-01 23:10 5806很久没用过 ,textarea ... -
Extjs portal 应用初探
2009-02-24 23:09 6016近期在研究拖放的实现 ,看了看 Extjs 的 portal ... -
Extjs 模块化动态加载js实践
2009-01-09 18:12 23536前一段转载了一篇 透明加载外部 javascript ... -
Extjs 聊天窗口 -续2 - http长连接的实现
2008-12-16 00:55 13352认为长连接就是有个http请求被服务器阻塞了 ,这样的话浏览 ... -
Extjs CRUD 模板
2008-12-12 00:52 7838也算是一个总结吧,备忘,总结了一个增删改查的例子,以后要达到的 ... -
Ext 聊天窗口的实现 - 续
2008-12-02 15:13 6730<filter> <fil ... -
Ext 树操作
2008-11-10 23:21 4531后台 树 节点 定义 menu_info { ... -
Ext 一个聊天窗口的设计
2008-11-10 00:26 37831.关键是要 弹性设计,自动适应浏览器 部件要: ... -
Ext.data.Store 与 GridFilters
2008-11-03 16:12 5378Store 每次 reload 会记着上次的参数,比如 pa ... -
Ext 实现 文件上传 进度显示
2008-10-24 18:15 5234利用了 ahxu-commons-fileuploadex-b ... -
Ext official doc - class-event-observer
2008-10-23 18:20 1455....ppt -
Ext 多文件上传面板扩展
2008-10-23 16:53 8394扩展了 Ext.Panel ,加入文件框列表 ,并控制删 ... -
Ext Grid 表头显示问题
2008-09-27 23:51 3357出现问题了,当 Grid div 放在 table 布局下的话 ... -
JSON marsh && unmarsh
2008-09-23 00:46 1999Ext 端用 //Encodes an Objec ... -
[extjs] formpanel 标准提交问题
2008-09-19 02:29 3349formpanel 的 标准提交 有 bug? var ta ... -
ComboBox 传值问题
2008-09-19 00:07 5310field -> textfield->trigg ... -
Ext 2 概述
2008-09-18 01:11 2306欢迎来到Ext 2.0。 在下列各章节中,你将会接触到E ...
相关推荐
标题中的“Extjs 聊天窗口 -续2 - http长连接的实现”指的是一个关于使用Extjs构建聊天窗口,并且实现HTTP长连接的技术分享。Extjs是一个流行的JavaScript框架,常用于开发富客户端应用程序,而HTTP长连接是解决传统...
1. **用户界面**:利用ExtJS的组件库,可以构建出美观且易于使用的聊天界面,包括聊天窗口、用户列表、消息历史记录等。 2. **实时推送**:Pushlet负责后台的数据推送,一旦有新的聊天消息,服务器会立即通过已建立...
碳交易机制下考虑需求响应的综合能源系统优化运行模型及有效性分析,碳交易机制下需求响应的综合能源系统优化运行策略探索:低碳减排的实践路径,碳交易机制下考虑需求响应的综合能源系统优化运行 综合能源系统是实现“双碳”目标的有效途径,为进一步挖掘其需求侧可调节潜力对碳减排的作用,提出了一种碳交易机制下考虑需求响应的综合能源系统优化运行模型。 首先,根据负荷响应特性将需求响应分为价格型和替代型 2 类,分别建立了基于价格弹性矩阵的价格型需求响应模型,及考虑用能侧电能和热能相互转的替代型需求响应模型; 其次,采用基准线法为系统无偿分配碳排放配额,并考虑燃气轮机和燃气锅炉的实际碳排放量,构建一种面向综合能源系统的碳交易机制; 最后,以购能成本、碳交易成本及运维成本之和最小为目标函数,建立综合能源系统低碳优化运行模型,并通过 4 类典型场景对所提模型的有效性进行了验证。 通过对需求响应灵敏度、燃气轮机热分配比例和不同碳交易价格下系统的运行状态分析发现,合理分配价格型和替代型需求响应及燃气轮机产热比例有利于提高系统运行经济性,制定合理的碳交易价格可以实现系统经济性和低碳性协同。 关键词: 碳交易机制;
MATLAB演示程序:涡旋拉盖尔-高斯光束的横模特性与拓扑荷数及径向指数的影响分析,涡旋拉盖尔高斯光束MATLAB演示程序,涡旋拉盖尔高斯光束横模MATLAB演示程序 拓扑荷数l : 决定了光束的轨道角动量。 具有不同拓扑荷数的涡旋拉盖尔 - 高斯光束携带不同大小的轨道角动量。 影响光束的相位分布。 当l≠0时,光束具有螺旋相位结构,即相位随着角向坐标以的周期变化。 可以通过光学方法进行调控和测量,在量子信息处理、光学镊子等领域有重要应用。 径向指数p : 表示径向方向上的节点数。 p值越大,光束在径向方向上的能量分布变化越复杂,会出现更多的节点和暗区。 与拓扑荷数一起决定了光束的整体形状和强度分布。 ,涡旋拉盖尔-高斯光束; 拓扑荷数l; 径向指数p; MATLAB演示程序; 螺旋相位结构; 角向坐标变化; 轨道角动量。,MATLAB演示涡旋拉盖尔-高斯光束横模:拓扑荷数与径向指数的影响
PFC5.0算例代码解析:含矿物岩石材料,PFC5.0代码解析:探究由三种矿物构成的岩石与类岩石材料在GBM条件下的单轴压缩2D模拟算例,助力学习与技能提升,PFC5.0代码,含三种矿物组成的岩石或者类岩石材料,GBM,单轴压缩2d,算例代码仅供学习以及提升 ,关键词:PFC5.0代码;三种矿物组成;岩石或类岩石材料;GBM;单轴压缩2d;算例代码;学习;提升; 关键词:PFC5.0; 矿物组成; 岩石/类岩石; GBM; 单轴压缩; 算例学习; 提升;,PFC5.0模拟:含三种矿物岩石材料单轴压缩算例
Matlab三维A*算法详解:Astar三维路径规划及自定义地图、障碍物与代函数设定指南,Matlab三维A星算法路径规划工具箱,matlab三维A*算法 Astar三维路径规划 超详细注释 可自定义地图 自定义障碍物栅格数量和颜色 路径颜色 修改代价函数 预设5种常见评价指标 可 ,matlab; A*算法; 三维路径规划; 详细注释; 自定义地图; 自定义障碍物; 栅格数量和颜色; 路径颜色; 代价函数; 评价指标。,Matlab三维A*算法:超详细注释,自定义地图与障碍物路径规划
win32汇编环境,对话框中使用树形视图示例三
**基于SVPWM与死区补偿的PMSM dq轴电感离线辨识方法:高频注入法与电流极性分析**,SVPWM死区补偿技术下的PMSM电感离线辨识方法研究——基于电流极性与高频注入法的高效识别策略,SVPWM+死区补偿(基于电流极性)+高频注入法辨识PMSM的dq轴电感(离线辨识) 1.模型的中的电机,为采用自建的电机模型 2.适用于spmsm和ipmsm, 3.基于两相静止坐标轴电压注入,可通过设置合理的电压幅值和频率,在静止状态下准确辨识电感(更电机后,由于电机额定电压与转速的不同,可能需要调整原有的高频注入参数以获取满意的辨识效果)(不适用在线辨识) 4.死区补偿,是基于电流矢量极性判断 5.可进行有、无死区补偿下的辨识效果对比(资料中包含多个模型,为笔者当初在有无死区补偿,不同设置条件下的进行参数辨识效果对比,以及模型中包含的一些注释,或可供参考) 6.如果模型运行提示Ts未定义,可在命令行窗口输入Ts=0.0001,以解决该报错 7.模型与参考的期刊lunwen一一对应,可互相印证,其建模方式和思想,适合小白入门学习(不建议初学者无参考lunwen的模型) ,SVPWM; 死区补偿
关于电容电流反馈在有源阻尼谐振抑制及SVPWM策略中的运用及其结合单电流环与中点电位平衡控制的综合研究(参考《某领域文献》《另一些领域的研究》等),电容电流反馈SVPWM控制,电容电流反馈有源阻尼谐振抑制+SVPWM 含: [1]有源阻尼谐振抑制+SVPWM [2]单电流环控制 [3]中点电位平衡控制 提供相关参考文献 ,有源阻尼谐振抑制; SVPPM; 电容电流反馈; 谐振抑制; 中点电位平衡控制; 文献暂无。,电容电流反馈结合SVPWM与有源阻尼谐振抑制的研究与实现
易福门RFID:高效控制标准块,多重调用易管理,轻松修改编号与硬件标识符,RFID控制标准块多重调用便捷设,易福门RFID控制标准块,可以多重调用,只需要更改编号和硬件标识符。 ,易福门RFID;控制标准块;多重调用;编号;硬件标识符,易福门RFID标准控制块:多调高效,只需更改编号和硬件标识
TypeScript 基础语法,本人亲自整理的资料
基于博途西门子PLC的多种液体混合控制系统设计与实现:一份包含全流程的电子程序资料,基于博途西门子PLC的多种液体混合控制系统设计与实现:一份包含全流程的电子程序资料,基于plc多种液体混合控制系统设计 博途 西门子plc 本为电子程序资料 一、包含内容: ①西门子PLC程序+HMI仿真工程 (博途V14或以上) 一份; ②配套有IO点表+PLC接线图+主电路图+控制流程图 (CAD源文件可编辑); ,基于plc多种液体混合控制系统设计; 博途V14; 西门子plc; 混合控制; 控制系统设计; 程序仿真; IO点表; PLC接线图; 主电路图; 控制流程图。,基于博途V14的西门子PLC多种液体混合控制系统设计资料
寻找热泵最佳压力的优化算法 输入Cop和高压值,以找到最大化Cop的最佳高压 Optimization algorithm to find optimal pressure of heat pump Inputs of Cop and high pressure values to find optimal high pressure that maxes out COP
三相变压器空载合闸励磁涌流仿真研究:特点分析与观察,变压器空载合闸:三相励磁涌流仿真研究及特性分析,【1】变压器空载合闸时励磁涌流的仿真 仿真目的:分析三相变压器空载合闸过程中,观察励磁涌流的特点 仿真结果:励磁涌流的特点和分析过程可详细咨询。 ,励磁涌流;变压器空载合闸;仿真目的;分析特点;仿真结果。,变压器空载合闸仿真:励磁涌流分析
孪生模型环境安装及其训练方法
更多毕业设计https://cv2022.blog.csdn.net/article/details/124463185
315MHz与433MHz无线遥控接收解码Keil源程序及AD格式电路图详解,315MHz和433MHz无线遥控接收解码源程序,附带Keil源程序和AD格式电路图,315 433MHZ无线遥控接收解码源程序 Keil源程序 含AD格式电路图 ,315MHz无线遥控接收; 433MHz无线解码源程序; Keil源程序; AD格式电路图,基于Keil的315/433MHz无线遥控解码源程序解析及AD格式电路图详解
MATLAB滚动轴承故障诊断程序:采用西楚凯斯大学数据,基于变分模态分解(VMD)算法与包络谱分析的故障诊断比较实现,MATLAB滚动轴承故障诊断程序:采用西楚凯斯大学数据,基于变分模态分解(VMD)算法与包络谱分析的故障诊断比较实现,MATLAB滚动轴承故障诊断程序:采用西楚凯斯大学数据,首先通过变分模态分解(VMD)算法处理,而后分别通过包络谱分析实现故障诊断 ps.通过尖峰对应的频率与计算出的故障频率比较,实现故障诊断 ,核心关键词:MATLAB; 滚动轴承故障诊断; 西楚凯斯大学数据; 变分模态分解(VMD)算法; 包络谱分析; 故障频率比较。,MATLAB基于VMD算法的滚动轴承故障诊断程序:西楚凯斯大学数据包络谱分析
个人ii c的一个说明的资料
更多毕业设计https://cv2022.blog.csdn.net/article/details/124463185