|
|
/************************************************************************************
|
|
|
* All contents © copyright HighWay IOT. All rights reserved
|
|
|
* File:
|
|
|
* DeviceAppNewDemo.cs
|
|
|
* Description:
|
|
|
* 测试中间件Demo
|
|
|
* Author:
|
|
|
* Baogq
|
|
|
* Baogq@MESNAC.COM
|
|
|
* HTTP://WWW.MESNAC.COM
|
|
|
* Create DateTime:
|
|
|
* 2019.11.20
|
|
|
* History:
|
|
|
*
|
|
|
***********************************************************************************/
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.ComponentModel;
|
|
|
using System.Data;
|
|
|
using System.Drawing;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
//using System.Threading.Tasks;
|
|
|
using System.Windows.Forms;
|
|
|
using System.Configuration;
|
|
|
using Mesnac.DeviceAdapter;
|
|
|
using System.Reflection;
|
|
|
using Mesnac.DataChange;
|
|
|
using System.Threading;
|
|
|
using System.Diagnostics;
|
|
|
using System.Text.RegularExpressions;
|
|
|
using System.Net.NetworkInformation;
|
|
|
|
|
|
namespace DeviceAppDemo
|
|
|
{
|
|
|
public partial class DeviceAppNewDemo : Form
|
|
|
{
|
|
|
//private readonly string m_AdapterType = ConfigurationManager.AppSettings["AdapterType"];
|
|
|
//private readonly string m_AdapterClassName = ConfigurationManager.AppSettings["AdapterClassName"];
|
|
|
//private readonly string m_DeviceType = ConfigurationManager.AppSettings["DeviceType"];
|
|
|
//private readonly string m_DeviceIp = ConfigurationManager.AppSettings["DeviceIp"];
|
|
|
//private readonly string m_DevicePort = ConfigurationManager.AppSettings["DevicePort"];
|
|
|
//private readonly string m_ReadCounts = ConfigurationManager.AppSettings["ReadCounts"];
|
|
|
//private readonly string m_isReload = ConfigurationManager.AppSettings["isReload"];
|
|
|
private readonly string m_AdapterType = "Mesnac.DeviceAdapter.Fuchs";
|
|
|
private readonly string m_AdapterClassName = "FuchsAdapter";
|
|
|
private readonly string m_DeviceType = ConfigurationManager.AppSettings["DeviceType"];
|
|
|
private string m_DeviceIp;
|
|
|
private string m_DevicePort;
|
|
|
private readonly string m_ReadCounts = ConfigurationManager.AppSettings["ReadCounts"];
|
|
|
private readonly string m_isReload = ConfigurationManager.AppSettings["isReload"];
|
|
|
private IDeviceAdapter m_IDeviceAdapter = null;
|
|
|
byte m_iAntenna = 0; //天线号
|
|
|
int iAnt = 0;
|
|
|
public DeviceAppNewDemo()
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
ConfigurationManager.RefreshSection("appSettings"); //强制重新载入
|
|
|
string sSkinName = ConfigurationManager.AppSettings.Get("ConfigSkinName");
|
|
|
this.skinEngine1.SkinFile = Application.StartupPath + "\\Skins\\" + sSkinName;
|
|
|
//cbReadFilterNo.SelectedIndex = 0;
|
|
|
cb_Ant.SelectedIndex = 0;
|
|
|
cb_SenorType.SelectedIndex = 0;
|
|
|
cbReadType.SelectedIndex = 0;
|
|
|
cbAntenna.SelectedIndex = 0;
|
|
|
cbTagNo.SelectedIndex = 0;
|
|
|
for (int i = 2;i < 14 ;i+=2)
|
|
|
{
|
|
|
cb_DataLength.Items.Add(i);
|
|
|
}
|
|
|
cb_DataLength.Text = "12";
|
|
|
//cbWriteFilterNo.SelectedIndex = 0;
|
|
|
//cbWriteNo.SelectedIndex = 0;
|
|
|
m_IDeviceAdapter = CreateDeviceAdapter(); //动态赋值要测试的类
|
|
|
}
|
|
|
|
|
|
public void UpdateUIText(object o, System.EventArgs e)
|
|
|
{
|
|
|
ShowMessage((string)o.ToString());
|
|
|
//this.tbText.Items.Insert(0, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " " + (string)o.ToString() + "\r\n");
|
|
|
}
|
|
|
public void RecvIdentifyDataTrue(ushort iLen, byte[] pData, byte Antenna, UInt16 iDeviceId, object pDevice)
|
|
|
{
|
|
|
Console.Write(" 接收到识别数据:" + StringChange.bytesToHexStr(pData) + "\r\n");
|
|
|
tbLog.BeginInvoke(new System.EventHandler(UpdateUIText), StringChange.bytesToHexStr(pData));
|
|
|
}
|
|
|
|
|
|
//动态获取类
|
|
|
public IDeviceAdapter CreateDeviceAdapter()
|
|
|
{
|
|
|
IDeviceAdapter IAdapter = null;
|
|
|
//Load参数为要被实例化的动态库名称
|
|
|
Assembly assembly = Assembly.Load(m_AdapterType);
|
|
|
//"AlienAdapter"为要实例化的类的名称
|
|
|
string fullName = m_AdapterType + "." + m_AdapterClassName;
|
|
|
IAdapter = (IDeviceAdapter)assembly.CreateInstance(fullName);
|
|
|
return IAdapter;
|
|
|
}
|
|
|
|
|
|
#region log
|
|
|
private void Timer_Tick(object sender, EventArgs e)
|
|
|
{
|
|
|
this.label_Time.Text ="系统当前时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss dddd");
|
|
|
}
|
|
|
public void ShowMessage(string strMessage)
|
|
|
{
|
|
|
string tempstr = DateTime.Now.ToString("yyyy_MM_dd HH:mm:ss.fff") + ": " + strMessage + "\r\n";
|
|
|
tbLog.AppendText(tempstr);
|
|
|
tbLog.ScrollToCaret();
|
|
|
}
|
|
|
private void btnClearLog_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
tbLog.Text = "";
|
|
|
}
|
|
|
#endregion
|
|
|
//检查设备连接字符串的IP的格式是否正确 baogq add 2019年11月18日
|
|
|
protected bool checkDeviceIP(string message)
|
|
|
{
|
|
|
Regex rex = new Regex(@"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$");
|
|
|
|
|
|
if (rex.IsMatch(message))
|
|
|
{
|
|
|
return true;
|
|
|
}
|
|
|
else
|
|
|
return false;
|
|
|
}
|
|
|
//检查适配软件端口号的格式是否正确 baogq add 2019年11月18日
|
|
|
protected bool checkDevicePort(string message)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (message.IndexOf(".") > 0)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
if (Convert.ToInt32(message) >= 0 && Convert.ToInt32(message) <= 65535)
|
|
|
{
|
|
|
return true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
catch (Exception)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
private void btnInit_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
m_DeviceIp = tb_IPaddr.Text.Trim();
|
|
|
m_DevicePort = tb_Port.Text.Trim();
|
|
|
if (!checkDeviceIP(m_DeviceIp)) //判断IP地址格式是否正确
|
|
|
{
|
|
|
ShowMessage("设备的IP地址 格式输入错误。IP地址 的正确格式是:(0-255.0-255.0-255.0-255)。");
|
|
|
return;
|
|
|
}
|
|
|
if (!checkDevicePort(m_DevicePort))
|
|
|
{
|
|
|
ShowMessage("设备端口号 格式输入错误。端口号 的正确格式是:0-65535的整数。");
|
|
|
return;
|
|
|
}
|
|
|
if (m_DeviceIp.IndexOf("COM") >= 0)
|
|
|
{
|
|
|
if (m_IDeviceAdapter.Device_Init(CommType.RS232, m_DeviceIp + ":" + m_DevicePort, (DeviceType)(Convert.ToInt32(m_DeviceType))))
|
|
|
{
|
|
|
m_IDeviceAdapter.RecvIdentifyDataEvent += new RecvIdentifyData(RecvIdentifyDataTrue);
|
|
|
ShowMessage("初始化成功");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ShowMessage("初始化失败");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (m_IDeviceAdapter.Device_Init(CommType.RJ45, m_DeviceIp + ":" + m_DevicePort, (DeviceType)(Convert.ToInt32(m_DeviceType))))
|
|
|
{
|
|
|
m_IDeviceAdapter.RecvIdentifyDataEvent += new RecvIdentifyData(RecvIdentifyDataTrue);
|
|
|
ShowMessage("初始化成功");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ShowMessage("初始化失败");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btnConnect_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
m_DeviceIp = tb_IPaddr.Text.Trim();
|
|
|
m_DevicePort = tb_Port.Text.Trim();
|
|
|
if (!checkDeviceIP(m_DeviceIp)) //判断IP地址格式是否正确
|
|
|
{
|
|
|
ShowMessage("设备的IP地址 格式输入错误。IP地址 的正确格式是:(0-255.0-255.0-255.0-255)。");
|
|
|
return;
|
|
|
}
|
|
|
if (!checkDevicePort(m_DevicePort))
|
|
|
{
|
|
|
ShowMessage("设备端口号 格式输入错误。端口号 的正确格式是:0-65535的整数。");
|
|
|
return;
|
|
|
}
|
|
|
if (m_DeviceIp.IndexOf("COM") >= 0)
|
|
|
{
|
|
|
if (m_IDeviceAdapter.Device_Init(CommType.RS232, m_DeviceIp + ":" + m_DevicePort, (DeviceType)(Convert.ToInt32(m_DeviceType))))
|
|
|
{
|
|
|
m_IDeviceAdapter.RecvIdentifyDataEvent += new RecvIdentifyData(RecvIdentifyDataTrue);
|
|
|
ShowMessage("初始化成功");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ShowMessage("初始化失败");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (m_IDeviceAdapter.Device_Init(CommType.RJ45, m_DeviceIp + ":" + m_DevicePort, (DeviceType)(Convert.ToInt32(m_DeviceType))))
|
|
|
{
|
|
|
m_IDeviceAdapter.RecvIdentifyDataEvent += new RecvIdentifyData(RecvIdentifyDataTrue);
|
|
|
//ShowMessage("初始化成功");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ShowMessage("初始化失败");
|
|
|
}
|
|
|
}
|
|
|
if (m_IDeviceAdapter.Device_Connect())
|
|
|
{
|
|
|
ShowMessage("连接成功");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ShowMessage("连接失败");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btnConStatus_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
try {
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
if (m_IDeviceAdapter.Device_GetState())
|
|
|
{
|
|
|
ShowMessage(" 当前状态:已连接");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ShowMessage(" 当前状态:未连接");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
ShowMessage("当前状态:未连接");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btnDisConnect_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
m_IDeviceAdapter.Device_Destroy();
|
|
|
ShowMessage(" 断开连接成功" + "\r\n");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
ShowMessage("当前状态:未连接");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btnOneIdentify_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
Byte iReadLen = 0;
|
|
|
//UInt16 TimedOut = Convert.ToUInt16(tbIdentifyTimeOut.Text.Trim());
|
|
|
//m_iAntenna = Convert.ToByte(tbIdentifyAnt.Text.Trim());
|
|
|
Byte[] pReadData = null;
|
|
|
//string iEpc = m_IDeviceAdapter.Device_GetOneIdentifyData(m_iAntenna, TimedOut);
|
|
|
//ShowMessage(" 单次识别到的数据(测试返回String的函数)为: " + iEpc + "\r\n");
|
|
|
|
|
|
//iReadLen = m_IDeviceAdapter.Device_GetOneIdentifyData(ref pReadData, m_iAntenna, TimedOut,0); //如果读取到数据
|
|
|
|
|
|
//if (iReadLen > 0)
|
|
|
//{
|
|
|
// ShowMessage(" 单次识别到的数据(测试返回btye长度的函数)为: " + StringChange.bytesToHexStr(pReadData) + "\r\n");
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// ShowMessage(" 未识别到数据" + "\r\n");
|
|
|
//}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btnLoopIdentify_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
//if (m_IDeviceAdapter != null)
|
|
|
//{
|
|
|
// int iLoop = 5;
|
|
|
// int iLoopTime = 1000;
|
|
|
// iLoop = int.Parse(tbIdentifyCount.Text.Trim());
|
|
|
// iLoopTime = int.Parse(tbIdentifyTime.Text.Trim());
|
|
|
// Byte iReadLen = 0;
|
|
|
// UInt16 TimedOut = Convert.ToUInt16(tbIdentifyTimeOut.Text.Trim());
|
|
|
// m_iAntenna = Convert.ToByte(tbIdentifyAnt.Text.Trim());
|
|
|
// Byte[] pReadData = null;
|
|
|
// ShowMessage("循环测试开始:");
|
|
|
// for (int i = 0; i < iLoop; i++)
|
|
|
// {
|
|
|
// string iEpc = m_IDeviceAdapter.Device_GetOneIdentifyData(m_iAntenna, TimedOut);
|
|
|
// ShowMessage(" 单次识别到的数据(测试返回String的函数)为: " + iEpc + "\r\n");
|
|
|
|
|
|
// iReadLen = m_IDeviceAdapter.Device_GetOneIdentifyData(ref pReadData, m_iAntenna, TimedOut,0); //如果读取到数据
|
|
|
|
|
|
// if (iReadLen > 0)
|
|
|
// {
|
|
|
// ShowMessage(" 单次识别到的数据(测试返回btye长度的函数)为: " + StringChange.bytesToHexStr(pReadData) + "\r\n");
|
|
|
// }
|
|
|
// else
|
|
|
// {
|
|
|
// ShowMessage(" 未识别到数据" + "\r\n");
|
|
|
// }
|
|
|
// Thread.Sleep(iLoopTime);
|
|
|
// }
|
|
|
// ShowMessage("循环测试结束");
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// ShowMessage(" m_IDeviceAdapter is null" + "\r\n");
|
|
|
//}
|
|
|
|
|
|
}
|
|
|
|
|
|
private void btnSendHeartPack_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
byte iResult = 0;
|
|
|
iResult = m_IDeviceAdapter.Device_SendHeartPack();
|
|
|
|
|
|
ShowMessage(" 获得心跳包成功:" + iResult + "\r\n");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btnReadData_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
#region init data
|
|
|
G2MemBank iG2bk = G2MemBank.EPC;
|
|
|
UInt16 iReadLen = 0;
|
|
|
Byte[] pReadData = null;
|
|
|
Byte[] pFilterData = null;
|
|
|
UInt16 filterOffset = 0; //过滤偏移
|
|
|
string strFilterData = "";
|
|
|
UInt16 iFilterDataLength = 1;//过滤长度
|
|
|
pFilterData = new byte[iFilterDataLength];
|
|
|
pFilterData[0] = 0;
|
|
|
UInt16 readOffset = 0; //读取偏移
|
|
|
UInt16 readLength = Convert.ToUInt16(cb_DataLength.Text); //读取长度
|
|
|
int iAnt = 0;
|
|
|
//for (int i = 0; i < iFilterDataLength; i++)
|
|
|
//{
|
|
|
// pFilterData[i] = Convert.ToByte(strFilterData.Substring(i * 2, 2), 16); //过滤数据
|
|
|
//}
|
|
|
if (!m_IDeviceAdapter.Device_GetState())
|
|
|
{
|
|
|
ShowMessage("请检查设备连接状态!");
|
|
|
return;
|
|
|
}
|
|
|
if (cbReadType.SelectedIndex == 1) //判断读头类型
|
|
|
{
|
|
|
iAnt = cbAntenna.SelectedIndex + 1 + 4;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
iAnt = cbAntenna.SelectedIndex + 1;
|
|
|
}
|
|
|
m_iAntenna = Convert.ToByte(iAnt);
|
|
|
#endregion
|
|
|
if (cbTagNo.SelectedIndex.ToString() == "1")
|
|
|
{
|
|
|
iG2bk = G2MemBank.TID;
|
|
|
}
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
iReadLen = m_IDeviceAdapter.Device_Read(iG2bk, filterOffset, iFilterDataLength, pFilterData, iG2bk, readOffset, readLength, ref pReadData, m_iAntenna, 1); //如果读取到数据
|
|
|
if (iReadLen > 0)
|
|
|
{
|
|
|
if (iG2bk == G2MemBank.TID)
|
|
|
{
|
|
|
ShowMessage(" 读取原始数据:" + StringChange.bytesToHexStr(pReadData) + "\r\n");
|
|
|
tbShowReadData.Text = StringChange.bytesToHexStr(pReadData);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ShowMessage("标签数据:" + Encoding.ASCII.GetString(pReadData, 0, pReadData.Length) + " 读取原始数据:" + StringChange.bytesToHexStr(pReadData) + "\r\n");
|
|
|
tbShowReadData.Text = Encoding.ASCII.GetString(pReadData, 0, readLength);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ShowMessage(" 未读取到数据" + "\r\n");
|
|
|
tbShowReadData.Text = "";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btnLoopReadData_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
#region init data
|
|
|
//int iLoop = 5;
|
|
|
//iLoop = Convert.ToInt32(tbReadLoop.Text.Trim());
|
|
|
//int iLoopTime = 1000;
|
|
|
//iLoopTime = Convert.ToInt32(tbReadLoopTime.Text.Trim());
|
|
|
//UInt16 iReadLen = 0;
|
|
|
//Byte[] pReadData = null;
|
|
|
//Byte[] pFilterData = null;
|
|
|
//UInt16 filterOffset = Convert.ToUInt16(tbReadFilterOffset.Text.Trim()); //过滤偏移
|
|
|
//string strFilterData = tbFilterData.Text.Trim();
|
|
|
//UInt16 iFilterDataLength = Convert.ToUInt16(strFilterData.Length / 2);//过滤长度
|
|
|
//pFilterData = new byte[iFilterDataLength];
|
|
|
//for (int i = 0; i < iFilterDataLength; i++)
|
|
|
//{
|
|
|
// pFilterData[i] = Convert.ToByte(strFilterData.Substring(i * 2, 2), 16); //过滤数据
|
|
|
//}
|
|
|
//UInt16 readOffset = Convert.ToUInt16(tbReadOffset.Text.Trim()); //读取偏移
|
|
|
//UInt16 readLength = Convert.ToUInt16(tbReadLength.Text.Trim()); //读取长度
|
|
|
//m_iAntenna = Convert.ToByte(tbReadAnt.Text.Trim()); //天线号
|
|
|
#endregion
|
|
|
//if (m_IDeviceAdapter != null)
|
|
|
//{
|
|
|
// ShowMessage("循环读取数据开始:");
|
|
|
// for (int i = 0; i < iLoop; i++)
|
|
|
// {
|
|
|
// iReadLen = m_IDeviceAdapter.Device_Read((G2MemBank)(int.Parse(cbReadFilterNo.SelectedIndex.ToString()) + 1), filterOffset, iFilterDataLength, pFilterData, (G2MemBank)(int.Parse(cbReadNo.SelectedIndex.ToString()) + 1), readOffset, readLength, ref pReadData, m_iAntenna, int.Parse(m_ReadCounts)); //如果读取到数据
|
|
|
// if (iReadLen > 0)
|
|
|
// {
|
|
|
// ShowMessage(" 读取数据:" + StringChange.bytesToHexStr(pReadData) + "\r\n");
|
|
|
// tbShowReadData.Text = StringChange.bytesToHexStr(pReadData);
|
|
|
// }
|
|
|
// else
|
|
|
// {
|
|
|
// ShowMessage(" 未读取到数据");
|
|
|
// }
|
|
|
|
|
|
// Thread.Sleep(iLoopTime);
|
|
|
// }
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// ShowMessage(" m_IDeviceAdapter 为空");
|
|
|
//}
|
|
|
|
|
|
//ShowMessage("循环读取数据结束。");
|
|
|
}
|
|
|
|
|
|
private void btnWriteData_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
UInt16 iReadLen = 0;
|
|
|
Byte[] pWriteData = null;
|
|
|
Byte[] pFilterData = null;
|
|
|
//UInt16 filterOffset = Convert.ToUInt16(tbWriteFilterOffsetAdd.Text.Trim()); //过滤偏移
|
|
|
//string strFilterData = tbWriteFilterData.Text.Trim();
|
|
|
//UInt16 iFilterDataLength = Convert.ToUInt16(strFilterData.Length / 2);//过滤长度
|
|
|
//pFilterData = new byte[iFilterDataLength];
|
|
|
//for (int i = 0; i < iFilterDataLength; i++)
|
|
|
//{
|
|
|
// pFilterData[i] = Convert.ToByte(strFilterData.Substring(i * 2, 2), 16); //过滤数据
|
|
|
//}
|
|
|
UInt16 writeOffset = 0;
|
|
|
string strWriteData = tbWriteData.Text.Trim();//写入的数据
|
|
|
byte iWriteDataLength = Convert.ToByte(strWriteData.Length);//写入长度
|
|
|
pWriteData = new byte[iWriteDataLength];
|
|
|
//判断输入数据是否为9位
|
|
|
if (iWriteDataLength < 12)
|
|
|
{
|
|
|
strWriteData = strWriteData.PadRight((12), '0');
|
|
|
iWriteDataLength = Convert.ToByte(strWriteData.Length);
|
|
|
pWriteData = new byte[strWriteData.Length];
|
|
|
pWriteData = Encoding.Default.GetBytes(strWriteData);
|
|
|
}
|
|
|
else if (iWriteDataLength > 12)
|
|
|
{
|
|
|
ShowMessage("请确认标签数据位数为12位!");
|
|
|
return;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
pWriteData = Encoding.Default.GetBytes(strWriteData);
|
|
|
}
|
|
|
if (cbReadType.SelectedIndex == 1) //判断读头类型
|
|
|
{
|
|
|
iAnt = cbAntenna.SelectedIndex + 1 + 4;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
iAnt = cbAntenna.SelectedIndex + 1;
|
|
|
}
|
|
|
m_iAntenna = Convert.ToByte(iAnt);//天线号
|
|
|
#region 判断天线号是否符合范围
|
|
|
//if (Convert.ToInt32(m_iAntenna) > 16 || Convert.ToInt32(m_iAntenna) <= 0)
|
|
|
//{
|
|
|
// ShowMessage("天线号必须是1-4的整数! " + "\r\n");
|
|
|
// MessageBox.Show("天线号必须是1-4的整数!", "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
// return;
|
|
|
//}
|
|
|
#endregion
|
|
|
iReadLen = m_IDeviceAdapter.Device_Write((G2MemBank)(int.Parse(cb_SenorType.SelectedIndex.ToString()) + 1), 0, 0, pFilterData,
|
|
|
(G2MemBank)(int.Parse(cb_SenorType.SelectedIndex.ToString()) + 1), writeOffset, iWriteDataLength, pWriteData, m_iAntenna);
|
|
|
if (iReadLen == 1)
|
|
|
{
|
|
|
ShowMessage(" 写入成功");
|
|
|
tbWriteResult.Text = " 写入成功";
|
|
|
}
|
|
|
else if (iReadLen == 0)
|
|
|
{
|
|
|
ShowMessage(" 写入失败");
|
|
|
tbWriteResult.Text = " 写入失败";
|
|
|
}
|
|
|
else if (iReadLen == 2)
|
|
|
{
|
|
|
ShowMessage(" 写入跟读取不一致,写入失败,读取成功");
|
|
|
tbWriteResult.Text = " 写入跟读取,写入失败,读取成功";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
public static void Restart()
|
|
|
{
|
|
|
//开启新的实例
|
|
|
Process.Start(Application.ExecutablePath);
|
|
|
}
|
|
|
|
|
|
private void btnbeginIdentify_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
try {
|
|
|
//m_iAntenna = Convert.ToByte(tbIdentifyAnt.Text.Trim());
|
|
|
bool bResult = false;
|
|
|
bResult = m_IDeviceAdapter.Device_BeginIdentify(1, 10000,true);
|
|
|
if (bResult)
|
|
|
{
|
|
|
ShowMessage(" 发送连续识别指令成功");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//ShowMessage(" 发送连续识别指令失败" + "\r\n");
|
|
|
}
|
|
|
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
ShowMessage(" 发送连续识别指令失败:" + "\r\n");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btnstopIdentify_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
bool bResult = false;
|
|
|
//m_iAntenna = Convert.ToByte(tbIdentifyAnt.Text.Trim());
|
|
|
bResult = m_IDeviceAdapter.Device_StopIdentify(1);
|
|
|
|
|
|
|
|
|
ShowMessage(" 发送停止连续识别指令成功" + "\r\n");
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
ShowMessage(" 发送停止连续识别指令失败" + "\r\n");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btnSetAntCT_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
try {
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
if (!m_IDeviceAdapter.Device_GetState())
|
|
|
{
|
|
|
ShowMessage("读头工作模式设置失败,请检查设备连接状态!");
|
|
|
return;
|
|
|
}
|
|
|
int iDbi = 0;
|
|
|
bool bResult = false;
|
|
|
int iAnt = 0;
|
|
|
if (cb_SenorType.SelectedIndex == 1) //判断读头类型
|
|
|
{
|
|
|
iAnt = cb_Ant.SelectedIndex + 1 + 4;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
iAnt = cb_Ant.SelectedIndex + 1;
|
|
|
}
|
|
|
m_iAntenna = Convert.ToByte(iAnt);
|
|
|
bResult = m_IDeviceAdapter.Device_SetRf(iDbi, m_iAntenna, WriteOrRead.Read);
|
|
|
if (bResult)
|
|
|
{
|
|
|
ShowMessage("读头工作模式设置成功");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ShowMessage("读头工作模式设置失败");
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
ShowMessage("请连接读写器!再进行其他操作");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btSetSignleRead_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
try {
|
|
|
if (!m_IDeviceAdapter.Device_GetState())
|
|
|
{
|
|
|
ShowMessage("读头工作模式设置失败,请检查设备连接状态!");
|
|
|
return;
|
|
|
}
|
|
|
if (m_IDeviceAdapter != null)
|
|
|
{
|
|
|
string strResult = "";
|
|
|
int iAnt = 0;
|
|
|
if (cb_SenorType.SelectedIndex != 1)
|
|
|
{
|
|
|
ShowMessage("请更改读头类型为超高频!");
|
|
|
return;
|
|
|
}
|
|
|
iAnt = cb_Ant.SelectedIndex + 1;
|
|
|
m_iAntenna = Convert.ToByte(iAnt);
|
|
|
strResult = m_IDeviceAdapter.Device_GetOneIdentifyData(m_iAntenna, 2000);
|
|
|
if (strResult == "成功")
|
|
|
{
|
|
|
ShowMessage("单标签模式设置成功");
|
|
|
}
|
|
|
else if (strResult == "超时")
|
|
|
{
|
|
|
ShowMessage("单标签模式设置超时,请重新设置!");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ShowMessage("单标签模式设置失败,请重新设置!");
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
ShowMessage("请连接读写器!再进行其他操作");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void 关于AToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
AboutSystem aboutForm = new AboutSystem();
|
|
|
aboutForm.ShowDialog();
|
|
|
}
|
|
|
|
|
|
private void 更换系统皮肤ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
ChangeSkinForm csForm = new ChangeSkinForm();
|
|
|
csForm.ShowDialog();
|
|
|
}
|
|
|
|
|
|
private void 系统重启ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
if (MessageBox.Show("您确定要重启该系统吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
|
|
|
{
|
|
|
//系统重启
|
|
|
Application.Exit();
|
|
|
//开启新的实例
|
|
|
Application.Restart();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void DeviceAppNewDemo_FormClosing(object sender, FormClosingEventArgs e)
|
|
|
{
|
|
|
if (m_isReload == "1") //是否自动重启;1为重启
|
|
|
{
|
|
|
Restart();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (e.CloseReason == CloseReason.UserClosing)
|
|
|
{
|
|
|
if (MessageBox.Show("您确定要关闭该系统吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
|
|
|
{
|
|
|
//关闭当前实例
|
|
|
Process.GetCurrentProcess().Kill();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
e.Cancel = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void BtnPing_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
if (BtnPing.Text == "取消")
|
|
|
{
|
|
|
BtnPing.Text = "Ping";
|
|
|
TimerPing.Enabled = false;
|
|
|
TimerPing.Stop();
|
|
|
}
|
|
|
else if (BtnPing.Text == "Ping")
|
|
|
{
|
|
|
TimerPing.Enabled = true;
|
|
|
TimerPing.Interval = 1000;
|
|
|
TimerPing.Start();
|
|
|
BtnPing.Text = "取消";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void TimerPing_Tick(object sender, EventArgs e)
|
|
|
{
|
|
|
string ip = tb_IPaddr.Text.Trim();
|
|
|
Thread M_Deal = new Thread(() => PingTF(ip, new Ping()));
|
|
|
M_Deal.IsBackground = true;
|
|
|
M_Deal.Start();
|
|
|
tbLog.Text += log;
|
|
|
tbLog.Select(tbLog.TextLength, 0);
|
|
|
tbLog.ScrollToCaret();
|
|
|
}
|
|
|
string log = null;
|
|
|
private void PingTF(string ip, Ping ping)
|
|
|
{
|
|
|
if (!string.IsNullOrEmpty(ip))
|
|
|
{
|
|
|
PingReply reply = ping.Send(ip);
|
|
|
|
|
|
if (reply.Status == IPStatus.Success)
|
|
|
{
|
|
|
string time = DateTime.Now.ToString();
|
|
|
string hour = DateTime.Now.Hour.ToString();
|
|
|
string patime = time.Replace(":", "").Replace("/", "");
|
|
|
log = time + ":来自" + reply.Address.ToString() + "的回复:字节=" + reply.Buffer.Length + " 回复时间=" + reply.RoundtripTime.ToString() + " TTL=" + reply.Options.Ttl + "\r\n";
|
|
|
//if (hour.Equals("00"))
|
|
|
//{
|
|
|
|
|
|
//}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
log = DateTime.Now.ToString() + ":Request timed out.\r\n";
|
|
|
// Console.WriteLine("继续ping");
|
|
|
//PingTF(ip, ping);
|
|
|
}
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void cbTagNo_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
{
|
|
|
if (cbTagNo.SelectedIndex.ToString() == "1")
|
|
|
{
|
|
|
this.cb_DataLength.Enabled = false;
|
|
|
this.btnWriteData.Enabled = false;
|
|
|
this.tbWriteData.Enabled = false;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.cb_DataLength.Enabled = true;
|
|
|
this.btnWriteData.Enabled = true;
|
|
|
this.tbWriteData.Enabled = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|