Wifibot RS232串行通信

时间:2014-02-24 18:47:19

标签: c# windows-ce

我正在使用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);
           }
       }
    }
}
}

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
}

这样,当连接超出范围时,连接将始终关闭并处理掉。