C#開放式TCP/IP與S71200PLC通訊


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 源碼:

  1 namespace TCPIP測試
  2 {
  3     public partial class Form1 : Form
  4     {
  5         public Form1()
  6         {
  7             InitializeComponent();
  8         }
  9         //創建Socket連接對象
 10         private Socket socketlient = null;
 11         //運行標志位
 12         private bool isRunning = false;
 13 
 14         private Thread thrClient;
 15 
 16         private byte[] setArray = new byte[100];
 17 
 18         private void btn_Connect_Click(object sender, EventArgs e)
 19         {
 20             socketlient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
 21 
 22             IPAddress address = IPAddress.Parse(this.txt_IP.Text.Trim());
 23 
 24             IPEndPoint iPEndPoint = new IPEndPoint(address, int.Parse(this.txt_Port.Text.Trim()));
 25 
 26             try
 27             {
 28                 socketlient.Connect(iPEndPoint);
 29             }
 30             catch(Exception ex)
 31             {
 32                 MessageBox.Show("連接失敗" + ex, "連接信息");
 33                 return;
 34             }
 35             MessageBox.Show("連接成功", "連接信息");
 36             isRunning = true;
 37 
 38             //開始線程接受PLC報文
 39             thrClient = new Thread(ReceiveMessage);
 40             thrClient.IsBackground = true;
 41             thrClient.Start();
 42         }
 43         /// <summary>
 44         /// 接受和處理PLC返回的報文
 45         /// </summary>
 46         private void ReceiveMessage()
 47         {
 48             while(isRunning==true)
 49             { 
 50                 //定義一個接受緩沖區
 51                 byte[] arrMsgRcv = new byte[1024];
 52                 int length = -1;
 53                 try
 54                 {
 55                     length = socketlient.Receive(arrMsgRcv);
 56                 }
 57                 catch(Exception)
 58                 {
 59                     MessageBox.Show("異常");
 60                 }
 61                 if(length==200|| length == 1024)
 62                 {
 63                     byte[] Result = GetByteArray(arrMsgRcv, 0, length);
 64                     setArray = GetByteArray(arrMsgRcv, 0, 100);
 65                     try
 66                     {
 67                         Invoke(new Action(() =>
 68                         {
 69                             this.txt_SetReadBack1.Text = BitConverter.ToSingle(GetSingleByteArray(Result, 0, 4), 0).ToString();
 70                             this.txt_SetReadBack2.Text = BitConverter.ToSingle(GetSingleByteArray(Result, 4, 4), 0).ToString();
 71 
 72                             this.txt_ActualValue1.Text = BitConverter.ToSingle(GetSingleByteArray(Result, 100, 4), 0).ToString();
 73                             this.txt_ActualValue2.Text = BitConverter.ToSingle(GetSingleByteArray(Result, 104, 4), 0).ToString();
 74                         }));
 75                     }
 76                     catch(Exception ex)
 77                     {
 78                         break;
 79                     }
 80                 }
 81              
 82             }
 83       
 84         }
 85 
 86         private void btn_DisConnect_Click(object sender, EventArgs e)
 87         {
 88             socketlient?.Shutdown(SocketShutdown.Both);
 89             socketlient?.Close();
 90         }
 91         /// <summary>
 92         /// 自定義截取字節數組
 93         /// </summary>
 94         /// <param name="byteArray"></param>
 95         /// <param name="start"></param>
 96         /// <param name="length"></param>
 97         /// <returns></returns>
 98         private byte[] GetByteArray(byte[] byteArray,int start,int length)
 99         {
100             byte[] resByte =new byte[length];
101             if(byteArray!=null&&byteArray.Length>=length)
102             {
103                 for(int i=0;i<length;i++)
104                 {
105                     resByte[i] = byteArray[i + start];
106                 }
107             }
108             return resByte;
109         }
110         /// <summary>
111         /// 四字節順序轉換 1:ABCD 2:BADC 3:CDAB 4:DCBA
112         /// </summary>
113         /// <param name="byteArr"></param>
114         /// <param name="start"></param>
115         /// <param name="type"></param>
116         /// <returns></returns>
117         private byte[] GetSingleByteArray(byte[] byteArr,int start,int type)
118         {
119             byte[] resByte = new byte[4];
120             if(byteArr!=null&&byteArr.Length>4&&type>=1&&type<=4)
121             {
122                 for(int i=0;i<4;i++)
123                 {
124                     resByte[i] = byteArr[i + start];
125                 }
126                 byte[] resByte1 = new byte[4];
127                 switch(type)
128                 {
129                     case 1:
130                         resByte1 = resByte;
131                         break;
132                     case 2:
133                         resByte1[0] = resByte[1];
134                         resByte1[1] = resByte[0];
135                         resByte1[2] = resByte[3];
136                         resByte1[3] = resByte[2];
137                         break;
138                     case 3:
139                         resByte1[0] = resByte[2];
140                         resByte1[1] = resByte[3];
141                         resByte1[2] = resByte[0];
142                         resByte1[3] = resByte[1];
143                         break;
144                     case 4:
145                         resByte1[0] = resByte[3];
146                         resByte1[1] = resByte[2];
147                         resByte1[2] = resByte[1];
148                         resByte1[3] = resByte[0];
149                         break;
150                 }
151                 return resByte1;
152             }
153             return resByte;
154 
155         }
156 
157         private void groupBox2_Enter(object sender, EventArgs e)
158         {
159 
160         }
161 
162         private void btn_Set_Click(object sender, EventArgs e)
163         {
164             float f1 = Convert.ToSingle(this.txt_Set1.Text.Trim());
165             float f2 = Convert.ToSingle(this.txt_Set2.Text.Trim());
166 
167             byte[] setArr1 = BitConverter.GetBytes(f1);
168             byte[] setArr2 = BitConverter.GetBytes(f2);
169 
170             setArray[0] = setArr1[3];
171             setArray[1] = setArr1[2];
172             setArray[2] = setArr1[1];
173             setArray[3] = setArr1[0];
174 
175             setArray[4] = setArr2[3];
176             setArray[5] = setArr2[2];
177             setArray[6] = setArr2[1];
178             setArray[7] = setArr2[0];
179 
180             socketlient.Send(setArray);
181 
182         }
183 
184         private void Form1_Load(object sender, EventArgs e)
185         {
186 
187         }
188     }
189    
190 }

 

源碼連接(包括PLC程序):

(13條消息) C#開放式TCP/IP與S71200PLC通訊-互聯網文檔類資源-CSDN文庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM