guanying14
級別: *
|
有沒哪位高手用過S7224XPCN的自由端口與用VB編寫的軟件通訊咯?,以前我們編寫的VB軟件和三菱的FX2N系列通訊的話,只需將端口的通訊參數寫入D8120和設置站號,而軟件只需設定一樣的端口參數即可通訊。不知道西門子的通訊口這樣做行不行,看過實例,都是需要經過初始化端口,編寫接受、發送子程序、還用了不少的中斷。。挺復雜的。。而且當端口設置為自由端口通訊后。。。上位機與PLC之間的通訊線是否是用普通的RS485通訊線呢還是用PPI的專用通訊電纜呢?,有沒哪位高手指點下。。。急啊。。。 |
---|---|
|
guanying14
級別: *
|
自由端口如果要用專用電纜是需要用哪種可以轉換成485通訊的專用電纜。。如果將端口設置成自由口通訊后。。只需用普通的485通訊線就可以。。自己做都可以。。我試過了,但是暫時還搞不清楚它的數據段的起始地址是如何設置的。至于要轉成485通訊才搞。。哪就是不用說的了。。 |
---|---|
|
guanying14
級別: *
|
一般用原裝電纜的是用PPI協議,不過這個協議是不公開的。。搞不到。。如果是自由口通訊協議的話,是不需要原裝電纜的。。普通的485通訊線既可以。。不過要清楚西門子200的端口線定義。。其485的通訊腳是3和8.我試過是可以通訊的。。只不過我們現在是上位機軟件和下面的PLC是分開兩個人做的。。比較麻煩,切自由口通訊中用到挺多的中斷的,而我讀取其他的信號也需要用這些中斷,所以比較麻煩。。不大想用自由口通訊了。。有點想用OPC通訊。。有那位高手以前用OPC來做過VB和S7200之間的通訊不,有的話能不能發個實例來看看。。西門子叫我下載了一個PC ACCESS,說是OPC的測試客戶端和服務器的集成軟件,遵循OPC的標準協議。。又不說怎么做這個通訊接口。。所以有點迷糊。。救命啊。。。 |
---|---|
|
jxh668
jxh668
級別: 工控俠客
|
OPC解決了什么? OPC誕生以前,硬件的驅動器和與其連接的應用程序之間的接口并沒有統一的標準。例如,在FA(FactoryAutomation)——工廠自動化領域,連接PLC(Programmable Logic Controller)等控制設備和SCADA/HMI軟件,需要不同的FA網絡系統構成。根據某調查結果,在控制系統軟件開發的所需費用中,各種各樣機器的應用程序設計占費用的7成,而開發機器設備間的連接接口則占了3成。此外,在PA(Process Automation)——過程自動化領域,當希望把分布式控制系統(DCS——Distributed Control System)中所有的過程數據傳送到生產管理系統時,必須按照各個供應廠商的各個機種開發特定的接口,例如,利用C語言DLL(動態鏈路數據庫)連接的DDE(動態數據交換)服務器或者利用FTP(文件傳送協定)的文本等設計應用程序。如由4種控制設備和與其連接的監視、趨勢圖以及表報3種應用程序所構成的系統時,必須花費大量時間去開發分別對應設備A,B,C,D的監視,趨勢圖以及表報應用程序的接口軟件共計要用12種驅動器。同時由于系統中共存各種各樣的驅動器,也使維護運轉環境的穩定性和信賴性更加困難。 而OPC是為了不同供應廠商的設備和應用程序之間的軟件接口標準化,使其間的數據交換更加簡單化的目的而提出的。作為結果,從而可以向用戶提供不依靠于特定開發語言和開發環境的可以自由組合使用的過程控制軟件組件產品。 利用OPC的系統,是由按照應用程序(客戶程序)的要求提供數據采集服務的OPC服務器,使用OPC服務器所必需的OPC接口,以及接受服務的OPC應用程序所構成。OPC服務器是按照各個供應廠商的硬件所開發的,使之可以吸收各個供應廠商硬件和系統的差異,從而實現不依存于硬件的系統構成。同時利用一種叫做Variant的數據類型,可以不依存于硬件中固有數據類型,按照應用程序的要求提供數據格式。 利用OPC使接口標準化可以不依存于各設備的內部結構及它的供應廠商來選用監視,趨勢圖以及表報應用程序。 |
|
---|---|---|
|
jxh668
jxh668
級別: 工控俠客
|
也可參考: 在實際應用過程中,某些時候可能會采用VB/DELPHI/VC等高級語言,自主編程與西門子PLC進行通訊,這類帖子、論文在網上都可以找到,在此總結一下。 1、Prodave通訊 Prodave是西門子提供的一個軟件包,為高級語言編程和plc通訊提供接口 通訊接口:MPI因 為MPI口是每塊cpu的編程口,所以plc不需要另外添加通訊模 塊,這個方案就比較經濟,而且prodave軟件包里面附帶了example和詳細的說明,用起來應該比較簡單和方便(本人只匆匆看過文檔,沒有實驗 過)。這方面的資料在百度上很多。當然,mpi的速度是有限的,如果采用普通的pc adapter連接pc和plc,最高速度也就38.4kbps,我不知道prodave能否支持mpi卡(5611之類的話),如果可以的話速度可以達 到187.5kbps。 2、串行通訊 看到過一些論文,采用串行通訊的方法實現pc和plc通訊。這種情況存在幾點要求: a、需要為plc添加一塊串行通訊模塊,比如300的話就需要cp340或者cp341(前者便宜些); b、plc里面需要對串行通訊進行編程,其實也就是接收報文和發送報文,調用fb2/fb3(cp340的話)。 c、串行通訊的速度是有目共睹的,而且cp340或者cp341的數據吞吐量也是有限的,即報文長度是有限制的,因此個人認為通訊數據量大的話采用串行通訊就不合適了。 d、報文格式的話就比較自由,但是也應當合理,我雖然沒有具體實驗過,但是個人認為可以參考modbus的報文結構來編程,甚至就采用modbus的規范,不過這樣的話要求編程者對pc和plc側的modbus編程都要熟悉。 3、OPC Opc是這些年來很流行的東西,其實我很討厭opc的安全認證的設定。不過采用opc編程來訪問plc真的是一件非常輕松愜意的事情。你需要做的就是了解opc的結構和編程,尤其是采用vb來編寫opc簡直是件傻瓜化的工作當然也犧牲了很多。 前面我實驗了用vb通過opc(以太網)來訪問300,包括用西門子的simaticnet提供的opc接口和第三方的kepserver 采用opc接口編程的優點:通訊速度快,編程簡單。 4、以太網編程 采用以太網編程訪問plc,其實又可以分為兩種: 一種是socket接口,需要在plc里面編程進行收/發,大概是fc5/fc6吧,印象不深了,當然plc里面要定義一個connection, 填好地址、端口號之類的信息,這個對于熟悉西門子工業通訊的人是很easy的事情。Pc側采用socket接口編程,最簡單的就是vb里面的wisock 控件,當然這掩蓋了很多細節。Socket編程本來就是一門藝術,講究說學逗唱:) 這個方法的優點應該是pc側編程稍微簡單點(相對于后一種),而且可以不局限于windows平臺,因為socket接口被諸如unix支持的更好。 第二種是采用西門子的 sapi接口函數,這樣plc里面不需要過多的編程了,當然pc側的編程難度就比較高了,ms只能用c來寫,所以我望而卻步鳥。看過相關帖子和論文,有高 人在項目里面就這么干的,而且數據量很大,看來高人很多很多啊,向他們致敬!關于sapi的資料其實都在simaticnet軟件光盤里面,有興趣的可以 去找來看看。 為了允許PC機和工作站上的應用程序與西門子S7系列產品進行S7通訊西門子公司提供了一個SAPI-S7應用程序接口通過它可以靈活而方便地跟西 門子S7系列產品進行通信。安裝SIMATIC Ner軟件后會在系統system32目錄下生成一個S732.dll文件該動態鏈接庫提供了大量基于WindowsNT、Window95/98、 Windows3.11和MS-DOS的函數這樣就使得用戶解決PLC和PC機的數據交換和數據處理問題變為可能。通信編程包括兩個部分:(1)CP連接 組態(2)PLC與上位機通信編程。 4.1 CP連接組態 可采用STEP7軟件或STEP7軟件中用于工業以太網的NCMS7軟件對CP進行網絡組態。通訊處理器CP可連接PCPC/PG上一般裝網卡 CP1613。在Windows控制面板下的“set PC/PG”下安裝所用網卡驅動程序并設協議、站號、波特率、是否為主站完成對VFDs(Virtual Field Device)和S7 connections的配置[4]。 4.2 PLC和上位機的通訊編程 S7-300/400PLC有以下各類資源:①輸入點I:接收外部開關量信號 ②輸出點Q:輸出給外部的開關量信號 ③內部輔助點M:存放所需中間結果 ④時間繼電器T ⑤計數器 ⑥數據塊DB:存放程序數據的存儲區域 ⑦外設輸入PI:主要接收模擬量輸入信號經A/D轉換⑧外設輸出PQ:給出模擬兩輸出值[5]。要讀/寫這些資源首先要建立PLC和PC機的連接。 4.2.1 初始化與PLC的連接 SAPI-S7應用程序接口提供的管理服務模塊(Administrative Services)提供了一些可供讀出配置信息和登錄/退出通訊系統的函數下面作一些簡要介紹[6]: S7_get_device() :通過此函數用戶程序可以查詢所有已安裝的CP的CP名。 S7_get_vfd() :通過此函數用戶程序可以查詢任一指定CP的所有已配置的VFD。 S7_init():通過此函數用戶程序可登錄通訊系統。 S7_get_cref() :此函數提供了一個指向所選S7 connection名的指針。 S7_get_conn():此函數返回已登錄VFD的所有S7connection名和指向他們的指針。 S7_shut():通過此函數用戶程序可退出通訊系 統。 一個應用程序可以登錄一個或多個CP的若干個VFD只有當應用程序登錄CP及其所選的VFD在配置期間指定給該VFD的所有連接才是有效的。 4.2.2讀/寫PLC內部資源 初始化與PLC的連接成功后就可以對PLC進行讀寫操作。對PLC存儲區即數據塊DB的讀寫是實現監控的最基本操作。SAPI-S7應用程序接口提供的變 量服務模塊(Variable Services)提供了一些讀寫函數由于篇幅有限現選一些經常用到的函數作一些簡單介紹。 S7_cycl_read():此函數通知服務方準備對單存儲單元循環讀一個變量。 S7_get_cycl_read_ind():此函數接收來自服務方發送的數據。 S7_multiple_read_req():此函數通知服務方準備對多存儲單元讀一個或多個變量。 S7_get_multiple_read_cnf():此函數接收來自服務方的一個或多個變量的值。 S7_multiple_write_req():此函數通知服務方準備對多存儲單元寫一個或多個變量。 S7_get_multiple_write_cnf():此函數接收來來自服務方的執行上述寫請求的結果。 需要特別注意的是:S7- 300/400PLC遵循“高地址、低字節”的規律這與某些習慣用法不同。例如在C++Builder6中變量類型為word的變量它的數據存放順序是“ 低地址低字節”的規律。因此在對所讀取的數據進行操作或給PLC數據塊中寫數據字時要進行相應的處理。 為解決上位機不能因前臺的信息處理而中斷后臺的監聽等問題可采用多線程編程技術將對PLC內部資源的讀/寫功能模塊交給一個后臺線程來完成。多線程編程技 術能提高CPU利用率加快信息處理提高系統的實時性在由多臺計算機組成的分布式實時控制系統中應用多線程技術是完全必要的。 4.2.3 后臺讀/寫線程模塊部分代碼 ····· do { ret = S7_receive(cp_descr&cref&orderid); switch(ret) { case S7_NO_MSG: break; case S7_INITIATE_CNF: Synchronize(my_get_initiate_cnf); Synchronize(my_multiple_read_req); break; case S7_MULTIPLE_READ_CNF: Synchronize(my_get_multiple_read_cnf); Synchronize(my_multiple_read_req); break; · · case S7_ABORT_IND: Synchronize(my_get_abort_ind); break; case S7_VFD_STATE_CNF: Synchronize(my_get_vfd_state_cnf); Synchronize(my_abort); break; case S7_VFD_USTATE_IND: Synchronize(my_get_vfd_ustate_ind); break; default : ····· } }while(ret != last_event_expected) 5 總結 運用C++Builder6.0編寫的PLC控制調試程序具有用戶界面友好人機交互方便數據庫功能強大靈活的特點具有較強的通用性和實用性。通過調用S7 通訊提供的SAPI-S7應用程序接口實現PC機與S7300/400PLC基于工業以太網的數據通訊不僅數據傳輸率快而且數據傳輸正確率高。在對PLC 控制系統的調試過程中大大縮短了調試周期提高了工作效率。此通訊技術的實現對西門子工控產品的應用以及工業以太網的推廣應用有著廣泛普遍的重要意義。 我們知道要訪問西門子的300/400 系列PLC中的I/O點,M和DB區內的數據有若干種方法可供選擇。最常用的是使用組態軟件WINCC來讀取。另外,西門子還提供了SAPI-S7接口和 Send/Receive接口。SAPI-S7位于網絡七層協議的5-7層,是專門為S7連接優化的,可以方便訪問PLC內任意存儲區。就我使用過的其他 組態軟件如intouch(I/O server )和iFix的連接驅動,都是在SAPI-S7接口上開發的(從組態驅動時的配置過程可以看出)。Send/Receive屬于較低的層次,一方面可以使 用西門子的接口函數編寫,另一方面還可以直接用Socket接口編程。這時,在PLC方面要用專用的功能塊編寫發送接收程序來配合。常適用于報文的傳送 (報文結構通常存儲于DB塊)。關于Socket編程我曾專門發帖討論過其中若干細節。 還有一種就是新興的OPC接口,但個人認為這種接口不適于較快數據的傳輸,即采樣時間間隔不能太短。 |
|
---|---|---|
|