工作日志。接收合并器发送的数据并进行相应的分析,最后进行存储。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
接收合并器发送来的数据并进行相应的处理#region 接收合并器发送来的数据并进行相应的处理
2![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
3![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
4
/// 接收合并器信息
5
/// </summary>
6
static void Recive(int port)
7![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
8
bool myBool;
9![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//初始化一个Scoket协议
11![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
//IPAddress receiveIPAddress = IPAddress.Parse("192.168.137.110");
13![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
IPEndPoint iep = new IPEndPoint(IPAddress.Any, port);//初始化一个侦听局域网内部所有IP和指定端口
15![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
EndPoint ep = (EndPoint)iep;
17![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
socket.Bind(iep);//绑定这个实例
19![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
while (true)
21![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
22
byte[] buffer = new byte[104];//设置缓冲数据流
23![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
socket.ReceiveFrom(buffer, ref ep);//接收数据,并确把数据设置到缓冲流里面
25![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
myBool = Check(buffer);
27
if (myBool)
28![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
29
if (buffer[2] == 0x0c)
30![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
31
ZhiLiu(buffer);
32
}
33
else
34![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
35
YaoCe(buffer);
36
}
37
}
38
}
39
}
40![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
42
/// 校验接收上来的字符串是否正确
43
/// </summary>
44
static bool Check(byte[] myByte)
45![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
46
//校验位
47
byte bt=myByte[0];
48
49![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
//如果是收上来直流量或遥信
51
if (myByte[1] == 0x0c)
52![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
53
for (int i = 0; i < 16; i++)
54![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
55
bt = (byte)(bt ^ myByte[i + 1]);
56
}
57
if (bt == myByte[16])
58
return true;
59
else return false;
60
}
61
else
62![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
63
int num = YaoCeLuShu(myByte);
64
int ziJieShu = 8 * num + 8;
65![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
for (int i = 0; i < ziJieShu-1; i++)
67![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
68
bt = (byte)(bt ^ myByte[i + 1]);
69
}
70
if (bt == myByte[ziJieShu-1])
71
return true;
72
else return false;
73
}
74
}
75![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
77
/// 对直流量和遥信进行处理
78
/// </summary>
79
static void ZhiLiu(byte[] myByte)
80![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
81
//32路遥信量data。表示是否为1
82
int []yaoXinD=new int [32];
83![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
84
//两路直流量data
85
int [] zhiLiuD=new int[2];
86![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
//设备号
88
int no = (int)myByte[0];
89![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
90
//表示2+32个sno号.myInt[0]与myInt[1]表示直流量。其余表示状态量。10|00000|000000
91
int[] zhiLiu = new int[34];
92![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
zhiLiu[0] = 1 * 2024 + 0 + no;
94
zhiLiu[1] = 1 * 2024 + 1 * 64 + no;
95
96
//32个状态量编号
97
for (int i = 0; i < 32; i++)
98![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
99
zhiLiu[i + 2] = (3 * 8 + i / 4) * 256 + i % 4 + no;
100
}
101
102
//直流量数据1
103
for (int i = 0; i < 4; i++)
104![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
105
zhiLiu[0] += (int)myByte[5 - i] *(int) Math.Pow(256, i);
106
}
107![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
108
//直流量数据2
109
for (int i = 0; i < 4; i++)
110![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
111
zhiLiuD[1] += (int)myByte[9 - i] * (int)Math.Pow(256, i);
112
}
113![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
114
//循环计数器
115
int m = 0;
116![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
117
//求32位的状态信息
118
for (int i = 0; i < 4; i++)
119![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
120
for (int j = 0; j < 8; j++)
121![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
122
yaoXinD[m] = myByte[i + 10] &((int) Math.Pow(2, j));
123
m++;
124
}
125
}
126![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
//发送2个直流量数据
128
for (int i = 0; i < 2; i++)
129![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
130
Updata(zhiLiuD[i], zhiLiu[i]);
131
}
132![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133
//发送32个遥信量
134
for (int i = 0; i < 32; i++)
135![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
136
Updata(yaoXinD[i],zhiLiu[i+2]);
137
}
138
139
}
140![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
141![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
142
/// 对遥测信息进行相应的存储
143
/// </summary>
144
static void YaoCe(byte[] myByte)
145![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
146
int yaoCeShu=YaoCeLuShu(myByte);
147![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
148
//设备编号
149
int no = (int)myByte[0];
150![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
151
//12路遥测号
152
int []yaoCeH=new int [12];
153![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
154
//48个数据
155
int []yaoCeD=new int [4*yaoCeShu];
156![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157
//十二路的遥测号码。00|00000|000000
158
for (int i = 0; i < yaoCeShu; i++)
159![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
160
yaoCeH[i] = (i / 4) * 256 + (i % 4) * 64 + no;
161
}
162![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
163
//循环求48个数据
164![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
165
for (int j = 0; j < 4 * yaoCeShu; j++)
166![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
167
yaoCeD[j] = myByte[7+2*j] * 256 + myByte[7+2*j+1];
168
}
169![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
170
for (int i = 0; i < 4 * yaoCeShu; i++)
171![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
172
int j = i % yaoCeShu;
173
Updata(yaoCeD[i], yaoCeH[j]);
174
}
175
176
}
177![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
178![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
179
/// 计算遥测共多少路
180
/// </summary>
181
static int YaoCeLuShu(byte[] myByte)
182![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
183
//判断有多少路信息
184
int num = 0;
185![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
186
//判断4位中有几位是1
187
for (int i = 0; i < 4; i++)
188![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
189
int j = 0;
190
j = myByte[3] & (int)Math.Pow(2, i);
191
if (j == 0)
192
num++;
193
}
194![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
195
//判断8位中有几位是1
196
for (int i = 0; i < 8; i++)
197![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
198
int j = 0;
199
j = myByte[4] & (int)Math.Pow(2, i);
200
if (j == 0)
201
num++;
202
}
203![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
204
return num;
205
}
206![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
207
static void Update(long data, int sno)
208![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
209
}
210![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
211
static void Updata(int data, int sno)
212![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
213
}
214![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
215
#endregion
216![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)