将 StandardScene 各插件的配置/监控窗体从 WinForms 迁移到 CycleGUI(删除 .Designer.cs/.resx,重写为 PanelBuilder 立即模式 UI,新增 CycleUiHelper 统一对话框)。 同时修复代码审核中的问题: - 后台文件写入加锁 + try/catch(ButtonBoxManager / DoorManager,对齐 LoopViewer.SaveTasks 模式) - CoderFieldsMetadata.cs 启用 #nullable enable,消除 CS8632 警告 - DummyCar 移除已废弃的 rightClickAction()/SetPosition() - CarRemoteHelper.OpenVehicleWebPage 的 Process.Start 加 try/catch - 重命名名不副实的 Mstsc()(现为打开网页) - 统一弃元命名为 _ - TrafficInterlockViewer 改用稳定 Id(GUID)做选择/编辑,替代行索引 - csproj 改用 $(CGUILibDir) 解析 CycleGUI,绝对路径收敛到 Directory.Build.props 构建:dotnet build StandardScene.sln → 0 错误,30 警告(均为历史遗留)。 注:static 单例状态重构(审核第 8 项)暂未处理,留待单独任务。
96 lines
3.4 KiB
C#
96 lines
3.4 KiB
C#
using LessokajiWeaverUtilities.Utilities;
|
|
using Newtonsoft.Json;
|
|
using SimpleLite.RCS;
|
|
using SimpleLite.RCS.CarTypes;
|
|
using SimpleCore;
|
|
using SimpleCore.Compiler;
|
|
using SimpleCore.PropType;
|
|
using System;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using StandardScene.Utils;
|
|
|
|
namespace StandardScene.CarTypes
|
|
{
|
|
[CarType(Name = "锂电双举升")]
|
|
[I18N.DocumentTranslation(Name = "Dual Lift Car", locale = "en")]
|
|
public class DualLiftingCar : GhostCar
|
|
{
|
|
public static async Task<DualLiftingCar> Create()
|
|
{
|
|
var car = new DualLiftingCar()
|
|
{
|
|
lstatus = "连接中",
|
|
address = "127.0.0.1",
|
|
name = "锂电双举升"
|
|
};
|
|
return car;
|
|
}
|
|
public override string SetDisplayInfo()
|
|
{
|
|
try
|
|
{
|
|
var str = $"{name}({id})\n";
|
|
status.enums.TryGetValue("ChassisMode", out var manual);
|
|
var ms = manual == "0" ? "自动" : "手动";
|
|
status.enums.TryGetValue("Soc", out var soc);
|
|
str = $"{str}{ms}|soc:{soc}";
|
|
var alarmStr = Commons.GetCarStatus(this, "AlarmInfo");
|
|
if (alarmStr != "")
|
|
str = $"{str}|{alarmStr}";
|
|
if (status.enums.TryGetValue("ElectricCurrent", out var electricCurrent) &&
|
|
!string.IsNullOrEmpty(electricCurrent))
|
|
{
|
|
var charging = float.Parse(electricCurrent) * 0.01f > 0 ? "充电中" : "未充电";
|
|
str = $"{str}|charge:{charging}";
|
|
}
|
|
|
|
var thresSpeed = Commons.CarValue(this, "ThresSpeed");
|
|
str = $"{str}{((thresSpeed <= 0) ? "|避障触发" : "")}";
|
|
return str;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine(e);
|
|
return "bad car";
|
|
}
|
|
}
|
|
|
|
[MethodMember(Name = "进入小车管理界面", Description = "在浏览器中打开小车 Web 页面")]
|
|
[I18N.DocumentTranslation(Name = "Open vehicle management page", Description = "Open the car's management page in browser", locale = "en")]
|
|
public void OpenVehicleManagementPage()
|
|
{
|
|
CarRemoteHelper.OpenVehicleWebPage(address);
|
|
}
|
|
|
|
private bool _running;
|
|
[MethodMember(Name = "测试")]
|
|
[I18N.DocumentTranslation(Name = "Start test", locale = "en")]
|
|
public async void Test()
|
|
{
|
|
_running = true;
|
|
var siteA = SimpleLib.GetAllSites().First(s => s.name == "A");
|
|
var siteB = SimpleLib.GetAllSites().First(s => s.name == "B");
|
|
while (_running)
|
|
{
|
|
var planA = new SegmentPlan() { usingCar = this };
|
|
planA.FindRoute(SimpleLib.GetSite(GetLastSite()), siteA);
|
|
await planA.Compile("A").Queue();
|
|
var planB = new SegmentPlan(){usingCar = this };
|
|
planB.FindRoute(siteA, siteB);
|
|
await planB.Compile("B").Queue();
|
|
Thread.Sleep(1000);
|
|
}
|
|
}
|
|
|
|
[MethodMember(Name = "停止测试")]
|
|
[I18N.DocumentTranslation(Name = "Stop test", locale = "en")]
|
|
public void Stop()
|
|
{
|
|
_running = false;
|
|
}
|
|
}
|
|
}
|