西门子PLC SCL等编程资料收集
借助AI咨询硬件相关问题如:PNP传感器信号线是输出正还是负
西门子PLC SCL视频教程
西门子SCL编程手册
西门子PLC SCL等编程
PLC程序归化
PLC FB函数的调用注意
西门子PLC 模拟量的换算函数
PCL变量实际工程规划
PLC各种存储区
西门子SCL参数类型转换
西门子WHILE DO
西门子SCL变量存储位置
西门子PLC 创建多路分支语句
如何设置S7-1200的掉电数据保持功能
西门子加减计数器
西门子CTD减计数器
西门子增计数器CTU
西门子TOF关短延迟定时器
西门子TON延迟定时器
寄存器地址意义
PLC 中M100.1、MB100、MW100、MD100的含义
浅析西门子S7-200PLC各数据存储区的含义
西门子PLC编程,存储区域 I Q M L D分别是什么意思
西门子SCL 生成脉冲TP定时器
STEP7中OB,FB,FC 和DB块有什么区别?相当于200系列中什么块
西门子PLC SCL语言开发学习笔记(二)
西门子PLC-1200 SCL语言开发学习笔记 (一)
西门子plc s7-200 中I、Q、M、SM、T、C、V、S、L分别指什么?
西门子PLC学习一
西门子PLC SCL等编程
定义所有用的的输入输出端口和存储区,也就是定义 PLC变量
定义新数据类型,便于自己要的结构,也就是添加新数据类型
全局数据块,定义全局用到的结构,也就是程序块->DB数据块
将全局数据块和对用的PLC变量映射,也就是程序块->FB块
编写FB函数实现功能块
1.先定义变量输入输出,和临时使用的变量
2.编写代码里面的变化访问是#+定义的变量名
6.主程序里调用FB函数和全局数据块里变量
西门子SLC系统自带函数是#开头如
#XXXX(IN:=全局变量块名".a,
PT:"全局变量块名".b,
Q=>"全局变量块名".c;
ET=>"全局变量块名".d);
自己函数调用
“函数名"(a:="全局变量块名".a,
b="全局变量块名".b,
c=>"全局变量块名".c,
d=>"全局变量块名".d
);
PLC程序归化
1,首选把需要的端口和存储变量定义

2添加.数据类型

3建立全局DB块

4.添加FC块也就是变量和全局DB块最映射

5.建立函数FB块

6.主程序调用

又一个FB函数块

PLC FB函数的调用注意
PLC FB模块调用它的参数是带参数名的输出是=>
入
"启动"(CLK:=12,OUT=>Q0.1)
西门子PLC 模拟量的换算函数
NORM_X 标准化 输入:最大值 最小值 输入值 输出0-1占比值 0-10V 0-100N
模拟量PCL 0-10V对应0-27648
SCALE_X 缩放
减速阀 0-1V 速度0-100%
压力传感器0-10 压力范围0-1000W
处理模拟量 NORM——X SCALE_X
处理工业流程 CASE ...OF
PCL变量实际工程规划
建立所用到的端口变量

添加PLC数据类型

添加DB块

建立FC块映射变量

建立FB

实际使用函数

