专题介绍:模拟量数据标定


基本信息

在PLC系统中,采集来的模拟量信号,一般需要通过电路处理才能进入MCU。MCU采集的电压范围必须在0-3.3V以内,这个电压需要通过一定的换算才能计算出PLC实际端口采集的电压或电流。这种换算一般根据电路确定,只要电路是一样的,同一型号的PLC应该采用同样的算法和参数进行标定。在模拟量采集模块Adc_Eio中,可以直接在蓝图中指定线性标定的参数:

在实际的PLC生产中,因为模拟电路所用的电子元件不可能是理想器件,总会存在误差,造成的结果是每款电路板都会存在不同的制造误差。例如电流采集现在输入20mA的电流,按照理论计算采集值经过算法标定后应该是32767。但是有的电路板测试出来可能只有32707,有的电路板测试出来可能是32805。这就需要我们在电路板生产好后进行一次下线标定,以消制造误差。

基于下线标定的要求,我们需要的标定功能应该满足一下要求

  • 标定参数每块电路板都不一样,因此不能在固件中确定,而是需要存储在非易失设备上,例如SPI FLASH、EEPROM、铁电等。
  • 出于自动化下线检测的需要,标定参数应该可以通过通讯协议写入PLC保存。
  • 当标定参数不存在时,只是没有误差的修正,因当不影响使用。
  • 模拟量输入需要标定,模拟量输出也需要标定。

针对以上标定需求,我们在Eio_Fe模块中添加了标定支持。这样不论何种设备采集到的数据,在通过Eio_Fe与PLC的AIW、AQW进行数据交换时,都可以进行修正。

在Designer中的配置实践

选择蓝图Eio(扩展输入/输出相关模块),选择Eio_Fe模块,展开需要标定的通道,在Read操作中选择标定数据类型:INT。

编译项目后,即可在Calibration下面找到自动生成的标定节点:

选择Main节点,在修改ModbusAddress的值为40000。

这里设置通过Modbus协议修改标定数据的通讯地址。选择40000表示从4x区域的第40000个变量开始设置标定数据。注意这里的地址不能被Modbus协议使用:

Modbus协议中,有个一个4x区间的映射(保持寄存器),从0地址开始,总计4096个字,远小于这里设定的40000。Modbus协议遇到不能被MemAssign处理的内存映射,则会发起一个信号,询问是否有驱动模块响应这个信号,是否可以处理40000地址的请求。

如果Modbus协议的MemAssign不能处理这个地址,则会将请求转发给Eio_Fe模块:

可以在模块连接中是否建立Modbus到Eio_Fe的信号与槽的绑定:

为了保存标定参数,Eio_Fe会在NvM中生成一个节点Eio_Fe_RetaintiveBlock。我们需要给他添加一个数据保存点:

这里我们选择将数据保存到外置的SPI FLASH:W25Q。

使用Modbus Poll写入标定数据

因为设置的Modbus通讯偏移量是40000,数据修正采用两点标定法,对于一个模拟量,需要4个数据来进行标定:

Modbus地址偏移符号说明
40000X1模拟量采集的实际值1
40001Y1转换后的期望值1
40002X2模拟量采集的实际值2
40003Y2转换后的期望值2

打开软件Modbus Poll,这里我们使用以太网连接到PLC:

点击鼠标右键,选择读写定义:

功能码选择03,读取保持寄存器4x区间,通讯地址选择40000:

当输入悬空时,读取模拟量的值AIW0为32,当输入20mA时,读取模拟量的值AIW2为22925。输入悬空时,我们希望修正后的值是0,输入20mA时,我们希望修正后的值是23054。于是我们将这些值分别填入40000到40003:

当值被写入,标定程序检测到有效标定数据,便开始修正模拟量输入。此时可以再次观察AIW0的值,观察是否符合预期。同时也可以断电上电,观察标定参数是否正确保存。