123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace SimensCNC
- {
- public class ETHSimensAlarmLib
- {
- bool flag=true;
- public static string cncIP;
- int receiveData;
- short alarmMsg =0;
- byte[] sendCommands;
- byte[] buffer;//发送报文容器
- byte[] datas;//接收报文容器
- static IAsyncResult connResult = null;
- public ETHSimensAlarmLib()
- {
- }
- public Socket AlarmSocket { get; set; }
- /// <summary>
- /// 链接函数
- /// </summary>
- public bool ETH_S7SimensConnect(string adrip, ushort port, int overtime)
- {
- cncIP = adrip;
- IPAddress ip = IPAddress.Parse(adrip);
- int ports = Convert.ToInt32(port);
- AlarmSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- connResult = AlarmSocket.BeginConnect(ip, ports, null, null);
- Thread.Sleep(5000);
- connResult.AsyncWaitHandle.WaitOne(5, true); //等待2秒
- if (connResult.IsCompleted)
- {
- HandShark();
- // ReceiveAlarmData();
- return true;
- }
- else
- {
- return false;
- }
- }
- /// <summary>
- /// 断开设备连接
- /// </summary>
- /// <param name="no">设备编号</param>
- public void ETH_S7SimensDisConnect(string no)
- {
- AlarmSocket.Shutdown(SocketShutdown.Both);
- AlarmSocket.Close();
- }
- /// <summary>
- /// 三次握手
- /// </summary>
- void HandShark()
- {
- AlarmSocket.Send(ETH_S7SimensCommands.FIRST_HAND_SHANK);
- buffer = new byte[1024];
- receiveData = AlarmSocket.Receive(buffer);
- AlarmSocket.Send(ETH_S7SimensCommands.SENCOND_HAND_SHARK);
- buffer = new byte[1024];
- receiveData = AlarmSocket.Receive(buffer);
- AlarmSocket.Send(ETH_S7SimensCommands.THREE_HAND_SHARK);
- buffer = new byte[1024];
- receiveData = AlarmSocket.Receive(buffer);
- }
- public void ReceiveAlarmData()
- {
- //事件监听线程
- Task.Factory.StartNew(new Action(() =>
- {
- while (true)
- {
- byte[] buffer = new byte[1024 * 8];
- try
- {
- receiveData = AlarmSocket.Receive(buffer);
- byte[] datas = new byte[receiveData];
- //监听到消息
- if (receiveData > 0)
- {
- Array.Copy(buffer, datas, receiveData);
- if ((datas[3] == 0xc3))//&& (datas[12] == 0x40))
- {
- if (datas[187] == 0x01)
- {
- alarmMsg = BitConverter.ToInt16(datas.Skip(39).Take(2).ToArray(), 0);
- var sss = String.Format("{0:X2}{0:X2}", datas[54], datas[55]);
- flag = true;
- }
- }
- else
- {
- flag = false ;
- }
- }
- else
- {
- Thread.Sleep(100);
- flag = false;
- }
- }
- catch
- { }
- }
- }));
- }
- /// <summary>
- /// 设备报警信息
- /// </summary>
- /// <param name="socket"></param>
- public bool AlarmMsg(ref object result)
- {
- AlarmSocket.Send(ETH_S7SimensCommands.CNC_ALARM);
- Thread.Sleep(10);
- buffer = new byte[1024 * 8];
- receiveData = AlarmSocket.Receive(buffer);
- if (receiveData > 0)
- {
- datas = new byte[receiveData];
- Array.Copy(buffer, datas, receiveData);
- if ((datas[3] == 0xc3))//&& (datas[12] == 0x40))
- {
- if (datas[187] == 0x01)
- {
- var ss = BitConverter.ToInt16(datas.Skip(39).Take(2).ToArray(), 0);
- var sss = String.Format("{0:X2}{0:X2}", datas[54], datas[55]);
- result = sss;
- }
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
-
- }
-
- }
-
- }
|