guanying14
級別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個
工控威望: * 點(diǎn)
下載積分: * 分
在線時間: (小時)
注冊時間: *
最后登錄: *
查看guanying14的 主題 / 回貼
樓主  發(fā)表于: 2010-10-21 10:02
有沒哪位高手用過S7224XPCN的自由端口與用VB編寫的軟件通訊咯?,以前我們編寫的VB軟件和三菱的FX2N系列通訊的話,只需將端口的通訊參數(shù)寫入D8120和設(shè)置站號,而軟件只需設(shè)定一樣的端口參數(shù)即可通訊。不知道西門子的通訊口這樣做行不行,看過實(shí)例,都是需要經(jīng)過初始化端口,編寫接受、發(fā)送子程序、還用了不少的中斷。。挺復(fù)雜的。。而且當(dāng)端口設(shè)置為自由端口通訊后。。。上位機(jī)與PLC之間的通訊線是否是用普通的RS485通訊線呢還是用PPI的專用通訊電纜呢?,有沒哪位高手指點(diǎn)下。。。急啊。。。
jxh668
jxh668
級別: 工控俠客
精華主題: 0
發(fā)帖數(shù)量: 1429 個
工控威望: 2169 點(diǎn)
下載積分: 4006 分
在線時間: 829(小時)
注冊時間: 2009-12-21
最后登錄: 2024-09-21
查看jxh668的 主題 / 回貼
1樓  發(fā)表于: 2010-11-01 09:11
OPC解決了什么?
  OPC誕生以前,硬件的驅(qū)動器和與其連接的應(yīng)用程序之間的接口并沒有統(tǒng)一的標(biāo)準(zhǔn)。例如,在FA(FactoryAutomation)——工廠自動化領(lǐng)域,連接PLC(Programmable Logic Controller)等控制設(shè)備和SCADA/HMI軟件,需要不同的FA網(wǎng)絡(luò)系統(tǒng)構(gòu)成。根據(jù)某調(diào)查結(jié)果,在控制系統(tǒng)軟件開發(fā)的所需費(fèi)用中,各種各樣機(jī)器的應(yīng)用程序設(shè)計占費(fèi)用的7成,而開發(fā)機(jī)器設(shè)備間的連接接口則占了3成。此外,在PA(Process Automation)——過程自動化領(lǐng)域,當(dāng)希望把分布式控制系統(tǒng)(DCS——Distributed Control System)中所有的過程數(shù)據(jù)傳送到生產(chǎn)管理系統(tǒng)時,必須按照各個供應(yīng)廠商的各個機(jī)種開發(fā)特定的接口,例如,利用C語言DLL(動態(tài)鏈路數(shù)據(jù)庫)連接的DDE(動態(tài)數(shù)據(jù)交換)服務(wù)器或者利用FTP(文件傳送協(xié)定)的文本等設(shè)計應(yīng)用程序。如由4種控制設(shè)備和與其連接的監(jiān)視、趨勢圖以及表報3種應(yīng)用程序所構(gòu)成的系統(tǒng)時,必須花費(fèi)大量時間去開發(fā)分別對應(yīng)設(shè)備A,B,C,D的監(jiān)視,趨勢圖以及表報應(yīng)用程序的接口軟件共計要用12種驅(qū)動器。同時由于系統(tǒng)中共存各種各樣的驅(qū)動器,也使維護(hù)運(yùn)轉(zhuǎn)環(huán)境的穩(wěn)定性和信賴性更加困難。
  而OPC是為了不同供應(yīng)廠商的設(shè)備和應(yīng)用程序之間的軟件接口標(biāo)準(zhǔn)化,使其間的數(shù)據(jù)交換更加簡單化的目的而提出的。作為結(jié)果,從而可以向用戶提供不依靠于特定開發(fā)語言和開發(fā)環(huán)境的可以自由組合使用的過程控制軟件組件產(chǎn)品。
  利用OPC的系統(tǒng),是由按照應(yīng)用程序(客戶程序)的要求提供數(shù)據(jù)采集服務(wù)的OPC服務(wù)器,使用OPC服務(wù)器所必需的OPC接口,以及接受服務(wù)的OPC應(yīng)用程序所構(gòu)成。OPC服務(wù)器是按照各個供應(yīng)廠商的硬件所開發(fā)的,使之可以吸收各個供應(yīng)廠商硬件和系統(tǒng)的差異,從而實(shí)現(xiàn)不依存于硬件的系統(tǒng)構(gòu)成。同時利用一種叫做Variant的數(shù)據(jù)類型,可以不依存于硬件中固有數(shù)據(jù)類型,按照應(yīng)用程序的要求提供數(shù)據(jù)格式。
  利用OPC使接口標(biāo)準(zhǔn)化可以不依存于各設(shè)備的內(nèi)部結(jié)構(gòu)及它的供應(yīng)廠商來選用監(jiān)視,趨勢圖以及表報應(yīng)用程序。
