通过 TCP 客户端向 PLC 发送命令
Sending CMD to PLC via TCP Client
我正在尝试通过 TCP 客户端向控制电子储物柜的 PLC 发送命令。我可以连接,但是 PLC 似乎没有读取我的命令。
我有以下代码:
private const string STX = "0x02";
private const string ETX = "0x03";
private const string STATUS = "0x30";
private const string OPEN = "0x31";
private const string SUM = STX + ETX;
static void Main(string[] args)
{
var tcpClient = new TcpClient();
tcpClient.Connect("192.168.1.190", 4000);
if (tcpClient.Connected)
{
var networkStream = tcpClient.GetStream();
if (networkStream.CanWrite)
{
var ADDY = "00";
var asciiEncode = new ASCIIEncoding();
byte[] b = asciiEncode.GetBytes(STX + ADDY + OPEN + ETX + SUM);
networkStream.Write(b, 0, b.Length);
byte[] b1 = new byte[100];
var k = networkStream.Read(b1, 0, 100);
for (var i = 0; i < k; i++)
{
Console.WriteLine(Convert.ToChar(b1[i]));
}
}
}
}
STATUS/OPEN是可以发送的命令。 PLC 附带了一些文档,这里是其中的 picture。我假设我的 CMD 是错误的,我该如何解决?这是我第一次尝试从 PLC 连接到 send/retrieve 命令。感谢任何帮助。
您的方向是正确的,但是您的命令编码有误。 Low-level 像这样的协议很难正确处理。
您的字节数组 b
包含 ASCII-encoded 字符串 "0x02000x310x030x020x03"
,以 ASCII 编码,转换为 byte[22] { 48, 120, 48, 50, 48, 48, 48, 120, 51, 49, 48, 120, 48, 51, 48, 120, 48, 50, 48, 120, 48, 51 }
而您想要发送实际的数组字节 0x02
,等等
尝试这样的事情:
byte[b] = new byte { 0x02, 0x00, 0x31, 0x30, 0x02, 0x03 }
另请参阅 http://www.december.com/html/spec/ascii.html 了解 STX 和 ETX 与其他 ASCII 字符(例如 a-z、0-9 等)的关系。
我正在尝试通过 TCP 客户端向控制电子储物柜的 PLC 发送命令。我可以连接,但是 PLC 似乎没有读取我的命令。
我有以下代码:
private const string STX = "0x02";
private const string ETX = "0x03";
private const string STATUS = "0x30";
private const string OPEN = "0x31";
private const string SUM = STX + ETX;
static void Main(string[] args)
{
var tcpClient = new TcpClient();
tcpClient.Connect("192.168.1.190", 4000);
if (tcpClient.Connected)
{
var networkStream = tcpClient.GetStream();
if (networkStream.CanWrite)
{
var ADDY = "00";
var asciiEncode = new ASCIIEncoding();
byte[] b = asciiEncode.GetBytes(STX + ADDY + OPEN + ETX + SUM);
networkStream.Write(b, 0, b.Length);
byte[] b1 = new byte[100];
var k = networkStream.Read(b1, 0, 100);
for (var i = 0; i < k; i++)
{
Console.WriteLine(Convert.ToChar(b1[i]));
}
}
}
}
STATUS/OPEN是可以发送的命令。 PLC 附带了一些文档,这里是其中的 picture。我假设我的 CMD 是错误的,我该如何解决?这是我第一次尝试从 PLC 连接到 send/retrieve 命令。感谢任何帮助。
您的方向是正确的,但是您的命令编码有误。 Low-level 像这样的协议很难正确处理。
您的字节数组 b
包含 ASCII-encoded 字符串 "0x02000x310x030x020x03"
,以 ASCII 编码,转换为 byte[22] { 48, 120, 48, 50, 48, 48, 48, 120, 51, 49, 48, 120, 48, 51, 48, 120, 48, 50, 48, 120, 48, 51 }
而您想要发送实际的数组字节 0x02
,等等
尝试这样的事情:
byte[b] = new byte { 0x02, 0x00, 0x31, 0x30, 0x02, 0x03 }
另请参阅 http://www.december.com/html/spec/ascii.html 了解 STX 和 ETX 与其他 ASCII 字符(例如 a-z、0-9 等)的关系。