我用定時(shí)器讀取plc數(shù)據(jù),雖然可以完整讀取數(shù)據(jù),但是偶爾會(huì)重復(fù)讀取一條數(shù)據(jù),定時(shí)器頻率為600MS一次,如果重復(fù)數(shù)據(jù)能夠處理,我覺(jué)得這個(gè)方法其實(shí)很贊
在倉(cāng)山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷(xiāo),外貿(mào)網(wǎng)站建設(shè),倉(cāng)山網(wǎng)站建設(shè)費(fèi)用合理。
Java代碼
/* 注意get和post請(qǐng)求的發(fā)送區(qū)別
* 1、創(chuàng)建HttpGet(或HttpPost)對(duì)象,將要請(qǐng)求的URL通過(guò)構(gòu)造方法傳入HttpGet(或HttpPost)對(duì)象中;
2、使用DefaultHttpClient類(lèi)的execute方法發(fā)送HTTP GET或HTTP POST 請(qǐng)求,并返回HttpResponse對(duì)象;
3、通過(guò)HttpResponse接口的getEntity方法返回響應(yīng)信息。
* */
public class TestHttpActivity extends Activity {
private Button btn_get;
private Button btn_post;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_get=(Button)findViewById(R.id.btn_get);
btn_post=(Button)findViewById(R.id.btn_post);
btn_get.setOnClickListener(listener);
btn_post.setOnClickListener(listener);
}
private OnClickListener listener=new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_post:
Log.i("TestHttpActivity", "ok");
DefaultHttpClient client = new DefaultHttpClient();
/**NameValuePair是傳送給服務(wù)器的請(qǐng)求參數(shù) param.get("name") **/
ListNameValuePair list = new ArrayListNameValuePair();
NameValuePair pair1 = new BasicNameValuePair("name", "name0001");
NameValuePair pair2 = new BasicNameValuePair("age", "age0001");
list.add(pair1);
list.add(pair2);
UrlEncodedFormEntity entity=null;
try {
/**設(shè)置編碼 **/
entity = new UrlEncodedFormEntity(list,"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**新建一個(gè)post請(qǐng)求**/
HttpPost post = new HttpPost("");
post.setEntity(entity);
HttpResponse response=null;
String strResult="";
try {
/**客服端向服務(wù)器發(fā)送請(qǐng)求**/
response = client.execute(post);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**請(qǐng)求發(fā)送成功,并得到響應(yīng)**/
if(response.getStatusLine().getStatusCode()==200){
try {
/**讀取服務(wù)器返回過(guò)來(lái)的json字符串?dāng)?shù)據(jù)**/
strResult = EntityUtils.toString(response.getEntity());
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JSONObject jsonObject = null;
try {
/**把json字符串轉(zhuǎn)換成json對(duì)象**/
jsonObject = getJSON(strResult);
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String names="";
try {
/**
* jsonObject.getString("code") 取出code
* 比如這里返回的json 字符串為 [code:0,msg:"ok",data:[list:{"name":1},{"name":2}]]
* **/
/**得到data這個(gè)key**/
String data=jsonObject.getString("data");
/**把data下的數(shù)據(jù)轉(zhuǎn)換成json對(duì)象**/
JSONObject jDat = new JSONObject(data);
/**判斷data對(duì)象下的list是否存在**/
if(jDat.get("list")!=null){
/**把list轉(zhuǎn)換成jsonArray對(duì)象**/
JSONArray jarr = jDat.getJSONArray("list");
/**循環(huán)list對(duì)象**/
for (int i = 0; i jarr.length(); i++) {
/** **/
JSONObject jsono = (JSONObject) jarr.get(i);
/**取出list下的name的值 **/
names=names+jsono.getString("name");
}
}
Toast.makeText(TestHttpActivity.this, "code:"+jsonObject.getString("code")+"name:"+names, Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else Toast.makeText(TestHttpActivity.this, "POST提交失敗", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_get:
DefaultHttpClient client1 = new DefaultHttpClient();
/**NameValuePair是傳送給服務(wù)器的請(qǐng)求參數(shù) param.get("name") **/
UrlEncodedFormEntity entity1=null;
/**新建一個(gè)get請(qǐng)求**/
HttpGet get = new HttpGet("");
HttpResponse response1=null;
String strResult1="";
try {
/**客服端向服務(wù)器發(fā)送請(qǐng)求**/
response1 = client1.execute(get);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**請(qǐng)求發(fā)送成功,并得到響應(yīng)**/
if(response1.getStatusLine().getStatusCode()==200){
try {
/**讀取服務(wù)器返回過(guò)來(lái)的json字符串?dāng)?shù)據(jù)**/
strResult1 = EntityUtils.toString(response1.getEntity());
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JSONObject jsonObject1 = null;
try {
/**把json字符串轉(zhuǎn)換成json對(duì)象**/
jsonObject1 = getJSON(strResult1);
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String names="";
try {
/**
* jsonObject.getString("code") 取出code
* 比如這里返回的json 字符串為 [code:0,msg:"ok",data:[list:{"name":1},{"name":2}]]
* **/
/**得到data這個(gè)key**/
String data=jsonObject1.getString("data");
/**把data下的數(shù)據(jù)轉(zhuǎn)換成json對(duì)象**/
JSONObject jDat1 = new JSONObject(data);
/**判斷data對(duì)象下的list是否存在**/
if(jDat1.get("list")!=null){
/**把list轉(zhuǎn)換成jsonArray對(duì)象**/
JSONArray jarr1 = jDat1.getJSONArray("list");
/**循環(huán)list對(duì)象**/
for (int i = 0; i jarr1.length(); i++) {
/** **/
JSONObject jsono = (JSONObject) jarr1.get(i);
/**取出list下的name的值 **/
names=names+jsono.getString("name");
}
}
Toast.makeText(TestHttpActivity.this, "get請(qǐng)求: code:"+jsonObject1.getString("code")+"name:"+names, Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else Toast.makeText(TestHttpActivity.this, "get提交失敗", Toast.LENGTH_SHORT).show();
break;
}
}
};
public JSONObject getJSON(String sb) throws JSONException {
return new JSONObject(sb);
}
}
不知道你是不是用51單片機(jī)往串口發(fā)數(shù)據(jù),是的話那是因?yàn)?1的sbuf最多存放8個(gè)字節(jié),所以你發(fā)12個(gè)字節(jié)會(huì)分成兩次發(fā)完。還有在接收的時(shí)候最好定義好通信協(xié)議,比如加一個(gè)偵頭,一個(gè)偵尾,通過(guò)這兩個(gè)字節(jié)的內(nèi)容來(lái)接收數(shù)據(jù)。
老兄,提問(wèn)還是給點(diǎn)懸賞分嘛,不要吝嗇哪點(diǎn)分,知識(shí)是無(wú)價(jià)的,你給得越多,回答你的人才會(huì)越多。
這問(wèn)題有點(diǎn)籠統(tǒng),軟糖來(lái)說(shuō)說(shuō)把:
圖像處理由System.Drawing命名空間負(fù)責(zé)。
主要是Bitmap類(lèi)和Graphics類(lèi)。
Bitmap表示一個(gè)位圖,可以是BMP,JPG,PNG等文件。
裝載位圖
Dim?位圖?As?Bitmap?=?Bitmap.FromFile("C:\Image1.PNG")
Graphics表示一張畫(huà)紙,能夠進(jìn)行繪制操作。
它可以被窗體、控件、位圖調(diào)用CreateGraphics()方法來(lái)創(chuàng)建。
然后調(diào)用Graphics.Draw開(kāi)頭的一系列函數(shù)來(lái)繪制圖像和圖形,F(xiàn)ill開(kāi)頭的填充圖形。
創(chuàng)建畫(huà)紙并繪制位圖
Dim?畫(huà)紙?As?Graphics?=?Me.CreateGraphics()
畫(huà)紙.DrawImage(位圖,?100,?100,?256,?256)
可以將上面三行放到Form1_Load中測(cè)試,把路徑改一下,
還可以把Me改為能在上面繪圖的控件的名稱(chēng)。
更多內(nèi)容請(qǐng)看MSDN的System.Drawing命名空間。
如滿意,請(qǐng)采納,謝謝。
你可以預(yù)先約定一個(gè)截止附,讀取的字節(jié)統(tǒng)統(tǒng)放到緩存區(qū)里,直到讀到截止附再處理、顯示。
1.用Win32 API PlaySound
PlaySound位于"winmm.dll"中,可以根據(jù)輸入?yún)?shù)的不同,播放WAV類(lèi)型的音樂(lè)。在VB.NET中調(diào)用跟VB6中差不多:
先聲明:
Private Declare Auto Function PlaySound Lib "winmm.dll" (ByVal lpszSoundName As String, ByVal hModule As Integer, ByVal dwFlags As Integer) As Integer
Const SND_FILENAME As Integer = H20000
Const SND_ALIAS As Integer = H10000
Const SND_SYNC As Integer = H0
具體還有很多常量,不一一列舉,下面是播放一個(gè)wav文件的例子
Dim mstrfileName As String = "c:\eagle2.wav"
PlaySound(mstrfileName, 0, SND_FILENAME)
注意上面的播放是非同步的,就是說(shuō)它并不會(huì)播放完畢才結(jié)束。如果把上面的代碼寫(xiě)在一個(gè)Button.Click的事件處理程序中,第二次點(diǎn)擊的時(shí)候它會(huì)打斷第一次的播放,重新開(kāi)始。
當(dāng)然我們也可以調(diào)用系統(tǒng)的聲音:
PlaySound("SystemStart", 0, SND_ALIAS Or SND_SYNC)
' 以同步的方式調(diào)用系統(tǒng)啟動(dòng)時(shí)候的聲音。
2. 調(diào)用媒體播放器控件
VB.NET中并沒(méi)有提供媒體播放器的.NET組件,沒(méi)辦法我們還是調(diào)用以前Com組件Windows Media Player。當(dāng)然除了聲音外,還可以播放視頻文件。
首先把媒體播放器控件加到工具欄中,調(diào)用還是簡(jiǎn)單的寫(xiě)一下吧:)
Private Sub playMediaFile(ByVal mediaFileName As String)
With MediaPlayer1
.Stop()
.FileName = "c:\mp3\愛(ài)不愛(ài)我.mp3"
.Play()
End With
End Sub