C# “串行端口返回”\0“;
我正在尝试使用串行端口与工业称重桥通信。我知道如何编写代码(c#)。问题是,当我将桥接器连接到指示器时,会显示重量。但是,当我将网桥连接到电脑并运行程序时,返回的所有内容都是“\0”(NULL)。当我将电脑连接到指示灯并运行程序时,我会得到连续的“\0”。我使用的是xk3190-a9指示器。这是一个示例程序C# “串行端口返回”\0“;,c#,serial-port,C#,Serial Port,我正在尝试使用串行端口与工业称重桥通信。我知道如何编写代码(c#)。问题是,当我将桥接器连接到指示器时,会显示重量。但是,当我将网桥连接到电脑并运行程序时,返回的所有内容都是“\0”(NULL)。当我将电脑连接到指示灯并运行程序时,我会得到连续的“\0”。我使用的是xk3190-a9指示器。这是一个示例程序 namespace SerialPort { class Program { private static string dev = "";
namespace SerialPort
{
class Program
{
private static string dev = "";
static void Main(string[] args)
{
System.IO.Ports.SerialPort mySerialPort = new System.IO.Ports.SerialPort("COM15")
{
BaudRate = 2400,
Parity = Parity.None,
StopBits = StopBits.Two,
DataBits = 8,
RtsEnable = true,
};
mySerialPort.DataReceived += DataReceivedHandler;
mySerialPort.Open();
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
mySerialPort.Close();
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
System.IO.Ports.SerialPort sp = (System.IO.Ports.SerialPort) sender;
dev += sp.ReadExisting();
Console.WriteLine(dev);
}
}
}
我的问题是,桥梁是否需要“特殊”命令来发回重量,或者我可以做些什么来获得重量。来自该端口的任何其他数据都将被删除。我还尝试了不同的端口设置,结果都是一样的。在网上搜索后,没有找到适合我情况的解决方案,我放弃了数字追逐,咨询了一位称重桥“专家”。如果你也在拔头发,这里有几件事需要注意:
这篇笔记应该会引导你找到一个可行的解决方案,我从1、3和4中得到了我的解决方案。在网上搜索后,没有找到适合我情况的解决方案,我放弃了数字追逐,咨询了一位体重桥“专家”。如果你也在拔头发,这里有几件事需要注意:
本说明将引导您找到一个可行的解决方案,我从1、3和4中获得了我的解决方案。您不应该这样问这个问题,因为这里的大多数人不知道什么是重量桥或指示器。您必须向设备支持/制造商请求此信息(通常是某种操作手册)。这可能是硬件问题(错误的电缆)、通信配置错误(例如,可以单独配置balance以接受大范围的波特率/平价等,您必须知道它当前是如何配置的,或者根据需要重新配置),或者只是没有正确使用通信协议(命令等)。以及@Sinatr评论。大多数问题在于没有为任何设备实现串行协议。//您可能面临的另一个问题是Microsoft
SerialPort
实现存在相当多的错误,尤其是DataReceived
事件将这两个答案结合在一起,一般串行端口方法是SerialPort.SendBytes
然后SerialPort.ReceiveBytes
。您发送和期望接收的字节是基于通信协议的。@KDecker我已经尝试了字节方法,而不是Microsoft的错误实现。您建议使用其他库。Sinatr该手册是中文的,翻译后它谈到了一个与bridge捆绑在一起的软件,它需要windows Xp:P,它是中文的,并且只做称重。。。我想做的不仅仅是称重,否则我会使用指示器…@LordBlack我仍然使用微软的实现,如果你解决了bug,它工作得很好,其他人在网上很好地记录了它们。//如果不知道设备的串行协议,就无法尝试“字节方法”。您必须知道发送和接收什么才能使其工作。您需要实现ErrorReceived事件,以便查看错误。与帧错误一样,如果没有正确猜测停止位或波特率的数量,可能会导致帧错误。ReadExisting()的使用也是不正确的,不能保证得到测量的完整响应。也许ReadLine或ReadTo可以做得更好,但您必须在手册中查找协议。在如此低波特率下工作的刻度通常发送二进制数据,这种数据必须读取()并计数。手册应该告诉你。你不应该像大多数人那样问这个问题