PC-->>232转485---------232转485 < <--PC
这样连接,,电脑之间传发数据是没有问题的.要是
PC-->> 232设备
这样的连接,,传输的数据也是没有问题的.
如果说是232转485错的话,为什么VB,超级终端,串口调试工具,,收到的数据是没有问题的呢..会不会是.net的SerialPort控件有问题呢或者是不是232转485的电压问题呢

解决方案 »

  1.   


    应该是编码的问题textBox1.Text = Encoding.Default.GetString(buf); 
      

  2.   

    上面的错了,应该是Encoding.Default.GetString(inbyte)           comm.Read(inbyte, 0, inbyte.Length); 
                textBox1.Text = Encoding.Default.GetString(inbyte0; 
      

  3.   

    谢谢你的回答;
    我调试程序时看到,,在执行comm.Read(inbyte, 0, inbyte.Length); 
    之后inbyte的内容就是错误的不知道是不是编码的问题
    我在程序中
    comm.Encoding = Encoding.ASCII;
    把Encoding下面的编码都用过了,,但都不对.
      

  4.   

    232-->485转接头电压一般为5~12V都可以的。
    应该不会是这个的问题,
    设断点进行调试看看收到数据的内容是什么看看是不是正确的再与显示的进行比较!
      

  5.   

    谢谢你的回答,
    我用的这个232-->485的接头,电压要是>7V的时候,PC端收不到数据.
    5~7V之间是没有问题的,不知道什么原因.
    断点进行调试时,看到Read之后inbyte数组中的数据就是错的,
    ,,每次错的内容不固定,也没有规律.
      

  6.   

    我也碰到跟你一样的问题.正确的是接收到25个字节"EB 90 EB 90 EB 90 ....",
    用serialport类,接收到23个或24个字节"FB ...",总之没有正确的数据.
    用MSCOMM控件,接收没问题,全都是正确的数据.
    serialport类,接收4种设备串口发送过来的数据.其他三种都对,只有一种要MSCOMM控件接收.
    用串口调试软件接收,16进制显示,是正确的.虽然这种设备是485,我用485转232接到笔记本串口.
    我想是不是SERIALPORT类的一个BUG呢?如果不是BUG,那有什么方法来解决呢?
      

  7.   

    首先,你发的命令和vb6的不同。
    vb6:
    Chr(2) + Chr(65) + Chr(66) + Chr(48) + Chr(51) + Chr(3)
    c#应该是,而你的代码中第二个字节写的 66
    {2,65,66,48,51,3}其次,你vb6中是检查长度的,c#是死等。
    修改为这样试试。private SerialPort comm = new SerialPort();
    protected override void OnLoad(EventArgs e) //打开串口
    {
    comm.PortName = "COM1";
    comm.Baudrate = 2400;
    comm.Open();
    }private void button2_Click(object sender, EventArgs e) //发送指令,接受数据
    {
    button2.Enabled = false;//避免反复点击
    byte[] send = {2,65,66,48,51,3};
    comm.ReadExisting();//读空
    comm.Write(send,0,send.Length);
    while(comm.BytesToRead<14) Application.DoEvents();
    byte[] response = new byte[14];
    comm.Read(response,0,14);
    textBox1.Text = Convert.ToString(response);
    button2.Enabled = true;
    }注意不要注册DataReceived,否则竞争读取,你就读不到了。
      

  8.   

    我原来是设备接485的,接电脑时使用485转232的,发现serialport接收过来的数据有问题.
    现在我接设备的232,接到电脑的232.发现serialport接过来的数据是正确的.
    看来接485和232还是有区别的.
      

  9.   

    485转232没碰到过这种问题,问题在程序里。逍遥观察仔细,VB和C#中的数据不同。
      

  10.   

    comm.StopBits = StopBits.One;请通过串口调试助手确定设备发送数据时是否有停止位,一般来讲MSCOMM、SerialPort和API操作串口都是类似的,不存在这个行那个不行的问题。
      

  11.   

    原来不是我一个人 遇到这问题!
    我也都检测了!用什么方法读的都是错数据
    VB一切正常!我就真想问微软 就弄个 .NET 来干什么!要抛弃VB
    .NET不知道存在多少BUG 用来做工控 风险很大