编程

块编号
块名称
功能
是否必须
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格式

1. 控制计数器开始计数。调用FC2,计数器即开始依据DB中的控制字工作。

FC2"CNT2_CTR"功能块:

名称 行参类型 数据类型 含义
DB_NO 输入 FM350-2模板对应的Counter_DB块编号

例程:

CALL "CNT2_CTR" //调用FC2
DB_NO :=W#16#1 //这里以DB1为例

注意:

2. 打开软件门

Counter DB中软件门控制位如下表所示:

地址 名称 数据类型 初始值 含义
23.0-23.7 SW_GATE0 - 7 BOOL False 依次为计数器通道0-7的软件门控制位

将上述地址位置‘1’,随着FC2的周期调用,即打开了对应计数器通道的软件门。置‘0’即为关闭软件门,计数器停止计数。

3. 使用CNT2_WR Function (FC3),更新模块装载值、高低限值、比较值。

首先要将新的装载值、预备装载值、高低限值、比较值和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
  • 在计数模式下,依次为更新计数器通道0至7的装载值
  • 在频率(周期、转速)测量模式下,依次为更新计数器通道0至7的低限值
20、21、22、23、24、25、26、27 84、88、92、96、100、104、108、112 LOAD_PREPARE_VAL0-7 DINT L#0
  • 在计数模式下,依次为更新计数器通道0至7的预备装载值 (注2)
  • 在频率(周期、转速)测量模式下,依次为更新计数器通道0至7的高限值
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
  • 在计数模式下,为同时更新计数器通道0至3的装载值
  • 在频率(周期、转速)测量模式下,为同时更新计数器通道0至3的低限值
41 68至80 LOAD_VAL4 to LOAD_VAL7 DINT L#0
  • 在计数模式下,为同时更新计数器通道4至7的装载值
  • 在频率(周期、转速)测量模式下,为同时更新计数器通道4至7的低限值
42 52至80 LOAD_VAL0 to LOAD_VAL7 DINT L#0
  • 在计数模式下,为同时更新计数器通道0至7的装载值
  • 在频率(周期、转速)测量模式下,为同时更新计数器通道0至7的低限值
50 84至96 LOAD_PREPARE_VAL0 to
LOAD_PREPARE_VAL3
DINT L#0
  • 在计数模式下,为同时更新计数器通道0至3的预备装载值
  • 在频率(周期、转速)测量模式下,为同时更新计数器通道0至3的高限值
51 100至112 LOAD_PREPARE_VAL4 to
LOAD_PREPARE_VAL7
DINT L#0
  • 在计数模式下,为同时更新计数器通道4至7的预备装载值
  • 在频率(周期、转速)测量模式下,为同时更新计数器通道4至7的高限值
52 84至112 LOAD_PREPARE_VAL0 to
LOAD_PREPARE_VAL7
DINT L#0
  • 在计数模式下,为同时更新计数器通道0至7的预备装载值
  • 在频率(周期、转速)测量模式下,为同时更新计数器通道0至7的高限值
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的比较值

注释:

  1. JOB_WR.NO是写操作的工作任务号,初始值为B#16#0,数据类型为“BYTE”,在Counter_DB中的地址为DBB0。用户不光需要将新的数值写入Counter_DB,还应将工作任务号送入JOB_WR.NO以控制FC3执行不同操作。工作任务号的具体含义查看上表。
  2. 预备装载值是指当计数值超过高/低限后,再从预备装载值开始计数。

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:无法识别的写操作

4. 使用FC4(CNT2_RD)读取通道的当前计数值或测量值。

首先要写入读操作的工作任务号,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
  • 在计数模式下,读取计数器通道0至3的计数值
  • 在频率(周期、转速)测量模式下,读取计数器通道0至3的测量值
101 180 至 208 ACT_CNTV4
ACT_MSRV4
ACT_CNTV5
ACT_MSRV5
ACT_CNTV6
ACT_MSRV6
ACT_CNTV7
ACT_MSRV7
DINT L#0
  • 在计数模式下,读取计数器通道4至7的计数值
  • 在频率(周期、转速)测量模式下,读取计数器通道4至7的测量值

其次,调用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

之后,可在Counter_DB对应地址中读取计数值或测量值。