使用 C# 从 Mettler Toledo (IND560) 称重设备读取数据

Posted

技术标签:

【中文标题】使用 C# 从 Mettler Toledo (IND560) 称重设备读取数据【英文标题】:Reading data from Mettler Toledo (IND560) scale device using C# 【发布时间】:2016-05-30 17:22:12 【问题描述】:

我在使用 C# 从 Mettler Toledo (IND560) 规模设备接收数据时遇到一些问题。

当我向设备发送“去皮”命令 (T) 时,它工作正常,但没有任何响应。 BytesToRead 始终为空,“while”处于无限循环中。

当我发送“发送稳定重量值”命令(S)时,我面临同样的无限循环问题。我猜命令运行正常但没有响应。

代码如下:

private decimal? BalancaIND560(string porta, string comando) 
    SerialPort SerialObj = new SerialPort(porta);
    if (!SerialObj.IsOpen)
        SerialObj.Open();

    string retorno = "";
    try 
        SerialObj.BaudRate = 9600;
        SerialObj.Parity = Parity.Even;
        SerialObj.DataBits = 7;
        SerialObj.StopBits = StopBits.One;
        SerialObj.Handshake = Handshake.XOnXOff;

        SerialObj.DiscardInBuffer();
        SerialObj.DiscardOutBuffer();

        SerialObj.Write(comando);

        while ((SerialObj.BytesToRead == 0))
            Application.DoEvents();

        Thread.Sleep(500);
        retorno = SerialObj.ReadExisting();

        SerialObj.DiscardInBuffer();
        SerialObj.DiscardOutBuffer();
     finally 
        try  SerialObj.Close();  catch  
    

    decimal? resultado = null;
    try 
        string[] aux = retorno.Split(' '); //"S S     100.52 kg"

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < aux.Length; i++)
            sb.Append(String.Format("aux[0]: 1" + Environment.NewLine, i, aux[i]));
        MessageBox.Show(sb.ToString());

        decimal peso = 0.0M;
        if (!Decimal.TryParse(aux[6].Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out peso))
            Decimal.TryParse(aux[7].Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out peso);
        resultado = peso;
     catch  

    return resultado;


// Sending command
try 
    decimal? peso = BalancaIND560("COM1", "S");
    if (peso.HasValue)
        MessageBox.Show(String.Format("Peso: 0", peso.Value));
    else
        MessageBox.Show("Peso não foi encontrado", "ATENÇÃO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
 catch 
    MessageBox.Show("Erro ao executar comando", "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error);

【问题讨论】:

我找到了解决方案!我只需要改变一个规模配置,它的工作!如果有人遇到同样的问题,只需将设备中的COM 配置(Configuration &gt; Comunication &gt; Conections)更改为SICS,我的代码就可以正常工作了!!谢了! 你能把你项目中的所有代码都贴出来吗?谢谢。 【参考方案1】:

我找到了解决方案!我只需要改变一个规模配置,它的工作!如果有人遇到同样的问题,只需将设备中的COM 配置(Configuration &gt; Comunication &gt; Conections)更改为SICS,我的代码就可以正常工作了!!谢了!

【讨论】:

以上是关于使用 C# 从 Mettler Toledo (IND560) 称重设备读取数据的主要内容,如果未能解决你的问题,请参考以下文章

Mettler toledo IND780 通过 javascript 读取重量

C# 表单使用 [i] 引用图像

如何使用c#从文本中删除html标签[重复]

从 C# 中的数据表中获取单元格值

从 C# 中的标准 I/O 进行非阻塞读取 [关闭]

将浮点数组从 C++ 获取到 C#