{%123} Cnt:=0; repeat Cnt:=Cnt+1; ExecAction("Time_Delay",300); ExecAction("Gauge_ReadSMBWord",AoWordL,AoWordH,AoWord,$1C); SN:=AoWord; until (SN>1)and(SN<65535)or(Cnt>3); OutputReport("SN","",floattostr(SN),1,65535,"","自动"); OutputBase("序列号为:"+floattostr(SN)+""); RecordData("SN",SN);
时间: 2023-11-10 07:57:38 浏览: 26
这段代码是一个重复循环,它的目的是读取一个名为 "SN" 的字,也就是一个 16 位的无符号整数。循环中,首先将一个名为 "Cnt" 的计数器初始化为0,然后在循环中将其递增。在每次循环中,它调用一个名为 "Time_Delay" 的函数并传递参数 300,以等待一段时间。接着,它调用 "Gauge_ReadSMBWord" 函数并传递参数 AoWordL,AoWordH,AoWord 和 $1C,用于读取 "SN" 字的值。将读取的值存储在一个名为 "SN" 的变量中。直到 "SN" 的值在 1 和 65535 之间,或者循环次数超过了 3 次,循环才会停止。最后,它会输出一个报告和一个记录,显示 "SN" 的值。
相关问题
SELECT caller_number, called_number FROM ( SELECT caller_number, called_number, call_start_time, IF(called_number=@prev_called_number, @cnt:=@cnt+1, @cnt:=1) AS cnt, @prev_called_number:=called_number FROM call_records, (SELECT @prev_called_number:=NULL, @cnt:=1) AS vars WHERE call_start_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR) AND caller_number NOT LIKE '0%' ORDER BY called_number, call_start_time ) AS t WHERE cnt >= 5
这是一个MySQL查询语句,它的作用是查询当前时间到前两小时的话单数据,然后统计同一个被叫号码总共被拨打的次数,如果超过5次,则认为异常,最后返回拨打号码和被叫号码。
具体的查询逻辑如下:
1. 查询话单表中,通话开始时间在当前时间到前两小时之间的记录。
```sql
WHERE call_start_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)
```
2. 排除掉拨打号码以0开头的记录。
```sql
AND caller_number NOT LIKE '0%'
```
3. 对查询结果按照被叫号码和通话开始时间进行排序,并使用MySQL的变量和IF函数,统计每个被叫号码被拨打的次数。
```sql
SELECT caller_number, called_number, call_start_time,
IF(called_number=@prev_called_number, @cnt:=@cnt+1, @cnt:=1) AS cnt,
@prev_called_number:=called_number
FROM call_records, (SELECT @prev_called_number:=NULL, @cnt:=1) AS vars
WHERE call_start_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)
AND caller_number NOT LIKE '0%'
ORDER BY called_number, call_start_time
```
4. 最后将统计结果作为子查询,筛选出被拨打次数超过5次的记录,并返回拨打号码和被叫号码。
```sql
SELECT caller_number, called_number
FROM (
SELECT caller_number, called_number, call_start_time,
IF(called_number=@prev_called_number, @cnt:=@cnt+1, @cnt:=1) AS cnt,
@prev_called_number:=called_number
FROM call_records, (SELECT @prev_called_number:=NULL, @cnt:=1) AS vars
WHERE call_start_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)
AND caller_number NOT LIKE '0%'
ORDER BY called_number, call_start_time
) AS t
WHERE cnt >= 5
```
注意:这个SQL查询语句只实现了被拨打次数超过5次的监控规则,还需要结合其他查询和处理,才能实现完整的异常监控。
IF(called_number=@prev_called_number, @cnt:=@cnt+1, @cnt:=1) AS cnt, @prev_called_number:=called_number是什么意思
这是一种MySQL中的高级用法,主要是为了实现在查询语句中动态计算某些值的功能,这里具体实现了在查询结果中添加一个名为`cnt`的字段,表示主叫号码在扫描时间范围内连续拨打同一被叫号码的次数。
`@prev_called_number`和`@cnt`是MySQL中的用户变量,它们的值可以在查询语句中被修改和使用。`@prev_called_number`用于保存上一个被叫号码,`@cnt`用于保存主叫号码连续拨打当前被叫号码的次数。当查询遍历到一个新的记录时,会先判断当前被叫号码是否和上一个记录的被叫号码相同,如果相同,则将`@cnt`加1,否则将`@cnt`重置为1。然后再将`@prev_called_number`更新为当前被叫号码。这样就可以动态地计算出主叫号码在扫描时间范围内连续拨打同一被叫号码的次数。
在本例中,这段代码被用在一个子查询中,目的是筛选出被叫号码被拨打次数大于等于5次的记录,从而触发监控规则1。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)