c#通過網線讀取三菱PLC資料
阿新 • • 發佈:2019-01-02
一、寫入PLC資料
public static bool PlcWrite(int adres, int count, string SendData) { if (Sys.PlcComUse == 0) return true; string s_adres = (adres + Sys.PlcBaseAddress).ToString("0#####"); string s_count = count.ToString("X").PadLeft(4, '0'); string hdr = "500000FF03FF00"; string s_data = "000A14010000D*" + s_adres + s_count + SendData; string n = (s_data.Length.ToString("X")).PadLeft(4, '0'); string dtfram = (hdr + n + s_data); byte[] msg = Encoding.ASCII.GetBytes(dtfram); plcCom.txtSend.Text = "ABC"; Application.DoEvents(); if (Sys.Deb != 0) return true; int byteSend = Sock.Send(msg); System.Text.Encoding encoding = System.Text.Encoding.UTF8; string smsg = encoding.GetString(msg); System.DateTime Stime = DateTime.Now; TimeSpan Ctime = new TimeSpan(10000000); do { TimeSpan Ptime = (DateTime.Now - Stime); if (Ptime > Ctime) { MessageBox.Show("PLC comm. time out error."); return false; } Application.DoEvents(); } while (Sock.Available == 0); int byteRec = Sock.Receive(RcvBytes); string rcvstr = System.Text.Encoding.UTF8.GetString(RcvBytes); plcCom.txtRcv.Text = rcvstr; string emsg = rcvstr.Substring(18, 4); if (emsg != "0000") { plcCom.txtRcv.Text += "error code " + emsg; MessageBox.Show("PLC comm. data error. " + emsg); } return true; }
二、讀取PLC資料
public static bool PlcRead(int adres, int count, ref string ReadData) { if (Sys.PlcComUse == 0) return true; PlcReadBusy = true; string s_adres = (adres + Sys.PlcBaseAddress).ToString("0#####"); string s_count = count.ToString("0###"); string hdr = "500000FF03FF00"; string s_data = "000A04010000D*" + s_adres + s_count; string n = (s_data.Length.ToString("X")).PadLeft(4, '0'); string dtfram = (hdr + n + s_data); byte[] msg = Encoding.ASCII.GetBytes(dtfram); if (Sys.Deb != 0) { PlcReadBusy = false; return true; } int byteSend = Sock.Send(msg); System.Text.Encoding encoding = System.Text.Encoding.UTF8; string smsg = encoding.GetString(msg); System.DateTime Stime = DateTime.Now; TimeSpan Ctime = new TimeSpan(10000000); do { TimeSpan Ptime = (DateTime.Now - Stime); if (Ptime > Ctime) { MessageBox.Show("PLC comm. time out error."); PlcReadBusy = false; return false; } Application.DoEvents(); } while (Sock.Available == 0); int byteRec = Sock.Receive(RcvBytes); ReadData = System.Text.Encoding.UTF8.GetString(RcvBytes); plcCom.txtRcv.Text = ReadData; string emsg = ReadData.Substring(18, 4); if (emsg != "0000") { plcCom.txtRcv.Text += "error code " + emsg; PlcReadBusy = false; return false; } ReadData = ReadData.Substring(22); PlcReadBusy = false; return true; } }