专题介绍:模拟量数据标定基本信息在PLC系统中,采集来的模拟量信号,一般需要通过电路处理才能进入MCU。MCU采集的电压范围必须在0-3.3V以内,这个电压需要通过一定的换算才能计算出PLC实际端口采集的电压或电流。这种换算一般根据电路确定,只要电路是一样的,同一型号的PLC应该采用同样的算法和参数进行标定。在模拟量采集模块Adc_Eio中,可以直接在蓝图中指定线性标定的参数:
在实际的PLC生产中,因为模拟电路所用的电子元件不可能是理想器件,总会存在误差,造成的结果是每款电路板都会存在不同的制造误差。例如电流采集现在输入20mA的电流,按照理论计算采集值经过算法标定后应该是32767。但是有的电路板测试出来可能只有32707,有的电路板测试出来可能是32805。这就需要我们在电路板生产好后进行一次下线标定,以消制造误差。 基于下线标定的要求,我们需要的标定功能应该满足一下要求
针对以上标定需求,我们在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 Poll,这里我们使用以太网连接到PLC:
点击鼠标右键,选择读写定义:
功能码选择03,读取保持寄存器4x区间,通讯地址选择40000:
当输入悬空时,读取模拟量的值AIW0为32,当输入20mA时,读取模拟量的值AIW2为22925。输入悬空时,我们希望修正后的值是0,输入20mA时,我们希望修正后的值是23054。于是我们将这些值分别填入40000到40003:
当值被写入,标定程序检测到有效标定数据,便开始修正模拟量输入。此时可以再次观察AIW0的值,观察是否符合预期。同时也可以断电上电,观察标定参数是否正确保存。 |