PLC各种存储区
(一)数字量输入和输出映象区
1.输入映象寄存器(数字量输入映象区)(I)
(1)按“位”方式:从I0.0~I15.7,共有128点
(2)按“字节”方式:从IB0~IB15,共有16个字节
(3)按“字”方式:从IW0~IW14,共有8个字
(4)按“双字”方式:从ID0~ID12,共有4个双字
2.输出映像寄存器(Q)
(1)按“位”方式:从Q0.0~I15.7,共有128点
(2)按“字节”方式:从QB0~QB15,共有16个字节
(3)按“字”方式:从QW0~QW14,共有8个字
(4)按“双字”方式:从QD0~QD12,共有4个双字
(二)模拟量输入映象区和输出映象区
1.模拟量输入映象区(AI区)
从AIW0~AIW30,共有16个字,总共允许有16路模拟量输入。
2.模拟量输出映象区(AQ区)
从AQW0~AQW30,共有16个字,总共允许有16路模拟量输出。
(三)变量存储器(V)(相当于内辅继电器)
(1)按“位”方式:从V0.0~I5119.7,共有40960点。
(2)按“字节”方式:从VB0~VB5119,共有5120个字节
(3)按“字”方式:从VW0~VW5118,共有2560个字
(4)按“双字”方式:从VD0~VD5116,共有1280个双字
(四)位存储器(M)区
(1)按“位”方式:从M0.0~M31.7,共有256点。
(2)按“字节”方式:从MB0~MB31,共有32个字节
(3)按“字”方式:从MW0~MW30,共有16个字
(4)按“双字”方式:从MD0~MD28,共有8个双字
(五)顺序控制继电器区(S)
(1)按“位”方式:从S0.0~S31.7,共有256点。
(2)按“字节”方式:从SB0~SB31,共有32个字节
(3)按“字”方式:从SW0~SW30,共有16个字
(4)按“双字”方式:从SD0~SD28,共有8个双字
(六)局部存储器区(L)(相当于内辅继电器)
(1)按“位”方式:从L0.0~L63.7,共有512点。
(2)按“字节”方式:从LB0~LB63,共有64个字节
(3)按“字”方式:从LW0~LW62,共有32个字
(4)按“双字”方式:从LD0~LD60,共有16个双字
(七)定时器存储器区(T)
T0、T1、……、T255
S7-200有256个定时器。
(八)计数器存储器区(C)
计数器的编号:
C0、C1、……、C255
(九)高速计数器区(HSC)
高速计数器的编号为:HSC0、HSC1、……、HSC5。
(十)累加器区(AC)
S7-200CPU提供了4个32位累加器(AC0、AC1、AC2、AC3)。
西门子SCL参数类型转换
将参数从一个类型转换为另一种类型
REAL_TO_INT("参数")
"参数二":=INT_TO_DINT("参数一");
浮点数取整
<目标值>=ROUND<源值> 取就近的偶数
特别注意例子如21.3 它位于21 和 22 之间 那么取偶数就是22
CEIL 浮点数向上取整 默认为证书
CEIL("Tag_10")
CEIL_REAL("Tag_10") tag_10向上整后再变为浮点型 如 Tag10=0.5 那么向上取整为1 再转换为浮点那么是 1.00
FLOOR 浮点数向下取整
FLOOR("Tag_10")
FLOOR_REAL("Tag_10") tag_10向上整后再变为浮点型 如 Tag10=0.5 那么向下取整为0 再转换为浮点那么是0.00
TRUNC 截尾取整
NORM_X标准化
西门子WHILE DO
WHILE<条件> DO <执行>
END WHILE;
中间退出
EXIT
西门子SCL变量存储位置
变量根据类型选择存储位置

