电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 组态王KingView >> 正文

组态王KingView 实测:西门子200PLC和组态王自由口通信

作者:佚名    文章来源:网络    点击数:    更新时间:2024/8/17

这几天测试西门子200PLC和组态王自由口方式进行通信。

因为以前没做过这方面的通信,组态王也只熟悉一点,所以网上找点资料看看。

原以为很简单的通信,感觉就是触摸屏和PLC通信那样,简单配置一下参数:地址、波特率等。

现在看来还真是差不多,只是要看的资料很多,结合起来看,弄清楚两者之间的通信协议。

明白之后就很简单。

整理下测试程序和大家分享下,欢迎指导,学习,分享。


(1)下图是西门子200PLC编程软件STEP7的通信端口设置:和组态王里面设置要一致;

STEP7中设置plc的参数 


(2)下图是PLC编程 STEP7,需要下载亚控的一个初始化程序。

 


   测试程序如下:

 


   测试地址如下:

 


(3)下图是组态王KingView操作:

组态王KingView设备配置向导 


    和PLC中的一致:

组态王KingView设置串口 


   数据词典的操作

 


    定义变量:

 


  测试画面制作:

 



(4)下图是两者通信的截图:

 



 


(5)总结

组态王和200PLC之间协议

选取其中一点,这个没怎么看懂,欢迎大家指导。

上位机发送读指令:

BYTE1: PLC地址 (1~255)

BYTE2: 0x00 (读指令代码)

BYTE3: 寄存器类型(0-V, 1-Q, 2-I)

BYTE4-5: 起始偏移地址(0-9999)

BYTE6: 数据个数(1~32 n)

BYTE7: 数据类型(1,2,4 m)

BYTE8-11: 保留

BYTE12: 校验字节

PLC应答:

读成功时:

BYTE1: PLC地址 (1~255)

BYTE2: 0x00 (读指令代码)

BYTE3: 寄存器类型(0-V, 1-Q, 2-I)

BYTE4-5: 起始偏移地址(0-9999)

BYTE6: 数据个数(1~32 n)

BYTE7: 数据类型(1,2,4 m)

BYTE8-n*m+8: 数据

BYTEn*m+9: 校验字节



MAIN

LD     SM0.1

CALL   SBR_0:SBR0                  //初始化子程序

LD     SM0.7

=      SM30.0

SBR_0:初始化子程序SUBROUTINE COMMENTS Press F1 for help and example program

LD     SM0.0

MOVW   +2, VW8                     //PLC自由口地址,此处每台机器需设不同的地址

LD     SM0.0

MOVB   9, SMB30                    //通讯参数,波特率9600,自由口通讯

MOVD   &VB100, VD40// VB100:接收缓冲区的首字节

MOVW   +10, VW54// VW54:存放发送数据按字节异或校验的次数,10次校验完已//接收了11个字节了,最后一个12号字节是校验。

MOVB   12, VB150

MOVB   VB9, VB151// VB151赋以本机地址

MOVD   &VB151, VD60// 发送首地址VD60赋以地址

MOVB   6, SMB34

ATCH   INT_0:INT0, 10

ATCH   INT_1:INT1, 8

ENI

INT_0://用作初始化几个参数。每次接受新一帧数据前调用,完了就进入INT_2(接受地址,//并判断,)

LD     SM0.0

DTCH   10

MOVD   VD40, VD46//初始化 VD46为VD40

MOVW   +10, VW44//初始化异或校验的次数

MOVW   +10, VW54//初始化异或校验的次数

ATCH   INT_2:INT2, 8               //接受中断起用服务程序INT2

INT_1://延时转向INT0//网络正常时这里应该很少调用

LD     SM0.0

MOVB   5, SMB34

ATCH   INT_0:INT0, 10

INT_2:接受地址,并判断

LDB=   SMB2, VB9                   //地址和本机相符

MOVW   VW8, AC0// AC0这时存入的是本机地址

MOVB   255, SMB34//255MS的长延时监控,如超过将做异常处理回到初始化重新再来接//收,要知道传送一个字节是毫秒级的。就是200字节左右看做异常

ATCH   INT_3:INT3, 8               //起用中断服务INT3,接受包

ATCH   INT_5:INT5, 10              //起用延时监控服务INT5

CRETI

LDB=   SMB2, VB9                   //地址和本机不符

NOT

ATCH   INT_0:INT0, 10              //返回中断入口

ATCH   INT_1:INT1, 8

INT_3://主接受服务程序,同时做异或校验

LD     SM0.0

XORW   SMW1, AC0// AC0上次已存入本机地址,这次做第一次异或,记住异或的次数

MOVB   SMB2, *VD46// 指针VD46这时指向VB100,即将读写代码存入VB100

INCD   VD46//指针VD46指向VB101

DECW   VW44//异或的次数VW44-1=10-1=9

LD     SM1.0                       //完成预定的接受字节数//10次异或完就接收11

//个字节,一桢是12个字节,第12字节是校验位,

ATCH   INT_4:INT4, 8               //起用通讯数据处理主程序//第12字节交INT4比较//处理

INT4://通讯数据处理主服务程序

LD     SM0.0

BMB    VB100, VB152, 6//接受报头拷贝到发送报头// VB100存读写代码,VB151赋以本

//机地址,VB152存读写代码

LD     SM0.0

DTCH   8                           //暂停响应接受中断

INCD   VD46// VD46这时指向VB111,

MOVB   SMB2, *VD46//校验位存入*VD46即VB111

XORW   SMW1, AC0// AC0是前11个字节的异或

ANDW   16#FF, AC0                  //检查异或校验

LDN    SM1.0                       //异或校验错误

MOVB   VB100, AC0// VB100存读写代码

MOVB   16#80, AC1

ORW    AC0, AC1//这步运算,如读AC1=0X80,如写AC1=0X81

MOVB   AC1, VB152// VB152存入发送帧的BYTE2,VB151是BYTE1:本机地址

MOVB   16#1, VB158// VB158:BYTE8: 0x01(校验错代码)

MOVW   +10, VW54//10次异或的次数

JMP    3                           //校验错误,向PC返回错误码

LD     SM1.0                       //异或正确//两数相同异或结果=0,很好理解

MOVW   +4, VW34

ATCH   INT_8:INT8, 8               //起用服务程序INT8响应接受中断,接受包尾

LD     SM0.0                       //数据处理

Tags:组态王,自由口通信,200PLC  
责任编辑:admin
  • 上一篇文章:
  • 下一篇文章: 没有了
  • 请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
    1分 2分 3分 4分 5分

    还可以输入 200 个字
    [ 查看全部 ] 网友评论
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
    返回顶部
    刷新页面
    下到页底
    晶体管查询