using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO.Ports; using System.IO; namespace Nanji_Island { public partial class Form1 : Form { UIControl_HBGK uiControl_HBGK1; UIControl_HBGK uiControl_HBGK2; //本机Ip String LocalIp; //端口号 String port; /*************************视频变量及常量设置****************************/ //视频变量 IntPtr libvlc_instance_Camer; IntPtr libvlc_media_player_Camer; IntPtr libvlc_instance_Sonar; IntPtr libvlc_media_player_Sonar; //视频线程 private System.Threading.Timer timer_Video; private System.Threading.Timer timer_Video_CZ; private System.Threading.Timer timer_Video_CZ_stop; //摄像及网络路径 string network_pass_Camera = "rtsp://192.168.1.123:554/really"; string network_pass_Sonar = "rtsp://192.168.1.168/0"; //摄像及声呐ip string ip_Camera = "192.168.1.131"; string ip_Sonar = "192.168.1.168"; //录制文件保存路径及录制状态 bool isREC_Camera = false; bool isREC_Sonar = false; string pass_Camera = @"G:\Video\Camera\"; string pass_Sonar = @"I:\Video\Sonar\"; static double[] data_send; private TcpClient tclient = new TcpClient(); private NetworkStream ns1; private NetworkStream ns2; public static SerialPort sp1 = new SerialPort(); public static SerialPort sp2 = new SerialPort(); public static SerialPort sp3 = new SerialPort(); public static SerialPort sp4 = new SerialPort(); public static SerialPort sp5 = new SerialPort(); /*************************视频变量及常量设置****************************/ private IPEndPoint myserver; //tcp/ip private Socket Soc; //private IPEndPoint myserver; private IPHostEntry MyHost; private static ManualResetEvent connectReset = new ManualResetEvent(false); private static ManualResetEvent sendReset = new ManualResetEvent(false); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { comboBox1.Items.Add("打开声呐"); comboBox1.Items.Add("打开摄像1"); comboBox1.Items.Add("第三路打开"); comboBox1.Items.Add("打开摄像2"); comboBox2.Items.Add("关闭声呐"); comboBox2.Items.Add("关闭摄像1"); comboBox2.Items.Add("第三路关闭"); comboBox2.Items.Add("关闭摄像2"); //使最大化窗口失效 //this.MaximizeBox = false; //禁用对窗口大小进行拖拽 //this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; //从服务端界面取出设定好的IP及端口号 LocalIp = Form2.LocalIp; port = Form2.port; ipAdress.Text = LocalIp; _port.Text = port; //开启服务端监听线程 Server.open_server(LocalIp, port); //视频及声呐初始化 //Initialization_Camera(); Initialization_Sonar(); //每隔1秒对视频通讯进行校验 延迟1秒开始视频播放 timer_Video = new System.Threading.Timer(new System.Threading.TimerCallback(Video), null, 1000 ,30000); timer_Video_CZ = new System.Threading.Timer(new System.Threading.TimerCallback(Video_CZ), null, 10000, 60000); //检查是否含有串口 string[] str = SerialPort.GetPortNames(); if (str == null) { MessageBox.Show("本机没有串口!", "Error"); return; } //添加串口项目 foreach (string s in System.IO.Ports.SerialPort.GetPortNames()) {//获取有多少个COM口 //System.Diagnostics.Debug.WriteLine(s); cbSerial.Items.Add(s); } //sp2.Open(); //sp3.Open(); //sp4.Open(); } /*****************************视频播放及录制***************************/ private void Camera_Show(bool video) { if (video == true) { //视频初始化 Initialization_Camera(); //开始播放 MediaPlayer.NetWork_Media_Play(libvlc_instance_Camer, libvlc_media_player_Camer, network_pass_Camera); //获取当前时间设置为文件名称 System.DateTime currentTime = new System.DateTime(); currentTime = System.DateTime.Now; string Time_LJ = currentTime.ToString("yyyyMMdd"); //开始录制 string url_carmer_1 = pass_Camera + Time_LJ + "\\"; if (!Directory.Exists(url_carmer_1)) { Directory.CreateDirectory(url_carmer_1); } string url_carmer = pass_Camera + Time_LJ + "\\" + currentTime.ToString(); MediaPlayer.Save_MediaPlayer(libvlc_media_player_Camer, url_carmer); isREC_Camera = true; } else { //结束录制 MediaPlayer.UnSave_MediaPlayer(libvlc_media_player_Camer); //释放播放器资源 MediaPlayer.Release_MediaPlayer(libvlc_media_player_Camer); isREC_Camera = false; } } private void Sonar_Show(bool video) { if (video == true) { //声呐初始化 // Initialization_Sonar(); MediaPlayer.NetWork_Media_Play(libvlc_instance_Sonar, libvlc_media_player_Sonar, network_pass_Sonar); //获取当前时间设置为文件名称 System.DateTime currentTime = new System.DateTime(); currentTime = System.DateTime.Now; string Time_LJ = currentTime.ToString("yyyyMMdd"); //开始录制 string url_sonar_1 = pass_Sonar + Time_LJ + "\\"; if (!Directory.Exists(url_sonar_1)) { Directory.CreateDirectory(url_sonar_1); } string url_sonar = pass_Sonar + Time_LJ + "\\" + currentTime.ToString("yyyy-MM-dd HH:mm:ss"); MediaPlayer.Save_MediaPlayer(libvlc_media_player_Sonar, url_sonar); isREC_Sonar = true; } else { ////结束录制 //MediaPlayer.UnSave_MediaPlayer(libvlc_media_player_Sonar); //释放播放器资源 MediaPlayer.Release_MediaPlayer(libvlc_media_player_Sonar); isREC_Sonar = false; } } private void Sonar_CZ(bool video) { if (video == true) { //声呐初始化 Initialization_Sonar(); //MediaPlayer.NetWork_Media_Play(libvlc_instance_Sonar, libvlc_media_player_Sonar, network_pass_Sonar); //获取当前时间设置为文件名称 System.DateTime currentTime = new System.DateTime(); currentTime = System.DateTime.Now; string Time_LJ = currentTime.ToString("yyyyMMdd"); //开始录制 string url_sonar_1 = pass_Sonar + Time_LJ + "\\"; if (!Directory.Exists(url_sonar_1)) { Directory.CreateDirectory(url_sonar_1); } string url_sonar = pass_Sonar + Time_LJ + "\\" + currentTime.ToString("yyyy-MM-dd HH:mm:ss"); MediaPlayer.Save_MediaPlayer(libvlc_media_player_Sonar, url_sonar); isREC_Sonar = true; } else { //结束录制 MediaPlayer.UnSave_MediaPlayer(libvlc_media_player_Sonar); //释放播放器资源 MediaPlayer.Release_MediaPlayer(libvlc_media_player_Sonar); isREC_Sonar = false; } } //视频初始化 private void Initialization_Camera() { try { libvlc_instance_Camer = MediaPlayer.Create_Media_Instance(); Invoke((EventHandler)(delegate { libvlc_media_player_Camer = MediaPlayer.Create_MediaPlayer(libvlc_instance_Camer, panel1.Handle); })); } catch (Exception err) { Console.WriteLine(err.Message); } } //声呐初始化 private void Initialization_Sonar() { try { libvlc_instance_Sonar = MediaPlayer.Create_Media_Instance(); Invoke((EventHandler)(delegate { libvlc_media_player_Sonar = MediaPlayer.Create_MediaPlayer(libvlc_instance_Sonar, panel2.Handle); })); } catch (Exception err) { Console.WriteLine(err.Message); } } //计数用 int count_Camera = 0; int count_Sonar = 0; //校验timer 用于校验当前视频及声呐通讯是否正常 private void Video(object sender) { //如果没有存储路径就创建存储路径 if (false == System.IO.Directory.Exists(pass_Camera)){Directory.CreateDirectory(pass_Camera);} if (false == System.IO.Directory.Exists(pass_Sonar)) { Directory.CreateDirectory(pass_Sonar); } List lst_Camera = new List(); List lstFiles_Camera = tool.getFile(pass_Camera, ".avi", lst_Camera); List lst_Sonar = new List(); List lstFiles_Sonar = tool.getFile(pass_Sonar, ".avi", lst_Sonar); bool play_Camera = MediaPlayer.MediaPlayer_IsPlaying(libvlc_media_player_Camer); bool play_Sonar = MediaPlayer.MediaPlayer_IsPlaying(libvlc_media_player_Sonar); //如果通,且不在录制则开始播放并录制 if (tool.PingIp(ip_Camera) == true && isREC_Camera == false) { Thread.Sleep(10000); //释放播放器资源 MediaPlayer.MediaPlayer_Stop(libvlc_media_player_Camer); Camera_Show(true); } //如果不通且在录制,则停止录制并保存 else if (tool.PingIp(ip_Camera) == false && isREC_Camera == true) { Camera_Show(false); } //如果通且在录制或不同且不在录制,则不需要操作 else if (tool.PingIp(ip_Camera) == true && isREC_Camera == true) { } else if (tool.PingIp(ip_Camera) == false && isREC_Camera == false && play_Camera == false) //else if (tool.PingIp(ip_Camera) == false && isREC_Camera == false ) { if (lstFiles_Camera.Count != 0) { MediaPlayer.LocationPath_Media_Play(libvlc_instance_Camer, libvlc_media_player_Camer, lstFiles_Camera[count_Camera].FullName); if (lstFiles_Camera.Count != count_Camera + 1) { count_Camera = count_Camera + 1; } else { count_Camera = 0; } } } if (tool.PingIp(ip_Sonar) == true && isREC_Sonar == false) {//释放播放器资源 Thread.Sleep(1000); MediaPlayer.MediaPlayer_Stop(libvlc_media_player_Sonar); Sonar_Show(true); //播放流后将频率变成100毫秒 timer_Video.Dispose(); timer_Video = new System.Threading.Timer(new System.Threading.TimerCallback(Video), null, 2000, 1000); Console.WriteLine("开始录制应该"); } //如果不通且在录制,则停止录制并保存 else if (tool.PingIp(ip_Sonar) == false && isREC_Sonar == true) { Sonar_Show(false); Sonar_CZ(false); } //如果通且在录制,则不需要操作,或不同且不在录制不在播放则随机播放本地视频 else if (tool.PingIp(ip_Sonar) == true && isREC_Sonar == true) { Console.WriteLine("正在播放在线视频"); //DateTime _time = System.DateTime.Now; //while ((System.DateTime.Now - _time).TotalSeconds < 1800) { Thread.Sleep(1); } //MediaPlayer.MediaPlayer_Stop(libvlc_media_player_Sonar); //Thread.Sleep(60000); //MediaPlayer.UnSave_MediaPlayer(libvlc_media_player_Sonar); //Thread.Sleep(2000); //////释放播放器资源 ////MediaPlayer.MediaPlayer_Stop(libvlc_media_player_Sonar); ////MediaPlayer.Release_MediaPlayer(libvlc_media_player_Sonar); //isREC_Sonar = false; ////Sonar_Show(false); //timer_Video.Dispose(); //timer_Video = new System.Threading.Timer(new System.Threading.TimerCallback(Video), null, 0, 10000); } else if (tool.PingIp(ip_Sonar) == false && isREC_Sonar == false && play_Sonar == false) { if (lstFiles_Sonar.Count != 0) { MediaPlayer.LocationPath_Media_Play(libvlc_instance_Sonar, libvlc_media_player_Sonar, lstFiles_Sonar[count_Sonar].FullName); if (lstFiles_Sonar.Count != count_Sonar + 1) { count_Sonar = count_Sonar + 1; } else { count_Sonar = 0; } } //播放本地视频后将频率改回10秒 //播放流后将频率变成100毫秒 timer_Video.Dispose(); timer_Video = new System.Threading.Timer(new System.Threading.TimerCallback(Video), null, 0, 10000); } } private void Video_CZ(object sender) { if (tool.PingIp(ip_Sonar) == true && isREC_Sonar == true) { //结束录制 MediaPlayer.UnSave_MediaPlayer(libvlc_media_player_Sonar); ////释放播放器资源 //MediaPlayer.Release_MediaPlayer(libvlc_media_player_Sonar); isREC_Sonar = false; Thread.Sleep(2000); Console.WriteLine("结束存储"); Thread.Sleep(2000); timer_Video.Dispose(); timer_Video = new System.Threading.Timer(new System.Threading.TimerCallback(Video), null, 0, 1000); Console.WriteLine("创建新timer"); } } private void Video_CZ_Stop(object sender) { // Sonar_Show(false); ////结束录制 //MediaPlayer.UnSave_MediaPlayer(libvlc_media_player_Sonar); //////释放播放器资源 ////MediaPlayer.Release_MediaPlayer(libvlc_media_player_Sonar); //isREC_Sonar = false; //Thread.Sleep(10000); //Console.WriteLine("结束存储"); //timer_Video_CZ_stop.Dispose(); } /*****************************视频播放及录制***************************/ //关闭 /**private void button2_Click(object sender, EventArgs e) { //socket关闭 serverSocket.Close(); //线程关闭 listenThread.Abort(); threadReceive.Abort(); }**/ /**********************设定窗口关闭时触发的事件*************************/ private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //关闭所有线程关闭 Server.close_server(); } /******************************测试****************************/ //发送 private void button1_Click_1(object sender, EventArgs e) { Server.send_server("GET"); } private void button2_Click(object sender, EventArgs e) { Server.send_server("#ZTTHY- 1,Server,data_trans,MANY_PARAM,2020-10- 9 14:33:14, 10,0123456789,End"); } //手动模式切换 private void button3_Click(object sender, EventArgs e) { } private void button4_Click(object sender, EventArgs e) { } private void panel2_Paint(object sender, PaintEventArgs e) { } private void btnopen_Click(object sender, EventArgs e) { try { if (tclient.Connected == false) { tclient.Connect(tbIP.Text, Convert.ToInt32(tbPort.Text)); if (tclient.Connected == true) btnopen.Text = "关闭"; ns1 = tclient.GetStream(); ns2 = tclient.GetStream(); } else { tclient.Close(); tclient = new TcpClient(); btnopen.Text = "打开"; } } catch (Exception ex) { tclient.Close(); tclient = new TcpClient(); MessageBox.Show(ex.Message); } } private void btnDO1_Click(object sender, EventArgs e) { Button btn = (sender as Button); bool isopen = (btn.ImageIndex == 0) ? false : true; int io = Convert.ToInt32(btn.Tag); btn.ImageIndex = (isopen) ? 0 : 1; byte[] info = CModbusDll.WriteDO(Convert.ToInt16(txtaddr.Text), io - 1, !isopen); byte[] rst = sendinfo(info); if (rst != null) { btn.ImageIndex = (rst[0] == 0) ? 0 : 1; } } private byte[] sendinfo(byte[] info) { if (tclient.Connected == false) return null; tclient.SendTimeout = 1000; try { ns1.Write(info, 0, info.Length); DebugInfo("发送", info); byte[] data = new byte[2048]; ns2.ReadTimeout = 2000; int len = ns2.Read(data, 0, 2048); DebugInfo("接收", data, len); return analysisRcv(data, len); } catch (Exception ex) { tclient.Close(); tclient = new TcpClient(); btnopen.Text = "打开"; MessageBox.Show(ex.Message); } return null; } private void DebugInfo(string infotxt, byte[] info, int len = 0) { string debuginfo; StringBuilder builder = new StringBuilder(); if (info != null) { if (len == 0) len = info.Length; //判断是否是显示为16禁止 //依次的拼接出16进制字符串 for (int i = 0; i < len; i++) { builder.Append(info[i].ToString("X2") + " "); } } debuginfo = string.Format("{0}:{1}\r\n", infotxt, builder.ToString()); builder.Clear(); //因为要访问ui资源,所以需要使用invoke方式同步ui。 this.Invoke((EventHandler)(delegate { //追加的形式添加到文本框末端,并滚动到最后。 txtRecv.AppendText(debuginfo); })); } private byte[] analysisRcv(byte[] src, int len) { if (len < 6) return null; if (src[0] != Convert.ToInt16(txtaddr.Text)) return null; switch (src[1]) { case 0x01: if (CMBRTU.CalculateCrc(src, 6) == 0x00) { byte[] dst = new byte[1]; dst[0] = src[3]; return dst; } break; case 0x02: if (CMBRTU.CalculateCrc(src, src[2] + 5) == 0x00) { byte[] dst = new byte[src[2]]; for (int i = 0; i < src[2]; i++) dst[i] = src[3 + i]; return dst; } break; case 0x05: if (CMBRTU.CalculateCrc(src, 8) == 0x00) { byte[] dst = new byte[1]; dst[0] = src[4]; return dst; } break; case 0x0f: if (CMBRTU.CalculateCrc(src, 8) == 0x00) { byte[] dst = new byte[1]; dst[0] = 1; return dst; } break; } return null; } private void btnSwitch_Click(object sender, EventArgs e) { Form1.sp1.PortName = "COM4"; Form1.sp1.BaudRate = 9600; Form1.sp1.Parity = Parity.None; Form1.sp1.DataBits = 8; Form1.sp1.StopBits = StopBits.One; Form1.sp1.ReceivedBytesThreshold = 1; try { Form1.sp1.Open(); Console.WriteLine("多参数串口打开成功"); } catch (Exception ex) { throw (new Exception("打开多参数串口出错:" + ex.Message)); } btnSwitch.Enabled = false; //btnSwitch.Enabled = true; } private void button8_Click(object sender, EventArgs e)//串口继电器 { if (comboBox1.SelectedItem.Equals("第一路打开")) { string strSecond = "01 05 00 10 FF 00 8D FF"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp1.Write(byteBuffer, 0, byteBuffer.Length); } else if (comboBox1.SelectedItem.Equals("第二路打开")) { string strSecond = "01 05 00 11 FF 00 DC 3F"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp1.Write(byteBuffer, 0, byteBuffer.Length); } else if (comboBox1.SelectedItem.Equals("第三路打开")) { string strSecond = "01 05 00 12 FF 00 2C 3F"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp1.Write(byteBuffer, 0, byteBuffer.Length); } else if (comboBox1.SelectedItem.Equals("第四路打开")) { string strSecond = "01 05 00 13 FF 00 7D FF"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp1.Write(byteBuffer, 0, byteBuffer.Length); } } private void button5_Click(object sender, EventArgs e) { if (comboBox2.SelectedItem.Equals("第一路关闭")) { string strSecond = "01 05 00 10 00 00 CC 0F"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp1.Write(byteBuffer, 0, byteBuffer.Length); } else if (comboBox2.SelectedItem.Equals("第二路关闭")) { string strSecond = "01 05 00 11 00 00 9D CF"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp1.Write(byteBuffer, 0, byteBuffer.Length); } else if (comboBox2.SelectedItem.Equals("第三路关闭")) { string strSecond = "01 05 00 12 00 00 6D CF"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp1.Write(byteBuffer, 0, byteBuffer.Length); } else if (comboBox2.SelectedItem.Equals("第四路关闭")) { string strSecond = "01 05 00 13 00 00 3C 0F"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp1.Write(byteBuffer, 0, byteBuffer.Length); } } private void btnDO1_Click_1(object sender, EventArgs e) { try { Button btn = (sender as Button); bool isopen = (btn.ImageIndex == 0) ? false : true; int io = Convert.ToInt32(btn.Tag); btn.ImageIndex = (isopen) ? 0 : 1; byte[] info = CModbusDll.WriteDO(Convert.ToInt16(txtaddr.Text), io - 1, !isopen); byte[] rst = sendinfo(info); if (rst != null) { btn.ImageIndex = (rst[0] == 0) ? 0 : 1; } } catch { } } private void button6_Click(object sender, EventArgs e) { Sonar_Show(false); } private void btnDO2_Click(object sender, EventArgs e) { } /////////////温湿度控制////////////// private void button7_Click(object sender, EventArgs e) { Form1.sp2.PortName = "COM9"; Form1.sp2.BaudRate = 4800; Form1.sp2.Parity = Parity.None; Form1.sp2.DataBits = 8; Form1.sp2.StopBits = StopBits.One; Form1.sp2.ReceivedBytesThreshold = 1; Form1.sp2.DataReceived += new SerialDataReceivedEventHandler(serialPort_wenshidu_DataReceived); try { Form1.sp2.Open(); Console.WriteLine("多参数串口打开成功"); } catch (Exception ex) { throw (new Exception("打开多参数串口出错:" + ex.Message)); } button7.Enabled = false; } private void serialPort_wenshidu_DataReceived(object sender, SerialDataReceivedEventArgs e) { try{ Thread.Sleep(1000); string Time = DateTime.Now.ToString(); string Time_CZ = DateTime.Now.ToString("yyyyMMdd"); byte[] byteRead = new byte[Form1.sp2.BytesToRead]; //BytesToRead:sp1接收的字符个数 Form1.sp2.Read(byteRead, 0, byteRead.Length); sp2.DiscardInBuffer(); string strRcv = null; //int decNum = 0;//存储十进制 for (int i = 0; i < byteRead.Length; i++) //窗体显示 { strRcv += byteRead[i].ToString("X2"); //16进制显示 } Invoke((EventHandler)(delegate { try { label39.Text = (Convert.ToInt64(strRcv.Substring(6, 4), 16) / 10.00).ToString(); //湿度 label14.Text = (Convert.ToInt64(strRcv.Substring(10, 4), 16) / 10.00).ToString(); ; //温度 label16.Text = Time; StringBuilder sb = new StringBuilder(); sb.AppendLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + " "); string path_wsd2 = @"D:\环境参数记录" + "\\" + Time_CZ + "\\"; if (!Directory.Exists(path_wsd2)) { Directory.CreateDirectory(path_wsd2); } System.IO.File.AppendAllText(path_wsd2+"温湿度2.txt", "时间:" + label16.Text + " " + "湿度:" + label39.Text + " " + "温度:" + label14.Text + "\r\n"); } catch { } })); } catch { } } /// /// 电压电流监测 /// /// /// private void button9_Click(object sender, EventArgs e) { Form1.sp4.PortName = "COM8"; Form1.sp4.BaudRate = 9600; Form1.sp4.Parity = Parity.None; Form1.sp4.DataBits = 8; Form1.sp4.StopBits = StopBits.Two; Form1.sp4.ReceivedBytesThreshold = 1; Form1.sp4.DataReceived += new SerialDataReceivedEventHandler(serialPort_dianyadianliu_DataReceived); try { Form1.sp4.Open(); Console.WriteLine("多参数串口打开成功"); } catch (Exception ex) { throw (new Exception("打开多参数串口出错:" + ex.Message)); } button9.Enabled = false; } private void serialPort_dianyadianliu_DataReceived(object sender, SerialDataReceivedEventArgs e) { Thread.Sleep(1000); string Time = DateTime.Now.ToString(); string Time_CZ = DateTime.Now.ToString("yyyyMMdd"); byte[] byteRead = new byte[Form1.sp4.BytesToRead]; //BytesToRead:sp1接收的字符个数 Form1.sp4.Read(byteRead, 0, byteRead.Length); sp4.DiscardInBuffer(); string strRcv = null; //int decNum = 0;//存储十进制 for (int i = 0; i < byteRead.Length; i++) //窗体显示 { strRcv += byteRead[i].ToString("X2"); //16进制显示 } Invoke((EventHandler)(delegate { try { label31.Text = (Convert.ToInt64(strRcv.Substring(6, 4), 16) / 100.00).ToString(); //电压 label32.Text = (Convert.ToInt64(strRcv.Substring(10, 4), 16) / 100.00).ToString(); ; //电流 label9.Text = Time; StringBuilder sb = new StringBuilder(); sb.AppendLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + " "); string path_dydl = @"D:\环境参数记录"+"\\" + Time_CZ + "\\"; if (!Directory.Exists(path_dydl)) { Directory.CreateDirectory(path_dydl); } System.IO.File.AppendAllText(path_dydl+"电压电流.txt", "时间:" + label9.Text + " " + "电压:" + label31.Text + " " + "电流:" + label32.Text + "\r\n"); } catch { } })); } private void groupBox2_Enter(object sender, EventArgs e) { } private void button10_Click(object sender, EventArgs e) { if (panel1.Controls.Count > 0) { UIControl_HBGK uiControl = (UIControl_HBGK)panel1.Controls[0]; uiControl.ReleaseResources("1"); } panel1.Controls.Clear(); init1(); uiControl_HBGK1.Dock = DockStyle.Fill; panel1.Controls.Add(uiControl_HBGK1); } private void init1() { ChannelInfo ch = new ChannelInfo(); ch.ChlID = "1"; ch.nDeviceType = 1;//2表示NVR,1表示IPC ch.RemoteChannle = "1"; ch.RemoteIP = "192.168.1.123"; ch.RemotePort = 554; ch.RemoteUser = "admin"; ch.RemotePwd = "123456"; ch.nPlayPort = 2; ch.PtzPort = 8091; uiControl_HBGK1 = new UIControl_HBGK(ch); } private void button11_Click(object sender, EventArgs e) { if (panel3.Controls.Count > 0) { UIControl_HBGK uiControl = (UIControl_HBGK)panel1.Controls[0]; uiControl.ReleaseResources("1"); } panel3.Controls.Clear(); init2(); uiControl_HBGK2.Dock = DockStyle.Fill; panel3.Controls.Add(uiControl_HBGK2); } private void init2() { ChannelInfo ch = new ChannelInfo(); ch.ChlID = "1"; ch.nDeviceType = 1;//2表示NVR,1表示IPC ch.RemoteChannle = "1"; ch.RemoteIP = "192.168.1.124"; ch.RemotePort = 554; ch.RemoteUser = "admin"; ch.RemotePwd = "123456"; ch.nPlayPort = 1; ch.PtzPort = 8091; uiControl_HBGK2 = new UIControl_HBGK(ch); } private void button12_Click(object sender, EventArgs e)//请求温湿度数据 { string strSecond = "01 03 00 00 00 02 C4 0B"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp2.Write(byteBuffer, 0, byteBuffer.Length); } private void timer1_Tick(object sender, EventArgs e) { try { string strSecond = "01 03 00 00 00 02 C4 0B"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp2.Write(byteBuffer, 0, byteBuffer.Length); } catch { } } private void button13_Click(object sender, EventArgs e) { string strSecond = "01 03 00 00 00 02 C4 0B"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp3.Write(byteBuffer, 0, byteBuffer.Length); } private void timer2_Tick(object sender, EventArgs e) { try { string strSecond = "01 03 00 00 00 02 C4 0B"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp3.Write(byteBuffer, 0, byteBuffer.Length); } catch { } } private void button6_Click_1(object sender, EventArgs e) { Form1.sp3.PortName = "COM10"; Form1.sp3.BaudRate = 4800; Form1.sp3.Parity = Parity.None; Form1.sp3.DataBits = 8; Form1.sp3.StopBits = StopBits.One; Form1.sp3.ReceivedBytesThreshold = 1; Form1.sp3.DataReceived += new SerialDataReceivedEventHandler(serialPort_wenshidu_DataReceived1); try { Form1.sp3.Open(); Console.WriteLine("多参数串口打开成功"); } catch (Exception ex) { throw (new Exception("打开多参数串口出错:" + ex.Message)); } button6.Enabled = false; } private void serialPort_wenshidu_DataReceived1(object sender, SerialDataReceivedEventArgs e) { Thread.Sleep(1000); string Time = DateTime.Now.ToString(); string Time_CZ = DateTime.Now.ToString("yyyyMMdd"); byte[] byteRead = new byte[Form1.sp3.BytesToRead]; //BytesToRead:sp1接收的字符个数 Form1.sp3.Read(byteRead, 0, byteRead.Length); sp2.DiscardInBuffer(); string strRcv = null; //int decNum = 0;//存储十进制 for (int i = 0; i < byteRead.Length; i++) //窗体显示 { strRcv += byteRead[i].ToString("X2"); //16进制显示 } Invoke((EventHandler)(delegate { try { label28.Text = (Convert.ToInt64(strRcv.Substring(6, 4), 16) / 10.00).ToString(); //湿度 label27.Text = (Convert.ToInt64(strRcv.Substring(10, 4), 16) / 10.00).ToString(); ; //温度 label26.Text = Time; StringBuilder sb = new StringBuilder(); sb.AppendLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + " "); string path_wsd1 = @"D:\环境参数记录" + "\\" + Time_CZ + "\\"; if (!Directory.Exists(path_wsd1)) { Directory.CreateDirectory(path_wsd1); } System.IO.File.AppendAllText(path_wsd1+"温湿度1.txt", "时间:" + label26.Text + " " + "湿度:" + label28.Text + " " + "温度:" + label27.Text + "\r\n"); } catch { } })); } private void timer3_Tick(object sender, EventArgs e) { try { string strSecond = "01 04 00 00 00 08 F1 CC"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp4.Write(byteBuffer, 0, byteBuffer.Length); } catch { } } private void timer4_Tick(object sender, EventArgs e) { /*if(true){} Button btn = (sender as Button); bool isopen = (btn.ImageIndex == 0) ? false : true; int io = Convert.ToInt32(btn.Tag); btn.ImageIndex = (isopen) ? 0 : 1; byte[] info = CModbusDll.WriteDO(Convert.ToInt16(txtaddr.Text), io - 1, !isopen); byte[] rst = sendinfo(info); if (rst != null) { btn.ImageIndex = (rst[0] == 0) ? 0 : 1; }*/ btnDO1_Click_1(btnDO1,e); } private void button14_Click(object sender, EventArgs e) { string strSecond = "01 04 00 00 00 08 F1 CC"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp4.Write(byteBuffer, 0, byteBuffer.Length); } private void timer5_Tick(object sender, EventArgs e) { Form1.sp2.PortName = "COM9"; Form1.sp2.BaudRate = 4800; Form1.sp2.Parity = Parity.None; Form1.sp2.DataBits = 8; Form1.sp2.StopBits = StopBits.One; Form1.sp2.ReceivedBytesThreshold = 1; Form1.sp2.DataReceived += new SerialDataReceivedEventHandler(serialPort_wenshidu_DataReceived); try { Form1.sp2.Open(); Console.WriteLine("多参数串口打开成功"); } catch (Exception ex) { throw (new Exception("打开多参数串口出错:" + ex.Message)); } button7.Enabled = false; Form1.sp3.PortName = "COM10"; Form1.sp3.BaudRate = 4800; Form1.sp3.Parity = Parity.None; Form1.sp3.DataBits = 8; Form1.sp3.StopBits = StopBits.One; Form1.sp3.ReceivedBytesThreshold = 1; Form1.sp3.DataReceived += new SerialDataReceivedEventHandler(serialPort_wenshidu_DataReceived1); try { Form1.sp3.Open(); Console.WriteLine("多参数串口打开成功"); } catch (Exception ex) { throw (new Exception("打开多参数串口出错:" + ex.Message)); } button6.Enabled = false; Form1.sp4.PortName = "COM8"; Form1.sp4.BaudRate = 9600; Form1.sp4.Parity = Parity.None; Form1.sp4.DataBits = 8; Form1.sp4.StopBits = StopBits.Two; Form1.sp4.ReceivedBytesThreshold = 1; Form1.sp4.DataReceived += new SerialDataReceivedEventHandler(serialPort_dianyadianliu_DataReceived); try { Form1.sp4.Open(); Console.WriteLine("多参数串口打开成功"); } catch (Exception ex) { throw (new Exception("打开多参数串口出错:" + ex.Message)); } button9.Enabled = false; string strSecond = "01 03 00 00 00 02 C4 0B"; //处理数字转换 string sendBuf = strSecond; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); //timer_EXO2.Enabled = false; return; } ii++; } sp2.Write(byteBuffer, 0, byteBuffer.Length); } private void timer6_Tick(object sender, EventArgs e)//定时监控socket { try { if (tclient.Connected == false) { tclient.Connect(tbIP.Text, Convert.ToInt32(tbPort.Text)); if (tclient.Connected == true) btnopen.Text = "关闭"; ns1 = tclient.GetStream(); ns2 = tclient.GetStream(); } else { tclient.Close(); tclient = new TcpClient(); btnopen.Text = "打开"; } } catch (Exception ex) { tclient.Close(); tclient = new TcpClient(); MessageBox.Show(ex.Message); } } private void timer7_Tick(object sender, EventArgs e) { Sonar_Show(true); } private void timer8_Tick(object sender, EventArgs e) { btnDO1_Click_1(null,null); } private void timer9_Tick(object sender, EventArgs e) { if (btnopen.Text=="打开") { btnopen_Click(null, null); } } private void timer10_Tick(object sender, EventArgs e) { Initialization_Sonar(); } /* public void write(string str, TextBox tb) { if (InvokeRequired) this.Invoke(new Write(write), str, tb); else tb.AppendText("\r\n" + str); } private void target() { try { StateObject state = new StateObject(); state.worksocket = Soc; Soc.BeginReceive(state.buffer, 0, state.buffer.Length, 0, new AsyncCallback(ReceiveCallBack), state); } catch (Exception err) { write(err.Message, textBox1); } } private void ReceiveCallBack(IAsyncResult ar) { try { StateObject state = (StateObject)ar.AsyncState; Socket client = state.worksocket; int bytesRead = client.EndReceive(ar); state.sb.Append(System.Text.Encoding.UTF8.GetString(state.buffer, 0, bytesRead)); string aa = state.sb.ToString(); state.sb.Remove(0, aa.Length); write(aa, textBox1); client.BeginReceive(state.buffer, 0, state.buffer.Length, 0, new AsyncCallback(ReceiveCallBack), state); } catch (Exception err) { write(err.Message, textBox1); } }*/ } }