我要做一个模拟数显表(下位机)的程序,但是怎样用SerialPort的某个属性或方法,知道上位机程序发来数据的校验方式是什么呢?
例如,上位机发送数据的校验方式是Parity.Mark,怎么获取这个值?
注意是采用SerialPort类,站在下位机角度考虑问题

解决方案 »

  1.   

    没弄过
    可以看看串口操作说明,希望对你有帮助
    http://www.cnblogs.com/shuihuren/articles/987522.html
      

  2.   

    一般是通过 RS232 \RJ45 \串口来通信的 !你看确定一下接口吧!
      

  3.   

    我是用c#程序来模拟下位机,但是我找了SerialPort类的成员,没有办法获得发送过来的数据的校验位
    如果是该接口没有暴露出来,就只要把System.dll中的SerialPort类反编译来改了,不知道有高手有这方面的经验没有
      

  4.   

    是rs232,就是COM口,比如现在用2台机器,一台做上位机,一台模拟下位机
      

  5.   

    你这个问题就好比写tcp/ip客户端的时候问怎么从服务器那里获得服务器的IP和端口。
      

  6.   

    我的感觉:
    如果是在单片机(如89C52)系统中处理串口来的数据,相当于是自己写驱动程序,所以能够获得校验位,而在运行windows操作系统的PC机上,驱动程序已经把底层操作隐藏了。因此,除非自己写windows下的串口驱动程序,否则无法获得校验位
      

  7.   

    可以用RTS和DTR置高置低来约定,前提不是三线串口
      

  8.   

    改用USB吧..我们的都改了..串口不好用.
      

  9.   

    LZ,串口通讯的效验方式是通讯的一个重要组成参数,如果双方不能达成而通信,也是没有意义的。就跟在英文操作系统下看汉字一样,是乱码。
    我只见过使用通讯协议在通讯过程中更改效验的,没有见过LZ这样需求。请好好想想是否符合实际应用。
      

  10.   

    我是想写一个模拟的下位机用于教学
    直接用虚拟串口对连接两个应用程序,不是真实的工业应用,看来SerialPort类是不行了,再查下用win32 API的CreateFile之类行不,实在不想去弄那个麻烦的驱动程序
      

  11.   

    哪位有经验请指导下,用什么语言工具都可以:
    mscomm,API或第三方组件都行,关键是怎么实现
      

  12.   

    现在的环境是这样:
    (1)系统中安装了ELTIMA Virtual Serial Port虚拟串口对(COM5<-->COM6)
    (2)上位机程序是
        private SerialPort sp;
        public Form1()
        {
          InitializeComponent();
          sp = new SerialPort("COM5", 9600, Parity.Odd, 8, StopBits.One);
          sp.Open();
        }    private void button1_Click(object sender, EventArgs e)
        {      byte[] b ={ 0xA0, 0x33, 0x1C, 0x01, 0x05 };
          sp.Parity = Parity.Odd;
          sp.Write(b, 0, 1);
          sp.Parity = Parity.Mark;
          sp.Write(b, 1, 1);
        }下位机(模拟)程序也运行在同一台计算机上,不管用什么语言编写,关键是如何获取上位机发送过来的数据校验位?
    当然两者事先约定,第一字节用Odd,第二字节用Mark,但是下位机方必须把数据校验位获取到,才能进行判别。
    ---------------------
    请真正的高手把下位机程序不管用什么语言(开发环境)编写出来,分不够另外开帖子再加。
      

  13.   

    byte[] b ={ 0xA0, 0x33, 0x1C, 0x01, 0x05 }; 
          sp.Parity = Parity.Odd; 
          sp.Write(b, 0, 1); 
          sp.Parity = Parity.Mark; 
          sp.Write(b, 1, 1); 
    你这种方式就是在通讯中采用改变效验的方式来进行通讯。
    按照你这个的写法,你下位机应该很明确啊?
    一开始用0DD方式监听,
    如果收到0xA0,则将效验位改为MARK,继续接收。
      

  14.   

    另外开了个帖子
    http://topic.csdn.net/u/20090530/14/c987fc8d-3dd8-4d66-88b4-f5e8db769aa7.html哪位高手能解决,两个帖子的分一起给