2011-08-25 108 views
1

我想让我的C#应用​​程序通过在.net中使用SerialPort类通过rs232与数字刻度进行通信。不幸的是,我无法获得任何反馈。如何通过rs232与刻度进行通信

这是一个TSCALE TSQSP规模和aparently它使用CAS通信协议。根据我对CAS协议的理解,我需要发送“ENQ”等待“ACK”,然后发送“DC1”来获取信息,但是在发送“ENQ”之后,我没有收到任何答复。这是我的代码。任何人都有使用相同通信协议的规模经验吗?

非常感谢您的帮助

public partial class Form1 : Form 
{ 
    private SerialPort port = new SerialPort("COM6", 4800, Parity.None, 8, StopBits.One); 

    public Form1() 
    { 
     InitializeComponent(); 

     port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); 
     port.Open();    
    } 

    private void button1_Click(object sender, EventArgs e) 
    {    
     port.Write("ENQ"); 

    } 

    private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     this.textBox1.Text = port.ReadExisting(); 
    }  
} 

谢谢大家的帮助,所有的答案是有帮助的,我终于能够使它发挥作用。首先,我发现我没有正确设置比例尺,并且你说得对,我应该发送05H。现在一切正常,thx。

+0

你有没有通过腻子的COM端口连接和测试它,以确保其处理输入/输出你怎么指望什么呢?如果没有,我会这么做 - 至少这样你可以确保你知道设备的工作方式,然后写你的代码。 – Prisoner

回答

4

我已经设定了很多的权重,通常如果你不连得上的ENQ响应,那是因为你已经设定了一个串口uncorrectly。 100%确定波特率,数据位,停止位和奇偶校验设置正确。

我会做的就是下载LookRS232。它是一个通过COM端口进行通信的程序。安装完成后,使用我们的设置打开COM端口,然后直接将ENQ写入COM端口。测试大量设置让它首先在这里工作会更容易。然后,当你开始工作时,使用你程序中完全相同的设置。

EDIT - 增加了一些百分点HANS顺便这里说的VITAL - 最重要的是ENQ是ASCII值5,而不是字符串

port.Write("ENQ"); 

ENQ,ACK和DC1是控制码,而不是字符串。使用ASCII表来了解代码。修复:

port.Write(5); 

你也应该打开硬件握手信号,许多设备使用它,以确保机上电并准备接收数据。所以他们知道他们收到的是真实的数据而不是噪音。修复:

port.Open();    
port.DtrEnable = true; 
port.RtsEnable = true; 

测试与像超级终端或腻子另一个程序的连接始终是,如果你仍然有问题,是个好主意。用键盘上的Ctrl键生成控制代码。 ENQ是Ctrl + E,DC1是Ctrl + Q。

+0

我试了一下lookRS232,你说得对,它很方便。我试过“ENQ \ n”,没有任何反应。汉斯提到,也许我应该用“5”代替“ENQ”,这是正确的方向吗? – Angrest

+1

汉斯就在那里。你应该发送5,而不是字符串“ENQ” –

+2

我的答案有可能获得有用的投票或发展成答案的几率很小。你有最高的投票答案,请随意使用我发布的内容。让我知道,我会upvote它。 –

2

的另一个问题是,你有正确的电缆?接线盒非常适合验证接线。

2

如果需要发下来ENQ,你需要发送一个二进制5,而不是字符串5.

如果你正在写

port.Write("5"); 

这样,你就向下发送二进制53(ASCII Chart ) 在ASCII图表上查看12月5日是询问和Dec 53是字符'5'?

试试这个:

byte [] Buff = new byte[1]; 
     Buff[0] = 0x05; 
     port.Write(Buff, 0, 1); 
相关问题