caixf25的个人主页

http://www.qtcn.org/bbs/u/191792  [收藏] [复制]

caixf25

  • 0

    关注

  • 0

    粉丝

  • 5

    访客

  • 等级:新手上路
  • 总积分:0
  • 男,1994-07-12

最后登录:2018-11-20

更多资料

日志

实战S7-200之间通讯

2018-10-05 19:19
今天我们来展示一个S7-200的组网通讯的实战过程。今天是2108年-10-5日,星期五。本次实战的目的是利用S7-200的通讯能力实现2个PLC之间的数据通讯。
实战材料:
两台S7-200的PLC,采用的接头是S7的PROFIBUS接头。用软线连接,并采用终端的形式连接。
说明一下,采用的PLC是国产特别的PLC,具有以太网连接的能力。可以通过以太网为PLC进行通讯。
1、PLC编程软件通讯篇
采用PLC, 采用STEP 7-Micro/WIN为PLC进行编程
(1)、PLC软件的版本要注意,新的PLC编程软件是可以启动和停止PLC但好像无法将PLC的程序上在上来。所以要选择特定版本的PLC编程软件。我选择的PLC版本是V4.0 STEP 7-Micro/WIN SP9.
(2)、在西门子网站上下载库文件。Toolbox_V32_-STEP 7-Micro WIN 32 Instruction Library
(3)、解压文件,运行Setup程序。运行结束后出现下面的程序:
  • Modbus Master Port0 (V1.2)
  • Modbus Master Port 1(V1.2)
  • Modbus Slave Port 0(V1.0)
  • USS Protocol Port 0 (V2.3)
  • USS Protocol Port 1(V2.3)
(4)、选择Library Memory存储
选择内存为VB2000的开始地址作为MODBUS的出生地址
(5)、编辑主站程序
Network 1
扫描第一个周期,地位各操作位
LD     First_Scan : SM0.1
R.      MBUS_CTRL_DONE : M0.0,      8
Network 2
初始化Modbus主站通讯
EN:             使能:必须保证每一次扫描周期都被使能(使用SM0.0)
Mode:         模式:常为1,使能Modbus协议功能;为0时恢复系统的PPI协议。
Baud:       波特率:设为9600,与从站波特率对应。
Parity:         教研,校验方式选择,0=无教研
Timeout:     主站等待从站相应时间,以毫秒为单位,典型的设置值为1000毫秒,1秒。
                   注意,这个值要足够大以便从站有足够的相应时间。
Done:         完成位,初始化完成,此位会自动置1.可以用该位启动MBUS_MSG读写操作
Error:          初始化错误代码(只有在Done位为1时有效):0 = 无错误
                                                                                               1 = 校验选择非法
                                                                                                2 = 波特率选择非法
                                                                                                3 = 模式选择非法
LD               Always_On : SM0.0
=.                L60.0
LD.             Always_On : SM0.0
=.                L63.7
LD              L60.0
CALL.        MBUS_CTRL : SEB1,  L63.7, 9600, 0, 1000, MBUS_CTRL_Done: M0.0 MBUS_CTRL_Error:MB1
Network 3
Modbus 主站初始化完成后,启动读写指令
LD             MBUS_CTRL_Done : M0.0
EU
S.               Start_MBUS_MSG : M0.1,   1
Network 4
本例程中,完成如下对从站的访问功能
(1)访问从站地址为3
(2)访问不同的Modbus地址,分别以40001,40020为起始地址
(3)C0=1时,执行读操作
(4)C0=2时,执行写操作,同时,下一周期复位计数器
(5)利用MBUS_MSG指令的Done触发计数器C0,每次操作完成,计数器加1
LD           MBUS_MSG_Done : M0.3
LD.          C0
CTU.       C0,    2
Network   5
当C0 = 1时,设置为读模式0,读取从站的起始地址,40001,十个字。存放在VB1000起始的10个字中
LDW           C0,      1
EU
MOVB        0,      RW_Mode : VB801
AENO
MIVD.         40001, Start_Addr : VB802
AENO
MOVW.       10,    Count : VW806
AENO
MOVD.        &VB1000, Pointer_Addr : VD808
Network.     6
当C0=2时,设置写模式1,将存放在VB1100起始的20个字,写入到从站地址为40020起始的20个字
LDW.          C0, 2
EU
MOVB.       1,     RW_Mode : VB801
AENO
MOVD.      40020,   Start_Addr : VB802
AENO
MOVW.     20,     Count : VW806
AENO
MOVD.     &VB1100,    Pointer_Addr ; VD808
Network.     7
读取从站保持寄存器的数据
EN:              使能:同一时刻只能有一个读写功能(即MBUS_MSG)使能
                       注意:建议每个读写功能(即MBUS_MSG)都用一个MBUS_MSG指令的Done完成位来激活
                                 以便保证所有读写指令循环进行(见程序)
