using System;
using System.IO.Ports;
using System.Threading;

namespace TripodDemo


{
public class SerialTripo : IDisposable

{
private object objComm = new object();
private SerialPort com;
private bool disposed = false;


SerialPort#region SerialPort
public SerialTripo()

{
com = new SerialPort("COM1", 9600);
OpenCom();
}

public SerialTripo(SerialPort sp)

{
com = sp;
OpenCom();
}

private void OpenCom()

{
try

{
if (!com.IsOpen)

{
com.ReadTimeout = 3000;
com.WriteTimeout = 3000;
com.Open();
}
}
catch (Exception ex)

{
throw new Exception(ex.Message);
}
}
#endregion


Dispose & Close#region Dispose & Close
public void Dispose()

{
Dispose(true);
}

private void Dispose(bool disposing)

{
if (!disposed && disposing && com != null && com.IsOpen)

{
com.Close();
disposed = true;
}
}

public void Close()

{
Dispose(true);
}
#endregion


发送数据#region 发送数据

/**//// <summary>
/// 发送数据
/// </summary>
/// <param name="bwrite">写数据</param>
/// <param name="returnDataLen">读数据长度</param>
/// <param name="bread">读数据</param>
/// <param name="msel">超时毫秒</param>
/// <returns>是否执行成功</returns>
private bool SendData(byte[] bwrite, int returnDataLen, out byte[] bread, int msel)

{
lock (objComm)

{
bread = new byte[returnDataLen];
long l = DateTime.UtcNow.Ticks + msel * 10000;
com.DiscardInBuffer();
com.DiscardOutBuffer();
com.Write(bwrite, 0, bwrite.Length);

while (com.BytesToRead < returnDataLen && DateTime.UtcNow.Ticks < l)

{
Thread.Sleep(1);
}

//串口无反应
if (com.BytesToRead < returnDataLen)

{
return false;
}

try

{
com.Read(bread, 0, bread.Length);
return true;
}
catch (TimeoutException)

{
return false;
}
}
}
#endregion


/**//// <summary>
/// 操作设备(如开闸)
/// </summary>
/// <param name="macno">机号</param>
/// <returns>是否执行成功</returns>
public bool OpenStorbe(byte macno)

{
int retLen = 5;
byte[] br;
//构建命令
byte b1 = 0xEB;
byte b3 = 0x50;
byte b4 = 0x01;

byte xor = (byte)(b1 ^ macno ^ b3 ^ b4);

byte[] bw =
{ b1, macno, b3, b4, xor };
bool bRet = SendData(bw, retLen, out br, 1000);

if (bRet)

{
if (br[2] == 0xC0 && br[3] == 0x00)

{
return true;
}
else

{
return false;
}
}
else

{
return false;
}
}
}
}

posted @
2008-04-19 20:00
nSibo
阅读(
280)
评论()
收藏
举报