From 47aece756f670dd80cf3d62be918f62a9ececf85 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期三, 30 九月 2026 14:56:49 +0800
Subject: [PATCH] 更新
---
scripts/j22-collector.ps1 | 29 +++++++++++++++++++++++++++--
1 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/scripts/j22-collector.ps1 b/scripts/j22-collector.ps1
index 9ddc921..daa3d5e 100644
--- a/scripts/j22-collector.ps1
+++ b/scripts/j22-collector.ps1
@@ -73,6 +73,24 @@
Write-Host $line
}
+# ---------------------------------------------------------------- 取值转换
+# 厂商列可能为 NULL:直接强转 [double]/[int] 会抛异常、让整个通道从此不再推进。
+# 缺列一律转成 JSON null,后端把测量列的缺失当"设备没给",不写零代替缺失。
+function To-Text($value) {
+ if ($null -eq $value -or $value -is [System.DBNull]) { return $null }
+ return [string]$value
+}
+
+function To-Int($value) {
+ if ($null -eq $value -or $value -is [System.DBNull]) { return $null }
+ return [int]$value
+}
+
+function To-Num($value) {
+ if ($null -eq $value -or $value -is [System.DBNull]) { return $null }
+ return [double]$value
+}
+
# ---------------------------------------------------------------- 读取位置
# 读取位置按「库里哪张表」记:"DB_<...>/Ws<N>_IV_0" -> 端点已确认的最后一条 record_time(FILETIME 刻度)
function Get-ReadPositions {
@@ -105,7 +123,9 @@
[void]$reader.GetValues($values)
[void]$rows.Add($values)
}
- return $rows
+ # 必须用逗号包一层返回:函数返回集合时 PowerShell 会拆一层,只有一行结果时
+ # 调用方 foreach 拿到的就不是"行"而是那一行的列值本身,$row[0] 会变成字符串首字符。
+ return ,$rows
}
finally { $reader.Close() }
}
@@ -215,7 +235,8 @@
$tablesSeen = 0
$emptyChannels = 0
- foreach ($database in (Find-ActiveDatabases $connection)) {
+ $databases = Find-ActiveDatabases $connection
+ foreach ($database in $databases) {
foreach ($table in (Find-ChannelTables $connection $database)) {
if ($table -notmatch '^Ws(\d+)_IV_0$') { continue }
$channel = [int]$Matches[1]
@@ -286,6 +307,10 @@
Save-ReadPositions $positions
Write-Log (" 本轮扫过 {0} 张通道表 / {1} 个通道;其中 {2} 个通道没有新行,推送 {3} 行" -f `
$tablesSeen, $seenChannels.Count, $emptyChannels, $sentRows)
+ if ($tablesSeen -eq 0) {
+ # 一张都没扫到通常是库列表不对(而不是这些库真的空):把库名念出来,便于现场判断
+ Write-Log (" 提示:这些库里都没有 Ws*_IV_0 表 —— " + (($databases | Select-Object -First 8) -join ', '))
+ }
return $sentRows
}
--
Gitblit v1.7.1