我正在使用Wifibot平台开发机器人项目,这个机器人包含一个 Windows Embedded Standard 7操作系统,为了简化,我想从 WES7发送一些位通过RS232控制平台电机使机器人移动 DSPIC 3FF ,我用C#开发了很多程序,但没有结果,你们有什么帮助。
using System;
using System.IO.Ports;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace sendsendRS232
{
class Program
{
static void Main(string[] args)
{
SerialPort serial = new SerialPort();
serial.PortName = "COM2";
serial.BaudRate = Convert.ToInt32(9200);
serial.Handshake = System.IO.Ports.Handshake.None;
serial.Parity = Parity.None;
serial.DataBits = 8;
serial.StopBits = StopBits.One;
serial.ReadTimeout = 200;
serial.WriteTimeout = 50;
serial.Open();
if (serial.IsOpen)
{
byte[] hexstring = { 255, 0, 120, 0};
foreach (byte hexval in hexstring)
{
byte[] _hexval = new byte[] { hexval };
serial.Write(_hexval, 0, 1);
Thread.Sleep(1);
}
}
}
}
}
答案 0 :(得分:0)
由于我们没有您正在与之通信的设备的文档,因此我们没有太多要继续,因此我们无法检查串行端口设置,或者您要写入的4字节数据该端口是发送给它的正确消息。
由于您将握手设置为无,因此您可能希望将DtrEnable和RtsEnable设置为要发送的设备的真实典型设置。
检查可能是一个问题的另一件事是数据的“终结性”。如果您发送的数据包含多字节值且一个设备是big-endian而另一个设备是little-endian,那么发送字节的顺序很重要,请参阅following more detailed explanation。
不幸的是,它通常归结为尝试设置,甚至使用Hyperterminal或Putty等终端程序连接到设备并发送相同的数据。
另外,在处理像SerialPort一样实现IDisposable的类时,我会在using语句中使用它,例如:
using(SerialPort serial = new SerialPort())
{
// do stuff
}
这样,当连接超出范围时,连接将始终关闭并处理掉。