直播课堂
HOME
直播课堂
正文内容
plc编程方向识别 「C#上位机」西门子1200PLC实用定位控制程序案例
发布时间 : 2025-02-06
作者 : 小编
访问数量 : 23
扫码分享至微信

「C#上位机」西门子1200PLC实用定位控制程序案例

引言

本文是一篇综合性非常强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够让我们很好地将所学知识结合起来。

项目开发平台

采用西门子TIA Portal V15编程软件编写运动控制程序,实现PLC(S7-1200系列:CPU1214C DC/DC/DC )对步进电机的控制,再通过编写ModbusTCP程序,将控制地址进行映射,从而方便上位机(VS 2019开发)与PLC进行通信,最终实现步进电机的运动方向、速度及距离的灵活控制。

涉及硬件: 开关电源、S7-1200PLC、步进驱动器、步进电机、单轴模组、限位开关

涉及软件: TIA Portal V15、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

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,来读取相关参数,各个引脚填写如图所示,该程序段主要用于读取实时脉冲

上位机开发思路

目前比较主流开发上位机的方式,主要是组态软件(触摸屏)、C#开发上位机,C#开发上位机与传统的组态软件之间的区别,主要体现在如下三个方面:

功能限制: 组态软件对于一些特定的需求或者逻辑,会有一定的局限性,使用上也受到软件本身的约束;C#开发上位机完全自主开发,几乎不存在功能上的限制,并且扩展方便。 技术要求: 组态软件最大的优势在于方便,因为它本身都集成了一些通用协议和元件,只需要按照使用说明进行组态配置即可;C#开发需要完全自己搭建框架和实现底层代码,对开发者的技术要求会更高一些。 价格成本: 组态软件需要按套、按点位收费,意味着每个项目无形中都有一个基础成本;C#开发上位机自主开发,不需要二次授权费用,并且开发一套之后,可以快速应用到其他项目中。

采用C#上位机开发,首先需要考虑的是通信问题。西门子S7-1200支持很多种不同的通信协议,包括S7、ModbusTCP、TCP/IP、UDP、OPC等,从开发成本上来说,我们优先考虑S7和ModbusTCP,对于S7和ModbusTCP通信协议,比较一下两者的优缺点:

S7协议为西门子内部协议,协议本身不公开,需要调用或者自己开发通信库,使用S7通信协议需要勾选CPU中的允许来自远程对象的PUT/GET通信访问。 ModbusTCP为公开、免费协议,可以自己开发通信库或者使用开源库,使用ModbusTCP通信协议需要编写一定的PLC程序来实现地址映射。

从公开免费和使用范围的角度来考虑,这里采用ModbusTCP通信协议,因为学会了ModbusTCP,意味着市场上的大部分仪表、PLC通信都可以搞得定,PLC程序编写如下如下所示:

创建DB块

这里首先创建一个DB块,里面包含了常用的一些操作和参数设置,值得注意的是,由于Modbus保持型寄存器的Bit位操作比较麻烦,因此这里我们统一使用Word类型来代替Bit。

Modbus地址与PLC地址的映射(控制位) Modbus地址与PLC地址的映射(参数地址) ModbusServer程序编写 上位机UI界面设计 ModbusTCP通信库

上位机开发功能实现的核心在于ModbusTCP通信库编写,由于Modbus协议是公开免费,可以自己根据Modbus协议来开发,也可以使用开源的Modbus库,如NModbus等,有了ModbusTCP通信库之后,我们可以将更多的精力放在业务处理及逻辑处理上面。

上位机功能开发

首先创建一个Windows窗体应用项目,项目名称为thinger.com.MotionPro。日志显示功能:日志显示采用ListView进行显示,绑定一个ImageList用来区分信息、报警、错误,添加日志方法的参数包含日志等级及日志内容。自己开发ModbusTCP通信库或者使用开源库,该库应该具备建立连接、断开连接、预置寄存器、读取寄存器的功能。建立连接和断开连接:这里通过按钮实现建立连接和断开连接2个功能。相对位置运动:设置相对运动速度和相对运动位置,实现电机的相对运动。绝对位置运动:设置绝对运动速度和绝对运动位置,实现电机的相对运动。点动运动模式:设置点动运动速度,按住正向点动或者反向点动,实现电机的点动运动。回原点模式:点击回原点,可以控制物体回到原点位置并停止。运动停止、运动暂停、复位相关功能。

