追隨Java
簡(jiǎn)單的事情重復(fù)做,就會(huì)產(chǎn)生累積效應(yīng)!
BlogJava
首頁(yè)
新文章
新隨筆
聚合
管理
posts - 260, comments - 338, trackbacks - 0
關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
?????????????????????????????????關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)?
???????????????由于這幾天要通過(guò)java調(diào)用通過(guò)串口或并口連接的硬件資源,所以我就要用到和底層的硬件進(jìn)行通訊。通過(guò)RS-232的通訊協(xié)議,了解電腦和外設(shè)是怎樣進(jìn)行通訊的。在應(yīng)用中我們也可以通過(guò)JNI來(lái)實(shí)現(xiàn)(詳情請(qǐng)見http://m.tkk7.com/hgq0011/archive/2005/09/21/13637.html),這樣的話,就必須知道更多的知識(shí)。由于
java已經(jīng)提供我們一個(gè)javacomm20-win32通用的API我們還是實(shí)行 “拿來(lái)主義”
吧。我就把整個(gè)應(yīng)用的過(guò)程詳細(xì)的說(shuō)一下,希望給需要的人一點(diǎn)幫助。?
????????????我們經(jīng)過(guò)串口和外設(shè)通訊,下面我就以
串口為例進(jìn)行解說(shuō)
。?
????????????1)我們要準(zhǔn)備相應(yīng)的設(shè)備。
??????????????????電腦,外設(shè),通過(guò)數(shù)據(jù)線把他們連接起來(lái)。?
????????????2)檢驗(yàn)外設(shè)到底是用的那個(gè)COM口和電腦通訊的。
??????????????????也就是說(shuō),他們有沒(méi)有真確的連接上。我們可以通過(guò)下載串口通訊口測(cè)試軟件,我用的是
"SuperCommTool.exe"的綠色軟件,進(jìn)行測(cè)試的
。這軟件很適應(yīng),如果選中的某個(gè)COM已經(jīng)被使用了,它會(huì)給你一個(gè)相應(yīng)的提示(端口以被占用)。如果你不知道到底是使用的那個(gè)端口,那么你可以通過(guò)superCommTool軟件一個(gè)一個(gè)的試,如果正常的話,那么你可以看到有數(shù)據(jù)顯示在數(shù)據(jù)接收窗口。也許,有些主板的串口壞了,那么你就要買一個(gè)轉(zhuǎn)接卡,通過(guò)PCI插口轉(zhuǎn)接。?
????????????3)察看外設(shè)使用說(shuō)明書知道外設(shè)的相關(guān)參數(shù)。
???????????????比如,波特率,數(shù)據(jù)位,停止位,校驗(yàn)位,等等。只有正確參數(shù),才能顯示正確的數(shù)據(jù)。當(dāng)然,你可以在通訊測(cè)試軟件上調(diào)試這些參數(shù)的。比如:波特率 = 2400,數(shù)據(jù)位 = 8,停止位 = 2 ,校驗(yàn)位 = 1。?
????????????4)準(zhǔn)備開發(fā)環(huán)境。
????????????最基本的JDK了,你可以使用自己鐘愛的IDE,幫助你開發(fā)。IDE可能自帶了JDK,那么 你要把相應(yīng)的javaComm20-win32放到運(yùn)行時(shí)使用的JDK中。 下載JAVAcomm20-win32。
??????????5)了解javaComm20-win32。
????????????你必須把win32com.dll復(fù)制到j(luò)ava.home/bin下;把javax.comm.properties 復(fù)制到j(luò)ava.home/lib下;把comm.jar添加到你classPath下。
前面兩個(gè)都是非常重要的
。?
?????????????下面說(shuō)明用到的幾個(gè)類:?
??????????????????
javax.comm.CommPortIdentifier?
?????????????????????通訊端口管理器,CommPortIdentifier是控制訪問(wèn)到通訊端口的中 心類。
?????????????????????它包括的方法有:?
???????????????????????????a. 通過(guò)驅(qū)動(dòng)決定通訊端口是可用的。?
???????????????????????????b. 打開通訊端口為了I/O操作。?
???????????????????????????c. 決定端口的擁有者。?
???????????????????????????d. 解析端口擁有者的爭(zhēng)奪。?
???????????????????????????e. 管理事件顯示在端口擁有者的中的狀態(tài)改變。?
?????????????????????一個(gè)應(yīng)用程序首先使用CommPortIdentifier中的方法,通過(guò)相關(guān)的驅(qū)動(dòng)去獲取那些通訊端口是可用的 并且選擇一個(gè)端口便于開始。然后它使用方法在其它類中想CommPort,ParallelPort和SerialPort通過(guò) 這個(gè)端口進(jìn)行通訊。?
??????????????????
javax.comm.SerialPort
?
?????????????????????一個(gè)RS-232串口通訊端口。SerialPort 描述底層的接口到一個(gè)串口通訊端口 變得有效的通過(guò)底層的系統(tǒng)。SerialPort定義最小的必需的功能便于串口通訊端口。?
??????????????????
javax.comm.SerialPortEventListener
?
?????????????????????串行端口事件傳播。?
??????????????????
javax.comm.CommDriver
?
?????????6)代碼的編寫。?
???????????????a. 獲取SerialPort sPort對(duì)象的兩種方法。
???????????????????1)
???????????????????????????
System.loadLibrary(
"
win32com
"
);?
??????????????????????????????javax.comm.CommDriver?driver?
=
?
null
;?
??????????????????????????????String?driverName?
=
?
"
com.sun.comm.Win32Driver
"
;?
????????????????????????????? SerialPort?sPort?
=
?(SerialPort)?driver.getCommPort(
"
COM4
"
,?CommPortIdentifier.PORT_SERIAL);?
??????????????????2)
??????????????????????
CommPortIdentifier?portId?
=
?CommPortIdentifier.getPortIdentifier(
"
COM4
"
);?
?????????????????????????? SerialPort?sPort?
=
?(SerialPort)portId.open(
"
shipment
"
,
1000
);
?????????????以上兩種方法都可以。不過(guò)一般都會(huì)采用第二種。方法說(shuō)明我們獲取了對(duì)串行端口(COM4),可以和它進(jìn)行通訊了。?
??????????????b. 設(shè)置串行端口通訊參數(shù)。
sPort.setSerialPortParams(
2400
,SerialPort.DATABITS_8,SerialPort.STOPBITS_2,SerialPort.PARITY_NONE);?
???????????????c. 獲取輸入(出)流。?
??????????????????
????????????InputStream?is?
=
?sPort.getInputStream();
//
從外設(shè)獲取數(shù)據(jù)?
??????????????
OutputStream?os?=?sPort.getOutputStream()
;
//
發(fā)送命令到外設(shè)
???????????????d.通過(guò)監(jiān)聽器就可以得到數(shù)據(jù)了。
??????????????????
?1
//
Set?notifyOnDataAvailable?to?true?to?allow?event?driven?input.
?2
????????????sPort.notifyOnDataAvailable(
true
);
?3
?4
?????????????
//
?Set?notifyOnBreakInterrup?to?allow?event?driven?break?handling.
?5
????????????sPort.notifyOnBreakInterrupt(
true
);
?6
?7
?????????????
//
?Set?receive?timeout?to?allow?breaking?out?of?polling?loop?during??input?handling.
?8
????????????sPort.enableReceiveTimeout(
30
);
?9
????????????StringBuffer?linkWgt?
=
?
new
?StringBuffer();
//
存放獲取的數(shù)據(jù)
10
????????????sPort.addEventListener(?
11
????????????????
new
?SerialPortEventListener()
{
12
????????????????????
public
?
void
?serialEvent(SerialPortEvent?e)
{
13
????????????????????????
int
?newData?
=
?
0
;
14
????????????????????????
//
?Determine?type?of?event.
15
????????????????????????
switch
?(e.getEventType())?
{
16
????????????????????????
//
?Read?data?until?-1?is?returned.?If?\r?is?received?substitute
17
????????????????????????????
//
?\n?for?correct?newline?handling.
18
????????????????????????????
case
?SerialPortEvent.DATA_AVAILABLE:
19
????????????????????????????????
while
?(newData?
!=
?
-
1
)?
{
20
????????????????????????????????????
try
?
{
21
????????????????????????????????????????newData?
=
?is.read();
22
????????????????????????????????????????
if
?(newData?
==
?
-
1
)?
{
23
????????????????????????????????????????????
break
;
24
????????????????????????????????????????}
25
????????????????????????????????????????
if
?(
'
\r
'
?
==
?(
char
)newData)?
{
26
????????????????????????????????????????}
?
else
?
{
27
????????????????????????????????????????????linkWgt.append((
char
)newData);
28
????????????????????????????????????????}
29
????????????????????????????????????}
?
catch
?(IOException?ex)?
{
30
????????????????????????????????????????System.err.println(ex);
31
????????????????????????????????????????
return
;
32
????????????????????????????????????}
33
????????????????????????????????}
34
35
????????????????????????????
//
?Append?received?data?to?messageAreaIn.
36
????????????????????????????
37
?????????????????????????????
try
{
38
????????????????????????????????System.out.println(
"
linkWgt?---------|||||??????????
"
+
Double.valueOf(linkWgt.toString()));
39
????????????????????????????????
40
?????????????????????????????}
catch
(Exception?ew)
{
41
?????????????????????????????????ew.printStackTrace();
42
?????????????????????????????}
finally
{
43
?????????????????????????????????
try
{
44
????????????????????????????????????
//
用完了,記得關(guān)閉端口。
45
?????????????????????????????????????is.close();
46
????????????????????????????????????sPort.close();
47
?????????????????????????????????}
catch
(Exception?c)
{
48
?????????????????????????????????????c.printStackTrace();
49
?????????????????????????????????}
50
?????????????????????????????}
51
????????????????????????????
break
;
52
????????????????????????????
//
?If?break?event?append?BREAK?RECEIVED?message.
53
????????????????????????????
case
?SerialPortEvent.BI:
54
????????????????????????????????System.out.println(
"
\n---?BREAK?RECEIVED?---\n
"
);
55
????????????????????????}
56
????????????????????}
57
58
????????????????}
59
????????????);
??????????7)常見的異常
????????????????a. javax.comm.NoSuchPortException 這個(gè)說(shuō)明你的javax.comm.properties沒(méi)有放到正確的位置。
?如果有什么不正確的地方,歡迎批評(píng)指正,謝謝!
posted on 2007-03-23 09:48
Harryson
閱讀(5961)
評(píng)論(4)
編輯
收藏
所屬分類:
Jni--Communication
、
J2SE
FeedBack:
#
re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
2007-03-23 12:18 |
turbochen
沒(méi)什么可補(bǔ)充的,有興趣可以參考一下我2004年寫的文章:
http://blog.csdn.net/turbochen/archive/2004/05/07/8105.aspx
關(guān)于win32com.dll可以就放在你的應(yīng)用程序(.jar)所在的目錄。不用拔山涉水的放到j(luò)ava.home/bin下,破壞原目錄的內(nèi)容。
回復(fù)
更多評(píng)論
#
re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
2007-03-23 17:15 |
Christ Chang
原來(lái)那篇文章是你寫的,嚴(yán)重頂一下!!
回復(fù)
更多評(píng)論
#
re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
2007-09-21 00:16 |
dxr
頂一下!!!
不過(guò)我沒(méi)有javax.comm類庫(kù),從網(wǎng)上也下載不了,能給我傳一個(gè)嗎?
我的郵箱是dxianr@163.com 先謝了!
回復(fù)
更多評(píng)論
#
re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
2013-01-31 12:28 |
lsc
javax.comm.CommDriver driver = null; diver沒(méi)有初始化吧?
回復(fù)
更多評(píng)論
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
相關(guān)文章:
關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構(gòu)下實(shí)現(xiàn)與硬件(讀卡器)通訊
串口通訊
<
2013年1月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用鏈接
我的隨筆
我的評(píng)論
我的參與
最新評(píng)論
留言簿
(10)
給我留言
查看公開留言
查看私人留言
隨筆分類
(319)
AJAX(4)
Coffee House(78)
cvs(2)
cygwin(2)
Eclipse(5)
EJB(13)
ERP(2)
Hibernate(15)
Html(9)
iBatis(3)
IDE(5)
J2SE(17)
Javascript(14)
Jboss(10)
Jdbc(4)
Jni--Communication(3)
Management(18)
NetWork(7)
Oracle
PowerDesigner(2)
Proxool(1)
Question(12)
SoftwareEngineering(20)
Spring(17)
SqlServer(18)
Struts(4)
Tutorial(15)
VFP(1)
Web Service (1)
WebWork(6)
WSAD(11)
AJAX
Buffalo
DWR
Coffee House
CCTV
slashdotcn
verycd
凱迪網(wǎng)絡(luò)
聯(lián)合早報(bào)
藍(lán)牙耳機(jī)
CSS
bindows
netvtm
Onestab
openwebdesign
UI設(shè)計(jì)
walterzorn
WebFx
藍(lán)色經(jīng)典論壇
Java
IBM
Java.net
Java.sun
JavaWorld
JAVA天下
onjava
sourceforge
JavaScript
JavaScript論壇
Open Source
Apache
bjug
Codehaus
crack
eclipse-plugins
grails
Hibernate
Jboss
laszlo
Midwinter
OpenOffice
Spring
theserverside
WebWork
webworkSc
源碼網(wǎng)
一個(gè)不錯(cuò)的源碼發(fā)布與下載網(wǎng)站
ProjectManagement
domain-driven design
信息資源
軟件架構(gòu)
項(xiàng)目管理者聯(lián)盟
友情Blog
@misseye
BuggyBean
Gavin King
James Strachan
JC
liuruhong
Rami
Rory Ye
techno.blog("Dion")
utopian
Waterye
平和大度 探索追求
夢(mèng)想風(fēng)暴
獨(dú)釣寒江
透明思考
最新隨筆
1.? 工作認(rèn)真就夠了嗎?
2.? 出門在外請(qǐng)多注意安全
3.?物業(yè)管理公司太不負(fù)責(zé)任,真讓人氣憤
4.?你是否還在為學(xué)歷在擔(dān)心?
5.?公司準(zhǔn)備上ERP的情況
6.?WAS非常奇怪的問(wèn)題
7.?系統(tǒng)上線感悟
8.?關(guān)注自己的職業(yè)發(fā)展方向
9.?硬盤資料整理好了嗎?備份了嗎?
10.?說(shuō)說(shuō)公司給大家工作PC的配置?
11.?CVS使用注意
12.?空調(diào)噪音問(wèn)題嚴(yán)重
13.?私活就那么難搞定嗎?
14.?用groovy你能做一些酷的事情
15.?acegi是一個(gè)很好的開源項(xiàng)目,通過(guò)認(rèn)證和授權(quán)來(lái)保護(hù)資源
最新評(píng)論
1.?re: spring初始化時(shí)出錯(cuò)了,[未登錄](méi)
沒(méi)有編譯好
--ff
2.?re: Error creating bean with name
@呵呵
缺少包。commons-pool.jar
--tlj
3.?re: 正則表達(dá)式(限制text只允許輸入int ,float)
去你媽逼滴
--操你媽
4.?re: 正則表達(dá)式(限制text只允許輸入int ,float)
1212
--ht
5.?dddddddddddd
ddddddddddddddddd
--ddddddddddddd
6.?re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
javax.comm.CommDriver driver = null; diver沒(méi)有初始化吧?
--lsc
7.?re: spring+hibernate初始化出錯(cuò),錯(cuò)誤真是隱蔽得很,讓人郁悶,,,
太感謝了,這個(gè)問(wèn)題弄了我超久
--qiuzhiye51
8.?re: org.hibernate.PropertyNotFoundException: Could not find a getter for empDeptId in class com.legend.shipment.Temployee
太謝謝了 這個(gè)問(wèn)題我找了很久 謝謝
--sos
9.?re: javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構(gòu)下實(shí)現(xiàn)與硬件(讀卡器)通訊
與硬件通訊的dll還需要自己寫嗎?
--南無(wú)
10.?re: 太不負(fù)責(zé)任,真讓人氣憤
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--8989899
閱讀排行榜
1.?當(dāng) IDENTITY_INSERT 設(shè)置為 OFF 時(shí),不能向表 中的標(biāo)識(shí)列插入顯式值。(30219)
2.?Error creating bean with name (18554)
3.?CPU使用率不高,內(nèi)存怎么使用率也不高,但系統(tǒng)假死了(9260)
4.?org.hibernate.PropertyNotFoundException: Could not find a getter for empDeptId in class com.legend.shipment.Temployee(8698)
5.?PowerDesigner學(xué)習(xí)指南(8212)
6.?spring+hibernate初始化出錯(cuò),錯(cuò)誤真是隱蔽得很,讓人郁悶,,,(7926)
7.?私活就那么難搞定嗎?(7701)
8.?javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構(gòu)下實(shí)現(xiàn)與硬件(讀卡器)通訊(6207)
9.?用hibernate作為持久層,update是出現(xiàn)了重復(fù)記錄(6183)
10.?關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)(5961)
11.?正則表達(dá)式(限制text只允許輸入int ,float)(5610)
12.?spring+hibernate下連接兩個(gè)以上的數(shù)據(jù)庫(kù)(5311)
13.?Cannot create JDBC driver of class (4910)
14.?jboss+eclipse+jboss-IDE部署運(yùn)行EJB3(4892)
15.?ResultSet can not re-read row data for column(4822)
評(píng)論排行榜
1.?GMail邀請(qǐng)函(43)
2.?私活就那么難搞定嗎?(19)
3.?合同期滿,是留還是跳,怎樣抉擇?(16)
4.?javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構(gòu)下實(shí)現(xiàn)與硬件(讀卡器)通訊(13)
5.?ResultSet can not re-read row data for column(11)
6.?當(dāng) IDENTITY_INSERT 設(shè)置為 OFF 時(shí),不能向表 中的標(biāo)識(shí)列插入顯式值。(11)
7.?出事了,盜版被抓,(11)
8.?PowerDesigner學(xué)習(xí)指南(9)
9.?奇怪的死機(jī)??(9)
10.?項(xiàng)目(框架)架構(gòu)的抉擇(8)
Copyright ©2025 Harryson Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
**aaaaa毛片免费同男同女
|
亚洲午夜无码久久久久小说
|
亚洲日本va在线视频观看
|
亚洲国产主播精品极品网红
|
免费jlzzjlzz在线播放视频
|
国产一区二区三区在线免费观看
|
尤物永久免费AV无码网站
|
国产裸模视频免费区无码
|
午夜国产羞羞视频免费网站
|
亚洲av区一区二区三
|
亚洲精品一级无码鲁丝片
|
无套内射无矿码免费看黄
|
美女扒开屁股让男人桶爽免费
|
成人婷婷网色偷偷亚洲男人的天堂
|
WWW国产亚洲精品久久麻豆
|
国产精品亚洲AV三区
|
色多多A级毛片免费看
|
国产人成网在线播放VA免费
|
玖玖在线免费视频
|
久视频精品免费观看99
|
黄瓜视频高清在线看免费下载
|
成人毛片18岁女人毛片免费看
|
国产精品嫩草影院免费
|
免费人成网站7777视频
|
日韩亚洲变态另类中文
|
亚洲国产综合91精品麻豆
|
亚洲日韩乱码久久久久久
|
亚洲人xxx日本人18
|
久久精品熟女亚洲av麻豆
|
噜噜噜亚洲色成人网站∨
|
亚洲国产av一区二区三区丶
|
亚洲中文无码亚洲人成影院
|
黄页网站在线免费观看
|
a级毛片免费在线观看
|
中国人xxxxx69免费视频
|
天天操夜夜操免费视频
|
亚洲中久无码不卡永久在线观看
|
久久久久久久久亚洲
|
国产精品亚洲片在线va
|
九九久久国产精品免费热6
|
无码一区二区三区免费
|