- 浏览: 224820 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
dysking:
SWT 和 JFace -
wangyuhfut:
东西不少啊。学习中。。。
一个比较好、中文说明的emacs配置文件 1 -
pacocai:
呵呵!学习,学习~~~不过要说编辑器的话个人更喜欢用VIM,比 ...
一个比较好、中文说明的emacs配置文件 1 -
zhf1zhf2:
这两百多个记起来也不容易啊
英国人是这样背的! -
regex:
试了两次,都是乱码,版本是23.1.1,看来不适合
汉化 Emacs 菜单
模块:
模块声明 多个声明定义
多个声明定义
多个声明定义:
单个声明定义
单个声明定义 多个声明定义
单个声明定义:
属性指示符
导入声明
枚举声明
类声明
接口声明
聚集声明
单个声明
构造函数
析构函数
不变量
单元测试
静态构造函数
静态析构函数
Debug规范
Version规范
Mixin声明
;
模块同源文件是一一对应的。模块名就是去掉路径和扩展名的文件名。
模块自动为它的内容提供一个名字空间。模块跟类有一点相像,不同之处是:
• 每个模块只有一个实例,并且它是静态分配的。
• 模块没有虚函数表。
• 模块不能继承,它们没有父模块,等等。
• 每个文件只有一个模块。• 模块的符号可以导入。
• 模块总是在全局作用域内编译,并且不受周围的特征或其它修饰符影响。
多个模块可以组织成一个结构,叫做“包(packages)”。
模块提供了以下几种担保:
• 模块导入的顺序并不会对语义产生什么影响。
• 一个模块的语义不会被那些导入它的模块所影响。
• 如果一个模块 C 导入了模块 A 和 B,那么任何对 B 的修改都不会隐式地更改在模
块 C 里的跟 A 相独立的代码。
2.1 模块声明
“模块声明”指定了模块的名称和它所属的包。如果不指定,模块名将设定为去掉路径和扩
展名的文件名。
模块声明:
module 模块名 ;
模块名:
标识符
模块名 .标识符
最右面的“标识符”是模块所在的“包”。包在源文件路径中对应于目录名。
如果出现的话,“模块声明”按照语法位于源文件的开头,并且每个源文件只能有一个。
样例:
module c.stdio; // 这是模块 stdio,它位于 c 包中
按照惯例,包和模块名都为 小写。这是因为 包 和 模块名称 同操作系统中的目录名和文件名 一一对应,而许多文件系统不区分大小写。把所有的包和模块名称小写将减少在不同文件系统之间 迁移 项目时的问题。
2 导入声明
与文本的包含文件不同,D 通过使用“导入声明”直接导入符号:
导入声明:
import 导入列表 ;
static import 导入列表 ;
导入列表:
导入
导入绑定
导入 , 导入列表
导入:
模块名
模块别名标识符 = 模块名
导入绑定:
导入 :导入绑定列表
导入绑定列表:
导入绑定
导入绑定 , 导入绑定列表
导入绑定:
标识符
标识符 = 标识符
ModuleAliasIdentifier:
Identifier 2.014
有好几种形式的“导入声明”,从一般的到有细密纹理的(fine-grained)导入。
在“导入声明”里的声明顺序并不重要。
模块名(位于“导入声明”中)必须使用它们所处的那个包的名称来完整修饰。 它们就不
会被认为是相对于那个导入它们的模块。
3 基本导入
最简单的导入形式就是只做列出要被导入的模块:
import std.stdio; // 导入模块 stdio(自 std 包里)
import foo, bar; // 导入杠杆?? foo 和 bar
void main()
{
writefln("hello!\n"); // 调用 std.stdio.writefln
}
基本导入工作原理 就是:首先,在当前名字空间里搜索名字。如果没有找到,那么就到所有导入的模块里去查找。如果在这些导入模块中唯一找到一个,则使用它。
如果在多个导入模块里找到,则就出现错误。
module A;
void foo();
void bar();
module B;
void foo();
void bar();
module C;
import A;
void foo();
void test()
{ foo(); // C.foo() 被调用,它在搜索导入模块之前被找到
bar(); // A.bar() 被调用,因为搜索了导入模块
}
module D;
import A;
import B;
void test()
{ foo(); // 错误,是 A.foo() 还是 B.foo() 呢?
A.foo(); // 正确,调用 A.foo()
B.foo(); // 正确,调用 B.foo()
}
module E;
import A;
import B;
alias B.foo foo;
void test()
{ foo(); // 调用 B.foo()
A.foo(); // 调用 A.foo()
B.foo(); // 调用 B.foo()
}
4 公共导入
默认情况下,导入是“private(私有的)”。即表示,如果 A 导入模块 B,同时 B 又导入模块C,则 C 的名字是不会被搜索的。
一个导入可以特别地声明为“public(公共的)”,这时它会处理成这样:对于带有“导入声明”的模块,它的任何导入模块也会导入那些公共导入的模块。
module A;
void foo() { }
module B;
void bar() { }
module C;
import A;
public import B;
...
foo(); // 调用 A.foo()
bar(); // 调用 B.bar()
module D;
import C;
...
foo(); // 错误,foo() 未定义
bar(); // 正确,调用 B.bar()
5 静态导入
基本导入对于相对没有几个模块和导入的程序很有效。如果存在大量模块导入,则在各种不
同的导入模块里,名字 冲突 就会出现。
防止此种情况发生的一种方式就是使用“静态导入(static imports)”。静态导入要求我们使用带 完整修饰 的名称来 引用 模块名。
static import std.stdio;
void main()
{
writefln("hello!"); // 错误,writefln 未定义
std.stdio.writefln("hello!"); // 正确,writefln 被完全限定
}
6 更名的导入
可以为某个导入给出本地名称;通过这个本地名称,所有对该模块符号的引用都必须进行限
定(be qualified with):
import io = std.stdio;
void main()
{
io.writefln("hello!"); // 正确,调用 std.stdio.writefln
std.stdio.writefln("hello!"); // 错误,std 未定义可能已经覆盖了 std.stdio 名称
writefln("hello!"); // 错误,writefln 未定义
}
更名的导入在处理很长的导入名时很方便。
7 选择性导入
特定的符号可以 特别 地从一个模块被导入,并被绑定到当前名字空间里。
import std.stdio : writefln, foo = writef;
void main()
{
std.stdio.writefln("hello!"); // 错误,std 未定义
writefln("hello!"); // 正确,writefln 被绑定到当前名字空间
writef("world"); // 错误,writefln 未定义
foo("world"); // 正确,调用 std.stdio.writef()
fwritefln(stdout, "abc"); // 错误,writefln 未定义
}
static 不能跟选择性导入一起使用。
8 更名 的且带 选择性 的导入
更名的且带选择性的导入被组合的情形:
import io = std.stdio : foo = writefln;
void main()
{
writefln("bar"); // 错误,writefln 未定义
std.stdio.foo("bar"); // 错误,foo 被绑定到当前名字空间
std.stdio.writefln("bar"); // 错误,std 未定义
foo("bar"); // 错误,foo 被绑定到当前名字空间,
// FQN 不需要
io.writefln("bar"); // 正确,io=std.stdio 将在当前名字空间里的名称 io
// 绑定来引用整个模块
io.foo("bar"); // 错误,foo 被绑定到当前名字空间,
// 而 foo 不是 io 的成员
9 模块作用域运算符
有些时候,有必要重写通常的词法作用域规则以访问被局部名称 掩盖 的名称。可以用 全局作用域 运算符‘.’ 达到这个目的,全局运算符位于标志符之前:
int x;
int foo(int x)
{
if (y)
return x; // 返回的是 foo.x,而非全局的 x
else
return .x; // 返回全局的 x}
前导的‘.’意味着在 模块作用域 级别 查找名称。
10 静态构造 和 析构
静态构造函数 是用来在 main() 之前 运行 的 初始化模块或类的代码。静态析构函数是在 main() 返回 之后 执行的代码,通常用来 释放 系统资源。
在一个模块里可以有 多个 静态构造函数 和 静态析构函数。静态构造函数的是以词法顺序运行的,而静态析构函数 则是以词法 相反 的顺序运行。
10.1 静态构造 的顺序
静态初始化的顺序 隐式 地由模块内的 import 声明的 顺序 决定。每个模块都会在它所依赖的模块 之后 调用自己的静态构造函数。
除了这条规则以外,模块静态构造函数的执行顺序是不定的。
导入声明中的 循环(循环依赖) 是允许的,只要不是两个模块都含有静态构造或析构函数就行。
如果违反这条规则会在运行时产生异常。
10.2 一个模块中 静态构造 的顺序
在模块内部,静态构造 会按照它们出现的 词法 顺序执行。
10.3 静态析构 的顺序
静态析构 将按照与构造函数 相反 的顺序执行。只有当模块的 静态构造函数 成功执行后,才会执行 静态析构函数。
10.4 单元测试的顺序
单元测试是以出现在 模块 里的 词法 顺序运行的。
11 Mixin 声明
Mixin声明:
mixin ( 赋值表达式 ) ;
赋值表达式 必须在编译时求值成一个 常量字符串。该字符串的 文本内容 必须要可编译成一
个 有效 的 多个声明 定义,而且同样地被编译。
。。。
模块声明 多个声明定义
多个声明定义
多个声明定义:
单个声明定义
单个声明定义 多个声明定义
单个声明定义:
属性指示符
导入声明
枚举声明
类声明
接口声明
聚集声明
单个声明
构造函数
析构函数
不变量
单元测试
静态构造函数
静态析构函数
Debug规范
Version规范
Mixin声明
;
模块同源文件是一一对应的。模块名就是去掉路径和扩展名的文件名。
模块自动为它的内容提供一个名字空间。模块跟类有一点相像,不同之处是:
• 每个模块只有一个实例,并且它是静态分配的。
• 模块没有虚函数表。
• 模块不能继承,它们没有父模块,等等。
• 每个文件只有一个模块。• 模块的符号可以导入。
• 模块总是在全局作用域内编译,并且不受周围的特征或其它修饰符影响。
多个模块可以组织成一个结构,叫做“包(packages)”。
模块提供了以下几种担保:
• 模块导入的顺序并不会对语义产生什么影响。
• 一个模块的语义不会被那些导入它的模块所影响。
• 如果一个模块 C 导入了模块 A 和 B,那么任何对 B 的修改都不会隐式地更改在模
块 C 里的跟 A 相独立的代码。
2.1 模块声明
“模块声明”指定了模块的名称和它所属的包。如果不指定,模块名将设定为去掉路径和扩
展名的文件名。
模块声明:
module 模块名 ;
模块名:
标识符
模块名 .标识符
最右面的“标识符”是模块所在的“包”。包在源文件路径中对应于目录名。
如果出现的话,“模块声明”按照语法位于源文件的开头,并且每个源文件只能有一个。
样例:
module c.stdio; // 这是模块 stdio,它位于 c 包中
按照惯例,包和模块名都为 小写。这是因为 包 和 模块名称 同操作系统中的目录名和文件名 一一对应,而许多文件系统不区分大小写。把所有的包和模块名称小写将减少在不同文件系统之间 迁移 项目时的问题。
2 导入声明
与文本的包含文件不同,D 通过使用“导入声明”直接导入符号:
导入声明:
import 导入列表 ;
static import 导入列表 ;
导入列表:
导入
导入绑定
导入 , 导入列表
导入:
模块名
模块别名标识符 = 模块名
导入绑定:
导入 :导入绑定列表
导入绑定列表:
导入绑定
导入绑定 , 导入绑定列表
导入绑定:
标识符
标识符 = 标识符
ModuleAliasIdentifier:
Identifier 2.014
有好几种形式的“导入声明”,从一般的到有细密纹理的(fine-grained)导入。
在“导入声明”里的声明顺序并不重要。
模块名(位于“导入声明”中)必须使用它们所处的那个包的名称来完整修饰。 它们就不
会被认为是相对于那个导入它们的模块。
3 基本导入
最简单的导入形式就是只做列出要被导入的模块:
import std.stdio; // 导入模块 stdio(自 std 包里)
import foo, bar; // 导入杠杆?? foo 和 bar
void main()
{
writefln("hello!\n"); // 调用 std.stdio.writefln
}
基本导入工作原理 就是:首先,在当前名字空间里搜索名字。如果没有找到,那么就到所有导入的模块里去查找。如果在这些导入模块中唯一找到一个,则使用它。
如果在多个导入模块里找到,则就出现错误。
module A;
void foo();
void bar();
module B;
void foo();
void bar();
module C;
import A;
void foo();
void test()
{ foo(); // C.foo() 被调用,它在搜索导入模块之前被找到
bar(); // A.bar() 被调用,因为搜索了导入模块
}
module D;
import A;
import B;
void test()
{ foo(); // 错误,是 A.foo() 还是 B.foo() 呢?
A.foo(); // 正确,调用 A.foo()
B.foo(); // 正确,调用 B.foo()
}
module E;
import A;
import B;
alias B.foo foo;
void test()
{ foo(); // 调用 B.foo()
A.foo(); // 调用 A.foo()
B.foo(); // 调用 B.foo()
}
4 公共导入
默认情况下,导入是“private(私有的)”。即表示,如果 A 导入模块 B,同时 B 又导入模块C,则 C 的名字是不会被搜索的。
一个导入可以特别地声明为“public(公共的)”,这时它会处理成这样:对于带有“导入声明”的模块,它的任何导入模块也会导入那些公共导入的模块。
module A;
void foo() { }
module B;
void bar() { }
module C;
import A;
public import B;
...
foo(); // 调用 A.foo()
bar(); // 调用 B.bar()
module D;
import C;
...
foo(); // 错误,foo() 未定义
bar(); // 正确,调用 B.bar()
5 静态导入
基本导入对于相对没有几个模块和导入的程序很有效。如果存在大量模块导入,则在各种不
同的导入模块里,名字 冲突 就会出现。
防止此种情况发生的一种方式就是使用“静态导入(static imports)”。静态导入要求我们使用带 完整修饰 的名称来 引用 模块名。
static import std.stdio;
void main()
{
writefln("hello!"); // 错误,writefln 未定义
std.stdio.writefln("hello!"); // 正确,writefln 被完全限定
}
6 更名的导入
可以为某个导入给出本地名称;通过这个本地名称,所有对该模块符号的引用都必须进行限
定(be qualified with):
import io = std.stdio;
void main()
{
io.writefln("hello!"); // 正确,调用 std.stdio.writefln
std.stdio.writefln("hello!"); // 错误,std 未定义可能已经覆盖了 std.stdio 名称
writefln("hello!"); // 错误,writefln 未定义
}
更名的导入在处理很长的导入名时很方便。
7 选择性导入
特定的符号可以 特别 地从一个模块被导入,并被绑定到当前名字空间里。
import std.stdio : writefln, foo = writef;
void main()
{
std.stdio.writefln("hello!"); // 错误,std 未定义
writefln("hello!"); // 正确,writefln 被绑定到当前名字空间
writef("world"); // 错误,writefln 未定义
foo("world"); // 正确,调用 std.stdio.writef()
fwritefln(stdout, "abc"); // 错误,writefln 未定义
}
static 不能跟选择性导入一起使用。
8 更名 的且带 选择性 的导入
更名的且带选择性的导入被组合的情形:
import io = std.stdio : foo = writefln;
void main()
{
writefln("bar"); // 错误,writefln 未定义
std.stdio.foo("bar"); // 错误,foo 被绑定到当前名字空间
std.stdio.writefln("bar"); // 错误,std 未定义
foo("bar"); // 错误,foo 被绑定到当前名字空间,
// FQN 不需要
io.writefln("bar"); // 正确,io=std.stdio 将在当前名字空间里的名称 io
// 绑定来引用整个模块
io.foo("bar"); // 错误,foo 被绑定到当前名字空间,
// 而 foo 不是 io 的成员
9 模块作用域运算符
有些时候,有必要重写通常的词法作用域规则以访问被局部名称 掩盖 的名称。可以用 全局作用域 运算符‘.’ 达到这个目的,全局运算符位于标志符之前:
int x;
int foo(int x)
{
if (y)
return x; // 返回的是 foo.x,而非全局的 x
else
return .x; // 返回全局的 x}
前导的‘.’意味着在 模块作用域 级别 查找名称。
10 静态构造 和 析构
静态构造函数 是用来在 main() 之前 运行 的 初始化模块或类的代码。静态析构函数是在 main() 返回 之后 执行的代码,通常用来 释放 系统资源。
在一个模块里可以有 多个 静态构造函数 和 静态析构函数。静态构造函数的是以词法顺序运行的,而静态析构函数 则是以词法 相反 的顺序运行。
10.1 静态构造 的顺序
静态初始化的顺序 隐式 地由模块内的 import 声明的 顺序 决定。每个模块都会在它所依赖的模块 之后 调用自己的静态构造函数。
除了这条规则以外,模块静态构造函数的执行顺序是不定的。
导入声明中的 循环(循环依赖) 是允许的,只要不是两个模块都含有静态构造或析构函数就行。
如果违反这条规则会在运行时产生异常。
10.2 一个模块中 静态构造 的顺序
在模块内部,静态构造 会按照它们出现的 词法 顺序执行。
10.3 静态析构 的顺序
静态析构 将按照与构造函数 相反 的顺序执行。只有当模块的 静态构造函数 成功执行后,才会执行 静态析构函数。
10.4 单元测试的顺序
单元测试是以出现在 模块 里的 词法 顺序运行的。
11 Mixin 声明
Mixin声明:
mixin ( 赋值表达式 ) ;
赋值表达式 必须在编译时求值成一个 常量字符串。该字符串的 文本内容 必须要可编译成一
个 有效 的 多个声明 定义,而且同样地被编译。
。。。
发表评论
-
土耳其文《d编程》range 翻译 一
2011-11-15 02:01 1555Ranges 范围 Ranges are an abstra ... -
土耳其文《d编程》range 翻译 二
2011-11-15 01:59 1049As you can see, that output doe ... -
d2 range 和 标准C++中的Iterator(迭代器)简介
2011-05-07 12:59 2171原文: http://hi.baidu.com/c ... -
三访安德烈Alexandrescu(第2部)
2010-08-20 12:53 1475Google翻译哦 面试------> 应翻成 访谈 ... -
三访安德烈Alexandrescu(第一部分)
2010-08-20 12:43 1369google翻译哦 Interview with Andre ... -
Garden Editor project 日记 之二 10.16 ---
2009-10-16 02:39 02009.10.16 T[new] misgivings ... -
Garden Editor project 日记 之一 09.09.25 --- 10.15
2009-09-24 22:56 0kill two birds with one stone, ... -
template metaprogramming 9
2009-09-09 16:08 1203原文:https://docs.google.co ... -
Floating Point in D (2.030 新)
2009-05-12 23:27 20805.17 23:50 更新 5.16 20:30 翻译更 ... -
Migrating to Shared (2.030 新)
2009-05-12 23:03 11755.19 0:10 更新(完成) ... -
D 2.0 的gc
2008-12-04 19:53 1273http://lucifer1982.wordpress.co ... -
垃圾回收 2.014
2008-06-10 07:20 1009无版本差异 D 是一种全面采用垃圾回收(Garbage Co ... -
类 class 2.014
2008-06-09 22:51 1125D 的面向对象的特性都来源于类。类层次里的顶层是 Object ... -
接 口 2.014
2008-06-09 22:51 867接口声明: interface 标 ... -
C 语言接口 2.014
2008-06-09 22:50 1051D 的设计就是要在目标系统上能够很好地符合于 C 编译器。D ... -
Traits 特征 2.014
2008-06-07 11:25 12856.14 翻译 (d语言的反 ... -
常量和不变量 Const and Invariant 2.014
2008-06-07 11:22 1332请参考: D 2.0 Const/Final/Invarian ... -
词法 2.014
2008-06-07 10:22 1525在 D 中,词法分析独立于语法分析和语义分析。词法分析器是将源 ... -
枚 举 2.014
2008-06-07 08:41 1182枚举声明: enum 枚举标记 枚举体 enum 枚举体 en ... -
函 数 2 (2.014)
2008-06-07 08:22 10727 嵌套函数 函数可以被 ...
相关推荐
内容概要:本文详细介绍了无线电能传输技术在电动汽车充电中的应用,特别是在Matlab和Maxwell中的仿真过程。首先讨论了SS补偿拓扑的Matlab仿真,展示了如何设置线圈参数、进行谐振匹配以及通过相量分析判断软开关状态。接着探讨了Maxwell中DD线圈的3D电磁场仿真,强调了自定义网格划分和涡流场计算的重要性。随后,文章深入研究了多线圈阵列仿真,揭示了不同线圈布局对耦合系数的影响,并提出了LCC补偿拓扑的应用。此外,文中还分享了许多实用技巧,如避免常见错误、优化仿真参数以及处理实际测试中的问题。 适合人群:从事无线电能传输研究的技术人员、研究生及以上学历的研究人员。 使用场景及目标:适用于需要深入了解无线电能传输技术及其仿真的研究人员和技术开发者,旨在帮助他们掌握Matlab和Maxwell的具体应用,提高仿真精度和效率。 其他说明:文章不仅提供了详细的代码示例和仿真步骤,还分享了作者的实际经验和教训,使读者能够更好地理解和应对仿真过程中遇到的问题。
用户增删改查功能的前端页面,添加了vue渲染代码。
计算机课程设计相关资源
基于51单片机protues仿真的猜数字游戏(仿真图、源代码、AD原理图、流程图) 猜数字游戏 1、通过随机数实现该游戏; 2、按下K1键启动游戏并随机生成一个0~9的数字 3、通过矩阵按键输入你的数字,输入数字小于随机生成的数字则显示小于该数,大于的时候显示大于该数,直到相等为止。 4、仿真图、源代码、AD原理图、流程图;
内容概要:本文详细介绍了利用MATLAB 2021b搭建的FOC滑膜观测器(SMO)与锁相环(PLL)的仿真模型及其在M4硬件平台上的实现方法。文中首先展示了SMO的核心代码,解释了如何通过滑模面计算和符号函数处理来估算反电动势,并讨论了PLL用于速度提取的具体实现。接着探讨了仿真环境中直接0速闭环启动的效果以及实际硬件实现时所需的开环启动策略。此外,文章还分享了多个调试过程中遇到的问题及解决方案,如相位跳变、高频振荡、电流环参数调整等。 适合人群:从事电机控制研究的技术人员,尤其是对无感FOC感兴趣的工程师。 使用场景及目标:适用于希望深入了解FOC滑膜观测器和锁相环的工作原理并尝试将其应用于实际项目的开发者。目标是掌握SMO+PLL组合的设计思路和技术细节,同时了解硬件移植时需要注意的实际问题。 其他说明:文中提供了大量实用的代码片段和调试经验,对于想要快速入门或优化现有系统的读者非常有帮助。特别强调了仿真与现实之间的差异,提醒读者注意参数选择和滤波器设计等方面的不同之处。
汽车美容员工手册.doc
内容概要:本文详细介绍了利用粒子群优化(PSO)算法解决配电网中分布式光伏系统的选址与定容问题的方法。首先阐述了问题背景,即在复杂的配电网环境中选择合适的光伏安装位置和确定合理的装机容量,以降低网损、减小电压偏差并提高光伏消纳效率。接着展示了具体的PSO算法实现流程,包括粒子初始化、适应度函数构建、粒子位置更新规则以及越界处理机制等关键技术细节。文中还讨论了目标函数的设计思路,将多个相互制约的目标如网损、电压偏差和光伏消纳通过加权方式整合为单一评价标准。此外,作者分享了一些实践经验,例如采用前推回代法进行快速潮流计算,针对特定应用场景调整权重系数,以及引入随机波动模型模拟光伏出力特性。最终实验结果显示,经过优化后的方案能够显著提升系统的整体性能。 适用人群:从事电力系统规划与设计的专业人士,尤其是那些需要处理分布式能源集成问题的研究人员和技术人员。 使用场景及目标:适用于希望深入了解如何运用智能优化算法解决实际工程难题的人士;旨在帮助读者掌握PSO算法的具体应用方法,从而更好地应对配电网中分布式光伏系统的选址定容挑战。 其他说明:文中提供了完整的Matlab源代码片段,便于读者理解和复现研究结果;同时也提到了一些潜在改进方向,鼓励进一步探索和创新。
晋升考核制度.pptx
计网-主机发送IP数据报的过程思维导图
内容概要:本文详细介绍了三菱FX3U PLC与三台三菱E740变频器通过Modbus RTU协议进行通讯的具体实现方法。主要内容涵盖硬件配置(如PLC、变频器、触摸屏)、通讯参数设置(如波特率、数据位、校验方式)、PLC程序编写(包括初始化、启停控制、频率设定等)、触摸屏编程(如画面设计、变量关联)等方面。文中还分享了一些实际应用中的注意事项和避坑指南,确保通讯系统的稳定性和可靠性。 适用人群:从事工业自动化领域的工程师和技术人员,尤其是熟悉三菱产品和Modbus RTU协议的专业人士。 使用场景及目标:适用于需要实现PLC与多台变频器通讯的工业自动化项目,旨在提高系统的集成度和可控性,减少人工干预,提升生产效率。 其他说明:文中提供的实例和代码片段有助于读者快速理解和掌握相关技术要点,同时强调了实际操作中的常见问题及其解决方案。
内容概要:本文深入探讨了利用二/三自由度动力学模型和MPC(模型预测控制)实现自动驾驶车辆的任意路径跟踪技术。首先介绍了二自由度动力学模型的基本概念及其状态方程,随后详细解释了MPC的工作原理,包括目标函数的设计和优化求解过程。接着讨论了Carsim和Simulink联合仿真的具体实施步骤和技术要点,如采样同步、约束条件处理等。文中还分享了许多实用的工程经验和调试技巧,例如预瞄距离的设置、权重矩阵的选择以及如何应对高速工况下的挑战。最终通过仿真结果展示,证明了该方法的有效性和优越性。 适合人群:从事自动驾驶研究与开发的专业人士,尤其是对路径跟踪算法感兴趣的工程师和技术爱好者。 使用场景及目标:适用于需要精确路径跟踪的自动驾驶应用场景,旨在提高车辆行驶的安全性和效率。通过掌握本文介绍的方法和技术,可以帮助开发者更好地理解和实现基于MPC的路径跟踪系统。 其他说明:文章不仅提供了理论知识,还包括了大量的实战经验和代码片段,有助于读者快速上手并应用于实际项目中。同时强调了在不同速度范围选择合适自由度模型的重要性,为后续的研究和发展指明了方向。
内容概要:本文详细介绍了基于西门子S7-1200 PLC的智能灌溉系统的设计与实现。系统主要包括PLC控制器、触摸屏、传感器和执行机构。文中详细讲解了如何使用博途V16软件编写PLC程序,包括梯形图编程和SCL语言的应用,以及如何设计触摸屏监控画面。此外,还涉及了IO表和电气原理图的准备,确保系统的正确安装和维护。文章特别强调了自动灌溉的核心逻辑,如状态机结构和异常处理机制,以及触摸屏设计的小技巧,如动态图标和趋势图的使用。最后,提供了调试过程中的一些注意事项和优化建议。 适合人群:从事农业自动化领域的工程师和技术人员,尤其是熟悉PLC编程和触摸屏设计的专业人士。 使用场景及目标:适用于需要提高灌溉效率和精度的现代农业生产环境。目标是通过智能化控制减少水资源浪费,提升作物产量。同时,也为系统开发者提供了详细的实施指南和调试技巧。 其他说明:文章附带了完整的PLC程序、HMI界面和电气图纸,方便读者进行实际操作和验证。
国金qmt模拟客户端。 模拟账号密码,私聊。
员工离职面谈记录表.doc
新员工关怀方案
内容概要:本文详细介绍了轴承表面缺陷检测数据集的结构及其应用方法。数据集包含5824张高清轴承图像及其对应的XML标注文件,涵盖擦伤、凹槽、划痕三种类型的缺陷。作者通过Python代码展示了如何检查数据完整性、解析XML标注文件、进行数据可视化以及数据增强操作。此外,还讨论了使用YOLOv5和EfficientDet等模型进行缺陷检测的具体步骤和技术要点,强调了高分辨率图像处理和模型优化的方法。 适合人群:从事工业质检、机器视觉、深度学习等相关领域的研究人员和工程师。 使用场景及目标:适用于需要处理高分辨率工业图像并进行缺陷检测的研究和工程项目。主要目标是提高缺陷检测的准确性,特别是在复杂的工业环境中。 其他说明:文中提供了大量实用的Python代码片段,涵盖了从数据预处理到模型训练的各个环节。特别提到了针对金属表面反光、多缺陷共存等问题的技术解决方案。
招聘甘特图.xlsx
招聘仪表盘构建及为数据解读P11.pptx
内容概要:本文详细介绍了利用MATLAB进行光纤通信物理层传输算法仿真的方法和技术要点。主要内容涵盖色散补偿、非线性放大器建模、信号重构、时钟恢复、QPSK调制、误码率分析等方面。文中提供了多个具体的MATLAB代码示例,如色散补偿、非线性放大器特性拟合、QPSK调制与解调、眼图生成等,并分享了许多调试经验和常见问题解决方案。此外,作者还强调了仿真过程中需要注意的关键细节,如参数设置、变量监控、噪声注入方式等。 适合人群:从事光纤通信研究的技术人员、研究生以及对通信系统仿真感兴趣的开发者。 使用场景及目标:适用于希望深入了解光纤通信物理层传输机制及其仿真实现的研究人员和工程师。目标是帮助读者掌握MATLAB在通信仿真中的应用,提高仿真效率并减少调试时间。 其他说明:文章不仅提供详细的代码示例,还分享了大量实战经验,有助于读者快速上手并解决实际问题。
线性代数