Files
web-Iot/generate_doc.js

1100 lines
80 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const fs = require('fs');
const path = require('path');
const {
Document, Packer, Paragraph, TextRun, ImageRun,
HeadingLevel, AlignmentType, LevelFormat,
PageBreak, PageNumber, Header, Footer,
Table, TableRow, TableCell, WidthType,
BorderStyle, ShadingType, VerticalAlign,
TableOfContents, TabStopType, TabStopPosition,
Bookmark, InternalHyperlink,
} = require('docx');
const SCREENSHOT_DIR = path.join(__dirname, '.workbuddy', 'screenshots');
function getPngDimensions(filePath) {
const buf = fs.readFileSync(filePath);
const width = buf.readUInt32BE(16);
const height = buf.readUInt32BE(20);
return { width, height };
}
function createImage(screenshotName, maxWidth = 530) {
const filePath = path.join(SCREENSHOT_DIR, screenshotName);
if (!fs.existsSync(filePath)) return null;
const { width, height } = getPngDimensions(filePath);
const ratio = height / width;
const w = Math.min(maxWidth, width);
const h = Math.round(w * ratio);
return new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { before: 120, after: 200 },
children: [new ImageRun({
type: 'png',
data: fs.readFileSync(filePath),
transformation: { width: w, height: h },
altText: { title: screenshotName, description: screenshotName, name: screenshotName },
})],
});
}
function h1(text, bookmarkId) {
const children = [new TextRun({ text, bold: true })];
if (bookmarkId) {
return new Paragraph({
heading: HeadingLevel.HEADING_1,
children: [new Bookmark({ id: bookmarkId, children })],
});
}
return new Paragraph({ heading: HeadingLevel.HEADING_1, children });
}
function h2(text) {
return new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun({ text, bold: true })] });
}
function h3(text) {
return new Paragraph({ heading: HeadingLevel.HEADING_3, children: [new TextRun({ text, bold: true })] });
}
function p(text) {
return new Paragraph({ spacing: { after: 120 }, children: [new TextRun({ text, size: 22 })] });
}
function bullet(text) {
return new Paragraph({
numbering: { reference: 'bullets', level: 0 },
spacing: { after: 60 },
children: [new TextRun({ text, size: 22 })],
});
}
function caption(text) {
return new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { after: 200 },
children: [new TextRun({ text, italics: true, size: 18, color: '888888' })],
});
}
// callout box (shaded paragraph)
function callout(label, text) {
const border = { style: BorderStyle.SINGLE, size: 1, color: '0969DA' };
return new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
columnWidths: [9026],
rows: [new TableRow({
cantSplit: true,
children: [new TableCell({
borders: { top: border, bottom: border, left: border, right: border },
width: { size: 9026, type: WidthType.DXA },
shading: { fill: 'EAF2FC', type: ShadingType.CLEAR },
margins: { top: 120, bottom: 120, left: 200, right: 200 },
children: [
new Paragraph({ spacing: { after: 40 }, children: [new TextRun({ text: label, bold: true, size: 22, color: '0969DA' })] }),
new Paragraph({ children: [new TextRun({ text, size: 22 })] }),
],
})],
})],
});
}
const cjkFont = 'Microsoft YaHei';
const asciiFont = 'Arial';
const fontConfig = { ascii: asciiFont, hAnsi: asciiFont, eastAsia: cjkFont };
const doc = new Document({
styles: {
default: { document: { run: { font: fontConfig, size: 22 } } },
paragraphStyles: [
{ id: 'Heading1', name: 'Heading 1', basedOn: 'Normal', next: 'Normal', quickFormat: true,
run: { size: 32, bold: true, color: '0969DA', font: fontConfig },
paragraph: { spacing: { before: 360, after: 200 }, outlineLevel: 0, keepNext: false, keepLines: false } },
{ id: 'Heading2', name: 'Heading 2', basedOn: 'Normal', next: 'Normal', quickFormat: true,
run: { size: 28, bold: true, color: '1B232E', font: fontConfig },
paragraph: { spacing: { before: 280, after: 160 }, outlineLevel: 1, keepNext: false, keepLines: false } },
{ id: 'Heading3', name: 'Heading 3', basedOn: 'Normal', next: 'Normal', quickFormat: true,
run: { size: 24, bold: true, color: '3D4D5C', font: fontConfig },
paragraph: { spacing: { before: 200, after: 120 }, outlineLevel: 2, keepNext: false, keepLines: false } },
],
},
numbering: {
config: [
{ reference: 'bullets', levels: [{ level: 0, format: LevelFormat.BULLET, text: '\u2022', alignment: AlignmentType.LEFT, style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
{ reference: 'bullets2', levels: [{ level: 0, format: LevelFormat.BULLET, text: '\u25E6', alignment: AlignmentType.LEFT, style: { paragraph: { indent: { left: 1080, hanging: 360 } } } }] },
],
},
sections: [{
properties: {
page: {
size: { width: 11906, height: 16838 },
margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 },
},
},
headers: {
default: new Header({
children: [new Paragraph({
alignment: AlignmentType.RIGHT,
children: [new TextRun({ text: '光伏电站智能运维系统 · 使用说明', size: 16, color: '999999', font: fontConfig })],
})],
}),
},
footers: {
default: new Footer({
children: [new Paragraph({
alignment: AlignmentType.CENTER,
children: [
new TextRun({ text: '第 ', size: 16, color: '999999', font: fontConfig }),
new TextRun({ children: [PageNumber.CURRENT], size: 16, color: '999999' }),
new TextRun({ text: ' 页', size: 16, color: '999999', font: fontConfig }),
],
})],
}),
},
children: [
// === 封面 ===
new Paragraph({ spacing: { before: 3000 } }),
new Paragraph({ alignment: AlignmentType.CENTER, spacing: { after: 200 },
children: [new TextRun({ text: '光伏电站智能运维系统', size: 52, bold: true, color: '0969DA', font: fontConfig })] }),
new Paragraph({ alignment: AlignmentType.CENTER, spacing: { after: 200 },
children: [new TextRun({ text: '使用说明与功能介绍', size: 36, bold: true, color: '3D4D5C', font: fontConfig })] }),
new Paragraph({ alignment: AlignmentType.CENTER, spacing: { after: 100 },
children: [new TextRun({ text: '(面向运营团队)', size: 24, color: '6B7785', font: fontConfig })] }),
new Paragraph({ spacing: { before: 800 } }),
new Paragraph({ alignment: AlignmentType.CENTER,
children: [new TextRun({ text: '版本 V1.0', size: 22, color: '999999', font: fontConfig })] }),
new Paragraph({ children: [new PageBreak()] }),
// === 内容索引 ===
h1('内容索引'),
p('本文档详细介绍光伏电站智能运维系统各功能模块的作用与使用方法,帮助运营团队快速上手系统的各项功能。以下为各章节内容索引,可在 Word 中通过 Ctrl+点击标题快速跳转到对应章节。'),
new Paragraph({ spacing: { after: 120 } }),
// 手动内容索引表
(() => {
const tocBorder = { style: BorderStyle.SINGLE, size: 1, color: 'D6DEE8' };
const tocBorders = { top: tocBorder, bottom: tocBorder, left: tocBorder, right: tocBorder };
function tocRow(num, title, sections, anchor) {
return new TableRow({
cantSplit: true,
children: [
new TableCell({
borders: tocBorders, width: { size: 800, type: WidthType.DXA },
shading: { fill: 'EAF2FC', type: ShadingType.CLEAR },
margins: { top: 60, bottom: 60, left: 100, right: 100 },
verticalAlign: VerticalAlign.CENTER,
children: [new Paragraph({ alignment: AlignmentType.CENTER, children: [
new InternalHyperlink({
anchor: anchor,
children: [new TextRun({ text: num, bold: true, size: 22, color: '0969DA', font: fontConfig })],
}),
] })],
}),
new TableCell({
borders: tocBorders, width: { size: 8226, type: WidthType.DXA },
margins: { top: 60, bottom: 60, left: 150, right: 100 },
children: [
new Paragraph({ spacing: { after: 40 }, children: [
new InternalHyperlink({
anchor: anchor,
children: [new TextRun({ text: title, bold: true, size: 22, color: '0969DA', font: fontConfig })],
}),
] }),
new Paragraph({ children: [new TextRun({ text: sections, size: 18, color: '6B7785', font: fontConfig })] }),
],
}),
],
});
}
return new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
columnWidths: [800, 8226],
rows: [
tocRow('第一章', '系统概述', '系统简介 · 功能模块一览 · 运维闭环价值', 'ch1'),
tocRow('第二章', '系统登录', '功能说明 · 使用步骤 · 注意事项', 'ch2'),
tocRow('第三章', '总览首页', '核心指标卡片 · 趋势图表 · 运维信息 · 快捷操作 · 使用场景', 'ch3'),
tocRow('第四章', '设备管理', '设备总览 · 设备状态 · 航线任务 · 机器人任务 · 使用场景', 'ch4'),
tocRow('第五章', '视频监控', '视频墙与直播 · 云台与远程控制 · 回放与下载 · AI 智能分析 · 使用场景', 'ch5'),
tocRow('第六章', '实时监控', '实时功率与趋势 · 组串电流热力图 · 设备在线率 · 设备监控列表 · 三维地图定位 · 使用场景', 'ch6'),
tocRow('第七章', '告警中心', '告警概览 · 实时与历史告警 · 规则配置 · 订阅与通知 · 使用场景', 'ch7'),
tocRow('第八章', 'AI 诊断分析', '数据来源 · 热成像分析 · 缺陷检测 · 组串与逆变器 · 健康度评分 · 使用场景', 'ch8'),
tocRow('第九章', '清洗优化', '污染趋势与损失评估 · 智能清洗策略 · 收益精算 · 计划与记录 · 使用场景', 'ch9'),
tocRow('第十章', '工单任务', '工单概览 · 全生命周期管理 · AI 建议与关联 · 排班与日历视图 · 使用场景', 'ch10'),
tocRow('第十一章', '报表中心', '报表类型 · 周期与生成 · 核心指标 · 导出与订阅 · 使用场景', 'ch11'),
tocRow('第十二章', '系统设置', '基础设置 · 用户与角色 · 场站与设备接入 · 告警与工单模型 · 通知策略 · 系统维护 · 日志管理 · 视频管理', 'ch12'),
],
});
})(),
new Paragraph({ spacing: { after: 200 } }),
callout('阅读提示', '本文档按模块顺序编写,各模块之间数据互通、业务联动。建议初次阅读按顺序通读,日常使用时可按需查阅对应章节。'),
new Paragraph({ children: [new PageBreak()] }),
// === 第一章 系统概述 ===
h1('第一章 系统概述', 'ch1'),
h2('1.1 系统简介'),
p('光伏电站智能运维系统是面向集中式与分布式光伏电站的一体化运维管理平台。系统以巡检机器人、清洗机器人、割草机、无人机及各类摄像头为核心手段,将设备接入、实时监控、智能诊断、清洗优化、工单闭环和报表输出统一到一个平台,构建从数据采集到处置闭环的完整运维链条。'),
p('平台打通了 SCADA 实时遥测、无人机热成像、气象监测站与运维资产库等多源数据,通过 AI 模型对组件热斑、组串失配、遮挡风险、组件衰减等缺陷进行自动诊断,并一键生成清洗工单与检修工单,实现「发现问题—分析研判—派单处置—效果验证」的闭环管理。'),
callout('系统定位', '把分散的设备、告警、工单和报表收敛到一个平台,让电站运维从「被动抢修」转向「主动预防」与「智能决策」。'),
h2('1.2 系统功能模块一览'),
p('系统共包含以下十大核心功能模块,各模块之间数据互通、业务联动,形成完整的运维闭环:'),
bullet('总览首页:一屏掌握电站整体运行态势,包含发电量、功率、可用率等核心指标'),
bullet('设备管理:统一管理巡检机器人、清洗机器人、无人机、割草机、摄像头的状态与任务'),
bullet('视频监控:远程巡视、云台控制、录像回放与 AI 智能分析'),
bullet('告警中心:多源告警汇聚、分级管理、规则配置与通知推送'),
bullet('AI 诊断分析:热成像缺陷识别、组串分析、电站健康度评分与处置建议'),
bullet('清洗优化:污染趋势监测、智能方案推荐、收益精算与计划管理'),
bullet('工单任务:五大工单类型、全生命周期管理、AI 建议工单与日历排班'),
bullet('报表中心:八大类报表、多周期自动生成、导出与定时订阅推送'),
bullet('系统设置:用户角色、场站设备接入、告警工单模型、通知策略与日志管理'),
h2('1.3 运维闭环价值'),
p('系统通过以下闭环链条实现智能运维:'),
bullet('采:设备统一接入,实时采集遥测、视频、气象等多源数据'),
bullet('看:视频监控中心提供全天候远程巡视与 AI 周界安防'),
bullet('诊:AI 融合多源数据,自动识别组件缺陷并给出健康度评分'),
bullet('洗:智能推荐清洗方案,精算收益与成本,一键生成清洗工单'),
bullet('修:告警与 AI 诊断自动生成工单,全生命周期流转至闭环'),
bullet('报:八大类报表自动生成,导出分享或定时推送,量化运维成效'),
new Paragraph({ children: [new PageBreak()] }),
// === 第二章 系统登录 ===
h1('第二章 系统登录', 'ch2'),
p('系统登录是使用运维平台的第一步。通过输入账号和密码,运营人员可以进入系统查看电站运行情况、处理告警、管理工单等。本章介绍登录页面的功能与操作步骤。'),
createImage('00_login.png'),
caption('图 2-1 系统登录页面'),
h2('2.1 功能说明'),
bullet('输入用户名和密码,点击「登录」按钮进入系统'),
bullet('支持中英文切换:点击右上角语言选项,即可在中文和英文界面之间切换,方便国际化团队使用'),
bullet('登录成功后自动跳转到总览首页,开始日常运维工作'),
bullet('系统会记住上次选择的场站,下次登录后自动恢复到该场站视图'),
bullet('如忘记密码,请联系系统管理员在「用户管理」中重置密码'),
h2('2.2 使用步骤'),
p('按以下步骤完成登录:'),
bullet('第一步:在浏览器地址栏输入系统访问地址(由管理员提供)'),
bullet('第二步:在登录页面的「用户名」输入框中,填写管理员分配的用户名'),
bullet('第三步:在「密码」输入框中,填写对应的登录密码'),
bullet('第四步:如需切换界面语言,点击右上角语言按钮,选择「中文」或「English」'),
bullet('第五步:点击「登录」按钮,等待页面加载完成'),
bullet('第六步:进入系统后,可在页面顶部看到当前登录用户名和当前场站名称'),
h2('2.3 注意事项'),
bullet('请妥善保管登录账号和密码,不要与他人共享'),
bullet('长时间不操作时,系统会自动退出登录,需要重新登录'),
bullet('如果登录后看不到某些功能模块,可能是权限不足,请联系管理员调整角色权限'),
new Paragraph({ children: [new PageBreak()] }),
// === 第三章 总览首页 ===
h1('第三章 总览首页', 'ch3'),
p('总览首页是进入系统后看到的第一个页面,也是日常运维的指挥中枢。在这里可以一屏掌握电站的整体运行情况,包括今日发电量、当前功率、系统可用率、告警数量等核心指标,帮助运营人员快速判断电站运行是否正常。'),
createImage('01_home.png'),
caption('图 3-1 总览首页'),
h2('3.1 核心指标卡片'),
p('页面顶部以卡片形式展示电站最关键的运行指标,每张卡片对应一个维度的运行数据,数字实时更新。'),
bullet('今日发电量:展示当日累计发电量(kWh),并与日目标值对比,直观反映当日发电完成进度。进度条颜色为绿色表示达标,黄色表示接近目标,红色表示低于预期'),
bullet('当前功率:实时显示电站当前输出功率(kW),并与装机容量对比。如当前功率远低于装机容量且天气晴朗,可能存在设备异常,需进一步排查'),
bullet('系统可用率:反映设备正常运行的比例(百分比)。数值越高说明设备健康状态越好,一般应保持在 95% 以上。如低于 90%,建议立即查看告警'),
bullet('告警数量:显示当前未处理的告警总数。红色数字表示有严重告警需要立即处理,黄色表示有重要告警,灰色表示一般告警'),
bullet('节省运维成本:展示本月累计节省的运维费用(元),通过对比使用系统前后的运维成本差异计算,体现系统投入的价值'),
h2('3.2 趋势图表区'),
p('指标卡片下方是多种趋势图表,帮助深入分析发电效率和设备性能。'),
h3('发电趋势'),
bullet('展示近 7 天或近 30 天的发电量变化曲线'),
bullet('支持实际发电与预测发电对比,预测值由 AI 根据气象数据和历史发电量计算'),
bullet('如实际发电持续低于预测,提示可能存在组件衰减或遮挡问题'),
h3('辐照度与温度趋势'),
bullet('实时显示太阳辐照度(W/m\u00B2),反映光照强度'),
bullet('显示组件温度和环境温度,过高温度会影响发电效率'),
bullet('辐照度与发电功率应呈正相关,如出现偏差需排查设备'),
h3('逆变器效率对比'),
bullet('以柱状图对比各台逆变器的发电效率'),
bullet('效率明显偏低的逆变器可能存在故障或组串异常,建议结合 AI 诊断进一步排查'),
h3('组串电流热力图'),
bullet('以热力图方式展示各组件串的电流分布'),
bullet('颜色越深表示电流越大,颜色异常浅的区域可能存在组串断路或遮挡'),
bullet('是快速定位组件问题的直观工具'),
h2('3.3 运维信息区'),
p('页面中下部展示与运维执行直接相关的信息,帮助运营人员了解当前运维进展。'),
h3('运维任务进度'),
bullet('展示当前运维任务的完成情况,包括今日计划任务数、已完成数、进行中数'),
bullet('完成率以进度条显示,绿色表示进度良好'),
h3('近期巡检记录'),
bullet('列出最近执行的巡检任务摘要,包括巡检时间、执行设备、巡检结果'),
bullet('点击可查看巡检详情和发现的问题'),
h3('AI 分析摘要'),
bullet('AI 自动生成的电站运行分析结论,包括健康度评分、主要问题项和建议措施'),
bullet('是 AI 诊断分析模块的快速入口,点击「查看详情」可跳转到完整的 AI 诊断报告'),
h3('实时告警'),
bullet('以滚动列表方式展示最新产生的告警信息'),
bullet('每条告警显示级别图标(严重/重要/一般/提示)、标题、来源设备、发生时间'),
bullet('点击可查看告警详情并处理'),
h3('设备在线状态'),
bullet('按设备类型分类显示在线数量和总数:无人机、机器人、割草机、摄像头'),
bullet('离线设备会以红色标注,提醒关注'),
h3('天气信息'),
bullet('展示当前场站的实时气象数据:温度、湿度、风速、风向、辐照度'),
bullet('提供未来 24 小时天气预报,辅助安排户外作业'),
h2('3.4 快捷操作'),
p('首页还提供了多个快捷入口,方便一键完成常用操作。'),
bullet('一键生成清洗工单:根据 AI 清洗建议,快速创建清洗工单,无需手动填写参数'),
bullet('逆变器功率对比下钻:点击低效逆变器,直接跳转到设备详情页面'),
bullet('AI 发现异常设备优先复核:一键跳转到 AI 诊断页面,查看异常设备列表'),
bullet('场站切换:在顶部下拉菜单中切换不同场站,查看各站运行情况'),
bullet('新建工单:快速跳转到工单创建页面'),
h2('3.5 使用场景'),
bullet('每日早晨登录系统,先查看总览首页,确认昨日发电量是否达标、今日发电趋势是否正常'),
bullet('发现告警数量异常时,从首页直接点击进入告警中心处理'),
bullet('向领导汇报电站运行情况时,可直接截图首页指标卡片和趋势图表'),
new Paragraph({ children: [new PageBreak()] }),
// === 第四章 设备管理 ===
h1('第四章 设备管理', 'ch4'),
p('设备管理模块将电站内的所有设备——巡检机器人、清洗机器人、割草机、无人机、摄像头——统一纳入管理。在这里可以查看每台设备的实时状态、控制设备运行、管理航线任务和机器人作业计划,确保所有设备高效运转。'),
createImage('02_device_overview.png'),
caption('图 4-1 设备总览'),
h2('4.1 设备总览'),
p('设备总览页面展示全站所有设备的概况,是了解设备整体状态的入口。页面以表格和统计卡片两种方式呈现设备信息。'),
h3('统计概览'),
bullet('设备总数:显示当前场站接入的所有设备数量'),
bullet('在线设备数:当前处于在线状态的设备数量及占比'),
bullet('离线设备数:当前无法通信的设备数量,需重点关注'),
bullet('按设备类型分类统计:无人机、清洗机器人、巡检机器人、割草机、摄像头各自的在线/离线数量'),
h3('设备列表'),
bullet('设备名称:每台设备的唯一标识名称'),
bullet('设备型号:设备的品牌和型号信息'),
bullet('设备类型:无人机/机器人/割草机/摄像头等分类'),
bullet('在线状态:在线(绿色)、离线(灰色)、待机(蓝色)、运行中(橙色)、充电中(黄色)'),
bullet('电量百分比:显示设备当前电量,低于 20% 会以红色标注'),
bullet('信号强度:显示设备通信信号强度,弱信号可能影响数据传输'),
bullet('定位精度:显示 RTK 定位状态(固定解/浮点解/差分/惯导)'),
bullet('最后心跳时间:设备最后一次向系统发送数据的时间,超过 5 分钟未心跳可能离线'),
bullet('支持按设备名称搜索,按设备类型筛选,按状态排序'),
h2('4.2 设备状态'),
p('设备状态页面按设备类型分类展示,可以更细致地查看某一类设备的运行情况。'),
createImage('03_device_status.png'),
caption('图 4-2 设备状态'),
h3('无人机状态'),
bullet('显示无人机的飞行状态:待飞、飞行中、充电中、离线'),
bullet('飞行参数:当前高度、速度、航向角、剩余电量'),
bullet('定位信息:经纬度坐标、RTK 定位状态、卫星数量'),
bullet('载荷信息:搭载的摄像头类型(可见光/热成像/双光)'),
bullet('操作按钮:实时视频(查看无人机摄像头画面)、控制(进入控制面板)'),
h3('机器人状态'),
bullet('显示机器人的作业状态:待命、作业中、充电中、故障、离线'),
bullet('位置信息:当前坐标、所在区域、规划路径'),
bullet('作业参数:当前速度、累计作业里程、作业进度'),
bullet('传感器数据:温度、湿度、定位精度、网络延迟'),
bullet('操作按钮:实时视频、控制面板、路径查看'),
h3('割草机状态'),
bullet('显示割草机的作业状态和位置信息'),
bullet('割草进度和覆盖区域'),
bullet('电量和充电状态'),
h3('摄像头状态'),
bullet('显示摄像头的在线状态和视频流状态'),
bullet('摄像头类型:高清枪机、穹顶球机、全景摄像机'),
bullet('云台状态:是否支持云台控制'),
bullet('操作按钮:实时视频、回放、配置'),
h2('4.3 航线任务'),
p('航线任务页面管理无人机的飞行航线和执行的任务。'),
createImage('04_wayline.png'),
caption('图 4-3 航线任务'),
h3('航线管理'),
bullet('航线上传:将预先规划好的航线文件上传到系统'),
bullet('航线下载:下载已有航线文件到本地,用于编辑或备份'),
bullet('航线列表:显示所有航线名称、关联设备、创建时间、执行次数'),
bullet('航线预览:在地图上查看航线轨迹和覆盖区域'),
h3('任务执行'),
bullet('执行航线任务:选择航线和无人机,一键启动巡检'),
bullet('实时监控飞行参数:飞行时间、飞行高度、飞行速度、已飞距离'),
bullet('任务状态:新建、执行中、暂停、执行成功、执行失败、取消中'),
bullet('安全操作:紧急停止、一键返航,保障飞行安全'),
bullet('任务记录:查看历史航线任务的执行结果和巡检照片'),
h2('4.4 机器人任务'),
p('机器人任务页面是管理机器人作业的核心界面,包括任务排班、路径监控和作业统计。'),
createImage('05_robot_task.png'),
caption('图 4-4 机器人任务'),
h3('任务池与执行计划'),
bullet('任务池:查看所有待执行和执行中的机器人任务列表'),
bullet('创建任务:填写任务名称、选择执行设备、设置执行计划(按天/周/月重复执行)'),
bullet('任务执行计划:以时间线方式展示当日各机器人的作业安排'),
bullet('历史任务:查看已完成任务的执行记录、结果和作业轨迹'),
bullet('智能生成今日计划:系统根据设备状态、电量和区域分配,自动推荐当日作业计划'),
h3('运行统计'),
bullet('今日机器人计划数量与进行中任务数'),
bullet('作业中机器人数量与累计作业里程(米)'),
bullet('任务完成率:已完成任务数 / 总任务数'),
bullet('异常告警次数:作业过程中触发的告警数'),
bullet('设备在线率:在线设备数 / 总设备数,评估设备健康水平'),
h3('路径监控'),
bullet('在三维地图上实时查看机器人位置和移动轨迹,轨迹以彩色线条显示'),
bullet('显示规划区域(机器人计划作业的区域)和实际作业路径的对比'),
bullet('支持清空实时轨迹和规划区域,保持地图清晰'),
bullet('切换本地/远程控制模式:本地模式下机器人按预设路径自主作业;远程模式下可手动控制移动'),
h3('环境监测'),
bullet('实时显示当前温度、环境湿度、定位精度、网络延迟'),
bullet('自动提示风险区域(如积水区域、坡度过大区域),建议机器人避开'),
bullet('显示当前天气状况,判断是否适合户外作业'),
h2('4.5 使用场景'),
bullet('每日查看设备总览,确认所有设备在线;离线设备立即排查原因'),
bullet('安排无人机航线巡检前,先查看无人机电量和定位状态'),
bullet('通过机器人任务页面查看当日作业进度,确保按计划完成'),
bullet('设备出现故障时,在设备状态页面查看详细信息并联系维修'),
new Paragraph({ children: [new PageBreak()] }),
// === 第五章 视频监控 ===
h1('第五章 视频监控', 'ch5'),
p('视频监控模块是运维人员的「眼睛」。通过接入场站内各类摄像头,可以实现远程巡视、云台控制、录像回放和 AI 智能分析。无论是日常巡检还是应急响应,视频监控都能提供直观的现场画面,减少现场人员出动次数。'),
createImage('08_monitor.png'),
caption('图 5-1 视频监控中心'),
h2('5.1 视频墙与直播'),
p('视频墙支持多画面同时显示,方便同时监控多个区域,无需切换查看。'),
h3('画面布局'),
bullet('单画面:全屏显示一个摄像头画面,适合详细查看'),
bullet('四画面:2×2 布局,同时查看 4 个摄像头,适合小场站'),
bullet('九画面:3×3 布局,同时查看 9 个摄像头,适合中型场站'),
bullet('十六画面:4×4 布局,同时查看 16 个摄像头,适合大型场站'),
bullet('自定义布局:可自由选择哪些摄像头显示在哪个画面位置'),
h3('画质与操作'),
bullet('画质切换:流畅(省流量)、标清、高清、超清,适应不同网络环境'),
bullet('截图:对当前画面截取图片,自动保存到系统'),
bullet('录制:手动开始/停止录制当前画面,生成录像文件'),
bullet('全屏:将画面切换到全屏显示,再按 ESC 退出'),
bullet('静音:关闭/开启视频声音'),
h3('摄像头列表'),
bullet('左侧设备列表展示所有摄像头及其在线状态(绿色圆点=在线,灰色=离线)'),
bullet('支持按名称或安装位置搜索摄像头,快速定位'),
bullet('点击摄像头名称即可将其画面加载到当前选中的画面窗口'),
h2('5.2 云台与远程控制'),
p('通过云台控制功能,可以远程调整支持云台的摄像头的方向和焦距,实现全方位巡视。'),
h3('云台方向控制'),
bullet('俯仰控制(上下):调整摄像头仰角和俯角'),
bullet('偏航控制(左右):调整摄像头水平旋转角度'),
bullet('八方向摇杆:通过界面方向按钮控制云台移动'),
bullet('步进/连续模式:步进模式下每点击一次移动固定角度;连续模式下按住持续移动'),
h3('缩放控制'),
bullet('放大/缩小:调整摄像头焦距,拉近或拉远画面'),
bullet('数字变焦:在光学变焦基础上进一步放大画面区域'),
bullet('聚焦调节:手动调整聚焦,使画面更清晰'),
h3('语音与驱避'),
bullet('二路径对讲:通过摄像头麦克风和扬声器与现场人员双向语音通话'),
bullet('远程驱避:触发摄像头搭载的声光驱避装置,发出警报声和闪烁灯光,驱离入侵者'),
bullet('AI 可视跟踪:开启后摄像头自动跟踪画面中的移动目标,保持目标在画面中心'),
h3('预设位与巡航'),
bullet('预设位:保存当前云台角度和焦距为预设位,一键回到该角度'),
bullet('自动巡航:设置多个预设位,摄像头按顺序自动巡航巡视'),
h2('5.3 视频回放与下载'),
p('历史录像可以随时回放和下载,用于事后追溯和证据留存。'),
createImage('07_realtime.png'),
caption('图 5-2 实时监控页面'),
h3('录像检索'),
bullet('按设备检索:选择摄像头,查看其历史录像'),
bullet('按时间检索:在时间轴上选择日期和时间段,快速定位录像'),
bullet('按录像类型检索:连续录像、事件触发录像、手动录制'),
bullet('事件时间线:在回放界面标注告警事件发生的时间点,点击即可跳转到对应画面'),
h3('回放操作'),
bullet('播放/暂停/快进/快退:支持 2×、4×、8× 倍速回放'),
bullet('时间轴拖拽:直接拖动时间轴到目标时间点,快速定位'),
bullet('画面截图:在回放过程中截取关键画面'),
bullet('片段标记:对重要片段添加标记和备注,方便后续查找'),
h3('录像下载'),
bullet('选择时间段,下载录像文件到本地'),
bullet('查看下载状态:下载中、已完成、下载失败'),
bullet('文件详情:文件名、文件大小、录制时间、摄像头信息'),
bullet('存储用量趋势:查看录像存储空间的使用情况和增长趋势,提醒及时清理'),
h2('5.4 AI 视频智能分析'),
p('系统内置 AI 视频分析能力,可自动识别安全事件并告警,实现无人值守的智能安防。'),
h3('智能检测类型'),
bullet('周界入侵检测:自动识别人员翻越围栏或闯入禁入区域,触发告警并截图'),
bullet('烟火识别:检测到火焰或烟雾时立即告警,支持白天和夜间识别'),
bullet('设备区域滞留检测:发现人员在设备区域长时间停留时告警,防范人为破坏'),
bullet('运动检测:检测画面中的异常移动,如动物闯入、物体掉落'),
bullet('区域徘徊分析:识别人员在特定区域反复徘徊的可疑行为'),
h3('告警快照与事件'),
bullet('近期告警快照:以缩略图方式展示最近触发的 AI 告警截图,快速了解现场情况'),
bullet('今日告警事件:按时间列表展示当日所有 AI 检测到的事件'),
bullet('点击告警快照可查看大图并跳转到对应录像回放'),
h2('5.5 使用场景'),
bullet('日常巡视:每天上午通过视频墙巡视全场站,查看设备外观是否正常'),
bullet('告警核实:收到告警后,第一时间调出对应摄像头画面核实情况'),
bullet('安防巡查:夜间通过 AI 周界入侵检测,实现无人值守安防'),
bullet('事故追溯:发生设备故障或安全事件后,回放历史录像查找原因'),
new Paragraph({ children: [new PageBreak()] }),
// === 第六章 实时监控 ===
h1('第六章 实时监控', 'ch6'),
p('实时监控模块是电站设备运行状态的「全景窗口」。与视频监控侧重画面不同,实时监控聚焦数据——实时功率、逆变器效率、组串电流、设备在线率,结合三维地图设备定位和无人机/机器人控制,让运维人员在一个页面上同时掌握「设备在哪里、运行得好不好、效率高不高」。'),
createImage('07_realtime.png'),
caption('图 6-1 实时监控中心'),
h2('6.1 实时监控中心'),
p('进入实时监控模块后,首先看到的是监控中心页面,页面以卡片和图表组合的方式,集中展示电站最核心的实时运行数据。'),
h3('页面标题与布局'),
bullet('页面顶部标题为「实时监控中心」,显示当前场站名称和最后更新时间'),
bullet('支持手动刷新数据,点击右上角刷新按钮即可立即更新所有指标'),
bullet('页面布局分为左右两列:左侧为设备列表和地图,右侧为功率图表和统计卡片'),
h2('6.2 实时功率与趋势'),
p('实时功率是反映电站当前发电能力的最直接指标,页面提供功率曲线图和逆变器功率对比两个维度的分析。'),
h3('功率曲线'),
bullet('以折线图展示当日实时功率的变化趋势(横轴为时间,纵轴为功率 kW)'),
bullet('支持选择「今日」「昨日」「近 7 天」等不同时间范围查看'),
bullet('功率曲线在白天应呈倒 U 形(日出上升、中午峰值、日落下降),如出现异常骤降,需排查设备或天气原因'),
bullet('曲线下方显示当前功率数值和峰值功率'),
h3('逆变器功率对比'),
bullet('以柱状图对比各台逆变器的当前输出功率(kW)'),
bullet('每根柱子代表一台逆变器,柱高即功率大小'),
bullet('效率明显偏低的逆变器以不同颜色标注,提示可能存在组串异常或设备故障'),
bullet('点击某台逆变器柱子可查看该逆变器的详细运行数据'),
h2('6.3 组串电流热力图'),
p('组串电流热力图以颜色深浅直观展示每个组串的电流分布,是快速发现异常组串的最有效工具。'),
bullet('以矩阵色块方式展示全场站所有组串的实时电流值(单位:A)'),
bullet('颜色越深(绿色)表示电流正常,颜色越浅或偏红表示电流异常偏低'),
bullet('异常偏低的组串可能存在遮挡、断路、组件衰减等问题,需进一步排查'),
bullet('鼠标悬停在某个色块上,可显示该组串的编号、所属逆变器、电流值和状态'),
bullet('点击异常组串可直接跳转到 AI 诊断分析页面,查看详细诊断结果'),
h2('6.4 设备在线率与状态'),
p('设备在线率统计帮助快速评估设备整体健康水平。'),
bullet('以环形图展示设备在线率(在线设备数 / 总设备数)'),
bullet('按设备类型分类显示在线数量和总数:无人机、机器人、割草机、摄像头、逆变器'),
bullet('离线设备列表:显示当前离线的设备名称、类型、最后通信时间'),
bullet('点击离线设备可查看设备详情和通信中断原因'),
h2('6.5 设备实时监控列表'),
p('设备实时监控列表以表格方式展示所有设备的详细运行数据,是日常设备状态查看的主要界面。'),
h3('列表内容'),
bullet('设备名称:每台设备的唯一标识名称'),
bullet('设备类型:无人机、机器人、割草机、摄像头、逆变器、汇流箱等'),
bullet('设备状态:在线(绿色)、离线(灰色)、运行中(蓝色)、待机(橙色)、故障(红色)'),
bullet('实时数据:逆变器显示实时功率(kW),机器人显示作业里程,摄像头显示视频流状态'),
bullet('通信状态:通讯正常/通讯中断/通信弱'),
bullet('最后更新时间:设备最后一次上报数据的时间'),
bullet('操作按钮:实时视频(查看画面)、控制(进入设备控制面板)'),
h3('筛选与搜索'),
bullet('按设备类型筛选:只看无人机/只看机器人/只看摄像头等'),
bullet('按状态筛选:只看在线/只看离线/只看故障'),
bullet('按设备名称搜索:输入关键词快速定位设备'),
bullet('支持分页浏览,每页可设置显示条数'),
h2('6.6 三维地图设备定位'),
p('实时监控页面内置三维地图,在场站地图上实时标注所有设备的位置,直观展示设备分布和移动轨迹。'),
bullet('在 Cesium 三维地图上以图标标注每台设备的实时位置'),
bullet('不同设备类型使用不同图标:无人机(飞机图标)、机器人(机器人图标)、摄像头(摄像机图标)、逆变器(闪电图标)'),
bullet('在线设备图标为彩色,离线设备图标为灰色'),
bullet('机器人移动时实时更新位置,并在地图上留下移动轨迹线'),
bullet('点击设备图标可弹出设备详情卡片,显示设备名称、状态、实时数据'),
bullet('点击详情卡片中的「实时视频」按钮,可直接查看该设备的摄像头画面'),
bullet('点击「控制」按钮,可直接进入设备控制面板,远程操作设备'),
h2('6.7 任务池与航线管理'),
p('实时监控页面还集成了任务池和航线管理功能,方便在监控设备的同时管理作业任务。'),
h3('任务池'),
bullet('显示当前选中设备的任务列表(待执行和执行中)'),
bullet('点击刷新按钮可手动更新任务池'),
bullet('查看任务名称、状态、计划执行时间'),
h3('航线列表'),
bullet('显示无人机的航线列表,包括航线名称、关联设备、创建时间'),
bullet('支持执行航线任务:选择航线和无人机,一键启动巡检'),
bullet('支持暂停任务、恢复任务、取消任务'),
bullet('支持一键返航:紧急情况下命令无人机立即返航'),
h2('6.8 使用场景'),
bullet('每日早晨打开实时监控中心,查看今日功率曲线是否正常上升、设备在线率是否达标'),
bullet('发现某台逆变器功率偏低时,结合组串电流热力图快速定位异常组串'),
bullet('在三维地图上查看机器人实时位置,确认是否按计划路径作业'),
bullet('设备离线时,从设备列表查看最后通信时间,联系现场排查'),
bullet('向领导汇报电站实时运行情况时,直接截图功率曲线和逆变器对比图'),
new Paragraph({ children: [new PageBreak()] }),
// === 第七章 告警中心 ===
h1('第七章 告警中心', 'ch7'),
p('告警中心是运维响应的「神经中枢」。系统自动收集设备故障、传感器越限、视频异常等多源告警信息,按严重程度分级管理,帮助运营人员第一时间发现和处理问题,防止小故障演变成大事故。'),
createImage('09_alerts.png'),
caption('图 7-1 告警中心'),
h2('7.1 告警概览与统计'),
p('告警概览页面提供告警数据的全局视图,帮助快速评估当前风险水平。'),
h3('核心指标'),
bullet('今日总告警数:今日产生的所有告警数量'),
bullet('严重告警数:需要立即处理的最高级别告警数量,红色标注'),
bullet('待处理数:尚未被任何人员确认或处理的告警数量'),
bullet('处理率:已处理告警数 / 总告警数,反映告警处置效率'),
h3('趋势与分布'),
bullet('七日趋势图:展示近 7 天每日告警数量的折线图,观察告警的变化走势'),
bullet('告警级别分布饼图:严重、重要、一般、提示四级,按比例可视化展示'),
bullet('告警类型比例:展示各类告警(设备故障/传感器越限/视频异常等)的占比,发现高频问题'),
bullet('告警状态统计:待处理、已确认、已处理、已关闭、已忽略的各状态数量'),
bullet('告警来源分布:按设备类型统计告警来源,快速定位问题设备'),
h2('7.2 实时与历史告警'),
p('实时告警流和历史告警查询是日常处理告警的主要界面。'),
h3('查看告警'),
bullet('实时告警:滚动展示最新产生的告警,按时间倒序排列,最新告警在顶部'),
bullet('历史告警:按时间范围、告警级别、告警类型、来源设备等条件查询历史记录'),
bullet('每条告警包含:告警标题、来源设备、告警级别(严重/重要/一般/提示)、发生时间、当前状态'),
bullet('点击告警标题可查看详情:告警描述、触发条件、关联设备信息、根因分析'),
bullet('支持按告警级别筛选:只看严重告警、只看重要告警等'),
bullet('支持按处理状态筛选:只看待处理、只看已处理等'),
h3('处理告警'),
p('处理告警遵循以下流程,确保每个告警都有始有终:'),
bullet('确认告警:确认已收到告警,标记为「已知」,表示运维人员已知晓该告警'),
bullet('处理告警:填写处理结果(如「更换了故障组件」)和处理备注(详细处置过程),记录处置过程'),
bullet('关闭告警:问题彻底解决后关闭告警,完成闭环,状态变为「已关闭」'),
bullet('忽略/误报:对于无需处理或系统误报的告警,标记为「忽略」或「误报」,不再重复通知'),
bullet('从告警创建工单:一键将告警转为工单,自动填充告警信息和关联设备,派发给维修人员处理'),
bullet('导出告警:将当前筛选的告警列表导出为 Excel 文件,用于汇报或存档'),
h3('告警详情页'),
bullet('告警基本信息:标题、级别、来源、发生时间、持续时长'),
bullet('关联设备信息:设备名称、型号、位置、当前状态'),
bullet('告警描述:详细描述告警内容和触发条件'),
bullet('处理记录:处理人、处理时间、处理结果、处理备注的完整历史'),
bullet('关联告警趋势:该设备近 7 天的告警列表,判断是否为反复出现的问题'),
h2('7.3 告警规则配置'),
p('通过配置告警规则,系统可以自动监控设备数据并在异常时触发告警,无需人工巡检。'),
h3('规则参数'),
bullet('监控属性:选择要监控的设备数据项,如温度、电量、速度、信号强度等'),
bullet('触发阈值:设置触发告警的数值条件,如温度大于 85\u00B0C'),
bullet('对比规则:大于、小于、等于、区间范围(如温度在 0~85\u00B0C 之外触发)'),
bullet('持续时间:数据异常持续多久后触发告警(避免瞬时波动误报)'),
bullet('告警级别:为该规则产生的告警指定级别(严重/重要/一般/提示)'),
h3('设备类型规则'),
bullet('无人机规则:电量低、信号弱、飞行高度异常、温度超限'),
bullet('机器人规则:电量低、定位丢失、通信中断、作业超时'),
bullet('传感器规则:温度越限、湿度异常、辐照度异常'),
bullet('摄像头规则:视频信号丢失、画面遮挡、设备离线'),
h3('规则测试'),
bullet('模拟场景测试:可模拟电量低、温度超限、视频信号丢失等场景,验证规则是否正确触发'),
h2('7.4 告警订阅与通知'),
p('运营人员可以订阅关注的告警类型,通过多种渠道接收通知,确保重要告警不遗漏。'),
h3('订阅方式'),
bullet('按设备订阅:关注特定设备的所有告警'),
bullet('按角色订阅:运维人员订阅设备类告警,管理员订阅系统类告警'),
bullet('按级别订阅:只订阅严重和重要告警,减少信息干扰'),
h3('通知渠道'),
bullet('短信通知:告警信息以短信发送到订阅者手机'),
bullet('邮件通知:告警信息以邮件发送到订阅者邮箱,包含详情和截图'),
bullet('应用推送:系统内消息推送,登录后可在消息中心查看'),
bullet('钉钉通话:严重告警通过钉钉机器人推送,并支持电话语音提醒'),
h3('通知策略'),
bullet('严重告警立即通知:不等汇总,立即发送通知'),
bullet('普通告警汇总推送:每日定时汇总推送到订阅者,减少打扰'),
bullet('夜间免打扰:设置夜间免打扰时段(如 22:00~07:00),非严重告警延后通知'),
bullet('推送频率控制:同一告警在设定时间内不重复推送,避免告警风暴'),
h2('7.5 使用场景'),
bullet('每日查看告警概览,确认有无严重告警待处理'),
bullet('收到告警通知后,在告警中心查看详情并处理'),
bullet('反复出现的告警,从告警创建工单,安排人员现场排查'),
bullet('定期导出告警报表,分析告警趋势,优化运维策略'),
new Paragraph({ children: [new PageBreak()] }),
// === 第七章 AI 诊断分析 ===
h1('第八章 AI 诊断分析', 'ch8'),
p('AI 诊断分析是系统最具价值的模块之一。它将无人机热成像巡检数据、SCADA 实时遥测数据、气象站数据与电站资产信息融合,通过 AI 算法自动识别光伏组件的各类缺陷——热斑、断路、遮挡、衰减——并给出电站健康度评分和处置建议,让运维决策从「凭经验」升级为「靠数据」。'),
createImage('10_ai.png'),
caption('图 8-1 AI 诊断分析'),
h2('8.1 数据来源'),
p('AI 诊断融合以下四类数据,确保诊断结果全面准确:'),
bullet('无人机载荷热成像:无人机搭载热成像相机拍摄的组件温度分布图,是热斑检测的主要数据源'),
bullet('SCADA 实时遥测数据:逆变器、汇流箱上报的实时发电数据,用于组串级效率分析'),
bullet('云端气象分析站:实时辐照度、温度、风速数据,用于校准发电预期模型'),
bullet('电站运维资产库:组件型号、安装位置、额定功率等资产信息,用于精确计算衰减率'),
h2('8.2 热成像分析'),
p('通过上传无人机拍摄的热成像照片,AI 自动识别组件异常。这是发现热斑等缺陷的核心手段。'),
h3('文件上传'),
bullet('支持上传 TIFF、PNG、JPG 格式的热成像文件'),
bullet('支持批量上传多个热成像照片,系统自动排队分析'),
bullet('上传后可选择同步分析(等待结果)或异步分析(稍后查看)'),
h3('AI 自动识别'),
bullet('热斑检测:AI 自动在热成像图中检测热斑位置,用彩色框标注热斑区域'),
bullet('热成像分割:将图像中的每个组件进行分割识别,逐块分析温度,定位到具体组件'),
bullet('温度统计:自动计算最高温度、平均温度、最低温度和异常温度值'),
bullet('风险等级评估:根据温差和面积,评估热斑风险等级——高风险(红色)、中风险(橙色)、低风险(黄色)、无风险(绿色)'),
bullet('阵列掩码标注:支持为热成像图添加阵列掩码,标记组件位置和编号'),
bullet('面板 GeoJSON 标注:以 GeoJSON 格式导出热斑位置坐标,精确定位异常组件'),
h3('分析结果'),
bullet('热斑数量统计:检测到的热斑总数及各等级数量'),
bullet('热斑分布图:在电站平面图上标注热斑位置,一目了然'),
bullet('温度分布直方图:展示组件温度分布情况'),
h2('8.3 缺陷检测与组件分析'),
p('AI 自动识别组件缺陷,并给出等级和处置建议,辅助运维决策。'),
h3('缺陷识别'),
bullet('缺陷类型识别:热斑(组件局部温度异常)、断路(组串无电流输出)、遮挡(树木或建筑遮挡)、功率偏差(发电量低于预期)'),
bullet('缺陷等级判定:根据严重程度分为高、中、低三个等级'),
bullet('置信度展示:每个识别结果的置信度(0~100%),帮助判断结果可靠性'),
bullet('检测到的缺陷数量统计:各类缺陷的数量和占比'),
h3('组件衰减分析'),
bullet('组件平均衰减率:全场站组件的平均衰减程度(百分比)'),
bullet('最佳组件:发电效率最高的组件,作为基准参考'),
bullet('最差组件:发电效率最低的组件,需优先检查或更换'),
bullet('衰减趋势图:展示组件衰减率随时间的变化趋势,预测未来衰减速度'),
h3('发电量对比'),
bullet('实际发电量:组件实际产生的电量'),
bullet('预测发电量:AI 根据气象条件和历史数据预测的发电量'),
bullet('理论发电量:在理想条件下组件应达到的发电量'),
bullet('三方对比分析,量化发电损失和效率差距'),
h2('8.4 组串与逆变器分析'),
p('深入分析组串和逆变器的运行状态,发现效率瓶颈。'),
h3('组串分析'),
bullet('组串实时状态定位图:在电站阵列图上用颜色标注每个组串的运行状态(正常=绿色、异常=红色、离线=灰色)'),
bullet('异常类型分布:热斑、断路、遮挡、功率偏差,统计各类异常的数量和占比'),
bullet('发电偏差率分析:对比每个组串的实际发电与预期发电,偏差超过阈值标红'),
bullet('异常组串数量统计:当前检测到异常的组串总数'),
bullet('热斑疑似点数量:AI 标记的热斑疑似位置总数'),
h3('逆变器分析'),
bullet('逆变器效率监测:每台逆变器的转换效率(百分比)'),
bullet('温度异常监测:逆变器温度过高时告警'),
bullet('功率曲线:展示逆变器功率随时间的变化'),
bullet('效率排名:各逆变器效率对比排名,发现低效设备'),
h2('8.5 电站健康度与 AI 总结'),
p('AI 综合所有数据,给出电站整体健康评价和行动建议。'),
h3('电站健康度评分'),
bullet('基于性能比(PR)的综合评分,满分 100 分'),
bullet('评分等级:优秀(90+)、良好(80~89)、一般(70~79)、需关注(60~69)、需改善(<60)'),
bullet('与历史评分对比,展示健康度变化趋势'),
h3('AI 诊断总结'),
bullet('自动生成诊断结论:用自然语言描述电站当前运行状况和主要问题'),
bullet('诊断项列表:逐条列出发现的问题,每项包含以下内容'),
bullet(' 影响分析:该问题对发电量的影响程度'),
bullet(' 建议措施:推荐的处置方案(如「清洗组件」「更换热斑组件」)'),
bullet(' 预期收益:修复后预计可恢复的发电量和经济收益'),
h3('分析模式与记录'),
bullet('同步分析:上传数据后等待分析完成,适合少量数据'),
bullet('异步分析:上传数据后可离开页面,分析完成后通知查看结果'),
bullet('历史分析记录:所有历史 AI 分析结果可追溯查看,支持对比不同时期的诊断结果'),
h2('8.6 使用场景'),
bullet('定期(每月/每季度)使用无人机热成像巡检,上传数据让 AI 自动诊断'),
bullet('发电量异常下降时,查看 AI 诊断报告,快速定位问题组件'),
bullet('根据 AI 建议措施,一键生成检修工单,安排人员处理'),
bullet('向管理层汇报电站健康度时,直接引用 AI 评分和诊断结论'),
new Paragraph({ children: [new PageBreak()] }),
// === 第八章 清洗优化 ===
h1('第九章 清洗优化', 'ch9'),
p('清洗优化模块用算法替代经验。系统基于污染趋势分析、发电损失模型和实时气象数据,智能推荐需要清洗的区块、最佳的清洗方案和执行时间,并量化每次清洗的收益、成本和净收益,让每一笔清洗投入都「算得清、洗得值」。'),
createImage('11_clean.png'),
caption('图 9-1 清洗优化管理'),
h2('9.1 污染趋势与损失评估'),
p('系统持续监测组件表面的污染程度,量化发电损失,为清洗决策提供数据依据。'),
h3('污染监测'),
bullet('近 7 天/30 天污染指数趋势图:以折线图展示组件表面污染指数的变化,观察污染加重速度'),
bullet('当前污损率:组件因污染导致的发电效率下降百分比'),
bullet('功率损失分析:污染导致的功率损失值(kW),量化污染对发电的实际影响'),
bullet('发电损失构成分析:区分不同污染类型(积灰/鸟粪/沙尘)对发电损失的占比'),
bullet('污染类型识别:自动识别积灰、鸟粪、沙尘沉积等不同污染类型,分类施策'),
h3('损失量化'),
bullet('总损失电量:因污染导致的累计发电损失(kWh)'),
bullet('日均损失电量:平均每日因污染损失的发电量'),
bullet('经济损失:按上网电价折算的发电损失金额(元)'),
bullet('污染地图:在电站平面图上以颜色深浅展示各区域的污染程度,红色区域污染最严重'),
h2('9.2 智能清洗策略'),
p('AI 根据污染程度、设备状况和天气条件,智能推荐清洗方案。'),
h3('区块推荐'),
bullet('自动计算建议清洗区块数:AI 根据污染分布,自动划分需要优先清洗的区块'),
bullet('优先级排序:按污染严重程度和发电损失大小排序,优先清洗收益最高的区块'),
bullet('电站污染分布图:可视化展示全场站污染分布'),
bullet('建议清洗区块分布图:标注 AI 推荐的清洗区块位置'),
h3('方案推荐'),
bullet('机器人全自动清洗:适用于大面积平整区块,清洗机器人按规划路径自动作业,效率最高'),
bullet('人工精细化清洗:适用于复杂地形或机器人无法到达的区域,人工使用高压水枪清洗'),
bullet('水清洗:使用水冲洗,适用于重度污染区域'),
bullet('干清洗:无水清洗,适用于水资源匮乏地区或冬季'),
bullet('混合方案:同一区块可能推荐多种方案组合,如机器人清洗后人工补充'),
h3('资源估算'),
bullet('预计用水量:估算清洗所需总用水量(升),用于提前准备水资源'),
bullet('预计总耗时:估算完成所有清洗区块的总时间(小时)'),
bullet('并行组数:可同时投入的清洗设备/人员组数,优化时间效率'),
h3('时机选择'),
bullet('天气适宜度评估:根据天气预报评估未来几天的清洗适宜度(温度、风速、降水概率)'),
bullet('作业风险评估:评估大风、降水、高温等风险对清洗作业的影响'),
bullet('建议执行时间:AI 推荐的最佳清洗日期和时段(如清晨温度低时)'),
h2('9.3 清洗收益精算'),
p('系统自动测算每次清洗的投入产出比,让决策有据可依。'),
h3('效率对比'),
bullet('清洗前效率:清洗前的组件发电效率(百分比)'),
bullet('清洗后效率(预测):清洗后预计恢复到的效率'),
bullet('效率提升幅度:清洗带来的效率提升百分比'),
h3('收益测算'),
bullet('预计发电提升量:清洗后预计每日多发电量(kWh)'),
bullet('预计净收益:清洗带来的发电收益减去清洗成本(元),正值表示值得清洗'),
bullet('按上网电价计算:根据当地上网电价(元/kWh)计算发电收益'),
bullet('投资回报率(ROI):清洗收益 / 清洗成本 × 100%,衡量投资效率'),
bullet('回收周期:清洗成本 / 日均发电收益,估算多少天能收回清洗投入'),
h3('环保价值'),
bullet('碳减排贡献(CO\u2082 减排量):清洗提升发电量对应的碳减排量(kg CO\u2082),体现环保价值'),
bullet('相当于种植树木数:将碳减排量折算为等效植树数量,直观展示环保贡献'),
h2('9.4 清洗计划与记录'),
p('从建议到执行,形成完整的清洗管理闭环。'),
h3('清洗计划'),
bullet('创建清洗计划:选择清洗区块、推荐方案、执行时间,生成清洗计划'),
bullet('管理清洗区块:查看每个区块的面积、组件数量、当前污染等级'),
bullet('上次清洗日期:记录每个区块上次清洗的日期'),
bullet('建议下次清洗日期:AI 根据污染趋势预测的下次清洗时间'),
h3('效果验证'),
bullet('清洗后对比发电数据:对比清洗前后的发电量,验证实际效果'),
bullet('效率恢复率:实际效率提升 / 预期效率提升,评估清洗质量'),
bullet('实际净收益:根据实际发电提升量计算的净收益,与预测值对比'),
h3('工单生成'),
bullet('一键生成清洗工单:根据清洗计划自动创建工单,填入区块、方案、资源等信息'),
bullet('派发给清洗执行人员或调度清洗机器人'),
bullet('工单完成后,系统自动更新清洗记录和效果数据'),
h2('9.5 使用场景'),
bullet('每月查看污染趋势,当污损率超过 3% 时考虑安排清洗'),
bullet('参考 AI 推荐方案,选择收益最高的区块优先清洗'),
bullet('清洗后查看效果验证,确认清洗是否达到预期效果'),
bullet('向管理层汇报清洗成效时,引用收益精算数据(ROI、净收益、碳减排)'),
new Paragraph({ children: [new PageBreak()] }),
// === 第九章 工单任务 ===
h1('第十章 工单任务', 'ch10'),
p('工单任务模块串联了运维工作的全流程。无论是 AI 发现的缺陷、设备告警、还是人工发起的巡检,最终都会形成工单。系统支持工单的创建、派单、执行、挂起、完成全生命周期管理,并内置 AI 建议工单和日历排班视图,让运维任务有序流转、高效闭环。'),
createImage('12_workorder.png'),
caption('图 10-1 工单任务管理'),
h2('10.1 工单概览'),
p('工单概览页面提供工单数据的全局视图,帮助管理者掌握运维任务整体进展。'),
h3('核心指标'),
bullet('今日新增工单数:当日新创建的工单数量'),
bullet('待处理工单数:尚未派单或执行的工单数量'),
bullet('执行中工单数:正在执行中的工单数量'),
bullet('已完成工单数:当日已完成的工单数量'),
bullet('平均处理时长:从创建到完成的平均时间,评估工单处置效率'),
bullet('较昨日/上周对比:工单量环比变化,发现异常波动'),
h3('统计图表'),
bullet('工单状态分布图:待处理、执行中、已完成、已挂起的占比,以饼图展示'),
bullet('工单类型分布:巡检、检修、清洗、维修、运维各类工单的数量'),
bullet('按时完成率:在计划时间内完成的工单占比'),
h3('AI 建议工单'),
bullet('系统根据 AI 诊断结果,自动建议生成工单(如「3 号组件热斑,建议复检」)'),
bullet('运维人员可一键采纳建议,自动填充工单信息,无需手动填写'),
h2('10.2 工单全生命周期管理'),
p('从创建到完成,系统覆盖工单流转的每一个环节。'),
h3('创建工单'),
bullet('工单标题:简明描述任务内容,如「3 号逆变器组串异常检修」'),
bullet('工单类型:巡检(例行检查)、检修(故障修复)、清洗(组件清洗)、维修(设备维修)、运维(日常运维)'),
bullet('优先级:高(24 小时内处理)、中(72 小时内处理)、低(一周内处理)'),
bullet('关联设备:选择工单涉及的设备,便于追溯设备历史'),
bullet('关联区域:选择作业位置区域,便于人员到达'),
bullet('任务描述:详细描述任务内容和操作要求'),
bullet('附件素材:上传照片、文档、热成像图等参考材料'),
bullet('计划开始时间:设定工单开始执行的时间'),
bullet('来源标记:记录工单来源——AI、无人机、清洗、视频、装备、人工、告警'),
h3('派单与执行'),
bullet('派单:选择接收人员,将工单分配给具体执行人,系统自动通知'),
bullet('执行:执行人接收工单后点击「开始执行」,状态变为「执行中」'),
bullet('批量操作:支持批量选择工单进行批量派单或批量执行,提高效率'),
bullet('执行过程中可添加执行记录和现场照片'),
h3('挂起与完成'),
bullet('挂起:遇到阻碍(如缺少备件、天气恶劣)时暂停工单,记录挂起原因'),
bullet('恢复:条件具备后恢复执行,状态回到「执行中」'),
bullet('完成:填写处理结果和处理备注,描述最终处置情况,关闭工单'),
bullet('工单搜索:按工单编号或标题关键词搜索,快速定位特定工单'),
bullet('批量删除:清理无效或重复的工单'),
h2('10.3 AI 建议与关联信息'),
p('每个工单页面都展示 AI 提供的智能建议,辅助决策。'),
bullet('AI 建议生成工单:如「3 号组件热斑,建议复检」「5 号逆变器效率低,建议检修」'),
bullet('建议携带装备:根据任务类型提醒执行人准备工具,如红外热像设备、万用表、绝缘工具'),
bullet('关联告警趋势:展示该设备近 7 天的告警列表,了解问题背景和严重程度'),
bullet('预计影响发电量:量化该问题对发电的影响,帮助判断优先级'),
bullet('历史工单:该设备的历史工单记录,判断是否为反复出现的问题'),
h2('10.4 排班与日历视图'),
p('日历视图帮助合理安排工单执行计划。'),
bullet('任务排班/日历视图:以日历方式展示已计划的工单,直观查看每日安排'),
bullet('待派单工单列表:尚未分配执行人的工单,提醒及时派发'),
bullet('按优先级筛选:只看高优先级工单,优先处理紧急任务'),
bullet('按类型筛选:只看清洗工单或巡检工单,分类管理'),
bullet('按执行人筛选:查看某个人名下的所有工单,评估工作负荷'),
h2('10.5 使用场景'),
bullet('每日查看工单概览,确认今日待处理工单,安排人员执行'),
bullet('收到 AI 建议工单后,确认建议合理即一键采纳并派单'),
bullet('告警处理不了时,从告警创建工单,转为维修流程'),
bullet('每周查看日历视图,规划下周工单安排,均衡人员负荷'),
new Paragraph({ children: [new PageBreak()] }),
// === 第十章 报表中心 ===
h1('第十一章 报表中心', 'ch11'),
p('报表中心将电站运营数据沉淀为可量化、可追溯、可订阅的报告资产。覆盖发电量、设备健康、告警、工单、巡检、清洗、效率和 AI 分析八大类报表,支持日报、周报、月报、季报、年报自动生成,并可导出 Excel/PDF 文件或定时推送给相关人员。'),
createImage('13_report.png'),
caption('图 11-1 报表中心'),
h2('11.1 报表类型'),
p('系统提供八大类报表,全面覆盖电站运营的各个方面。'),
h3('发电类报表'),
bullet('发电量报表:总发电量、峰值功率、平均功率、月度累计发电量,支持与历史数据对比'),
bullet('效率报表:性能比(PR 值)、系统效率、平均效率、辐照度利用率'),
h3('设备类报表'),
bullet('设备健康报表:各设备运行状态汇总、健康度评分、故障记录'),
bullet('巡检机器人报表:巡检任务执行情况、覆盖率、巡检发现的问题数量'),
h3('运维类报表'),
bullet('告警报表:告警数量、严重告警数、告警闭合率、告警类型分布'),
bullet('工单报表:工单总数、完成率、月度工单统计、平均处理时长'),
h3('清洗类报表'),
bullet('清洗效果报表:清洗前后效率对比、清洗收益提升、实际净收益'),
bullet('清洗优化报表:清洗策略效果评估、ROI 分析、碳减排贡献'),
h3('AI 分析报表'),
bullet('AI 分析报表:AI 诊断统计、缺陷分布、健康度评分趋势'),
h2('11.2 报表周期与生成'),
p('系统支持多种报表周期,并可自动生成。'),
h3('报表周期'),
bullet('日报:每日自动生成,适合日常监控'),
bullet('周报:每周自动生成,适合周度汇报'),
bullet('月报:每月自动生成,适合月度总结'),
bullet('季报:每季自动生成,适合季度复盘'),
bullet('年报:每年自动生成,适合年度总结'),
h3('生成方式'),
bullet('自动生成:系统按设定周期自动生成报表,无需人工操作'),
bullet('查看生成状态:生成中、已生成、生成失败,追踪报表产出进度'),
bullet('自定义日期范围:灵活查询任意时段数据,支持跨月/跨季查询'),
bullet('模板中心:选择预设报表模板快速生成,也支持自定义报表模板'),
bullet('报表目录:按类别和周期分类展示所有已生成的报表'),
h2('11.3 核心指标'),
p('每类报表包含丰富的关键指标,数据详实。'),
bullet('总发电量:统计周期内的累计发电量(kWh)'),
bullet('理论/预测/实际发电量对比分析:三方对比,量化发电差距'),
bullet('平均辐照度(W/m\u00B2):统计周期内的平均辐照强度'),
bullet('发电偏差率:实际发电与预测发电的偏差百分比'),
bullet('告警闭合率:已处理告警 / 总告警,衡量告警处置效率'),
bullet('工单完成率:已完成工单 / 总工单,衡量任务执行效率'),
bullet('清洗收益提升:清洗带来的发电效率提升百分比'),
bullet('预计额外发电量:清洗后预计增加的发电量(kWh)'),
bullet('PR 值:性能比,反映电站整体性能水平'),
bullet('平均效率:电站设备的平均运行效率'),
h2('11.4 导出与订阅'),
p('报表可以导出或自动推送给相关角色。'),
h3('导出'),
bullet('导出 Excel:将报表数据导出为 Excel 文件,方便编辑和二次分析'),
bullet('导出 PDF:将报表导出为 PDF 文件,方便分享和打印'),
bullet('批量导出:选择多个报表一次性导出'),
h3('订阅推送'),
bullet('每周自动发送:设定推送计划,每周固定时间将报表发送给订阅者'),
bullet('系统通知:报表生成后系统自动通知相关人员'),
bullet('按角色分发:运维管理员收到全量报表,运维主管收到运维类报表,电站工程师收到设备类报表'),
bullet('订阅者管理:添加/移除订阅者,管理每个订阅者的订阅范围'),
h2('11.5 使用场景'),
bullet('每月初查看上月月报,向领导汇报电站运行情况'),
bullet('导出发电量报表 Excel,在本地做进一步数据分析'),
bullet('设置周报自动推送到邮箱,无需每周手动查看'),
bullet('对比不同月份的报表数据,分析发电效率变化趋势'),
new Paragraph({ children: [new PageBreak()] }),
// === 第十一章 系统设置 ===
h1('第十二章 系统设置', 'ch12'),
p('系统设置模块是平台的管理底座。在这里可以进行用户与角色管理、场站信息维护、设备接入配置、告警与工单模型管理、通知策略设置、系统维护和日志查看等操作,确保平台运转在正确的配置之上。'),
createImage('14_system.png'),
caption('图 12-1 系统设置'),
h2('12.1 基础设置'),
p('配置系统的基本信息和外观。'),
bullet('系统名称:设置显示在浏览器标题栏和系统顶部的名称'),
bullet('版本号:当前系统的版本标识'),
bullet('系统描述:填写系统简介文字'),
bullet('默认语言设置:中文或英文,控制新用户的默认界面语言'),
bullet('系统 Logo 上传:替换系统顶部的图标'),
bullet('主题切换:浅色模式(默认)、深色模式(夜间护眼)、跟随系统(自动切换)'),
bullet('首页默认页面:设置登录后默认显示的页面'),
bullet('数据刷新频率:设置页面数据自动刷新的时间间隔(如 30 秒、60 秒)'),
h2('12.2 用户与角色管理'),
p('管理系统使用人员和权限分配,是安全管理的核心。'),
createImage('15_users.png'),
caption('图 12-2 用户管理'),
h3('用户管理'),
bullet('新增用户:填写用户名、姓名、邮箱、手机号,分配角色'),
bullet('编辑用户:修改用户信息和角色分配'),
bullet('删除用户:移除已离职或不需访问的人员'),
bullet('重置密码:为忘记密码的用户重置初始密码'),
bullet('启用/禁用:临时禁用用户,保留账号信息但不允许登录'),
bullet('用户列表:展示所有用户的基本信息和角色'),
h3('角色管理'),
createImage('16_roles.png'),
caption('图 12-3 角色管理'),
bullet('创建角色:定义角色名称和描述,如「运维管理员」「运维主管」「电站工程师」'),
bullet('权限标识:为角色设置唯一权限标识符'),
bullet('角色级别:设置角色的层级(1~10),数字越大级别越高'),
bullet('设备操作权限:控制不同角色对设备的操作范围(如只有管理员可以远程控制设备)'),
bullet('菜单权限:控制角色可以看到哪些功能菜单'),
h3('菜单管理'),
bullet('菜单类型:目录(一级菜单分组)、菜单(具体功能页面)、按钮(页面内操作按钮)'),
bullet('动态菜单树:以树形结构展示菜单层级,支持拖拽排序'),
bullet('路由地址:每个菜单对应的页面路径'),
bullet('权限标识:菜单的权限标识符,与角色权限对应'),
bullet('可见性控制:通过角色权限动态控制菜单显示,不同角色看到的菜单不同'),
h3('组织管理'),
bullet('维护组织架构树:创建部门、子部门,形成组织层级'),
bullet('设置负责人和联系电话'),
bullet('用户归属组织:将用户分配到对应部门'),
h2('12.3 场站与设备接入'),
p('管理电站场站信息和设备接入配置。'),
h3('场站管理'),
bullet('场站名称:设置电站的名称'),
bullet('场站类型:集中式光伏、分布式光伏、农光互补、渔光互补'),
bullet('场站地址:电站的物理地址'),
bullet('装机容量:电站的总装机容量(kWp)'),
bullet('经纬度:电站的地理坐标,用于地图定位和气象数据匹配'),
bullet('时区:设置场站所在时区,确保时间数据一致'),
bullet('多场站切换:系统支持接入多个场站,在顶部下拉菜单切换'),
h3('设备接入'),
bullet('接入协议:选择设备通信协议(MQTT、RTSP 等)'),
bullet('SN 码:输入设备的序列号,用于设备身份验证'),
bullet('验证码:输入设备验证码,确保接入安全'),
bullet('MQTT 连接配置:配置 MQTT 服务器地址、端口、用户名、密码'),
bullet('RTSP 连接配置:配置摄像头的 RTSP 视频流地址'),
bullet('设备绑定:将接入的设备绑定到具体场站和区域'),
h3('设备管理'),
bullet('产品型号管理:维护设备的产品型号和厂商信息'),
bullet('无人机管理:管理无人机的型号、载荷、航线'),
bullet('机器人管理:管理机器人的型号、作业区域、控制模式'),
bullet('摄像头管理:管理摄像头的型号、安装位置、云台参数'),
bullet('智能网关配置:管理设备接入网关'),
h2('12.4 告警与工单模型'),
p('配置告警自动生成工单的规则和模型。'),
h3('告警模型管理'),
bullet('配置告警阈值:设置触发告警的数据阈值'),
bullet('自动生成工单规则:设定哪些告警自动生成工单,以及工单类型和优先级'),
bullet('告警级别映射:将告警级别映射到工单优先级(严重告警→高优先级工单)'),
h3('工单模型管理'),
bullet('定义工单名称:设置工单的标准名称模板'),
bullet('关联产品:将工单类型与设备产品关联'),
bullet('工单模板:预设工单的任务描述和操作要求模板'),
h3('错误规则配置'),
bullet('错误编码:为每种错误定义唯一编码'),
bullet('校验字段:设置需要校验的数据字段'),
bullet('对比规则:大于、小于、区间范围等'),
bullet('物模型属性与指令配置:定义设备物模型的属性和可下发指令'),
h2('12.5 通知策略'),
p('配置告警和工单的通知推送方式。'),
h3('钉钉告警推送'),
bullet('配置钉钉机器人:设置钉钉群机器人的 Webhook 地址'),
bullet('加密密钥:设置加签密钥,确保推送安全'),
bullet('推送内容模板:自定义推送消息的格式和内容'),
h3('通知规则'),
bullet('严重告警立即通知:最高级别告警实时推送'),
bullet('发电下降超过 15% 通知:发电量异常下降时通知'),
bullet('通信中断通知:设备通信中断时通知'),
bullet('短信、邮件、应用推送:多渠道并行通知,确保到达'),
bullet('每日推送时间:设置每日汇总推送的固定时间'),
bullet('夜间免打扰时段:设置夜间不推送非紧急通知的时段'),
h2('12.6 系统维护'),
p('系统运行状态监控和维护操作。'),
h3('服务器状态'),
bullet('磁盘使用率:查看存储空间占用情况,超过 80% 需清理'),
bullet('内存使用率:查看系统内存占用'),
bullet('CPU 使用率:查看处理器负载'),
bullet('运行时长:系统已连续运行的时间'),
h3('维护操作'),
bullet('数据库备份:手动触发数据库备份,并下载备份文件'),
bullet('清除缓存:清理系统缓存,释放存储空间'),
bullet('重启服务:重启系统后台服务(谨慎操作)'),
bullet('数据备份状态查看:查看自动备份的执行记录和状态'),
h2('12.7 在线用户与日志'),
p('系统安全审计和操作追溯。'),
h3('在线用户'),
bullet('查看当前在线用户列表:用户名、登录时间、IP 地址'),
bullet('强制下线:对异常在线用户强制退出登录'),
h3('日志管理'),
bullet('登录日志:记录所有用户的登录时间、地点、IP 地址、登录结果(成功/失败)'),
bullet('操作日志:记录用户在系统中的操作内容,包括操作类型、操作对象、操作时间'),
bullet('错误日志:记录系统运行中的异常和错误信息'),
bullet('系统日志:记录系统运行事件和状态变更'),
bullet('日志导出:将日志导出为 Excel 文件,用于审计存档'),
h2('12.8 视频管理'),
p('管理场站内所有摄像头设备。'),
bullet('摄像头增删改:维护摄像头名称、类型、IP 地址、RTSP 地址'),
bullet('摄像头类型:高清枪机(固定方向)、穹顶球机(支持云台)、全景摄像机(360 度)'),
bullet('安装位置:记录每个摄像头的安装位置和监控区域'),
bullet('分区管理:将摄像头按区域分组,方便查找'),
bullet('云台控制配置:设置云台转动速度、预设位'),
bullet('夜视设置:配置红外夜视和低照度模式参数'),
new Paragraph({ children: [new PageBreak()] }),
// === 结语 ===
h1('结语'),
p('光伏电站智能运维系统通过「采(设备接入)—看(视频监控)—诊(AI 分析)—洗(清洗优化)—修(工单闭环)—报(报表中心)」的全链条设计,将分散的设备、告警、工单和报表收敛到一个平台,让电站运维从被动抢修转向主动预防与智能决策。'),
p('本使用说明涵盖了系统所有核心功能模块的作用、功能详解与操作方法。通过目录页可快速跳转到感兴趣的章节。如有疑问或需要进一步了解,请联系系统管理员或产品团队。'),
p(''),
p('联系方式:请联系产品团队获取演示账号与定制方案。'),
],
}],
});
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync(path.join(__dirname, '光伏电站智能运维系统-使用说明.docx'), buffer);
console.log('OK: 文档已生成 -> 光伏电站智能运维系统-使用说明.docx');
});