1.根據USB的VID/PID得到端口號(COMx)
2.16進制命令的通信(byte[] buffer ={ 0x24, 0x02, 0x02, 0x22, 0x22 })
通讯参数
波特率:9600 校验位:无NONE 数据位:8位 停止位:1位
DEMO我看過,可以收發16進制嗎?
2.16進制命令的通信(byte[] buffer ={ 0x24, 0x02, 0x02, 0x22, 0x22 })
通讯参数
波特率:9600 校验位:无NONE 数据位:8位 停止位:1位
DEMO我看過,可以收發16進制嗎?
解决方案 »
- Pascal 语言对大小写敏感吗?
- 求按行读取WORD文件代码!
- delphi 如何实现KAISER密文..急.......
- DELPHI高手帮忙呀,急急急!
- 报表问题超难,那位高手帮帮忙,解决一下,谢谢了
- delphi怎样与数据库连接有哪几种方式
- 有谁知道文本框可以随意输入的dblookupcombobox吗?
- 用mediaplay控件播放一个avi,mpg文件,如何才能不在新窗口中打开
- 利用ADOQuery搜索学生成绩,两个DBGrid显示内容.DBGrid1显示各科成绩,DBGrid2显示不及格的课程,怎么做?
- 高手在哪?小弟用ADO连接数据库时设置密码出错了!请帮帮忙吧,谢谢!分好说。
- modelmarker中, 如何给函数添加注释?
- 哪位能给我些DELPHI7+ADO访问ACCESS的代码实例,多谢
http://topic.csdn.net/u/20100324/11/3c26314c-3671-4cb1-ae10-49f9af9dd50e.html
http://topic.csdn.net/u/20100324/13/c2fac56f-c365-4d8f-9614-adadc8310f28.html
再加也行
BYTE buffer[] ={ 0x24, 0x02, 0x02, 0x22, 0x22 };
BYTE readbuf[100];
Comm1->Write(buffer,sizeof(buffer)); //发送
Sleep(100); //等设备回应
int len=Comm1->Read(readbuf,10); //最多读10个byte,返回实际读到的
但如果是USB转成com的,可能会不可靠
const
sendbyte:array[0..4] of byte=( $24, $02, $02, $22, $22 );
var
buffer:array [0..100] of BYTE;
readbuf: array[00..100] of BYTE ;
len:integer;
begin
copymemory(@buffer[0],@sendbyte[0],4);
//如果数据不是很多,可直接赋值buffer[0]:=$24;buffer[1]:=$02;
Comm1.Write(buffer,4); //发送
Sleep(100); //等设备回应
len:=Comm1.Read(readbuf,10); //接收10个end;
PS:看到你的頭像我就想起某部位,邪惡啊邪惡
我用網上的一個軟件AcessPort可以得到正確的結果,比如我輸入 $24, $02, $02, $22, $22就可以得到00 2A 55,可是用那段代碼看到readbuf里的是(0,0,1,247,18),幫偶解釋下
将Sleep(100)改大点如Sleep(500);试试
沒有人回答俺第一個問題嗎?
1.根據USB的VID/PID得到端口號(COMx),相當於寫個函數
function GetPortNameFormVidPid(vid,pid:string)
var
KeyHandle: HKEY;
ErrCode, Index: Integer;
ValueName, Data: string;
ValueLen, DataLen, ValueType: DWORD;
TmpPorts: TStringList;
begin
ErrCode := RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
'HARDWARE\DEVICEMAP\SERIALCOMM',
0,
KEY_READ,
KeyHandle); if ErrCode <> ERROR_SUCCESS then
Exit; // raise EComPort.Create(CError_RegError, ErrCode); TmpPorts := TStringList.Create;
try
Index := 0;
repeat
ValueLen := 256;
DataLen := 256;
SetLength(ValueName, ValueLen);
SetLength(Data, DataLen);
ErrCode := RegEnumValue(
KeyHandle,
Index,
PChar(ValueName),
Cardinal(ValueLen),
nil,
@ValueType,
PByte(PChar(Data)),
@DataLen); if ErrCode = ERROR_SUCCESS then
begin
SetLength(Data, DataLen);
TmpPorts.Add(Data);
Inc(Index);
end
else
if ErrCode <> ERROR_NO_MORE_ITEMS then
exit; //raise EComPort.Create(CError_RegError, ErrCode); until (ErrCode <> ERROR_SUCCESS) ; TmpPorts.Sort;
Ports.Assign(TmpPorts);
finally
RegCloseKey(KeyHandle);
TmpPorts.Free;
end;是这一段获取串口的代码,也许对你有用
謝謝LS,可以看這裡,從另外一個帖子看來的
這是另外一種思路了,不過是可以達到目的的