ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

三菱Q64AD模拟量采集实战:从接线、BFM设置到数据转换与避坑

三菱Q64AD模拟量采集实战:从接线、BFM设置到数据转换与避坑 1. 项目缘起与整体设计思路1.1 为什么还要折腾Q64AD这块老古董车间里那套三菱Q系列PLC系统跑了快八年最近产线要加两路压力变送器和一路流量计都是4-20mA信号。翻遍备件柜翻出来三块Q64AD模块型号是老的但成色还行。新采购一块Q64AD要等六周货期产线等不起索性把这三块模块用起来。Q64AD是三菱Q系列PLC的4通道模拟量输入模块支持电压输入-10V~10V、0~5V、1~5V等和电流输入0~20mA、4~20mA。分辨率可以选12位或者16位转换速度跟分辨率挂钩12位时每通道80微秒16位时每通道160微秒。这个速度对于压力、流量、温度这类慢变量来说绰绰有余但你要是拿它去测振动或者做高速采样那就选错模块了得换Q68ADV或者专用的高速模拟模块。我选Q64AD的核心原因有三个第一手头有现货不用等第二4通道刚好够用两路压力加一路流量还留一路备用第三Q系列底板上直接插不需要额外配电源接线端子也是现成的。你要是新项目选型我建议直接上Q68ADV或者Q64ADH分辨率更高、功能更全但如果是老系统扩容或者备件利用Q64AD完全够用。1.2 整体方案怎么定从传感器到PLC再到上位机整个数据采集链路是这样的压力变送器输出4-20mA电流信号经过屏蔽双绞线接到Q64AD的V和COM端子电流输入时V和I短接模块把模拟量转换成数字量存到缓冲区内存BFM里PLC用FROM指令把数据读到CPU的D寄存器再通过以太网或者串口传给上位机做显示和记录。这里有个关键选择用电流输入还是电压输入。4-20mA电流信号抗干扰能力强传输距离远传感器端不需要额外供电两线制变送器直接从回路取电所以工业现场首选电流输入。Q64AD的电流输入范围可以设0~20mA或者4~20mA我选4~20mA因为4mA对应零点断线时电流降到0mAPLC能立刻检测到断线故障这是4-20mA信号最大的优势。量程方面压力变送器是0~1.6MPa对应4~20mA流量计是0~50m³/h对应4~20mA。Q64AD的数字量输出范围跟量程设置有关如果选4~20mA对应0~400012位或者0~1600016位那压力值就是数字量除以4000再乘以1.6MPa。我选16位分辨率因为压力控制要求精度到0.01MPa12位分辨率下1.6MPa除以4000等于0.0004MPa理论上够用但16位更稳妥而且Q64AD支持16位不用白不用。1.3 硬件配置清单与接线规划硬件清单如下Q64AD模块三块实际用两块一块备用、Q38B底板一块8槽够用、压力变送器两套4-20mA两线制、流量计一套4-20mA四线制、屏蔽双绞线若干米、24V开关电源一个给变送器供电、接地线若干。接线规划要提前画好图不能到现场临时想。Q64AD的端子排列是每通道四个端子V、I、COM、FG。电流输入时V和I短接信号正极接V信号负极接COM。屏蔽层接FG端子FG在模块内部跟底板地相连最后统一接到柜体接地排。这里有个坑FG端子不要跟COM端子短接否则屏蔽层上的干扰电流会直接流入信号回路导致读数跳动。我见过有人图省事把FG和COM拧在一起结果压力值一直在±0.05MPa范围内跳查了半天才发现是接地问题。注意Q64AD的FG端子是屏蔽接地不是信号地。信号地是COM端子两者在模块内部是隔离的现场接线时千万不要短接。2. 核心细节解析与GX Works2参数设置实操2.1 模块地址怎么算BFM编号规则详解Q64AD的BFMBuffer Memory是模块内部的一块存储区CPU通过FROM/TO指令读写这块区域。BFM编号从0开始每个BFM是16位。Q64AD的BFM分配是这样的BFM#0是通道1的数字量输出值BFM#1是通道2BFM#2是通道3BFM#3是通道4。BFM#10到#13是各通道的平均处理设置BFM#20到#23是各通道的输入范围设置BFM#30是模块错误代码BFM#100以后是各种高级设置。模块的起始I/O地址由它在底板上的插槽位置决定。Q38B底板的插槽从0开始编号CPU占0槽电源占满的话第一个I/O槽是0号。假设Q64AD插在1号槽那它的起始地址就是X/Y 10H十六进制。在GX Works2里你需要在PLC参数里设置这个起始地址或者用自动检测。我习惯手动设置因为自动检测有时候会把相邻模块的地址搞混。BFM地址的计算公式是BFM编号 起始地址 × 16 偏移量。比如起始地址是10H那BFM#0对应的实际地址就是10H×160160H。不过你在GX Works2里写FROM指令时直接写BFM编号就行软件会自动换算。FROM指令的格式是FROM 起始地址 BFM编号 目标寄存器 数据个数。比如FROM H10 K0 D100 K1意思是从起始地址10H的模块的BFM#0读1个数据到D100。2.2 输入范围设置TO指令写BFM#20到#23输入范围设置是Q64AD最关键的参数设错了要么读数不对要么模块报错。BFM#20到#23分别对应通道1到通道4的输入范围每个BFM的低8位有效高8位保留。设置值跟范围的对应关系如下表设置值十六进制输入范围数字量输出范围16位00H-10V~10V-16000~1600001H0V~10V0~1600002H0V~5V0~1600003H1V~5V0~1600004H0mA~20mA0~1600005H4mA~20mA0~16000我用的压力变送器和流量计都是4-20mA所以BFM#20到#23都设成05H。写参数的指令是TO H10 K20 H05 K1意思是向起始地址10H的模块的BFM#20写1个数据值为05H。四个通道要写四次或者用TO指令一次写四个TO H10 K20 H05 K4但这样写的话BFM#21到#23也会被写成05H如果四个通道范围一样这样写最省事。注意TO指令写BFM#20到#23时模块会立即生效不需要重启。但如果你在运行中改范围读数会瞬间跳变所以最好在PLC停机状态下改参数。2.3 平均处理设置BFM#10到#13怎么调Q64AD支持平均处理可以对每个通道的采样值做平均抑制随机干扰。BFM#10到#13分别对应通道1到通道4的平均处理设置。每个BFM的低8位是平均次数1~255高8位是平均方式0时间平均1次数平均。时间平均是指定一个时间窗口模块在这个窗口内连续采样然后取平均次数平均是指定采样次数采够次数后取平均。我一般用次数平均设8次或者16次。8次平均能把随机干扰降低到原来的1/√8≈0.35倍16次降到0.25倍。但平均次数越多响应越慢。Q64AD的转换速度是160微秒每通道16位8次平均就是1.28毫秒16次是2.56毫秒对于压力控制来说完全够快。如果你测的是快速变化的信号平均次数设1或者2就行。设置方法是TO H10 K10 H0008 K1意思是通道1用次数平均平均8次。高8位是00H表示次数平均低8位是08H表示8次。如果要设时间平均比如100毫秒窗口那就是TO H10 K10 H6400 K1高8位64H表示时间平均低8位00H表示100毫秒单位是10毫秒所以100毫秒对应10十六进制0AH但这里高8位是方式低8位是时间值具体要看手册。我建议新手直接用次数平均简单直观。2.4 GX Works2里的参数设置界面操作虽然可以用TO指令写BFM但在GX Works2里有个更直观的方法在PLC参数里找到智能功能模块设置添加Q64AD模块然后双击打开参数设置窗口。窗口里可以设置每个通道的输入范围、平均处理、报警输出等。设置完后GX Works2会自动生成初始化程序下载到PLC后自动执行。我对比过两种方法手动写TO指令更灵活适合批量复制或者动态修改用GX Works2的界面设置更省事适合新手。但有个坑GX Works2生成的初始化程序是在PLC启动时执行的如果你在运行中改参数界面设置不会生效还是得用TO指令。所以我一般用界面设置做初始配置运行中需要调整时用TO指令。提示GX Works2的智能功能模块设置里Q64AD的BFM#20到#23对应的是输入范围设置BFM#10到#13对应的是平均处理设置。设置完后记得点应用然后下载到PLC。3. 数据采集程序编写与调试全流程3.1 FROM指令读取数据从BFM到D寄存器数据采集的核心就是FROM指令。Q64AD的BFM#0到#3分别存四个通道的数字量值我用FROM指令把它们读到D100到D103。程序如下// 读取通道1到通道4的数字量值 FROM H10 K0 D100 K4这一条指令就把BFM#0到#3的四个值读到了D100到D103。注意FROM指令的最后一个参数是数据个数K4表示连续读4个BFM。读完后D100里是通道1的值D101是通道2以此类推。但这里有个细节Q64AD的数字量值是有符号的16位模式下范围是-16000到16000。如果输入范围设的是4-20mA对应0到16000那D100里的值就是0到16000的无符号数。但PLC的D寄存器是16位有符号的所以如果值超过32767才会出问题16000远小于32767不用担心。3.2 量程转换把数字量变成工程值读到的数字量是0到16000对应4-20mA再对应0到1.6MPa。转换公式是实际压力 (数字量 / 16000) × 1.6MPa。在PLC里用整数运算或者浮点运算都行。整数运算精度差一点但速度快浮点运算精度高但需要Q系列CPU支持浮点指令Q02U以上都支持。我一般用浮点运算程序如下// 通道1压力转换D100是数字量D200是实际压力单位kPa // 先转成浮点数 FLT D100 D300 // 除以16000 DEDIV D300 E16000 D302 // 乘以16001.6MPa1600kPa DEMUL D302 E1600 D304 // 结果存到D200 DMOV D304 D200这段程序把D100的数字量转换成实际压力值单位是kPa存在D200里。D200是32位浮点数占D200和D201两个寄存器。上位机读D200时要注意读32位。流量转换类似只是系数不同实际流量 (数字量 / 16000) × 50m³/h。程序里把E1600改成E5000就行。3.3 断线检测4-20mA信号的独特优势4-20mA信号最大的好处就是能检测断线。正常工作时电流最小4mA对应数字量0如果传感器断线或者电源故障电流降到0mA数字量会变成负数因为4mA以下对应负值。Q64AD在4-20mA范围下0mA对应-400016位模式下所以如果D100读到负数就说明断线了。我在程序里加了一个断线检测逻辑// 断线检测如果D100小于0置位断线标志M100 D100 K0 SET M100M100置位后上位机报警操作工就知道传感器出问题了。这个功能在电压输入模式下是没有的因为0V对应0断线也是0分不清是断线还是真的零信号。注意断线检测的阈值不要设成0因为4mA对应0但实际可能有±0.1mA的偏差数字量可能在-40到40之间跳。我一般把阈值设成-100留点余量。3.4 调试实录第一次上电遇到的三个坑第一次上电调试遇到了三个问题花了大半天才解决。第一个坑模块报错ERROR灯闪。查BFM#30值是H4000手册上说是输入范围设置错误。我明明设的是05H4-20mA怎么会错后来发现是TO指令写错了地址我写的是TO H10 K20 H05 K1但模块的起始地址不是10H而是00H。因为Q38B底板的0槽是CPU1槽是电源2槽才是第一个I/O槽起始地址是00H。我把起始地址改成00H后ERROR灯灭了。第二个坑读数一直是0。模块不报错了但D100一直是0。查了半天发现是接线问题电流输入时V和I要短接我只接了V和COMI悬空。把I和V短接后读数正常了。第三个坑读数跳动大。压力值在±0.03MPa范围内跳对于0.01MPa精度要求来说太大了。查了接地发现屏蔽层没接FG而是接在了柜体上柜体跟信号地之间有电位差。把屏蔽层改接到FG端子后跳动降到±0.005MPa以内。这三个坑都是新手常犯的我后来在每块模块的接线端子旁边贴了标签写明V和I短接、屏蔽接FG再也没出过问题。3.5 数据上传从PLC到上位机的两种方式数据采集完后要传给上位机。Q系列PLC支持多种通信方式以太网、串口、CC-Link等。我用的是以太网CPU是Q03UDE自带网口。上位机用MC协议读D寄存器或者用OPC服务器。MC协议读D200的指令格式是5000 00 FF FF 03 00 0C 00 0A 00 01 04 00 00 D2 00 00。其中D2 00是D200的地址D200的十六进制是00D2低字节在前。上位机收到响应后解析出浮点数就行。如果不想写MC协议可以用三菱的MX Component或者OPC服务器配置更简单。MX Component装好后用ActUtlType控件几行代码就能读D寄存器。我试过用Python的pymcprotocol库也能读但稳定性不如MX Component。提示以太网通信时PLC的IP地址和上位机要在同一网段。Q03UDE的默认IP是192.168.1.1我一般改成192.168.1.10上位机用192.168.1.100。4. 常见问题排查与避坑经验实录4.1 模块ERROR灯亮的五种原因与排查顺序Q64AD的ERROR灯亮是最常见的问题我整理了五种原因和排查顺序排查顺序可能原因检查方法解决方法1输入范围设置错误读BFM#30看错误代码重新用TO指令写BFM#20~#232起始地址设置错误检查GX Works2里的模块地址在PLC参数里改起始地址3模块硬件故障换一块模块试送修或更换4底板接触不良重新插拔模块清理底板插槽5电源电压不足测底板5V电源检查电源模块BFM#30的错误代码含义H0000正常H4000输入范围错误H8000平均处理设置错误H1000硬件故障。我遇到最多的是H4000基本都是TO指令写错了地址或者值。4.2 读数不准的四个隐藏原因读数不准不一定是模块问题很多时候是现场干扰或者接线问题。我总结了四个隐藏原因第一个是屏蔽层接地不对。屏蔽层必须单端接地接在FG端子上。如果两端都接地会形成地环路干扰更大。我见过有人把屏蔽层接在传感器端和PLC端都接地结果读数跳得厉害。第二个是信号线和动力线走同一个线槽。4-20mA信号线要远离变频器输出线、伺服电机线至少保持20厘米距离。如果必须交叉要垂直交叉不能平行走。第三个是变送器供电不足。两线制变送器需要24V供电如果电源功率不够或者线太长导致压降大变送器输出会偏低。我一般用24V/2A的开关电源线长超过50米时用24V/5A的。第四个是Q64AD的转换速度跟平均次数不匹配。如果平均次数设得太大而信号变化很快读数会滞后。我一般根据信号变化速度来设平均次数压力、温度这类慢变量设8~16次流量设4~8次振动设1~2次。4.3 BFM读写冲突TO和FROM不能同时操作同一个BFMQ64AD的BFM读写有个规则同一个BFM不能同时被TO和FROM操作。比如你在程序里用TO写BFM#20设置输入范围同时又用FROM读BFM#20那读到的值可能不对。我一般把设置和读取分开初始化时用TO写参数运行中只读数据BFM#0~#3不读设置BFM。如果你确实需要读设置值可以在PLC启动时用FROM读一次存到D寄存器里后面就用D寄存器不再读BFM。这样避免冲突。注意Q64AD的BFM#0到#3是只读的TO写不进去BFM#20到#23是可读写的但写完后要等一个扫描周期再读否则可能读到旧值。4.4 模块热插拔Q系列不支持别试Q系列PLC的模块不支持热插拔带电插拔会损坏模块或者底板。我见过有人为了省事在PLC运行中直接拔Q64AD结果模块烧了底板也坏了。更换模块必须停机断电等电源指示灯灭了再拔。如果产线不能停那就用冗余配置插两块Q64AD一块主用一块备用主用故障时切换到备用。但Q64AD本身不支持冗余需要CPU层面的冗余系统成本高。一般产线停几分钟换模块可以接受的话就停机换。4.5 常见问题速查表现象可能原因快速排查解决ERROR灯闪输入范围设置错误读BFM#30重写BFM#20~#23读数始终为0V和I未短接检查接线短接V和I读数跳动大屏蔽层接地不良检查FG接线屏蔽层接FG读数偏小变送器供电不足测变送器端电压换大功率电源断线检测误报阈值设得太高检查D100值阈值改成-100通信读不到数据IP地址不对ping PLC改IP同网段4.6 我的实操心得三条保命经验第一条接线前先画图标好每根线的颜色和去向。我见过太多人接线时不画图出了问题查半天。我现在用Excel画接线表每根线编号现场按表接线效率高还不容易错。第二条参数设置完先仿真再下载。GX Works2支持仿真可以在电脑上模拟Q64AD的BFM读写验证程序逻辑。仿真通过后再下载到PLC减少现场调试时间。第三条备件要定期上电测试。Q64AD放久了电容会老化我每半年把备用模块插到测试底板上通电跑一天确保需要时能直接用。这个习惯帮我避免了一次产线停机事故。5. 从Q64AD延伸模拟量采集的通用方法论5.1 模拟量模块选型的四个维度选模拟量模块不能只看价格要从四个维度考虑通道数、分辨率、转换速度、信号类型。通道数根据测点数量定留20%余量分辨率根据控制精度定一般12位够用高精度场合用16位转换速度根据信号变化速度定慢变量80微秒够快变量要选高速模块信号类型根据传感器输出定电流信号抗干扰好电压信号简单。Q64AD在这四个维度上的表现4通道、12/16位可选、80/160微秒、电压电流可选。对于大多数工业现场的压力、温度、流量、液位采集Q64AD完全够用。但如果要测振动、声音、高速脉冲就得选Q68ADV或者专用模块。5.2 从BFM到工程值的通用转换公式不管什么品牌的模拟量模块转换逻辑都是一样的数字量 (模拟量 - 零点) / (满量程 - 零点) × 数字量满量程。对于4-20mA信号零点对应4mA满量程对应20mA数字量满量程是1600016位或者400012位。所以实际值 (数字量 / 数字量满量程) × (满量程 - 零点) 零点。这个公式适用于所有模拟量模块只是数字量满量程不同。西门子的S7-1200模拟量输入模块4-20mA对应0~27648欧姆龙的CJ系列4-20mA对应0~4000。记住这个公式换品牌也不用重新学。5.3 抗干扰的五个实战技巧模拟量采集最大的敌人是干扰。我总结了五个实战技巧第一信号线用屏蔽双绞线屏蔽层单端接FG第二信号线远离动力线至少20厘米第三变送器用独立电源不要跟变频器共用第四PLC柜做好接地接地电阻小于4欧姆第五软件上加平均滤波8~16次。这五个技巧用下来我的Q64AD读数跳动从±0.03MPa降到了±0.005MPa满足了0.01MPa的控制精度要求。如果你还觉得不够可以在上位机上加滑动平均或者卡尔曼滤波但那是软件层面的事了。5.4 老模块翻新利用的注意事项手头有旧模块想翻新利用要注意三点第一检查电容有没有鼓包鼓包的必须换第二清理端子上的氧化层用橡皮擦或者酒精棉第三上电前先测绝缘用兆欧表测端子对地电阻大于10兆欧才能用。我翻新过五块Q64AD三块能用两块有通道坏了。坏的那两块一块是通道1读数始终为0查出来是内部运放坏了另一块是通道3读数跳得厉害查出来是AD转换芯片老化。所以旧模块翻新有风险关键场合还是用新的。5.5 后续扩展从Q64AD到Q68ADV的升级路径如果以后要升级Q68ADV是Q64AD的升级版8通道、16位分辨率、转换速度更快、支持断线检测和报警输出。升级时要注意Q68ADV的BFM分配跟Q64AD不同程序要改接线端子排列也不同要重新接线但GX Works2的设置界面类似上手不难。我建议新项目直接上Q68ADV老项目扩容用Q64AD。如果Q64AD停产了可以用Q64ADH替代功能一样只是封装不同。提示Q68ADV的BFM#0到#7是通道1到8的数字量值BFM#20到#27是输入范围设置BFM#10到#17是平均处理设置。跟Q64AD的规律一样只是通道数翻倍。5.6 一个真实案例三块Q64AD组网采集12路信号去年有个项目要采集12路4-20mA信号我用三块Q64AD插在同一个Q38B底板上起始地址分别是00H、10H、20H。程序里用三个FROM指令分别读三块模块的数据然后统一转换成工程值。三块模块共用同一个24V电源但每块模块的FG单独接地避免地环路。调试时发现三块模块的读数有微小差异同一信号源接到不同模块读数差±0.002MPa。查了手册Q64AD的通道间隔离电压是500VAC但通道间有微小串扰。解决方法是把三块模块的采样时间错开用定时器轮流触发FROM指令避免同时采样。错开后差异降到±0.0005MPa满足了项目要求。这个案例说明多模块组网时要注意采样时序不要同时读多块模块。Q64AD本身没有同步采样功能需要CPU层面用定时器控制。5.7 最后分享一个BFM调试小工具调试Q64AD时我写了一个简单的BFM监视工具用GX Works2的软元件监视功能把BFM#0到#3、BFM#20到#23、BFM#30加到监视窗口实时看数值变化。这样设置参数时能立刻看到效果不用反复下载程序。具体操作在GX Works2里点在线→监视→软元件监视在窗口里输入BFM地址格式是U10\G0表示起始地址10H的模块的BFM#0。U后面的数字是起始地址的十六进制G后面的数字是BFM编号。比如U0\G0是起始地址00H的BFM#0U10\G20是起始地址10H的BFM#20。这个工具帮我快速定位了好几次参数设置错误比读BFM#30的错误代码还直观。你可以试试尤其是调试多模块时一个窗口看所有模块的BFM效率高很多。
返回列表