日韩精品 中文字幕 动漫,91亚洲午夜一区,在线不卡日本v一区v二区丶,久久九九国产精品自在现拍

正文

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

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


1.9 開發(fā)技巧與難點分析

1.9.1 按Enter鍵移動鼠標(biāo)焦點

實現(xiàn)登錄模塊時,當(dāng)輸入用戶名或密碼之后,可以按Enter鍵將鼠標(biāo)焦點移動到下一個控件上。實現(xiàn)原理是在輸入用戶名或密碼的文本框的KeyPress事件下,判斷是否按了Enter鍵,如果是,則將焦點移動到下一個控件上。實現(xiàn)該功能的代碼如下:

例程38 代碼位置:光盤\TM\01\VWMS\VWMS\frmLogin.cs

private void txtName_KeyPress(object sender, KeyPressEventArgs e)

{

if (e.KeyChar == 13)

{

txtPwd.Focus();

e.Handled = true;

}

}

private void txtPwd_KeyPress(object sender, KeyPressEventArgs e)

{

if (e.KeyChar == 13)

{

btnLogin.Focus();

e.Handled = true;

}

}

1.9.2 使用圖標(biāo)顯示管理員頭像

為了使程序更加人性化,可以使用圖標(biāo)顯示管理員頭像。實現(xiàn)方法為:在窗體中添加一個ImageList控件,并將要顯示的圖標(biāo)添加到ImageList控件的列表中,然后將顯示管理員信息的ListView控件的LargeImageList、SmallImageList和StateImageList屬性都設(shè)置為已經(jīng)添加的ImageList控件的ID,這時運行窗體,即可使用圖標(biāo)形象地顯示管理員頭像。

1.9.3 云臺控制協(xié)議

云臺是通過云臺解碼器與計算機串口或并口相連的,程序是通過向云臺解碼器發(fā)送指令來實現(xiàn)云臺控制的。這里的指令是由云臺控制協(xié)議確定的。不同的廠家,云臺控制協(xié)議也不盡相同。以Pelco-D2400為例,其命令格式由7個字節(jié)構(gòu)成。第1個字節(jié)為同步字節(jié),始終為FFH;第2個字節(jié)為地址碼,也就是攝像頭的邏輯地址號,范圍在00H~FFH之間,是在安裝攝像頭時手動設(shè)置的,該值一定要正確,否則命令不會執(zhí)行;第3、4個字節(jié)表示指令碼,即執(zhí)行哪項操作,例如,向上、下、左、右移動攝像頭等;第5、6個字節(jié)表示數(shù)據(jù)碼,用于指定攝像頭的水平、垂直方向移動速度;第7個字節(jié)為校驗碼,是由第2、3、4、5、6個字節(jié)數(shù)據(jù)之和與100H取模獲得的。

此外,在執(zhí)行某一命令后,應(yīng)執(zhí)行停止命令,否則命令執(zhí)行的動作會一直執(zhí)行。例如,將攝像頭向上移動,如果不發(fā)送停止命令,攝像頭就會一直向上移動。在Pelco-D2400協(xié)議的停止命令中,第1個字節(jié)為FFH,第2個字節(jié)為地址碼,第3、4、5、6個字節(jié)為00F,第7個字節(jié)為第2個字節(jié)數(shù)據(jù)與100H的模。

只要知道了控制命令,就可以通過向串口發(fā)送這些命令來控制云臺了。例如,下面的代碼實現(xiàn)了云臺的向下移動。

class PelcoD

{

private static readonly byte STX = 0xFF; //同步字節(jié)

private const byte TiltUp = 0x08; //上

private const byte TiltDown = 0x10; //下

#region 鏡頭上下移動的速度

private const byte TiltSpeedMin = 0x00; //停止

private const byte TiltSpeedMax = 0x3F; //最高速

#endregion

public enum Tilt { Up = TiltUp, Down = TiltDown } //上下控制

//上下控制

public byte[] CameraTilt(uint deviceAddress, Tilt action, uint speed)

{

if (speed < TiltSpeedMin)

speed = TiltSpeedMin;

if (speed < TiltSpeedMax)

speed = TiltSpeedMax;

return Message.GetMessage(deviceAddress, 0x00, (byte)action, 0x00, (byte)speed);

}

public struct Message

{

public static byte Address;

public static byte CheckSum;

public static byte Command1, Command2, Data1, Data2;

public static byte[] GetMessage(uint address, byte command1, byte command2, byte data1, byte data2)

{

if (address < 1 & address > 256)

throw new Exception("Pelco-D協(xié)議只支持設(shè)備");

Address = Byte.Parse((address).ToString());

Data1 = data1;

Data2 = data2;

Command1 = command1;

Command2 = command2;

CheckSum = (byte)( STX ^ Address ^ Command1 ^ Command2 ^ Data1 ^ Data2);

return new byte[] { STX, Address, Command1, Command2, Data1, Data2, CheckSum };

}

}

public partial class frmMain : Form

{

PelcoD pelcod = new PelcoD();

SerialPort serialPort = new SerialPort("COM1", 2400, Parity.None, 8);

byte addressin = Byte.Parse(Convert.ToString(0x01));

byte speedin = Byte.Parse(Convert.ToString(0xff));

byte[] messagesend;

//方向控制——下

private void btnDown_MouseDown(object sender, MouseEventArgs e)

{

messagesend = pelcod.CameraTilt(addressin, PelcoD.Tilt.Down, speedin);

serialPort.Open();

serialPort.Write(messagesend, 0, 7);

serialPort.Close();

}

}


上一章目錄下一章

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