zhang5wen
級別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個
工控威望: * 點
下載積分: * 分
在線時間: (小時)
注冊時間: *
最后登錄: *
查看zhang5wen的 主題 / 回貼
樓主  發(fā)表于: 2010-08-18 10:32
PLC與計算機的串行接口相連接,現(xiàn)在需要在PLC與計算機相互發(fā)送字符“@“(ASCII碼為40),并進(jìn)行顯示。
數(shù)據(jù)長度:8位ASCII碼;
奇偶校驗:偶校;
波特率:9600BIT/S;
數(shù)據(jù)傳送時,首先通過計算機程序發(fā)送字符”@“,PLC接收從計算機偶發(fā)送的字符到數(shù)據(jù)寄存器D0、D1中,然后PLC發(fā)送D10、D11的字符到計算機,并且進(jìn)行顯示。
PLC字符發(fā)送的數(shù)據(jù)存儲器:選 擇數(shù)據(jù)存儲器的地址為D10、D11.
PLC字符接數(shù)據(jù)存儲器為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);
            // 從串口讀數(shù)據(jù)
            byte[] data = new byte[1024];
            com.Read(data, 0, 1024);

            //如果首位為2,則表示數(shù)據(jù)有效.這里有個問題,在第二次讀,第2位才為'2',第三次又是首位為2,需要再測試
            if (data[0] == 2)
            {
                string sReceiveData = System.Text.Encoding.ASCII.GetString(data, 0, data.Length);
                //MessageBox.Show(sReceiveData);
                //解析命令,將讀到的字符解析成數(shù)字,注意高低位的轉(zhuǎn)換
                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編程,完全不懂指令如何組織,請各位大大們幫幫助。如何才能把值讀出來。
zhang5wen
級別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個
工控威望: * 點
下載積分: * 分
在線時間: (小時)
注冊時間: *
最后登錄: *
查看zhang5wen的 主題 / 回貼
1樓  發(fā)表于: 2010-08-18 11:43
頂下,怎么都沒人幫忙?高手都到哪去了?