用VB调用API,控制串口通信。
读卡器要求波特率是38400,发现刚插上读卡器,我的程序不好使。
如果用AccessPort读写一次串口,我的程序就好使了。
通过监控,发现,刚上来就用我的程序,实际上设置了两次波特率,
第一次是38400,第二次是1200,而且数据位不是8,是奇怪的7…………
找来找去,原来是设置参数的SetCommState()方法返回False了。
那段代码如下:
Dim dc As DCB If hComm = 0 Then Exit Function If GetCommState(hComm, dc) Then dc.BaudRate = lBaudRate dc.ByteSize = cByteSize dc.StopBits = cStopBits dc.Parity = cParity dc.EOFChar = cEOFChar SetCommParam = CBool(SetCommState(hComm, dc)) End If
先取得参数,然后修改了几个,但是没有设置成功。
如果用AccessPort读写一次,波特率和停止位什么的就变为38400和1了。(我在accessPort里设置的)
再用我的程序就OK了。(先读参数,然后改)
很纳闷,为什么参数设置会失败~~~~
我的参数就直接传的数字,比如38400,8,1,0这样的。
然后看到参数类型是Byte,试着用Cbyte()函数转,也不行,
最后搜搜搜,用38400, 8, ONESTOPBIT, NOPARITY就好了。
还是内置的变量名好使哦,啊哈哈~~~~~ ========================================================== dcb.BaudRate= nBaud; dcb.Parity= nParity; dcb.ByteSize= nDataBits; dcb.StopBits= nStopBits; dcb.fBinary= bBinary; dcb.fParity= bParity; //其中 Parity: Value Meaning EVENPARITY Even MARKPARITY Mark NOPARITY No parity ODDPARITY Odd SPACEPARITY Space
StopBits: Value Meaning ONESTOPBIT 1 stop bit ONE5STOPBITS 1.5 stop bits TWOSTOPBITS 2 stop bits
//以下是宏定义 #define NOPARITY 0 #define ODDPARITY 1 #define EVENPARITY 2 #define MARKPARITY 3 #define SPACEPARITY 4
#define ONESTOPBIT 0 #define ONE5STOPBITS 1 #define TWOSTOPBITS 2
|