來看看 ,有用的就下了。深圳的可找我呵
jxh668
jxh668
級別: 工控俠客
精華主題: 0
發(fā)帖數(shù)量: 1429 個
工控威望: 2169 點(diǎn)
下載積分: 4006 分
在線時間: 829(小時)
注冊時間: 2009-12-21
最后登錄: 2024-09-21
查看jxh668的 主題 / 回貼
2樓  發(fā)表于: 2010-11-01 09:20
也可參考:

在實(shí)際應(yīng)用過程中,某些時候可能會采用VB/DELPHI/VC等高級語言,自主編程與西門子PLC進(jìn)行通訊,這類帖子、論文在網(wǎng)上都可以找到,在此總結(jié)一下。

1、Prodave通訊

Prodave是西門子提供的一個軟件包,為高級語言編程和plc通訊提供接口

通訊接口:MPI因 為MPI口是每塊cpu的編程口,所以plc不需要另外添加通訊模 塊,這個方案就比較經(jīng)濟(jì),而且prodave軟件包里面附帶了example和詳細(xì)的說明,用起來應(yīng)該比較簡單和方便(本人只匆匆看過文檔,沒有實(shí)驗(yàn) 過)。這方面的資料在百度上很多。當(dāng)然,mpi的速度是有限的,如果采用普通的pc adapter連接pc和plc,最高速度也就38.4kbps,我不知道prodave能否支持mpi卡(5611之類的話),如果可以的話速度可以達(dá) 到187.5kbps。

2、串行通訊

看到過一些論文,采用串行通訊的方法實(shí)現(xiàn)pc和plc通訊。這種情況存在幾點(diǎn)要求:

a、需要為plc添加一塊串行通訊模塊,比如300的話就需要cp340或者cp341(前者便宜些);

b、plc里面需要對串行通訊進(jìn)行編程,其實(shí)也就是接收報文和發(fā)送報文,調(diào)用fb2/fb3(cp340的話)。

c、串行通訊的速度是有目共睹的,而且cp340或者cp341的數(shù)據(jù)吞吐量也是有限的,即報文長度是有限制的,因此個人認(rèn)為通訊數(shù)據(jù)量大的話采用串行通訊就不合適了。

d、報文格式的話就比較自由,但是也應(yīng)當(dāng)合理,我雖然沒有具體實(shí)驗(yàn)過,但是個人認(rèn)為可以參考modbus的報文結(jié)構(gòu)來編程,甚至就采用modbus的規(guī)范,不過這樣的話要求編程者對pc和plc側(cè)的modbus編程都要熟悉。

3、OPC

Opc是這些年來很流行的東西,其實(shí)我很討厭opc的安全認(rèn)證的設(shè)定。不過采用opc編程來訪問plc真的是一件非常輕松愜意的事情。你需要做的就是了解opc的結(jié)構(gòu)和編程,尤其是采用vb來編寫opc簡直是件傻瓜化的工作當(dāng)然也犧牲了很多。

前面我實(shí)驗(yàn)了用vb通過opc(以太網(wǎng))來訪問300,包括用西門子的simaticnet提供的opc接口和第三方的kepserver

采用opc接口編程的優(yōu)點(diǎn):通訊速度快,編程簡單。

4、以太網(wǎng)編程

采用以太網(wǎng)編程訪問plc,其實(shí)又可以分為兩種:

一種是socket接口,需要在plc里面編程進(jìn)行收/發(fā),大概是fc5/fc6吧,印象不深了,當(dāng)然plc里面要定義一個connection, 填好地址、端口號之類的信息,這個對于熟悉西門子工業(yè)通訊的人是很easy的事情。Pc側(cè)采用socket接口編程,最簡單的就是vb里面的wisock 控件,當(dāng)然這掩蓋了很多細(xì)節(jié)。Socket編程本來就是一門藝術(shù),講究說學(xué)逗唱:)

