问个数据转换的问题

300型PLC在运算中得到了一个中间实数X,比如瞬时流量,现在需要把这个实数通过AO通道用4~20MA输出送到现场的数显表去显示。
我的做法是先把X除以数显表的量程,再乘以27648.0,再截断后得到一个长整形数。
现在的问题是怎么把这长整形转换成整形数据送往AO通道??
比如长整形数放在md100,直接MOVE mw102还是有什么别的更好的指令?
有别的更好的方法把实数通过4~20ma送去现场的方法吗?

最佳答案

直接使用FC106,功能块了,直接将浮点数处理直接称整数输出给模拟量输出模块
UNSCALE功能接收一个以工程单位表示、且标定于下限和上限(LO_LIM和HI_LIM)之间的实型输入值(IN),并将其转换为一个整型值。将结果写入OUT。
UNSCALE功能使用以下等式:

OUT = [ ((IN-LO_LIM)/(HI_LIM-LO_LIM)) * (K2-K1) ] + K1

,并根据输入值是BIPOLAR还是UNIPOLAR设置常数K1和K2。

BIPOLAR:假定输出整型值介于 -7648和27648之间,因此,K1 = -27648.0,K2 = +27648.0

UNIPOLAR:假定输出整型值介于0和27648之间,因此,K1 = 0.0,K2 = +27648.0

如果输入值超出LO_LIM和HI_LIM范围,输出(OUT)将钳位于距其类型(BIPOLAR或UNIPOLAR)的指定范围的下限或上限较近的一方,并返回一个错误。


FC106参数


参数 说明 数据类型 存储区 描述
EN 输入 BOOL I、Q、M、D、L 使能输入端,信号状态为1时激活该功能。
ENO 输出 BOOL I、Q、M、D、L 如果该功能的执行无错误,该使能输出端信号状态为1。
IN 输入 REAL I、Q、M、D、L、P、常数 欲转换为整型值的输入值。
HI_LIM 输入 REAL I、Q、M、D、L、P、常数 以工程单位表示的上限。
LO_LIM 输入 REAL I、Q、M、D、L、P、常数 以工程单位表示的下限。
BIPOLAR 输入 BOOL I、Q、M、D、L 信号状态1表示输入值为双极。信号状态0表示输入值为单极。
OUT 输出 INT I、Q、M、D、L、P 转换结果。
RET_VAL 输出 WORD I、Q、M、D、L、P 如果该指令的执行没有错误,将返回值W#16#0000。对于W#16#0000以外的其它值,参见"错误信息"。
错误信息

如果输入值超出LO_LIM和HI_LIM范围,输出(OUT)将钳位于距其类型(BIPOLAR或UNIPOLAR)的指定范围的下限或上限较近的一方,并返回一个错误。
ENO的信号状态将设置为0,RET_VAL等于W#16#0008。

提问者对于答案的评价:
谢谢,就用你的方案。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日
下一篇 2018年12月1日

相关推荐