You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.9 KiB
102 lines
3.9 KiB
using Godot; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.IO.Ports; |
|
|
|
namespace EGFramework.Examples.ModbusDebugTool{ |
|
public partial class ViewEdit : Control,IEGFramework |
|
{ |
|
public DataModbusItem DataModbusItem { set; get; } |
|
public ModbusRegisterType ModbusRegisterType { set; get; } |
|
|
|
public Label Title { set; get; } |
|
public LineEdit EditDeviceAddress { set; get; } |
|
public LineEdit EditRegisterAddress { set; get; } |
|
public OptionButton SerialPortSelect { set; get; } |
|
public ViewMenu ViewMenu { set; get; } |
|
|
|
public Dictionary<string,int> SerialPortMapping { set; get; } = new Dictionary<string, int>(); |
|
|
|
public override void _Ready() |
|
{ |
|
Title = this.GetNode<Label>("Title"); |
|
SerialPortSelect = this.GetNode<OptionButton>("List/SerialPortSelect"); |
|
EditDeviceAddress = this.GetNode<LineEdit>("List/Device"); |
|
EditRegisterAddress = this.GetNode<LineEdit>("List/Register"); |
|
ViewMenu = this.GetNode<ViewMenu>("/root/Menu"); |
|
ModbusRegisterType = ModbusRegisterType.HoldingRegister; |
|
RefreshSerialPort(); |
|
} |
|
|
|
public void RefreshSerialPort(){ |
|
string[] portNames = SerialPort.GetPortNames(); |
|
SerialPortMapping.Clear(); |
|
int index = 0; |
|
SerialPortSelect.Clear(); |
|
foreach (string portName in portNames) |
|
{ |
|
SerialPortMapping.Add(portName,index); |
|
SerialPortSelect.AddItem(portName,index); |
|
index++; |
|
} |
|
} |
|
|
|
public void Modify(DataModbusItem modbusItem){ |
|
DataModbusItem = modbusItem; |
|
ModbusRegisterType = modbusItem.Type; |
|
Title.Text = ModbusRegisterType.ToString(); |
|
EditDeviceAddress.Text = modbusItem.DeviceAddress.ToString(); |
|
EditRegisterAddress.Text = modbusItem.RegisterAddress.ToString(); |
|
if(SerialPortMapping.ContainsKey(modbusItem.SerialPort)){ |
|
SerialPortSelect.Selected = SerialPortMapping[modbusItem.SerialPort]; |
|
} |
|
} |
|
|
|
public void New(ModbusRegisterType type){ |
|
DataModbusItem = null; |
|
ModbusRegisterType = type; |
|
Title.Text = ModbusRegisterType.ToString(); |
|
} |
|
|
|
public void OnClose(){ |
|
this.Visible = false; |
|
} |
|
|
|
public void Save(){ |
|
try |
|
{ |
|
DataModbusItem modbusItem = new DataModbusItem(){ |
|
DeviceAddress = (byte)int.Parse(EditDeviceAddress.Text), |
|
RegisterAddress = (ushort)int.Parse(EditRegisterAddress.Text), |
|
SerialPort = SerialPortSelect.GetItemText(SerialPortSelect.GetSelectedId()), |
|
Type = ModbusRegisterType |
|
}; |
|
if(DataModbusItem != null){ |
|
this.EGGetObject<DataModbus>().Items.Remove(DataModbusItem.GetKey()); |
|
} |
|
this.EGGetObject<DataModbus>().Items.Add(modbusItem.GetKey(),modbusItem); |
|
this.EGSave().SetObjectToJson(this.EGGetObject<DataModbus>()); |
|
this.Visible = false; |
|
this.ViewMenu.RefreshSaveData(); |
|
|
|
} |
|
catch (System.Exception ex) |
|
{ |
|
GD.Print("Save Exception" + ex); |
|
} |
|
|
|
} |
|
} |
|
|
|
public static class ViewEditExtension{ |
|
public static void OnModifyEdit(this Node self,DataModbusItem dataModbusItem){ |
|
self.GetTree().CurrentScene.GetNode<ViewEdit>("Edit").Visible = true; |
|
self.GetTree().CurrentScene.GetNode<ViewEdit>("Edit").Modify(dataModbusItem); |
|
} |
|
public static void OnNewEdit(this Node self,ModbusRegisterType type){ |
|
self.GetTree().CurrentScene.GetNode<ViewEdit>("Edit").Visible = true; |
|
self.GetTree().CurrentScene.GetNode<ViewEdit>("Edit").New(type); |
|
} |
|
} |
|
} |
|
|
|
|