DLMS 프로토콜의 전기 계량기, 버스 RS 485 및 RS 485 변환기가 내 컴퓨터에 연결되어 있습니다. DLMS 시리얼과 통신하려고합니다.버스 RS 485 및 프로토콜 DLMS with C#
코드
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);
}
}
}
}
내 문제는 다음과 같습니다
는이 코드를 실행하고 아무것도 표시되지 않습니다.
예상 출력은 다음과 같습니다 내가 어떤 응답을 필요
. 여러 가지 방법으로 시도했지만 많은 기사를 읽었지만 문제는 해결되지 않았습니다. 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("COM5");
//myPort.PortName = "COM5";
myPort.BaudRate = 9600;
myPort.Parity = Parity.None;
myPort.StopBits = StopBits.One;
myPort.DataBits = 8;
myPort.Handshake = Handshake.None;
myPort.RtsEnable = true;
myPort.Open();
myPort.DataReceived += new SerialDataReceivedEventHandler(myPort_DataReceived);
myPort.WriteLine("Hello\n");
Console.Write("Bytes to read : ");
int b = myPort.BytesToRead;
Console.WriteLine(b);
//myPort.WriteLine("rtfm ^^");
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);
Console.WriteLine(data);
}
}
}
답장으로 보내시겠습니까? –
이후'ReadExisting()''sp.BytesToRead'는'0'이됩니다. 따라서 while 루프는 입력되지 않습니다. while 루프를 제거하십시오. 너가 거기 들어가야하면 이제까지 함정이다 –
무언가를 보내기 전에 사건에 구독하십시오 (커뮤니케이션은 느린, 그러나 아직도). "어떤 응답"이란 무엇입니까? 'DataReceived' 이벤트의 첫 번째 줄에 중단 점을 설정하십시오. 아무것도? COM 포트를 올바르게 설정하고 올바른 바이트/텍스트 (rtfm ^^)를 보내고 있는지 확인하십시오. '/?! \ r \ n "'당신이 기대하는 바가 아닐 수도 있습니다 ('\ n' **은 ** 이미'\ xd \ xa'입니다). 당신은 시리얼 스니퍼를 사용하여 트래픽을 가로 채고 로그 할 수 있습니다 ('ComTestSerial'을 위해서도, 어쩌면 몇 가지 중요한 세부 사항이 있습니다). 시간 초과 등을 설정하지 않았습니다. – Sinatr