基本信息
源码名称:RS232通讯 示例源码
源码大小:0.25M
文件格式:.rar
开发语言:C#
更新时间:2020-03-28
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
using Beetle.TestServer;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace RS232
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int addr1 = 0;
int addr2 = 0;
bool state = false;
byte[] meterid = new byte[2];
#region 接收处理
//以下是串口操作
[DllImport("kernel32.dll ")] //调用API 第一个参数是指频率的高低,越大越高,第二个参数是指响的时间多长
private static extern int Beep(int dwFreq, int dwDuration);
int cow = 0;
private void OutputLog(string text)
{
try
{
cow ;
richTextBox1.AppendText(DateTime.Now.ToString("HH:mm:ss") ":" text);
richTextBox1.AppendText("\r\n");
richTextBox1.Select(this.richTextBox1.Text.Length, 1);
//设置滚动到当前位置
richTextBox1.ScrollToCaret();
if (cow > 200)
{
cow = 0;
richTextBox1.Clear();
}
}
catch (Exception ex)
{
}
}
// 2、计算两个时间差值的函数,返回时间差的绝对值:
private string DateDiff(DateTime DateTime1, DateTime DateTime2)
{
string dateDiff = null;
try
{
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
dateDiff = ts.Days.ToString() "天" ts.Hours.ToString() "小时" ts.Minutes.ToString() "分钟" ts.Seconds.ToString() "秒";
}
catch { }
return dateDiff;
}
private void Log(string text)
{
base.Invoke(new Action<string>(this.OutputLog), new object[] { text });
}
bool stateVer = false;
int state11 = 0;
int rowsCount = 0;
private StringBuilder builder = new StringBuilder();//避免在事件处理方法中反复的创建,定义到外面。
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
Beep(0X7FF, 500);
try
{
int i = 0;
int n = 0;
int n1 = 0;
System.Threading.Thread.Sleep(1500);
//for (i = 0; i < 500; i )
//{
// //if (state == false)
// //{
// // return;
// //}
// System.Threading.Thread.Sleep(100); //读取速度太慢,加Sleep延长读取时间, 不可缺少
// //delayTime(1);
// n = serialPort1.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
// //Log(n.ToString());
// if (n != 0)
// {
// if (n == n1) break;
// else n1 = n;
// }
//}
//n = n1;
//if (n == 0) { state11 = 1; return; }
//else state11 = 2;
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
serialPort1.Read(buf, 0, n);
// string txt = Encoding.ASCII.GetString(buf); //ASCII卡码
// string txt = ByteToHexStr(buffer); //用到函数,作用:转换16进制
//this.Invoke(textChanged, new string[] { txt }); //通过Invoke调用事件
this.Invoke((EventHandler)(delegate
{
try
{
#region
builder.Append("接收命令:");
Log("接收:" strHex.byteToHexStr(buf));
//终端地址 68 4A 00 4A 00 68 A8 01 41 FF FF 01 0A 60 00 00 01 0B 01 41 6F 00 0A 00 1A 16
if (buf.Length > 6)
{
if (buf[12] == 0x0A)
{
string straddr1 = buf[19].ToString("X2") buf[18].ToString("X2");
string straddr2 = buf[21].ToString("X2") buf[20].ToString("X2");
addr1 = Convert.ToInt32(straddr1);
addr2 = Convert.ToInt32(straddr2, 16);
txtaddr1.Text = straddr1;
txtaddr2.Text = addr2.ToString();
Log("结果--区划码:" straddr1 "终端地址:" addr2.ToString());
}
else if (buf[14] == 0x0A)
{
string straddr1 = buf[21].ToString("X2") buf[20].ToString("X2");
string straddr2 = buf[23].ToString("X2") buf[22].ToString("X2");
addr1 = Convert.ToInt32(straddr1);
addr2 = Convert.ToInt32(straddr2, 16);
txtaddr1.Text = straddr1;
txtaddr2.Text = addr2.ToString();
Log("结果--区划码:" straddr1 "终端地址:" addr2.ToString());
}
else if (buf[12] == 0x00)
{
if (buf[16] == 0x01)
{
Log("结果--确认帧");
if (rowsCount == 7)
{
// serialPort1.Close();
return;
}
}
else
{
Log("结果--否认帧");
}
}
//<= 68 4A 00 4A 00 68 88 01 41 13 00 02 0C 60 00 00 02 00 48 11 09 16 23 15 FD 16
else if (buf[12] == 0x0C)
{
string Year = buf[23].ToString("X2");
string Month = buf[21].ToString("X2");
string Day = Convert.ToString(Convert.ToInt32((buf[22] & 0x1f).ToString("X2")));
string Hour = buf[20].ToString("X2");
string Minute = buf[19].ToString("X2");
string Second = buf[18].ToString("X2");
DateTime dt1;
string strdt1 = Year "/" Day "/" Month " " Hour ":" Minute ":" Second;
dt1 = Convert.ToDateTime(strdt1);
DateTime dt = DateTime.Now;
TimeSpan ts1 = new TimeSpan(dt1.Ticks);
TimeSpan ts2 = new TimeSpan(dt.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
string dateDiff = ts.Days.ToString() "天" ts.Hours.ToString() "小时" ts.Minutes.ToString() "分钟" ts.Seconds.ToString() "秒";
// string strtime= DateDiff(DateTime.Now, dt1);
Log("结果--时钟为:" dateDiff);
Log("结果--时钟为:" Year "-" Day "-" Month " " Hour ":" Minute ":" Second "");
if (ts.Seconds >= 5)
{
MessageBox.Show("时钟相差大于5秒!!");
state = false;
button4.Enabled = true;
return;
}
}
//68 3A 02 3A 02 68 88 01 41 07 00 02 AA 60 00 00 01 1E 80 06
//00 01 00 00 00 00 00 00 00 00 00 00
//01 02 00 00 90 01 00 00 07 01 00 00 12 02 00 00 02 02 00 00 19 01 00 00 01 02 00 00 01 02 00 00 01 02 00 00 10 01 00 00 10 01 00 00 00 00 00 00 10 01 00 00 10 01 00 00 03 02 00 00 03 02 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AA 16
else if (buf[12] == 0xAA)
{
double intRTC = Convert.ToDouble(buf[21].ToString("X2") buf[20].ToString("X2"));
double intMonitor = Convert.ToDouble(buf[33].ToString("X2") buf[32].ToString("X2"));
double intLcd = Convert.ToDouble(buf[37].ToString("X2") buf[36].ToString("X2"));
double intKey = Convert.ToDouble(buf[41].ToString("X2") buf[40].ToString("X2"));
double intJmain = Convert.ToDouble(buf[45].ToString("X2") buf[44].ToString("X2"));
double intCuDP = Convert.ToDouble(buf[49].ToString("X2") buf[48].ToString("X2"));
double intCNTLP = Convert.ToDouble(buf[53].ToString("X2") buf[52].ToString("X2"));
double intFREEZE = Convert.ToDouble(buf[57].ToString("X2") buf[56].ToString("X2"));
double intCURVE = Convert.ToDouble(buf[61].ToString("X2") buf[60].ToString("X2"));
double intEventRec = Convert.ToDouble(buf[65].ToString("X2") buf[64].ToString("X2"));
double intRS232 = Convert.ToDouble(buf[69].ToString("X2") buf[68].ToString("X2"));
double intGPRS1 = Convert.ToDouble(buf[73].ToString("X2") buf[72].ToString("X2"));
double intINFRARED = Convert.ToDouble(buf[77].ToString("X2") buf[76].ToString("X2"));
double intRS485 = Convert.ToDouble(buf[81].ToString("X2") buf[80].ToString("X2"));
double intNET = Convert.ToDouble(buf[85].ToString("X2") buf[84].ToString("X2"));
double intREAD = Convert.ToDouble(buf[89].ToString("X2") buf[88].ToString("X2"));
double intREAD2 = Convert.ToDouble(buf[93].ToString("X2") buf[92].ToString("X2"));
double intudisk = Convert.ToDouble(buf[97].ToString("X2") buf[96].ToString("X2"));
//double intGPRS1 = Convert.ToDouble(buf[37].ToString("X2") buf[36].ToString("X2"));
//double intINFRARED = Convert.ToDouble(buf[21].ToString("X2") buf[20].ToString("X2"));
//double intRS485 = Convert.ToDouble(buf[33].ToString("X2") buf[32].ToString("X2"));
//double intNET = Convert.ToDouble(buf[37].ToString("X2") buf[36].ToString("X2"));
if (intRTC / 100 == 1)
{
Log("RTC :" (intRTC / 100).ToString("0.00") " OK");
}
else
{
Log("RTC :" (intRTC / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intMonitor / 100 == 2.01)
{
Log("MONITOR :" (intMonitor / 100).ToString("0.00") " OK");
}
else
{
Log("MONITOR :" (intMonitor / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intLcd / 100 == 1.91)
{
Log("LCD :" (intLcd / 100).ToString("0.00") " OK");
}
else
{
Log("LCD :" (intLcd / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intKey / 100 == 1.08)
{
Log("Key :" (intKey / 100).ToString("0.00") " OK");
}
else
{
Log("Key :" (intKey / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intJmain / 100 == 2.12)
{
Log("JMAIN :" (intJmain / 100).ToString("0.00") " OK");
}
else
{
Log("JMAIN :" (intJmain / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intCuDP / 100 == 2.02)
{
Log("CURDP :" (intCuDP / 100).ToString("0.00") " OK");
}
else
{
Log("CURDP :" (intCuDP / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intCNTLP / 100 == 1.19)
{
Log("CNTLP :" (intCNTLP / 100).ToString("0.00") " OK");
}
else
{
Log("CNTLP :" (intCNTLP / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intFREEZE / 100 == 2.01)
{
Log("FREEZE :" (intFREEZE / 100).ToString("0.00") " OK");
}
else
{
Log("FREEZE :" (intFREEZE / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intCURVE / 100 == 2.01)
{
Log("CURVE :" (intCURVE / 100).ToString("0.00") " OK");
}
else
{
Log("CURVE :" (intCURVE / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intEventRec / 100 == 2.01)
{
Log("EventRec :" (intEventRec / 100).ToString("0.00") " OK");
}
else
{
Log("EventRec :" (intEventRec / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intRS232 / 100 == 1.12)
{
Log("RS232 :" (intRS232 / 100).ToString("0.00") " OK");
}
else
{
Log("RS232 :" (intRS232 / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intGPRS1 / 100 == 1.12)
{
Log("GPRS1 :" (intGPRS1 / 100).ToString("0.00") " OK");
}
else
{
Log("GPRS1 :" (intGPRS1 / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intINFRARED / 100 == 0)
{
Log("INFRARED :" (intINFRARED / 100).ToString("0.00") " OK");
}
else
{
Log("INFRARED :" (intINFRARED / 100).ToString("0.00") " 进程版本不正确");
}
if (intRS485 / 100 == 1.12)
{
Log("RS485 :" (intRS485 / 100).ToString("0.00") " OK");
}
else
{
Log("RS485 :" (intRS485 / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intNET / 100 == 1.12)
{
Log("NET :" (intNET / 100).ToString("0.00") " OK");
}
else
{
Log("NET :" (intNET / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intREAD / 100 == 2.03)
{
Log("READ :" (intREAD / 100).ToString("0.00") " OK");
}
else
{
Log("READ :" (intREAD / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intREAD2 / 100 == 2.03)
{
Log("READ2 :" (intREAD2 / 100).ToString("0.00") " OK");
}
else
{
Log("READ2 :" (intREAD2 / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
if (intudisk / 100 == 1.01)
{
Log("udisk :" (intudisk / 100).ToString("0.00") " OK");
}
else
{
Log("udisk :" (intudisk / 100).ToString("0.00") " 进程版本不正确");
stateVer = true;
}
}
else
{
Log("接收RS232口ERROR");
return;
}
}
#endregion
foreach (byte b in buf)
{
builder.Append(b.ToString("X2") " "); //转换16进制
}
}
catch (Exception ex)
{
Log(ex.ToString());
}
}));
}
catch (Exception ex)
{
Log(ex.ToString());
}
//comm.DiscardInBuffer();
}
#endregion
int sendocount = 0;
//数据格式转换
/// <summary>
/// 得到ushort类型的高字节
/// </summary>
public static byte GetHighByte(int us)
{
return (byte)(us >> 8);
}
/// <summary>
/// 得到ushort类型的低字节
/// </summary>
public static byte GetLowByte(int us)
{
return (byte)(us);
}
public void sendCmd(int flag)
{
try
{
state11 = 0;
string strSend = "";
byte[] bufsend;
if (flag == 1) //读地址
{
strSend = "68 32 00 32 00 68 4B 01 41 6A 00 02 0A 70 00 00 01 0B 7F 16 ";
bufsend = strHex.strToToHexByte(strSend);
bufsend[0] = 0x68;
bufsend[1] = 0x32;
bufsend[2] = 0x00;
bufsend[3] = 0x32;
bufsend[4] = 0x00;
bufsend[5] = 0x68;
bufsend[6] = 0x4B;
// bufsend[7] = 0x01;
// bufsend[8] = 0x41;
bufsend[7] = GetLowByte(Convert.ToInt16(txtaddr11.Text, 16));
bufsend[8] = GetHighByte(Convert.ToInt16(txtaddr11.Text, 16));
bufsend[9] = 0xFF;
bufsend[10] = 0xFF;
bufsend[11] = 0x01;
bufsend[12] = 0x0A;
bufsend[13] = 0x70;
bufsend[14] = 0x00;
bufsend[15] = 0x00;
bufsend[16] = 0x01;
bufsend[17] = 0x0B;
//时间
bufsend[18] = 0x00;
//bufsend[19] = (byte)(Convert.ToInt32(DateTime.Now.Day.ToString(), 16));
//bufsend[20] = (byte)(Convert.ToInt32(DateTime.Now.Hour.ToString(), 16));
//bufsend[21] = (byte)(Convert.ToInt32(DateTime.Now.Minute.ToString(), 16));
//bufsend[22] = (byte)(Convert.ToInt32(DateTime.Now.Second.ToString(), 16));
//bufsend[23] = 0x00;
for (int i = 6; i < 18; i ) //校验和
{
bufsend[18] = bufsend[i];
}
bufsend[19] = 0x16;
Log("发送抄读:" strHex.byteToHexStr(bufsend));
serialPort1.Write(bufsend, 0, bufsend.Length);
}
//催费告警投入 68 72 00 72 00 68 4A 01 41 6A 00 02 05 72 00 00 02 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 74 16
else if (flag == 2)
{
strSend = "68 72 00 72 00 68 4A 01 41 6A 00 02 05 72 00 00 02 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 74 16 ";
bufsend = strHex.strToToHexByte(strSend);
bufsend[0] = 0x68;
bufsend[1] = 0x72;
bufsend[2] = 0x00;
bufsend[3] = 0x72;
bufsend[4] = 0x00;
bufsend[5] = 0x68;
bufsend[6] = 0x4A;
bufsend[7] = GetLowByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[8] = GetHighByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[9] = GetLowByte(addr2);
bufsend[10] = GetHighByte(addr2);
bufsend[11] = 0x02;
bufsend[12] = 0x05;
bufsend[13] = 0x72;
bufsend[14] = 0x00;
bufsend[15] = 0x00;
bufsend[16] = 0x02;
bufsend[17] = 0x03;
bufsend[18] = 0x00;
bufsend[19] = 0x00;
bufsend[20] = 0x00;
bufsend[21] = 0x00;
bufsend[22] = 0x00;
bufsend[23] = 0x00;
bufsend[24] = 0x00;
bufsend[25] = 0x00;
bufsend[26] = 0x00;
bufsend[27] = 0x00;
bufsend[28] = 0x00;
bufsend[29] = 0x00;
bufsend[30] = 0x00;
bufsend[31] = 0x00;
bufsend[32] = 0x00;
bufsend[33] = 0x00;
bufsend[34] = 0x00;
for (int i = 6; i < 34; i ) //校验和
{
bufsend[34] = bufsend[i];
}
bufsend[35] = 0x16;
Log("发送催费告警投入:" strHex.byteToHexStr(bufsend));
serialPort1.Write(bufsend, 0, bufsend.Length);
}
//催费告警解除
else if (flag == 3)
{
strSend = "68 72 00 72 00 68 4A 01 41 6A 00 02 05 73 00 00 02 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 16 ";
bufsend = strHex.strToToHexByte(strSend);
bufsend[0] = 0x68;
bufsend[1] = 0x72;
bufsend[2] = 0x00;
bufsend[3] = 0x72;
bufsend[4] = 0x00;
bufsend[5] = 0x68;
bufsend[6] = 0x4A;
bufsend[7] = GetLowByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[8] = GetHighByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[9] = GetLowByte(addr2);
bufsend[10] = GetHighByte(addr2);
bufsend[11] = 0x02;
bufsend[12] = 0x05;
bufsend[13] = 0x73;
bufsend[14] = 0x00;
bufsend[15] = 0x00;
bufsend[16] = 0x02;
bufsend[17] = 0x04;
bufsend[18] = 0x00;
bufsend[19] = 0x00;
bufsend[20] = 0x00;
bufsend[21] = 0x00;
bufsend[22] = 0x00;
bufsend[23] = 0x00;
bufsend[24] = 0x00;
bufsend[25] = 0x00;
bufsend[26] = 0x00;
bufsend[27] = 0x00;
bufsend[28] = 0x00;
bufsend[29] = 0x00;
bufsend[30] = 0x00;
bufsend[31] = 0x00;
bufsend[32] = 0x00;
bufsend[33] = 0x00;
bufsend[34] = 0x00;
for (int i = 6; i < 34; i ) //校验和
{
bufsend[34] = bufsend[i];
}
bufsend[35] = 0x16;
Log("解除催费告警:" strHex.byteToHexStr(bufsend));
serialPort1.Write(bufsend, 0, bufsend.Length);
}
//读取进程版本
else if (flag == 4)
{
strSend = "68 3E 00 3E 00 68 4B 01 41 6F 00 02 AA 60 00 00 01 1E 80 06 80 2D 16 ";
bufsend = strHex.strToToHexByte(strSend);
bufsend[0] = 0x68;
bufsend[1] = 0x3E;
bufsend[2] = 0x00;
bufsend[3] = 0x3E;
bufsend[4] = 0x00;
bufsend[5] = 0x68;
bufsend[6] = 0x4B;
bufsend[7] = GetLowByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[8] = GetHighByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[9] = GetLowByte(addr2);
bufsend[10] = GetHighByte(addr2);
bufsend[11] = 0x02;
bufsend[12] = 0xAA;
bufsend[13] = 0x60;
bufsend[14] = 0x00;
bufsend[15] = 0x00;
bufsend[16] = 0x01;
bufsend[17] = 0x1E;
bufsend[18] = 0x80;
bufsend[19] = 0x06;
bufsend[20] = 0x80;
bufsend[21] = 0x00;
for (int i = 6; i < 21; i ) //校验和
{
bufsend[21] = bufsend[i];
}
bufsend[22] = 0x16;
Log("读进程版本:" strHex.byteToHexStr(bufsend));
serialPort1.Write(bufsend, 0, bufsend.Length);
}
else if (flag == 5) //设置告警时段24不告警
{
strSend = "68 7E 00 7E 00 68 5A 01 41 1B 00 02 04 60 00 00 40 02 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5C 16 ";
bufsend = strHex.strToToHexByte(strSend);
bufsend[0] = 0x68;
bufsend[1] = 0x7E;
bufsend[2] = 0x00;
bufsend[3] = 0x7E;
bufsend[4] = 0x00;
bufsend[5] = 0x68;
bufsend[6] = 0x5A;
bufsend[7] = GetLowByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[8] = GetHighByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[9] = GetLowByte(addr2);
bufsend[10] = GetHighByte(addr2);
bufsend[11] = 0x02;
bufsend[12] = 0x04;
bufsend[13] = 0x60;
bufsend[14] = 0x00;
bufsend[15] = 0x00;
bufsend[16] = 0x40;
bufsend[17] = 0x02;
bufsend[18] = 0x00;
bufsend[19] = 0x00;
bufsend[20] = 0x00;
bufsend[21] = 0x00;
bufsend[22] = 0x00;
bufsend[23] = 0x00;
bufsend[24] = 0x00;
bufsend[25] = 0x00;
bufsend[26] = 0x00;
bufsend[27] = 0x00;
bufsend[28] = 0x00;
bufsend[29] = 0x00;
bufsend[30] = 0x00;
bufsend[31] = 0x00;
bufsend[32] = 0x00;
bufsend[33] = 0x00;
bufsend[34] = 0x00;
bufsend[35] = 0x00;
bufsend[36] = 0x00;
bufsend[37] = 0x00;
for (int i = 6; i < 37; i ) //校验和
{
bufsend[37] = bufsend[i];
}
bufsend[38] = 0x16;
Log("发送24小时不告警:" strHex.byteToHexStr(bufsend));
serialPort1.Write(bufsend, 0, bufsend.Length);
}
else if (flag == 6) //设置告警24小时告警时段
{
strSend = "68 7E 00 7E 00 68 5A 01 41 1B 00 02 04 60 00 00 40 02 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5C 16 ";
bufsend = strHex.strToToHexByte(strSend);
bufsend[0] = 0x68;
bufsend[1] = 0x7E;
bufsend[2] = 0x00;
bufsend[3] = 0x7E;
bufsend[4] = 0x00;
bufsend[5] = 0x68;
bufsend[6] = 0x5A;
bufsend[7] = GetLowByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[8] = GetHighByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[9] = GetLowByte(addr2);
bufsend[10] = GetHighByte(addr2);
bufsend[11] = 0x02;
bufsend[12] = 0x04;
bufsend[13] = 0x60;
bufsend[14] = 0x00;
bufsend[15] = 0x00;
bufsend[16] = 0x40;
bufsend[17] = 0x02;
bufsend[18] = 0xFF;
bufsend[19] = 0xFF;
bufsend[20] = 0xFF;
bufsend[21] = 0x00;
bufsend[22] = 0x00;
bufsend[23] = 0x00;
bufsend[24] = 0x00;
bufsend[25] = 0x00;
bufsend[26] = 0x00;
bufsend[27] = 0x00;
bufsend[28] = 0x00;
bufsend[29] = 0x00;
bufsend[30] = 0x00;
bufsend[31] = 0x00;
bufsend[32] = 0x00;
bufsend[33] = 0x00;
bufsend[34] = 0x00;
bufsend[35] = 0x00;
bufsend[36] = 0x00;
bufsend[37] = 0x00;
for (int i = 6; i < 37; i ) //校验和
{
bufsend[37] = bufsend[i];
}
bufsend[38] = 0x16;
Log("发送24小时告警:" strHex.byteToHexStr(bufsend));
serialPort1.Write(bufsend, 0, bufsend.Length);
}
//68 A2 00 A2 00 68 4A 01 41 6F 00 02 05 F0 00 00 40 03 00 32 08 16 23 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 08 16 00 0D 16
else if (flag == 7) //校时
{
strSend = "68 A2 00 A2 00 68 4A 01 41 6F 00 02 05 F0 00 00 40 03 00 32 08 16 23 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 08 16 00 0D 16 ";
bufsend = strHex.strToToHexByte(strSend);
bufsend[0] = 0x68;
bufsend[1] = 0xA2;
bufsend[2] = 0x00;
bufsend[3] = 0xA2;
bufsend[4] = 0x00;
bufsend[5] = 0x68;
bufsend[6] = 0x4A;
bufsend[7] = GetLowByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[8] = GetHighByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[9] = GetLowByte(addr2);
bufsend[10] = GetHighByte(addr2);
bufsend[11] = 0x02;
bufsend[12] = 0x05;
bufsend[13] = 0xF0;
bufsend[14] = 0x00;
bufsend[15] = 0x00;
bufsend[16] = 0x40;
bufsend[17] = 0x03;
// string datet = DateTime.Now.ToString();
bufsend[18] = (byte)(Convert.ToInt32(DateTime.Now.Second.ToString(), 16));
bufsend[19] = (byte)(Convert.ToInt32(DateTime.Now.Minute.ToString(), 16));
bufsend[20] = (byte)(Convert.ToInt32(DateTime.Now.Hour.ToString(), 16));
bufsend[21] = (byte)(Convert.ToInt32(DateTime.Now.Day.ToString(), 16));
bufsend[22] = (byte)(Convert.ToInt32(DateTime.Now.Month.ToString(), 16));
bufsend[23] = (byte)(Convert.ToInt32(DateTime.Now.Year.ToString().Substring(2, 2), 16));
bufsend[24] = 0x00;
bufsend[25] = 0x00;
bufsend[26] = 0x00;
bufsend[27] = 0x00;
bufsend[28] = 0x00;
bufsend[29] = 0x00;
bufsend[30] = 0x00;
bufsend[31] = 0x00;
bufsend[32] = 0x00;
bufsend[33] = 0x00;
bufsend[34] = 0x00;
bufsend[35] = 0x00;
bufsend[36] = 0x00;
bufsend[37] = 0x00;
bufsend[38] = 0x00;
bufsend[39] = 0x00;
bufsend[40] = 0x00;
bufsend[41] = (byte)(Convert.ToInt32(DateTime.Now.Second.ToString(), 16));
bufsend[42] = (byte)(Convert.ToInt32(DateTime.Now.Minute.ToString(), 16));
bufsend[43] = (byte)(Convert.ToInt32(DateTime.Now.Hour.ToString(), 16));
bufsend[44] = (byte)(Convert.ToInt32(DateTime.Now.Day.ToString(), 16));
bufsend[45] = 0x00;
bufsend[46] = 0x00;
for (int i = 6; i < 46; i ) //校验和
{
bufsend[46] = bufsend[i];
}
bufsend[47] = 0x16;
Log("校时:" strHex.byteToHexStr(bufsend));
serialPort1.Write(bufsend, 0, bufsend.Length);
}
// => 68 32 00 32 00 68 5B 01 41 13 00 02 0C 60 00 00 02 00 20 16 时钟
else if (flag == 8)
{
strSend = "68 32 00 32 00 68 5B 01 41 13 00 02 0C 60 00 00 02 00 20 16 ";
bufsend = strHex.strToToHexByte(strSend);
bufsend[0] = 0x68;
bufsend[1] = 0x32;
bufsend[2] = 0x00;
bufsend[3] = 0x32;
bufsend[4] = 0x00;
bufsend[5] = 0x68;
bufsend[6] = 0x5B;
bufsend[7] = GetLowByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[8] = GetHighByte(Convert.ToInt16(addr1.ToString(), 16));
bufsend[9] = GetLowByte(addr2);
bufsend[10] = GetHighByte(addr2);
bufsend[11] = 0x02;
bufsend[12] = 0x0C;
bufsend[13] = 0x60;
bufsend[14] = 0x00;
bufsend[15] = 0x00;
bufsend[16] = 0x02;
bufsend[17] = 0x00;
bufsend[18] = 0x00;
for (int i = 6; i < 18; i ) //校验和
{
bufsend[18] = bufsend[i];
}
bufsend[19] = 0x16;
Log("发送召测时钟:" strHex.byteToHexStr(bufsend));
serialPort1.Write(bufsend, 0, bufsend.Length);
}
//=> 68 E2 00 E2 00 68 7A 01 41 1B 00 02 04 60 00 00 04 00 DE 28 11 94 06 27 DE 28 11 94 06 27 43 4D 4E 45 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 68 16 IP 备用ip
else if (flag == 9)
{
string[] zhuip = txtIP1.Text.Split('.');
string[] beiip = txtip2.Text.Split('.');
int port1 = Convert.ToInt32(txtport1.Text);
int port2 = Convert.ToInt32(txtport2.Text);
byte[] buf = new byte[30 32 6 2];
buf[0] = 0x68;
buf[1] = 0xfa;
buf[2] = 0x00;
buf[3] = 0xfa;
buf[4] = 0x00;
buf[5] = 0x68;
buf[6] = 0x4a;
buf[7] = GetLowByte(Convert.ToInt16(addr1.ToString(), 16));
buf[8] = GetHighByte(Convert.ToInt16(addr1.ToString(), 16));
buf[9] = GetLowByte(Convert.ToInt32(addr2));
buf[10] = GetHighByte(Convert.ToInt32(addr2));
buf[11] = 0x02;
buf[12] = 0x04;
buf[13] = 0xf0;
buf[14] = 0x00;
buf[15] = 0x00;
buf[16] = 0x04;
buf[17] = 0x00;
buf[18] = (byte)Convert.ToInt32(zhuip[0]);
buf[19] = (byte)Convert.ToInt32(zhuip[1]);
buf[20] = (byte)Convert.ToInt32(zhuip[2]);
buf[21] = (byte)Convert.ToInt32(zhuip[3]);
buf[22] = GetLowByte(port1);
buf[23] = GetHighByte(port1);
buf[24] = (byte)Convert.ToInt32(beiip[0]);
buf[25] = (byte)Convert.ToInt32(beiip[1]);
buf[26] = (byte)Convert.ToInt32(beiip[2]);
buf[27] = (byte)Convert.ToInt32(beiip[3]);
buf[28] = GetLowByte(port2);
buf[29] = GetHighByte(port2);
byte[] apn = System.Text.Encoding.ASCII.GetBytes(txtapn1.Text);
apn.CopyTo(buf, 30);
buf[buf.Length - 8] = 0x00;
buf[buf.Length - 7] = (byte)Convert.ToInt32((DateTime.Now.Second).ToString(), 16);
buf[buf.Length - 6] = (byte)Convert.ToInt32((DateTime.Now.Minute).ToString(), 16);
buf[buf.Length - 5] = (byte)Convert.ToInt32((DateTime.Now.Hour).ToString(), 16);
buf[buf.Length - 4] = (byte)Convert.ToInt32((DateTime.Now.Day).ToString(), 16);
buf[buf.Length - 3] = 0x00;
for (int s = 6; s < buf.Length - 2; s ) //校验和
{
buf[buf.Length - 2] = (byte)(buf[buf.Length - 2] buf[s]);
}
buf[buf.Length - 1] = 0x16;
Log("发送设置主站IP:" strHex.byteToHexStr(buf));
serialPort1.Write(buf, 0, buf.Length);
}
//68 9A 00 9A 00 68 4A 17 02 81 24 02 04 F0 00 00 01 0B 01 41 EA 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 56 39 11 16 00 EF 16 修改终端逻辑地
//68 82 00 82 00 68 4A 17 02 81 24 02 04 70 00 00 01 0B 01 41 EA 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EF 16
else if (flag == 10)
{
byte[] buf = new byte[40];
buf[0] = 0x68;
buf[1] = 0x82;
buf[2] = 0x00;
buf[3] = 0x82;
buf[4] = 0x00;
buf[5] = 0x68;
buf[6] = 0x4a;
buf[7] = GetLowByte(Convert.ToInt16(addr1.ToString(), 16));
buf[8] = GetHighByte(Convert.ToInt16(addr1.ToString(), 16));
buf[9] = GetLowByte(Convert.ToInt32(addr2));
buf[10] = GetHighByte(Convert.ToInt32(addr2));
buf[11] = 0x02;
buf[12] = 0x04;
buf[13] = 0x70;
buf[14] = 0x00;
buf[15] = 0x00;
buf[16] = 0x01;
buf[17] = 0x0B;
buf[18] = GetLowByte(Convert.ToInt16(txtNewaddr1.Text, 16));
buf[19] = GetHighByte(Convert.ToInt16(txtNewaddr1.Text, 16));
buf[20] = GetLowByte(Convert.ToInt32(txtNewaddr2.Text));
buf[21] = GetHighByte(Convert.ToInt32(txtNewaddr2.Text));
buf[22] = 0x00;
buf[23] = 0x00;
buf[24] = 0x00;
buf[25] = 0x00;
buf[26] = 0x00;
buf[27] = 0x00;
buf[28] = 0x00;
buf[29] = 0x00;
buf[30] = 0x00;
buf[31] = 0x00;
buf[32] = 0x00;
buf[33] = 0x00;
buf[34] = 0x00;
buf[35] = 0x00;
buf[36] = 0x00;
buf[37] = 0x00;
//buf[38] = 0x00;
//buf[39] = (byte)(Convert.ToInt32(DateTime.Now.Second.ToString(), 16));
//buf[40] = (byte)(Convert.ToInt32(DateTime.Now.Minute.ToString(), 16));
//buf[41] = (byte)(Convert.ToInt32(DateTime.Now.Hour.ToString(), 16));
//buf[42] = (byte)(Convert.ToInt32(DateTime.Now.Day.ToString(), 16));
//buf[43] = 0x00;
buf[38] = 0x00;
for (int s = 6; s < 38; s ) //校验和
{
buf[38] = (byte)(buf[buf.Length - 2] buf[s]);
}
buf[buf.Length - 1] = 0x16;
Log("发送设置终端地址:" strHex.byteToHexStr(buf));
serialPort1.Write(buf, 0, buf.Length);
}
//厂内初始化 68 72 00 72 00 68 41 01 41 6F 00 02 01 60 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8F 16
else if (flag == 11)
{
byte[] buf = new byte[36];
buf[0] = 0x68;
buf[1] = 0x72;
buf[2] = 0x00;
buf[3] = 0x72;
buf[4] = 0x00;
buf[5] = 0x68;
buf[6] = 0x41;
if (txtNewaddr1.Text != "" && txtNewaddr2.Text != "")
{
buf[7] = GetLowByte(Convert.ToInt16(txtNewaddr1.Text.ToString(), 16));
buf[8] = GetHighByte(Convert.ToInt16(txtNewaddr1.Text.ToString(), 16));
buf[9] = GetLowByte(Convert.ToInt32(txtNewaddr2.Text));
buf[10] = GetHighByte(Convert.ToInt32(txtNewaddr2.Text));
}
else
{
buf[7] = GetLowByte(Convert.ToInt16(addr1.ToString(), 16));
buf[8] = GetHighByte(Convert.ToInt16(addr1.ToString(), 16));
buf[9] = GetLowByte(Convert.ToInt32(addr2));
buf[10] = GetHighByte(Convert.ToInt32(addr2));
}
buf[11] = 0x02;
buf[12] = 0x01;
buf[13] = 0x60;
buf[14] = 0x00;
buf[15] = 0x00;
buf[16] = 0x20;
buf[17] = 0x00;
buf[18] = 0x00;
buf[19] = 0x00;
buf[20] = 0x00;
buf[21] = 0x00;
buf[22] = 0x00;
buf[23] = 0x00;
buf[24] = 0x00;
buf[25] = 0x00;
buf[26] = 0x00;
buf[27] = 0x00;
buf[28] = 0x00;
buf[29] = 0x00;
buf[30] = 0x00;
buf[31] = 0x00;
buf[32] = 0x00;
buf[33] = 0x00;
//buf[34] = 0x00;
//buf[35] = (byte)(Convert.ToInt32(DateTime.Now.Second.ToString(), 16));
//buf[36] = (byte)(Convert.ToInt32(DateTime.Now.Minute.ToString(), 16));
//buf[37] = (byte)(Convert.ToInt32(DateTime.Now.Hour.ToString(), 16));
//buf[38] = (byte)(Convert.ToInt32(DateTime.Now.Day.ToString(), 16));
//buf[39] = 0x00;
buf[34] = 0x00;
for (int s = 6; s < 34; s ) //校验和
{
buf[buf.Length - 2] = (byte)(buf[buf.Length - 2] buf[s]);
}
buf[buf.Length - 1] = 0x16;
Log("发送厂内初始化:" strHex.byteToHexStr(buf));
serialPort1.Write(buf, 0, buf.Length);
}
}
catch (Exception ex)
{
MessageBox.Show("Error" ex, "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void buttonOpen_Click(object sender, EventArgs e)
{
try
{
if (buttonOpen.Text == "打开")
{
serialPort1.PortName = comPN.Text;
serialPort1.BaudRate = Convert.ToInt16(Bdrate.Text);
serialPort1.Parity = Parity.Even; //效验码
serialPort1.DataBits = 8; //数据位
serialPort1.StopBits = StopBits.One; //停止位
}
if (!serialPort1.IsOpen)
{
serialPort1.Open();
comPN.Enabled = false;
Bdrate.Enabled = false;
buttonOpen.Text = "关闭";
MessageBox.Show("串口打开成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
ini.WriteString("NetworkConfiguration", "COM", comPN.Text);
// toolStripStatusLabel1.Text = "串口号:" COM " 波特率:" BaudRate "状态:已打开";
}
else
{
comPN.Enabled = true;
Bdrate.Enabled = true;
button4.Enabled = true;
serialPort1.Close();
buttonOpen.Text = "打开";
MessageBox.Show("串口关闭成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
//toolStripStatusLabel1.Text = "串口号:" COM " 波特率:" BaudRate "状态:已关闭";
}
}
catch (Exception ex)
{
MessageBox.Show("Operation error" ex.ToString(), "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void btnRS232_Click(object sender, EventArgs e)
{
sendCmd(1);
}
private void richTextBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
richTextBox1.Clear();
}
IniFiles ini = new IniFiles("config/tcpserver.ini");
private void Form1_Load(object sender, EventArgs e)
{
txtIP1.Text = this.ini.ReadString("NetworkConfiguration", "ip1", "");
txtip2.Text = this.ini.ReadString("NetworkConfiguration", "ip2", "");
txtport1.Text = this.ini.ReadString("NetworkConfiguration", "port1", "9990");
txtport2.Text = this.ini.ReadString("NetworkConfiguration", "port2", "9990");
txtapn1.Text = this.ini.ReadString("NetworkConfiguration", "apn1", "9990");
Bdrate.SelectedIndex = 2;
//串口加载
string[] ports = SerialPort.GetPortNames();
Array.Sort(ports);
comPN.Items.AddRange(ports);
try
{
comPN.Text = this.ini.ReadString("NetworkConfiguration", "COM", "COM1");
}
catch (Exception ex)
{ }
// txtapn2.Text = this.ini.ReadString("NetworkConfiguration", "apn2", "9990");
//txtPort.Text = this.ini.ReadString("NetworkConfiguration", "Port", "9990");
//modeSql = this.ini.ReadString("NetworkConfiguration", "modeSql", "update");
//DelayOnline = this.ini.ReadString("NetworkConfiguration", "DelayOnline", "2");
//ForwardingPort = this.ini.ReadString("NetworkConfiguration", "ForwardingPort", "8001"); //转发端口
//noexe = this.ini.ReadString("NetworkConfiguration", "NoExe", "1");
}
private void btnstart_Click(object sender, EventArgs e)
{
sendCmd(2);
}
private void btnstop_Click(object sender, EventArgs e)
{
sendCmd(3);
}
private void button4_Click(object sender, EventArgs e)
{
rowsCount = 0;
try
{
button4.Enabled = true;
state = false;
if (!serialPort1.IsOpen)
{
MessageBox.Show("Close success", "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
if (state == false)
{
sendCmd(1);
//if (state11 == false) retrun;
//delayTime(5);
while (true) if (state11 != 0) break; else delayTime(1);
if (state11 == 1 || addr2.ToString() == "0")
{
Log("地址读取失败,请检测RS232设置!");
button4.Enabled = true;
// serialPort1.Close();
return;
//buttonOpen.Text = "Open";
}
state = true;
//delayTime(5);
}
if (state == true)
{
if (checkBox6.Checked == true)
{
if (txtIP1.Text != "" && txtport1.Text != "" && txtapn1.Text != "")
{
sendCmd(9);
//delayTime(5);
while (true) if (state11 != 0) break; else delayTime(1);
if (state11 == 1)
{
Log("未接收到数据!");
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
}
else
{
MessageBox.Show("主ip、端口、apn不能为空");
state = false;
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
}
if (checkBox1.Checked == true)
{
//催费告警
sendCmd(2);
while (true) if (state11 != 0) break; else delayTime(1);
// delayTime(5);
if (state11 == 1)
{
Log("未接收到数据!");
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
}
//校时
sendCmd(7);
while (true) if (state11 != 0) break; else delayTime(1);
if (state11 == 1)
{
Log("未接收到数据!");
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
//delayTime(5);
sendCmd(8);
while (true) if (state11 != 0) break; else delayTime(1);
if (state11 == 1)
{
Log("未接收到数据!");
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
//delayTime(5);
if (checkBox4.Checked == true)
{
sendCmd(6);
while (true) if (state11 != 0) break; else delayTime(1);
if (state11 == 1)
{
Log("未接收到数据!");
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
delayTime(Convert.ToInt32(txtsecond.Text));
}
if (checkBox3.Checked == true)
{
sendCmd(3);
while (true) if (state11 != 0) break; else delayTime(1);
if (state11 == 1)
{
Log("未接收到数据!");
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
// delayTime(5);
}
if (checkBox2.Checked == true)
{
sendCmd(4);
// MessageBox.Show(stateVer.ToString());
while (true) if (state11 != 0) break; else delayTime(1);
if (state11 == 1)
{
Log("未接收到数据!");
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
if (stateVer == true)
{
MessageBox.Show("默认版本不一致,请检查!!");
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
delayTime(3);
}
if (checkBox5.Checked == true)
{
if (txtNewaddr1.Text != "" && txtNewaddr2.Text != "")
{
sendCmd(10);
while (true) if (state11 != 0) break; else delayTime(1);
if (state11 == 1)
{
Log("未接收到数据!");
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
//delayTime(5);
}
else
{
MessageBox.Show("终端区划码和地址不能为空");
state = false;
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
}
if (checkBox7.Checked == true)
{
sendCmd(11);
rowsCount = 7;
while (true)
if (state11 != 0) break; else delayTime(1);
if (state11 == 1)
{
Log("未接收到数据!");
button4.Enabled = true;
//serialPort1.Close();
//buttonOpen.Text = "Open";
return;
}
//delayTime(120);
}
txtaddr1.Text = "";
txtaddr2.Text = "";
state = false;
//System.Threading.Thread.Sleep(2000);
//serialPort1.Close();
//System.Threading.Thread.Sleep(2000);
// buttonOpen.Text = "Open";
return;
}
}
}
catch (Exception ex)
{
MessageBox.Show("出现错误" ex.ToString());
}
}
private void delayTime(double secend)
{
DateTime tempTime = DateTime.Now;
while (tempTime.AddSeconds(secend).CompareTo(DateTime.Now) > 0)
Application.DoEvents();
}
private void button3_Click(object sender, EventArgs e)
{
sendCmd(4);
}
private void button1_Click(object sender, EventArgs e)
{
sendCmd(6);
}
private void button5_Click(object sender, EventArgs e)
{
sendCmd(7);
}
private void button2_Click(object sender, EventArgs e)
{
sendCmd(8);
}
private void btnsetIP_Click(object sender, EventArgs e)
{
sendCmd(9);
}
private void btnSetaddr_Click(object sender, EventArgs e)
{
sendCmd(10);
}
private void button6_Click(object sender, EventArgs e)
{
sendCmd(11);
}
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
button4_Click(null, null);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
}
}
}