c# - 如何通过 rs232 与秤通信

标签 c# serial-port scale

我正在尝试使用 .net 中的 SerialPort 类使我的 C# 应用程序通过 rs232 与数字秤进行通信。不幸的是,我无法从秤上得到任何反馈。

这是一个 TSCALE TSQSP 秤,显然它使用 CAS 通信协议(protocol)。根据我对 CAS 协议(protocol)的理解,我需要发送“ENQ”等待“ACK”,然后发送“DC1”以获取信息,但发送“ENQ”后我没有收到任何回复。这是我的代码。有人有使用相同通信协议(protocol)的秤的经验吗?

非常感谢您的帮助

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。现在一切正常,谢谢。

最佳答案

我已经编写了很多权重,通常如果您甚至没有在 ENQ 上得到响应,那是因为您没有正确设置 SerialPort。 100% 确保波特率、数据位、停止位和奇偶校验设置正确。

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

编辑——从 HANS PASSANT 那里添加了一些重要的要点——最重要的是 ENQ 是 ASCII 值 5,而不是字符串

port.Write("ENQ");

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

port.Write(5);

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

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

如果仍然遇到问题,用另一个程序(如 HyperTerminal 或 Putty)测试连接总是一个好主意。使用键盘上的 Ctrl 键生成控制代码。 ENQ为Ctrl+E,DC1为Ctrl+Q。

关于c# - 如何通过 rs232 与秤通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7188324/

相关文章:

c# - 取消 ContinueWith 任务链并向调用者报告错误

c - 更快读取串口

python - 如何从两个不同的进程访问串行端口 (Python)

ios - 如何使用计时功能缓慢加速 SpriteKit 的缩放功能

c# - 生成不带连字符的 GUID

c# - 如何实现 IEnumerator<T>?

在 DbSet 中使用 Include 时,C# Entity Framework 返回损坏的 Json

python - 如何在串行通信中使用 pyserial 解码字节

Jquery UI slider : progressive scale divisions and grid

css - 窗口大小更改时 Div 重叠