登录
首页 PLC论坛 德嘉工控
回帖 发帖
正文

主题:WinCC中32位无符号数变换成浮点数显示C例程

点击:4911 回复:3

实现工作:将WinCC中32位无符号数通过C脚本转换为32位浮点数
步骤如下:
1.建立变量“z32”,数据类型为无符号32位值,地址为modbus寄存器地址:3x400001。485通讯设备直接用wincc读取其数据,中间需要加大连德嘉ModbusTCP/ModbusRTU转换器,该转换器是将ModbusRTU协议转换为ModbusTCP协议,从而通过以太网方式和上位机WinCC通讯。
附件 图片1.jpg
2.建立内部变量“b_float”,数据类型为32位浮点数IEEE 754。
附件 图片2.jpg
3.然后建立测试画面,添加一个IO域,然后启用C动作,编写如下例程。
附件 图片3.jpg
如图片看不清,可以直接看下面语句:
#include "apdefap.h"
double _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
float  b_float;
BYTE  *c_str;
BYTE buf[4];
DWORD z;
z=GetTagDWord("z32"); //Return-Type: DWORD
buf[3]=(z>>24)&0x000000FF;/*0x43;*/
buf[2]=(z>>16)&0x000000FF;/*0x71;*/
buf[1]=(z>>8)&0x000000FF;/*0x08;*/
buf[0]=(z>>0)&0x000000FF;/*0x40;*/
c_str=(BYTE*)&b_float;
*c_str=buf[2];c_str++;
*c_str=buf[3];c_str++;
*c_str=buf[0];c_str++;
*c_str=buf[1];
return b_float;
}
4.最后运行wincc监控画面如下:
附件 图片4.jpg
这里通过Modbus Poll调试软件测试,将数据类型显示为Float CD AB格式。
附件 图片5.jpg
注:可能有的设备定义32位数时,数据类型为AB CD,这样得话就将重新组合一下,如下。因为这个具体要看设备厂家是怎么定义的数据处理方式,有的是高字节在前,有的是低字节在前。
#include "apdefap.h"
double _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
float  b_float;
BYTE  *c_str;
BYTE buf[4];
DWORD z;
z=GetTagDWord("z32"); //Return-Type: DWORD
buf[3]=(z>>24)&0x000000FF;/*0x43;*/
buf[2]=(z>>16)&0x000000FF;/*0x71;*/
buf[1]=(z>>8)&0x000000FF;/*0x08;*/
buf[0]=(z>>0)&0x000000FF;/*0x40;*/
c_str=(BYTE*)&b_float;
*c_str=buf[3];c_str++;
*c_str=buf[2];c_str++;
*c_str=buf[1];c_str++;
*c_str=buf[0];
return b_float;
}
20-07-01 14:05
好帖,图片看不清,可以点击图片再放大图片哦
20-07-01 16:25
楼主,本来打算买一个你们公司以太网交换机,微信联系后没有下文了。
20-07-01 21:09
您可以加我下15712391325
20-08-06 09:47

工控新闻

更多新闻资讯