這個方法的優(yōu)點(diǎn)應(yīng)該是pc側(cè)編程稍微簡單點(diǎn)(相對于后一種),而且可以不局限于windows平臺,因?yàn)閟ocket接口被諸如unix支持的更好。

第二種是采用西門子的 sapi接口函數(shù),這樣plc里面不需要過多的編程了,當(dāng)然pc側(cè)的編程難度就比較高了,ms只能用c來寫,所以我望而卻步鳥?催^相關(guān)帖子和論文,有高 人在項目里面就這么干的,而且數(shù)據(jù)量很大,看來高人很多很多啊,向他們致敬!關(guān)于sapi的資料其實(shí)都在simaticnet軟件光盤里面,有興趣的可以 去找來看看。

為了允許PC機(jī)和工作站上的應(yīng)用程序與西門子S7系列產(chǎn)品進(jìn)行S7通訊西門子公司提供了一個SAPI-S7應(yīng)用程序接口通過它可以靈活而方便地跟西 門子S7系列產(chǎn)品進(jìn)行通信。安裝SIMATIC Ner軟件后會在系統(tǒng)system32目錄下生成一個S732.dll文件該動態(tài)鏈接庫提供了大量基于WindowsNT、Window95/98、 Windows3.11和MS-DOS的函數(shù)這樣就使得用戶解決PLC和PC機(jī)的數(shù)據(jù)交換和數(shù)據(jù)處理問題變?yōu)榭赡堋Mㄐ啪幊贪▋蓚部分:(1)CP連接 組態(tài)(2)PLC與上位機(jī)通信編程。 4.1 CP連接組態(tài) 可采用STEP7軟件或STEP7軟件中用于工業(yè)以太網(wǎng)的NCMS7軟件對CP進(jìn)行網(wǎng)絡(luò)組態(tài)。通訊處理器CP可連接PCPC/PG上一般裝網(wǎng)卡 CP1613。在Windows控制面板下的“set PC/PG”下安裝所用網(wǎng)卡驅(qū)動程序并設(shè)協(xié)議、站號、波特率、是否為主站完成對VFDs(Virtual Field Device)和S7 connections的配置[4]。 4.2 PLC和上位機(jī)的通訊編程 S7-300/400PLC有以下各類資源:①輸入點(diǎn)I:接收外部開關(guān)量信號 ②輸出點(diǎn)Q:輸出給外部的開關(guān)量信號 ③內(nèi)部輔助點(diǎn)M:存放所需中間結(jié)果 ④時間繼電器T ⑤計數(shù)器 ⑥數(shù)據(jù)塊DB:存放程序數(shù)據(jù)的存儲區(qū)域 ⑦外設(shè)輸入PI:主要接收模擬量輸入信號經(jīng)A/D轉(zhuǎn)換⑧外設(shè)輸出PQ:給出模擬兩輸出值[5]。要讀/寫這些資源首先要建立PLC和PC機(jī)的連接。 4.2.1 初始化與PLC的連接 SAPI-S7應(yīng)用程序接口提供的管理服務(wù)模塊(Administrative Services)提供了一些可供讀出配置信息和登錄/退出通訊系統(tǒng)的函數(shù)下面作一些簡要介紹[6]:
S7_get_device() :通過此函數(shù)用戶程序可以查詢所有已安裝的CP的CP名。
S7_get_vfd() :通過此函數(shù)用戶程序可以查詢?nèi)我恢付–P的所有已配置的VFD。

S7_init():通過此函數(shù)用戶程序可登錄通訊系統(tǒng)。


S7_get_cref() :此函數(shù)提供了一個指向所選S7 connection名的指針。


S7_get_conn():此函數(shù)返回已登錄VFD的所有S7connection名和指向他們的指針。


S7_shut():通過此函數(shù)用戶程序可退出通訊系 統(tǒng)。 一個應(yīng)用程序可以登錄一個或多個CP的若干個VFD只有當(dāng)應(yīng)用程序登錄CP及其所選的VFD在配置期間指定給該VFD的所有連接才是有效的。 4.2.2讀/寫PLC內(nèi)部資源 初始化與PLC的連接成功后就可以對PLC進(jìn)行讀寫操作。對PLC存儲區(qū)即數(shù)據(jù)塊DB的讀寫是實(shí)現(xiàn)監(jiān)控的最基本操作。SAPI-S7應(yīng)用程序接口提供的變 量服務(wù)模塊(Variable Services)提供了一些讀寫函數(shù)由于篇幅有限現(xiàn)選一些經(jīng)常用到的函數(shù)作一些簡單介紹。


