OPC технологиясын пайдалану арқылы ICS тапсырмаларында Visual FoxPro 9 пайдалану

Новости мира

Қазіргі уақытта автоматтандырылған басқару жүйесі болмаса, жоғары технологиялық өнеркәсіптік жабдықтарды сатып алу қиын. Мәселен, мысалы, бетон бұйымдары зауыты цемент қоспасын дайындаудың жаңа желісін алса немесе сыра зауыты бөтелкеге ​​құйылатын жаңа конвейерді алса, тартынбаңыз, жабдықтың сипаттамасында «Автоматты басқару жабдықтары» бөлімі болады және оған сенсорлар, өнеркәсіптік контроллерлер және параметрлерді тіркеушілер. Тіпті осы процеске арналған ACS (SCADA) типтік адам-машина интерфейсі спецификацияға қосылады. Анау. Автоматтандырудың бұл деңгейін орындау үшін сізге инженер болудың қажеті жоқ — сіз тұтынушы болуыңыз керек!

Бірақ әртүрлі жеткізушілер мен өндірушілердің әртүрлі технологиялық процестер үшін бірнеше (мүмкін ондаған) автоматтандырылған басқару жүйелерін пайдаланған кезде не істеу керек. Сонымен, сізге тағы бір автоматтандырылған басқару жүйесі қажет: жергілікті автоматтандырылған басқару жүйелерін диспетчерлік басқару (SODU). Бұл жүйе жергілікті автоматтандырылған басқару жүйелерінің барлық параметрлерін толық егжей-тегжейлі көрсетуді талап етпейді, әдетте, басқару есебі (ресурстарды тұтыну, өнім шығару) шеңберіндегі шығындарды жедел есептеу үшін деректер ғана жеткілікті және олардың қауіпсіздігі туралы деректер. өндірістік процесс (авариялық режимдер). Сіз SODA әзірлеуді аутсорсингке беруді шешсеңіз де, бұл жолы қолданбалы техникалық шешімдер мен автоматтандырудың шектерін талқылауға терең бойлау керек болады. Олай болса, әзірлеуді өзіңіз жасаған тиімдірек болуы мүмкін. Әрине, біз жауапты шешім туралы айтып отырмыз, бірақ VFP бағдарламалау тәжірибесі болса, бұл мүмкін.

Бірнеше анықтамалар

OPC (OLE for Process Control) – басқару және басқару жүйелерінде деректер алмасудың әмбебап механизмін қамтамасыз ететін кеңінен қабылданған спецификациялар жиынтығы. OPC технологиясы тұтынушыларға драйверлердің немесе хаттамалардың бар немесе жоқтығынан тәуелсіздік береді, бұл оларға бизнестің нақты қажеттіліктеріне барынша сәйкес келетін жабдық пен бағдарламалық қамтамасыз етуді таңдауға мүмкіндік береді. OPC спецификациясы байланыс үшін екі компонентті анықтайды: OPC клиенті және OPC сервері.
OPC сервері – құрылғының немесе жүйенің ішкі пішімінде деректерді қабылдайтын және бұл деректерді OPC пішіміне түрлендіретін бағдарлама. OPC сервері OPC клиенттері үшін деректер көзі болып табылады.
OPC клиенті OPC серверлерінен OPC деректерін қабылдайтын және оны құрылғының немесе жүйенің ішкі пішіміне түрлендіретін бағдарлама.
OPC Data Access (OPC DA) — тірі деректермен алмасу үшін ең көп қолданылатын OPC спецификациясы.

