111,131
社区成员
发帖
与我相关
我的任务
分享 //串口初始化
public void Initialize()
{
_serialPort.PortName = "COM1";
_serialPort.BaudRate = 19200;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.Two;
_serialPort.Parity = Parity.Odd;
_serialPort.ReadTimeout = 3000;
_serialPort.WriteTimeout = 3000;
//尝试分别将RtsEnable和DtrEnable设置为True,但是没有效果
//_serialPort.RtsEnable = true;
//_serialPort.DtrEnable = true;
//_serialPort.Handshake = Handshake.None;
_serialPort.ReadBufferSize = 8;
_serialPort.ReceivedBytesThreshold = 1;
_serialPort.DataReceived -= CommDataReceived;
_serialPort.DataReceived += CommDataReceived;
_serialPort.Open();
}
//数据监听
private void CommDataReceived(Object sender, SerialDataReceivedEventArgs e)
{
int len = _serialPort.BytesToRead;
Byte[] readBuffer = new Byte[len];
_serialPort.Read(readBuffer, 0, len);
}
//主动读取数据
private void Scan()
{
while (true)
{
int len = _serialPort.BytesToRead;
//在主动读取时,能够获取到len为8,但是读到的数据为无效数据(0x3F 0x3F 0x3F 0x3F 0x3F 0x3F 0x3F 0x3F)
if (len >= 8)
{
Byte[] readBuffer = new Byte[len];
_serialPort.Read(readBuffer, 0, len);
}
Thread.Sleep(30);
}
}
我也遇到了这个问题,.用串口助手可以正常收到PLC发出的数据,但是用c#写的串口功能,始终收不到数据(注册的DataReceived事件始终没有触发)。
我也是试了主动读取数据全部都是0x3F
但是我试了DtrEnable或者RtsEnable为True, 没有效果,而且串口助手里面能收到数据,也没有配置这两个值。
有大神知道什么原因吗?