具体是这样的,PLC通过GPRS RTU 发送数据到远程windows上位机,上微机通过连接在串口的GPRS接收端拨号到因特网接收数据,请问C#如何接收通过串口到达的GPRS数据呢?俺是一点思路也没有,麻烦高手们帮忙给些思路。
接收的协议如下:
瞬时数据PLC 主动发送:028001#3F49B39D000000004263E7EA3EE0323D4256B34B##02 站号01 井号3F49B39D 浮点数 测量液量 (m3/h)00000000 浮点数 测量气量 (m3/h)4263E7EA 浮点数 测量含水率 (%)3EE0323D 浮点数 测量压力 (MPa)4256B34B 浮点数 测量温度 (℃)日测量数据上位发送命令 去 取数据发送命令 :0302##返回数据
:038006#Day#000C00140009001B3FB25885000000004271A63B3F158E80415DD21F##03 站号06 井号000C00140009001B 整数 分别 是 月 日 时 分40009001B 浮点数 测量液量 (m3/d)3FB25885 浮点数 测量油量 (m3/d)00000000 浮点数 测量气量 (m3/d)4271A63 浮点数 测量含水率 (%)3F158E80 浮点数 测量压力 (MPa)415DD21F 浮点数 测量温度 (℃)
接收的协议如下:
瞬时数据PLC 主动发送:028001#3F49B39D000000004263E7EA3EE0323D4256B34B##02 站号01 井号3F49B39D 浮点数 测量液量 (m3/h)00000000 浮点数 测量气量 (m3/h)4263E7EA 浮点数 测量含水率 (%)3EE0323D 浮点数 测量压力 (MPa)4256B34B 浮点数 测量温度 (℃)日测量数据上位发送命令 去 取数据发送命令 :0302##返回数据
:038006#Day#000C00140009001B3FB25885000000004271A63B3F158E80415DD21F##03 站号06 井号000C00140009001B 整数 分别 是 月 日 时 分40009001B 浮点数 测量液量 (m3/d)3FB25885 浮点数 测量油量 (m3/d)00000000 浮点数 测量气量 (m3/d)4271A63 浮点数 测量含水率 (%)3F158E80 浮点数 测量压力 (MPa)415DD21F 浮点数 测量温度 (℃)
解决方案 »
- 请教两个关于.NET的文档注释的问题
- 如何知道事件體已經綁定了某個事件?
- 请问CSDN上面的散分系统是怎么实现的?高分等待中......
- 在位置 2 处没有任何行 dataset的问题???
- 求助网站日访问量代码
- 在webform中,新打开的页面可以调用原来的页面代码的函数吗?
- 关于ASP.NET很简单的问题!
- help,怎样在一个form1中控制另一个form2的控件呀??(在线等,解决立马放分)
- 定义问题
- 调用方法从数据中查询DataTable,然后排序合并没问题,可返回到界面却没有排序和合并,这是为什么呢
- 小问题:listview
- DataGridView的DataGridViewComboBoxCell的问题
http://blog.sina.com.cn/s/blog_49b95c2101000a1v.htmlhttp://topic.csdn.net/u/20070426/09/54429632-f2c8-4316-9d7e-cc765c2f394e.html
没准有帮助。
{
try
{
port.Open();
timer1.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show("Port can't Open! " + ex.Message);
this.Close(); }
finally
{
// Close the port
port.Close();
}
}
private void READ_button_Click(object sender, EventArgs e)
{
try
{
// Open the port for communications
port.Open();
// Write a string
port.WriteLine("01RETR");
//這里就可以寫樓主的“0302##” DATA_textBox.Text = port.ReadLine();
}
catch (Exception ex)
{
MessageBox.Show("Port can't Open! " + ex.Message);
}
finally
{
// Close the port
port.Close();
}
}
很多类型的都有!!
看看吧!!
加一个timer控件,设置好时间间隔即可
至于接受串口数据,调用api函数
2.在接受的时后,如异步通讯时取出data
COMSocket下的
public void receive()
{
//一些接收回调的代码。收到数据就
DataProcessor.PassData(data)}DataRecProcessor静态方法类处理你接受数据的模式或数据类别
public static void PassData(byte[] data)
{
switch
//...
case
//...调用你具体的处理方法DataProcessor.SerialPortRecXXOO}DataProcessor{
public static void SerialPortRecXXOO(byte[] data)//处理气象数据
{
//byte[] to 结构struct 转换的方法调用气象数据结构.站号 .tostring()就得到了你要的值
如果是byte[],encoding.default.getstring(000C00140009001B 整数 分别 是 月 日 时 分 );////这个你们发出去也要是string 转换byte[]发
}public void byte2struct (byte[] data)
{}
}
//声明气象数据结构 这里你要看一下具体的数据结构,能pass出每一位值,还有序列化数据,根据需要声明byte或byte[]
struct 气象数据结构名
{
/*
public byte 03 站号 06 井号 000C00140009001B 整数 分别 是 月 日 时 分 40009001B 浮点数 测量液量 (m3/d) 3FB25885 浮点数 测量油量 (m3/d) 00000000 浮点数 测量气量 (m3/d) 4271A63 浮点数 测量含水率 (%) 3F158E80 浮点数 测量压力 (MPa) 415DD21F 浮点数 测量温度 (℃) */
}不明白了就问我[email protected]
等readline接受到数据进行字符串处理,