ModBus从站与ABB的FreeLance系统RTOM模块通讯方案

              ModBus从站与ABB的FreeLance系统RTOM模块通讯方案

            传统的modbus从站当传递数据的使用可以使用float类型的定义,但是在FreeLance的RTOM模块并不遵循常用的数据表达方式。该模拟量也占用两个模拟量的地址。

一个用来表示尾数、一个用来表示指数。这样它的表示范围与传统的数据表达方式所能表示的模拟量的精度以及范围都有比较大的区别。

              该通讯模式下,数据的传输的范围如下:

              +0.0001 to +3.2767 E38
              -0.0001 to -3.2768 E38

              该通讯模式下,指数的范围最小为0.所以能表示的最小的数据为0.0001,任意消失于该数据的正数都认为为0.这中表示方式在实际的工程应用中基本能满足需求。

               在从站上的输入以及输出数据需要进行转换蔡可以。

               基本的转换思路如下

             从模拟数据转换成为尾数和指数的表示方式,需要做如下的转换。

              WORD nTemp=0;
float fValue1=fabs(fValue);
if(fValue1>=1) 
{
nEXP=(WORD)log10(fValue1);
fValue1=fValue1/powf(10,nEXP-3);
//if(fValue1>=0xF000)//XXXX
if(fValue1>=0x8000)//XXXX
{
fValue1=fValue1/10;
nEXP++;
}
nMNT=(WORD)(float)(fValue1+0.5);
if(fValue<0)  nMNT=XXXX-nMNT;


}else
{
if(fValue>0)
{
nMNT=(WORD)((fValue*10000));
}else
{
nMNT=(WORD)((fValue*10000));
}
nEXP=0;
}

         从指数和尾数转化为浮点数按照如下的计算方式

         fv=(float)powf(10,nEXP-3);
float fValue;
if(temp>=0xXXXX)//负数
{
fValue=(float)((XXXXX-temp)*fv);
fValue=fValue*(-1);
}else
{
fValue=(float)(temp*fv);
}
return fValue;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值