PLC编程中形参与实参的区别
- 格式:docx
- 大小:14.11 KB
- 文档页数:2
1.7 习题与思考1. 1969。
2. CPU、存储器、输入单元、输出单元。
3. 梯形图、语句表、功能块图、顺序功能图、结构文本。
4. 输入采样阶段、程序执行阶段、输出刷新阶段。
5. 8、3、左、2、3。
6. IB8、IB9、IB10、IB11 QB16、QB20。
7. 接通、0、1、接通、断开、复位为0、0、0、断开。
8. 上升沿、出现上升沿时、999、清0、1、0 。
9. 无数对。
10. 无。
11. 见PLC的特点。
12.(1)组成器件不同:继电器控制线路是许多真正的硬件继电器组成,而梯形图则由许多所谓“软继电器”组成。
(2)触点数量不同:硬继电器的触点数量有限,用于控制的继电器的触点数一般只有4 ~8对。
而梯形图中每个“软继电器”供编程使用的触点数有无数对;(3)实施控制的方法不同:在继电器控制线路中,实现某种控制是通过各种继电器之间硬接线解决的。
而PLC控制是通过梯形图即软件编程解决的。
(4)工作方式不同:在继电器控制线路中,采用并行工作方式;而在梯形图的控制线路中,采用串行工作方式。
13. 带有集成功能和I/O。
数字量输入和输出、模拟量输入和输出、计数功能、定位功能等。
14. 交流数字量输入模块适合在有油雾、粉尘的恶劣环境下使用;直流数字量输入模块应用在信号不是很长,PLC所处的物理环境较好的环境中,其模块可以直接与接近开关,光电开关等电子输入装置连接,DC 24V是一种安全电压。
15. 继电器输出、晶体管输出、双向晶闸管三种类型。
继电器输出适合于交直流负载,负载电压范围宽,导通压降小,承受瞬时过电压和瞬时过电流的能力较强,但是动作速度较慢,寿命(动作次数)有一定的限制。
晶体管输出只适合于直流负载,可靠性,响应速度快,寿命长,但是过载能力稍差。
双向晶闸管只适合于交流负载。
16. 新建项目后,双击硬件图标进入HW Config硬件配置窗口;添加导轨后,选中1号槽,添加电源(根据负载要求,如使用其他电源可不配置电源模块);选中2号槽,添加CPU 模块;选中3号槽,添加接口模块(只有一个机架的控制系统不需添加接口模块);选中4号槽,添加输入或输出信号模块,在4号槽以后根据需要添加其他功能或通信模块。
二维数组的形参和实参定义
在C或C++编程语言中,二维数组可以作为函数的参数。
这通常涉及传递一个数组的引用,即数组的地址。
二维数组作为函数参数时,其形参和实参的定义如下:
形参
形参是在函数声明或定义中定义的参数。
对于二维数组,形参通常是一个指向指针的指针,或者是一个指向数组的指针。
这是因为二维数组本质上是一个指针的数组,每个指针指向一个一维数组。
例如,考虑以下函数:
```c
void printArray(int arr[][3], int rows) {
// 函数体
}
```
在这个例子中,`arr` 是一个指向包含3个整数的数组的指针。
`rows` 是这个二维数组的行数。
实参
实参是在调用函数时传递给函数的参数。
对于二维数组,实参通常是一个数组名。
当数组名用作实参时,它会被解释为该数组第一个元素的地址。
例如,你可以这样调用上面的函数:
```c
int main() {
int myArray[2][3] = {{1, 2, 3}, {4, 5, 6}};
printArray(myArray, 2); // 调用函数,传递二维数组和行数作为实参 return 0;
}
```
在这个例子中,`myArray` 是二维数组的名字,它会被解释为指向包含3个整数的数组的指针。
`2` 是这个二维数组的行数。
这两个值一起作为实参传递给 `printArray` 函数。
一、PLCSIM与真实的PLC之间的不同PLCSIM提供了方便,壮大的仿真模拟功能。
与真实的PLC相较,它的灵活性更高,提供了许多PLC硬件无法实现的功能利用也更方便。
可是,软件毕竟无法完全取代真实的硬件,不可能实现全数的仿真。
在利用PLCSIM 进行模拟调试时,必需了解其与真实PLC系统的不同PLCSIM的以下功能在实际的PLC上无法实现1、程序的暂停、继续功能2、单循环执行模式。
3、模拟CPU转为STOP状态时,可不能改变输出。
4、通过显示窗口修改变量值,会当即生效,而可不能等到下一个循环。
5、按时器手动设置。
6、进程映像区和直接外设是同步动作的,进程映像I/O会当即传送到外设I/O。
PLCSIM无法实现以下PLC具有的功能1、少数实际系统中的诊断信息PLCSIM无法仿真,例如电池错误2、当从RUN变成STOP模式时,I/O可不能进入平安状态。
3、不支持特殊功能模块。
4、PLCSIM只模拟单机系统,不支持CPU的网络通信模拟功能。
二、STEP7软件中要紧有哪几种类型的块组织块 OB(Organization block)功能 FC (Function block)功能块 FB(Function block)系统功能 SFC(System Function )系统功能块 SFB(System Function Block)背景数据块 DB( Instance Data Block)共享数据块 DB( Share Data Block)三、组织块OB可分为几大类型1、启动组织块、2循环执行的程序组织块、3按期执行的程序组织块4、事件驱动执行的程序组织块。
四、启动组织块的利用方式S7系列PLC的启动组织块有3个,别离为OB100,OB101,OB102这3 个启动组织块对应不同的启动方式,至于PLC采取哪一种启动方式,是与PLC的型号及启动模式有关的。
1、OB100为完全再启动类型(暖启动),进程映像区和不维持的标存储器,按时器和计数器都被清零,维持的标志存储器、按时器和计数器和数据块的当前值维持原状态,执行OB100,然后开始执行OB1.一样的PLC都采纳此种启动方式。
⼩⽂⽼师⽤最通俗易懂的例⼦给你讲明⽩FC逻辑块形参和实参的本质与含义⼤家好,这⾥是⼗天学会PLC⼯作室,感谢⼤家的⽀持与厚爱,⼀路⾛来如果没有您的认可与陪伴,我们很难发展⾄今⽇。
由于版权问题,若您需要观看西门⼦S7-1500教学视频,三菱FX2N系列PLC教学视频、MC51单⽚机教学视频,可以在哔哩哔哩(视频⽹站)搜索“⼗天学会PLC”即可正常免费⾼清观看,此平台(微信公众号)只发布技能⽂章,再次感谢您对⼗天学会PLC的认可与⽀持!今天给⼤家带来的内容是形参和实参的教学,相信很多学员在学习SIMENS的路途上经常遇到“形参”和“实参”这样的名词,然后说明⽩吧其实也含含糊糊,隐隐约约的,说不明⽩吧,感觉会⽤.......这样纠结的状态是时候来个终结了!我们先来看两张图⽚:想要明⽩什么是形参,⾸先我们得认识它,这是形参的位置,其实FC块⼀开始是没有形参的(⼤家看下在OB1⾥⾯形参的初始状态),需要你⾃⼰去定义,定义的时候有输⼊变量,输出变量和局部变量,那么我给⼤家添加⼀个⼤家看⼀下效果:这是⼩⽂添加的变量,在输⼊添加了三个限位开关,输出添加了三个电磁阀,还有TEMP的a,b,c都是我定义的,注意,a,b,c只能在这个FC块被访问到,因为是局部变量,你可以把他理解为,FC是⼤哥,a,b,c是⼤哥招揽的⼩弟,只属于这个FC使⽤。
为是局部变量,你可以把他理解为,FC是⼤哥,a,b,c是⼤哥招揽的⼩弟,只属于这个FC使⽤。
再来看⼀下调⽤以后⾄OB1的结果:我们发现,FC的接⼝变多了!那么道理浅显易见了,其实所谓的形参就是,接⼝参数,你把FC想象成⼀个国家,然后你可设置外交官,或者把FC想象成⼀个⼯⼚,你可以设置⼯⼚的⼊⼝,出⼝,⽽这些出⼊⼝都是你⾃⼰设定的,这就是形参!我们可以理解为,形式参数就是接⼝参数!有朋友会问,那接⼝参数不设置,我也能编程序!意义在哪⾥?注意,在中⼤型程序中,细化FC的形参(接⼝),有助于提⾼系统的可读性和完整性!便于故障查找!那么什么是实参呢?我们再来定义⼀个参数!⽓压值!外部传感器输⼊到FC的⽓压值!这是个形参接⼝,没⽑病吧!定义⼀个REAL的数据,然后继续看图:你FC每⼀个接⼝的,不管是触点还是寄存器,都是你的实参,⽐如你的⽓压接⼝,你的接⼝,这个⼝,这个通道就是形参,你的接⼝肯定要有数据,⽽这个变化的数据就是实参!举个例⼦!超市的收银台,⽐如50个,每个收银台都是形参,但是没有顾客你收银台没有意义,所以来的顾客,消费的数据就是实参!这就是实参和形参!明⽩了吗?明⽩了还不赶快打开博途试试?明⽩了还不点赞你瞅啥呢!哈哈哈哈哈!今天的课程就到这⾥了!由于版权问题,我们⽬前主要营运的平台转移⾄“哔哩哔哩bilibili”,包括SIMENS S7-1500,MC51单⽚机与三菱PLC的教学,均在哔哩哔哩频道定期更新。
《S7-300PLC应用技术》培训试题库一、选择题(A)1.世界上第一台可编程序控制器PDP-4是在1969年研制出来的。
A. 美国B. 德国C. 日本D. 中国(B)2.PLC的各种系统参数、I/O映像等参数存放到PLC的中。
A. 系统ROMB. 系统RAMC. 用户ROMD. 用户RAM(C)3.PLC的CPU与现场I/O装置的设备通信的桥梁是。
A. I模块B. O模块C. I/O模块D. 外设接口(D)4.为了拓宽输入电压范围,提高电源的效率和抗干扰能力,PLC的内部电源一般采用。
A. 并联稳压电源B. 串联稳压电源C. 锂电池D. 开关稳压电源(A)5.S7-300/400 PLC的电源模块为背板总线提供的电压是。
A. DC5VB. +DC12VC. –DC12VD. DC24V(C )6.下列不属于PLC的特点的是。
A. 通用性好,适应性强B. 可靠性高,抗干扰能力强C. 设计、安装、调试和维修工作量大D. 编程简单、易学(D)7.下列不具有通信联网功能的PLC是。
A. S7-200B. S7-300C. GE90UD. F1-30MR(B )8.作为德国国家标准和欧洲标准,由3个系列组成的现场总线是。
A. FFB. PROFIBUSC. LonWorksD. CAN(C )9.SIMATIC NET中,属于多点接口,适用于少量、慢,实时性要求不高的场合。
A. ETHERNETB. PROFIBUSC. MPID. AS-I(D )10.按组成结构形式、容量和功能分,S7-300属于。
A. 小型中档整体式B. 小型高档模块式C. 大/中型高档整体式D. 大/中型高档模块式(B)11.下列输出模块可以交直流两用的是()A. 光电耦合输出模块B. 继电器输出模块C. 晶体管输出模块D. 晶闸管输出模块(C)12.输入采样阶段,PLC的CPU对各输入端子进行扫描,将输入信号送入。
A. 外部I存储器(PI)B. 累加器(ACCU)C. 输入映像寄存器(PII)D. 数据块(DB/DI)(A )13.每一个PLC控制系统必须有一台,才能正常工作。
函数调用中实参和形参变化问题很多初学者搞不明白子函数中什么时候可以改变实参值,什么时候不会改变。
今天来具体分析下。
先来解释下实参和形参,所谓实参,就是通过主函数传递给子函数的变量。
而子函数中用来接收变量的参数就称形参。
如下: 点击(此处)折叠或打开1.#include<stdio.h>2.void fun(int p,int q)3.{4.int temp;5.6.temp = p;7.p = q;8.q = temp;9.10.return ;11.}12.13.int main()14.{15.int x = 1,y = 2;16.17.fun(x,y);18.19.printf("%d\t%d\n",x,y);20.21.return 0;22.}这段程序的输出结果为2 1。
以上代码中,x,y是main函数要传递给子函数fun的实参,而p,q 就是用来接收x和y的值的形参,所以,形参和实参的类型必须相同。
函数在传参过程中,是一个内容的拷贝过程,而每个函数都会有自己的栈空间来存放局部变量,所以,形参和实参是不同的内存单元。
通俗点讲,就是,你改变他们其中一个的值,另一个的值不会改变。
如上程序,main函数将x和y传给了fun函数的p和q,相当于p和q是对x和y的拷贝,p和q是存放于fun函数的栈空间的,x和y是存放于main函数的栈空间,它们是不同的内存单元,所以在fun 函数中交换p和q的值并不影响x和y的值,x和y的值仍然分别为1和2。
而且,随着fun函数的结束,p和q这两个局部变量会被释放。
但是,当你传递的参数是个指针的时候,就可以改变实参的值,以下通过程序来详细分析。
点击(此处)折叠或打开1.#include<stdio.h>2.void fun(int*p,int*q)3.{4.int temp;5.6.temp =*p;7.*p =*q;8.*q = temp;9.10.return ;11.}12.13.int main()14.{15.int x = 1,y = 2;16.17.fun(&x,&y);19.printf("%d\t%d\n",x,y);20.21.return 0;22.}这段程序的输出结果为2 1。
西门子PLC考试题库一、选择题1.MW0是位存储器中的第1个字,MW4是位存储器中的第(C ) 个字。
A.1B.2C.3D.42.WORD(字)是16位( B ) 符号数,INT(整数)是16位( ) 符号数。
A.无,无B.无,有C. 有,无D.有,有3.( D ) 是MD100中最低的8位对应的字节。
A.MB100B.MB101C. MB102D.MB1034.PLC在线状态下,在变量表(V A T)窗口,单击图标( D)可以每个扫描周期都刷新变量。
A.监视B.离线C. 强制D.变量触发5.图标表示( A ) 。
A.可以刷新变量一次B.可以每个扫描周期刷新变量一次C.可以激活修改的值一次D.每个扫描周期激活修改值6.“S5T#5s_200ms”表示( A ) 。
A.16位S5TIME型数据B.16位TIME型数据C.32位S5TIME型数据D.32位TIME型数据7.“TOD#21:23:45.12”表示( D ) 。
A.16位TIME型数据B.16位TIME-OF-DAY型数据C.32位TIME型数据D.32位TIME-OF-DAY型数据8.S7系列PLC的状态字(STW)中,表示逻辑运算结果的是( B )。
A. RFB.RLOC. STAD.BR9.S7系列PLC的状态字(STW)的( D )位与指令框的使能输出ENO的状态相同。
A. RFB.RLOC. ORD.BR10.不能以位为单位存取的存储区是( D )。
A.输入映像B.输出映像C.内部存储器D.外设I/O区11.下列输出模块可以交直流两用的是(B )A. 光电耦合输出模块B. 继电器输出模块C. 晶体管输出模块D. 晶闸管输出模块12.输入采样阶段,PLC的CPU对各输入端子进行扫描,将输入信号送入 C 。
A. 外部I存储器(PI)B. 累加器(ACCU)C. 输入映像寄存器(PII)D. 数据块(DB/DI)13.每一个PLC控制系统必须有一台 A ,才能正常工作。
AB—PLC自学笔记一以前断断续续的学了一点,但大多是三天打鱼两天晒网;也参加了一次培训,但是短短的课程、大量的产品介绍和难得的上机实验,很快就忘记了学了点啥。
翻开以前的学习记录,零散而杂乱,不少要点看上去是那么陌生。
也罢,再来一次打鱼又如何?第一步,安装软件。
手上有去年培训的时候从老师那里搞来的16版本的logix5000,以前也安装过,里面有很好的英文语音教学,当时老师开玩笑说,可以锻炼下听力。
安装完logix5000V16,再安装一个模拟器软件:Emulate,安装过程中告诉我需要rslinx,昏,看来安装次序错鸟。
其实在安装logix5000的过程中,最后一些小工具的安装也提示我需要rslinx的,被我忽略了。
于是安装rslinx,再安装emulate。
最后一步,把网上找来的授权导入。
发现用老版授权的话,软件第一次运行会提示你,现在16版本采用所谓的factorytalk管理授权了云云,我不管,反正能用就行。
接下来的问题就是,怎么用这个模拟器?以前用过,但是忘鸟。
只记得要选择一个特殊的硬件,还好有份模拟器的使用手册,简单看了下几个插图就回忆起来了,试了下,ok。
个人觉得ab的emulate有点别扭,因为用惯了西门子的plcsim,那个不需要选择什么特殊的硬件,原工程就可以很仿真的download下去去模拟运行。
而ab的东东,却不能用真正的硬件配置,那么一个实际个工程文件必须修改下controller才能去仿真了???万事具备,就开始学习软件吧,从何入手呢?先找几个自己感兴趣的问题研究研究吧。
先看看变量的定义,ab的独特之处就包括tag是以名称作为关键“索引”,没有西门子那种地址的概念,这样当然简化了开发。
那么如何批量的导入/导出变量呢?我用s7的编程习惯是在excel里面编辑好变量表,再导入到程序里面。
在logix5k软件里面找了下,果然可以,tools菜单下有import和export,试了下,跟西门子的symbol table一样,都是以csv文件保存的,不过也发现了中文注释偶尔会变“乱码”。
西门子博图数据类型说明数据类型数据类型用于指定数据元素的大小以及如何解释数据。
每个指令参数至少支持一种数据类型,而有些参数支持多种数据类型。
将光标停在指令的参数域上方,便可看到给定参数所支持的数据类型。
形参指的是指令上标记该指令要使用的数据位置的标识符(例如:ADD 指令的IN1 输入)。
实参指的是包含指令要使用的数据的存储单元(含“%”字符前缀)或常量(例如,%MD400 "Number_of_Widgets")。
用户指定的实参的数据类型必须与指令指定的形参所支持的数据类型之一匹配。
指定实参时,必须指定变量(符号)或者绝对(直接)存储器地址。
变量将符号名(变量名)与数据类型、存储区、存储器偏移量和注释关联在一起,并且可以在PLC 变量编辑器或块(OB、FC、FB 和DB)的接口编辑器中进行创建。
如果输入一个没有关联变量的绝对地址,使用的地址大小必须与所支持的数据类型相匹配,而默认变量将在输入时创建。
除了 String、Struct、Array 和 DTL,其它所有数据类型都可以在PLC 变量编辑器和块接口编辑器中使用。
String、Struct、Array 和DTL 只可在块接口编辑器中使用。
还可以为许多输入参数输入常数值。
位和位序列:Bool(布尔或位值)、Byte(8 位字节值)、Word (16 位值)、DWord(32 位双字值)整型USInt(无符号8 位整数)、SInt(有符号8 位整数)、UInt(无符号16 位整数)、Int(有符号16 位整数)UDInt(无符号32 位整数)、DInt(有符号32 位整数)?浮点实数:Real(32 位实数或浮点值)、LReal(64 位实数或浮点值)时间和日期:Time(32 位IEC 时间值)、Date(16 位日期值)、TOD(32 位时间值)、DTL(12 字节日期和时间结构)字符和字符串:Char(8 位单字符)、String(最长254 个字符的可变长度字符串)数组数据结构:StructPLC 数据类型Variant 数据类型尽管以下BCD 格式不能作为数据类型使用,转换指令支持以下BCD 数字格式:Bool、Byte、Word 和DWord 数据类型整数数据类型整型数据类型(U = 无符号,S = 短,D = 双)。
PLC编程中形参与实参的区别
结合STEP7里具体点说可以是,假如我们有1个功能块FB1,功能FC1,几个FB1的背景数据块。
在FB1里写公式a+b+c,这里a,b,c就是形参。
而在FC1里我们定义在I0.0=1时调用FB1,并令a=1,b=2,c=3.此时1,2,3就是实参。
而定在I0.1=1时调用FB1,令a=10,b=20,c=30,此时10,20,30也是实参。
举例说明:
例:
3X + 2Y =5Z
当X=48,Y=22,求Z?
其中X,Y,Z就是形参。
48,22就是实参。
形参:全称为"形式参数"是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数.
实参:全称为"实际参数"是在调用时传递个该函数的参数.
形参:形式上的参数,没有具体值。
你在写一个方法的时候当然不知道具体值
而实参:是你调用方法时给的参数,给的是和所调用方法所匹配的具体值。
数值传递的时候,实参是不变的,形参是随着计算而变化的。
指针/引用传递的时候,行参怎么变~实参就怎么变。
实参就是送进去的东西,行参就是把送进来的东西进行加工。
加工完后就返回一个东西:返回值.
编程简单理解为“形参”与“实参”的相互作业,体现在具体编程中就是:在程序FB/FC中全部使用“形参”,这里的”形参“你可以随便定义,你主要知道它的意思就可以;在程序编好以后就回到主程序OB1,把你编好的FB/FC拿出来,因为原来FB/FC是一块一块的,所以在OB1中你想拿多少次FB/FC都是没有问题的,当然这个由你的实际需要决定哦,这个时候的FB/FC 就表现形式为一个”功能箱“,就好象在编程时我们要使用的什么计数器/计时器/SR/RS触发器等一样,我们需要的是给这些”功能箱“赋与它生命的”实参“,这个时候”功能箱“才会动起来,至于它怎么动,当然是你自己想的。
理解了”功能箱“FB/FC和OB1的联系与差别,你应该对于所谓的”结构化“有了一定的认识,需要注意一下的是FB是一个完全意义上的”功能箱“,FC是部分意义的”功能箱“,为什么这样说是因为FB和”功能箱“的使用完全相同,具体表现为FB的“形参”不要求全部有“实参”,但是FC“形参”与“实参”必须一一对应。
接下来我们解释一下FC/FB的参数和变量类型有什么区别,FB有静态(STAT)变量类型,静态变量存储在FB的背景DB,当FB这个”功能箱“使用完后那些个存储在静态(STAT)变量类型下的数据依然有效;FC有一个返回值变量(RET-VAL)用于返回调用的结果,但是使用OUT/IN-OUT类型的参数可以输出多个变量,比RET-VAL有更大的灵活度,所以很少使用这个RET-VAL,但是FB中间没有STA T是不可以想象的。
几点说明:1:“形参”即局部变量,“实参”即全局变量,“形参”在程序块的变量声明区中定义,“实参”则要在符号表中定义;
2:在编程前先要发一些时间规划好要用到的“实参”;
3:要知道编程有LAD/STL/FBD三种,但是不是所有的STL都可以转换为LAD/FBD;
4:对于在FB中定义好的“形参”,在创建对应的DB时会自动加载已经定义好的“形参”,但是需要注意的是要对FB的静态(STAT)变量类型的具体参数值定义;
5:在编程时要学会使用SHIFT这些组合键;
6:对于任何一个编程工作者多不可能记忆全部的指令/系统功能/功能块,在使用时要学习使用F1帮助。