Visual Studio 2010--C#跟西門子1200(Sharp7)窗體控制⑩--循環(huán)讀取
上期回顧(上期完成了IO監(jiān)控的輸入的監(jiān)控的代碼編寫恩伺,分別監(jiān)控I0.0,I0.1,I0.2,I1.0):
本期我們說一下PLC輸入輸出監(jiān)控的创南,輸出狀態(tài)的監(jiān)控,跟輸入差不多
1.0 跟輸入的讀取差不多,都是寫在定時(shí)器響應(yīng)程序中兽愤,接著上次的輸入讀取于样,先新建緩存區(qū),記得這個(gè)區(qū)域要跟輸入?yún)^(qū)別掩驱,不能用同樣的緩存區(qū)芒划,另外輸出的讀取,這里調(diào)用的是ABRead的方法欧穴,這里仍舊從地址0開始讀取2個(gè)字節(jié)的數(shù)據(jù)民逼,就相當(dāng)于讀取Q0.0-Q1.7的數(shù)據(jù)
var buffer2 = new byte[2];
? ? ? ? ? ? //讀取DB1的從地址0開始的38個(gè)字節(jié)的數(shù)據(jù),讀到buffer
? ? ? ? ? ? client.ABRead(0, buffer2.Length, buffer2); //PLC的輸出讀取
2.0 當(dāng)把PLC的輸出數(shù)據(jù)讀取到緩沖區(qū)的時(shí)候涮帘,我們要把他拿出來了拼苍,先試著把他單字節(jié)拿出來,代碼如下调缨,用一個(gè)局部字節(jié)變量db1da162疮鲫,接收轉(zhuǎn)換緩沖區(qū)的變量,接收后的數(shù)據(jù)顯示到Label控件NOK上
var buffer2 = new byte[2];
? ? ? ? ? ? //讀取DB1的從地址0開始的38個(gè)字節(jié)的數(shù)據(jù)弦叶,讀到buffer
? ? ? ? ? ? client.ABRead(0, buffer2.Length, buffer2); //PLC的輸出讀取
? ? ? ? ? ? byte db1da162 = S7.GetByteAt(buffer2, 0);
? ? ? ? ? ? NOK.Text = db1da162.ToString();
3.0 用BOOL變量db1dbx000俊犯,來接收緩存區(qū)buffer2中,0字節(jié)的0位伤哺,相當(dāng)于讀取的是Q0.0的數(shù)據(jù)燕侠,然后根據(jù)讀取的數(shù)據(jù)顯示不同的Lable控件的背景色
var buffer2 = new byte[2];
? ? ? ? ? ? //讀取DB1的從地址0開始的38個(gè)字節(jié)的數(shù)據(jù)者祖,讀到buffer
? ? ? ? ? ? client.ABRead(0, buffer2.Length, buffer2); //PLC的輸出讀取
? ? ? ? ? ? byte db1da162 = S7.GetByteAt(buffer2, 0);
? ? ? ? ? ? NOK.Text = db1da162.ToString();
? ? ? ? ? ? bool db1dbx000 = S7.GetBitAt(buffer2, 0, 0);
? ? ? ? ? ? if (db1dbx000 == true)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Q0_0.BackColor = Color.Green;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Q0_0.BackColor = Color.WhiteSmoke;
? ? ? ? ? ? }
4.0 如上所述,照樣子寫下Q0.1,Q0.2,Q1.0的讀取代碼绢彤,如下圖咸包,到這里輸出輸入監(jiān)控的測試代碼都寫完了