块编号 |
块名称 |
功能 |
是否必须 |
---|---|---|---|
FC2 |
CNT2_CTR |
控制FM 350-2模块做简单计数 |
是 |
FC3 |
CNT2_WR |
更新模块装载值、高低限值、比较值 |
否 |
FC4 |
CNT2_RD |
可一次读取4个通道的当前计数值或测量值 |
否 |
FC5 |
DIAG_RD |
在诊断中断中读取FM 350-2模板诊断信息 |
否 |
DB* |
Counter DB |
包含所有FM 350-2模板相关数据,UDT1格式 |
是 |
FC2"CNT2_CTR"功能块:
名称 | 行参类型 | 数据类型 | 含义 |
---|---|---|---|
DB_NO | 输入 | 字 | FM350-2模板对应的Counter_DB块编号 |
例程:
CALL "CNT2_CTR" //调用FC2
DB_NO :=W#16#1 //这里以DB1为例
注意:
Counter DB中软件门控制位如下表所示:
地址 | 名称 | 数据类型 | 初始值 | 含义 |
---|---|---|---|---|
23.0-23.7 | SW_GATE0 - 7 | BOOL | False | 依次为计数器通道0-7的软件门控制位 |
将上述地址位置‘1’,随着FC2的周期调用,即打开了对应计数器通道的软件门。置‘0’即为关闭软件门,计数器停止计数。
首先要将新的装载值、预备装载值、高低限值、比较值和JOB_WR.NO存放入Counter_DB。写操作任务号应写入DBB0中。详细信息见下表:
JOB_WR.No (注1) | Counter_DB地址(DBD) | Counter_DB名称 | 数据类型 | 初始值 | 含义 |
---|---|---|---|---|---|
0 |
— |
- |
- |
- |
无写操作。 |
10、11、12、13、14、15、16、17 | 52、56、60、64、68、72、76 | LOAD_VAL0-7 | DINT | L#0 |
|
20、21、22、23、24、25、26、27 | 84、88、92、96、100、104、108、112 | LOAD_PREPARE_VAL0-7 | DINT | L#0 |
|
30、31、32、33、34、35、36、37 | 116、120、124、128、132、136、140、144 | CMP_VAL0-7 | DINT | L#0 | 依次为更新计数器0至7的比较值 |
40 | 52至64 | LOAD_VAL0 to LOAD_VAL3 | DINT | L#0 |
|
41 | 68至80 | LOAD_VAL4 to LOAD_VAL7 | DINT | L#0 |
|
42 | 52至80 | LOAD_VAL0 to LOAD_VAL7 | DINT | L#0 |
|
50 | 84至96 | LOAD_PREPARE_VAL0 to LOAD_PREPARE_VAL3 |
DINT | L#0 |
|
51 | 100至112 | LOAD_PREPARE_VAL4 to LOAD_PREPARE_VAL7 |
DINT | L#0 |
|
52 | 84至112 | LOAD_PREPARE_VAL0 to LOAD_PREPARE_VAL7 |
DINT | L#0 |
|
60 | 116至128 | CMP_VAL0 to CMP_VAL3 | DINT | L#0 | 为同时更新计数器0至3的比较值 |
61 | 128至144 | CMP_VAL4 to CMP_VAL7 | DINT | L#0 | 为同时更新计数器4至7的比较值 |
62 | 116至144 | CMP_VAL0 to CMP_VAL7 | DINT | L#0 | 为同时更新计数器0至7的比较值 |
注释:
FC3"CNT2_WR"功能块:
名称 | 行参类型 | 数据类型 | 含义 |
---|---|---|---|
DB_NO | 输入 | 字 | FM350-2模板对应的Counter_DB块编号 |
RET_VAL | 输出 | INT | SFC58(WR_REC)的返回值 |
例程:更新计数器0的比较值
OPN DB1 //打开Counter_DB, 本例子中Counter_DB为DB1
L D#16#100 //新的比较值为16进制100
T DBD116
L 30 //装载写操作的工作任务号码,‘30’表示更新计数器0比较值
T DBB0
CALL "CNT2_WR" //调用FC3
DB_NO :=W#16#1
RET_VAL := MW0
Counter_DB的JOB_WR(DBB1)是写操作状态字,详细参考下表:
地址 | 名称 | 数据类型 | 初始值 | 含义 |
---|---|---|---|---|
1.0 | JOB_WR.BUSY | BOOL | FALSE | 1: 有写操作正在执行 |
1.1 | JOB_WR.DONE | BOOL | FALSE | 1:写操作已经完成 |
1.2 | JOB_WR.IMPOSS | BOOL | FALSE | 1:写操作无法被完成 |
1.3 | JOB_WR.UNKNOW | BOOL | FALSE | 1:无法识别的写操作 |
首先要写入读操作的工作任务号,JOB_RD.NO即为读操作工作任务号,在Counter_DB中的地址为DBB2,字节类型。详见下表:
JOB_WR.No (注1) | Counter_DB地址(DBD) | Counter_DB名称 | 数据类型 | 初始值 | 含义 |
---|---|---|---|---|---|
0 |
— |
- |
- |
- |
无读操作。 |
100 | 148 至 176 | ACT_CNTV0 ACT_MSRV0 ACT_CNTV1 ACT_MSRV1 ACT_CNTV2 ACT_MSRV2 ACT_CNTV3 ACT_MSRV3 |
DINT | L#0 |
|
101 | 180 至 208 | ACT_CNTV4 ACT_MSRV4 ACT_CNTV5 ACT_MSRV5 ACT_CNTV6 ACT_MSRV6 ACT_CNTV7 ACT_MSRV7 |
DINT | L#0 |
|
其次,调用FC4"CNT2_RD"功能块:
名称 | 行参类型 | 数据类型 | 含义 |
---|---|---|---|
DB_NO | 输入 | 字 | FM350-2模板对应的Counter_DB块编号 |
RET_VAL | 输出 | INT | SFC59(WR_REC)的返回值 |
例程:读取计数器0-3的计数值
L 100
T DB1.DBB2
CALL "CNT2_RD" //调用FC4
DB_NO :=W#16#1
//在本例子中Counter_DB为DB1
RET_VAL := MW2