【问题标题】:RS232 How to read weight from weight scale base each bytesRS232如何从体重秤的每个字节读取重量
【发布时间】:2016-06-26 15:46:06
【问题描述】:

亲爱的我所有的朋友,我有软件可以从重量指示器读取重量我使用了许多连接到秤的重量指示器我总是使用串行serialport1.ReadExisting(); 这个选项读取重量 之后我玩字符串,但这次我有新的重量指示器,每次从指示器中读取一行中的许多字符串总是改变形状,我很难获得正确的重量它的 readExisting() 样本;但我的目标只有 130 “ " 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rip0 130 0\rix0 130 0\rix0 120 0\rix0 120 0\rix0 120 0\rix0 120 0\rix0 120 0\rix0 120 0\rix0 120 0\rix0 120 0\rix0 120 0\rix0 120 0\rix0 120 0\rix0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\rip0 120 0\r"
它还有一些其他字符,您可以看到in this image 有时格式不正确,现在我的问题是如何以公司所说的标准格式读取这是手册我不知道如何从串行端口读取正确的字节如果你知道请帮帮我这是重量指示器 Flintec FT-11 的手册 FLintec FT-11 Data output manual

【问题讨论】:

  • ReadExisting() 很少被正确使用。您需要将 SerialPort.NewLine 属性设置为“\r”,现在您可以使用 ReadLine()。这可确保您始终获得一个完整的测量值,使用 String.SubString() 和 Int32.Parse() 对其进行解析。
  • @HansPassant 如何将serialPort.NewLine 属性设置为“\r”
  • 你唯一可能做错的事情就是不去尝试。
  • 亲爱的@HansPassant 我在很多不同的地方尝试了很多次我只能得到 120 但无法在 tex 框中修复它总是改变它我的问题就像这样stackoverflow.com/questions/35080188/…
  • 亲爱的@HansPassant,它的固定感谢分配给我的工作

标签: c# serial-port


【解决方案1】:

从您发布的输出中可以清楚地看出,设备为每个数据包发送 8 个字节的数据。所以你需要 [0, 1, 2, 3, 4, 5, 6, 7] 所以你需要字节 3, 4。所以你首先需要做的就是将你的串口对象的 RecievedByteThreshold 属性设置为 8 个字节。然后使用 SerialDataRecieved 事件。只有当它接收到最多 8 个字节时才会触发该事件。然后创建一个大小为 8 的字节数组,它可以帮助您保存 8 字节数据,我们称之为 Data [8]。然后在您的 SerialDataRecieved 事件处理程序中调用方法SerialPort.Read(Data, 0, 1)。然后你的数据数组应该等于你的重量设备每个数据包发送的 8 个字节。因此,您可以轻松获取数组中的第二个和第三个元素。所以你weigut会是Data[2]×10+Data [3]

you can checkout the serialport class here for more info

【讨论】:

  • 你能不能写这段代码让我检查一下我看不懂请写我的例子
  • 亲爱的@ozioma 请解释更多我这样创建的代码 byte[] data = new byte[8] serialport1.read(data,0,1) string k = Data[2]×10+数据[3].tostring();
  • ReceivedByteThreshold 是一个非常糟糕的建议,它会阻止与数据的正确同步,并且只会在偶然情况下起作用。
猜你喜欢
  • 1970-01-01
  • 2018-09-21
  • 2012-03-29
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多