zhang5wen
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看zhang5wen的 主题 / 回贴
楼主  发表于: 2010-08-18 10:32
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编程,完全不懂指令如何组织,请各位大大们帮帮助。如何才能把值读出来。
zhang5wen
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看zhang5wen的 主题 / 回贴
1楼  发表于: 2010-08-18 11:43
顶下,怎么都没人帮忙啊?高手都到哪去了?