 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
dxnn520
註冊時間: 2011-09-09 文章: 3
第 1 樓
|
發表於: 星期三 九月 21, 2011 10:40 pm 文章主題: 用myfll.fll串口发十六进制数据问题? |
|
|
要求就是往【串口设备】发一个16进制“aa 00 00 00 00”信息,通过验证后,【串口设备】会立即返回一串16进制,当然需要接收时再把16进制转回asc码。我用的是myfll.fll
PUBLIC cretmsg,hCom1
cRetMsg=''
Set Library To myFll
mm=60 && 等待循环总时间
* ----------------------------------------------------------------------------------------- \\ 发送
hCom1=ComOpen(2,"9600,n,8,1")
cMsg=CREATEBINARY("aa 00 00 00 00") && 【赋值16进制字符】 -- 这种方法不行
cMsg=CREATEBINARY("aa 00 00 00 00") && 【赋值16进制字符】 -- 这种方法也不行
cMsg=CREATEBINARY("chr(170)")+CREATEBINARY("chr(0)")+CREATEBINARY("chr(0)")+CREATEBINARY("chr(0)")+CREATEBINARY("chr(0)")" && 【赋值16进制字符】 -- 也不行
ComWrite(hCom1,cMsg) &&向串口输出
* --------------------------------------------------------------------------------------- \\ 马上接收
m_time1=SECONDS()
DO whil .t.
cRetMsg=cRetMsg+ComRead(hCom1,0)
IF LEN(ALLTRIM(cRetmsg))>6 && 接收字符大于6个退出
MESSAGEBOX('恭喜您!数据传输完毕!')
EXIT
ENDIF
m_time2=SECONDS()
mtime=60-(m_time2-m_time1)
IF mtime=59
WAIT '' TIMEOUT 2
ENDIF
IF m_time2-m_time1>mm && 没有接收到退出
MESSAGEBOX('由于长时间未接受,接收状态停止!请重新传递!')
EXIT
ENDIF
ENDDO
ComClose(hCom1)&&关闭串口
Set Library To |
|
回頂端 |
|
 |
dxnn520
註冊時間: 2011-09-09 文章: 3
第 2 樓
|
發表於: 星期四 九月 22, 2011 9:50 am 文章主題: |
|
|
我现在用cMsg=0haa00000000解决了,但问题是接收到的是asc码,不是十六进制的。
实际目的是【串口设备】应该返回十六进制结果【aa 01 00 ad 0a 08 00 84】,需要从结果[00 ad]中取到一个十进制的数,然后再从结果[0a 08]中返回一个十进制的数,再从[00 84]中返回一个十进数,总共取3个数。
再次恳请老师给帮忙指导一下。 |
|
回頂端 |
|
 |
foxers
註冊時間: 2011-09-17 文章: 1
第 3 樓
|
發表於: 星期五 九月 23, 2011 10:07 am 文章主題: |
|
|
Myfll 的能力有限,直接用MSCOMM更好,你可以在OBJECT.OnComm 加
STRCONV(thisform.fdmscomm.input(),15) |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|