「C#上位机」西门子1200PLC实用定位控制程序案例
本文是一篇综合性比较强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够让我们很好地将所学知识结合起来。
采用西门子TIA Portal V16编程软件编写运动控制程序,实现PLC(S7-1200系列:CPU1214C DC/DC/DC )对步进电机的控制,再通过编写ModbusTCP程序,将控制地址进行映射,从而方便上位机(VS 2019开发)与PLC进行通信,最终实现步进电机的运动方向、速度及距离的灵活控制。
涉及硬件:开关电源、S7-1200PLC、步进驱动器、步进电机、单轴模组、限位开关。
涉及软件:TIA Portal V16、VS2019、ModbusPoll(用于测试通信)。
—硬件接线—
—PLC编程—
1.通过博图软件创建一个新的PLC项目,根据硬件型号插入新设备,这里为CPU 1214C DC DC DC
2.双击PLC的以太网口,设置IP地址,这里设置为192.168.2.210
3.双击CPU,在脉冲发生器PTO/PWM选项中设置信号类型为PTO,脉冲输出为Q0.0,方向输出为Q0.1
关注+后台私信:【资料】
立即免费领取24门PLC入门教程
4.新建一个工艺对象,名称为轴1,通过基本参数>驱动器,设置脉冲输出为Pulse1
5.通过扩展参数>位置限制,设置上下限位分别为I0.1和I0.2
6.通过扩展参数>回原点>主动,设置原点开关为I0.0
7.程序段1,调用MC_Power使能,各个引脚填写如图所示,其中Asix选择轴1
8.程序段2,调用MC_MoveRelative,各个引脚填写如图所示,该程序段主要用于执行相对运动
9.程序段3,调用MC_MoveAbsolute,各个引脚填写如图所示,该程序段主要用于执行绝对运动
10.程序段4,调用MC_MoveJog,各个引脚填写如图所示,该程序段主要用于执行前进和后退点动
11.程序段5,调用MC_Home,各个引脚填写如图所示,该程序段主要用于执行归零
12.程序段6,调用MC_Reset,各个引脚填写如图所示,该程序段主要用于执行复位功能
13.程序段7,调用MC_Halt,各个引脚填写如图所示,该程序段主要用于执行暂停功能
14.程序段8,调用MC_ReadParam,来读取相关参数,各个引脚填写如图所示,该程序段主要用于读取实时脉冲
关注+后台私信:【资料】
立即免费领取24门PLC入门教程
—上位机开发思路—
为了便于操作,需要配一个HMI人机界面来进行使用。这个的HMI形式是比较多样化的,如触摸屏、组态软件等,但是这里,我们采用目前比较流行的方式——C#开发上位机,来供用户使用。C#开发上位机相对于传统的组态软件,各自都有自己的优缺点,主要体现在如下三个方面:
1.功能限制: 组态软件对于一些特定的需求或者逻辑,会有一定的局限性,使用上也受到软件本身的约束;C#开发上位机完全自主开发,几乎不存在功能上的限制,并且扩展方便。
2.技术要求: 组态软件最大的优势在于方便,因为它本身都集成了一些通用协议和元件,只需要按照使用说明进行组态配置即可;C#开发需要完全自己搭建框架和实现底层代码,对开发者的技术要求会更高一些。
3.价格成本: 组态软件需要按套、按点位收费,意味着每个项目无形中都有一个基础成本;C#开发上位机自主开发,不需要二次授权费用,并且开发一套之后,可以快速应用到其他项目中。
采用C#上位机开发,首先需要考虑的是通信问题。西门子S7-1200支持很多种不同的通信协议,包括S7、ModbusTCP、TCP/IP、UDP、OPC等,从开发成本上来说,我们优先考虑S7和ModbusTCP,对于S7和ModbusTCP通信协议,比较一下两者的优缺点:
1.S7协议为西门子内部协议,协议本身不公开,需要调用或者自己开发通信库,使用S7通信协议需要勾选CPU中的允许来自远程对象的PUT/GET通信访问。
2.ModbusTCP为公开、免费协议,可以自己开发通信库或者使用开源库,使用ModbusTCP通信协议需要编写一定的PLC程序来实现地址映射。
从公开免费和使用范围的角度来考虑,这里采用ModbusTCP通信协议,因为你学会了ModbusTCP,意味着市场上的大部分仪表、PLC通信你都可以搞得定,PLC程序编写如下所示:
1、创建DB块
这里首先创建一个DB块,里面包含了常用的一些操作和参数设置,值得注意的是,由于Modbus保持型寄存器的Bit位操作比较麻烦,因此这里我们统一使用Word类型来代替Bit。
2、Modbus地址与PLC地址的映射(控制位)
3、Modbus地址与PLC地址的映射(参数地址)
4、ModbusServer程序编写
5、上位机UI界面设计
6、ModbusTCP通信库
上位机开发功能实现的核心在于ModbusTCP通信库编写,由于Modbus协议是公开免费,可以自己根据Modbus协议来开发,也可以使用开源的Modbus库,如NModbus等,有了ModbusTCP通信库之后,我们可以将更多的精力放在业务处理及逻辑处理上面。
7、ModbusTCP通信点表
—上位机开发功能—
1、首先创建一个Windows窗体应用项目,项目名称为thinger.cn.MotionPro。
2、日志显示功能:日志显示采用ListView进行显示,绑定一个ImageList用来区分信息、报警、错误,添加日志方法的参数包含日志等级及日志内容。
3、自己开发ModbusTCP通信库或者使用开源库,该库应该具备建立连接、断开连接、预置寄存器、读取寄存器的功能。
4、建立连接和断开连接:这里通过按钮实现建立连接和断开连接2个功能。
5、相对位置运动:设置相对运动速度和相对运动位置,实现电机的相对运动。
6、绝对位置运动:设置绝对运动速度和绝对运动位置,实现电机的相对运动。
7、点动运动模式:设置点动运动速度,按住正向点动或者反向点动,实现电机的点动运动。
8、回原点模式:点击回原点,可以控制物体回到原点位置并停止。
9、运动停止、运动暂停、复位相关功能。
(来源:网络,版权归原作者所有,侵删)
想知道PLC的定位指令的使用程序,伺服接线图?这篇文章别错过
伺服控制接线图:
在这里我们使用的是三菱FX—3U的PLC与松下A5的伺服驱动器,我们在PLC上设计了停止指令,远点回归,近点信号,中断信号,以及正反转限位等。因为我们前面已经给大家介绍过类似这种接线图,现在就不一一介绍了。
伺服驱动器参数设置:
Pr0.01=0;位置控制方式,
Pr0.00=1;电机旋转方向设定,Pr0.05=0;光电耦合输入,(伺服驱动器有两种方式输入:一种是光电耦合输入,一种是差动输入。)
Pr0.06=0;指令脉冲极性设置,Pr0.07=3;脉冲+方向输入方式,
Pr0.08=3000;电机每转1周指令脉冲数,
Pr4.06=3847 ( 00000F07H) ;设置S17为清零输入端,
Pr4.11=131586 ( 0002020202H) ;设置S02为伺服准备好输出端,
Pr4.00=131586 ( 0002020202H) ;设置I1为反转限位2开关输入端,
Pr4.01=65793 ( 00010101H) ;设置SI2为正转限位2开关输入端。
Pr5.04=0;正反转限位开关2有效,
Pr5.05=2;正反转限位顺序设置,并清除脉冲偏差计数器为零
输入和输出信号说明:
●X0一停止 定位指令执行,
●X1-开关瞬间接通,可执行原点回归指令( DSZR)
●X2一原点回归时,近点信号输入端,
●X7一原点回归时,接收伺服驱动器输出的编码器Z相信号输入端。即零点信号。
●Y000 -脉冲输出端,
●Y003- -电机旋转方向信号输出端
●Y005- 清零信号输出端。
说明:
1,使用X001输入端启动DSZR原点回归指令
2,使用M22正转点动,执行DRVI相对定位指令。
3使用M23反转点动,执行DRVI相对定位指令。
4,使用M24正转启动,执行DRVA绝对定位指令。
5使用M25反转启动,执行DRVA绝对定位指令。
6使用M31启动,执行ZRN原点回归指令。
7使用M32启动,执行DVIT中断定长指令。
程序:
在这里如果大家有看不懂的,可以看看前面的文章,对原点回归指令的介绍。
喜欢更多PLC知识,关注小编不迷路噢!
相关问答
怎么用PLC读取GPS模块的定位信息-ZOL问答
PLC都支持串口读取、下载和上传简单的数据信息,要实现PLC读取,需要GPS模块支持串口(UART)通信才行,比如天工测控(*KYLA*)的智能穿戴GPS模块SKG09A就具有这样的功...
编码器怎么实现定位功能,用plc怎么设计梯形图?
严格来讲,编码器只会告诉你改如何定位,要如何执行,是需要靠数控系统(或者PLC之类控制器)控制伺服或者步进电机来实现定位的,编码器好比人的眼睛,知道电机...PLC...
plc模块有定位查找功能吗?
国产plc里面基本是没有定位模块的,这样子会加大成本投入,竞争优势减少。而且,plc主要功能是执行指令,所以很少有定位模块加入里面。国产plc就是打价格战,除...
三菱FX5UCPLC,知道第一点XY的位置怎样写数据阵列的程序?
首先用数据线将电脑与cpu的通讯端口连接起来,可以建一个新的程序问文件夹,也可以找同类型的程序选择从cpu到电脑download直接下载就可以了首先用数据线将...
三菱PLC定位指令的相关设置?
三菱PLC的定位指令包括绝对定位和相对定位两种。其中,绝对定位需要设置目标位置的绝对值,而相对定位则需要设置目标位置与当前位置之间的相对距离。在设置过程...
在plc控制系统里面,定位模块起的是什么作用?
简单说一下PLC全称可编程逻辑控制器,可见其本质就是一种控制器,这种控制器可大致看作由处理器、寄存器、输入输出组成。PLC编程的本质就是制定一套程序,让控...
三菱plc定位程序如何设置原点地址?
在三菱PLC中,定位程序通常使用PLSV指令来实现。要设置原点地址,你需要使用MOV指令将原点地址存储到一个寄存器中,然后将该寄存器的值传递给PLSV指令的“S”参...
西门子plc300伺服定位指令?
西门子PLC300伺服定位指令用于控制伺服电机的位置。该指令通过向伺服电机发送脉冲信号来控制其运动,脉冲信号的数量和频率取决于指令。通常情况下,指令值越...
编写3轴联动PLC定位程序(3轴同时动作),需要定位模块吗?
不就是插补么.看PLC是否支持.一般说来,定位模块的功能都比本机还差点.不就是插补么.看PLC是否支持.一般说来,定位模块的功能都比本机还差点.
想请教下,编码器,、变频器与plc如何做定位控制?
编码器采集编码值,相当于路程,PLC就能计算出当前的实际速度和位移情况,然后PLC还要算出剩余路程,根据剩余路程,计算并输出需要的速度。当然,你还要考虑运...