【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(用于测试通信)(需要相关软件加VX:xiketang777)
硬件接线
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,来读取相关参数,各个引脚填写如图所示,该程序段主要用于读取实时脉冲 |
上位机开发思路
为了便于操作,需要配一个HMI人机界面来进行使用。这个的HMI形式是比较多样化的,如触摸屏、组态软件等,但是这里,我们采用目前比较流行的方式——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通信你都可以搞得定(需要相关资料加VX:xiketang777),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、运动停止、运动暂停、复位相关功能。
写在最后
这个项目整体来说难度不是很大,但是涉及的知识面比较广,非常适合上位机初学者进行学习和练手。(需要视频教学资料加VX:xiketang777)
伴随着物联网及智能制造的普及,越来越多的PLC工程师,开始寻求新的学习机会来升职加薪。
【C#上位机】西门子1200PLC实用定位控制程序案例相关推荐
- 上位机多个下位机modbustcp通讯_【C#上位机】西门子1200PLC实用定位控制程序案例...
1. 引言 新阁教育这篇文章是一篇综合性非常强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够 ...
- C#工控上位机实例_「C#上位机」西门子1200PLC实用定位控制程序案例
1. 引言 本文是一篇综合性非常强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够让我们很好 ...
- 西门子1200PLC实用定位控制程序案例
引言 本文是一篇综合性比较强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够让我们很好地将所学 ...
- 西门子S7-1200PLC 四轴定位控制程序(自动螺丝机)
西门子S7-1200PLC 四轴定位控制程序(自动螺丝机) 程序是基于S7-1200 PLC (CPU 1214C ),博途V 13 SP 1编写. 程序中利用 TO AXIS 运动控制指令编写4轴定 ...
- C#上位机 西门子PLC通信 S7NET协议
C#上位机 西门子PLC通信 S7NET协议 1,西门子PLC网口通信,可通信S7-200smart,S7-1200,S7-1500. 2,例子简单易懂,自己写的程序,可提供部分 3,现场实测有效. ...
- 西门子1200plc轴运动控制程序模板
西门子1200plc轴运动控制程序模板 介绍:此程序是之前给海康威视做的一台装路由器壳子的机器. 程序有以下: 1):调用轴控制块做的控制3个伺服, 2):1个电缸, 3):用PUT GET块与上下游 ...
- 西门子1200plc轴运动控制程序,程序包括有调用轴控制块做的控制3个伺服,1个电缸
西门子1200plc轴运动控制程序,此程序是之前给海康威视做的一台装路由器壳子的机器,程序包括有调用轴控制块做的控制3个伺服,1个电缸,还有用PUT GET块与上下游plc通讯,轴控制块和气缸报警块都 ...
- 西门子1200plc轴运动控制程序模板 调用轴控制块做的控制3个伺服
SIEMENS/西门子西门子1200plc轴运动控制程序模板 介绍:此程序是之前给海康威视做的一台装路由器壳子的机器. 程序有以下: 1):调用轴控制块做的控制3个伺服, 2):1个电缸, 3):用P ...
- labview 上位机软件开发——实用技巧1000例
labview 上位机软件开发--实用技巧1000例 标题商与余数函数的用法 今天跟大家分享一个实用小技巧--商与余数函数的用法 1.真实工况: 一个测试台上位软件开发项目中,一个被试元件,要求做寿命 ...
最新文章
- 数据库创建索引的原则
- Windows:让Windows XP中的IIS支持多站点的工具
- windows下sse性能对比
- Linux之不删除指定文件夹,其他都删(文件和文件夹)
- 单片机入门-矩阵键盘控制数码管显示
- C#面向对象名词解释(四)
- 如何使用阿里云容器服务保障容器的内存资源质量
- “晶振”拍了拍你,“你知道我是如何工作的吗?”
- jzoj4672-Graph Coloring【图论,模拟】
- java 虚类private 继承_Java经典面试36题和答案
- vue 计算属性_lt;Vue 源码笔记系列6gt;计算属性 computed 的实现
- ProgressBar与Handler的整合应用
- mysql查询2个isbn数据,数据库实验二 数据查询
- pycharm cpu占用低_AMD的CPU游玩2077提升帧数的办法
- iOS开发日记24-详解RunLoop
- Linux文件系统格式EXT3,EXT4和XFS的区别
- seaTunnel 支持的插件
- 经济应用文写作【5】
- 深入解析 | 如何设置关键词密度?
- redis和zk实现分布式锁的优缺点
热门文章
- 使用Metasploit对MSSQL渗透测试步骤——学习笔记
- 把图片转成像素点保存到Excel中
- STM32CubeIDE:ld.exe: xxx.elf section `.rodata‘ will not fit in region `FLASH‘;`FLASH‘ overflowed
- oracle中文问号乱码,Oracle 中文记录 及 乱码 判断 说明 .(转)
- 【渗透笔记】友情检测朋友公司并拿下shell过程
- 盘点适合入门学习的C/C++开源项目
- Java设计模式(疯狂Java联盟版)
- 大数据----数据仓库设计基础(实列演示)
- 戴尔服务器查看系统事件日志,戴尔笔记本电脑上的 BIOS 事件日志和诊断日志记录...
- C语言自学之路:养成写博客的习惯,记录自学之路