(来源:网络,版权归原作者所有,侵删)

如何用PLC控制实现编码器的定位功能?

严格来讲,编码器只会告诉你该如何定位,要如何执行,是需要靠数控系统(或者PLC之类控制器)控制伺服或者步进电机来实现定位的,编码器好比人的眼睛,知道电机轴或者负载处于当前某个位置,工业上用的一般是光电类型编码器,下边简单说明一下。

01 简单说下编码原理和位置测量

光电编码器是在一个很薄很轻的圆盘子上,通过紧密仪器来腐蚀雕刻了很多条细小的缝,相当于把一个360度,细分成很多等分,比如成1024组,这样每组之间的角度差是360/1024度=0.3515625度。

然后有个精密的发光源,安装在码盘的一面,码盘的另外一面,会有个接收器之类的,使用了光敏电阻这些元件加放大和整形电路组成,这样码盘转动时候,有缝隙的地方会透光过去,接收器会瞬间收到光脉冲,经过电路处理后,输出一个电脉冲信号,这样码盘旋转了一周,会对应输出1024个脉冲,第一个脉冲位置如果是0,第二个脉冲位置就是0.3515625°,第三个脉冲位置是0.3515625°*2,以此类推,这样只要有仪器能读到脉冲个数,就可以知道码盘对应在什么位置了,如果把编码器安装到电机的轴上,电机轴和码盘是刚性连接,两者的位置关系会一一对应,通过读编码器脉冲,就可以知道电机的轴位置。

而电机轴,比如会通过同步带,齿轮,链条等带动一些负载,比如控制丝杆,这样会有个所谓电子齿轮比的关系,电机转一圈,丝杆会前进多少毫米,这样读到了对应编码器上输出多少给脉冲,通过脉冲数就可以反推出当前丝杆的位置。

但是编码器是圆的,如果无限制旋转下去,角度会无穷大,所以设计了一种增量型的编码器,转一圈,会输出三组信号ABZ,其中AB是一样的脉冲,比如上边说的一圈有1024个脉冲,AB相脉冲对应一圈内的圆周角度,而且两种脉冲是处于正交状态的,如果是正反转,通过判断AB相脉冲的上升沿和下降沿的先后顺序,就可以知道编码器当前是顺时针还是逆时针方向旋转的。

另外有个Z相脉冲,是因为圆周虽然会不停转下去,角度会无穷无尽,但是都是一周一周的重复而已,零相脉冲固定在圆周某个位置,编码器每转一圈,只输出一个零相脉冲,这样如果以Z相脉冲为基准点,这样每次读到这个脉冲时候,系统就清零一次,就可以让角度最大值控制在360°以内,相当于一个零基准点了。

这样即使系统断掉了,重新上电,只要能找到这个基准点,就可以知道丝杆的初始位置在什么地方了。

以上这种定位叫增量坐标系,所以编码器就是增量型编码器,应用比较广泛,因为灵活而且价格便宜。

如果只设备只需要转一圈的,也就是角度在360°内的,编码器可以细分精密一点,比如有13位,相当于2^13次方个脉冲一圈,对应着360°,这种脉冲数和角度一一对应,不怕系统断电需要重新调整零位,这种编码器叫单圈绝对值编码器。如果负载需要转多圈的,但是这个圈数也不能非常多,比如5圈,相当于5*360°=1800°,这样脉冲和1800°一一对应,这些在一些高档的数控机床上应用比较多,可以知道丝杆或者一些旋转工作的当前精密位置,而且不用担心系统断电归零问题。

此外,编码器还有磁电方式的,比如在码盘上加工了很多个南北间隔的小磁铁,通过霍尔去读小磁铁信号,输出信号,同样经过放大和整形变成了电脉冲,这点和光电编码器是类似的,而且价格会便宜点,可靠性会高,但是精度就比光电要差点。

02 PLC如何通过编码器判断位置