西门子PLC 创建多路分支语句
CASE <表达式> OF
<常量1>:<指令1>
<常量2>:<指令2>
<常量3>:<指令3>
<常量4>:<指令4>
。。。
ELSE <指令0>
END CASE
常数可以是范围 5..7
或数组
如何设置S7-1200的掉电数据保持功能
首先我们认识下S7-1200系列PLC的的内部存储区的构成:S7-1200的内部存储区包括:装载存储区(load memory)、工作存储区(work memory)和保持存储区(retain memory)。
?装载存储区(load memory):
是非易失性存储区,相当于计算机的硬盘。装载存储区用来存放用户项目文件(用户程序、数据和组态)。在不插存储卡的情况下,用户使用STEP
7软件下载项目即是下载到装载存储区。除了用户程序和数据,项目中的符号名和注释也会被下载到装载存储区中,极大地方便了用户的后期调试和维护。
?工作存储区(work memory):
是易失性存储区,相当于计算机的内存。CPU在执行用户程序时会将一些项目内容从装载存储区复制到工作存储区。断电后工作存储区中的内容会丢失,且不能被扩展。
?保持储区(retain memory):
非易失性存储区,CPU检测到电压降低到一定程度时,会将工作存储区中设置成掉电保持的数据保存到保持存储区中。
S7-1200系列PLC支持将位存储区(bit memory)、背景数据块(Insance-DB)及全局数据块(Global-DB)的数据设置为保持性(retentive)。
位存储区(bit memory)的设置总是从第0个字节开始,设置的方法如下:
在【PLC标签(PLC tags)】中,点击“电池”图标,如下图:
弹出如下对话框:
本例中我们把从MB0开始的100个字节设置成断电保持,如下图:
然后我们会发现我们之前建立的变量“Tag_2”,“Tag_3”和“Tag_4”的保持属性被勾选了,如下图:
此时位存储区的MB0~MB99已经具有断电保持的属性。
对于全局数据块而言,可以选择其中的某个(些)数据将其属性设置为【保持性(retain)】,这样就具有断电保持功能。如下图:
背景数据块的保持性设置,是在FB的参数输入中选择是否具有保持性,如下图:
S7-1200系列PLC的保持存储区的大小为10 KB。所有已经设置的、具有保持属性的存储区(位存储区、背景数据块和全局数据块)的大小的总和,不能超过10 KB。
怎样查看保持存储区的使用情况呢?
在离线的情况下,可以通过TIA-Portal环境下项目树的【程序信息(Program info)】查看当前存储区的使用情况,如下图:
在线的情况下可以通过诊断-存储区(Diagnostic-Memory)查看当前CPU保持存储区的使用情况,如下图:

西门子加减计数器
“IEC_Counter_0_DB_2".CTUD(
CU:=<操作数>,//加计数输入端
CD:=<操作数>,//减计数输入端
R:=<操作数>,复位输入端
LD=<操作数>,//装载预设值输入端
PV:=<操作数据>//计数器预设值
QU=><操作数> //加计数器运行状态
QD=><操作数> //减计数器运行状态
CV=> <操作数> //计数器当前计数值
参数说明 | 声明 | 数据类型 | 存储区 | 说明 |
CU | Input | BOOL | I Q M D L | 加计数输入端 |
CD | Input | BOOL | I Q M D L | 减计数器输入端 |
R | Input | BOOL | I Q M D L | 复位输入端 |
LD | Input | BOOL | I Q M D L P | 装载预设值与复位输入值 |
PV | Input | 整数 | I Q M D L P | 计数器预设值 |
QU | Output | BOOL | I Q M D L | 加计数器状态 |
QD | Output | BOOL | I Q M D L | 减计数器状态 |
CV | Output | 整数 CHAR WCHAR DATE | I Q M D L P | 当前计数器的值 |
表示CD来一次高电平计数-1 ,CU 来一次高电平计数+1
西门子CTD减计数器
“IEC_Counter_0_DB_2".CTD(
CD:=<操作数>,//计数输入端
LD=<操作数>,//装载预设值与复位输入值
PV:=<操作数据>//计数器预设值
Q=><操作数> //技术器运行状态
CV=> <操作数> //计数器当前计数值
参数说明 | 声明 | 数据类型 | 存储区 | 说明 |
CD | Input | BOOL | I Q M D L | 计数输入 |
LD | Input | BOOL | I Q M D L P | 装载预设值与复位输入值 |
PV | Input | 整数 | I Q M D L P | 计数器预设值 |
Q | Output | BOOL | I Q M D L | 计数器状态 |
CV | Output | 整数 CHAR WCHAR DATE | I Q M D L P | 当前计数器的值 |
表示CD来一次高电平计数-1
西门子增计数器CTU
“IEC_Counter_0_DB_2".CTU(
CU:=<操作数>,//计数输入端
R:=<操作数>,//复位操作数
PV:=<操作数据>//计数器预设值
Q=><操作数> //技术器运行状态
CV=> <操作数> //计数器当前计数值
参数说明 | 声明 | 数据类型 | 存储区 | 说明 |
CU | Input | BOOL | I Q M D L | 计数输入 |
R | Input | BOOL | I Q M D L P | 复位输入 |
PV | Input | 整数 | I Q M D L P | 置位输出Q的目标值 |
Q | Output | BOOL | I Q M D L | 计数器状态 |
CV | Output | 整数 CHAR WCHAR DATE | I Q M D L P | 当前计数器的值 |
表示CU来一次高电平计数+1
西门子TOF关短延迟定时器
“IEC_Timer_0_DB_2".TOF(IN:="关闭信号", //定时器启动输入端子
PT:=T#5S, //定时设置值
Q=>"状态位", //当定时器时间到达时Q端置0
ET=>"当前值") ;//定时器当前值存储
IN一直按下后ET从0开始增加当ET大于等于PT时候Q 置位1,如IN按下时间小于5秒时时不触发Q
西门子TON延迟定时器
“IEC_Timer_0_DB_2".TON(IN:="启动信号",PT:=T#5S,Q=>"状态位",ET=>"当前值")
IN一直按下后ET从0开始增加当ET大于等于PT时候Q 置位1,如IN按下时间小于5秒时时不户触发Q
寄存器地址意义
寄存器地址是方便我们写的程序取数据和写数据,也便于CPU去读写数据执行相应操作
PLC 中M100.1、MB100、MW100、MD100的含义
M100.1是位状态,为M区域(辅助继电器)的第100个字节的第1位。
MB100是字节类型地址,为M区域(辅助继电器)的第100个字节,一个字节8个位,所以MB100就包含了M100.0~M100.7。
MW100是字类型地址,为M区域(辅助继电器)的第100个字,一个字2个字节16个位,所以MW100就包含了MB100、MB101,即包含M100.0~M100.7、M101.0~M100.7这16个位。
MD100是字节类型地址,为M区域(辅助继电器)的第100个双字,一个双字2个字4个字节32个位,所以MD100就包含了MW100~MW102。
即包括MB100、MB101、MB102、MB103这4个字节,也包括M100.0~M100.7、M101.0~M101.7、M102.0~M102.7、M103.0~M103.7。

