var
instring, buffer,RTDS,PWDS:string;
RTDV,PWDV:Single;
RTD,PWD:integer;
label lab1;
begin
StatusBar1.Panels[1].Text:='状态: 正在采集!';
{ buffer:=chr($41);
mscomm1.Output:=buffer;
repeat
Application.ProcessMessages;
td:=td+1;
until td>100000;
repeat
Application.ProcessMessages;
tz:=tz+1;
if tz>1000 then
begin
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Text:='通讯失败!';
goto lab1;
end;
until mscomm1.InBufferCount>11;
edit4.Text := '通讯正常!';
instring:=mscomm1.Input;
RTDS:=copy(instring,1,6);
PWDS:=copy(instring,7,4);
RTD:=strtoint('$'+RTDS);
PWD:=strtoint('$'+PWDS);
RTDV:=(RTD-8388608)/504.6+CWD;
//8388608=8000000H,为RTD 0度对应值,504.6为1度对应的点数
PWDV:=PWD/256; //256为片内RTD1度对应的点数}
14 个解决方案
#1
Application.ProcessMessages 处理消息队列 直到把消息队列中的消息处理完毕
copy(instring,1,6) 复制instring字符串中的内容 从第一个开始复制六个字符
$ 符号? 不太确定什么意思
copy(instring,1,6) 复制instring字符串中的内容 从第一个开始复制六个字符
$ 符号? 不太确定什么意思
#2
ShowMessage(Format('%d,%d',[StrToInt('10'),StrToInt('$10')]));
就可以看出来了哈,一个是10进制,一个是16进制
就可以看出来了哈,一个是10进制,一个是16进制
#3
strtoint('$'+PWDS)-->16进制转换10进制
Application.ProcessMessages--〉处理消息队列,主要是为了释放系统控制权,如果不使用这一步,如果你的处理很多,这个时候你可能根本没办法作任何操作,比如鼠标的移动,但是用了这个,后台就会自动分发处理消息,你仍然可以操作你的其他动作,你的程序也会继续处理自己的任务。就是这样的意思了。
Application.ProcessMessages--〉处理消息队列,主要是为了释放系统控制权,如果不使用这一步,如果你的处理很多,这个时候你可能根本没办法作任何操作,比如鼠标的移动,但是用了这个,后台就会自动分发处理消息,你仍然可以操作你的其他动作,你的程序也会继续处理自己的任务。就是这样的意思了。
#4
xjjrocker(了无痕)
strtoint('$'+PWDS)-->16进制转换10进制
-------------------------------------
反了,应该是10进制转换16进制
如:$10,表示16进制的10
strtoint('$'+PWDS)-->16进制转换10进制
-------------------------------------
反了,应该是10进制转换16进制
如:$10,表示16进制的10
#5
如:$10,表示16进制的10
#6
哈哈,对的,写反了,呵呵
#7
前面加个'$'是表示16进制,但是转换的时候StrToInt()就是16进制转换10进制了
比如:i:=StrToInt('$'+'5B');就是把16进制的'5B'转换成10进制。
比如:i:=StrToInt('$'+'5B');就是把16进制的'5B'转换成10进制。
#8
差点被你忽悠了,呵呵
#9
xjjrocker(了无痕)
为什么需要对其进行这种转换呢? 但是在这里又是必须的,我不明白为什么?RTDS本来是string类型,类型是匹配的啊。我把'$'删掉就出错了。
为什么需要对其进行这种转换呢? 但是在这里又是必须的,我不明白为什么?RTDS本来是string类型,类型是匹配的啊。我把'$'删掉就出错了。
#10
太菜了,建议楼主找到二进制,10进制,8进制,16进制的基础书看2分钟就好了。
#11
不好意思,本人刚开始学习,先谢谢xjjrocker(了无痕)的回答了
#12
我先看看
#13
晕,没有注意还有StrToInt
#14
谢谢大家 谢谢大家
#1
Application.ProcessMessages 处理消息队列 直到把消息队列中的消息处理完毕
copy(instring,1,6) 复制instring字符串中的内容 从第一个开始复制六个字符
$ 符号? 不太确定什么意思
copy(instring,1,6) 复制instring字符串中的内容 从第一个开始复制六个字符
$ 符号? 不太确定什么意思
#2
ShowMessage(Format('%d,%d',[StrToInt('10'),StrToInt('$10')]));
就可以看出来了哈,一个是10进制,一个是16进制
就可以看出来了哈,一个是10进制,一个是16进制
#3
strtoint('$'+PWDS)-->16进制转换10进制
Application.ProcessMessages--〉处理消息队列,主要是为了释放系统控制权,如果不使用这一步,如果你的处理很多,这个时候你可能根本没办法作任何操作,比如鼠标的移动,但是用了这个,后台就会自动分发处理消息,你仍然可以操作你的其他动作,你的程序也会继续处理自己的任务。就是这样的意思了。
Application.ProcessMessages--〉处理消息队列,主要是为了释放系统控制权,如果不使用这一步,如果你的处理很多,这个时候你可能根本没办法作任何操作,比如鼠标的移动,但是用了这个,后台就会自动分发处理消息,你仍然可以操作你的其他动作,你的程序也会继续处理自己的任务。就是这样的意思了。
#4
xjjrocker(了无痕)
strtoint('$'+PWDS)-->16进制转换10进制
-------------------------------------
反了,应该是10进制转换16进制
如:$10,表示16进制的10
strtoint('$'+PWDS)-->16进制转换10进制
-------------------------------------
反了,应该是10进制转换16进制
如:$10,表示16进制的10
#5
如:$10,表示16进制的10
#6
哈哈,对的,写反了,呵呵
#7
前面加个'$'是表示16进制,但是转换的时候StrToInt()就是16进制转换10进制了
比如:i:=StrToInt('$'+'5B');就是把16进制的'5B'转换成10进制。
比如:i:=StrToInt('$'+'5B');就是把16进制的'5B'转换成10进制。
#8
差点被你忽悠了,呵呵
#9
xjjrocker(了无痕)
为什么需要对其进行这种转换呢? 但是在这里又是必须的,我不明白为什么?RTDS本来是string类型,类型是匹配的啊。我把'$'删掉就出错了。
为什么需要对其进行这种转换呢? 但是在这里又是必须的,我不明白为什么?RTDS本来是string类型,类型是匹配的啊。我把'$'删掉就出错了。
#10
太菜了,建议楼主找到二进制,10进制,8进制,16进制的基础书看2分钟就好了。
#11
不好意思,本人刚开始学习,先谢谢xjjrocker(了无痕)的回答了
#12
我先看看
#13
晕,没有注意还有StrToInt
#14
谢谢大家 谢谢大家