C# 通过TCP客户端向PLC发送CMD
我正试图向PLC发送一个命令,该PLC通过TCP客户端控制电子储物柜。我可以连接,但PLC似乎没有读取我的命令 我有以下代码:C# 通过TCP客户端向PLC发送CMD,c#,tcpclient,plc,C#,Tcpclient,Plc,我正试图向PLC发送一个命令,该PLC通过TCP客户端控制电子储物柜。我可以连接,但PLC似乎没有读取我的命令 我有以下代码: private const string STX = "0x02"; private const string ETX = "0x03"; private const string STATUS = "0x30"; private const string OPEN = "0x31"; pr
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]));
}
}
}
}
private const string STX=“0x02”;
私有常量字符串ETX=“0x03”;
private const string STATUS=“0x30”;
私有常量字符串OPEN=“0x31”;
私有常量字符串和=STX+ETX;
静态void Main(字符串[]参数)
{
var tcpClient=新的tcpClient();
tcpClient.Connect(“192.168.1.190”,4000);
if(TCP客户端已连接)
{
var networkStream=tcpClient.GetStream();
if(networkStream.CanWrite)
{
var ADDY=“00”;
var ascienceode=新的ascienceoding();
byte[]b=ascienceode.GetBytes(STX+ADDY+OPEN+ETX+SUM);
networkStream.Write(b,0,b.Length);
字节[]b1=新字节[100];
var k=networkStream.Read(b1,0100);
对于(变量i=0;i
STATUS/OPEN是可以发送的命令。PLC附带了一些文档,下面是它的一部分。我假设我的CMD是错误的,我如何修复它?这是我第一次尝试连接到PLC并从PLC发送/检索命令。非常感谢您的帮助。您的方法是正确的,但是命令的编码是错误的。像这样的低级协议很难正确实现 您的字节数组
b
包含ASCII编码的字符串“0x020000x310x030x020x03”
,用ASCII编码,它转换为字节[22]{48,120,48,48,48,120,51,49,48,120,48,51,48,48,50,48,120,48,51}
,同时您要发送实际字节数组0x02
尝试以下方法:
字节[b]=新字节{0x02,0x00,0x31,0x30,0x02,0x03}
另请参见以了解STX和ETX与其他ASCII字符(例如a-z、0-9等)的关系。“SUM:STX到ETX的1字节以下的数据总和”您只需添加STX和ETX(作为串接它们的字符串)。校验和当然应该是所有字节的总和。我正在使用的PLC使用的是同一组命令(规范看起来与此图完全相同)。不幸的是,我是网络程序员,没有硬件方面的经验。我成功地发送命令并接收响应。我完全被困在如何解析STATUS命令(0x30)的响应上。如果有人能告诉我如何使用这两个数字计算出所有锁的状态,我将不胜感激。提前谢谢