private bool SendCmdInfo(Commd Canshu, string msg)
{
switch (Canshu)
{
case Commd.LockGun:
msg = "0042001".PadRight(16, ' ');
break;
case Commd.UnLockGun:
msg = "0043001".PadRight(16, ' ');
break;
case Commd.Connect:
msg = "0001001".PadRight(16, ' ');
break;
case Commd.KeepCon:
msg = "9999001".PadRight(16, ' ');
break;
case Commd.DisConnect:
msg = "0003001".PadRight(16, ' ');
break;
case Commd.SubscribeTorResult:
msg = "0060001".PadRight(16, ' ');
break;
case Commd.AckNowledgeTorResult:
msg = "0062001".PadRight(16, ' ');
break;
case Commd.UnSubscribeTorResult:
msg = "0063001".PadRight(16, ' ');
break;
case Commd.Pre:
msg = "0064001".PadRight(16, ' ') + msg.PadLeft(10, ' ');
break;
case Commd.Vin:
msg = "0050001".PadRight(16, ' ') + msg;
break;
case Commd.Channel:
channel = msg;
msg = "0018001".PadRight(16, ' ') + msg.PadLeft(3, '0');
break;
default:
break;
}
byte[] bt_Data = Encoding.ASCII.GetBytes(msg);
byte[] bt_head = Encoding.ASCII.GetBytes((bt_Data.Length + 4).ToString("0000"));
byte[] bt_send = new byte[bt_Data.Length + 5];
for (int i = 0; i < bt_head.Length; i++)
{
bt_send[i] = bt_head[i];
}
for (int i = 0; i < bt_Data.Length; i++)
{
bt_send[i + 4] = bt_Data[i];
}
bt_send[bt_send.Length - 1] = 0x00;
bool rel = sw.SendMsg(bt_send);
bt_send = bt_send.Take(bt_send.Length - 1).ToArray();
if (rel)
{
Form1.mt.Show("发送成功:" + showid.ToString() + " _ " + Encoding.ASCII.GetString(bt_send), false, detailfilename);
}
else
{
Form1.mt.Show("发送失败:" + showid.ToString() + " _ " + Encoding.ASCII.GetString(bt_send), true, detailfilename);
}
return rel;
}
/// <summary>
/// true 锁枪 或 false 解锁
/// </summary>
/// <param name="IsLock"></param>
public void LockGun(bool IsLock)
{
if (IsLock)
{
SendCmdInfo(Commd.LockGun, "");
}
else
{
SendCmdInfo(Commd.UnLockGun, "");
}
}
/// <summary>
/// True 订阅 或 false 回答
/// </summary>
/// <param name="IsSubNotResponse"></param>
public void SubscribeTorResult(bool IsSubNotResponse)
{
if (IsSubNotResponse)
{
SendCmdInfo(Commd.SubscribeTorResult, "");
}
else
{
SendCmdInfo(Commd.AckNowledgeTorResult, "");
}
}
/// <summary>
/// 取消订阅
/// </summary>
public void UnSubscribeTorResult()
{
SendCmdInfo(Commd.UnSubscribeTorResult, "");
}
/// <summary>
/// 修改通道
/// </summary>
/// <param name="channel"></param>
public void ChangeChannel(string channel)
{
SendCmdInfo(Commd.Channel, channel);
}
/// <summary>
/// 连接控制器初始命令
/// </summary>
public void ConnTorCmd()
{
SendCmdInfo(Commd.Connect, "");
}
/// <summary>
/// 保持通信
/// </summary>
public void KeepConnTorCmd()
{
SendCmdInfo(Commd.KeepCon, "");
}
/// <summary>
/// 断开通信
/// </summary>
public void DisConnTorCmd()
{
SendCmdInfo(Commd.DisConnect, "");
}
enum Commd
{
/// <summary>
/// 连接 0001
/// </summary>
Connect,
/// <summary>
/// 断开 0003
/// </summary>
DisConnect,
/// <summary>
/// 锁枪 0042
/// </summary>
LockGun,
/// <summary>
/// 解枪 0043
/// </summary>
UnLockGun,
/// <summary>
/// 订阅拧紧数据 0060001
/// </summary>
SubscribeTorResult,
/// <summary>
/// 订阅信息收到回传 0062
/// </summary>
AckNowledgeTorResult,
/// <summary>
/// 取消订阅拧紧数据 0063
/// </summary>
UnSubscribeTorResult,
/// <summary>
/// 读取历史 0064
/// </summary>
Pre,
/// <summary>
/// 保持通信 9999
/// </summary>
KeepCon,
/// <summary>
/// 写入Vin 0050
/// </summary>
Vin,
/// <summary>
/// 写入通道 0018
/// </summary>
Channel
}
开放协议 OpenProtocol ,在github 有相关的一个源程序(OpenProtocolInterpreter), 有参考意义,但不能直接搬代码,写的很死板,二次开发容易出现枪的信息已反馈系统仍提示接收超时.
不推荐(有指导意义)