Moved MewExplorer to a new repo

This commit is contained in:
Felix Weiß
2023-07-10 11:00:34 +02:00
parent 88cdc1a36c
commit d8c18bbf34
58 changed files with 239 additions and 1608 deletions

View File

@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using CommandLine;
using MewtocolNet;
using MewtocolNet.ComCassette;
using MewtocolNet.Logging;
using MewtocolNet.RegisterBuilding;
using Spectre.Console;
namespace MewTerminal.Commands.OnlineCommands;
[Verb("rget", HelpText = "Gets the values of the given PLC registers")]
internal class GetRegisterCommand : OnlineCommand {
[Value(0, MetaName = "registers", Default = "DT0", HelpText = "The registers to read formatted as <mewtocol_name:plc_type> (DT0:INT)")]
public IEnumerable<string> Registers { get; set; }
internal override async Task AfterSetup(IPlc plc) {
var builder = RegBuilder.ForInterface(plc);
foreach (var reg in Registers) {
var split = reg.Split(":");
if (split.Length <= 1) {
throw new FormatException($"Register name was not formatted correctly: {reg}, missing :PlcVarType");
}
var mewtocolName = split[0];
var mewtocolType = split[1];
if (Enum.TryParse<PlcVarType>(mewtocolType, out var parsedT)) {
builder.FromPlcRegName(mewtocolName).AsPlcType(parsedT).Build();
}
}
await plc.ConnectAsync();
foreach (var reg in plc.GetAllRegisters()) {
await reg.ReadAsync();
}
AnsiConsole.Write(plc.GetAllRegisters().ToTable());
}
}

View File

@@ -0,0 +1,46 @@
using CommandLine;
using MewtocolNet;
using Spectre.Console;
namespace MewTerminal.Commands.OnlineCommands;
internal class OnlineCommand : CommandLineExcecuteable {
[Option('e', "ethernet", Default = "127.0.0.1:9094", HelpText = "Ethernet config")]
public string? EthernetStr { get; set; }
[Option('s', "serial", Default = null, HelpText = "Serial port config")]
public string? SerialStr { get; set; }
public override async Task RunAsync() {
try {
if (!string.IsNullOrEmpty(SerialStr)) {
} else {
var split = EthernetStr.Split(":");
string ip = split[0];
int port = int.Parse(split[1]);
using (var plc = Mewtocol.Ethernet(ip, port)) {
await AfterSetup(plc);
}
}
} catch (Exception ex) {
AnsiConsole.WriteLine($"[red]{ex.Message.ToString()}[/]");
}
}
internal virtual async Task AfterSetup(IPlc plc) => throw new NotImplementedException();
}

View File

@@ -0,0 +1,64 @@
using CommandLine;
using MewtocolNet;
using MewtocolNet.RegisterBuilding;
using MewtocolNet.Registers;
using Spectre.Console;
namespace MewTerminal.Commands.OnlineCommands;
[Verb("rset", HelpText = "Sets the values of the given PLC registers")]
internal class SetRegisterCommand : OnlineCommand {
[Value(0, MetaName = "registers", Default = "DT0", HelpText = "The registers to write formatted as <mewtocol_name:plc_type> (DT0:INT:VALUE)")]
public IEnumerable<string> Registers { get; set; }
internal override async Task AfterSetup(IPlc plc) {
var builder = RegBuilder.ForInterface(plc);
var toWriteVals = new List<object>();
foreach (var reg in Registers) {
var split = reg.Split(":");
if (split.Length <= 2) {
throw new FormatException($"Register name was not formatted correctly: {reg}, missing :PlcVarType:Value");
}
var mewtocolName = split[0];
var mewtocolType = split[1];
var value = split[2];
if (Enum.TryParse<PlcVarType>(mewtocolType, out var parsedT)) {
var built = builder.FromPlcRegName(mewtocolName).AsPlcType(parsedT).Build();
if(built is BoolRegister) toWriteVals.Add(bool.Parse(value));
else if(built is NumberRegister<short>) toWriteVals.Add(short.Parse(value));
else if(built is NumberRegister<ushort>) toWriteVals.Add(ushort.Parse(value));
else if(built is NumberRegister<int>) toWriteVals.Add(int.Parse(value));
else if(built is NumberRegister<uint>) toWriteVals.Add(uint.Parse(value));
else if(built is NumberRegister<float>) toWriteVals.Add(float.Parse(value));
else if(built is NumberRegister<TimeSpan>) toWriteVals.Add(TimeSpan.Parse(value));
}
}
await plc.ConnectAsync();
int i = 0;
foreach (var reg in plc.GetAllRegisters()) {
await reg.WriteAsync(toWriteVals[i]);
i++;
}
AnsiConsole.WriteLine("All registers written");
}
}