PLC与计算机的串行接口相连接,现在需要在PLC与计算机相互发送字符“@“(ASCII码为40),并进行显示。
数据长度:8位ASCII码;
奇偶校验:偶校;
波特率:9600BIT/S;
数据传送时,首先通过计算机程序发送字符”@“,PLC接收从计算机偶发送的字符到数据寄存器D0、D1中,然后PLC发送D10、D11的字符到计算机,并且进行显示。
PLC字符发送的数据存储器:选 择数据存储器的地址为D10、D11.
PLC字符接数据存储器为D0、D1.
计算机程序C#代码:
private string ReadPlc()
{
string TxtValue = "";
com = new SerialPort("COM1", 9600, Parity.Even, 8, StopBits.Two);
if (com.IsOpen) com.Close();
com.Open();
string sReadCmd = Chr(40) + "0119404" + Chr(3) + "66"; //主要是这个指令不懂如何组织?
com.Write(sReadCmd);
//等待1秒钟
System.Threading.Thread.Sleep(1000);
// 从串口读数据
byte[] data = new byte[1024];
com.Read(data, 0, 1024);
//如果首位为2,则表示数据有效.这里有个问题,在第二次读,第2位才为'2',第三次又是首位为2,需要再测试
if (data[0] == 2)
{
string sReceiveData = System.Text.Encoding.ASCII.GetString(data, 0, data.Length);
//MessageBox.Show(sReceiveData);
//解析命令,将读到的字符解析成数字,注意高低位的转换
for (int i = 1; i < 8; i += 4)
{
string sLow = sReceiveData.Substring(i, 2);
string sHigh = sReceiveData.Substring(i + 2, 2);
//int res = Convert.ToInt32(sHigh)+ Convert.ToInt32(sLow);
int res = Convert.ToInt32(sHigh, 16) + Convert.ToInt32(sLow, 16);
TxtValue += res.ToString() + ",";
}
}
return TxtValue;
}
小弟是第一次接触PLC编程,完全不懂指令如何组织,请各位大大们帮帮助。如何才能把值读出来。