搜索
bottom↓
回复: 21

西门子s7-200PLC与stm32(原子战舰板)通信问题

[复制链接]

出0入0汤圆

发表于 2014-9-7 21:43:57 | 显示全部楼层 |阅读模式
最近本人要做一个测试:就是运用stm32(原子战舰板)作为上位机控制西门子s7-200PLC;实际上就是两者的通信问题。stm32(原子战舰板)上有485转换芯片,就是用485的A,B线与PLC通信端口连接,用的是PLC自由口通信模式。关于RCV和XMT指令不知谁有较为详细资料?

出0入0汤圆

发表于 2014-9-7 21:56:29 | 显示全部楼层
我有 周一传一下 在公司电脑上

出0入0汤圆

 楼主| 发表于 2014-9-7 21:59:51 | 显示全部楼层
wuliwb 发表于 2014-9-7 21:56
我有 周一传一下 在公司电脑上

非常感谢!

出0入0汤圆

 楼主| 发表于 2014-9-7 23:46:25 | 显示全部楼层

请将配套例程(西门子200plc与stm32通信)发给我学习学习,谢谢!

出0入0汤圆

发表于 2014-9-9 17:35:43 | 显示全部楼层
西门子自由口通讯程序(注释很详细,有兴趣的可以参考一下)
S7-200可编程控制器与微机通信之设计和实现
介绍了S7-222 通信方式,着重阐述了自由口通信 参数设定、协议规划和通信程序设计。
  可编程控制器(PLC)作为一种高性能 工业现场控制装置,已广泛地用于工业控制 各个领域。目前,工业自动控制对PLC 网络通信能力要求越来越高, PLC与上位机之间、PLC与PLC之间都要能够进行数据共享和控制。
  飞剪控制系统要求 远离PLC 控制室里,实时监控电机、供纸、刀辊等设备。上位机为普通PC机,下位机为 SIEMENS S7-222 PLC。 实际开发中,采用自由口通信模式,自定义 PC与 PLC 通信协议,用Step7编写PLC端 通信程序,而  PC端用VC6.0实现串行通信的控制和监控界面的显示。
2.通信方式及原理
  S7-200系列PLC通信方式有三种:一种是点对点(PPI)方式,用于与西门子公司 PLC编程器或其它产品通信,其通信协议是不公开 。另一种为DP方式,这种方式使 PLC可通过Profibus DP通信接口接入现场总线网络, 扩大PLC 使用范围。最后一种方式是自由口(FreePort)通信方式,由用户定义通信协议,实现PLC与外设 通信。本系统中采用自由口通信方式。它是S7-200系列PLC一个很有特色 功能。这种方式不需要增加投资,具有较好 灵活性,适合小规模控制系统。自由口通信 物理接口上要求双方都使用RS485接口,波特率最高为38400bps。虽然PC机 标准串口为RS232,但西门子公司提供 PC/PPI电缆带有RS232 /RS485电平转换器,因此在不增加任何硬件 情况下,可以很方便地将PLC和PC机互联。
  2.1自由口模式的初始化
  PLC 自由口模式通信编程首先是对串口初始化。对S7-200PLC 初始化是通过对特殊存储字节SMB30(端口0)写入通信控制字,来设置通信的波特率、奇偶校验、停止位和数据位数。显然,这些设定必须与上位机设定值相一致。另外还可选择通信模式和主从站模式,各具体存储位内容可参考SIMATIC S7-200系统手册。
  2.2自由口模式下收发数据
  初始化自由端口通信模式后,就可以进行数据的收发。
  (1) 发送数据指令 XMT
  格式:XMT Table,Port。可以用 XMT指令发送数据,XMT指令激活发送缓冲区(从Table开始 变量存储区)中的数据。数据缓冲区 第一个数据指明了要发送 字节数,Port指明了用于发送 端口,缓冲区最多可以有255个字符。在发完缓冲区 最后一个字符时,会产生一个中断 (对端口 0为中断事件9)。本例 XMT缓冲区 格式如表1。其中,状态字节表示PLC是否正确接收了上位机所传数据;上传数据为PLC上传给PC 数据,需将9字节 16进制数编码为18字节 ASIIC码,所以字节数为18;BCC为上传数据 异或和,同样将16进制数编码为ASIIC码;结束字符的值为26。
  
