zhang5wen
級別: *
|
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編程,完全不懂指令如何組織,請各位大大們幫幫助。如何才能把值讀出來。 |
---|---|
|