使用线程接收串口接收数据,DLT645 2007 智能电表抄表代码

这是一个使用C#编写的,通过线程实现串口通信,用于读取DLT645-2007标准智能电表数据的代码示例。程序包含初始化串口、设置参数、接收和发送数据的线程处理,并展示了如何解析接收到的数据并根据电表标识编码进行响应。代码中还包含了数据校验和处理逻辑,以及与界面交互的部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用线程是一种方式,也可以用自带的组件是异步的,如果不用组件用API写串口,应该启用两个线程,用作读写。

以下代码是可以用来学习的

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1 mainform;
        public Form2 f;
        private bool show_or_not = true;    //是否显示接收和发送
        private byte[] send = new byte[50];       //要发送的字节
        private byte[] receive = new byte[50];   //要接收的字节
        private byte sendnum;           //需要发送的数据个数
        private byte receivenum;           //需要返回的数据个数
        Thread trd;     //开一个线程

        private delegate void DelegateFunciton();

        public Form1()
        {
            InitializeComponent();
        }       

        private void CreateHeadersAndFillListview()
        {
            listView1.Columns.Add("数据大小", 77, HorizontalAlignment.Left);
            listView1.Columns.Add("数据项名称",140, HorizontalAlignment.Left);
            listView1.Columns.Add("标识编码", 75, HorizontalAlignment.Right);
        }
       
        private void PaintListView()
        {
            listView1.BeginUpdate();
            listView1.Items.Add("0", "00001234", 0);
            listView1.Items[0].SubItems.Add("正向有功功率");
            listView1.Items[0].SubItems.Add("0x9010");
            listView1.Items.Add("1", "00001234", 0);
            listView1.Items[1].SubItems.Add("费率1正向有功功率");
            listView1.Items[1].SubItems.Add("0x9011");
            listView1.Items.Add("2", "00001234", 0);
            listView1.Items[2].SubItems.Add("费率2正向有功功率");
            listView1.Items[2].SubItems.Add("0x9012");
            listView1.Items.Add("3", "00001234", 0);
            listView1.Items[3].SubItems.Add("费率3正向有功功率");
            listView1.Items[3].SubItems.Add("0x9013");
            listView1.Items.Add("4", "00001234", 0);
            listView1.Items[4].SubItems.Add("费率4正向有功功率");
            listView1.Items[4].SubItems.Add("0x9014");
            listView1.Items.Add("5", "00001234", 0);
            listView1.Items[5].SubItems.Add("反向有功功率");
            listView1.Items[5].SubItems.Add("0x9020");
            listView1.Items.Add("6", "00001234", 0);
            listView1.Items[6].SubItems.Add("费率1反向有功功率");
            listView1.Items[6].SubItems.Add("0x9021");
            listView1.Items.Add("7", "00001234", 0);
            listView1.Items[7].SubItems.Add("费率2反向有功功率");
            listView1.Items[7].SubItems.Add("0x9022");
            listView1.Items.Add("8", "00001234", 0);
            listView1.Items[8].SubItems.Add("费率3反向有功功率");
            listView1.Items[8].SubItems.Add("0x9023");
            listView1.Items.Add("9", "00001234", 0);
            listView1.Items[9].SubItems.Add("费率4反向有功功率");
            listView1.Items[9].SubItems.Add("0x9024");
            listView1.Items.Add("10", "00001234", 0);
            listView1.Items[10].SubItems.Add("反向无功功率");
            listView1.Items[10].SubItems.Add("0x9120");
            listView1.Items.Add("11", "00001234", 0);
            listView1.Items[11].SubItems.Add("费率1反向无功功率");
            listView1.Items[11].SubItems.Add("0x9121");
            listView1.Items.Add("12", "00001234", 0);
            listView1.Items[12].SubItems.Add("费率2反向无功功率");
            listView1.Items[12].SubItems.Add("0x9122");
            listView1.Items.Add("13", "00001234", 0);
            listView1.Items[13].SubItems.Add("费率3反向无功功率");
            listView1.Items[13].SubItems.Add("0x9123");
            listView1.Items.Add("14", "00001234", 0);
            listView1.Items[14].SubItems.Add("费率4反向无功功率");
            listView1.Items[14].SubItems.Add("0x9124");
            listView1.Items.Add("15", "00001234", 0);
            listView1.Items[15].SubItems.Add("瞬时有功功率");
            listView1.Items[15].SubItems.Add("0xB630");
            listView1.Items.Add("16", "00001234", 0);
            listView1.Items[16].SubItems.Add("A相有功功率");
            listView1.Items[16].SubItems.Add("0xB631");
            listView1.Items.Add("17", "00001234", 0);
            listView1.Items[17].SubItems.Add("B相有功功率");
            listView1.Items[17].SubItems.Add("0xB632");
            listView1.Items.Add("18", "00001234", 0);
            listView1.Items[18].SubItems.Add("C相有功功率");
            listView1.Items[18].SubItems.Add("0xB633");
            listView1.Items.Add("19", "00001234", 0);
            listView1.Items[19].SubItems.Add("瞬时无功功率");
            listView1.Items[19].SubItems.Add("0xB640");
            listView1.Items.Add("20", "00001234", 0);
            listView1.Items[20].SubItems.Add("A相无功功率");
            listView1.Items[20].SubItems.Add("0xB641");
            listView1.Items.Add("21", "00001234", 0);
            listView1.Items[21].SubItems.Add("B相无功功率");
            listView1.Items[21].SubItems.Add("0xB642");
            listView1.Items.Add("22", "00001234", 0);
         &nbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值