17,740
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
namespace SendDataTool
{
public partial class Form1 : Form
{
public int iSamll, iHigh;
const string FILENAME = "bee.ini";
[DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
static extern void CopyMemory(IntPtr Destination, IntPtr Source, uint Length);
/// <param name="section">节点名称[如[TypeName]]</param>
/// <param name="key">键</param>
/// <param name="val">值</param>
/// <param name="filepath">文件路径</param>
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filepath);
/// <param name="section">节点名称</param>
/// <param name="key">键</param>
/// <param name="def">值</param>
/// <param name="retval">stringbulider对象</param>
/// <param name="size">字节大小</param>
/// <param name="filePath">文件路径</param>
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);
public Form1()
{
InitializeComponent();
Loadini();
}
private void Loadini() // 读取配置参数
{
string sPathFile = Directory.GetCurrentDirectory() + "\\" + FILENAME;
if (File.Exists(sPathFile))
{
string sPoint;
StringBuilder temp = new StringBuilder(1024);
// 串口号
GetPrivateProfileString("config", "ComPort", "1", temp, 1024, sPathFile);
cbCom.SelectedIndex = Convert.ToInt32(temp.ToString()) - 1;
// 网关号
GetPrivateProfileString("config", "GateWay", "1000", temp, 1024, sPathFile);
tbGateID.Text = temp.ToString().Trim();
// 节点号
GetPrivateProfileString("config", "PointNo", "", temp, 1024, sPathFile);
sPoint = temp.ToString().Trim();
string[] sTempPoint = GetString(sPoint, ",");
foreach (string str in sTempPoint)
{
if ((str.Trim() != "") && (IsNumber(str.Trim())))
lbPointList.Items.Add(Convert.ToString(str));
}
// 数据范围小值
GetPrivateProfileString("config", "MinRegion", "0", temp, 1024, sPathFile);
tbSmallData.Text = temp.ToString().Trim();
// 数据范围大值
GetPrivateProfileString("config", "MaxRegion", "0", temp, 1024, sPathFile);
tbHighData.Text = temp.ToString().Trim();
// 上传频率
GetPrivateProfileString("config", "TimeRate", "1000", temp, 1024, sPathFile);
tbRate.Text = temp.ToString().Trim();
}
else
{
File.CreateText(sPathFile);
}
}
private string[] GetString(string str, string cutStr)
{
char[] cutChar = cutStr.ToCharArray();
string[] sArray = str.Split(cutChar);
return sArray;
}
private void Saveini() // 设置配置参数
{
string sPathFile = Directory.GetCurrentDirectory() + "\\" + FILENAME;
if (!File.Exists(sPathFile))
File.CreateText(sPathFile);
WritePrivateProfileString("config", "ComPort", (cbCom.SelectedIndex + 1).ToString().Trim(), sPathFile);
WritePrivateProfileString("config", "GateWay", tbGateID.Text.ToString().Trim(), sPathFile);
// 节点号
int iCount = lbPointList.Items.Count;
if (iCount > 0)
{
string sTemp = "";
for (int i = 0; i < iCount; i++)
{
sTemp += lbPointList.Items[i].ToString() + ",";
}
sTemp = sTemp.Substring(0, sTemp.Length - 1);
WritePrivateProfileString("config", "PointNo", sTemp, sPathFile);
}
//
WritePrivateProfileString("config", "MinRegion", tbSmallData.Text.ToString(), sPathFile);
WritePrivateProfileString("config", "MaxRegion", tbHighData.Text.ToString().Trim(), sPathFile);
WritePrivateProfileString("config", "TimeRate", tbRate.Text.ToString().Trim(), sPathFile);
}
private void btnClose_Click(object sender, EventArgs e)
{
CloseCom();
this.Close();
}
private void btnAddPoint_Click(object sender, EventArgs e)
{
int iPoint;
string sPoint;
sPoint = tbPointID.Text.Trim();
iPoint = Convert.ToInt32(sPoint);
lbPointList.Items.Add(Convert.ToString(iPoint));
}
private void btnDelPoint_Click(object sender, EventArgs e)
{
int iSelect;
iSelect = lbPointList.SelectedIndex;
if (iSelect != -1)
{
lbPointList.Items.RemoveAt(iSelect);
}
else
{
MessageBox.Show("未选择节点号!", "提示");
}
}
private void btnSendData_Click(object sender, EventArgs e)
{
if (btnSendData.Tag.ToString() == "0") // 打开窗口发送数据
{
if (IsNumber(tbSmallData.Text.ToString().Trim()))
{
iSamll = Convert.ToInt32(tbSmallData.Text.ToString().Trim());
}
else
{
MessageBox.Show("数据范围设置不正确,请输入整数!", "提示");
tbSmallData.Focus();
return;
}
if (IsNumber(tbHighData.Text.ToString().Trim()))
{
iHigh = Convert.ToInt32(tbHighData.Text.ToString().Trim());
}
else
{
MessageBox.Show("数据范围设置不正确,请输入整数!", "提示");
tbHighData.Focus();
return;
}
if (iSamll >= iHigh)
{
MessageBox.Show("数据范围输入不正确!", "提示");
tbSmallData.Focus();
return;
}
if (!OpenCom())
{
return;
}
btnSendData.Tag = "1";
btnSendData.Text = "停止发送";
if (IsNumber(tbRate.Text.ToString().Trim()))
{
tmrSenddata.Interval = Convert.ToInt32(tbRate.Text.ToString().Trim());
tmrSenddata.Enabled = true;
}
else
{
MessageBox.Show("发送频率输入不正确,请输入整数!", "提示");
tbRate.Focus();
return;
}
}
else
{
tmrSenddata.Enabled = false;
CloseCom();
btnSendData.Tag = "0";
btnSendData.Text = "开始发送";
}
}
private bool OpenCom() //打开串口
{
if (cbCom.Text.ToString().Trim() == "")
{
MessageBox.Show("未选中串口号!", "提示");
return false;
}
ComPort.PortName = cbCom.Text.Trim();
try
{
ComPort.Open();
return true;
}
catch
{
MessageBox.Show("串口打开失败!", "提示");
return false;
}
}
private void CloseCom() //关闭串口
{
if (ComPort.IsOpen)
{
try
{
ComPort.Close();
}
catch
{
MessageBox.Show("串口关闭失败!", "提示");
}
}
}
public void WriteLog(byte[] bData, int len)
{
if (chbShowLog.Checked)
{
string sLog, sTemp;
sLog = ":";
for (int i = 0; i < len; i++)
{
sTemp = Convert.ToString(bData[i], 16);
sTemp = sTemp.ToUpper();
if (sTemp.Length == 1)
{
sTemp = "0" + sTemp;
}
sLog += " " + sTemp;
}
rtbLog.AppendText(sLog + "\n");
rtbLog.Select(rtbLog.Text.Length, 0);
rtbLog.ScrollToCaret();
}
else
{
rtbLog.Clear();
}
}
}