西门子模块总代理商-荆州市
在CALL指令中,FC、SFC、FB和SFB是作为地址输入的,逻辑块的地址可以是地址或符号地址。CALL指令与RLO和其他任何条件无关。在调用FB和SFB时,应提供与它们配套的背景数据块(Instance DB)。而调用FC和SFC时,则不需要背景数据块。处理完被调用的块后,调用它的程序继续其逻辑处理。在调用SFB和SFC后,寄存器的内容被。恢复。
使用CALL指令时,应将实参(Actual Parameter)赋给被调用的功能块中的形参(Formal Parameter),并保证实参与形参的数据类型一致。
使用语句表编程时,CALL指令中被调用的块应是已经存在的块,其符号名也应该是已经定义过的。
在调用块时可以通过变量表交换参数,用编程软件编写语句表程序时,如果被调用的逻辑块的变量声明表中有IN、OUT和IN_OUT类型的变量,则输入CALL指令后编程软件会自动地打开变量表,只需对各形参填写对应的实参即可。
在调用FC和SFC时,必须为所有的形参指定实参。调用FB和SFB时,只需指定上次调用后必须改变的实参。由于FB被处理后,实参储存在背景数据块中。如果实参是数据块中的地址,必须指定完整的地址,如DB1. DBW2。
逻辑块的IN(输入)参数可以指定为常数、地址或符号地址。OUT(输出)和IN_OUT(输入_输出)参数必须指定为地址或符号地址。
CALL指令保存被停止执行的块的编号和返回地址及当时打开的数据块的编号。此外,CALL指令关闭MCR区,生成被调用的块的局域数据区。
①CALL块调用指令:CALL<逻辑块标识符>。使用该指令,可以调用功能(FC)或功能块( SFB)、系统功能(SFC)或系统功能块(SFB),或调用由西门子公司提供的标准预编程块。使用CALL块指令,可以调用作为地址输入的FC和SFC或FB和SFB,与RLO或其他条件无关。如果使用该指令调用一个FB或SFB,必须提供具有相关背景数据块的程序块。在被调用块处理完后,调用块程序继续逻辑处理。逻辑块的地址可以指定,也可相对指定。在SFB、SFC调用后,保存寄存器的内容。
调用块可通过一个变量表与被调用块交换参数。
如果调用一个功能块(FB)、系统功能块(SFB)、功能(FC)或系统功能(SFC),并且被调用块的变量声明表中有IN、OUT和IN_OUT声明,则这些变量作为一个形式参数表被添加到调用块中。如果调用的是一个功能(FC)和系统功能(SFC),则必须在调用逻辑块中为声明的形式参数赋予实际参数。
如果调用的是功能块( FB)和系统功能块(SFB),只需定义与以前调用相比必须进行修改的实际参数。在处理完功能块后,实际参数保存在背景数据块中。如果实际参数是一个数据块,则必须指定完整的地址,如DB1、KBW2。
IN参数可作为常数、地址或符号地址定义。OUT和IN_OUT参数必须作为地址或符号地址定义。必须保证所有地址和常数与要传送的数据类型相符。
调用指令可将返回地址(选择符和相对地址)、两个当前数据块的选择符及MA位保存在B(块)堆栈中。此外,调用指令还可去激活MCR的相关性,然后生成被调用块的本地数据范围。
编程示例1:为FC6调用赋值参数
CALL FC6
形式参数 实际参数
NO OF TOOL :=MW100
TIMEOUT :=MW110
FOUND :=Q0.1
ERROR :=Q100.0
编程示例2:无参数调用一个系统功能( SFC)
CALL SFC43 说明:调用SFC43,重新触发看门狗定时器(无参数)
编程示例3:使用背景数据块DB1调用FB99
CALL FB99.DB1
形式参数 实际参数
MAX_RPM :=#RPM1_MAX
MIN_RPM :=#RPM1
MAX_ POWER :=#POWER1
MAX_TEMP :=#TEMP1
使用下面的例程你可以在S7-200CPU之间设置一个简单的Modbus通讯。
这个例子是关于Modbus功能码6的(写从站保持寄存器), 也可以作为其他所支持的功能码:1, 2, 3, 4, 5, 15 和16 的基本参数设置步骤 。
要求:
要使用Modbus协议必须先在STEP 7 Micro/Win上安装指令库 。
Modbus主站协议只支持STEP 7 Micro/Win V4.0 SP5及其以上版本.。
1. 硬件设置
2. 参数匹配
3. 指令库的存储地址
4. 保持寄存器值得传输
1. 硬件设置
例程中的Modbus通讯是在两个S7-200 CPU的0号通讯口间进行的(好每个CPU都有两个通讯口)。在主站侧也可以选择相应库文件 "MBUS_CTRL_P1" 和 "MBUS_MSG_P1"通过1号通讯口通信。通讯口1与Micro/WIN建立PG或PC连接,两个CPU的通讯口0通过PPI电缆进行连接(电缆的 针脚 连接为2,3,7,8)。
( 26 KB )
图. 01
2. 参数匹配
对于MODBUS通讯, 主站侧需要程序库 "MBUS_CTRL" 和 "MBUS_MSG",
从站侧需要程序库 "MBUS_INIT" and "MBUS_SLAVE"。
在 Micro/WIN 中您需要为主站和从站新建一个项目,程序与参数设置见图.02。
必须要保证主站与从站的“Baud”和"Parity"的参数设置要一致,并且程序块"MBUS_MSG"中的"Slave"地址要与程序块"MBUS_INIT"中的"Addr"所设置的一致 (见图. 02)。
Micro/WIN“系统块”中设置的0通讯口的波特率与MODBUS协议无关("Mode" = "1")。
图. 02
下面的表格列出了程序块各个参数选项及其意义
主站
MBUS_CTRL
参数 | 意义 | 选项 |
EN | 使能 | |
Mode | 协议选择 | 0=PPI, 1=MODBUS |
Baud | 传输速率 kbps | 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 |
Parity | 校验选择 | 0=无校验, 1=奇校验, 2=偶校验 |
Timeout | 从站的长响应时间 ms | |
Done | “完成”标志位 | |
Error | 错误代码 | 1) |
表 01
1) 参看STEP 7 Micro/WIN 帮助: "MODBUS主站执行MBUS_MSG时的错误代码MBUS_MSG" 。
MBUS_MSG
参数 | 意义 | 选项 |
EN | 使能 | |
First | 读写请求位 | |
Slave | 从站地址 | |
RW | "读" 或 "写" | 0=读, 1=写 |
Addr | 读写从站的数据地址 | 0 .. 128 = 数字量输出 Q0.0 .. Q15.7 |
Count | 位或字的个数 (0xxxx, 1xxxx) / words (3xxxx, 4xxxx) | |
DataPtr | V存储区起始地址指针 | |
Done | "完成" 标志位 | |
Error | 错误代码 | 1) |
表 02
1)参看STEP 7 Micro/WIN 帮助: "MODBUS主站执行MBUS_MSG时的错误代码MBUS_MSG" 。
从站
MBUS_INIT
参数 | 意义 | 选项 |
EN | 使能 | |
Mode | 协议选择 | 0=PPI, 1=MODBUS |
Addr | 从站地址 | |
Baud | 传输速率 kbps | 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 |
Parity | 校验 | 0=无校验, 1=奇校验, 2=偶校验 |
Delay | 超时时间 ms | |
MaxIQ | 可使用的数字输入输出点数 | 2) |
MaxAI | 可使用的模拟量输入点数 | 2) |
MaxHold | 保持寄存器字的大数量 | 2) |
HoldStart | 保持寄存器的起始地址(40001) | |
Done | 完成标志位 | |
Error | 错误代码 | 3) |
表 03
2) 大的地址取决于所用CPU的类型及其大值。
3)参看STEP 7 Micro/WIN 帮助: “MODBUS从站协议的错误代码”。
MBUS_SLAVE
参数 | 意义 | 选项 |
EN | 使能 | |
Done | 完成标志位 | |
Error | 错误代码 | 3) |
表 04
3)参看STEP 7 Micro/WIN 帮助: “MODBUS从站协议的错误代码” 。
3. 库的存储地址
项目完成后必须要在Micro/WIN中定义库的存储地址,当定义完存储区后, 要保证在任何情况下不能再被其它程序所使用 (主站侧: "DataPtr" + "Count" 从站侧: "HoldStart" + "MaxHold")。
图. 03
4. 保持寄存器值的传输
将程序下载到相应的CPU后,可以在状态表中给主站侧的V存储区赋值,然后监视从站的变化。
当主站的I0.0使能后,VW2中的内容就被发送到从站并写入从站的VW2 。
保持寄存器值的传输见图. 04。
指针"DataPtr" 代表了V区被读的起始地址。
参数 "Count" 表明了地址"Addr" = "4xxxx" (保持寄存器)以字为单位被读的个数。
主站中被读取的V存储区被写入地址为"Addr" = "40002" ("RW" = "1")的保持寄存器中。
保持寄存器是以字为单位工作的,它与从站的V区地址对应。
指针 "HoldStart" 明确了与保持寄存器起始地址40001相对应的V存储区的初始地址。
可以这样计算从站的V区目标指针:
2 * (Addr - 40001) + HoldStart = 2 * (40002 - 40001) + &VB0 = &VB2
另外,要保证"MaxHold" 定义的数据区能够包含主站侧所要写入的数据区 :
MaxHold >= Addr - 40001 + Count = 40002 - 40001 + 1 = 2
( 38 KB )
Fig. 04
关于STEP 7 Micro/WIN MOBDUS 库的更多信息可以参看 S7-200 系统手册 ( Entry ID 1109582) 和 STEP 7 Micro/WIN 帮助。
如何在 STEP 7 Micro/WIN 中找到 Modbus RTU 协议和 USS 协议操作库? |
说明:在 STEP 7 Micro/WIN 中,Modbus RTU 协议和 USS 协议操作库位于操作树的“库”文件夹中。MODBUS 函数库要求 STEP 7 Micro/WIN 为 V3.2 或更高版本。( 24 KB )图1: 添加函数库这些库是附加函数库,并非组态软件 STEP 7 Micro/WIN 的组成部分。您如果需要使用 Modbus RTU 协议,必须购买“SIMATIC STEP 7 Micro/WIN ADD ON: Function Library V1.1 (USS + MODBUS) for STEP 7 Micro/WIN 32”软件。这个可选附加函数库的订货号是 6ES7830-2BC00-0YX0。安装顺序:先安装“STEP 7 Micro/WIN 32 Toolbox V1.0”(包括库),然后安装“STEP 7 Micro/WIN”。注意:这个函数库包含可以在 STEP 7 Micro/WIN V3.2 中使用的 Modbus RTU 协议库和 USS 协议库。如果您安装了 STEP 7 Micro/WIN V4.0 SP5 或者更高版本,那么操作库中就会包含下列函数:Modbus RTU Master V1.2 对应端口 0 和端口 1Modbus RTU Slave V1.0 对应端口 0USS protocol V2.3 对应端口 0 和端口 1 |
每一次功能块(FB)或系统功能块(SFB)调用都必须有一个背景数据块。在上述举例中,数据块DB1必须在调用之前已存在。
②调用功能块指令:CALL FB nl、DB nl。使用该指令,可调用用户定义的功能块(FB)。调用指令能够调用作为地址输入的功能块,与RLO或其他条件无关。如果使用调用指令调用一个功能块,必须为它提供一个背景数据块。在处理完被调用块后,调用块程序继续处理。逻辑块的地址可以是地址,也可以是符号地址。
调用块可通过一个变量表与被调用的块交换参数。
如果调用一个功能,并且调用块的变量声明表中有IN、OUT和IN_OUT声明,则这些变量作为一个形式参数表被添加到用于调用块的程序中。
由于在功能块处理完之后,实际参数保存在背景数据块中,当调用功能块时,只需定义与以前调用相比必须修改的实际参数。如果实际参数是一个数据块,则必须指定完整的地址,如DB1、DBW2。
IN参数可作为常数、地址或符号地址定义。OUT和IN_OUT参数必须作为地址或符号地址定义。必须保证所有地址和常数与要传送的数据类型相符。
调用指令可将返回地址(选择符和相对地址)、两个当前数据块的选择符及MA位保存在B(块)堆栈中。此外,调用指令还可去激活MCR的相关性,然后生成被调用块的本地数据范围。
编程示例:使用背景数据块DB1调用FB99
CALL FB99,DB1
形式参数 实际参数
MAX_RPM :=#RPM1_MAX
MIN_RPM :=#RPM1
MAX_POWER :=#POWER1
MAX_TEMP :=#TEMP1
每一次功能块( FB)调用都必须有一个背景数据块。在上述举例中,数据块DB1必须在调用之前已存在。
③调用功能指令:CALL FCn。如果使用的是语句表编辑器(STL Editor),则n必须指向现有有效块。在使用之前,还必须定义符号名。
使用该指令,可调用功能( FC)。调用指令能够调用作为地址输入的功能(FC),与RLO或其他条件无关。在处理完被调用块后,调用块程序继续处理。逻辑块的地址可以指定,也可相对指定。
调用块可通过一个变量表与被调用的块交换参数。
如果调用一个功能,并且调用块的变量声明表中有IN、OUT和IN_OUT声明,则这些变量作为一个形式参数表被添加到用于调用块的程序中。
在调用功能时,必须在调用逻辑块中为声明的形式参数赋予实际参数。
IN参数可作为常数、地址或符号地址定义。OUT和IN_OUT参数必须作为地址或符号地址定义。必须保证所有地址和常数与要传送的数据类型相符。
调用指令可将返回地址(选择符和相对地址)、两个当前数据块的选择符及MA位保存在B(块)堆栈中。除此之外,调用指令还可去激活MCR的相关性,然后生成被调用块的本地数据范围。
编程示例:为FC6调用赋值参数
CALL FC6
形式参数 实际参数
NO OF TOOL :=MW100
TIMEOUT :=MW110
FOUND :=Q0.1
FRROR :=Q100.0
④调用多背景块指令:CALL#变量名。通过使用一个功能块的数据类型声明一个静态变量,可以生成一个多背景块。在程序元素目录中只包含已声明的多背景块。
⑤条件调用指令:CC<逻辑块标识符>。使用该指令,可以在RLO =1时调用一个逻辑块。该指令用于无参数调用FC或FB类型的逻辑块。除了不能使用调用程序传送参数之外,CC指令与CALL指令的用法相同。该指令可将返回地址(选择符和相对地址)、两个当前数据块的选择符及MA位保存在B(块)堆栈中,去激活MCR相关性,生成被调用块的本地数据范围,并开始执行调用的程序代码。
逻辑块的地址可以指定,也可相对指定。
编程示例1:
A I 2.0 说明:检查输入I2.0的信号状态
CC FC6 如果I2.0为“1”,调用功能FC6
A M 3.0 如果I2.0=1,从调用功能返回处执行;如果I2.0=0,直接在A I2.0语句后执行
如果CALL指令调用的是一个功能块(FB)或一个系统功能块(SFB),必须在语句中指定一个背景数据块(数据块号)。对于使用CC指令的调用,不能将一个数据块分配给语句中的地址。
根据所使用的程序段,程序编辑器( Program Editor)可以在从梯形逻辑编程语言转换为语句表编程语言过程中,生成UC指令或CC指令。
编程示例2(功能块FB1的背景数据块是DB1,“:=”前面是用符号地址表示的形参,“:=”后面是实参):
CALL FB1,DB1
Switch_On :=I20.0 说明:将实参I20.0赋给形参Switch_On
Switch_Off :=I20.1
Failure :=I20.2
ActuaLSpeed :=MW2
Engine_On :=Q5.0
Preset_Speed_Reached:=Q5.1
CALL SFC43 调用SFC43,重新触发监控定时器(无参数)
每一个FB和SFB都必须有一个背景数据块,上例中在调用FB1之前,FB1和背景数据块DB1必须是已经存在的。
⑥无条件调用指令UC( Unconditional Block Call)和条件调用指令CC( Conditional Block Call)。用于调用没有参数的FC和SFC。其使用方法与CALL指令相同,只是在调用时不能传递参数。CC指令在逻辑运算结果RLO =1时才调用块。用CC指令和UC指令调用块时,不能使用背景数据块。下面是使用CC指令和UC指令的例子。
A I0.1 说明:刷新RLO
CC FC6 如果RLO=1,调用没有参数的功能FC6
L IW4 从FC6返回后执行,或在I0.1=0时不调用FC6,直接执行本指令
UC FC2 无条件调用没有参数的功能FC2
在CALL指令中,FC、FB、SFC和SFB是作为地址输入的,其地址可以是地址,或者是符号地址。在调用FB和SFB时,必须提供与之相对应的背景数据块;而调用FC和SFC时,不需调用背景数据块。
在调用时,应将实参赋予被调用功能中的形参,并确保实参和形参数据类型相同,并且在FC和SFC的调用中,必须为所有形参指定实参,而调用FB和SFB,则只需指定上次调用后必须改变的实参。
FB功能块的具体调用(指令表程序)如下。
CALL FB1,DB1 说明:调用FB1,其背景数据块为DB1
MAX :=MW10 MAX为FB1定义的参数,将MW10的值赋予MAX
MIN :=MW20 将MW20的值赋予FB1参数MIN
POWER_ON :=I 0.0 将I0.0赋予FB1参数POWER_ON
POWER_OFF:=I 0.1 将I0.1赋予FB1参数POWER_OFF
程序中调用了背景数据块DB1,并将实参(“;=”之后的变量)赋予形参(“;”之前的变量)。
- 西门子模块总代理商-十堰市 2023-10-26
- 西门子模块总代理商-襄阳市 2023-10-26
- 西门子模块总代理商-黄石市 2023-10-26
- 西门子模块总代理商-武汉市 2023-10-26
- 西门子模块总代理商-湖北市 2023-10-26
- 西门子模块总代理商-驻马店市 2023-10-26
- 西门子模块总代理商-周口市 2023-10-26
- 西门子模块总代理商-信阳市 2023-10-26
- 西门子模块总代理商-商丘市 2023-10-26
- 西门子模块总代理商-南阳市 2023-10-26
- 西门子模块总代理商-三门峡市 2023-10-26
- 西门子模块总代理商-漯河市 2023-10-26
- 西门子模块总代理商-许昌市 2023-10-26
- 西门子模块总代理商-濮阳市 2023-10-26
- 西门子模块总代理商-安阳市 2023-10-26
联系方式
- 地址:上海杨浦 上海市松江区广富林路4855弄88号3楼
- 邮编:200093
- 电话:15821971992
- 经理:聂聪
- 手机:15821971992
- 传真:021-33556143
- QQ:2724917714
- Email:2724917714@qq.com