表1 发送缓冲区

表2 接收缓冲区
  RCV Table,Port。用 RCV指令接收最多为255个字符的数据,这些字符存储 缓冲区中。在接收到结束字符时,会产生一个中断(对端口 0为中断事件23)。本例的RCV缓冲区 格式如表2。其中,命令类型表示上位机让PLC 执行什么操作,如读或写;目标站号是分配给PLC 一个代号;起始地址是PLC要进行读写的存储区的起始地址;读写字节数是PLC接到命令后,对存储区进行读写的字节数,本例中最多写入16字节、读出9字节;写入数据是上位机要写入PLC的数据, 读命令不起作用;BCC是从命令类型开始到写入数据为止的43字节数据 异或和。从目标站号到BCC这几项内容,都是把16进制数编码为ASIIC码来表示的。
3.自由口通信程序设计
  通信程序 设计需遵循一定的规则,如中断通信处理程序要短小精悍、要避免XMT与RCV指令同时在一个端口执行等。整个PLC通信程序包括主程序、通信初始化子程序、校验子程序、读写数据子程序和发送完成、接收完成中断服务程序。
  3.1主程序
  通信主程序是PLC实现接收、发送功能 主框架。其主要流程为查询接收是否完成,校验,再根据类型执行读、写等操作。它的用是控制程序的流程,校验、读写等具体工作由相应的程序完成。流程如图1。
  3.2通信初始化程序
  通信初始化子程序设置自由口通信的关参数,对接收信息控制寄存器SMB87写入控制字,定义起始字符、结束字符和接收超时。设好自由口模式的些参数后,还要连接中断事件和中断服务程序,并打开中断。最后,把接收、发送缓冲区写入初值即可。
  3.3校验子程序
  每次PLC接收完1帧数据,就调用此子程序进行校验。进入子程序后,先清除接收完成标志位,再计算所接收数据 校验和BCC。如果正确,还要检验结束字符是否为‘G’。不是的话,说明数据报文长度不对或传输过程中发生了错误,需要向上位机返回相应 出错信息。流程如图2。
  
图1 主程序流程图

图2 校验子程序流程图
  3.4读、写数据子程序
  这2个子程序 任务是把PLC存储区中 数据发给上位机或把上位机传来 数据写入PLC存储区。二者 流程相似,只是数据流向不同。进入子程序后,先停止接收,然后完成数据传输,最后发送应答报文。不同之处就是应答报文中的状态字节:读操作时是1、写操作时是2。
  3.5接收、发送完成中断服务程序
  当PLC接收到结束字符后产生中断(事件号9)或数据发送结束后产生中断(事件号23),这两个服务程序被执行。接收完,先把接收完标志置1,然后再次启动接收。发送完,先清除校验正确标志,再把接收缓冲区中的结束字符和计算出的接收BCC结果清零,最后再次启动接收。
  由于是半双工通信,因此PLC无论是发送和接收完数据后,都必须将通信口设置成接收状态。否则,PLC就接收不到任何数据了。
4.上位机 通信编程
  上位机通过RS232口与PLC进行通信,Windows环境串口通信程序利用VC6编写。VC6编写串口通信程序通常有MSCOMM控件和通信API两种方法。二者各有优缺点。MSCOMM控件封装了微机串口通信的基本功能,使用者只需设置一些基本参数,就可以 串口收发数据了。这种方法简单,易于编程人员使用,现 已有很多例子供参考。用通信API编写串口程序相对复杂一些。开发者要直接使用Windows提供 一组API函数来完成上述控件封装好 功能。 使用API编程比使用控件更复杂,但同时也更灵活。通信控件已经封装好 功能是无法改变 ,而使用API就能针对通信协议编写效率更高的代码。
   飞剪控制系统的上位机程序中,使用通信API编写了串口读写的模块。接收时,程序要查找起始字符‘g’,以确定1帧数据 开始;再根据下一个状态字节判断通信的正确性;最后,把长度为23字节 数据帧接收好,并准备接收下一帧。发送过程不用判断数据内容,执行发送函数即可。需要注意的是:由于 PLC通信口是半双工的,所以在PLC向上位机上传数据时,上位机要等1帧数据接收完毕,再执行发送操作,以避免收发冲突。
  