浅析西门子S7-200PLC各数据存储区的含义
今日咱们了解一下西门子S7-200PLC的接线与S7-200数据存储区:
首要,咱们看一下怎么接线:

S7-200数据存储区:
1. 输入/输出映像寄存器:S7-200 PLC编址规模(I0.0~I15.7)。 输入映像寄存器(该区域能够按位操作又称输入继电器)输入继电器线圈由外部信号驱动,常开触点和常闭触点供用户编程运用。
输出映像寄存器:S7-200 PLC编址规模(Q0.0~Q15.7)。输出映像寄存器(又称输出继电器)是用来将PLC的输出信号传递给负载,线圈用程序指令驱动。PLC的每一个I/O点都是一个断定的物理点。CPU 224主机有I0.0~I0.7,I1.0~I1.5共14个数字量输入端点,Q0.0~Q0.7、Q1.0、Q1.1共10个数字量输出端点。
2.变量存储器V
用以存储运算的中心成果和其它数据。CPU 224有VB0.0~VB5119.7的5K存储字节。可按位、字节、字或双字运用。
3. 内部标志位(M)存储区
M作为操控继电器(又称中心继电器),用来存储中心操作数或其它操控信息。
S7-200 PLC编址规模M0.0~M31.7,能够按位、字节、字或双字来存取存储区的数据。
4. 次序操控继电器(S)存储区
S又称状况元件,以完成次序操控和步进操控。
S7-200 PLC编址规模S0.0~S31.7,能够按位、字节、字或双字来存取数据。
5.特殊标志位(SM)存储器
① SMB0为状况位字节,在每次扫描循环结尾由S7-200 CPU更新,界说如下:
SM0.0 RUN状况监控,PLC在运转RUN状况,该位始终为1。
SM0.1 初次扫描时为1,PLC由STOP转为RUN状况时,ON(1态)一个扫描周期,用
于程序的初始化。
SM0.2 当RAM中数据丢失时,ON一个扫描周期,用于犯错处理。
SM0.3 PLC上电进入RUN方法,ON一个扫描周期。
SM0.4 分脉冲,该位输出一个占空比为50%的分时钟脉冲。用作时刻基准或简易延时。
SM0.5 秒脉冲,该位输出一个占空比为50%的秒时钟脉冲。可用作时刻基准。
SM0.6 扫描时钟,一个扫描周期为ON(高电平),另一为OFF(低电平)循环替换。
SM0.7 工作方法开关方位指示,0为TERM方位,1为RUN方位。为1时,使自由端
通讯方法有用。
② SMB1为指令状况位字节,常用于表及数学操作,部分位界说如下:
SM1.0 零标志,运算成果为0时,该方位1。
SM1.1 溢出标志,运算成果溢出或查出不合法数值时,该方位1 。
SM1.2 负数标志,数学运算成果为负时,该位为1。
6. 部分存储器(L)
S7-200有64个字节的部分存储器,编址规模LB0.0~LB63.7,其中60个字节能够用作暂时存储器或者给子程序传递参数,最终4个字节为系统保留字节。
7. 定时器(相当于时刻继电器)
S7-200 CPU中的定时器是对内部时钟累计时刻增量的设备,用于时刻操控。编址规模T0~T255(22X);T0~T127(21X)。
8. 计数器
计数器首要用来累计输入脉冲个数。有16位预置值和当时值寄存器各一个,以及1位状况位,当时值寄存器用以累计脉冲个数,计数器当时值大于或等于预置值时,状况方位1。 S7-200 CPU供给有三种类型的计数器,增计数、减计数、增/减计数。编址规模C0~C255(22X),C0~C127(21X)。
9. 模拟量输入/输出映像寄存器(AI/AQ)
S7-200的模拟量输入电路将外部输入的模拟量(如温度、电压)等转换成1个字长(16位)的数字量,存入模拟量输入映像寄存器区域。
AI编址规模AIW0,AIW2,……AIW62,开始地址界说为偶数字节地址,共有32个模拟量输入点。
S7-200模拟量输出电路用来将模拟量输出映像寄存器区域的1个字长(16位)数字值转换为模拟电流或电压输输出。
AQ编址规模AQW0,AQW2,……AQW62,开始地址也采用偶数字节地址,共有32个模拟量输出点
10. 累加器(AC)
累加器是用来暂存数据, S7-200 PLC供给了4个32位累加器AC0~AC3。累加器支持以字节(B)、字(W)和双字(D)的存取。。
11. 高速计数器(HC)
CPU 22X供给了6个高速计数器HC0、HC1……HC5 (每个计数器最高频率为30KHz)用来累计比CPU扫描速率更快的事件。高速计数器的当时值为双字长的符号整数。
西门子PLC编程,存储区域 I Q M L D分别是什么意思
I:输入地址,对应输入模块通道
q:输出地址,对应输出模块通道
M:辅助寄存器地址
L:局部变量地址,相当于程序中的内部变量地址
D:应该对应的书DB数据块地址。
西门子SCL 生成脉冲TP定时器
“IEC_Timer_0_DB_2".TP(IN:="启动信号",PT:=T#10S,Q=>"状态位",ET=>"当前值")
表示IN为真时那么Q会立即变为1 同时开始开始记时,ET输出当前值,当 ET=PT时Q状态变为0
参数说明 | 声明 | 数据类型 | 存储区 | 说明 |
IN | Input | BOOL | I Q M D L P | 启动输入 |
PT | Input | TIME | I Q M D L P | 定时时间设定值,PT参数的值必须为正数 |
Q | Output | BOOL | I Q M D L P | 在PT持续时间内保持置位状态的操作数 |
ET | Output | TIME | I Q M D L P | 当前定时器的值 |
实际代码
IF "开门按钮"=1 THEN
"安全门电磁阀":=1;
END IF;
IF"关门按钮"=1 THEN
"安全门面电磁阀":=0;
END IF;
"IEC_Timer_0_DB.TP(IN:="开门按钮"=1 OR "关门按钮"=1,
PT:T#6S,
Q=>"定时器状态信号",
ET=>"定时器当前值);
//安全指示灯控制程序
“安全门指示灯:="Clock_2Hz" AND "定时器状态信号"
STEP7中OB,FB,FC 和DB块有什么区别?相当于200系列中什么块
在OB中可以调用FC,在FC中可以调用FB.FB再调用DB,OB是主程序,FC和FB是用来实现控制功能的子程序。 DB是数据块。
西门子PLC SCL语言开发学习笔记(二)
今天来讲下scl两个关键的点
一、按键事件
比如地址I0.0是某个按钮的状态,他只有True和False两个状态,所以我们要获得按下事件需要我们自己模拟。
#KeyPress := "Btn1" AND NOT #LastKey;
#LastKey := "Btn1";
这样通过对#KeyPress判断是否为True即可获得一次点击事件,相当于 |P|
把上一次的存起来,然后判断按下,如果你想把按键放在松开时也可以。
因为大多数事情都是用按键触发的,掌握这一点才能开始跑代码。
二、定时器
PLC在梯形图中使用定时器很困难,比如TON 5秒,需要输入一直保持True,持续5s后输出变为True,TOF则需要输入从True变成False,然后持续5秒后输出False,自带各种逻辑,一旦碰到复杂的条件判断头都晕了,我是只能做到间隔时间打开几个灯,但要做另一个按钮还能间隔关上就不会了。
我们写程序的只需要一个计时器就好了,不需要你带这么多乱七八糟的逻辑,我们自己决定到时间了干嘛就好了。
1) 使用TON TORN
使用TON很简单,让一个变量保持True,然后判断输出是否时间到了,时间到了既可以做事情了,同时让输入变为False。
TORN则还含有Reset功能,他能累计计时,同时能取到计时了多久,下面这个程序展示了一开始就给TimerStart设置为True,开始计时并变灯的情况。
下面是代码块,不要忘了这是被循环不断执行的,大概功能是第五秒打开一个灯,第10秒再打开一个,到15秒重置, 为了代码简单理解就不加各种为了严谨的判断了
#TimerStart := TRUE; // 随便打开一下,就不写事件了
"IEC_Timer_0_DB".TONR(IN := #TimerStart,
PT := T#15S, // 计时15秒
Q => #TmpOut, //计时完毕,我们不去用这个
R:= #Reset,
ET => #Time1);// ET为取出计时了多久
IF #Reset THEN
#Reset := FALSE;
END_IF;
IF #Time1 >= T#5s THEN
"Light1" := TRUE;
END_IF;
IF #Time1 >= T#10s THEN
"Light2" := TRUE;
END_IF;
IF #TmpOut THEN
"Light1" := FALSE;
"Light2" := FALSE;
#Reset := TRUE;
END_IF;
2)时钟存储器位
首先右键PLC进入属性

