C#开发电源电压电流上位机软件+stm32下位机源码 产品介绍: 1.该程序利用了codeproject上的zedgraph(绘图)、knob(表盘旋钮)、manometers(表盘)、ribbon、lbindustrialctrls(数码管等)这些控件, 并结合了诺比特usb2can中的串口通讯协议,源码VS2012。 主要功能: 1.自动获取本机所有串口号 2.双坐标轴动态显示设定电压、ad电压、设定电流、ad电流(电压、电流更新频率10Hz,温度更新频率0.5Hz) 主要思路: 串口接收数据-> 存入queue -> _dataParseThread线程调用AnalyzePackage()函数解析每一个字节后组成完整的一帧 -> 将相应的数据添加到curve的pointlist中(用到了c#中的bitconverter将 byte[4]转float) 下位机仅执行程序,但是没有连接春风电源的模拟部分,所以采样不准。

最近搞了个挺有意思的工业控制项目,用C#撸了个上位机监控电源参数,配合STM32下位机玩数据采集。这项目把工业仪表盘、实时曲线、串口通讯都串起来了,适合想玩工控上位机的老铁参考。(源码在文末)

先说核心玩法:STM32那边每秒吐10次电压电流数据,上位机用串口收数,转成曲线和仪表盘。咱们重点聊聊上位机的几个关键实现点。

串口处理这块,直接上System.IO.Ports.SerialPort组件。自动获取串口这功能必须安排上,玩过单片机的都知道手动选COM口有多反人类:

string[] ports = SerialPort.GetPortNames();
cmbPorts.Items.Clear();
foreach (string port in ports) {
    cmbPorts.Items.Add(port);
}

数据接收线程用了个生产者-消费者模型。串口接收事件里只管往队列怼原始字节,解析交给后台线程,避免界面卡顿:

private Queue<byte> _rawDataQueue = new Queue<byte>(1024);

void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) {
    byte[] buffer = new byte[sp.BytesToRead];
    sp.Read(buffer, 0, buffer.Length);
    lock (_rawDataQueue) {
        foreach (byte b in buffer) {
            _rawDataQueue.Enqueue(b);
        }
    }
}

数据解析线程才是重头戏。下位机协议是自定义的,帧头0xAA+类型+数据+校验。这里有个坑——C#的BitConverter转float要注意字节序:

float voltage = BitConverter.ToSingle(new byte[] { data[3], data[2], data[1], data[0] }, 0);
// 春风电源的AD值过来是反的,得手动倒序

界面控件选型有讲究。ZedGraph确实比自带Chart控件给力,动态曲线双Y轴得这么玩:

GraphPane pane = zedGraphControl1.GraphPane;
pane.YAxisList.Clear();
YAxis voltageAxis = pane.YAxisList.Add("电压(V)");
YAxis currentAxis = pane.YAxisList.Add("电流(A)");
LineItem voltageCurve = pane.AddCurve("实时电压", new PointPairList(), Color.Red);
LineItem currentCurve = pane.AddCurve("实时电流", new PointPairList(), Color.Blue);

仪表盘控件LBIndustrialCtrls里的数码管是真香,数据绑定直接走属性:

lbLedDisplayVoltage.Value = voltage;
lbLedDisplayCurrent.Value = current;

要说遗憾就是下位机这边还没接春风电源的模拟前端,现在采样的AD值飘得跟心电图似的。不过通讯框架已经跑通,等硬件到位直接怼上就能用。

源码和STM32工程已打包,Github链接:https://github.com/xxxx/power-monitor (注:此为示意地址)下回咱们可以聊聊怎么用C#做PID参数整定界面,想看的评论区吱个声~

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