正文

家庭視頻監(jiān)控系統(tǒng)(14)

C#項目開發(fā)案例全程實錄(第2版) 作者:明日科技


例如,下面的代碼使用SerialPort類向COM1端口中寫入數(shù)據(jù),并進行異步讀取。

using System.IO.Ports;

using System.Threading;

//實例化串口對象(默認:COM1,9600,e,8,1)

SerialPort SPort = new SerialPort();

private void Form1_Load(object sender, EventArgs e)

{

//更改參數(shù)

SPort.PortName = "COM1";

SPort.BaudRate = 9600;

SPort.Parity = Parity.None;

SPort.DataBits = 8;

SPort.StopBits = StopBits.One;

SPort.ReadBufferSize = 4096;

}

//發(fā)送并接收串口信息

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("發(fā)送串口信息成功");

ReceiveData(SPort);

}

//異步讀取

private void AsyReceiveData(object serialPortobj)

{

SerialPort serialport = (SerialPort)serialPortobj;

System.Threading.Thread.Sleep(1000);

MessageBox.Show(serialport.ReadExisting());

serialport.Close();

}

//開啟接收數(shù)據(jù)線程

private void ReceiveData(SerialPort serialPort)

{

//異步接收數(shù)據(jù)線程

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

threadReceiveSub.Start(serialPort);

}

1.6.3 視頻監(jiān)控模塊實現(xiàn)過程

視頻監(jiān)控模塊的具體實現(xiàn)步驟如下:

(1)新建一個Windows窗體,命名為frmMain.cs,主要用于實現(xiàn)視頻監(jiān)控功能及各種監(jiān)控控制。該窗體用到的主要控件如表1.16所示。

(2)frmMain.cs代碼文件中,首先實例化公共類PelcoD和SoftReg的兩個對象,以便調(diào)用其中的方法,然后實例化一個SerialPort類對象,用來向云臺發(fā)送串口消息,聲明一個int類型的變量、兩個byte類型的變量和一個byte類型的數(shù)組,分別用來獲取視頻采集卡的路數(shù)、存儲Pelco-D協(xié)議中的地址碼、數(shù)據(jù)碼和要向云臺傳送的串口消息。關鍵代碼如下:

例程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;                                             //存儲視頻路數(shù)

byte addressin = Byte.Parse(Convert.ToString(0x01));                    //Pelco-D協(xié)議中的第一地址碼

byte speedin = Byte.Parse(Convert.ToString(0xff));                      //Pelco-D協(xié)議中的第二地址碼

byte[] messagesend;                                              //存儲要發(fā)送的串口消息

frmMain.cs代碼文件中,自定義了兩個方法startMonitor()和stopMove()。其中,startMonitor()方法用來實現(xiàn)開始監(jiān)控功能,其實現(xiàn)代碼如下:

例程16  代碼位置:光盤\TM\01\VWMS\VWMS\frmMain.cs

//開始監(jiān)控

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卡驅(qū)動程序沒有安裝");

        }

        else

        {

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

            {

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

w            VideoOperate.VCAStartVideoPreview(i);

            }

        }

    }

}

U 代碼貼士

u VCAGetDevNum():該方法用來返回系統(tǒng)中卡號數(shù)量,即為SAA7134硬件數(shù)目。

v VCAOpenDevice():該方法用來打開指定卡號的設備,并分配相應的系統(tǒng)資源。

w VCAStartVideoPreview():該方法用來開始視頻預覽。

stopMove()方法用來實現(xiàn)停止移動視頻監(jiān)控畫面功能,其實現(xiàn)代碼如下:

例程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():該方法用來將數(shù)據(jù)寫入串行端口輸出緩沖區(qū)。

w Close():該方法用來關閉端口連接。

frmMain窗體在加載時,首先從注冊表中提取注冊信息,以判斷該軟件是否注冊,如果已經(jīng)注冊,則在窗體標題欄中顯示“已注冊”字樣,同時開始視頻監(jiān)控;否則,在窗體標題欄中顯示“未注冊”字樣,并提示用戶已試用次數(shù)。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 = "家庭視頻監(jiān)控系統(tǒng)(已注冊)";

            btnReg.Enabled = false;

            startMonitor();

            return;

        }

    }

    this.Text = "家庭視頻監(jiān)控系統(tǒng)(未注冊)";

    btnReg.Enabled = true;

    btnSetMonitor.Enabled = btnAutoMonitor.Enabled = false;

    startMonitor();

    MessageBox.Show("您現(xiàn)在使用的是試用版,該軟件可以免費試用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;

        //將軟件使用次數(shù)寫入注冊表

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

    }

    else

    {

        MessageBox.Show("試用次數(shù)已到", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);

        Application.Exit();

    }

}

 


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號