发送的数据为0xaa+0x55+调号+频率1+频率2+频率3+(调号+频率1+频率2+频率3和取反)频率1,2,3是一个长式子的16进制的值的后3个字节大侠帮看下 改好一定追加procedure TForm1.Button1Click(Sender: TObject);vara,b,c,e,f,g:int64;j:string;beginif combobox2.text=''then showmessage('调号为空')elsebeginif combobox3.text=''then showmessage('请选择频率')elsebeging:=round(32768*(((4*strtofloat(combobox3.text))/14.7456)-3/2));j:=inttohex(g,6);a:=strtoint(copy(j,1,2));b:=strtoint(copy(j,3,2));c:=strtoint(copy(j,5,2));e:=strtoint(combobox2.text)+a+b+c;f:=(not e);if radiobutton1.Checked thenmscomm1.output:=chr($aa)+chr($55)+chr(strtoint(combobox2.text))+chr(a)+chr(b)+chr(c)+chr(f);Application.CreateForm(Tform5,form5);form5.showmodal;form5.free;end;end;end;combobox2里是 1-20的整数combobox3里是 带小数点的数为什么会报错?该怎么改?谢谢 f:=(not e);取反
3 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
''is not a valid integer value 表示你strtoint函数使用的时候有值是'',
从语法上来看看不出来的,要你自己下断点跟踪,从
g:=round(32768*(((4*strtofloat(combobox3.text))/14.7456)-3/2));
这句开始下断点,一步步的走,看值,如果到Application.CreateForm(Tform5,form5);这句还没有报错的话,那就不是你这个单元的东西有问题了,就有可能是form5的create事件里有问题代码。
另外两点建议:round()这个函数有BUG的,你showmessage(inttostr(round(3.5))) 和showmessage(inttostr(round(4.5))) 看看效果就知道了。一般这样解决,不保留小数:trunc(a+0.5) 一位小数:trunc((a*10+0.5)/10) 二位小数:trunc((a*100+0.5)/100)
建议你串口发送的数据放一个数组里比较好,象你这个就直接一个整形数组,接收端收到就可以直接用,MSCOMM好像是可以直接发送数组的,久了没用,忘记了
- 3 回答
- 0 关注
- 199 浏览
添加回答
举报
0/150
提交
取消