PLC能输入开关量,也就是一高一低的电平电压,而编码器脉冲信号,可以理解一定时间内,用极快的速度完成的一组开关量。但是因为这种开关量的频率太高了,所以PLC的普通I/O口是无法准确读到这些脉冲的个数的,因为PLC工作过程中存在扫描周期,需要每个一段时间才去刷新一下普通I/O口的数据,而编码器的精度太高了,单位时间内输出的脉冲个数太多,普通I/O是无法胜任的。

一般PLC会设计有高速计数端口,本质是利用了底层单片机的硬件逻辑来完成这些编码器计数的,避开了扫描周期问题,PLC都设计有专门的高速计数指令,使用的时候,直接调用这些指令就可以读到当前的脉冲值了。

但是脉冲的计算和输出上,由于扫描周期存在,往往也会存在着滞后影响,如果用来控制一些执行机构,比如气缸来动作裁切动作,这样要考虑提前量的补偿问题。

提醒一下,如果想用PLC来控制伺服或者步进系统,往往并不需要通过编码器反馈来判断位置,通过一些PLS指令之类的来发出位置脉冲给伺服驱动器,位置环在伺服驱动器内部构成就好,而PLC这边只是一个指令机构,并没有构成位置闭环,当然如果是专门定位模块控制,使用了NC之类的控制方式,是可以在里边构建位置闭环的。

↓技成PLC课堂专属学习资料

相关问答

用plc接---环形脉冲分配器--步进电机,那plc怎么输出方向控...

[最佳回答]输出的方向控制信号是不要用专用的输出模块,发脉冲用一个口(PLSYY0),电机旋转方向用一个口(OUTY1),发脉冲的个数多少决定步进电机走多少角度,当Y...

plc如何实现位置控制的正反转?

可以通过PLC的高速输出信号控制步进电机的运动方向、运行速度、运行步数等状态。其中:步进电机的方向控制,只需要通过控制U/D端的On和Off就能决定电机的正转或...

plc如何控制车转弯?

PLC(可编程逻辑控制器)可以用来控制车辆转弯,通过掌握车轮转动的速度和方向,实现车辆转弯的控制。如果需要控制一个轮式车辆(例如小车或机器人)进行转弯,...

plc正向着哪两个方向发展?

PLC网络控制是当前控制系统和PLC技术发展的潮流。随着PLC应用领域日益扩大,PLC技术及其产品结构都在不断改进,功能日益强大,性价比越来越高。在产品规模方面,...

plc编程显示能流方向逆转怎么回事?

关于这个问题,PLC编程显示能流方向逆转是由于程序中的逻辑错误导致的。具体原因可能包括以下几点:1.逻辑控制错误:在程序中可能存在逻辑错误,导致电流方向...

三菱PLCDRVAD0D2Y0Y2中Y2的方向怎么定或怎么设置?

Y2就是方向,不用设置,伺服或是步进,都有脉冲+方向模式,假如你Y0给出脉冲,Y2不接通的情况下,是朝左边走的话,那么Y2接通的话就是会朝右边走了。Y2就是方向,不...

西门子S7-200PLC用Q0.0做脉冲输出点,请问步进电机方向用哪个点控制?

控制步进需要用到西门子200的高速脉冲,西门子200的高速脉冲输出点有两个Q0.0和Q0.1。假设楼主这台步进用Q0.0来发脉冲控制转动,Q0.2来控制方向,那么接线为,P...

plc编程就业方向?

PLC就业的行业主要有:1.电厂(包括各个公司,工厂的配电室);2.软件开发(特别是单片机或EDA等);3.PLC(大体是工控方向,搭建操作平台等);4.各个矿山...PLC就...

三菱plc脉冲加方向指令用法?

步骤/方式11、在左母线右侧双击鼠标输入上升沿控制软元件X0,当X0接通时执行脉冲指令。步骤/方式22、在X0触点后输入前沿脉冲“PLSM0,前沿脉冲指当X0从关到...

三菱PLC用dDRVI指令为什么给它正负脉冲都只朝一个方向转?

发脉冲不是这个指令应该是plsy脉冲加方向的话比如你Y0是脉冲那么改变方向只需要加上Y1ON就可以了发脉冲不是这个指令应该是plsy脉冲加方向的话比如你Y0是脉冲...

 木塑复合材料  德国电信 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2025  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部