现要对PMAC725多功能电表进行串口编程,获取响应数据并解析, 通过com调试工具发送010300000001840A十六进制数据可获取响应01 03 02 56 42 07 D5,但通过自己写的程序可以发送, 无法获取响应.
sing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
namespace SerialPortDemo
{
class Test2
{
private SerialPort comm = new SerialPort();
private StringBuilder builder = new StringBuilder();//避免在事件处理方法中反复的创建,定义到外面。
private long received_count = 0;//接收计数
private long send_count = 0;//发送计数
public Test2()
{
comm.PortName = "com11";
comm.BaudRate = 9600;
comm.StopBits = StopBits.One;
comm.DataBits = 8;
comm.Parity = Parity.None;
comm.NewLine = "\r\n";
//添加事件注册
comm.DataReceived += new SerialDataReceivedEventHandler(comm_DataReceived);
comm.Open();
}
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
received_count += n;//增加接收计数
comm.Read(buf, 0, n);//读取缓冲数据
builder.Clear();//清除字符串构造器的内容
//因为要访问ui资源,所以需要使用invoke方式同步ui。
//判断是否是显示为16禁止
//依次的拼接出16进制字符串