在书上看到说:串口的读写分为两种情况,一种是字符串的读写,只要直接引用缓冲区就可以了,如:
mscomm1.output:= memo1.text. 另一种情况是二进制的读写,则要复杂一些,但没有举例。
我现在想通过串口把以下十六进制数据命令发到一个设备上去,
“55 90 99 99 FE FE 05 01 00 00 99 99 CRC ” (CRC是校验码,也是一个十六进制字节)
请问该如何写一段写串口数据的相关代码呢?要注意哪些?多谢,越详细越好,一定给分!
mscomm1.output:= memo1.text. 另一种情况是二进制的读写,则要复杂一些,但没有举例。
我现在想通过串口把以下十六进制数据命令发到一个设备上去,
“55 90 99 99 FE FE 05 01 00 00 99 99 CRC ” (CRC是校验码,也是一个十六进制字节)
请问该如何写一段写串口数据的相关代码呢?要注意哪些?多谢,越详细越好,一定给分!
解决方案 »
- 用API写的com port实例, 但只有数据量达到256时getoverlappedresult才正常返回
- 存储过程的问题
- 困扰已久的窗体继承问题!(100分送人)
- 如何生成这样的报表?
- 请教:如何把123.45转换为壹佰贰拾叁元肆角伍分!急需谢谢!!
- MIDAS请进来,高分奉送!
- 200分问一个问题,怎样将.jpg图像文件存放在.dll文件里。
- [ODBC Microsoft Access Driver]参数不足,期待是1
- 关于WaitForSingleObject
- 怪异的文本!
- VB的Is Nothing转成Delphi应该用什么函数?
- 我想学习用DELPHI进行EXCEL的开发,哪儿有最详细的资料,谢谢!!
多看帮助和源码,这个市程序员的最基本准则
var//现金收费机
InputArr0,InputArr1,OutArr:array of byte;
Temp:byte;
i,j,k:integer;
rtn:boolean;
begin
try
result:=false; SetLength(InputArr0,1);
InputArr0[0]:=TermNo; setlength(inputarr1,5);
InputArr1[0]:=5;
InputArr1[1]:=$30;
InputArr1[2]:=$10;
//校验值
Temp:=0;
for i:=0 to 2 do
Temp:=Temp+InputArr1[i];
InputArr1[3]:=Temp;
Temp:=0-Temp;
InputArr1[4]:=Temp; with FrmMain.Comm do
for k:=0 to 1 do
begin
OutBufferCount:=0;
InBufferCount:=0; Settings:='57600,M,8,1';
Output:=InputArr0;
sleep(3); Settings:='57600,S,8,1';
Output:=InputArr1;
rtn:=false;
sleep(15); j:=InBufferCount;
if (CommEvent=2) and (j<>0) then
begin
rtn:=true;
setlength(OutArr,j);
OutArr:=Input;
if j=OutArr[0] then //check length
begin
Temp:=0; //check
for i:=0 to j-3 do
Temp:=Temp+OutArr[i];
if Temp=OutArr[j-2] then
begin
Temp:=0-Temp;
if Temp=OutArr[j-1] then
if OutArr[1]=$10 then
begin
Result:=true;
exit;
end;
end;
end;
end;
if not rtn then exit;
end;
except
InitializeComm;
end;
end;初学时写的
很烂
不好意思
^_^