| 作者 | 主题 |
|---|---|
|
YiMoon 至圣
经验值:11740 发帖数:1228 精华帖:36 |
楼主
主题:【分享】关于MODBUS DOUBLE型数据读取问题(64位浮点数)
前段时间有个项目,要读取流量计的总流量,走的MODBUS RTU通讯,200PLC,流量计是厂家指定好的。因为MODBUS做的多了,心想没什么难度,且仪表还没采购,就先把程序做好了。等仪表到了之后傻眼了,总流量是DOUBLE型的浮点数,PLC只支持32位呀。于是网上各种找,也找到了一些资料,同是也看到了很多网友也有这方面的问题,于是自已写了一段程序(用300写的,方便模拟)。 32位浮点数和64位浮点数的结构,如下图:
程序: FUNCTION "LREAL2REAL_XXD" : REAL
L 0; NETWORK //************判断第63位S,为1:负数,为0:正数**************** L #IN[1]; // 取MODBUS传过来的第1,2个字 _001: L 0; //为0 就设定为0 //*************************************************************************
//*********************************取阶码E,共11位***************************** L #IN[1]; //*******************************************计算第1,2个字的尾数****************************** AD ; //********************** 20位,逐个移位进行计算************************** L 20; L 2.000000e+000; //1/2^#MM L 1.000000e+000; _003: NOP 0;
//************************************************第3,4个字的尾数逐位移出计算,共32位**********************
NETWORK //********************F=(-1)^S*2^(E[10进制]-127)*(1+M[尾数])************************* L 2.000000e+000; T #REAL2; L 1.000000e+000;
END_FUNCTION
Keep calm and carry on!!!
|