C#开发上位机控制系统 主控界面,可以PLC通讯,可以接入485通讯。 可多样形成工艺编辑界面
·
C#开发上位机控制系统 主控界面,可以PLC通讯,可以接入485通讯。 可多样形成工艺编辑界面,避免Excel表格的繁琐。 曲线显示美观,纵横坐标可以放缩,游标可以显示具体数值。
主控界面设计得先解决布局问题。在WinForms里SplitContainer是个好东西,左边导航栏,右边工作区,下面状态栏,这结构用户看着舒服。代码里加个自定义控件集合,比如这样:
private void InitializeWorkspace()
{
var flowPanel = new FlowLayoutPanel
{
Dock = DockStyle.Fill,
WrapContents = false,
AutoScroll = true
};
splitContainer.Panel2.Controls.Add(flowPanel);
}
PLC通讯这块,得搞个抽象层。见过太多项目把Modbus TCP和串口485混着写的,后面维护简直灾难。试试工厂模式:
public interface IPlcDriver
{
bool Connect(string param);
byte[] ReadHoldingRegisters(ushort address, ushort length);
}
public class ModbusTcpDriver : IPlcDriver
{
// 具体实现用NModbus库
public byte[] ReadHoldingRegisters(ushort address, ushort length)
{
return _modbus.ReadHoldingRegisters(address, length);
}
}
工艺编辑界面要避免Excel,但也不能搞得太复杂。用PropertyGrid控件配合自定义对象,比表格直观多了:
public class ProcessStep
{
[Category("参数"), DisplayName("加热温度")]
public int Temperature { get; set; }
[Category("时间控制"), DisplayName("保持时间")]
public TimeSpan Duration { get; set; }
}
// 绑定数据
propertyGrid.SelectedObject = new ProcessStep();
曲线控件推荐用OxyPlot,比自带的Chart控件灵活。实现缩放时注意坐标轴重置事件:
private void OnAxisChanged(object sender, AxisChangedEventArgs e)
{
if (e.Axis == plotModel.Axes[0]) // X轴
{
// 动态调整Y轴范围
plotModel.Axes[1].Zoom(calculatedMinY, calculatedMaxY);
}
}
游标跟踪用鼠标移动事件处理,别用Timer轮询,效率太低:
void OnMouseMove(object sender, OxyMouseEventArgs e)
{
var point = plotModel.GetPoint(e.Position);
txtValue.Text = $"{point.X:F2}, {point.Y:F2}";
}
串口通讯注意线程安全,收到数据时记得用Control.Invoke更新UI。建议用队列做缓冲,别直接操作控件:
private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] buffer = new byte[serialPort.BytesToRead];
serialPort.Read(buffer, 0, buffer.Length);
BeginInvoke((Action)(() => ProcessData(buffer)));
}
最后给主界面加点现代化元素,用DevExpress的DockPanelManager做布局管理,比原生控件好看多了。不过记得处理好许可证问题,商用项目别踩坑。
更多推荐


所有评论(0)