5359|14

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

怎么测试串口与GPRS MODEM是否连通,在程序中? [复制链接]

  在程序测试串口与GPRS MODEM是否连通,发“at”返回“ok”
   这样写:
     sp.WriteLine("at\r");
     string str = sp.ReadLine();
   运行后就没反应了,也得不到"OK"喃?
   用的VS2005,C#,HP PDA

最新回复

对于有些系统,在打开串口后,还需要将RtsEnable设置为True,这样才能读写数据,否则不能正常读写数据。  详情 回复 发表于 2009-2-20 23:30
点赞 关注

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没用过C#,不过很好奇,C#下对串口都是这样顺序操作的吗?没有线程的概念?直接ReadLine(),CPU的运行速度远超过串口,怎么确保这个函数能读到串口信息呢?
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
肯定是方法错误,发OK后,需要去串口中断处等返回的字符串。

楼主需要去看看如何操作串口。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
要用serialport类的DataReceived事件~~等待回复信息~
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
用了DataReceived事件,不过还是没反应,不知是不是我没用对

在构造函数里,注册了一个这个事件 sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
然后在事件函数里
      void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            MessageBox.Show("in event");
            string str = sp.ReadLine();
            MessageBox.Show(str);
        }
运行程序是,程序没调用这个事件.
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
事件没有被触发
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    this.Invoke(new EventHandler( Add_Received));//当有数据来的时候调用Add_Received函数
}
public void Add_Received(object sender, EventArgs e)
{
    ....//要执行的程序
}

试一下吧~
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
如果仅仅测试串口与GPRS MODEM是否连通,用串口超级终端好了,直接发送at命令阿
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
用串口终端能连通,在程序里发指令就连不通,收不到回复。触发不了事件。
TO:kidhuang
  试了,还是得不行。
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

10
 
你的程序具体是怎么写的~可以发出来看看么?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

11
 

    public partial class Form1 : Form
    {
        SerialPort sp;        
        public Form1()
        {
            InitializeComponent();
            sp = new SerialPort("COM6", 9600, Parity.None, 8, StopBits.One);
            MessageBox.Show("Initiate Form1");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            MessageBox.Show("Form Load");
            s();
            MessageBox.Show("register DataReceive Event");
        }        

        public void s()
        {
            sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
        }

        private void button1_Click(object sender, EventArgs e)//打开端口
        {
            //打开端口
            try
            {
                if (sp.IsOpen)
                {
                    MessageBox.Show("port is open!");
                    sp.Close();
                    sp.Open();
                    MessageBox.Show("port is open!");
                }
                else
                {
                    MessageBox.Show("port is closed,then open it!");
                    sp.Open();
                    MessageBox.Show("port is open!");
                }
            }
            catch(Exception ex)
            {
                ex.Message.ToString();
            }
        }

        private void button2_Click(object sender, EventArgs e)  //send AT 指令
        {
            MessageBox.Show("in 2");
            if (sp.IsOpen)
            {
                //发送指令
                sp.WriteLine("AT\n");
                MessageBox.Show("send a command!");
            }
            else
            {
                MessageBox.Show("please open the Port,first!");
            }  
            MessageBox.Show("out 2");  
        }


        void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //this.Invoke(new EventHandler(Add_Received));
            MessageBox.Show("in event");
        }
        
        
        private void button5_Click(object sender, EventArgs e)
        {
            sp.Close();
            this.Close();
        }
}
发送了“AT”这个指令,就没反应了
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

12
 
DataReceived事件 到底是在什么时候被触发?
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

13
 
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    this.Invoke(new EventHandler( Add_Received));//当有数据来的时候调用Add_Received函数
}
public void Add_Received(object sender, EventArgs e)
{
    MessageBox.Show("Get a At COMMAND");
}
试一下发完AT指令会不会弹出“Get a AT COMMAND”的对话框。
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

14
 
解决了~!!
kidhuang ,  我试了,那个不是主要问题。
主要是要加一个握手协议!
btw,thank you!
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(初级)

15
 
对于有些系统,在打开串口后,还需要将RtsEnable设置为True,这样才能读写数据,否则不能正常读写数据。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表