【发布时间】:2022-01-23 06:11:32
【问题描述】:
当通过 Mettler Toledo Rice Lake 秤的串行命令发出请求时,尝试接收重量。首先,如果我使用 putty 发送命令,它可以正常工作;它会正确返回当前显示在打印头上的重量,这实际上是我想要通过这些功能完成的全部内容。
这是我目前的代码,虽然我已经尝试了很多变体:
在表单加载时,它将修复与端口关联的变量,以遵循软件其他地方设置的设置。这似乎可以正常工作,并且在软件的许多其他部分中也可以正常工作。
设置: 12:COM1 13:9600 16:没有 17:8 18:一个 19: 印记
private void Get_Weight_Load(object sender, EventArgs e)
{
string path11 = File.ReadAllText(Application.StartupPath + @"\ConfigurationPathFile.txt") + @"\GeneralSettings.txt";
path11 = path11.Replace("\r", "").Replace("\n", "");
string[] settings = File.ReadAllText(path11).Split(',');
LoadResources();
#region Scale
ScalePort.PortName = settings[12];
ScalePort.BaudRate = Int32.Parse(settings[13]);
ScalePort.Handshake = Handshake.RequestToSend; // This is one thing I have been changing in order to try and fix the problem.
switch (settings[16])
{
case "None":
ScalePort.Parity = System.IO.Ports.Parity.None;
break;
case "Odd":
ScalePort.Parity = System.IO.Ports.Parity.Odd;
break;
case "Even":
ScalePort.Parity = System.IO.Ports.Parity.Even;
break;
case "Mark":
ScalePort.Parity = System.IO.Ports.Parity.Mark;
break;
case "Space":
ScalePort.Parity = System.IO.Ports.Parity.Space;
break;
}
ScalePort.DataBits = Int32.Parse(settings[17]);
switch (settings[18])
{
case "None":
ScalePort.StopBits = System.IO.Ports.StopBits.None;
break;
case "One":
ScalePort.StopBits = System.IO.Ports.StopBits.One;
break;
case "Two":
ScalePort.StopBits = System.IO.Ports.StopBits.Two;
break;
case "OnePointFive":
ScalePort.StopBits = System.IO.Ports.StopBits.OnePointFive;
break;
}
try
{
ScalePort.Open();
ScalePort.WriteLine(settings[19]);
}
catch (Exception ex)
{
MessageBox.Show("Contact your system admin if you are seeing this message" + System.Environment.NewLine + ex.ToString());
}
#endregion
}
在表单关闭时:
private void Get_Weight_FormClosed(object sender, FormClosedEventArgs
{
if (ScalePort.IsOpen)
{ ScalePort.Close(); }
}
ScalePort 数据接收事件处理程序:
private void ScalePort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(30);
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
textBox1.AppendText(indata + System.Environment.NewLine);
//MessageBox.Show(indata);
}
当它运行时,我在 textbox1 中收到的只是我发送的命令,在这种情况下是 kprint。
所以要弄清楚我的问题是什么;我做错了什么导致我无法接收重量,或者我是否发送了错误的命令,如果是,我该如何正确执行?
【问题讨论】:
-
以下内容可能会有所帮助:stackoverflow.com/questions/65957066/…
-
我尝试转换为 ascii 并按照上面提供的链接中的建议一次发送一个字节的写入命令,但这并没有解决问题。
-
正确的串口设置很重要。我没有查找您的串口设备的文档,但是您是否尝试过帖子中使用的串口设置?
-
体重秤有型号吗?
标签: c# serial-port