找到时钟存储器位

我们把地址放到100那里去,这样子这几个存储器里,就会有震荡,不断在True False之间来回变化,比图1HZ会在一秒的开始变为True,到一半变为False,再下一秒开始变True,通过他的变化就能计时了
下面这个程序,再按下按钮1后亮一个灯,过5秒再亮一个,再过5秒再亮一个,关闭时也是间隔灭灯,不考虑打开过程中关闭等情况。
IF #TT <> "Clock_1Hz" THEN //一个不断根据震荡时间增加的Count 计数器
#Count += 1;
END_IF;
#TT := "Clock_1Hz";
#KeyPress := "Btn1" AND NOT #LastKey;
#LastKey := "Btn1";
IF #KeyPress AND NOT "Light1" THEN // 开灯事件
#TurnOn := TRUE;
#TurnOff := FALSE;
#Count := 0; //重置计数器
END_IF;
IF #KeyPress AND "Light1" THEN // 关灯事件
#TurnOn := FALSE;
#TurnOff := TRUE;
#Count := 0;
END_IF;
IF #TurnOn THEN // 持续处理开灯
"Light1" := TRUE;
IF #Count >= 5 * 2 THEN
"Light2" := TRUE;
ELSIF #Count >= 20 THEN
"Light3" := TRUE;
END_IF;
END_IF;
IF #TurnOff THEN
"Light1" := FALSE;
IF #Count >= 10 THEN
"Light2" := FALSE;
ELSIF #Count >= 20 THEN
"Light3" := FALSE;
END_IF;
END_IF;
3) 时间函数
其实PLC里面本来也有很多时间函数,比如获取当前机器时间,比较时间差等,我们完全可以很灵活的去使用这些方法,变得和编程无异,这里就不介绍了
结语:我们可以识别按钮事件,然后获得了好用的计时器后,scl的逻辑处理剩下的就都是写代码了和调方法了,没有什么能难倒我们程序员了
SCL逻辑比梯形图更严谨明白,复杂逻辑控制更简单,是我们程序员的好帮手。
以后会继续挖掘SCL的写法,教大家SCL能代替梯形图的写法,做到是个程序员就无门槛
暂时告一段落
西门子PLC-1200 SCL语言开发学习笔记 (一)
一、简介和背景
PLC一般使用梯形图开发,但是梯形图适合电工使用而不是程序员使用,对我们来说开发困难,门槛高,幸好PLC的开发标准还带了类pascal的高级语言,在西门子这里叫SCL语言,这对于我们程序员来说门槛就很低了。
要开发好复杂PLC逻辑,梯形图困难重重,市场上要价颇高,而使用SCL语言则非常合适处理复杂逻辑以及运算。
二、新建SCL程序块

