请问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日 上午9:44
下一篇 2019年6月11日 上午9:44

相关推荐

  • 求wincc声音报警代码

    最近做了个项目,写在报警记录中的报警条目都是从无符号32位变量中取位的形式,现在要求所有的报警都发出一个报警声音,想请师傅们给我一段全局代码:要求只要是报警记录中的任何一个报警来了…

    SIMATIC WinCC 2019年6月11日
  • 安装WINCC

    我安装WINCC时出现未安装Microsoft Message Queuing Service,是怎么会事啊,谢谢各位; 最佳答案 没装消息队列。&n…

    SIMATIC WinCC 2019年6月11日
  • wincc 2008 sp2以太网传送程序

    原来是用SP1 XP的系统,面板和电脑都设定好IP地址可以用以太网传送,最近使用最新的wincc felxible 2008 sp2和WIN…

    SIMATIC WinCC 2019年6月11日
  • wincc中的config

    wincc中的config文件夹有什么作用,我今天遇见wincc的趋势储存不住,用项目复制器提示config有问题/ 最佳答案 应该是存储应用项目中的系统配置信息的。提示有问题,可…

    SIMATIC WinCC 2019年6月11日
  • wincc脚本将数据写入SQL不成功

    C脚本可以写入浮点数,但无法写入字符串,VB脚本估计是连接数据库语句问题,数据库用的windows授权连接,怎么设定VB的UID和PWD,C脚本怎么写入字符串?VB脚本:Sub&n…

    SIMATIC WinCC 2017年6月1日
  • wincc运行界面的数据存储

    wincc运行界面上有许多变量(内部和外部),这些变量的当前值如何存储?能存多少?以便下次开机时使用?谢谢! 最佳答案 外部变量与PLC有关,可以放在DB块中以保存。 &…

    SIMATIC WinCC 2019年6月11日
  • 关于wincc的使用颜色问题

    如何在?WinCC操作中创建和使用用户自定义的颜色 最佳答案 怎么个使用?WINCC有个控件commonDialog控件可以实现弹出对话框,选择颜色,然后把颜色值进行返回然后你也可…

    SIMATIC WinCC 2021年7月5日
  • 用户归档 组件安装

    我安装的是WINCC2008 SP2 现在想做用归档,但是不知道这个选件在哪里能找到,我的安装文件里我找不到,请高手指教。 最佳答案 应该就是在安装文件里。你在…

    SIMATIC WinCC 2019年6月10日
  • TP270与S7-200通讯

    TP270与S7-300能通讯,换成200(224与226)都不行,电缆线没总题,484通讯,频率也都一样,Wincc中MPI选向也换成了PPI。 问题补充:拨码开关设置没问题,W…

    SIMATIC WinCC 2019年6月11日
  • WINCC变量名最长限制是多少?

    我用WINCC直接调用S7—400的变量,但是由于在WINCC里生成的结构变量比较长,不知道有没有影响变量的访问?例如:一个变量名为S7Program/driver_NO$21–…

    SIMATIC WinCC 2019年6月11日