ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

S7-1200+博图+组态王项目实战:从IO分配到联调避坑

S7-1200+博图+组态王项目实战:从IO分配到联调避坑 接手过不少S7-1200的项目之后我有个特别深的体会真正决定项目交付质量的往往不是程序本身写得多花哨而是配套的那套文档——IO分配表规不规范、接线图和原理图能不能和程序一一对应、梯形图里有没有让下一个工程师能看懂的注释、组态王那边能不能把数据稳定采上来。博图编程、电气图纸、组态王上位机这三块看着是三个方向实际是一条完整的链哪一环脱节现场调试就是你一个人的灾难现场。这篇内容我把做这类项目的完整套路整理出来给正在做或者准备做S7-1200加博图加组态王这套组合的朋友一套可以直接抄的作业从IO分配开始到解释性梯形图的写法、接线图和原理图的出图要点再到组态王联调最后是这些年踩过的坑。无论你是刚开始碰博图的新手还是已经独立做过几个项目想规范一下流程的工程师应该都能找到有用的东西。1. 项目整体思路为什么是S7-1200加博图加组态王1.1 这套组合解决的核心问题先说说选型逻辑。中小型自动化设备尤其是单机设备、小型产线、教学实验装置S7-1200几乎是绕不开的选项。它的价格放在那里性能对于几十个IO点、少量模拟量、简单运动控制的场景完全够用而且博图这个工程平台把PLC编程、HMI画面、硬件组态全部塞进一个项目里比老一代STEP7加WinCC那种分开搞的方式省太多事。组态王则是国内上位机里的老面孔它普及率高不是因为技术多前沿而是因为上手门槛低、图库丰富、在中小项目里授权成本友好做数据监控、报表、历史曲线这些东西特别顺手。这套组合能解决的问题简单说就是三层设备层的传感器和执行器控制层的S7-1200负责逻辑和运算监控层的组态王负责把数据变成看得见摸得着的画面。比如一条小型分拣线光电传感器和限位开关通过DI进PLCPLC算出结果通过DO驱动接触器和电磁阀同时把产量、设备状态、报警信息通过以太网丢给组态王操作员在电脑前面就能看到整条线的运行情况。1.2 三层架构与数据流向理解这套系统的数据流向特别重要因为很多联调问题都是出在“数据流被中间某个环节卡住”。完整的链路是这样的现场传感器 → PLC输入模块 → 程序逻辑处理 → PLC数据块DB区→ 以太网 → 组态王驱动 → 组态王变量 → 画面显示。这里面有两个关键前提。第一个PLC侧必须允许外部设备访问它的数据区具体就是在博图的CPU属性里打开“允许来自远程对象的PUT/GET通信访问”默认情况下这个选项是关的不开的话组态王那边怎么配都读不到数据。第二个组态王侧要选对驱动、配对地址而且PLC数据块的访问方式要和非优化的地址对应上。这两件事我在后面章节会详细展开因为它们恰恰是新手最容易卡住的地方。2. IO分配表整套图纸的设计地基2.1 IO分配的基本原则很多人上来就画梯形图IO分配随手写个I0.0、I0.1就完事这是大忌。IO分配表是整个项目的地基后面所有东西——梯形图符号、接线图、端子排图、组态王变量——都要以它为基准。分配的时候我给自己定了几条死规矩按功能分区。把输入按照“操作按钮区、检测传感器区、保护信号区”分组输出按照“驱动执行区、指示报警区”分组不要东一个西一个。预留余量。每个CPU或者扩展模块至少留出10%到20%的备用点现场加信号是常有的事没余量就只能换CPU那场面相当尴尬。急停和安全类信号用常闭触点。这个不是习惯问题是安全原则。常闭触点断线或者掉电的时候信号会变化系统能检测到故障如果用常开触点线断了系统还以为一切正常。命名规范。符号名用“前缀_设备_功能”的方式比如SB1_启动、SQ2_到位、KM1_主轴千万别用“输入1”“输出2”这种名字三个月之后你自己都看不懂。2.2 一套可以直接抄的IO分配示例以S7-1200 CPU 1214C DC/DC/DC为例它自带14个数字量输入和10个数字量输出我做一个典型的小型设备分配表地址符号名功能说明备注I0.0SB1_启动系统启动按钮常开I0.1SB2_停止系统停止按钮常闭I0.2SQ1_原点回原点限位常开I0.3SQ2_到位动作到位检测常开I0.4FR1_过载电机过载保护常闭I0.5SP1_检测光电检测传感器常开I0.6SA1_方式手动/自动切换选择开关I0.7SB3_急停急停按钮常闭I1.0SQ3_上限气缸上限位常开I1.1SQ4_下限气缸下限位常开Q0.0KM1_主轴主轴电机接触器220VACQ0.1KM2_进给进给电机接触器220VACQ0.2YV1_夹紧夹紧电磁阀24VDCQ0.3YV2_顶升顶升电磁阀24VDCQ0.4HL1_运行运行状态指示灯24VDCQ0.5HL2_报警故障报警指示灯24VDCQ0.6HA1_蜂鸣报警蜂鸣器24VDCQ0.7KM3_风机冷却风机接触器220VACQ1.0备用1预留输出Q1.1备用2预留输出这里面有两个细节值得说。第一1214C本身不带模拟量输入如果项目里要接温度变送器、压力变送器这类4-20mA信号需要加信号板SB 1231或者模拟量模块SM 1231对应的AI地址从64开始AI64、AI66这样排。第二备用点一定要在分配表里占好位置宁可先写“备用”两个字也不要把地址空着后面改线、改程序都方便。2.3 地址规划背后的细节考量为什么输出里面指示灯和电磁阀都挤在Q0.2到Q0.6而把接触器放在Q0.0、Q0.1和Q0.7这是按电流类型和干扰等级分的。接触器线圈是感性负载通断瞬间有反电动势虽然中间继电器会做隔离但尽量和弱电信号的点位错开是布线上的老经验。另外所有输出点最好隔一个地址留一个备用这样以后加负载的时候接线端子排上还有空位不用重新压线。还有一个容易被忽略的点输入信号的公共端COM/M接法。S7-1200的数字量输入是支持源型和漏型两种接法的具体取决于传感器类型和公共端接线。我后面在接线图章节会细讲但分配表阶段就要确定传感器用PNP还是NPN因为这直接决定图纸怎么画、端子怎么配。3. 解释性梯形图程序写给下一个工程师的程序3.1 什么是解释性梯形图解释性梯形图说白了就是“能让别人看懂的梯形图”。博图里每个程序段Network都可以写标题、写注释每个变量都有符号名块FB/FC可以写接口描述。这些功能不是摆设是项目交付的重要组成部分。我接手过不少二手设备最痛苦的就是打开程序一看全是I0.0、Q0.0这种裸地址没有符号名没有注释只能对着点位表一点点猜功能。你自己写的东西半年后回来看可能都要理解半天何况是别人。解释性梯形图的具体标准我总结为三条一是用符号寻址代替绝对寻址程序里看到的应该是“启动按钮”而不是“I0.0”二是每个程序段必须有网络标题和注释说明这段是干什么的、逻辑是什么三是把程序按功能拆成多个FC块比如FC1管电机逻辑、FC2管报警处理、FC3管手动操作主程序OB1里干干净净只做调用。3.2 程序结构组织OB1加FC加DBS7-1200的程序结构我一般这么搭OB1主循环里放状态机的主干逻辑和各个FC的调用独立的控制逻辑放进FC块方便复用和调试全局数据放在DB里尤其是需要和组态王交换的数据单独建一个“HMI通信DB”里面把所有要监控的变量集中管理。这里有一个和组态王联调强相关的关键点DB块的访问方式。博图默认新建的DB是“优化的块访问”也就是说PLC内部按符号寻址DB没有固定的字节偏移地址。这对博图自己的HMI、OPC UA来说没问题但对组态王这类通过地址访问数据的第三方上位机就是个大坑——组态王访问DB数据要的是“DB1.DBD4”这种带偏移的地址优化的块访问没有这个地址数据就死活读不上来。解决办法是在DB属性里取消勾选“优化的块访问”启用非优化访问。要注意的是很多版本的博图里DB一旦创建这个选项可能就变灰改不了这就是网上经常搜到“博图优化的块访问不能修改”的原因。我的习惯是项目一建好专门用于通信的DB直接以非优化方式创建后面省一堆事。如果已经建好了才发现就只能删掉重建把接口数据重新定义一遍所以一开始就规划好特别重要。3.3 高频功能块编写实例聊几个我几乎每个项目都用的梯形图网络这些逻辑看起来简单但细节里全是经验。第一个是起保停电路。启动按钮常开点并联自锁触点串联停止按钮常闭点输出接接触器线圈。这里要注意梯形图里停止按钮用的是常闭触点对应硬件上I0.1接的是停止按钮的常闭端。如果接成常开程序里就必须改成常开逻辑这个“反相”问题搞错了现场按停止按钮没反应排查半天才发现是硬件常开常闭和程序对不上。第二个是延时启停。用TON定时器比如设备启动后先给风机一个5秒的延时。TON的IN端接启动信号Q端输出PT设时间。注意TON是通电延时IN从1变0时Q立即变0。如果要做断电延时就用TOF。另外定时器的时基单位是毫秒PT5000就是5秒别把单位搞混。第三个是电机正反转互锁。正转接触器和反转接触器的控制逻辑里必须互相串入对方的常闭触点做软互锁同时硬件上还要用接触器的辅助常闭点做硬互锁。也就是说梯形图里正转输出Q0.0的线圈前面串一个Q0.1的常闭反转输出Q0.1前面串Q0.0的常闭。只做软互锁不做硬互锁一旦PLC死机或者输出点卡死两个接触器同时吸合就是相间短路只做硬互锁不做软互锁切换方向的时候总要等接触器释放动作慢还容易拉弧。两个都做才叫完整的互锁。3.4 S7-1200中十进制转十六进制的实现思路网上搜“S71200将10进制转换为16进制的程序梯形图”的朋友很多这里我要说一个可能颠覆你认知的事实S7-1200内部的整数本质上就是二进制存储的十六进制只是这个二进制的另一种显示形式。你给一个INT变量赋了255它在内存里的二进制是“11111111”你把它显示成十进制是255显示成十六进制是FF值根本没有变所以从PLC到上位机、到触摸屏最省事的做法就是直接在显示端把变量的格式设成“十六进制”根本不需要在梯形图里做“转换”。那什么情况下才需要在程序里做真正的转换两种。第一种是数值和字符串之间转换比如要把“255”变成字符串“FF”发给仪表或者写入报文那确实要写转换逻辑。思路是循环取余把这个数除以16取余数得到低位再除以16取整继续循环余数0到9直接变字符10到15转成A到F最后把字符拼起来。这个用SCL写比用梯形图写清爽得多几行循环就搞定。第二种是BCD码转换比如老的数码管显示设备要的是8421BCD码那就得用转换指令或者自己写算法把二进制数转成BCD格式。再提醒一句用组态王或者博图触摸屏监控的时候想显示十六进制直接改显示格式就行了不需要在PLC程序里动任何东西。组态王里变量类型选“整数”画面组态时把输出显示格式改成十六进制即可。这条能帮你少写一堆没用的梯形图。4. 接线图与原理图设计要点4.1 电源与主回路设计电气图纸里电源设计是第一张图。我习惯从总进线断路器画起然后是开关电源、PLC电源回路、执行机构电源回路分路清晰每路都带独立的熔断器或者小型断路器。S7-1200的CPU供电是24V直流工程上一般用一个24V/5A的开关电源CPU本身消耗不大但传感器、中间继电器线圈、指示灯都挂在同一路24V上所以要算总电流。计算公式就是所有负载电流之和再乘个1.3到1.5的系数。比如传感器带8个每个20mA继电器线圈带6个每个约50mA指示灯4个每个20mA加起来大概380mA再考虑CPU本体约1A的消耗选个2A到3A的电源就稳妥了。千万别满打满算开关电源长期满载会发热现场环境再热点就是故障源。4.2 数字量输入接线源型与漏型S7-1200的DI接线是新手容易懵的地方。所谓源型PNP和漏型NPN指的是传感器输出信号的形式。用PNP传感器时信号线输出的是高电平24VPLC输入点需要检测到这个高电平。接线方式是传感器的正极接24V负极接0V信号输出线接PLC的I点而PLC输入回路的公共端接0VM。用NPN传感器时正好反过来信号线输出的是低电平0VPLC公共端要接24VL。S7-1200的数字量输入模块两个公共端都能接这就是靠公共端接线决定源型还是漏型的原因。我在图纸上会在每路输入旁边标注传感器类型然后在端子排图上明确公共端接到哪个电位。画图的时候最忌讳的就是公共端不画或者只写“接M”不标清楚是哪个M现场接线的人一犹豫就要打电话找你。4.3 数字量输出与中间继电器S7-1200的输出有继电器型和晶体管型两种。继电器输出的优点是触点容量大、交流直流都能带、通断隔离好缺点是响应慢、寿命有限带不了高速脉冲。晶体管输出的特点是响应快能做PWM、PTO脉冲但只能带直流负载。我绝大多数项目选继电器输出型CPU输出点不直接驱动接触器和电磁阀而是先经过中间继电器转接。中间继电器线圈24V触点容量选5A以上的控制回路和负载回路就彻底隔离了PLC输出点只是驱动一个几十毫安的线圈安全又耐用。输出回路里每一个感性负载接触器线圈、电磁阀都要在旁边并联一个续流二极管直流负载或者RC吸收回路交流负载。这个不画上去现场通断几次之后你就能看到火花严重的会干扰PLC程序跑飞。图纸上这些小元件一定要画别觉得不重要。4.4 原理图绘制要点和图纸管理完整的图纸包我一般包含这几张封面和目录、电源系统图、PLC系统构成图、DI输入接线图、DO输出接线图、模拟量接线图、主回路图、端子排图。每张图都要有图号、版本号、修改日期改过的地方要在修订栏里记录。图纸里的线号规则要统一比如24V正极标“24V”0V标“0V”控制回路信号线从1开始编号PLC输入点对应线号就是I点的通道号这样原理图和端子排图、IO分配表三者一对照现场查线就是几分钟的事。我画图的时候有个习惯每个PLC输入输出端子旁边直接写上IO分配表里的符号名而不是只写地址。接线的人看到“I0.0”旁边写着“SB1启动”就不会接错。这个习惯看着土现场省下的时间却是实打实的。5. 组态王与S7-1200联调实战5.1 通信方式怎么选组态王连S7-1200主流就两条路。第一条是用组态王自带的S7-1200 TCP驱动以太网直连配置简单我大部分项目都走这条。第二条是通过OPCPLC侧用SIMATIC NET的OPC服务器组态王连OPC服务器。OPC方式灵活但要在服务器上装SIMATIC NET配置复杂度高中小项目没必要。选第一条路先决条件就是PLC侧必须开放PUT/GET访问不然组态王驱动连上了也读不到数据。具体在博图里的操作设备组态 → 选中CPU → 属性 → 防护与安全 → 连接机制 → 勾选“允许来自远程对象的PUT/GET通信访问”。改完之后要把修改下载到PLC才生效。很多人组态王配了半天发现读不到数据最后发现是这一步没做属于最常见的低级失误。5.2 组态王工程配置步骤组态王这边我按这个顺序操作。第一步新建工程取项目名。第二步在工程浏览器的“设备”里右键选择“新建”设备驱动列表里找S7-1200 TCP这个驱动然后按向导设置设备名称、PLC的IP地址、通信参数默认端口就行超时时间一般设3000毫秒。第三步在“数据词典”里定义变量。第四步在画面上组态。第五步切换到运行系统测试。变量定义是核心环节。组态王的变量分I/O变量和内存变量和PLC通信相关的必须是I/O变量。PLC的输入输出点对应“I0.0”“Q0.0”这种地址M区对应“M0.0”DB区对应“DB1.DBD0”。这里要特别注意数据类型和地址类型要匹配读一个字节用BYTE读一个字用WORD或INT读一个实数用REAL读一个位用BIT或者“离散”类型。地址错一位、类型不对数据要么读不到要么读出来是乱的。我习惯把和组态王通信相关的PLC变量全部集中在前面说的那个非优化DB里比如DB10里定义设备状态、产量、报警代码组态王就只读DB10这块清清楚楚。组态王的画面组态其实就是往画布上拖图库里的图形然后把图形绑定到变量上。比如放一个指示灯双击它在“动画连接”里选“隐含”或者“颜色变化”关联到“运行状态”这个I/O离散变量信号为1时变绿为0时变灰。按钮就选“按下时”和“弹起时”动作关联到PLC的启动、停止位。组态王自带图库里按钮、指示灯、仪表、管道都很丰富画一个设备监控画面半小时能搞定比WinCC那边轻快多了。5.3 联调步骤和先后顺序组态王和PLC联调我强烈建议按这个顺序走能省掉大量交叉排查。第一步PLC程序先博图自带仿真跑通确认逻辑正确。第二步用真实PLC下载程序用博图在线监控确认变量值正确。第三步用网线连PLC和电脑先在电脑上ping一下PLC的IPping通了再开组态王。第四步组态王里建变量先建两三个关键变量测试比如一个离散量和一个整数确认能读到值再进行全量变量配置和画面组态。第五步联调按钮、报警、趋势曲线这些交互功能。我在实际项目中组态王“设备”里能看到设备状态如果显示“设备打开失败”排查顺序是先ping确定物理链路通再检查PLC侧PUT/GET有没有开最后检查组态王驱动的IP和通信参数有没有填错。三步走下来八成问题都能定位。6. 常见问题排查与避坑实录6.1 博图安装与许可证问题博图的安装是很多人第一个栽跟头的地方。搜索里频繁出现的“安装过程中出错一些已安装产品需要许可证请启动Automation License Manager”这个报错典型的场景是你装好了博图第一次打开或者运行到一半系统提示找不到许可证。解决办法是打开开始菜单里的Automation License Manager看看许可证列表里有没有对应产品版本的授权比如用的TIA Portal V17就需要STEP 7 Professional V17的许可证。如果授权是试用版的确认试用授权没有被锁定或者过期如果是正式授权确认许可证服务“Automation License Manager Service”处于运行状态。还有一点V16、V17、V18这几个版本之间许可证不通用装了V17又装V18各用各的授权。再一个高频问题是“博图找不到许可证 STEP7 Basic”这通常是把软件装了但许可证还没安装或者安装了但没有“传输”到本地。在Automation License Manager里把授权从注册文件转储Transfer到本地磁盘再重启博图就好了。还有一个土办法但很有效先卸载博图注意要从控制面板里完整卸载卸载的时候如果提示有共享组件不要急着删最好用官方提供的卸载工具卸载完重启电脑再重装。我自己装新版本博图之前都会把旧版本相关的所有组件扫一遍尤其是许可证管理器残留的授权服务经常导致新版本装不上或者装上了找不着授权。这里多说一句博图安装包动辄几十上百GB我见过太多人为了省事去网上找网盘资源下下来一个压缩包结果还要输入“解压密码”解压完装到一半各种报错。折腾一圈的时间和精力真的不如走正规渠道拿试用授权官方试用版足够学习和小项目开发用了也省得电脑里装一堆来路不明的东西。6.2 仿真与在线通信问题博图HMI仿真按钮无反应这是做触摸屏仿真时特别常见的。排查顺序是先确认PLC仿真有没有跑起来HMI仿真是要和PLC仿真配合的只启HMI仿真、不启PLC按钮自然没反应再看看HMI里的连接配置连接指向的IP地址和PLC仿真分配的IP是不是一致最后检查按钮的“按下”事件到底有没有关联到变量有时候画面上按钮是摆了关联动作没做怎么点都没反应。另外S7-1200在博图里用的是集成的S7-PLCSIM仿真不需要也不支持用PLCSIM Advanced——那个是给S7-1500准备的高级仿真工具带扩展通信接口和API很多朋友搜“S7-PLCSIM Advanced V6.0怎么和博图连接”其实是在做1500项目时才用得上。启动外部高级仿真加载S7-1500提示“OutOfMemory”这个我在老电脑上遇到过。原因是PLCSIM Advanced要加载整个项目到内存S7-1500项目的块多了、数据块大了内存不够就报这个。解决思路是关掉其他占用内存的大程序把博图的缓存清理一下或者精简项目里不用的块。最本质的办法还是加内存64位操作系统、16GB以上内存跑大型仿真才算舒服。博图在线访问找不到设备这也是高频问题。在线访问面板里有两个地方要看一个是PG/PC接口选的是不是当前电脑实际使用的网卡另一个是“可访问设备”里的刷新机制。很多时候是接口选错了比如电脑有线和无线网卡都有默认选了一个没插网线的当然扫不到。还有就是电脑和PLC的IP必须在同一个网段。如果PLC还没分配IP地址可以用博图里的“分配设备名称和IP地址”功能通过DCP协议搜索到设备在线给它分配IP和名称分配完才能正常下载和监控。6.3 组态王通信问题速查组态王这边的问题我整理成一张速查表现场照着查就行现象可能原因解决办法设备显示“打开设备失败”网络不通/驱动未选对先ping PLC检查IP网段确认驱动是S7-1200 TCP能连上但数据全是0或无效PLC未开放PUT/GET访问博图CPU属性里勾选允许PUT/GET重新下载DB数据读不到或读取地址错DB是优化的块访问无固定偏移取消优化块访问用非优化DB重新下载数据读出来了但值不对变量类型与地址不匹配检查组态王变量类型WORD/INT/REAL对应关系画面刷新很慢通信超时时间太短/采集频率太高适当调大超时时间降低采集频率按钮操作没反应PLC侧对应M点没被写入/地址绑错用博图监控确认组态王写入的地址正确删掉一个细节很容易被人记住组态王读DB数据块的时候DB地址要从1开始数比如PLC里建的DB1组态王设备地址填“DB1.DBD0”访问的就是第一个双字。如果你在PLC里把DB1的第一个变量定义成布尔量占了一个字节第二个变量是实数那组态王这边读DB1.DBD1可能就对齐不上真实地址可能要从DBD4开始。这是“数据类型占用字节”的基本功但对不熟悉的人来说就是个大坑。我的建议是通信DB里尽量按数据类型对齐排布布尔量集中放前面然后字节、字、实数按顺序排别混着来。6.4 经验优先级排序最后按我的经验给做这类项目的朋友排个优先级。第一IO分配表一定要认真做它是整个项目的地基图纸、程序、上位机全部从这里长出来。第二通信DB从一开始就用非优化访问取消“优化的块访问”这是和组态王联调顺畅的前提。第三程序注释和符号名不是可有可无的是交付物的一部分。第四图纸和程序要同步更新现场改了什么回来当天就改图纸拖一个礼拜就忘了。我在实际项目里吃过最亏的一次就是IO分配表没预留备用点现场甲方临时加了一个检测信号没地方接了最后只能把本来用的一个输出点拆出来顶上去程序、图纸、组态王画面全要跟着改折腾了一整天。从那以后我每个项目都恨不得多留几路备用宁可富余也别抠搜。这套S7-1200加博图加组态王的组合本身不是什么高精尖技术但把每个环节做扎实、留好余量项目交付就会顺很多。
返回列表