using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AGV.Monitor.Communication;
namespace AGV.Monitor.WinForm.Main.UI
{
public partial class Car_Test : Form
{
#region 初始化位置及尺寸
enum DgvSize : int
{
InitialWidth = 1119,
InitialHeigh = 504,
DefaultWidth = 10,
DefaultHeigh = 10
}
enum DgvPosition : int
{
InitialTop = 20,
InitialLeft = 6
}
enum DisplayTypeSekect : byte
{
CarTestType = 1,
CarSimulateType = 2,
defaultType = 3
}
byte showMark = 0;
#endregion
CommunicationServer communicationServer;
public Car_Test()
{
InitializeComponent();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void Car_Test_Load(object sender, EventArgs e)
{
communicationServer = new CommunicationServer();
//DgvCarTestDisplaySetting(dgvDeviceOperate);
Size defaultSize = new Size((int)DgvSize.DefaultWidth, (int)DgvSize.DefaultHeigh);
dgvDeviceOperate.Size = defaultSize;
dgvCarSimulate.Size = defaultSize;
dgvDeviceOperate.Left = (int)DgvPosition.InitialLeft;
dgvDeviceOperate.Top = (int)DgvPosition.InitialTop;
dgvCarSimulate.Visible = false;
dgvCarSimulate.Enabled = false;
dgvDeviceOperate.Visible = false;
dgvDeviceOperate.Enabled = false;
lblIp.Visible = false;
txtDeviceIp.Visible = false;
txtDeviceIp.Enabled = false;
lblPort.Visible = false;
txtDevicePort.Visible = false;
txtDevicePort.Enabled = false;
lblMac.Visible = false;
txtDeviceMac.Visible = false;
txtDeviceMac.Enabled = false;
btnDeviceInfoAdd.Visible = false;
btnDeviceInfoAdd.Enabled = false;
gpbDeviceInfo.Visible = false;
gpbDeviceOperate.Visible = false;
}
//carTest显示
private void DgvCarTestDisplaySetting(DataGridView dgv)
{
//设置标题样式
DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();
columnHeaderStyle.BackColor = Color.Beige;
columnHeaderStyle.Font = new Font("微软雅黑", 11, FontStyle.Regular);
columnHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgv.ColumnHeadersDefaultCellStyle = columnHeaderStyle;
//设置其他单元格式
DataGridViewCellStyle cellStyke = new DataGridViewCellStyle();
cellStyke.BackColor = Color.Beige;
cellStyke.Font = new Font("宋体", 10, FontStyle.Regular);
cellStyke.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgv.DefaultCellStyle = cellStyke;
dgv.AllowUserToAddRows = false;
DataGridViewTextBoxColumn dgvtxtColumn = new DataGridViewTextBoxColumn();
dgvtxtColumn.HeaderText = "序号";
dgvtxtColumn.Name = "dgvtxtColumn";
dgvtxtColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtColumn);
DataGridViewTextBoxColumn dgvtxtDeviceNumColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceNumColumn.HeaderText = "设备ID";
dgvtxtDeviceNumColumn.Name = "dgvtxtDeviceNumColumn";
dgvtxtDeviceNumColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceNumColumn);
DataGridViewTextBoxColumn dgvtxtDeviceMacColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceMacColumn.HeaderText = "MAC";
dgvtxtDeviceMacColumn.Name = "dgvtxtDeviceMacColumn";
dgvtxtDeviceMacColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceMacColumn);
DataGridViewTextBoxColumn dgvtxtDeviceIpColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceIpColumn.HeaderText = "IP";
dgvtxtDeviceIpColumn.Name = "dgvtxtDeviceIpColumn";
dgvtxtDeviceIpColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceIpColumn);
DataGridViewTextBoxColumn dgvtxtDeviceConnectIpColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceConnectIpColumn.HeaderText = "连接地址";
dgvtxtDeviceConnectIpColumn.Name = "dgvtxtDeviceConnectIpColumn";
dgvtxtDeviceConnectIpColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceConnectIpColumn);
DataGridViewComboBoxColumn dgvcboWrSelect = new DataGridViewComboBoxColumn();
dgvcboWrSelect.HeaderText = "读写选择";
dgvcboWrSelect.Name = "dgvcboWrSelect";
dgvcboWrSelect.FlatStyle = FlatStyle.Popup;
dgvcboWrSelect.Items.Add("Write");
dgvcboWrSelect.Items.Add("Read");
dgvcboWrSelect.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvcboWrSelect);
DataGridViewTextBoxColumn dgvtxtDeviceOperateAddressColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceOperateAddressColumn.HeaderText = "操作地址";
dgvtxtDeviceOperateAddressColumn.Name = "dgvtxtDeviceOperateAddressColumn";
dgvtxtDeviceOperateAddressColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceOperateAddressColumn);
DataGridViewTextBoxColumn dgvtxtDeviceOperateAddressCountColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceOperateAddressCountColumn.HeaderText = "数量";
dgvtxtDeviceOperateAddressCountColumn.Name = "dgvtxtDeviceOperateAddressCountColumn";
dgvtxtDeviceOperateAddressCountColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceOperateAddressCountColumn);
DataGridViewTextBoxColumn dgvtxtDeviceWriteDataValueColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceWriteDataValueColumn.HeaderText = "待发送内容";
dgvtxtDeviceWriteDataValueColumn.Name = "dgvtxtDeviceWriteDataValueColumn";
dgvtxtDeviceWriteDataValueColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceWriteDataValueColumn);
DataGridViewButtonColumn dgvbtnSend = new DataGridViewButtonColumn();
dgvbtnSend.HeaderText = "发送";
dgvbtnSend.Name = "dgvbtnSend";
dgvbtnSend.FlatStyle = FlatStyle.Popup;
dgvbtnSend.UseColumnTextForButtonValue = true;
dgvbtnSend.Text = "Send";
dgvbtnSend.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvbtnSend);
DataGridViewTextBoxColumn dgvtxtDeviceResponseInfoColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceResponseInfoColumn.HeaderText = "应答信息";
dgvtxtDeviceResponseInfoColumn.Name = "dgvtxtDeviceResponseInfoColumn";
dgvtxtDeviceResponseInfoColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dgv.Columns.Add(dgvtxtDeviceResponseInfoColumn);
dgv.Columns[0].Visible = false;
}
//CarSimulate 显示
private void DgvCarSimulateDisplaySetting(DataGridView dgv)
{
//设置标题样式
DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();
columnHeaderStyle.BackColor = Color.Beige;
columnHeaderStyle.Font = new Font("微软雅黑", 11, FontStyle.Regular);
columnHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgv.ColumnHeadersDefaultCellStyle = columnHeaderStyle;
//设置其他单元格式
DataGridViewCellStyle cellStyke = new DataGridViewCellStyle();
cellStyke.BackColor = Color.Beige;
cellStyke.Font = new Font("宋体", 10, FontStyle.Regular);
cellStyke.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgv.DefaultCellStyle = cellStyke;
dgv.AllowUserToAddRows = false;
DataGridViewTextBoxColumn dgvtxtColumn = new DataGridViewTextBoxColumn();
dgvtxtColumn.HeaderText = "序号";
dgvtxtColumn.Name = "dgvtxtColumn";
dgvtxtColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtColumn);
DataGridViewTextBoxColumn dgvtxtDeviceNumColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceNumColumn.HeaderText = "设备ID";
dgvtxtDeviceNumColumn.Name = "dgvtxtDeviceNumColumn";
dgvtxtDeviceNumColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceNumColumn);
DataGridViewTextBoxColumn dgvtxtDeviceMacColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceMacColumn.HeaderText = "MAC";
dgvtxtDeviceMacColumn.Name = "dgvtxtDeviceMacColumn";
dgvtxtDeviceMacColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceMacColumn);
DataGridViewTextBoxColumn dgvtxtDeviceIpColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceIpColumn.HeaderText = "IP";
dgvtxtDeviceIpColumn.Name = "dgvtxtDeviceIpColumn";
dgvtxtDeviceIpColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceIpColumn);
DataGridViewTextBoxColumn dgvtxtDeviceConnectIpColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceConnectIpColumn.HeaderText = "连接地址";
dgvtxtDeviceConnectIpColumn.Name = "dgvtxtDeviceConnectIpColumn";
dgvtxtDeviceConnectIpColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceConnectIpColumn);
DataGridViewButtonColumn dgvbtnConnect = new DataGridViewButtonColumn();
dgvbtnConnect.HeaderText = "连接";
dgvbtnConnect.Name = "dgvbtnConnect";
dgvbtnConnect.FlatStyle = FlatStyle.Popup;
dgvbtnConnect.UseColumnTextForButtonValue = true;
dgvbtnConnect.Text = "Connect";
dgvbtnConnect.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvbtnConnect);
DataGridViewTextBoxColumn dgvtxtStartSiteColumn = new DataGridViewTextBoxColumn();
dgvtxtStartSiteColumn.HeaderText = "起始站点";
dgvtxtStartSiteColumn.Name = "dgvtxtStartSiteColumn";
dgvtxtStartSiteColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtStartSiteColumn);
DataGridViewTextBoxColumn dgvtxtDestinationSiteColumn = new DataGridViewTextBoxColumn();
dgvtxtDestinationSiteColumn.HeaderText = "目的站点";
dgvtxtDestinationSiteColumn.Name = "dgvtxtDestinationSiteColumn";
dgvtxtDestinationSiteColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDestinationSiteColumn);
DataGridViewButtonColumn dgvbtnCarRun = new DataGridViewButtonColumn();
dgvbtnCarRun.HeaderText = "Car启动";
dgvbtnCarRun.Name = "dgvbtnCarRun";
dgvbtnCarRun.FlatStyle = FlatStyle.Popup;
dgvbtnCarRun.UseColumnTextForButtonValue = true;
dgvbtnCarRun.Text = "Run";
dgvbtnCarRun.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvbtnCarRun);
DataGridViewComboBoxColumn dgvcboCarStatus = new DataGridViewComboBoxColumn();
dgvcboCarStatus.HeaderText = "Car状态";
dgvcboCarStatus.Name = "dgvcboCarStatus";
dgvcboCarStatus.FlatStyle = FlatStyle.Popup;
dgvcboCarStatus.Items.Add("检测到障碍物");
dgvcboCarStatus.Items.Add("到站");
dgvcboCarStatus.Items.Add("管制");
dgvcboCarStatus.Items.Add("电量不足");
dgvcboCarStatus.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvcboCarStatus);
DataGridViewButtonColumn dgvbtnCarStatusSend = new DataGridViewButtonColumn();
dgvbtnCarStatusSend.HeaderText = "Car状态发送";
dgvbtnCarStatusSend.Name = "dgvbtnCarStatusSend";
dgvbtnCarStatusSend.FlatStyle = FlatStyle.Popup;
dgvbtnCarStatusSend.UseColumnTextForButtonValue = true;
dgvbtnCarStatusSend.Text = "StatusSend";
dgvbtnCarStatusSend.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvbtnCarStatusSend);
DataGridViewButtonColumn dgvbtnCarTaskDisable = new DataGridViewButtonColumn();
dgvbtnCarTaskDisable.HeaderText = "解除任务";
dgvbtnCarTaskDisable.Name = "dgvbtnCarTaskDisable";
dgvbtnCarTaskDisable.FlatStyle = FlatStyle.Popup;
dgvbtnCarTaskDisable.UseColumnTextForButtonValue = true;
dgvbtnCarTaskDisable.Text = "Disable";
dgvbtnCarTaskDisable.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvbtnCarTaskDisable);
DataGridViewTextBoxColumn dgvtxtDeviceBatteryPowerColumn = new DataGridViewTextBoxColumn();
dgvtxtDeviceBatteryPowerColumn.HeaderText = "电量";
dgvtxtDeviceBatteryPowerColumn.Name = "dgvtxtDeviceBatteryPowerColumn";
dgvtxtDeviceBatteryPowerColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtDeviceBatteryPowerColumn);
DataGridViewTextBoxColumn dgvtxtCarRunPathColumn = new DataGridViewTextBoxColumn();
dgvtxtCarRunPathColumn.HeaderText = "运行路径";
dgvtxtCarRunPathColumn.Name = "dgvtxtCarRunPathColumn";
dgvtxtCarRunPathColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgv.Columns.Add(dgvtxtCarRunPathColumn);
dgv.Columns[0].Visible = false;
}
//下拉菜单立即响应
private void dgvDeviceOperate_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if(dgvDeviceOperate.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex != -1)
{
SendKeys.Send("{F4}");
}
}
private void dgvCarSimulate_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (dgvCarSimulate.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex != -1)
{
SendKeys.Send("{F4}");
}
}
//添加一行新数据
private void AddMsgToDgvShow(DataGridView dgv,string deviceIepStr,string serverIepStr, DisplayTypeSekect dts)
{
switch (dts)
{
case DisplayTypeSekect.CarTestType:
{
using (DataGridViewRow dgvAddRow = new DataGridViewRow())
{
int index = dgv.RowCount;
dgvAddRow.CreateCells(dgv);
//序号
dgvAddRow.Cells[0].Value = index + 1;
//设备ID
dgvAddRow.Cells[1].Value = "Car" + dgvAddRow.Cells[0].Value.ToString();
//MAC
dgvAddRow.Cells[2].Value = index + 1;
//IP
dgvAddRow.Cells[3].Value = index + 1;
//连接地址
dgvAddRow.Cells[4].Value = index + 1;
//操作地址
dgvAddRow.Cells[6].Value = index + 1;
//数量
dgvAddRow.Cells[7].Value = index + 1;
//待发送内容
dgvAddRow.Cells[8].Value = index + 1;
//应答信息
dgvAddRow.Cells[10].Value = index + 1;
dgv.Rows.Insert(index, dgvAddRow);
}
break;
}
case DisplayTypeSekect.CarSimulateType:
{
break;
}
case DisplayTypeSekect.defaultType:
{
break;
}
default:break;
}
}
//测试添加数据
private void CarTestAddMsgToDgvShow()
{
string iep = txtDeviceIp.Text + "+" + txtDevicePort.Text;
communicationServer.Connect(iep);
AddMsgToDgvShow(dgvDeviceOperate, "111", "222", DisplayTypeSekect.CarTestType);
}
private void btnDeviceInfoAdd_Click(object sender, EventArgs e)
{
switch (showMark)
{
case 1:
{
string iep = txtDeviceIp.Text + "+" + txtDevicePort.Text;
communicationServer.Connect(iep);
AddMsgToDgvShow(dgvDeviceOperate, "111", "222", DisplayTypeSekect.CarTestType);
break;
}
case 2:
{
AddMsgToDgvShow(dgvDeviceOperate, "111", "222", DisplayTypeSekect.CarSimulateType);
break;
}
case 3:
{
break;
}
default:break;
}
}
//重新绘制左侧固定列并显示序号
private void dgvDeviceOperate_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
Rectangle rowHeaderBounds = new Rectangle(2, e.RowBounds.Top, this.dgvDeviceOperate.RowHeadersWidth - 2, e.RowBounds.Height - 1);
using (Brush backBrush = new SolidBrush(SystemColors.Control))
{
e.Graphics.FillRectangle(backBrush, rowHeaderBounds);
}
if(e.RowIndex >=dgvDeviceOperate.FirstDisplayedScrollingRowIndex)
{
using (SolidBrush b = new SolidBrush(dgvDeviceOperate.RowHeadersDefaultCellStyle.ForeColor))
{
int linen = 0;
linen = e.RowIndex + 1;
string line = linen.ToString();
e.Graphics.DrawString(line, e.InheritedRowStyle.Font, b, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5);
SolidBrush n = new SolidBrush(Color.Red);
}
}
}
private void dgvCarSimulate_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
Rectangle rowHeaderBounds = new Rectangle(2, e.RowBounds.Top, this.dgvCarSimulate.RowHeadersWidth - 2, e.RowBounds.Height - 1);
using (Brush backBrush = new SolidBrush(SystemColors.Control))
{
e.Graphics.FillRectangle(backBrush, rowHeaderBounds);
}
if (e.RowIndex >= dgvCarSimulate.FirstDisplayedScrollingRowIndex)
{
using (SolidBrush b = new SolidBrush(dgvCarSimulate.RowHeadersDefaultCellStyle.ForeColor))
{
int linen = 0;
linen = e.RowIndex + 1;
string line = linen.ToString();
e.Graphics.DrawString(line, e.InheritedRowStyle.Font, b, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5);
SolidBrush n = new SolidBrush(Color.Red);
}
}
}
//处理DGV中的按钮点击事件
private void dgvDeviceOperate_CellClick(object sender, DataGridViewCellEventArgs e)
{
string msg = string.Empty;
//当表中无有效数据时 直接返回
if(e.ColumnIndex <0 || e.RowIndex <0)
{
return;
}
//当点击到Send按钮时,产生点击事件
if(dgvDeviceOperate.Columns[e.ColumnIndex].Name == "dgvbtnSend")
{
string sendMsg = string.Empty;
// string
}
}
private void dgvCarSimulate_CellClick(object sender, DataGridViewCellEventArgs e)
{
}
//显示测试
private void tlsbtnCartest_Click(object sender, EventArgs e)
{
showMark = 1;
Size InitialSize = new Size((int)DgvSize.InitialWidth, (int)DgvSize.InitialHeigh);
Size defaultSize = new Size((int)DgvSize.DefaultWidth, (int)DgvSize.DefaultHeigh);
dgvDeviceOperate.Size = InitialSize;
dgvCarSimulate.Size = defaultSize;
dgvDeviceOperate.Left = (int)DgvPosition.InitialLeft;
dgvDeviceOperate.Top = (int)DgvPosition.InitialTop;
dgvCarSimulate.Visible = false;
dgvCarSimulate.Enabled = false;
dgvDeviceOperate.Visible = true;
dgvDeviceOperate.Enabled = true;
lblIp.Visible = true;
txtDeviceIp.Visible = true;
txtDeviceIp.Enabled = true;
lblPort.Visible = true;
txtDevicePort.Visible = true;
txtDevicePort.Enabled = true;
lblMac.Visible = true;
txtDeviceMac.Visible = true;
txtDeviceMac.Enabled = true;
btnDeviceInfoAdd.Visible = true;
btnDeviceInfoAdd.Enabled = true;
gpbDeviceInfo.Visible = true;
gpbDeviceOperate.Visible = true;
DgvCarTestDisplaySetting(dgvDeviceOperate);
}
//显示模拟
private void tlsbtnCarSimulate_Click(object sender, EventArgs e)
{
showMark = 2;
Size InitialSize = new Size((int)DgvSize.InitialWidth, (int)DgvSize.InitialHeigh);
Size defaultSize = new Size((int)DgvSize.DefaultWidth, (int)DgvSize.DefaultHeigh);
dgvDeviceOperate.Size = defaultSize;
dgvCarSimulate.Size = InitialSize;
dgvDeviceOperate.Left = (int)DgvPosition.InitialLeft;
dgvDeviceOperate.Top = (int)DgvPosition.InitialTop;
dgvCarSimulate.Visible = true;
dgvCarSimulate.Enabled = true;
dgvDeviceOperate.Visible = false;
dgvDeviceOperate.Enabled = false;
lblIp.Visible = true;
txtDeviceIp.Visible = true;
txtDeviceIp.Enabled = true;
lblPort.Visible = true;
txtDevicePort.Visible = true;
txtDevicePort.Enabled = true;
lblMac.Visible = true;
txtDeviceMac.Visible = true;
txtDeviceMac.Enabled = true;
btnDeviceInfoAdd.Visible = true;
btnDeviceInfoAdd.Enabled = true;
gpbDeviceInfo.Visible = true;
gpbDeviceOperate.Visible = true;
DgvCarTestDisplaySetting(dgvCarSimulate);
}
private void Car_Test_FormClosing(object sender, FormClosingEventArgs e)
{
showMark = 3;
Size defaultSize = new Size((int)DgvSize.DefaultWidth, (int)DgvSize.DefaultHeigh);
dgvDeviceOperate.Size = defaultSize;
dgvCarSimulate.Size = defaultSize;
dgvDeviceOperate.Left = (int)DgvPosition.InitialLeft;
dgvDeviceOperate.Top = (int)DgvPosition.InitialTop;
dgvCarSimulate.Visible = false;
dgvCarSimulate.Enabled = false;
dgvDeviceOperate.Visible = false;
dgvDeviceOperate.Enabled = false;
lblIp.Visible = false;
txtDeviceIp.Visible = false;
txtDeviceIp.Enabled = false;
lblPort.Visible = false;
txtDevicePort.Visible = false;
txtDevicePort.Enabled = false;
lblMac.Visible = false;
txtDeviceMac.Visible = false;
txtDeviceMac.Enabled = false;
btnDeviceInfoAdd.Visible = false;
btnDeviceInfoAdd.Enabled = false;
gpbDeviceInfo.Visible = false;
gpbDeviceOperate.Visible = false;
}
}
}
实现了动态增加行以及对于表格中的按钮的事件响应
实现了左边固定列显示行号。
下面是FInsTCP 命令的相关
/// <summary>
/// 封装发送的数据帧
/// </summary>
/// <param name="CmdCode">标记发送类型</param>
/// <param name="ServerNode">服务器节点</param>
/// <param name="wrMark">标记Fins帧的读写类型</param>
/// <param name="wrRegisterInfo">需要操作的寄存器的信息,包括地址功能码、起始字地址、起始位地址、个数</param>
/// <param name="wrSendMsg">待写入的数据</param>
//public AGVMessage(string beginChr, string packageID, string commandName, string body, string endChr)
public AGVMessage(string CmdCode, string ServerNode,string wrMark,string wrRegisterInfo,string wrSendMsg)
{
#region
//this.BeginChr = beginChr;
//this.PackageID = packageID;
//this.CommandName = commandName;
//this.EndChr = endChr;
//this.Body = body;
//this.PackageLength = (11 + body.Length).ToString().PadLeft(3, '0');
//this.CheckSum = NetworkHelper.GetCheckSum(this.PackageLength + this.PackageID + this.CommandName + this.Body);
//this.Data = this.BeginChr + this.PackageLength + this.PackageID + this.CommandName + this.Body + this.CheckSum + this.EndChr;
#endregion
string localIp = GetLocalHostIp();
if(localIp != null)
{
string[] localIpSplit = localIp.Split('.');
string firstStr = "80000200";
string SecondStr = "0000";
this.FinsHeader = "FINS";
this.FinsServerNode = ServerNode;
this.FinsClietNode = localIpSplit[3];
this.FinsCmd = CmdCode;
if (wrMark == "0101")//读指令
{
//Fins读指令帧
this.FinsBody = firstStr + ServerNode + SecondStr + localIpSplit[3] + SecondStr + wrMark + wrRegisterInfo;
this.FinsPackageLength = (8 + this.FinsBody.Length).ToString().PadLeft(8,'0');
this.FinsData = FinsHeader + FinsPackageLength + FinsCmd + "00000000" + FinsBody;
}
else if(wrMark =="0102")//写指令
{
this.FinsBody = firstStr + ServerNode + SecondStr + localIpSplit[3] + SecondStr + wrMark + wrRegisterInfo + wrSendMsg;
this.FinsPackageLength = (8 + this.FinsBody.Length).ToString().PadLeft(8, '0');
this.FinsData = FinsHeader + FinsPackageLength + FinsCmd + "00000000" + FinsBody;
}
}
}
public byte[] GetBytesByAGVMessage(string data)
{
if(data.Length %2 ==0)
{
List<byte> list = new List<byte>();
for (int i =0;i<data.Length/2;i++)
{
string singleWord = data.Substring(2 * i, 2);
byte lowByte;
byte highByte = SingleWordToDoubleBytes(singleWord, out lowByte);
list.Add(highByte);
list.Add(lowByte);
}
return list.ToArray();
}
else
{
byte[] defaultBytes = new byte[2] { 0,0};
return defaultBytes;
}
}
//获取网段
public string GetNetSegmentByServer()
{
string serverIp = GetLocalHostIp();
string returnStr = string.Empty;
IPAddress ipAddress;
if(IPAddress.TryParse(serverIp,out ipAddress))
{
int i = serverIp.LastIndexOf(".");
returnStr = serverIp.Substring(0, i);
return returnStr;
}
return null;
}
//获取连接的地址
public string GetConnectNetIp(string node)
{
string connectNetIp = string.Empty;
return GetNetSegmentByServer() + node;
}
/// <summary>
/// 获取本地IP地址
/// </summary>
/// <returns>获取的IP地址</returns>
private string GetLocalHostIp()
{
try
{
string serverName = Dns.GetHostName();
return NetworkHelper.GetIpByHostName(serverName);
}
catch
{
return string.Empty;
}
}
/// <summary>
/// 拆分单字字符串为双字节
/// </summary>
/// <param name="singleWord">单字字符串</param>
/// <param name="lowByte">地位字节</param>
/// <returns>高位字节数</returns>
private static byte SingleWordToDoubleBytes(string singleWord, out byte lowByte)
{
int r;
byte highByte;
if(int.TryParse(singleWord,out r) ==true)
{
highByte = Convert.ToByte((r >> 8) & 0xff);
lowByte = Convert.ToByte(r & 0x00ff);
}
else
{
highByte = default(byte);
lowByte = default(byte);
}
return highByte;
}
/// <summary>
/// 将双字节数据整合为单字字符串
/// </summary>
/// <param name="bytehigh">高位字节</param>
/// <param name="bytelow">低位字节</param>
/// <returns>单字字符串</returns>
private static string DoubleBytesToSingleWord(byte bytehigh,byte bytelow)
{
int r = (bytehigh << 8) + bytelow;
string str = Convert.ToString(r);
return str;
}