我能够与bacnet路由器建立串口通信。
一切都很好,我可以更改路由器的名称等。
但是当我写入IP地址时: 我的代码:
serialPort1.WriteLine("10.1.1.168");
//or
serialPort1.Write("10.1.1.168");
//It stores as '0.0.0.10'
OR:
serialPort1.WriteLine("145.100.100.168"); //it stores as '0.0.0.145'
OR:
serialPort1.WriteLine("145100100168"); //Im reaching lol
我可以更改,例如路由器名称:
serialPort1.WriteLine("Project1234"); //and it stores perfectly
我已经完成了转换(二进制,十六进制,ipAddress),但它仍然存储了错误的值。
有什么想法吗?谢谢你的帮助!!
更新 - 好的,这是我到目前为止:
IPAddress ip = IPAddress.Parse(txtWrite.Text);
Byte[] bytes = ip.GetAddressBytes();
for (int i = 0; i < bytes.Length; i++)
{
string str = bytes[i].ToString();
MessageBox.Show(str);
serialPort1.Write(str+".");
}
serialPort1.Write("\r\n");
但问题是,如果它超过3位“192.168.168.5”,它将不会添加“。”导致'1921681685。' (注意结尾的小数?)但是如果我输入“10.1.1.168”它会存储为'10 .1.1.168'并且最后没有小数,这就是我想要或需要的IP地址。我做错了什么?
感谢您的帮助。
答案 0 :(得分:1)
我想这根本不是波特率或设置相关的。这只是我们不知道如何指定IP地址的事情吗?
在上次更新中,尝试构建一个if,以便最后一部分不发送'。'。
IPAddress ip = IPAddress.Parse(txtWrite.Text);
Byte[] bytes = ip.GetAddressBytes();
for (int i = 0; i < bytes.Length; i++)
{
string str = bytes[i].ToString();
MessageBox.Show(str);
if(i < bytes.Length - 1)//Try this out
{
serialPort1.Write(str+".");
}
}
serialPort1.Write("\r\n");
这样的事情。 如果我理解它,每个x(在x.x.x.x中)都存储在变量字节中?我认为你也会在最后一个x之后发一个点,所以我认为这种情况并不常见。
答案 1 :(得分:0)
SerialPort-Constructor不知道并期望IPAdress
字符串参数是 NOT 一个ip地址!例如“COM1”。这就是“Project1234”的原因。
编辑:
你显然混合了不同的东西:
两个界面都与IP地址完全无关!
您正在谈论IP地址,这意味着您希望通过TCP/IP协议建立连接。一个好的开始是:TCP/IP Chat Application Using C#
编辑(2): USB串行通信确实是串行通信,但同样不是您尝试访问的串行端口。对于USB通信,有一些库。 Leitner或SharpDevelop
答案 2 :(得分:0)
感谢大家的帮助。我想通了,这与字符串的类型无关......它是字符串输入路由器的时间。
foreach (char c in txtWrite.Text)
{
serialPort1.WriteLine(c.ToString());
System.Threading.Thread.Sleep(100);
}
serialPort1.WriteLine("\r\n");
就是这样。