First                读写请求位:每一个新的读写请求必须使用脉冲触发
Slave              从站地址:可选择的范围1-247
RW                 读写操作:0=读,1=写
                       注意:1. 开关量输出和保持寄存器支持读和写功能
                                  2. 开关量输入和模拟量输入只支持读功能
Addr                读写从站的数据地址:选择读写的数据类型:00001 至 0xxxx - 开关量输出
                                                                                                10001 至 1xxxx - 开关量输入
                                                                                                30001 至 3xxxx - 模拟量输入
                                                                                                40001 至 4xxxx - 保持寄存器
Count               通讯的数据个数(位或字的个数)
                         注意:Modbus从站可读/写的最大数量为120个字(是指每一个MBUS_MSG指令)
DataPtr             数据指针:1. 如果是读指令,读回的数据放到这个数据区中
                                           2. 如果是写指令,要写的数据放到这个数据区中
Done                  读写功能完成位
Error                   错误代码:只有在Done位为1时,错误代码才会有效
                                             0 = 无错误
                                             1 = 响应校验错误
                                             2 = 未用
                                             3 = 接收超时
                                             4 = 请求参数错误(slave address,Modbus address, count,RW)
                                             5 = Modbus/自由口没使用
                                             6 = Modbus 正忙于其他请求
                                             7 = 响应错误(响应不是请求的操作)
                                             8 = 响应CRC校验和错误

                                         101 = 从站不支持请求的功能
                                         102 = 从站不支持数据地址
                                         103 = 从站不支持此种数据类型
                                         104 = 从站设备故障
                                         105 = 从站接受了信息,但是响应被延迟
                                         106 = 从站忙,拒绝了该信息
                                         107 = 从站拒绝了信息
                                         108 = 从站存储器奇偶错误

常见的错误及其错误代码:
1. 如果有多个MBUS_MSG指令同时使能会造成6号错误
2。 从站的delay参数设的时间过长会造成3号错误
3. 从站掉电或不运行,网络故障都会造成2号错误
LD.              Always_On : SM0.0
=                 L60.0
LD.             Start_MBUS_MSG : M0.1
O
EU
=                 L63.7
LD              L60.7
CALL          MBUS_MSG : SBR2,   L63.7, 3, RW_Mode : VB801, Start_Addr : VD802, Count : VW806, Pointer_Addr : VD808
                   MBUS_MSG_Done : M0.3, MSG_error : MB2
Network    8
通讯请求执行完成,复位MBUS_MSG指令的触发位;
同时,启动延时定时器,其目的是使MBUS_MSGz指令的触发位复位后,在下一个周期被再一次触发(本例子的演示是10ms)。
LDN          MBUS_MSG_Done : M0.3
R              Start_MBUS_MSG : M0.1, 1
R              Trigger : M0.2.   1

Network.     9
LD.          MBUS_MSG_Done : M0.3
S             Trigger : M0.2, 1
今天的程序就到这里了。
分类:默认分类|回复:2|浏览:519|全站可见|转载
 
 
删除

九重水:你们用的仿西门子的PLC,国内哪一家的?

2018-10-07 09:00 -

caixf25:卓品智控

2018-10-07 21:59

Powered by phpwind v8.7 Certificate Copyright Time now is:03-28 16:29
©2005-2016 QTCN开发网 版权所有 Gzip disabled