S7_cycl_read():此函數(shù)通知服務(wù)方準(zhǔn)備對單存儲單元循環(huán)讀一個變量。


S7_get_cycl_read_ind():此函數(shù)接收來自服務(wù)方發(fā)送的數(shù)據(jù)。


S7_multiple_read_req():此函數(shù)通知服務(wù)方準(zhǔn)備對多存儲單元讀一個或多個變量。


S7_get_multiple_read_cnf():此函數(shù)接收來自服務(wù)方的一個或多個變量的值。


S7_multiple_write_req():此函數(shù)通知服務(wù)方準(zhǔn)備對多存儲單元寫一個或多個變量。


S7_get_multiple_write_cnf():此函數(shù)接收來來自服務(wù)方的執(zhí)行上述寫請求的結(jié)果。 需要特別注意的是:S7- 300/400PLC遵循“高地址、低字節(jié)”的規(guī)律這與某些習(xí)慣用法不同。例如在C++Builder6中變量類型為word的變量它的數(shù)據(jù)存放順序是“ 低地址低字節(jié)”的規(guī)律。因此在對所讀取的數(shù)據(jù)進(jìn)行操作或給PLC數(shù)據(jù)塊中寫數(shù)據(jù)字時要進(jìn)行相應(yīng)的處理。 為解決上位機(jī)不能因前臺的信息處理而中斷后臺的監(jiān)聽等問題可采用多線程編程技術(shù)將對PLC內(nèi)部資源的讀/寫功能模塊交給一個后臺線程來完成。多線程編程技 術(shù)能提高CPU利用率加快信息處理提高系統(tǒng)的實(shí)時性在由多臺計算機(jī)組成的分布式實(shí)時控制系統(tǒng)中應(yīng)用多線程技術(shù)是完全必要的。 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 總結(jié) 運(yùn)用C++Builder6.0編寫的PLC控制調(diào)試程序具有用戶界面友好人機(jī)交互方便數(shù)據(jù)庫功能強(qiáng)大靈活的特點(diǎn)具有較強(qiáng)的通用性和實(shí)用性。通過調(diào)用S7 通訊提供的SAPI-S7應(yīng)用程序接口實(shí)現(xiàn)PC機(jī)與S7300/400PLC基于工業(yè)以太網(wǎng)的數(shù)據(jù)通訊不僅數(shù)據(jù)傳輸率快而且數(shù)據(jù)傳輸正確率高。在對PLC 控制系統(tǒng)的調(diào)試過程中大大縮短了調(diào)試周期提高了工作效率。此通訊技術(shù)的實(shí)現(xiàn)對西門子工控產(chǎn)品的應(yīng)用以及工業(yè)以太網(wǎng)的推廣應(yīng)用有著廣泛普遍的重要意義。


我們知道要訪問西門子的300/400 系列PLC中的I/O點(diǎn),M和DB區(qū)內(nèi)的數(shù)據(jù)有若干種方法可供選擇。最常用的是使用組態(tài)軟件WINCC來讀取。另外,西門子還提供了SAPI-S7接口和 Send/Receive接口。SAPI-S7位于網(wǎng)絡(luò)七層協(xié)議的5-7層,是專門為S7連接優(yōu)化的,可以方便訪問PLC內(nèi)任意存儲區(qū)。就我使用過的其他 組態(tài)軟件如intouch(I/O server )和iFix的連接驅(qū)動,都是在SAPI-S7接口上開發(fā)的(從組態(tài)驅(qū)動時的配置過程可以看出)。Send/Receive屬于較低的層次,一方面可以使 用西門子的接口函數(shù)編寫,另一方面還可以直接用Socket接口編程。這時,在PLC方面要用專用的功能塊編寫發(fā)送接收程序來配合。常適用于報文的傳送 (報文結(jié)構(gòu)通常存儲于DB塊)。關(guān)于Socket編程我曾專門發(fā)帖討論過其中若干細(xì)節(jié)。


還有一種就是新興的OPC接口,但個人認(rèn)為這種接口不適于較快數(shù)據(jù)的傳輸,即采樣時間間隔不能太短。
來看看 ,有用的就下了。深圳的可找我呵