0230204_FZLH_upperpc/fuqing/Nanji_Island/Form1.cs

1892 lines
72 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<FileInfo> lst_Camera = new List<FileInfo>();
List<FileInfo> lstFiles_Camera = tool.getFile(pass_Camera, ".avi", lst_Camera);
List<FileInfo> lst_Sonar = new List<FileInfo>();
List<FileInfo> 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 { }
}
/// <summary>
/// 电压电流监测
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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表示NVR1表示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表示NVR1表示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);
}
}*/
}
}