用2005的SerialPort类向端口发“at”命令,希望从串口中读出“ok”,但结果不是这样的,问题解决了4天了,要急死人了!!马上给分
我的计算机连着一个modem,在超级终端中向串口输入“at”,返回“ok”,我在程序里也向达到这这样的效果,可是不行啊,输入什么指令,就从端口返回什么指令,比如说输入“at”,就返回“at”,我用的类是c#2005的SerialPort类,下面是我的代码,谁能说说怎么回事,在线等,马上给分。
public partial class Form1 : Form
{
private SerialPort sp = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
sp = new SerialPort( "COM1 ");
sp.ReadTimeout = 5000;
sp.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
sp.Write(textBox1.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button3_Click(object sender, EventArgs e)
{
try
{
/*string text=null;
char[] buffer = new char[10];
sp.Read(buffer,0,6);
for (int i = 0; i < buffer.Length; i++)
{
text += buffer[i];
}
textBox2.Text = text;*/
/*string text = null;
char t = (char)sp.ReadChar();
text+=t.ToString();
while (true)
{
t = (char)sp.ReadChar();
if (t == '\0 ') break;
else text += t.ToString();
}
textBox2.Text = text;*/
string text = null;
byte[] t = new byte[20];
char[] c = new char[20];
sp.Read(t, 0, t.Length);
sp.Read(t, 0, t.Length);
c = Encoding.ASCII.GetChars(t);
int i;
for (i = 0; i < c.Length; i++)
{
if (c[i] == 'O ' || c[i] == 'K ')
text += c[i].ToString();
}
textBox2.Text = text;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
[解决办法]
看协议,估计是发送格式的问题。
[解决办法]
能返回AT。。。。。。说明通讯没问题,多半是协议问题
[解决办法]
学习
帮你顶上去!
[解决办法]
超级终端都能返回正确指令,串口类不行,可以检查一下串口设定,奇偶,校验,速率,数据位...
[解决办法]
最好读一下modem的说明文档之类的
[解决办法]
for (i = 0; i < c.Length; i++)
{
if (c[i] == 'O ' || c[i] == 'K ')
text += c[i].ToString();
}
应该是这个语句的问题
[解决办法]
c=System.Text.Encoding.Default.GetChars(t);
[解决办法]
学习
[解决办法]
呵呵 发送的字符串后面要加一个 0x0D modem才执行 这个at命令