Дамытуды бастау үшін алғышарттар:
OPC серверін таңдау үшін жергілікті ACS параметрлерін тіркейтін контроллерлердің және басқа құрылғылардың түрлерін білу керек.
Өнеркәсіптік автоматтандыру жабдығын өндірушілердің OPC серверлерімен өз өнімдерін сүйемелдеу өте сирек кездеседі. Егер сіз әлі де OPC серверінің жетіспеушілігіне тап болсаңыз — мердігер оны сізге бермеген болса, өндірушіге тікелей хабарласыңыз. Егер өндіруші Siemens, Allen Bradley немесе Mitsubishi сияқты әлемге әйгілі компания болса, сіз тәуелсіз американдық әзірлеуші ​​Matrikon Inc (http://www.matrikonopc.com/opc-drivers/index.aspx) тегін OPC серверін пайдалана аласыз. ).
Барлық жергілікті автоматтандыру жобаларында барлық контроллерлер үшін сигнал кестелері болуы керек.
Әдетте, сигналдық кесте автоматтандырылған ТП жүйесінің конструкторлық құжаттамасының негізгі элементі болып табылады.
OPC серверінің зертханалық ортасын құру

OPC сервері арқылы өнеркәсіптік контроллерге деректерді қабылдауды және басқару әрекеттерін жіберуді көрсететін қолданбаны жасау үшін бізге эмулятор қажет [MatrikonOPC Server for Simulation], бұрын айтылған Matrikon Inc. Бұл эмуляторды мына жерден тегін жүктеп алуға болады: http://www.matrikonopc.com/downloads/178/index.aspx, оңай тіркеу процедурасынан кейін.
Контроллер алайық [Siemens S7-300] және сигнал кестесі келесідей көрінеді:

Айнымалылар тобы/контроллер тегі
1
Жылдамдықты орнату el. қозғалтқыш
(2-кезең, Солтүстік) S7-300_002N S7-300_002N_Hz2N
2 Мыс орамасының тогы el. қозғалтқыш
(2-кезең, Солтүстік) S7-300_002N S7-300_002N_ICu2N
3 Темір орамасының температурасы el. қозғалтқыш
(2-кезең, Солтүстік) S7-300_002N S7-300_002N_TFe2N

Біз іске қосамыз [MatrikonOPC Server for Simulation];
Айнымалылар тобын жасаңыз [S7-300_002N];
Топта [S7-300_002N] айнымалыларды/тегтерді жасаңыз, суретті қараңыз.

Тегтер тобының конфигурациясы [s7-300_002N] суретте көрсетілген, қолданбада, файлда қолжетімді [002N.xml].

Назар аударыңыз:
айнымалы […Hz2N] — оқумен қатар, мәндерді жазу үшін қол жетімді;
айнымалы […ICu2N] – тек оқуға арналған күйге ие және кездейсоқ сандар генераторынан секундына 1000 рет мәндер алады;
айнымалы […TFe2N] – тек оқуға арналған күйге ие және кездейсоқ сандар генераторынан минутына 1 рет мәндер алады.

Біздің жағдайда, бұл орамалардың ток және температурасы ел екенін білдіреді. қозғалтқышты берілген жиілікте оқимыз. Жылдамдықты орнату арқылы біз электрондық поштада бақылау әрекетін жасаймыз. Қозғалтқыш және қосымша орнату мәні жергілікті басқару панелінен өзгертілген жағдайда, біз секундына 1 рет орнату мәнін басқара аламыз.
Visual FoxPro бағдарламалауды бастау

OPC сервер эмуляторын орнатқаннан кейін OPC клиентін бағдарламалауды бастауға болады:
Қоғамдық poOPC нысан ретінде
* OPC клиентінің данасын жасау
m.poOPC=Нысан жасау([Matrikon.OPC.Automation.1])
* OPC серверіне қосылу
m.poOPC.Connect([Matrikon.OPC.Simulation.1])

Қоғамдық poOPCGroup нысан ретінде
* айнымалылар тобын құру
m.poOPCGroup=m.poOPC.OPCGroups.Add([s7-300_002N])
* топта құру [s7-300_002N] айнымалы [S7-300_002N_Hz2N]
m.poOPCGroup.OPCItems.AddItem([s7-300_002N.S7-300_002N_Hz2N],1)

* айнымалының мәнін анықтау [S7-300_002N_Hz2N] 11.12345 бойынша
m.poOPCGroup.OPCItems.Item(1).Write(11.12345)
* айнымалының мәнін алу [S7-300_002N_Hz2N]
Жергілікті ln_Hz2N Сан ретінде
m.ln_Hz2N=m.poOPCGroup.OPCItems.Item(1).Мән
Бұл мысал тегті жазуды (басқару әрекетін беру — электр қозғалтқыш жылдамдығының белгіленген нүктесі) және бірдей айнымалы мәннің синхронды оқуын көрсетеді.
Контроллердің айнымалы мәндерінің синхронды оқуы OPC серверімен әрекеттесудің жалғыз жолы емес, OPC DA стандарты асинхронды өзара әрекеттесу мен хабарландыру бойынша оқуды да қарастырады. Төменде өзгерту туралы хабарландыру арқылы айнымалы мәндерді алудың мысалы келтірілген.

* топта құру [s7-300_002N] айнымалылар
m.poOPCGroup.OPCItems.AddItem([s7-300_002N.S7-300_002N_ICu2N],2)
m.poOPCGroup.OPCItems.AddItem([s7-300_002N.S7-300_002N_TFe2N],3)

Қоғамдық poOPCGroupEvents нысан ретінде
* шамадан тыс жүктеу оқиғасы [DataChange] тег топтары [s7-300_002N]
* оқиға коды [DIOPCGroupEvent_DataChange] сынып [myOPCGroupClass]
m.poOPCGroupEvents=Жаңа нысан([myOPCGroupClass])
m.poOPCGroupEvents.AddProperty([OPCGroup],m.poOPCGroup)
EventHandler(m.poOPCGroup, m.poOPCGroupEvents)

* хабарландырулар алу үшін топқа жазылыңыз
m.poOPCGroup.IsSubscribed=.T.

myOPCGroupClass класын OlePublic сеансы ретінде анықтаңыз
DIOPCGroupEvent іске асырады;
жылы [c:program filescommon filesmatrikonopccommonopcdaauto.dll]

Процедураны бастау
Неміс тілін орнату күні
Сағаттарды 24-ке орнатыңыз

Процедура DIOPCGroupEvent_DataChange(;
TransactionID нөмірі ретінде;
NumItems As Number,;
ClientHandles VARIANT ретінде;
ItemValues ​​VARIANT ретінде;
Сапалар VARIANT ретінде;
Уақыт белгілері VARIANT ретінде);
VOID ретінде

Жергілікті loItem2 Нысан ретінде, loItem3 Нысан ретінде
m.loItem2=This.OPCGroup.OPCItems.Item(2)
m.loItem3=Бұл.OPCGroup.OPCItems.Item(3)

Күту терезесі;
Transform(m.loItem2.Value)+Chr(13)+;
Transform(m.loItem2.Quality)+Chr(13)+;
Transform(m.loItem2.Timestamp)+Chr(13)+Chr(13)+;
Transform(m.loItem3.Value)+Chr(13)+;
Transform(m.loItem3.Quality)+Chr(13)+;
Transform(m.loItem3.Timestamp)+Chr(13)+Chr(13)+;
Transform(Datetime()) ;
Қазір күту уақыты 3

loItem2, loItem3 шығарыңыз

аяқтау

Процедура DIOPCGroupEvent_AsyncReadComplete(;
TransactionID нөмірі ретінде;
NumItems As Number,;
ClientHandles VARIANT ретінде;
ItemValues ​​VARIANT ретінде;
Сапалар VARIANT ретінде;
Уақыт белгілері VARIANT ретінде,;
VARIANT сияқты қателер);
VOID ретінде
аяқтау

Процедура DIOPCGroupEvent_AsyncWriteComplete(;
TransactionID нөмірі ретінде;
NumItems As Number,;
ClientHandles VARIANT ретінде;
VARIANT сияқты қателер);
VOID ретінде

аяқтау

Процедура DIOPCGroupEvent_AsyncCancelComplete(CancelID Сан ретінде);
VOID ретінде
аяқтау

Enddefine

Жоғарыдағы фрагментте сынып коды [myOPCGroupClass] толығымен дерлік автоматты түрде жеткізілген Visual FoxPrp 9 утилитасы арқылы жасалған — [Object Browser]интерфейсті сүйреп апарыңыз [DIOPCGroupEvent] OPC клиенттерінің кітапханалары [opcdaauto.dll] процедура терезесіне.

Қорытындылай келе, OPC серверімен жұмыс аяқталғаннан кейін өшіруді ұмытпау керек: