s7-200自由口通信

已锁定

愁愁

  • 帖子

    15
  • 精华

    0
  • 被关注

    0

论坛等级:新手

注册时间:2012-04-12

普通 普通 如何晋级?

s7-200自由口通信

1096

1

2012-04-12 17:14:22

本人最近在做西门子s7-200和pc机的自由口通讯,遇到好多问题 求各位大虾指导一下,实在不通啊
首先 有一个问题 串口通讯和自己写协议 这两个肯定不是一个问题 但具体又不懂 我写自己的通讯协议 通过串口线来通讯 这样矛盾吗?是不是 只要我上位机软件和下位机plc写的协议是相同的 通过串口都可以进行通讯?
第二个问题 我编过一个简单的自由口的通讯的程序 是按照编程手册上来的 串口调试助手发送信息 plc收到之后把信息又原封不动的发给上位机 是没有问题的 但是这里只是一个初始化 发送中断 接收中断 没有协议的问题 所以只是会一点皮毛。
我看到过西门子一个很老的例子 是计算机发送一个33个字节长的指令对plc实现一次读写操作的那个例子 程序我看懂了 但是指令要怎么发 按asc码发还是16进制发 按照他的指令格式 要怎么写命令 我传的资料就是这个例子,另外,里面帮我看看 那个read和write子程序里的*VD135是地址指针 这个地址指针指的是谁啊 程序里没有定义啊 是不是错误?
另外 这个程序可不可以和串口助手调试?就是 在串口助手里我发指定格式的命令 让plc有输出返回,可以和串口助手调试吗
比较菜鸟 见谅!下面是例子。
指令格式定义
计算机每次发送一个33字节长的指令来实现一次读/写操作
起始字符 在本例中被定义为ASCII码的"g
指令类型 ----在本例中05H代表读操作,06H代表写操作。
目标PLC站地址 ---占用指令的B2、B3两个字节,以十六进制ASCII码的格式表示目标PLC的站地址。
目标寄存器地址 ---在PLC内部可以用4个字节来表示一个寄存器的地址(但不能表示一个位地址)。前两个字节表示寄存器类型,后两个字节表示寄存器号。
00 00(H): I寄存器区
01 00(H): Q寄存器区
02 00(H): M寄存器区
08 00(H): V寄存器区
例如: IB000的地址可表示为 00 00 00 00(H) VB100的地址可表示为 08 00 00 64(H)
读/写字节数M
----当读命令时,始终读回从目标寄存器开始的连续8个字节的数据,可以根据自己的需要取用,M可以任意写入。
----当写命令时,M表示的是要写入数据的十六进制ASCII码所占用的字节数。例如要写入1个字节的数据,数据在指令中以十六进制ASCII码表示,它将占用2个字节,此时应向M中写入"02"。同理,如果要写入5个字节的数据,M中应写入"0A"。
要写入的数据
----要写入的数据在指令中以十六进制ASCII码的格式表示,占用指令的B14-B29共16个字节。数据区必须填满,但只有前M个字节的数据会被写入目标寄存器。一条指令最多可以写入8个字节的数据(此时M中应写入"10",代表十进制的16)
BCC校验码
----在本例中,bcc为指令B1到B29的异或和,BCC为bcc的十六进制ASCII码。
----bcc=B1 xor B2 xor B3 xor B4 xor …… xor B29
结束字符
----在本例中被定义为ASCII码的"G"。
PLC在接到上位机指令后,将发送一个21字节长反馈信息,格式见表2
说明:
起始字符
在本例中被定义为ASCII码的"g"
状态信息
在本例中 01H 代表 读取正确
02H 代表 写入正确
03H 代表 BCC校验码错误
04H 代表 指令不合法
数据区
----反馈信息的B3到B18为读指令所要读取的数据,以十六进制ASCII码表示。
BCC校验码
----它是反馈信息B3到B18的异或和。
结束字符
----在本例中被定义为26H。
表1 上位机指令格式
Byte0 起始字符
Byte1 指令类型(读/写)
Byte2 目标PLC站地址(十六进制ASCII码)
Byte3
Byte4 目标寄存器地址(十六进制ASCII码)
Byte5
Byte6
Byte7
Byte8
Byte9
Byte10
Byte11
Byte12 读/写字节数M(十六进制ASCII码)
Byte13
Byte14 要写入的数据(十六进制ASCII码)
Byte15
Byte16
Byte17
Byte18
Byte19
Byte20
Byte21
Byte22
Byte23
Byte24
Byte25
Byte26
Byte27
Byte28
Byte29
Byte30 BCC校验码(十六进制ASCII码)
Byte31
Byte32 结束字符
表2 反馈信息格式
Byte0 起始字符
Byte1 状态信息
Byte2 数据区(十六进制ASCII码)
Byte3
Byte4
Byte5
Byte6
Byte7
Byte8
Byte9
Byte10
Byte11
Byte12
Byte13
Byte14
Byte15
Byte16
Byte17
Byte18 BCC校验码(十六进制ASCII码)
Byte19
Byte20 结束字符
PLC寄存器地址分配
程序清单
主程序:
NETWORK 1
LD SM0.1 //第一次扫描调用初始化子程序
CALL initialize

