- {{item.name}}
编程
- 0
- 47
编程
块编号 | 块名称 | 功能 | 是否必须 |
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为例
注意:
- 每个程序循环周期都必须调用FC2,用户可将上述程序添加到OB1中,如果有多个FM350-2模块,FC2需要被多次调用,每个FC2对用不同的DB块。
- FC2可以完成CPU与FM350-2模板之间的数据传递,即将Counter DB中的控制字(CONTROL_SIGNALS)传送至模板,并将FM350-2模板的状态(CHECKBACK_SIGNALS)读取到Counter DB。CONTROL_SIGNALS 与 CHECKBACK_SIGNALS的详细信息参考附录。
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的比较值 |
注释:
- JOB_WR.NO是写操作的工作任务号,初始值为B#16#0,数据类型为“BYTE”,在Counter_DB中的地址为DBB0。用户不光需要将新的数值写入Counter_DB,还应将工作任务号送入JOB_WR.NO以控制FC3执行不同操作。工作任务号的具体含义查看上表。
- 预备装载值是指当计数值超过高/低限后,再从预备装载值开始计数。
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对应地址中读取计数值或测量值。
剩余80%未阅读,请登录查看大全章节内容
- 评论
-
分享
扫码分享
- 收藏 收藏
- 点赞 点赞
- 纠错 纠错
{{item.nickName}}