天天看點

【計算機網絡 14,剛面試了阿裡,滴滴,網易

//異步讀完成 運作時,Array數組從下标1開始而非0!

void GroupAsyncReadComplete(int TransactionID, int NumItems, ref System.Array ClientHandles, ref System.Array ItemValues, ref System.Array Qualities, ref System.Array TimeStamps, ref System.Array Errors)

{

	try

	{

		//C# Dictionary 字典 

		Dictionary<string, string> tagValueMap = new Dictionary<string, string>();

		for (int i = 1; i <= NumItems; i++)

		{

			string clientHandle = ClientHandles.GetValue(i).ToString();

			string tag = MAP_CLIENTHANDLE_TAG[clientHandle];

			string val = ItemValues.GetValue(i).ToString();

			//C# Dictionary 字典 添加資料

			tagValueMap.Add(tag, val);

		}

		//建構json

		string json = ParseOPCData(tagValueMap);

	}

	catch (Exception ex)

	{

		

	}

}

           

為全局變量OPCGroup添加items,在OPC中,每個opcltem會被配置設定一個用戶端句柄值,同時會被配置上伺服器句柄。幾乎所有有關擷取指定Opcltem對象的方法均要求指定用戶端句柄值。

上圖中有一C# Dictionary 字典,暫不做贅述,待下回分解。

關于C# dictionary字典

//goup添加items

string[] sensorIdArray;

void  AddGroupItems()

{

	List<string> l_str = new List<string>();

	//讀取配置檔案,擷取需要的傳感器ID

	string sensorIdList = getSensorId();

	sensorIdArray = sensorIdList.Replace("\r\n","").Split(',');

	foreach (string sensorId in sensorIdArray){

		l_str.Add(sensorId+"_COS");

		l_str.Add(sensorId+"_DL1");

		l_str.Add(sensorId+"_DL2");

		l_str.Add(sensorId+"_DL3");

		l_str.Add(sensorId+"_DL4");

		l_str.Add(sensorId+"_IA");

		l_str.Add(sensorId+"_IB");

		l_str.Add(sensorId+"_IC");

		l_str.Add(sensorId+"_P");

		l_str.Add(sensorId+"_Q");

		l_str.Add(sensorId+"_UAB");

		l_str.Add(sensorId+"_UBC");

		l_str.Add(sensorId+"_UCA");

	}

	List<OPCItem> ItemsAdded = new List<OPCItem>();

	int n = 0;

	MAP_CLIENTHANDLE_TAG = new Dictionary<string, string>();

	foreach (string tag in l_str){

		ItemsAdded.Add(KepItems.AddItem(tag + ".PV", n));

		//clientHandle tag關系

		MAP_CLIENTHANDLE_TAG.Add(n + "", tag);

		n++;

	}

	OPC_ITEMS_ADDED = ItemsAdded.ToArray();

}

           

OPCServer服務端資料源item

【計算機網絡 14,剛面試了阿裡,滴滴,網易

這段代碼設計為了擷取到全部的OPCltem所添加到所建立的OPCGroup對象的opcitem集合中,得到添加到goup中的item(OPC_ITEMS_ADDED)。

通過OPC_ITEMS_ADDED采集opc資料

//采集opc資料

private void GetOPCData()

{

	try

	{

		//異步讀opc資料

		int[] temp = new int[OPC_ITEMS_ADDED.Length + 1];

		temp[0] = 0;

		for (int i = 1; i <= OPC_ITEMS_ADDED.Length; i++)

		{

			temp[i] = OPC_ITEMS_ADDED[i - 1].ServerHandle;

		}

		Array serverHandles = (Array)temp;

		Array Errors;

		int cancelID;

		Random rd = new Random();

		int TransactionID = rd.Next(1, 10);

		KepGroup.AsyncRead(serverHandles.Length - 1, ref serverHandles, out Errors, TransactionID, out cancelID);//第一參數為item數量

	}

	catch (Exception ex)

	{       	

		MessageBox.Show(ex.Message);

	}

}

           

解析OPC資料并以json格式存儲在本地

//解析opc資料

private string ParseOPCData(Dictionary<string, string> tagValueMap)

{

	string filename = "E:\\mine\\下峪口\\data\\electric_data.txt";

	StringBuilder builder = new StringBuilder();

	string rowStr = "";

	string time = ConvertDateTimeToInt(DateTime.Now).ToString();

	rowStr += "[";

	foreach (string sensorId in sensorIdArray){

		rowStr += "{\r\n\"id\":"+ "\"" + sensorId + "\",\r\n";

		rowStr += "\"substation\":"+"\"假變電所\""+",\r\n";

		rowStr += "\"timestamp\":"+time+",\r\n";

		foreach (var item in tagValueMap)

		{

			string key = item.Key;

			string[] data = item.Key.Split('_');

			string title = data[0];

			string word = data[1];

			if(title.Equals(sensorId)){

				rowStr += "\""+ word + "\""+ ":" + item.Value + ",\r\n";

			}

		}

		rowStr += "},";

	}

	rowStr += "]";

	rowStr = rowStr.Replace(",\r\n}","\r\n}").Replace(",]","]");

	builder.Append(rowStr);

	File.WriteAllText(@filename, builder.ToString(), Encoding.GetEncoding("gb2312"));



# **Java高頻面試專題合集解析:**

![阿裡Java崗面試百題:Spring 緩存 JVM 微服務 資料庫 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/622f5c57cda58627218db5aab7059d42.png)

當然在這還有更多整理總結的Java進階學習筆記和面試題未展示,在這也是免費分享給那些有需要的朋友,其中囊括了**Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并發等架構資料和完整的Java架構學習進階導圖!**

**[CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視訊】](https://codechina.csdn.net/m0_60958482/java-p7)**![阿裡Java崗面試百題:Spring 緩存 JVM 微服務 資料庫 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/00b17269e8c4a31507b4ef7b54e2f2f7.png)

**更多Java架構進階資料展示**

![阿裡Java崗面試百題:Spring 緩存 JVM 微服務 資料庫 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/17e3b6d9ebdf53818f7a22417ea27391.png)

![阿裡Java崗面試百題:Spring 緩存 JVM 微服務 資料庫 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/b475b62fd215abeb349563996312e253.png)

d、分布式、高并發等架構資料和完整的Java架構學習進階導圖!**

**[CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視訊】](https://codechina.csdn.net/m0_60958482/java-p7)**[外鍊圖檔轉存中...(img-7OeChKCZ-1630931682611)]

**更多Java架構進階資料展示**

[外鍊圖檔轉存中...(img-YGmftmhf-1630931682612)]

[外鍊圖檔轉存中...(img-7FPKryBC-1630931682614)]

![阿裡Java崗面試百題:Spring 緩存 JVM 微服務 資料庫 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/19acd31c6a08f52c746af8e16641d2de.png)