我正在使用C#/。NET将重量从秤上显示到TextBox中。
由于串口连接,此秤具与我的电脑相连。
为实现这一目标,我提到this post。
我的问题:
当我创建一个新的串口连接时,我需要在此之前声明一些常量:
_serialPort = new SerialPort(portName, BaudRate, Parity.None, DataBits, StopBits.One);
以下是我需要声明的常量:
private const int BaudRate = 9600;
private const int DataBits = 8;
但BaudRate
和DataBits
值取决于称量秤配置。因此,每次更改称重秤时,重量都不再显示。
我的问题:
如何自动检测称重秤配置,以便在不手动更改常数的情况下很好地显示重量。价值观?
答案 0 :(得分:1)
据我所知,没有提供从您尝试与之通信的端点检测SerialPort BaudRate和DataBits的方法。您可能最好在UI上为用户提供SerialPort选项选项。
如果你真的想要自动检测,呃...一个随机疯狂的想法:如果你有点意识到你的比例所使用的数据格式(例如,总是字符串中的浮点数,如“56.12”) ,试试这个:在你的SerialPort中测试每一个可能的波特率和数据集组合,直到你在SerialPort上读取的数据具有预期的格式(可能是Regex或Parse?)。这可能需要一些时间,但这是一次性操作,因此这可能是您需要的。
注意:最好使用ReadByte或ReadExisting,因为ReadLine在获得换行符之前不会起作用(在错误的波特率/数据位上随机发生......)
答案 1 :(得分:1)
如何自动检测称重秤配置......?
您不能,因为没有可靠的软件技术从实时串行链路中获取波特率和帧参数。
这就是为什么串行端口从PC上消失的原因,因为PC需要用户友好的界面
我自己检测波特率的一种方案取决于远程单元传输单个已知字符的流。
解决您的困境的方法是手动将每个设备配置为通用的波特率和帧配置 然后您的程序将始终使用一个串口配置 设备将具有默认的串行端口配置,但对于大多数设备而言,它不是固定的,可以重新配置。较老的设备曾经有用于此目的的DIP开关,但低成本的LCD屏幕和NV存储器是现代接口和存储方法。