图3 上位机串口通信流程图
  本系统取PC机和PLC各自的特点,实现了对飞剪系统 实时监控。 利用PLC(下位机 )的自由口通信协议和上位机的VC开发工具,可以方便地开发出PC机和PLC通信应用软件。这种方法节省投资,对小规模 系统极具现实意义。系统具有实时性好、速度快、可靠性高、操作方便等优点,达到了预期 效果。经现场调试及运行表明,该系统适合于飞剪系统的实时监控。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-9-9 17:48:24 | 显示全部楼层
wuliwb 发表于 2014-9-9 17:35
西门子自由口通讯程序(注释很详细,有兴趣的可以参考一下)
S7-200可编程控制器与微机通信之设计和实现
介 ...

也在学习这块,光协议就搞得头晕,下来看看,谢谢分享.

出0入0汤圆

发表于 2014-9-9 18:10:27 来自手机 | 显示全部楼层
西门子不支持modbus,可以的话还是用支持的开发方便点

出0入0汤圆

发表于 2014-9-9 21:27:25 | 显示全部楼层
hamwang1 发表于 2014-9-9 18:10
西门子不支持modbus,可以的话还是用支持的开发方便点

是支持的!http://www.automation.siemens.co ... =99942&cid=1028

出0入0汤圆

发表于 2014-9-9 21:41:38 | 显示全部楼层
怎么看不到流程图?

出0入0汤圆

发表于 2014-9-9 22:30:50 | 显示全部楼层
西门子S7200-plc有modbus支持库的

出0入0汤圆

发表于 2014-9-9 22:36:25 | 显示全部楼层
S7-200提供了modbus和uss通信协议的库,另外还可以通过自由口自行编写modbus协议

出0入0汤圆

 楼主| 发表于 2014-9-9 23:01:42 | 显示全部楼层
wuliwb 发表于 2014-9-9 17:35
西门子自由口通讯程序(注释很详细,有兴趣的可以参考一下)
S7-200可编程控制器与微机通信之设计和实现
介 ...

很高心得到你的帮助!谢谢!能发给我一个s7-200的编程软件吗?我的版本太低了。感觉阿莫论坛的水平和档次真的不一样!真正的能学到有用的东西!再次谢谢!

出0入0汤圆

 楼主| 发表于 2014-9-9 23:03:32 | 显示全部楼层
tangxh 发表于 2014-9-9 22:36
S7-200提供了modbus和uss通信协议的库,另外还可以通过自由口自行编写modbus协议 ...

谢谢,现在正在用原子战舰板做上位机触摸屏控制plc的项目。

出0入0汤圆

发表于 2014-9-9 23:10:19 | 显示全部楼层
这个直接使用MODBUS通信不就完了。方便得很。

出0入0汤圆

 楼主| 发表于 2014-9-10 01:09:28 | 显示全部楼层
已经成功通信!

出0入0汤圆

发表于 2014-9-10 08:26:06 | 显示全部楼层

不错

出0入0汤圆

发表于 2014-9-10 08:27:58 | 显示全部楼层
直接用modbus吧!

出0入0汤圆

 楼主| 发表于 2014-9-10 19:36:08 | 显示全部楼层
谢谢!已经搞定!

出0入0汤圆

发表于 2014-10-13 18:39:57 | 显示全部楼层
S7 200 通讯协议

出0入0汤圆

发表于 2014-10-30 23:11:32 | 显示全部楼层
最近也做485实时通信控制5个电机同步运行。

出0入0汤圆

发表于 2021-5-17 10:37:55 | 显示全部楼层
最近也在学stm32和PLC的通讯,请问楼主是怎么完成的呢,能分享一下经验吗

出0入0汤圆

发表于 2021-5-17 10:44:40 | 显示全部楼层
ng1123 发表于 2021-5-17 10:37
最近也在学stm32和PLC的通讯,请问楼主是怎么完成的呢,能分享一下经验吗

有plc的库啊 先看看
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 -- 东莞阿莫电子网站 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2023-2-8 02:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表