自由口通讯编程

已锁定

jacky_j

  • 帖子

    7
  • 精华

    0
  • 被关注

    0

论坛等级:新手

注册时间:2008-03-03

普通 普通 如何晋级?

自由口通讯编程

2846

12

2008-03-12 22:24:43

请高手看看S7200自由口通讯程序,有问题

¬上位PC通过自由口通讯协议,给PLC一个模拟量值控制PLC模拟量输出模块从而控制电动机转速

PLC程序部分
主程序
Network 1

LD SM0.7//第一次扫描调用初始化子程序
EU
O SM0.1
CALL SBR_0

Network 2

AB= VB302, 5 //指令类型为读指令

A M0.0 //BCC码校验正确

CALL SBR1 //调用读子程序

Network 3

AB= VB302, 6 //指令类型为写指令

A M0.0 //且BCC码校验正确

CALL SBR_2 //调用写子程序

Network 4

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

CALL SBR_3

Network 5

LD SM4.5 //当端口空闲时启动RCV

RCV VB300, 0

Network 6

LD SM0.7
ED
CALL SBR_4

TITLE=子程序注释SBR_0

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 35, SMB94

ATCH INT0, 23 //连接口0接收完成的中断

ATCH INT1, 9 //连接口0发送完成的中断

ENI //中断允许

RCV VB300, 0

Network 3

LD SM0.0

MOVD &VB302, VD349 //装入地址指针

MOVB 0, VB379 //BCC码寄存器清零

MOVD &VB356, VD381 //装入地址指针

MOVB 0, VB380 //BCC码寄存器清零

TITLE=子程序注释SBR_1

Network 1 // 网络标题

// 网络注释

LD SM0.0 //停止端口0的接收

R SM87.7, 1

R M0.0, 1

RCV VB300, 0

Network 2

LD SM0.0 //将数据写入发送缓冲区

MOVB 103, VB354

MOVB 1, VB355

HTA *VD335, VB356, 16

MOVB 47, VB374

MOVB 21, VB353

Network 3

LD SM0.0 //计算BCC校验码

FOR VW377, +1, +16

Network 4

LD SM0.0

XORB *VD381, VB380

Network 5

LD SM0.0

INCD VD381

Network 6

NEXT

Network 7

LD SM0.0

HTA VB380, VB372, 2 //BCC校验码写入发送缓冲区

Network 8

LD SM4.5 //发送反馈信息

XMT VB353, 0

TITLE=子程序注释SBR_2

Network 1 // 网络标题

// 网络注释

LD SM0.0 //停止端口0的接收

R SM87.7, 1

R M0.0, 1

RCV VB300, 0

Network 2

LD SM0.0 //装入要写如数据源的地址指针

MOVD &VB315, VD345

Network 3

LD SM0.0 //写入数据

ATH *VD345, *VD335, VB339

Network 4

LD SM0.0 //指令执行的反馈信息写入发送缓冲区

MOVB 21, VB353

MOVB 103, VB354

MOVB 2, VB355

MOVB 47, VB374

Network 5

LD SM4.5 //发送指令执行的反馈信息

XMT VB353, 0

TITLE=子程序注释SBR_3

Network 1 // 网络标题

// 网络注释

LD SM0.0

R M0.1, 1 //复位verify子程序的执行条件

Network 2

LD SM0.0 //计算BCC码

FOR VW375, +1, +29

Network 3

LD SM0.0

XORB *VD349, VB379

Network 4

LD SM0.0

INCD VD349

Network 5

NEXT

Network 6

LDB= VB379, VB340 //当BCC码校验正确时,M0.0置1

AB= VB333, 71

S M0.0, 1

Network 7

LDB= VB333, 71 //BCC码错误时发送反馈信息

AB<> VB379, VB340

MOVB 21, VB353

MOVB 103, VB354

MOVB 3, VB355

MOVB 47, VB374

R SM87.7, 1

RCV VB300, 0

XMT VB353, 0

Network 8

LDB<> VB333, 71 //指令格式错误或RCV超时时发送反馈信息

MOVB 21, VB353

MOVB 103, VB354

MOVB 4, VB355

MOVB 47, VB374

R SM87.7, 1

RCV VB300, 0

XMT VB353, 0

TITLE=子程序注释SBR_4
Network 1 // 网络标题
// 网络注释
LD SM0.0
MOVB 16#08, SMB30//设置断口0为普通PPI通讯口
Network 2 //对转速进行赋值
LD SM0.0
MOVW +0, VW100 //将主机计划转速置0
MOVD +3200, VD110 //将3200放入VD110
MOVD +6400, VD114
MOVD +9600, VD118
MOVD +12800, VD122
MOVD +16000, VD126
MOVD +19200, VD130
MOVD +22400, VD134
MOVD +25600, VD138
MOVD +28800, VD142
MOVD +32000, VD146
Network 3
LD SM0.0
MOVD &VB0, VD10 //得到VB0的地址
MOVD &VB2, VD14 //得到VB2的地址
MOVB VB302, VB5
BTI VB5, VW5 //将字节转化为整数
ITD VW5, VD5 //将整数转化为双整数
+D VD5, VD10 //计算PLC中的实际地址
ATH VB303, *VD10, 2
MOVW *VD10, VW100
Network 4
LD SM0.0
MOVD &VB106, LD10
ITD VW100, VD102
*D +4, VD102
+D VD102, LD10
MOVD *LD10, VD96
DTI VD96, LW14
MOVW LW14, AQW0
TITLE=中断程序注释INT_0

Network 1 // 网络标题

// 网络注释

LD SM0.0

ATH VB303, VB334, 2 //指令译码(ASCII码到十六进制)

ATH VB305, VB335, 8

ATH VB313, VB339, 2

ATH VB331, VB340, 2

S M0.1, 1 //置位Verify子程序的触发条件

MOVB 0, VB379 //BCC码寄存器清零

MOVD &VB302, VD349 //装入地址指针

TITLE=中断程序注释INT_1

Network 1 // 网络标题

// 网络注释

LD SM0.0

R M0.0, 1 //复位BCC校验码正确的标志位

S SM87.7, 1 //允许口0进行接收

MOVB 0, VB379 //BCC校验码寄存器清零

MOVB 0, VB380 //BCC校验码寄存器清零

MOVD &VB302, VD349 //重新装入地址指针

MOVD &VB356, VD381

MOVB 0, VB333 //接收缓冲区中存放指令结束字符的字节清零¬¬¬¬¬¬¬¬¬¬¬¬

自由口通讯编程 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33257条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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