正文

家庭视频监控系统(14)

C#项目开发案例全程实录(第2版) 作者:明日科技


例如,下面的代码使用SerialPort类向COM1端口中写入数据,并进行异步读取。

using System.IO.Ports;

using System.Threading;

//实例化串口对象(默认:COM1,9600,e,8,1)

SerialPort SPort = new SerialPort();

private void Form1_Load(object sender, EventArgs e)

{

//更改参数

SPort.PortName = "COM1";

SPort.BaudRate = 9600;

SPort.Parity = Parity.None;

SPort.DataBits = 8;

SPort.StopBits = StopBits.One;

SPort.ReadBufferSize = 4096;

}

//发送并接收串口信息

private void button1_Click(object sender, EventArgs e)

{

//打开串口

if (SPort.IsOpen == false)

{

SPort.Open();

}

byte[] bytesSend = System.Text.Encoding.Default.GetBytes(richTextBox1.Text);

SPort.Write(bytesSend, 0, bytesSend.Length);

MessageBox.Show("发送串口信息成功");

ReceiveData(SPort);

}

//异步读取

private void AsyReceiveData(object serialPortobj)

{

SerialPort serialport = (SerialPort)serialPortobj;

System.Threading.Thread.Sleep(1000);

MessageBox.Show(serialport.ReadExisting());

serialport.Close();

}

//开启接收数据线程

private void ReceiveData(SerialPort serialPort)

{

//异步接收数据线程

Thread threadReceiveSub = new Thread(new ParameterizedThreadStart(AsyReceiveData));

threadReceiveSub.Start(serialPort);

}

1.6.3 视频监控模块实现过程

视频监控模块的具体实现步骤如下:

(1)新建一个Windows窗体,命名为frmMain.cs,主要用于实现视频监控功能及各种监控控制。该窗体用到的主要控件如表1.16所示。

(2)frmMain.cs代码文件中,首先实例化公共类PelcoD和SoftReg的两个对象,以便调用其中的方法,然后实例化一个SerialPort类对象,用来向云台发送串口消息,声明一个int类型的变量、两个byte类型的变量和一个byte类型的数组,分别用来获取视频采集卡的路数、存储Pelco-D协议中的地址码、数据码和要向云台传送的串口消息。关键代码如下:

例程15  代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

PelcoD pelcod = new PelcoD();

SoftReg softreg = new SoftReg();

SerialPort serialPort = new SerialPort("COM1", 2400, Parity.None, 8);       //实例化串口信息类,指定串口号

int m_dwDevNum = 0;                                             //存储视频路数

byte addressin = Byte.Parse(Convert.ToString(0x01));                    //Pelco-D协议中的第一地址码

byte speedin = Byte.Parse(Convert.ToString(0xff));                      //Pelco-D协议中的第二地址码

byte[] messagesend;                                              //存储要发送的串口消息

frmMain.cs代码文件中,自定义了两个方法startMonitor()和stopMove()。其中,startMonitor()方法用来实现开始监控功能,其实现代码如下:

例程16  代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//开始监控

protected void startMonitor()

{

   if (VideoOperate.VCAInitSdk(this.Handle, VideoOperate.DISPLAYTRANSTYPE.PCI_MEMORY_VIDEOMEMORY, false))

    {

u  m_dwDevNum = VideoOperate.VCAGetDevNum();

        if (m_dwDevNum == 0)

        {

            MessageBox.Show("VC404卡驱动程序没有安装");

        }

        else

        {

            for (int i = 0; i < m_dwDevNum; i++)

            {

v            VideoOperate.VCAOpenDevice(i, plVideo1.Handle);

w            VideoOperate.VCAStartVideoPreview(i);

            }

        }

    }

}

U 代码贴士

u VCAGetDevNum():该方法用来返回系统中卡号数量,即为SAA7134硬件数目。

v VCAOpenDevice():该方法用来打开指定卡号的设备,并分配相应的系统资源。

w VCAStartVideoPreview():该方法用来开始视频预览。

stopMove()方法用来实现停止移动视频监控画面功能,其实现代码如下:

例程17  代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//停止移动

protected void stopMove()

{

    messagesend = pelcod.CameraStop(addressin);

u   serialPort.Open();

v   serialPort.Write(messagesend, 0, 7);

w   serialPort.Close();

}

U 代码贴士

u Open():该方法用来打开一个新的串行端口连接。

v Write():该方法用来将数据写入串行端口输出缓冲区。

w Close():该方法用来关闭端口连接。

frmMain窗体在加载时,首先从注册表中提取注册信息,以判断该软件是否注册,如果已经注册,则在窗体标题栏中显示“已注册”字样,同时开始视频监控;否则,在窗体标题栏中显示“未注册”字样,并提示用户已试用次数。frmMain窗体的Load事件的代码如下:

例程18  代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//窗体加载时,初始化视频卡,并开始预览视频

private void frmMain_Load(object sender, EventArgs e)

{

    RegistryKey retkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("software", true).CreateSubKey ("wxk").CreateSubKey("wxk.INI"); 

    foreach (string strRNum in retkey.GetSubKeyNames()) //判断是否注册

    {

        if (strRNum == softreg.getRNum())

        {

            this.Text = "家庭视频监控系统(已注册)";

            btnReg.Enabled = false;

            startMonitor();

            return;

        }

    }

    this.Text = "家庭视频监控系统(未注册)";

    btnReg.Enabled = true;

    btnSetMonitor.Enabled = btnAutoMonitor.Enabled = false;

    startMonitor();

    MessageBox.Show("您现在使用的是试用版,该软件可以免费试用30次!","提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

    Int32 tLong;

    try

    {

        //获取注册表值

        tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\angel", "UseTimes", 0);

        MessageBox.Show("感谢您已使用了" + tLong + "次", "提示", MessageBoxButtons.OK, MessageBoxIcon. Information);

    }

    catch

    {

        //写入注册表信息

        Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\angel", "UseTimes", 0, RegistryValueKind. DWord);

        MessageBox.Show("欢迎新用户使用本软件", "提示", MessageBoxButtons.OK, MessageBoxIcon. Information);

    }

    tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\angel", "UseTimes", 0);

    if (tLong < 30)

    {

        int Times = tLong + 1;

        //将软件使用次数写入注册表

        Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\angel", "UseTimes", Times);

    }

    else

    {

        MessageBox.Show("试用次数已到", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);

        Application.Exit();

    }

}

 


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号