我有一台带有DLMS协议的电表,总线RS 485和RS 485转换器连接在我的电脑上。我正在尝试与DLMS串行通信。
代码
var app = angular.module("app", ["checklist-model"]);
app.controller('Ctrl4a', function($scope) {
$scope.roles = [];
});
我的问题是:
我运行此代码但没有显示任何内容。
预期输出为:
我需要任何回复。我尝试了不同的方式,阅读了很多文章,但问题没有解决。我可以使用软件ComTestSerial来检查它是否响应。是的它现在回应我希望它通过我的代码发回任何回复。
非常感谢,任何回复都会非常感激。
更新1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace DLMSRS485Console
{
class Program
{
static void Main(string[] args)
{
SerialPort myPort = new SerialPort();
myPort.PortName = "COM5";
myPort.BaudRate = 300;
myPort.Parity = Parity.None;
myPort.StopBits = StopBits.One;
myPort.DataBits = 8;
myPort.Handshake = Handshake.None;
myPort.RtsEnable = true;
myPort.Open();
myPort.WriteLine("/?!\r\n");
myPort.DataReceived += new SerialDataReceivedEventHandler(myPort_DataReceived);
Console.ReadKey();
myPort.Close();
}
private static void myPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string data = sp.ReadExisting();
Console.Write("Bytes to read : ");
Console.WriteLine(sp.BytesToRead);
while (sp.BytesToRead > 0)
{
Console.WriteLine(data);
}
}
}
}
答案 0 :(得分:1)
问题
我运行此代码并没有显示任何内容。
这一行之后:
string data = sp.ReadExisting();
BytesToRead
将为0
。因此,您永远不会输入while循环来显示读取data
。删除while循环,只显示数据:
private static void myPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
Console.Write("Bytes to read : ");
Console.WriteLine(sp.BytesToRead);
string data = sp.ReadExisting();
Console.WriteLine(data);
}