- 浏览: 676560 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
yigeisme:
你好,不已.html和.jsp和.jpg结尾的正则表达式怎么写 ...
深入入门正则表达式(java) - 2 - 基本实例 -
su1216:
多谢指正yigeisme 写道1-12(小时,月份)正则:^( ...
深入入门正则表达式(java) - 2 - 基本实例 -
yigeisme:
1-12(小时,月份)正则:^(1[012]|\d)$应该改成 ...
深入入门正则表达式(java) - 2 - 基本实例 -
heikefangxianceshi:
小三将军 写道楼主,我想问下你给的Real.tar.gz是什么 ...
android手机root后的安全问题 (一) -
heikefangxianceshi:
这个程序运行的前提是手机root,但你的手机怎么root的呢? ...
android手机root后的安全问题 (一)
android ActionBar与Menu - 1 - api demos 学习
android ActionBar与Menu - 2 - email中ActionBar分析
这里以Email为例,简单分析一下ActionBar在实际中的应用
上面是在模拟器上登录原生Email的截图
这里说一下所谓的原生:
原生不是指大家买来手机之后没有修改过任何内容,软件本身的样子。也不是指google的各种亲儿子本身的样子,因为无论是前者还是后者,最起码都是要经过优化和修复bug的,不是亲儿子那就很有可能进行了整容,让你看不出原来的样子
这里的原生是用google发布的源码编译出来的apk,安装到手机或模拟器上面大家就可以看到
我们主要看看Email如何使用ActionBar和menu的
页面可以发现,Email既有AcionBar又有menu,menu被放在了底部,先看ActionBar
Email的主Activity是EmailActivity,我就不画类图了,因为总是画不明白,怕误导大家,所以就用类似堆栈log的形式来介绍
@Override protected void onCreate(Bundle savedInstanceState) { …… initUIController(); …… } private void initUIController() { mUIController = UiUtilities.useTwoPane(this) ? new UIControllerTwoPane(this) : new UIControllerOnePane(this); }
这里初始化了一个UIController,其中的关系是这样的
UIControllerBase为父类,是一个抽象类,下面有两个实现类分别为UIControllerOnePane和UIControllerTwoPane(实在理解不了为什么这么命名。。。)
UIControllerOnePane为手机UI实现,UIControllerTwoPane为平板UI实现,我们这里只考虑UIControllerOnePane
public UIControllerBase(EmailActivity activity) { mActivity = activity; mFragmentManager = activity.getFragmentManager(); mRefreshManager = RefreshManager.getInstance(mActivity); mActionBarController = createActionBarController(activity); if (DEBUG_FRAGMENTS) { FragmentManager.enableDebugLogging(true); } }
这里包含了一个ActionBarController,createActionBarController是抽象方法,下面是UIControllerOnePane的实现
@Override protected ActionBarController createActionBarController(Activity activity) { // For now, we just reuse the same action bar controller used for 2-pane. // We may change it later. return new ActionBarController(activity, activity.getLoaderManager(), activity.getActionBar(), new ActionBarControllerCallback()); }
最关键的就是ActionBarController了,它包含ActionBar所有内容
public ActionBarController(Context context, LoaderManager loaderManager, ActionBar actionBar, Callback callback) { mContext = context; mLoaderManager = loaderManager; mActionBar = actionBar; mCallback = callback; mDelayedOperations = new DelayedOperations(Utility.getMainThreadHandler()); mAllFoldersLabel = mContext.getResources().getString( R.string.action_bar_mailbox_list_title); mAccountsSelectorAdapter = new AccountSelectorAdapter(mContext); // Configure action bar. mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM); // Prepare the custom view mActionBar.setCustomView(R.layout.action_bar_custom_view); mActionBarCustomView = (ViewGroup) mActionBar.getCustomView(); // Account spinner mAccountSpinnerContainer = UiUtilities.getView(mActionBarCustomView, R.id.account_spinner_container); mAccountSpinner = UiUtilities.getView(mActionBarCustomView, R.id.account_spinner); mAccountSpinnerDefaultBackground = mAccountSpinner.getBackground(); mAccountSpinnerLine1View = UiUtilities.getView(mActionBarCustomView, R.id.spinner_line_1); mAccountSpinnerLine2View = UiUtilities.getView(mActionBarCustomView, R.id.spinner_line_2); mAccountSpinnerCountView = UiUtilities.getView(mActionBarCustomView, R.id.spinner_count); // Account dropdown mAccountDropdown = new AccountDropdownPopup(mContext); mAccountDropdown.setAdapter(mAccountsSelectorAdapter); mAccountSpinner.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mAccountsSelectorAdapter.getCount() > 0) { mAccountDropdown.show(); } } }); }
从上面可以看出,ActionBar实际上也不复杂,只是设置了显示选项和一个CustomView,复杂的内容几乎全部集中在这个CustomView上了
// Configure action bar. mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM); // Prepare the custom view mActionBar.setCustomView(R.layout.action_bar_custom_view); mActionBarCustomView = (ViewGroup) mActionBar.getCustomView();
当点击CustomView时候会有弹出下拉框,mAccountDropdown就发挥作用了
private class AccountDropdownPopup extends ListPopupWindow
设置了mAccountSpinner.setOnClickListener,调用到mAccountDropdownshow()
mAccountDropdownshow显示由mAccountsSelectorAdapter提供
public class AccountSelectorAdapter extends CursorAdapter
其中的数据由CursorWithExtras com.android.email.activity.ActionBarController.mCursor提供
mCursor只在一个地方进行刷新,那就是加载账户邮箱信息的时候
/** * Load account/mailbox info, and account/recent mailbox list. */ private void loadAccountMailboxInfo(final long accountId, final long mailboxId) { mLoaderManager.restartLoader(LOADER_ID_ACCOUNT_LIST, null, new LoaderCallbacks<Cursor>() { @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { return AccountSelectorAdapter.createLoader(mContext, accountId, mailboxId); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { mCursor = (AccountSelectorAdapter.CursorWithExtras) data; updateTitle(); } @Override public void onLoaderReset(Loader<Cursor> loader) { mCursor = null; updateTitle(); } }); }
我们可以发现,加载完毕之后Cursor更新了,然后updateTitle,不用去看函数也能猜出这里是更新ActionBar
为了刷新列表,调用了下面语句
mAccountsSelectorAdapter.swapCursor(mCursor);
updateTitle就不再进行分析了,里面几乎都是刷新那个CustomView的内容
下面看看底部的菜单,之前的学习中,api demos里并没有演示这种情况,我们用hierarchyviewer查看,发现页面上下都是一个ActionBarContainer的容器
上面的ActionBar我们已经知道它是怎么来的了,那下面的呢?原因在于manifest的配置
<activity android:name=".activity.EmailActivity" android:uiOptions="splitActionBarWhenNarrow" > </activity>
splitActionBarWhenNarrow使得ActionBar被拆分成上下两个部分
splitActionBarWhenNarrow 用于显示Activity在窄屏设备(如竖屏手机)上运行时的所有menu项。当然,如果手机有menu键的时候,当menu项过多而显示不下的时候按Menu键即可
这时迷题已解,没有什么神秘的地方了,看看menu配置,一目了然
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/compose" android:orderInCategory="100" android:alphabeticShortcut="c" android:title="@string/compose_action" android:icon="@drawable/ic_menu_compose_normal_holo_light" android:showAsAction="ifRoom" /> <item android:id="@+id/search" android:orderInCategory="200" android:alphabeticShortcut="s" android:title="@string/search_action" android:icon="@drawable/ic_menu_search_holo_light" android:showAsAction="ifRoom" /> <item android:id="@+id/show_all_mailboxes" android:orderInCategory="300" android:alphabeticShortcut="c" android:title="@string/mailbox_list_account_selector_show_all_folders" android:icon="@drawable/ic_menu_move_to_holo_light" android:showAsAction="ifRoom" /> <item android:id="@+id/refresh" android:orderInCategory="400" android:alphabeticShortcut="r" android:title="@string/refresh_action" android:icon="@drawable/ic_menu_refresh_holo_light" android:showAsAction="ifRoom" /> <!-- Note the order; we want to show them to the right of delete/move --> <item android:id="@+id/newer" android:orderInCategory="1500" android:icon="@drawable/menu_item_newer" android:showAsAction="always" android:visible="false" /> <item android:id="@+id/older" android:orderInCategory="1600" android:icon="@drawable/menu_item_older" android:showAsAction="always" android:visible="false" /> <item android:id="@+id/mailbox_settings" android:orderInCategory="2000" android:title="@string/mailbox_settings_action" android:icon="@android:drawable/ic_menu_preferences" /> <item android:id="@+id/account_settings" android:orderInCategory="3000" android:title="@string/settings_action" android:icon="@android:drawable/ic_menu_preferences" /> </menu>
当我们横屏的时候,menu就会跑到上面去了
下面是带回退导航的
他能使用户回到上一个页面(并不是上一个activity,回到上一个activity可以通过按back键实现)
mActionBar.setDisplayOptions(showUp ? ActionBar.DISPLAY_HOME_AS_UP : 0, ActionBar.DISPLAY_HOME_AS_UP);
在之前的refreshInernal中已经设置过了
当我们打开或新建一个邮件的时候,页面会跳转到新的activity
public class MessageCompose extends Activity implements OnClickListener, OnFocusChangeListener, DeleteMessageConfirmationDialog.Callback, InsertQuickResponseDialog.Callback
这里我们看到了,页面依然有回退导航,点击之后能回退到上一个页面,当然,不再是当前的activity了
那么它是如何做到的,代码如下
@Override public boolean onOptionsItemSelected(MenuItem item) { if (handleCommand(item.getItemId())) { return true; } return super.onOptionsItemSelected(item); } private boolean handleCommand(int viewId) { switch (viewId) { case android.R.id.home: onBack(false /* systemKey */); return true; …… } /** * Handle a tap to the system back key, or the "app up" button in the action bar. * @param systemKey whether or not the system key was pressed */ private void onBack(boolean systemKey) { finish(); if (isOpenedFromWithinApp()) { // If opened from within the app, we just close it. return; } if (isOpenedFromWidget() || !systemKey) { // Otherwise, need to open the main screen for the appropriate account. // Note that mAccount should always be set by the time the action bar is set up. startActivity(Welcome.createOpenAccountInboxIntent(this, mAccount.mId)); } }
点击回退导航时,触发的menu是android.R.id.home
剩下的事情就好办了,这里交给了onBack来处理
至此Email应用的ActionBar和menu就基本分析完了,如果有不准确的地方还希望大家指正
最后附上别人的几篇翻译,内容很基础,也比api demos多,值得一看
Android 用户界面---操作栏(Action Bar 一) :基本操作
Android 用户界面---操作栏(Action Bar 二) :分离式ActionBar与回退导航
Android 用户界面---操作栏(Action Bar 三) :ActionView
Android 用户界面---操作栏(Action Bar 四) :ActionProvider与Tab
Android 用户界面---操作栏(Action Bar 五) :主要是关于样式
转贴请保留以下链接
本人blog地址
发表评论
-
android 第三方app截图
2017-08-17 15:18 1169将View生成相应的图片 ... -
android截图事件监听
2017-07-20 18:37 2007android系统没有对用户截屏行为提供回调的api,所以我 ... -
android widget(桌面小部件)实现
2017-06-30 13:02 2088本文介绍如何自己实现一个widget以及各种注意事项。 ... -
acra简析
2016-07-31 23:54 0版本4.9.1 acra是用来在 ... -
android版本差异
2016-07-28 14:42 0这里只列出部分开发相关内容 notification ... -
android系统提供的常用命令行工具
2016-06-21 13:17 5151本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链 ... -
标示与掩码
2015-10-21 23:00 0掩码(英语:Mask) ... -
通过蓝牙调试(穿戴设备app) - 开发文档翻译
2015-09-30 11:43 2671由于本人英文能力实在 ... -
打包穿戴设备app - 开发文档翻译
2015-09-29 17:19 1923由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
弧形进度条(动画版)
2015-07-23 17:00 5959本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接 ... -
使用canvas与Paint在View中居中绘制文字
2015-07-15 23:03 9033本博客只要没有注明 ... -
android 关于提高第三方app的service优先级
2014-06-23 23:14 3216本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链 ... -
android <application> 开发文档翻译
2014-05-24 23:47 5173由于本人英文能力实 ... -
android中各种log的抓取
2013-12-23 13:15 01.logcat的使用 2.内存快照的抓取 ... -
android多语言项目中字符串的移植(bash工具)
2013-11-11 13:31 2536有时候我们会遇到这样一种情况: 一些字符串资源要从原始项 ... -
android 高效显示Bitmap - 开发文档翻译
2013-09-13 17:59 2656由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 在你的UI中显示Bitmap - 开发文档翻译
2013-09-06 19:33 6658由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 管理Bitmap内存 - 开发文档翻译
2013-08-27 15:39 4198由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 缓存Bitmap - 开发文档翻译
2013-08-25 13:01 3227由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有 ... -
android 在UI线程之外处理Bitmap - 开发文档翻译
2013-08-12 13:30 3447由于本人英文能力实 ...
相关推荐
在"android ActionBar与Menu - 2 - email中ActionBar分析"这个主题中,我们将深入探讨如何在Email应用中使用ActionBar及其相关功能。 首先,Email应用在Android设备上的界面设计通常包括ActionBar和Menu。ActionBar...
内容概要:本文深入探讨了AMESim仿真平台在电动汽车(EV)热泵空调系统设计与优化中的应用。首先介绍了AMESim的基础建模方法,如构建制冷循环模型中的压缩机、蒸发器和冷凝器等组件,并详细解释了各部件的工作原理及其参数设定。接着重点阐述了EV热泵空调系统的特殊之处,即不仅能够制冷还可以在冬季提供高效的制热功能,这对于提高电动汽车在寒冷条件下的续航里程和乘坐舒适性非常重要。文中给出了几个具体的案例,包括通过改变压缩机运行频率来进行性能优化,以及针对低温环境下热泵系统的控制策略,如四通阀切换逻辑、电子膨胀阀开度调节等。此外,还讨论了热泵系统与其他子系统(如电池温控)之间的协同工作方式,强调了系统集成的重要性。最后分享了一些实用的经验技巧,例如如何避免仿真过程中可能出现的问题,怎样评估系统的整体性能等。 适合人群:从事汽车工程、暖通空调(HVAC)领域的研究人员和技术人员,特别是关注新能源汽车热管理系统的专业人士。 使用场景及目标:适用于希望深入了解电动汽车热泵空调系统特性的工程师们,旨在帮助他们掌握基于AMESim进行系统建模、仿真分析的方法论,以便更好地指导实际产品研发。 阅读建议:由于涉及到较多的专业术语和技术细节,建议读者具备一定的机械工程背景知识,同时配合官方文档或其他参考资料一起研读,以加深理解。
dtcwt 双树复小波的matlab工具箱。内容来源于网络分享,如有侵权请联系我删除。
基于hadoop的系统
内容概要:本文探讨了永磁同步电机(PMSM)控制系统中两种先进的控制策略:电流预测控制和广义预测控制(GPC),特别是在速度环中结合扩展状态观测器(ESO)的应用。文章首先介绍了广义预测控制的基本原理及其在速度环中的实现方式,强调了其通过滚动优化对未来系统输出进行预测的能力。接着讨论了电流环中采用的双矢量改进预测控制算法,该算法通过优化两个电压矢量的选择提高了电流控制的精度和动态响应速度。此外,文章还提供了具体的代码示例和技术细节,帮助读者更好地理解和实现这些控制策略。最后,推荐了几篇相关文献供进一步学习。 适合人群:从事电机控制领域的研究人员、工程师以及对预测控制感兴趣的高校师生。 使用场景及目标:适用于需要提高永磁同步电机控制系统性能的研究项目或工业应用场景,旨在实现更精确、高效的电机控制,增强系统的鲁棒性和稳定性。 其他说明:文中提到的方法已在实验室环境中进行了验证,并取得了显著的效果,如减小了突加负载时的速度跌落幅度,降低了电流谐波失真度等。同时,作者分享了一些实用的调试技巧和注意事项,有助于加速实际项目的开发进程。
期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目),个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作业Python实现基于图神经网络的信任评估项目源代码+使用说明(高分项目)期末作
内容概要:本文详细介绍了开源6轴机械臂控制器SmallRobotArm AR3的功能特点和技术细节。首先,文章展示了AR3可以直接通过板载按钮进行关节和坐标运动控制,无需连接电脑,提供了便捷的操作体验。其次,深入探讨了其核心算法,包括正逆解算法、运动模式切换逻辑以及平滑处理机制。此外,还介绍了自动标定程序、G代码支持和扩展功能如手势控制等特性。最后,强调了AR3的高扩展性和易用性,使其成为机器人爱好者和专业开发者的理想选择。 适合人群:对机器人技术和机械臂感兴趣的初学者、中级开发者及研究人员。 使用场景及目标:适用于教育、科研、DIY项目等领域,旨在帮助用户快速掌握机械臂控制原理并应用于实际任务中。 其他说明:文中提供的代码片段有助于理解和实现相关功能,而详细的硬件介绍则为动手能力强的用户提供改装灵感。
内容概要:本文档提供了10道蓝桥杯Python模拟题及其详细解答过程,涵盖字符串处理、数字运算、算法设计等多个方面。题目包括数字反转、字母转换、数字分段和、质数判断、字符串统计、数独验证、最大子数组和、括号匹配、斐波那契数列和文件统计。每道题目不仅给出了详细的解题思路和分析,还附有完整的Python源代码。通过这些题目,读者可以系统地提升编程能力和算法思维,掌握常见的编程技巧和方法。 适合人群:适合有一定编程基础的Python学习者,特别是准备参加蓝桥杯或其他编程竞赛的学生和爱好者。 使用场景及目标:①作为蓝桥杯赛前训练资料,帮助参赛者熟悉比赛题型和解题思路;②作为编程练习题集,巩固Python语言的基础知识和常用算法;③通过实际编程练习,提高解决实际问题的能力和编程水平。 阅读建议:建议读者先尝试独立完成每道题目,然后再参考提供的解题思路和代码,对比自己的解法,找出差距并加以改进。同时,注意理解每道题目背后的算法思想和编程技巧,以便举一反三,灵活应用。
web_6_login.rar
脚本插件 1.Ai转PS矢量图层 2.分割线段 3.图形变换 4.圆形填充 5.文字块排版 6.多页PDF文档置入 将jsx文件复制到\Abobe Illustrator XX\Presets(在部分AI软件中可能显示为“预设”)\zh_CN\脚本 文件夹下,重新启动ai,就可以在"文件"-"脚本"下看见ai脚本菜单,运行即可。
内容概要:本文详细介绍了滑模观测器和PLL在STM32F1平台上的C代码实现。滑模观测器用于估计系统内部状态,尤其适用于电机控制领域;PLL则用于确保输出信号相位与输入信号相位保持一致。文中展示了两种滑模观测器的实现方法:一种采用符号函数进行硬切换,另一种采用饱和函数进行软化处理。此外,文章还强调了使用TI的IQmath库进行定点计算加速,以提高运算效率并减少资源占用。通过具体的代码示例和调试技巧,作者分享了如何在STM32F1平台上实现高效稳定的滑模观测器和PLL系统。 适合人群:嵌入式系统开发者、电机控制系统工程师、熟悉C语言编程的技术人员。 使用场景及目标:① 实现高效的滑模观测器和PLL系统,应用于电机控制和其他实时性要求较高的场景;② 学习如何使用IQmath库进行定点计算加速,优化嵌入式系统的性能;③ 掌握调试技巧,确保系统稳定运行。 其他说明:文章提供了详细的代码示例和调试经验,帮助读者更好地理解和实现滑模观测器和PLL系统。同时,文中提到的一些注意事项和常见问题解决方案也非常实用。
内容概要:本文探讨了利用纳什谈判理论和交替方向乘子法(ADMM)解决共享储能电站中多用户之间的利益分配问题。文中详细介绍了将复杂的利益分配问题转化为数学模型的方法,以及如何通过ADMM算法实现分布式优化,确保各参与方都能接受的最优解。同时,文章还展示了实际应用案例,证明了该方法的有效性和优越性。 适合人群:从事电力系统优化、储能技术研究的专业人士,以及对分布式优化算法感兴趣的科研人员。 使用场景及目标:适用于多个用户共同使用储能设施的场景,旨在通过科学合理的算法设计,实现储能系统的高效运行和利益的最大化分配。 其他说明:文章不仅提供了详细的算法实现步骤,还包括了一些实用的代码片段和实验结果分析,帮助读者更好地理解和应用相关技术。此外,文中提到的一些反直觉现象也为进一步的研究提供了思路。
08011车TC1车ER(A、B网)通讯故障分析报告 .docx
2025年机器人+人工智能工业应用研究报告.pdf
内容概要:本文深入探讨了麻雀搜索算法(SSA)的一种改进版本——融合差分进化和多策略的麻雀搜索算法(DEH_SSA)。文章首先介绍了反向学习初始化种群、非线性因子改进发现者策略、改进警觉性策略、融合差分算法以及精英扰动策略五大创新点。接着详细展示了这些策略的具体实现方法,如反向学习初始化通过计算反向解使初始种群分布更合理,非线性因子改进发现者策略通过动态调整搜索步长提高搜索效率等。此外,文中提供了23个基准测试函数的实验结果,证明了DEH_SSA相比传统SSA在收敛速度和最优解质量上的显著优势。最后给出了详细的调参指南,帮助初学者更好地理解和应用该算法。 适合人群:对智能优化算法感兴趣的研究人员和技术开发者,尤其是有一定编程基础并对群体智能算法有初步了解的人士。 使用场景及目标:适用于需要解决复杂优化问题的场景,如工程优化、机器学习超参数调优等领域。目标是提供一种高效的优化工具,帮助用户更快更精确地找到全局最优解。 其他说明:文章不仅提供了理论解释,还有丰富的代码实例,便于读者动手实践。同时,附带的调参指南有助于读者根据具体问题调整算法参数,获得更好的优化效果。
内容概要:本文详细介绍了西门子WinCC报表系统的多版本通用模板及其优化技术。涵盖了日报表、月报表、年报表、自由报表及班次报表等多种类型的报表模板,提供了详细的代码示例,包括VBS脚本、SQL查询语句、C脚本等。文中强调了性能优化措施,如索引建立、参数化查询、存储过程的应用等,并附有配套的视频教程帮助理解和实践。此外,还讨论了班次报表的灵活性设计、数据分页技术、错误处理机制等方面的内容。 适合人群:已经具备WinCC脚本基础和SQL语言基础的技术人员,尤其是从事工业自动化领域的工程师。 使用场景及目标:适用于需要频繁生成各类生产报表的企业,旨在提高数据查询效率,满足不同客户的定制化需求,同时确保系统的稳定性和兼容性。通过学习本文提供的模板和技术,用户能够更好地应对复杂的生产数据管理和报表生成任务。 其他说明:文中提到的所有技术手段均经过实际测试验证,可在多个版本的WinCC环境中稳定运行。配套的视频教程进一步降低了学习门槛,使用户能够更快地上手操作。
内容概要:本文详细介绍了ANPC并网逆变器的闭环仿真建模过程,涵盖了直流电压源的稳定接入、SPWM调制、电流闭环控制以及锁相环的应用。作者通过具体的代码示例和技术细节,展示了如何利用SPWM生成稳定的正弦波,通过锁相环确保电流和电压的相位一致,并采用前馈解耦提高电流控制的精度。同时,文中还讨论了一些常见的仿真问题及其解决方案,如死区效应、调制比限制和电流环PI参数的优化。 适合人群:电力电子工程师、控制系统设计师、从事逆变器研究的技术人员。 使用场景及目标:适用于希望深入了解ANPC并网逆变器控制策略的研究人员和工程师,旨在帮助他们掌握SPWM调制、电流闭环控制和锁相环的设计与实现。 其他说明:文章提供了丰富的代码片段和实践经验,有助于读者快速理解和应用相关技术。此外,文中提到的一些常见问题和解决方案也为实际项目提供了宝贵的参考。
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;