OPC UA的原始碼使用

2021-08-20 17:36:51 字數 2109 閱讀 8101

1、修改上的坑

著手改動顯示的節點,這個改動是在underlyingsystem.cs這個檔案中,開啟檔案時就能看到s_blockpathdatabase和s_blockdatabase這兩個string的陣列,從陣列的內容就知道是節點和節點的內容了,在看看下面的findsegments(),findsegment(),findblocks(),findblock(),這幾個函式的寫法,其實就是解析這兩個陣列,如果是segment就繼續返回segment,如果是block就顯示內容,這裡有兩個概念,segment,block,我的理解是,segment是路徑的而且,block才是真正的容易,所以如果要做一級級的路徑,可以參考這個,我是直接在一級segment下就是block,所以不會這麼多級的。

在這裡要注意乙個事情,在dataaccessnodemanager.cs這個檔案中有乙個createaddressspace(idictionary> externalreferences)的方法這個方法,在建立連線的時候會呼叫,有乙個比較奇怪的現象,就是createaddressspace()之後,再呼叫addreference()新增節點是不會重新整理的,這個可能是我的使用方法不對。

這之後就很簡單了,改動findblock裡,返回直接的block就好了,如果想新增segment,就在s_blockpathdatabase這個陣列裡面新增自己的segment就好了,但要記得在最後面加上『/』斜桿,這樣findsegment才能找到的。

2、部署的問題

opc ua為了保障安全(這個肯定是要的),就搞了個證書驗證的過程,這個使用起來就有點尷尬了。在區域網的兩台機器上連線的話,會報錯:the domain x is not listed in the server certificate.這個在原始碼裡面看看是什麼原因。

private static void checkcertificatedomain(configuredendpoint endpoint)

else

}else

}if (islocalhost)

for (int ii = 0; ii < domains.count; ii++)}}

if (!domainfound)

' is not listed in the server certificate.",

endpoint.endpointurl.dnssafehost);

throw new serviceresultexception(statuscodes.badcertificatehostnameinvalid, message);

}}

看到domainfound是去判斷連線的位址是不是在證書裡面。domains這個列表是怎麼得到的。

public static ilistgetdomainsfromcertficate(x509certificate2 certificate)}}

if (builder.length > 0)

// extract the alternate domains from the subject alternate name extension.

x509subjectaltnameextension alternatename = null;

foreach (x509extension extension in certificate.extensions)

}if (alternatename != null)

}if (!found)

}for (int ii = 0; ii < alternatename.ipaddresses.count; ii++)}}

// return the list.

return dnsnames;

}

在看到有個一判斷字串的開頭是否等於「dc=」這個就要看回配置檔案了,在專案裡面是會有乙個dataaccessserver.config.xml的配置檔案,這個這個檔案裡面就會有一段寫dc=localhost,那麼取出了dc的內容,那麼改掉了dc的內容不就好了,這個想法非常的好,後面的就是從證書的額外資訊裡面提取出來匹配,比較。使用x509證書是可以攜帶額外資訊的。注意:dc欄位只能有乙個,因為多了會用『.』來分隔而已。

到了這一時刻,你就可以在兩台機器上相互連線了。

opc ua 用哪種語言編寫 OPC UA 的本質

接觸opc ua 已經有一段時間了,開始只知道它將是工業4.0 中乙個重要的通訊協議 iec 62541 出於好奇,就了解一下。我看的主要內容包括 open62541 庫和uaexpert,uamodeler等工具軟體。同時也閱讀了opc ua 的標準文字和網路上的許多文章。但是總覺得雲裡霧裡,神龍...

apue原始碼使用

網上大都是針對unix高階程式設計第二版的標頭檔案搭建,現在對於第三版來說有些過時,因為很對針對linux的make檔案已經改變了很多。話不多說,下面就來看看具體的搭建過程 2.解壓檔案 tar zxvf tar.gz 3.cd apue.3e 4.make 在這個過程中,你會看到最後由於can,t...

STL原始碼 traits的使用

關於iterator traits和type traits的使用,我們什麼時候會使用這兩個類?我們怎麼使用?問題 將 first1,last1 區間內的元素複製一遍。我們需要知道first1迭代器的型別。template iter copy iter first1,iter last1 else n...