SCADA 和 HMI 界面
工厂 HMI 显示两个带液位仪表的储罐、水泵 LED、带红色区间的压力表盘,以及用于报警的报警指示盘。带滞后的阈值使每个报警只触发一次,报警指示盘会一直闪烁直到操作员确认,夜班则切换为深色主题。
- 区间与阈值
- 报警指示盘
- LED
- 深色主题
十种仪表类型,适用于仪表盘和 HMI 面板,从径向表盘到报警指示盘。绘制绿色、琥珀色和红色区间,数值越过限值时触发报警,让指针平滑移动到每个新读数,并在服务器上将同一个仪表渲染为 PNG 或 SVG。
四个分组,十一项功能,附带真实的类和属性名称以及每个帮助主题的链接。标有“注册版”的功能不包含在免费的 .NET 社区版中。
十种类型共用一个模型,支持区间、样式和多个指针。
仪表与刻度
仪表盘、HMI 面板和测试台需要不同的仪表:用表盘显示速度,用条形显示液位,用数字读数显示频率,用指示灯显示水泵,用磁贴面板显示报警。sgcGauges 提供十种共用同一个模型的类型,刻度、指针、区间、阈值和主题都相同。只需学习一套 API,每种仪表的行为都一致。
TsgcVCLRadialGauge、TsgcVCLLinearGauge、TsgcVCLDigitalGauge、TsgcVCLLEDGauge、TsgcVCLLEDBarGauge、TsgcVCLProgressRingGaugeTsgcVCLVUMeterGauge、TsgcVCLClockGauge、TsgcVCLCompassGauge、TsgcVCLAnnunciatorGaugeTsgcRadialGauge,用于无界面场景社区版包含径向、线性、7 段数字、LED、LED 条和进度环仪表。VU 表、时钟、罗盘和报警指示盘属于注册版。
阅读帮助主题
仪表与刻度
只有当绿色、琥珀色和红色指出数值应处的范围时,操作员才能一眼读懂仪表。为刻度设置任意最小值和最大值,设置主刻度间隔和次刻度,并为重要的区段添加彩色区间。区间有各自的粗细和标题,刻度可以反向,也可以把刻度线放在内侧或外侧。区间直接绘制在刻度上,因此无需额外工作,它们也会出现在 PNG 和 SVG 输出以及两种主题中。
Scales[0].Ranges.Add,带 StartValue、EndValue、Color、Thickness 和 CaptionTsgcGaugeScale:Minimum、Maximum、MajorInterval、MinorCount、ReversedLabelFormat 和 ShowLabelsStartAngle 和 SweepAngle 决定径向仪表的圆弧形状
仪表与刻度
液位、温度以及相对目标的进度天然适合线性显示。一个线性仪表可绘制三种样式:普通条形、带球泡的温度计,以及把数值与目标标记进行比较的子弹图。可设为水平或垂直,以适应储罐、侧边栏或表格行。子弹图的目标是一个属性,而不是额外的指针,因此子弹图在免费的社区版中也可使用。小型仪表可放入表格单元格或仪表盘磁贴。
LinearStyle:glsBar、glsThermometer 或 glsBulletTarget 绘制子弹图目标标记,所有版本均可用Orientation 和 BulbSize
仪表与刻度 仅限注册版
有些读数只有并排比较才有意义:实际值与目标值、进口与出口、小时与分钟。一个仪表可以带有多个刻度和多个指针,每个指针可选择自己的刻度和样式:针形、标记或条形。阈值可以监视任意指针。双指针表盘在拥挤的面板上节省空间,并让目标与实际之间的差距一目了然。
TsgcGaugePointer 的 Pointers 集合,带 Kind、NeedleStyle、MarkerShape 和 ScaleIndexScales 集合,每个刻度带 Radius 和 OffsetPointerIndex社区版每个仪表绘制一个刻度和一个指针;注册版绘制全部。
阅读帮助主题会做出反应的仪表:阈值、动画、工业显示和实时数据源。
报警、动画与实时数据
在限值附近徘徊的压力不应每分钟触发上百次报警。阈值包含数值、方向和滞后区间:数值越过时触发一次,只有在数值回退超过该区间后才会重新就绪。无论哪个线程写入数值,OnThreshold 始终在主线程中运行,因此您可以直接点亮 LED 或显示消息。每个阈值可以监视不同的指针,因此一个仪表可以对实际值触发高位报警,对第二个读数触发低位报警。
TsgcGaugeThreshold 的 Thresholds,带 Value、Hysteresis 和 DirectiongtdRising、gtdFalling 或 gtdBothValueColor 会为数值文本重新着色报警、动画与实时数据
跳变的指针看起来像出了故障,平滑移动的指针才像仪表。每个新值会在您选择的时长内,以五种缓动曲线之一从旧值过渡,因此突变易于跟随,实时数据也不会闪烁。对于需要立即得到原始值的测试台,可以关闭动画。OnChange 会在数值变化时通知您,与屏幕上的动画无关。
Enabled 和 Duration 的 Animation(TsgcGaugeAnimation),默认 300 毫秒Easing:geLinear、geQuadOut、geCubicOut、geCubicInOut、geBackOutIsAnimating 告知指针是否仍在移动
报警、动画与实时数据
控制面板有自己的视觉语言。数字仪表可绘制 7 段、14 段或点阵数字,并可选幽灵段和倾斜。LED 会闪烁,LED 条会保持峰值,报警指示盘则显示一组报警磁贴,在操作员确认之前会一直闪烁。这些显示都与其他仪表共用相同的刻度、阈值和主题,因此报警在各处的工作方式相同。
TsgcVCLDigitalGauge:DisplayType、Digits、ShowGhost、SkewTsgcVCLLEDGauge,带 Blink 和 BlinkInterval;TsgcVCLLEDBarGauge,带 PeakHoldTsgcVCLAnnunciatorGauge:Tiles、FlashInterval、Acknowledge、AcknowledgeAll社区版包含 7 段数字、LED 和 LED 条。14 段和点阵显示以及报警指示盘属于注册版。
阅读帮助主题报警、动画与实时数据 仅限注册版
在 IoT 控制台中,大部分代码都是管道工作:订阅、解析、找到仪表、设置数值。sgcGaugesWS 桥接免去了这些工作。数据源挂接到 sgcWebSockets 客户端,每个绑定把一个主题和一个 JSON 路径映射到一个仪表指针。支持带 + 和 # 的 MQTT 主题过滤器,过滤路径可从共享数据流中挑出某个设备。多个绑定可以共用一个数据源,因此一个代理连接即可驱动整个面板。
TsgcGaugeFeedSource_MQTT、TsgcGaugeFeedSource_WebSocket、TsgcGaugeFeedSource_SSETsgcGaugeFeedBinding 的 Bindings:Gauge、PointerIndex、Topic、ValuePathFilterPath 和 FilterValue 用于选择消息OnValue 和 OnError 事件该桥接需要 sgcWebSockets。在社区版中,请通过自己的代码设置 Value;在后台线程中调用是安全的。
阅读帮助主题同一个仪表可用于服务器,也适用于任何主题。
输出与外观
仪表在屏幕之外也有需求:交班报告、状态邮件或由您的后端提供的网页。每个仪表模型和每个控件都能在没有窗体的情况下将自己保存为 PNG 或 SVG,因此控制台程序、Windows 服务或 Linux64 服务器可以渲染操作员所见的同一个仪表。宽度、高度和缩放比例都是参数,所以一次调用可为列表生成缩略图,另一次调用则为报告生成清晰的 2 倍图像。
SaveToPNG 和 SaveToSVGTsgcRadialGauge 和 TsgcLinearGauge
输出与外观
控制室在夜间会调暗屏幕,办公室则偏好明亮的外观。一个属性即可在浅色和深色主题之间切换仪表,表盘、刻度、标签和数值的颜色随之变化。仪表与每个 sgcUI 产品使用相同的主题类型,因此会与仪表盘、图表和表格一起切换。区间在两种主题中保持各自的颜色,所以绿色在夜间仍然表示正常。FormatSettings 属性可固定读数的小数分隔符,不受用户区域设置影响。
Theme := utDark 或 utLightFaceColor、BackgroundColor 和字体仍可按仪表分别设置Title、Units 和 ValueFormatOnFormatValue 用于自行格式化数值文本预览显示的内容与打印机和 PDF 得到的完全一致。
打印、预览和 PDF
仪表按屏幕上的样子打印在一页上,包括刻度、量程、阈值、指针和文字。它以最终值打印,因此运行中的动画不会以半途状态出现在纸上,而在屏幕上仍继续运行。
Print 显示打印对话框或直接打印到默认打印机,ShowPrintPreview 打开带有翻页、缩放、页面设置、打印和 PDF 导出的预览PrintSettings 保存纸张、方向、页边距、缩放以及页眉和页脚文字,打印机、预览和 PDF 都使用它ExportToPDF 把仪表写成带真正文本的矢量图形,默认是带标签的 PDF/UA,并附上朗读标题、带单位的值和量程的替代文本TsgcUIPDFOptions 的 PDFALevel 可为归档加上 PDF/A-2a 或 PDF/A-3a,可单独使用,也可与 PDF/UA 同时使用打印和预览包含在每个版本中,包括免费的社区版,可用于 VCL、FireMonkey、WinForms、WPF 和 Avalonia。在 FireMonkey 中,打印在 Windows 和 macOS 上可用,预览和 PDF 导出则适用于所有平台。PDF 导出需要 sgcUIPDF 桥接和已获许可的 sgcPDF(在 .NET 中为 NuGet 包 esegece.sgcUICore.sgcPDF),因此不包含在社区版中。
面向屏幕阅读器的 UI Automation 和高对比度,无需任何设置。
无障碍
每种仪表都向 Microsoft UI Automation 公开其标题、值和量程,阈值则作为通知发出。仪表会用写入无障碍 PDF 的同一段替代文本来描述自己。
TabStop 设置为 True无障碍功能在每个版本中默认开启,包括免费的社区版,可用于 VCL(Delphi 和 C++Builder 从 Delphi 7 到 Delphi 13 的每个版本)、Windows 上的 FireMonkey,以及 WinForms、WPF 和 Avalonia。在 Delphi 和 C++Builder 中,AccessibleName 和 AccessibleDescription 设置向 UI Automation 公开的名称和说明,在 .NET 中,各框架标准的无障碍名称和帮助文本起同样的作用。请参见无障碍符合性报告。
sgcUI 套件演示中的 sgcGauges:使用内置模拟数据、可离线运行的完整应用程序。
一台泵每项读数对应的径向、线性和 LED 仪表。
Altamira Plant →
一辆卡车的速度、罗盘和冷藏温度仪表。
Altamira Fleet →
VaR 径向仪表、敞口条、进度环和闪烁的告警磁贴。
Altamira Markets →
季度目标径向仪表和各区域的线性仪表。
Altamira ERP →
工厂 HMI 显示两个带液位仪表的储罐、水泵 LED、带红色区间的压力表盘,以及用于报警的报警指示盘。带滞后的阈值使每个报警只触发一次,报警指示盘会一直闪烁直到操作员确认,夜班则切换为深色主题。
遥测控制台订阅消息代理,并显示来自现场设备的六个实时读数。绑定把每个主题和 JSON 字段映射到一个指针,指针平滑移动到每个新值,无需手写任何消息处理代码。同样的仪表还可渲染为 PNG,用于每日状态邮件。
管理仪表盘把仪表放入磁贴,与 KPI 卡片和图表并排:用进度环显示利用率,用与目标对比的子弹图显示交付时间,用带彩色区间的表盘显示服务水平。一切都遵循同一个主题属性,仪表会自动适应其磁贴的大小。
Delphi、C++ Builder 和 C# 中使用相同的 API:带红色区间和报警阈值的径向压力表、子弹式液位仪表和闪烁的报警 LED。
VCL 窗体上带红色区间和报警阈值的径向压力表、子弹式液位仪表和闪烁的报警 LED。
uses
SysUtils, Classes, Controls, Forms, sgcUICore_Theme,
sgcGauges_Types, sgcGauges_Model, sgcGauges_VCL;
type
TTankPanel = class(TComponent)
public
Pressure: TsgcVCLRadialGauge;
Level: TsgcVCLLinearGauge;
Alarm: TsgcVCLLEDGauge;
procedure PressureThreshold(Sender: TObject; aThreshold: TsgcGaugeThreshold;
aValue: Double; aRising: Boolean);
end;
procedure TTankPanel.PressureThreshold(Sender: TObject;
aThreshold: TsgcGaugeThreshold; aValue: Double; aRising: Boolean);
begin
// runs in the main thread, whatever thread wrote the value
Alarm.Active := aRising;
end;
function CreateTankPanel(aForm: TForm): TTankPanel;
begin
Result := TTankPanel.Create(aForm);
Result.Pressure := TsgcVCLRadialGauge.Create(aForm);
Result.Pressure.Parent := aForm;
Result.Pressure.SetBounds(16, 16, 240, 240);
Result.Pressure.Title := 'Pressure';
Result.Pressure.Units := 'bar';
Result.Pressure.Theme := utDark;
Result.Pressure.Scales[0].Maximum := 10;
Result.Pressure.Scales[0].MajorInterval := 2;
with Result.Pressure.Scales[0].Ranges.Add do
begin
StartValue := 8;
EndValue := 10;
Color := $FFE34948;
end;
with Result.Pressure.Thresholds.Add do
begin
Value := 8;
Hysteresis := 0.5;
Direction := gtdBoth;
end;
Result.Pressure.Animation.Easing := geCubicOut;
Result.Pressure.OnThreshold := Result.PressureThreshold;
Result.Level := TsgcVCLLinearGauge.Create(aForm);
Result.Level.Parent := aForm;
Result.Level.SetBounds(272, 16, 320, 110);
Result.Level.Title := 'Tank level';
Result.Level.Units := '%';
Result.Level.LinearStyle := glsBullet;
Result.Level.Target := 80;
Result.Alarm := TsgcVCLLEDGauge.Create(aForm);
Result.Alarm.Parent := aForm;
Result.Alarm.SetBounds(272, 140, 64, 64);
Result.Alarm.OnColor := $FFE34948;
Result.Alarm.Blink := True;
Result.Level.Value := 62;
Result.Pressure.Value := 6.5;
// the same drawing code exports the gauge to PNG at twice its size
Result.Pressure.SaveToPNG(ExtractFilePath(ParamStr(0)) + 'pressure.png', 2);
end;C++ Builder 中使用生成头文件的同一个面板。
#include <vcl.h>
#include "sgcUICore_Theme.hpp"
#include "sgcGauges_Types.hpp"
#include "sgcGauges_Model.hpp"
#include "sgcGauges_VCL.hpp"
class TTankPanel : public TObject
{
public:
TsgcVCLRadialGauge *Pressure;
TsgcVCLLinearGauge *Level;
TsgcVCLLEDGauge *Alarm;
void __fastcall PressureThreshold(TObject *Sender,
TsgcGaugeThreshold *aThreshold, double aValue, bool aRising);
};
void __fastcall TTankPanel::PressureThreshold(TObject *Sender,
TsgcGaugeThreshold *aThreshold, double aValue, bool aRising)
{
// runs in the main thread, whatever thread wrote the value
Alarm->Active = aRising;
}
TTankPanel * __fastcall CreateTankPanel(TForm *Form)
{
TTankPanel *P = new TTankPanel();
P->Pressure = new TsgcVCLRadialGauge(Form);
P->Pressure->Parent = Form;
P->Pressure->SetBounds(16, 16, 240, 240);
P->Pressure->Title = "Pressure";
P->Pressure->Units = "bar";
P->Pressure->Theme = utDark;
P->Pressure->Scales->Items[0]->Maximum = 10;
P->Pressure->Scales->Items[0]->MajorInterval = 2;
TsgcGaugeRange *R = P->Pressure->Scales->Items[0]->Ranges->Add();
R->StartValue = 8;
R->EndValue = 10;
R->Color = 0xFFE34948;
TsgcGaugeThreshold *T = P->Pressure->Thresholds->Add();
T->Value = 8;
T->Hysteresis = 0.5;
T->Direction = gtdBoth;
P->Pressure->Animation->Easing = geCubicOut;
P->Pressure->OnThreshold = P->PressureThreshold;
P->Level = new TsgcVCLLinearGauge(Form);
P->Level->Parent = Form;
P->Level->SetBounds(272, 16, 320, 110);
P->Level->Title = "Tank level";
P->Level->Units = "%";
P->Level->LinearStyle = glsBullet;
P->Level->Target = 80;
P->Alarm = new TsgcVCLLEDGauge(Form);
P->Alarm->Parent = Form;
P->Alarm->SetBounds(272, 140, 64, 64);
P->Alarm->OnColor = 0xFFE34948;
P->Alarm->Blink = true;
P->Level->Value = 62;
P->Pressure->Value = 6.5;
// the same drawing code exports the gauge to PNG at twice its size
P->Pressure->SaveToPNG(ExtractFilePath(ParamStr(0)) + "pressure.png", 2);
return P;
}C# 中的 WinForms 版本,类名与 Delphi 相同。
using System;
using System.Drawing;
using System.Windows.Forms;
using esegece.sgcGauges;
using esegece.sgcUICore;
public class TankForm : Form
{
private readonly TsgcWinFormsRadialGauge pressure;
private readonly TsgcWinFormsLinearGauge level;
private readonly TsgcWinFormsLEDGauge alarm;
public TankForm()
{
ClientSize = new Size(610, 270);
pressure = new TsgcWinFormsRadialGauge { Bounds = new Rectangle(10, 10, 240, 240) };
pressure.Title = "Pressure";
pressure.Units = "bar";
pressure.Theme = TsgcUITheme.utDark;
pressure.Scales[0].Maximum = 10;
pressure.Scales[0].MajorInterval = 2;
TsgcGaugeRange red = pressure.Scales[0].Ranges.Add();
red.StartValue = 8;
red.EndValue = 10;
red.Color = 0xFFE34948;
TsgcGaugeThreshold limit = pressure.Thresholds.Add();
limit.Value = 8;
limit.Hysteresis = 0.5;
limit.Direction = TsgcGaugeThresholdDirection.gtdBoth;
pressure.Animation.Easing = TsgcGaugeEasing.geCubicOut;
level = new TsgcWinFormsLinearGauge { Bounds = new Rectangle(260, 10, 340, 110) };
level.Title = "Tank level";
level.Units = "%";
level.LinearStyle = TsgcGaugeLinearStyle.glsBullet;
level.Target = 80;
alarm = new TsgcWinFormsLEDGauge { Bounds = new Rectangle(260, 130, 64, 64) };
alarm.OnColor = 0xFFE34948;
alarm.Blink = true;
// OnThreshold runs in the UI thread, whatever thread wrote the value
pressure.OnThreshold = (sender, threshold, value, rising) => alarm.Active = rising;
Controls.AddRange(new Control[] { pressure, level, alarm });
level.Value = 62;
pressure.Value = 6.5;
}
}dotnet add package esegece.sgcGauges.WinFormsDelphi 和 C++ Builder 提供 Gallery、GalleryFMX、Headless、HMIPanel、DashboardGauges 和 MQTTLive。.NET 演示为 Gallery(WinForms)、GalleryWpf、GalleryAvalonia、ConsoleRender、HMIPanel 和 MQTTLive。
十种仪表,带主题切换、动画、模拟模式、200 km/h 处带报警 LED 的阈值、报警指示盘确认以及 2 倍 PNG 导出。
两个带水泵、液位、压力和报警指示盘报警的储罐,典型工艺界面的布局。
sgcDashboard 磁贴中的六个仪表,遵循仪表盘主题。可使用社区版构建。
在 Win32、Win64 和 Linux64 上写出 PNG 和 SVG 的控制台程序。
FireMonkey 上的图库,适用于 Windows 和 Android。
通过 sgcGaugesWS 桥接由 MQTT 提供数据的六个仪表。需要 sgcWebSockets 和消息代理。
sgcGauges 包含在 sgcUI Professional 和 Enterprise 版本中,也可单独购买。sgcGauges 还包含在 All-Access 套餐中。
免费的社区版(NuGet 上的 esegece.sgcGauges.Community)包含径向、线性、7 段数字、LED、LED 条和进度环仪表,支持区间、阈值、动画、主题和无界面输出。它不含 VU 表、时钟、罗盘或报警指示盘,没有额外的刻度或指针,也没有 sgcGaugesWS 桥接。
| 功能 | 社区版(免费) | 注册版 |
|---|---|---|
| 径向、线性、7 段数字、LED、LED 条和进度环 | ✓ | ✓ |
| 区间、阈值、动画和主题 | ✓ | ✓ |
| 无界面 PNG 和 SVG 输出 | ✓ | ✓ |
| VU 表、时钟、罗盘和报警指示盘 | − | ✓ |
| 每个仪表有多个刻度和指针 | − | ✓ |
| 14 段和点阵显示 | − | ✓ |
| sgcGaugesWS 桥接(MQTT、WebSocket、SSE) | − | ✓ |
每个仪表都有一个用于无界面渲染的框架无关模型、一个 VCL 控件(C++ Builder 也使用它)、一个 FireMonkey 控件,以及 WinForms、WPF 和 Avalonia 控件。
| 仪表 | VCL 和 C++ Builder | FireMonkey | .NET |
|---|---|---|---|
| 径向 | TsgcVCLRadialGauge | TsgcFMXRadialGauge | TsgcWinFormsRadialGauge |
| 线性(条形、温度计、子弹图) | TsgcVCLLinearGauge | TsgcFMXLinearGauge | TsgcWpfLinearGauge |
| 数字(7 段、14 段、点阵) | TsgcVCLDigitalGauge | TsgcFMXDigitalGauge | TsgcWinFormsDigitalGauge |
| LED | TsgcVCLLEDGauge | TsgcFMXLEDGauge | TsgcWinFormsLEDGauge |
| LED 条 | TsgcVCLLEDBarGauge | TsgcFMXLEDBarGauge | TsgcWinFormsLEDBarGauge |
| 进度环 | TsgcVCLProgressRingGauge | TsgcFMXProgressRingGauge | TsgcWinFormsProgressRingGauge |
| VU 表 | TsgcVCLVUMeterGauge | TsgcFMXVUMeterGauge | TsgcWinFormsVUMeterGauge |
| 时钟 | TsgcVCLClockGauge | TsgcFMXClockGauge | TsgcWinFormsClockGauge |
| 罗盘 | TsgcVCLCompassGauge | TsgcFMXCompassGauge | TsgcWpfCompassGauge |
| 报警指示盘 | TsgcVCLAnnunciatorGauge | TsgcFMXAnnunciatorGauge | TsgcAvaloniaAnnunciatorGauge |
.NET 列为每个仪表列出一个示例,每个仪表都有 TsgcWinForms、TsgcWpf 和 TsgcAvalonia 版本。所有仪表共用基类 TsgcCustomGauge,包含 Scales、Pointers、Thresholds 和 Ranges 集合。框架无关的模型(TsgcRadialGauge、TsgcLinearGauge 等)无需窗口即可渲染。
| 目标 | 组件 | 平台 |
|---|---|---|
| Delphi 7 到 13,VCL | TsgcVCL 仪表 | Win32,自 XE2 起支持 Win64 |
| Delphi XE6 到 13,FireMonkey | TsgcFMX 仪表 | Windows、macOS、iOS 和 Android |
| C++ Builder 2007 到 13 | TsgcVCL 仪表 | 生成的 .hpp 头文件和静态库 |
| Delphi 10.2 到 13,框架无关 | 仪表模型和无界面 PNG 与 SVG 输出 | Linux64(无 Linux 控件) |
| .NET Framework 4.7.2、.NET 8、9 和 10 | WinForms、WPF 和 Avalonia 仪表 | Windows 桌面、Avalonia 目标平台、无界面渲染 |
可以。在接收数据的线程中设置 Value。阈值会自动评估,OnThreshold 始终在主线程中触发,因此处理程序无需额外同步即可更新控件。当 sgcGaugesWS 桥接通过 MQTT、WebSocket 或 SSE 为指针提供数据时,也是这样工作的。
径向、线性、7 段数字、LED、LED 条和进度环仪表,支持区间、阈值、动画、主题和无界面输出。VU 表、时钟、罗盘、报警指示盘、额外的刻度和指针、14 段和点阵数字以及桥接属于注册版。请参阅版本。
可以,需要注册版和 sgcWebSockets。放置一个 TsgcGaugeFeedSource_MQTT,关联您的 MQTT 客户端,并为每个仪表添加一个带 Topic 和 JSON ValuePath 的绑定。支持带 + 和 # 的主题过滤器,FilterPath 可从共享主题中挑出某个设备。
FireMonkey 控件自 Delphi XE6 起可用,GalleryFMX 演示可在 Windows 和 Android 上运行。在 Linux64 上,sgcGauges 仅支持无界面:自 Delphi 10.2 起,模型可编译并渲染 PNG 和 SVG,但没有 Linux 控件。
可以。每个刻度都有自己的 Minimum、Maximum、MajorInterval 和次刻度,以及任意数量的彩色区间,可设置起点、终点、颜色、粗细和标题。径向仪表还可选择圆弧的起始角度和扫过角度。
可以。SaveToPNG 和 SaveToSVG 适用于每个控件和每个模型,无需窗口,因此服务或 Linux64 服务器可以把当前读数放入 PDF 或邮件。Gallery 演示还可导出 2 倍 PNG。
数字仪表根据刻度确定自身大小:当 Digits 为 0 时,它会预留刻度最大值所需的位数,而默认刻度范围是 0 到 100。请把 Scales[0].Maximum 设为您预期的最大值,或显式设置 Digits。