最近在做一個與S7-1200PLC通訊的專案,用C#與PLC通過kepsever通訊,按照網上說的參考Interop.OPCAutomation.dll檔案。
從KEPSERVER讀資料是沒有問題,但是下發資料時會出現“對COM組件的呼叫回傳了錯誤 HRESULT E_FAIL"
一直沒有解決,望大家幫幫忙
代碼如下:(主要是寫入的代碼)
public void Write_PLC()
{
Array AsyncValue_Wt;
Array SerHandles;
object[] tmpWtData = new object[8];//寫入的資料必須是object型的,否則會報錯
int[] tmpSerHdles = new int[8];
//將輸入資料賦給陣列,然后再轉成Array型送給AsyncValue_Wt
tmpWtData[1] = (object)Pub_Var.Valve_Set;
tmpWtData[2] = (object)Pub_Var.Pinlv_Set;
tmpWtData[3] = (object)Pub_Var.shuju[1];
tmpWtData[4] = (object)Pub_Var.shuju[2];
tmpWtData[5] = (object)Pub_Var.shuju[3];
tmpWtData[6] = (object)Pub_Var.shuju[4];
tmpWtData[7] = (object)Pub_Var.shuju[5];
//tmpWtData[4] = (object)Pub_Var.Percent_LD[1];
AsyncValue_Wt = (Array)tmpWtData;
//將輸入資料送給的Item對應服務器句柄賦給陣列,然后再轉成Array型送給SerHandles
tmpSerHdles[1] = Convert.ToInt32(lserverhandles.GetValue(30));//確定設定通道???
tmpSerHdles[2] = Convert.ToInt32(lserverhandles.GetValue(28));
tmpSerHdles[3] = Convert.ToInt32(lserverhandles.GetValue(2));
tmpSerHdles[4] = Convert.ToInt32(lserverhandles.GetValue(1));
tmpSerHdles[5] = Convert.ToInt32(lserverhandles.GetValue(3));
tmpSerHdles[6] = Convert.ToInt32(lserverhandles.GetValue(4));
tmpSerHdles[7] = Convert.ToInt32(lserverhandles.GetValue(5));
SerHandles = (Array)tmpSerHdles;
objGroup.AsyncWrite(7, ref SerHandles, ref AsyncValue_Wt, out lErrors_Wt, lTransID_Wt, out lCancelID_Wt);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/228666.html
標籤:C#