NETWORK 2
LDB= VB134, VB199 //指令中的站地址与本机站地址相符
AB= VB102, 5 //指令类型为读指令
A M0.0 //BCC码校验正确
CALL Read //调用读子程序

NETWORK 3
LDB= VB134, VB199 //指令中的站地址与本机站地址相符
AB= VB102, 6 //指令类型为写指令
A M0.0 //BCC码校验正确
CALL Write //调用写子程序

NETWORK 4
LD M0.1 //指令接收完成后调用BCC码校验子程序
CALL Verify

NETWORK 5
LD SM4.5 //当端口空闲时启动RCV
RCV VB100, 0

Read子程序:
NETWORK 1
LD SM0.0 //停止端口0的接收
R SM87.7, 1
R M0.0, 1
RCV VB100, 0

NETWORK 2
LD SM0.0 //将数据写入发送缓冲区
MOVB 103, VB154
MOVB 1, VB155
HTA *VD135, VB156, 16
MOVB 26, VB174
MOVB 21, VB153

NETWORK 3
LD SM0.0 //计算BCC校验码
FOR VW177, +1, +16

NETWORK 4
LD SM0.0
XORB *VD181, VB180

NETWORK 5
LD SM0.0
INCD VD181

NETWORK 6
NEXT

NETWORK 7
LD SM0.0
HTA VB180, VB172, 2 //BCC校验码写入发送缓冲区

NETWORK 8
LD SM4.5 //发送反馈信息
XMT VB153, 0

Write子程序:
NETWORK 1
LD SM0.0 //停止端口0的接收
R SM87.7, 1
R M0.0, 1
RCV VB100, 0

NETWORK 2
LD SM0.0 //装入要写如数据源的地址指针
MOVD &VB115, VD145

NETWORK 3
LD SM0.0 //写入数据
ATH *VD145, *VD135, VB139

NETWORK 4
LD SM0.0 //指令执行的反馈信息写入发送缓冲区
MOVB 21, VB153
MOVB 103, VB154
MOVB 2, VB155
MOVB 26, VB174

NETWORK 5
LD SM4.5 //发送指令执行的反馈信息
XMT VB153, 0

Verify子程序:
NETWORK 1
LD SM0.0
R M0.1, 1 //复位verify子程序的执行条件

NETWORK 2
LD SM0.0 //计算BCC码
FOR VW175, +1, +29

NETWORK 3
LD SM0.0
XORB *VD149, VB179

NETWORK 4
LD SM0.0
INCD VD149

NETWORK 5
NEXT

NETWORK 6
LDB= VB179, VB140 //当BCC码校验正确时,M0.0置1
AB= VB133, 71
S M0.0, 1

NETWORK 7
LDB= VB133, 71 //BCC码错误时发送反馈信息
AB<> VB179, VB140
MOVB 21, VB153
MOVB 103, VB154
MOVB 3, VB155
MOVB 26, VB174
R SM87.7, 1
RCV VB100, 0
XMT VB153, 0

NETWORK 8
LDB<> VB133, 71 //指令格式错误或RCV超时时发送反馈信息
MOVB 21, VB153
MOVB 103, VB154
MOVB 4, VB155
MOVB 26, VB174
R SM87.7, 1
RCV VB100, 0
XMT VB153, 0

Initialize子程序:
NETWORK 1
LD SM0.0
MOVB 9, SMB30 //0口"9600,N,8,1"

NETWORK 2
LD SM0.0 //RCV指令初始化
MOVB 16#EC, SMB87
MOVB 103, SMB88
MOVB 71, SMB89
MOVB +1000, SMW92
MOVB 35, SMB94
R SM87.2, 1

NETWORK 3
LD SM0.0
ATCH RCVcomplete, 23 //连接口0接收完成的中断

NETWORK 4
LD SM0.0
ATCH XMTcomplete, 9 //连接口0发送完成的中断

NETWORK 5
LD SM0.0
ENI //中断允许

NETWORK 6
LD SM0.0
MOVB 2, VB199 //将本机站地址装入寄存器

NETWORK 7
LD SM0.0
MOVB &VB102, VD149 //装入地址指针
MOVB 0, VB179 //BCC码寄存器清零
MOVB &VB156, VD181 //装入地址指针
MOVB 0, VB180 //BCC码寄存器清零

RCVcomplete中断程序
NETWORK 1
LD SM0.0
ATH VB103, VB134, 2 //指令译码(ASCII码到十六进制)
ATH VB105, VB135, 8
ATH VB113, VB139, 2
ATH VB131, VB140, 2
S M0.1, 1 //置位Verify子程序的触发条件
MOVB 0, VB179 //BCC码寄存器清零
MOVD &VB102, VD149 //装入地址指针

XMTcomplete中断程序
NETWORK 1
LD SM0.0
R M0.0, 1 //复位BCC校验码正确的标志位
S SM87.7, 1 //允许口0进行接收
MOVB 0, VB179 //BCC校验码寄存器清零
MOVB 0, VB180 //BCC校验码寄存器清零
MOVD &VB102, VD149 //重新装入地址指针
MOVD &VB156, VD181
MOVB 0, VB133 //接收缓冲区中存放指令结束字符的字节清零
s7-200自由口通信 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33264条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。