高級(jí)語(yǔ)言ads通訊_第1頁(yè)
高級(jí)語(yǔ)言ads通訊_第2頁(yè)
高級(jí)語(yǔ)言ads通訊_第3頁(yè)
高級(jí)語(yǔ)言ads通訊_第4頁(yè)
高級(jí)語(yǔ)言ads通訊_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余50頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

作者 曹志日期 2021-2-版本

1635樓使用 VisualC#實(shí)現(xiàn)與TWINCATPLCcontrol變量的通訊概述使用VisualC#軟件,實(shí)現(xiàn)通過(guò)對(duì)TWINCATPLCcontrol中的變量(boolintstring類(lèi)型)進(jìn)行和修改文件名 文件說(shuō)PLCPLCcontrolC#C#備注關(guān)鍵字:通過(guò)高級(jí)語(yǔ)言對(duì)PLC免責(zé) 通過(guò)定時(shí)方式來(lái)控制PLC程序中變量的讀 通過(guò)通知方式來(lái)控制PLC程序中變量的讀 通過(guò)c#程序和賦值PLC程序中的1個(gè)布爾打開(kāi)PLC在變量定義區(qū)定義一個(gè)名稱(chēng)為Bool1的bool運(yùn)行PLC程序.打開(kāi)VisualC#2008Express新建Windows.在資源管理器中這個(gè)庫(kù)文件是BECKHOFFC#PLC進(jìn)行連接和修改在資源管理器中導(dǎo)入庫(kù)文件,點(diǎn)擊,如圖1其具體路徑為“安裝盤(pán):\TwinCAT\ADSApi\.NET\v2.0.50727”;對(duì)于ce系統(tǒng)其路徑為“安裝盤(pán):\TwinCAT\ADSApi\CompactFramework\v2.0”。完畢后如圖一所示出現(xiàn)usingTwinCAT.Ads;usingSystem.IO;winform界面設(shè)計(jì)上畫(huà)一個(gè)textbox和一個(gè)在c#編程區(qū)2個(gè)變publicpartialclassForm1:{privateintprivateTcAdsadsprivatevoidForm1_Load(objectsender,System.EventArgs{ads=newTcAds();{adshbool1=ads}catch(Exception{}}該段程序作用是新建一個(gè)TcAds的實(shí)例ads并調(diào)用該connect方法與(run-time1)進(jìn)行連接。并使用句柄hbool1接受PLC程序中的BUTTON1TEXT屬性改為“read”botton控點(diǎn)擊運(yùn)行中的運(yùn)切到plccontrol中觀察當(dāng)前bool1.C#Text中顯示的bool狀態(tài)應(yīng)該與Plc程序中的bool1相同C#winform17將這個(gè)button2的textprivatevoidbutton2_Click(objectsender,EventArgs{{ads}catch(Exception{}}19.同時(shí)將PLCRUN可以看到當(dāng)前的PLC狀態(tài)時(shí)C#點(diǎn)擊Write切換到PLC程序后,我們發(fā)現(xiàn)PLC程序中的BOOL變量的值由TRUE轉(zhuǎn)換成FALSE通過(guò)c#程序和賦值PLC程序中的1個(gè)整形變1.在PLC1int運(yùn)行PLC程序C#1個(gè)在c#1并使用句柄hint1接受PLC程序中的切回PLCint1Text2中的數(shù)值應(yīng)該和我們?cè)赑LCcontrol通過(guò)句柄將值賦入到plcin1中ads.WriteAny(hint1,這時(shí)候PLC中INT10C#WRITEPLCINTC#程序中通過(guò)c#程序和賦值PLC程序中的1個(gè)雙精度浮點(diǎn)在PLCCONTROL中添加一個(gè)LREAL類(lèi)型的變量運(yùn)行PLCC#TEXTBOXprivateint并使用句柄hreal1接受PLC程序中的hlreal1=adstextBox3.Text=ads.ReadAny(hlreal1,C#read修改PLC程序中LREALC#READ下面對(duì)LREAL類(lèi)型的變量值進(jìn)行輸C#LREALads.WriteAny(hlreal1,可以看到PLC程序中LREAL通過(guò)c#程序讀賦值PLC程序中的1個(gè)字符在Plccontrol中定義一個(gè)stringstr1運(yùn)行PLC程序在窗體界面設(shè)計(jì)中添加一個(gè)textbox在c#1使用句柄對(duì)PLC程序中的hstr1 ads {5..在PLC程序?qū)tr1進(jìn)行賦值C#程序中按readads.WriteAny(hstr1,textBox3.Text,newint[]{5C#textbox3中的字符串輸入到PLC程序中write后,可以看到PLCSTRING通過(guò)c#程序和賦值PLC程序中的1個(gè)結(jié)構(gòu)在PLCCONTROLDatatypes選項(xiàng)卡,新建一個(gè)結(jié)構(gòu)體命名TcomplexStruct,如圖所示:2個(gè)元素,分別是BOOL類(lèi)型的BOOLVAL和STRING3,在PLC的MAIN函數(shù)中這個(gè)結(jié)構(gòu)體4,LOG-IN,運(yùn)行PLC5C#2個(gè)TEXTBOX5.在C#程序編寫(xiě)中添加添加一個(gè),并一個(gè)結(jié)構(gòu)體類(lèi)型的類(lèi)[StructLayout(LayoutKind.Sequential,Pack=1)] publicclassComplexStruct{publicboolboolVal;[MarshalAs(UnmanagedType.ByValTStr,SizeConst=6)]publicstringstringVal="";[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]publicint[]dintArr=newint[4];}C#privatevoidFillStructControls(ComplexStruct{textBox4.Text=structure.boolVal.ToString();textBox5.Text=structure.stringVal;}privateinthcomplexStruct;在Form1_LoadhcomplexStruct=ads 編寫(xiě)從PLC中結(jié)構(gòu)體元素值的C#語(yǔ)句FillStructControls((ComplexStruct)ads點(diǎn)擊運(yùn)行C#這時(shí)候我們可以再PLC在C#程序中重新點(diǎn)擊read,C#PLCprivateComplexStruct{ComplexStructstructure=newComplexStruct();structure.boolVal=Boolean.Parse(textBox4.Text);structure.stringVal=textBox5.Text;return}ads.WriteAny(hcomplexStruct,GetStructFromControls());\可以看到PLC通過(guò)c#程序和賦值PLC程序中的1個(gè)數(shù)在PLC14個(gè)元素的數(shù)組變量作為結(jié)構(gòu)體的元素,并賦予初值。publicint[]dintArr=new.編寫(xiě)從PLC中結(jié)構(gòu)體數(shù)組值的C#語(yǔ)句textBox6.Text=String.Format("{0:d},{1:d},{2:d},{3:d}", 在C#程序中編寫(xiě)一個(gè)將讀入的數(shù)組元素寫(xiě)到C#ComplexStructstructure=newString[]stringArr=textBox6.Text.Split(newchar[]{','});for(inti=0;i<stringArr.Length;i++)structure.dintArr[i]=在C#點(diǎn)擊通過(guò)定時(shí)方式來(lái)控制PLC程序中變量的在C#程序界面設(shè)計(jì)中,添加2privatevoidbutton3_Click(objectsender,EventArgse){timer1.Enabled=true;button3.Enabled=false;button4.Enabled=true;}privatevoidbutton4_Click(objectsender,EventArgs{timer1.Enabled=false;button3.Enabled=button4.Enabled=}privatevoidtimer1_Tick(objectsender,EventArgs{textBox1.Text=ads.ReadAny(hbool1,textBox2.Text=ads.ReadAny(hint1,typeof(int)).ToString();textBox4.Text=ads.ReadAny(hlreal1,textBox3.Text=ads.ReadAny(hstr1,typeof(String),new{5}點(diǎn)擊TIME修改PLC切回C#可以發(fā)現(xiàn)在下一個(gè)周期內(nèi)C#通過(guò)通知方式來(lái)控制PLC程序中變量的 通知方式ADS客戶端向ADS服務(wù)器發(fā)送ADSC#2個(gè)BOTTON2個(gè)控件的TEXTNotificationONNotificationSystem.CollectionsusingprivateArrayList創(chuàng)建一個(gè)ads_AdsNotificationEx方法用來(lái)處理變量參privatevoidads_AdsNotificationEx(objectsender,AdsNotificationExEventArgse){TextBoxtextBox=(TextBox)e.UserData;Typetype=e.Value.GetType();if(type==typeof(string)||type.IsPrimitive)textBox.Text=e.Value.ToString();elseif(type==typeof(ComplexStruct))}在FORM_LOAD中處理的函ads.AdsNotificationEx+=newbutton4.Enabled=BUTTON4在通知中將變量到ADS客戶privatevoidbutton3_Click(objectsender,EventArgs{{//registerAdsTransMode.OnChange,100,0,textBox2,typeof(int)));AdsTransMode.OnChange,100,0,textBox1,typeof(Boolean)));AdsTransMode.OnChange,100,0,textBox3,typeof(String),newint[]{5})); ",AdsTransMode.OnChange,100,0,textBox5,typeof(ComplexStruct)));}catch(Exception{}button4.Enabled=button3.Enabled=}BUTTON3,BUTTON3,BUTTON4BUTTON4(取消通知方式)的按鍵響應(yīng)privatevoidbutton4_Click(object

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論