none
关于c#访问串口的问题 RRS feed

  • 问题

  • 我使用的是USB转串口,串口可以使用串口调试助手进行通信,但却无法使用SerialPort类通信,原来.net 2.0 sp1是可以的,在升级到.net 3.5后就不行了,我使用串口通信监视工具,查看到串口打开成功,各项参数设置正确,可以向串口写入指令,却没有收到回复.

    简易代码如下:

    using System;
    using System.IO.Ports;

    namespace SerialPortTest
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                SerialPort serialPort = new SerialPort();
                Console.Write("请输入Com名:");
                string comName=Console.ReadLine();
                serialPort.PortName = comName;
                serialPort.BaudRate = 115200;
                serialPort.StopBits =StopBits.One;
                serialPort.ReadTimeout = 1000;
                serialPort.Open();
                serialPort.Write("at\r\n");
                string recv = serialPort.ReadExisting();
                Console.Write("获取到的数据:{0}\r\n按任意键退出.",recv);
                serialPort.Close();
                Console.ReadLine();
            }
        }
    }

    2008年8月15日 3:11

全部回复

  • 没有人遇到与我同样的问题吗?

     

    我可是连操作系统都重装了啊!!

     

    2008年8月15日 6:43
  • 在Open前,加这一句试试

    serialPort.ReceivedBytesThreshold = 1

     

    2008年8月15日 11:02
  • 还是不行呢,就是没有数据返回,怪怪哦,我都郁闷了

    2008年8月18日 1:24
  • 串口返回的数据,应该是你需要连接该设备的引导文件*.dll,这样才肯能会获得该设备的信息,给你个例子希望对你有帮助

    [DllImport("SETCRW_S.dll", EntryPoint = "MifareFindCard",CallingConvention=CallingConvention.StdCall)]//寻卡函数
            public static extern int MifareFindCard(ref MifareSNR snr, ref UInt16 CardType);
            /// <summary>
            /// 参数说明:
            /// 入口:req_code——寻卡类型,有两个值可用,分别是PICC_REQSTD与PICC_REQALL
            /// 命令 PICC_REQSTD 值26 说明:寻处于IDLE状态的卡
            /// 命令 PICC_REQALL 值52 说明:寻所有卡,也被称作唤醒命令
            /// 出口:atq——卡片响应字,非0时表示在天线感应范围内(以下简称为读卡区)有
            /// Mifare系列芯片,atq为所有卡片的响应字,当多张卡的响应字存在冲突时,冲突位为1。
            /// 返回值:0,寻卡成功,非0操作失败。
            /// 说明:该函数通知读卡器用制定的寻卡代码来激活读卡区中的卡片,并等待卡片的响应。
            /// PICC_REQSTD只用来激活在刚上电的或处于IDEL状态的卡片,PICC_REQALL则会激活所在
            /// 在读卡区的卡片。
            /// <param name="req_code">PICC_REQSTD 值0x26 说明:寻处于IDLE状态的卡;PICC_REQALL 值0x52 说明:寻所有卡,也被称作唤醒命令</param>
            /// <param name="atq">S50的卡返回是4</param>
            /// <returns>0读卡成功,非0读卡失败</returns>
            /// </summary>
            [DllImport("SETCRW_S.dll", EntryPoint = "MifarePiccRequest", CallingConvention=CallingConvention.StdCall)]
            public static extern int MifarePiccRequest(byte req_code, ref  UInt16 atq);

    =========================================================================

     private void xunkahanshu()//寻卡函数搞定 S50的卡返回是4
            {
                InitCRW(1);
                CRW_Beep(550);
                byte code = 0x26;

                label1.Text = MifarePiccRequest(code, ref atq).ToString();
                textBox1.Text = atq.ToString();
                CloseCRW(1);
            }

    ==========================================================================

    还有疑问可以联系我邮件地址是:yuanchunze@sohu.com

     

    2008年8月18日 2:51
  • 不知你的dll从何处可以获取到?谢谢

    2008年8月18日 4:48
  • 一般硬件都带sdk的,没有可以与硬件厂商联系!

    2008年8月19日 0:23
  • 标准串口操作,还要用封装类?这不倒回去了?

    2008年8月19日 1:23
  •  

    兄弟,我也遇到这个问题了,我一开始就用3.5开发的,怎么都不成功.没发获取返回数据.
    2008年9月4日 18:50
  • 别用readexisting...换其它的。。。。

    2008年9月5日 0:55
  • 发送和接收之间加延时试试看

    2008年9月9日 9:13