在博图软件的项目视图中,便有添加新快,双击

推荐使用FB模块,便于存放变量,语言选择SCL
三、变量的创建和访问
在打开FB模块后,上方就是变量定义区

Input则是输入参数,Output是返回值或者理解为C# out关键字的输出变量,InOut则是类似Ref的既输入又输出的,Static变量才是我们可以保留的变量,Temp 相当于方法内的局部变量,这次执行过后会被重设
我们的代码会被放在一个方法块内
不用担心用Static后每次调用使用这个变量会冲突,每个使用它的地方都会新建一套数据块副本,相当于实例化一个类,调用实例方法,并非完全静态的变量。
要写代码当然要会访问各个能访问的变量,
FB里面定义的变量用#开头来访问
访问地址用%开头,


变量表里的变量相当于全局静态变量
我们给一些地址起了名字,既可以用 %I0.0 也可以用Btn1,最终都会变成”Btn1”。
访问别的实例的DB块中的变量则使用DB快的名字在用 . 进行访问,比如第一张图中块的 "块_2_DB_1".BtnPress
四、变量类型
大部分的变量类型大家基本都认识了,比较搞得是时间类型,简单说下
Time 相当于TimeSpan,表示一段时间 比如 T#5s表示5秒,再比如 T#10h2m
LTime 长的Time,表达的时间更长
Date 日期
Date And Time DT类型,也就是datetime
Time Of Day TOD 就是时间部分了
博图的帮助中也提供了详细的解释,帮助文档也是比较全面的
结束:
下期讲解在梯形图中重要且复杂难用又难以组合的,定时器,在SCL中如何处理
西门子plc s7-200 中I、Q、M、SM、T、C、V、S、L分别指什么?
输入继电器 I
输出继电器Q
通用辅助继电器M
特殊继电器SM
变量存储器V
局部变量存储器L
顺序控制继电器S
定时器T
计数器C
模拟量输入映像寄存器AI
模拟量输出映像寄存器AQ
高速计数器HC
累加器AC
西门子PLC学习一
当你添加完模块后就可以在博途软件里选择上模块就可以在属性里看到地址,一般不用动地址,要用那个地址直接属性里去看
西门子 PLC 的地址的分配方式
根据不同的 PLC 配置情况确定 I/O 地址是 PLC 编程的前提与基础,程序中的地址必须与实际物理连接点一一对应,才能确保动作的正确执行。当选择了 PLC 之后,首先需要确定的是系统中各 I/O 点的绝对地址。在西门子 S7 系列 PLC 中 I/O 绝对地址的分配方式共有固定地址型、自动分配型、用定义型 3 种。实际所使用的方式决定于所采用的 PLC 的 CPU 型号、编程软件、软件版本、编程人员的选择等因素。
1.固定地址型
固定地址分配方式是一种对 PLC 安装机架上的每一个安装位置(插槽)都规定地址的分配方式。其特点如下:
①PLC 的每一个安装位置都按照该系列 PLC 全部模块中可能存在的最大 I/O 点数分配地址。
例如:S7-300 系列 I/O 模块中最大开关量输入/输出为32 点,因此,每一个安装位置都必须分配 32 点地址:如果实际安装的模块只有 16 点输入,那么剩余的 I/O 地址将不可以再作为物理输入点使用。
②对于输入或输出来说, I/O 地址是间断的,而且,在
输入与输出中不可以使用相同的二进制字节与位。
例如: S7-300 系列 I/O 模块的第 1 安装位中安装了 32点输入模块, 地址数据中的 0.0~3.7 就被该模块所占用, 地址固定为 I0.0 ~13.7; 即使第 2 安装位中安装了 32 点输出模块,其输出地址也只能是 Q4.O ~Q7.7 ,而不可以是 QO.O ~Q3.7 ,在实际编程时 QO.O ~Q3.7 就变成了不存在的输出。同样,如果在第 3 安装位中接着安装了 16 点输入模块,其地址将为 I8.0~19.7 ,在实际编程时 I4.0 ~17.7 就变成了不
存在的输入。
以上分配原则对模拟量模块同样适用。
2.自动分配型
自动地址分配方式是一种通过自动检测 PLC 所安装的实际模块,自动、连续分配地址的分配方式。其特点如下:
①PLC 的每一个安装位置的 I/O 点数量无规定, PLC 根据模块自动分配地址。
例如:当每一个安装位置安装了 32 点模块后, PLC 自动分配给该模块 0.0~3.7 的地址:如果实际安装的模块只有16 点输入,那么 PLC 自动分配给该模块的地址就成为 0.0 ~1.7。
②输入与输出的地址均从 0.0 起连续编排、自动识别,I/O 地址连续、有序。
例如: PLC 的第 1 安装位中安装了 32 点输入模块,地址为 I0.0 ~13.7; 当第 2 安装位中安装了 32 点输出模块后,其输出地址自动分配为 QO.O ~Q3.7 。同样,如果在第 3 安装位中接着安装了 16 点输入模块,其地址将为 I4.0 ~15.7。
I/O 地址中没有不存在的输入与输出。
以上分配原则对模拟量模块同样适用。
对于 S7-300 系列,由于生产时间、软件版本的不同,安装于 PLC 主机上的部分 I/O 模块, CPU 的地址分配可能会出现断续的情况, CPU 仍然按照最大开关量输入/输出进行地址分配,当使用 32 点以下模块时,多余的地址不可以再使用。但是, 、对于远程 I/O 单元,地址总是连续分配的。
3.用户设定型
用户设定型分配方式是一种可以通过编程软件进行任意定义的地址分配方式。其特点如下:
①PLC 的每一个安装位置的地址可以任意定义, I/O 点数量无规定,但同 - PLC 中不可以重复。 ’
例如:当每一个安装位置安装了 32 点输入模块后,用户可以分配给该模块 I0.0 ~13.7 的地址; 也可以分配其他任意地址,如 I8.0 ~I11.7 等。但在分配 I0.0 ~13.7 后,后续的同类模块中不可以再使用地址 I0.0 ~13.~。
②输入与输出的地址既可以是间断的,也可以不按照次序排列。
例如: PLC 的第 1 安装位中安装了 32 点输入模块,地址定义为 I8.0 ~111.7; 第 2 安装位中再安装 32 点输入模块,地址定义为 I0.0 ~13.7 ,这样的分配同样也允许。
以上分配原则对模拟量模块同样适用。
各地址和数据关系



