请问dcount107关于数组拆分的问题,急切!

看到dcount107兄在其他人的回帖,用用指针或union实现:
 BYTE bytes[4];
 float ff;
 bytes[0]=0x00;
 bytes[1]=0x00;
 bytes[2]=0xC8;
 bytes[3]=0x42;
 ff=*(float*)&bytes[0];
 printf("\r\n%f",ff);
 --------------------
 union aa
 {
 BYTE bytes[4];
 float ff;
 }aa;
 aa.bytes[0]=0x00;
 aa.bytes[1]=0x00;
 aa.bytes[2]=0xC8;
 aa.bytes[3]=0x42;
 printf("\r\n%f",aa.ff);

 这两种我直接做到按钮中试过可行,但我如果引用外部的数组变量就不行了,具体是这样的:我用kep的modbus直接读取3个连续的浮点数据400005【3】,直接用kep监测是有数据的,然后添加到wincc中为一个名叫AI的原始数据类型,用GetTagRaw获取处理如下:
 union uu 
 {
 BYTE b[12];
 float ff[3];
 }uu;

 int j;
 BYTE c[12];//原始变量存放数组
 GetTagRaw("AI",c,12);//获取原始浮点数组

 for (j=0;j<=2;j++)     //前后调换字节
 {
 uu.b[j*4]=c[j*4+3];
 uu.b[j*4+1]=c[j*4+2];
 uu.b[j*4+2]=c[j*4+1];
 uu.b[j*4+3]=c[j*4];

 printf("\r\n%f",uu.ff[0]);   
 printf("\r\n%f",uu.ff[1]);
 printf("\r\n%f",uu.ff[2]);

 程序没反应,请各位帮忙看看,哪有问题??

问题补充:
也能出现数字,但完全对不上号;
 比如我的400005[3]=[1.11,2,0]那出来的结果为:
 771345028601111420000000000000000000.000000
 0.000000
 0.000000

 400005[3]=[0.1,0.2,0]那出来的结果为:
 -429492128.000000
 -428443584.000000
 0.000000

 400005[3]的数值比较大的话则全为0,请大家帮忙看看

 

最佳答案

这倒挺奇怪。
  你可以试试这样:
  1、Kep单独读取一个浮点数,WinCC直接连接,看看是什么效果,然后用GetTagRaw试试。
  2、还有你把c的每个字节打印出来看看到底是怎么回事?

 补充------------------
 另外KepServer似乎不支持Float寄存器吧?40000x是保持型寄存器。

提问者对于答案的评价:

 现在问题解决了,原来在kep中采集到的原始数据付给新的字节后并不需要改变前后顺序,直接用就行了!

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc273170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日
下一篇 2019年6月11日

相关推荐