用200的PORT0口与70 USS接口2(X172::58\59)通讯,程序如下:
MAIN
LD SM0.1
CALL SBR_0 //首次扫描时初始化自由通讯端口
LD SM0.7 //监测CPU工作方式开关的位置,如果位于RUN位置定义自由口通讯协议
= SM30.0
LD SM0.0
CALL SBR_1
END
SBR_0
MOVB 16#44 , SMB30 //初始化PORT0,19.2KB 每字符8位 偶校验
MOVB 16#0E , VB99 //数据总长度为 14,
STX+LGE+ADR+6PKW+4PZD+BCC=14
MOVB 16#02 , VB100 //写入STX
MOVB 16#0C, VB101 //写入LGE为12,不包括STX和LGE本身占用的2个字节。
MOVB 16#01 , VB102 //写入ADR,从站站址。也就是说,与装有此程序的PLC通讯
6RA70直流调速装置的USS地址应为1
FILL +0 , VW103 , 5 //将用于存放网络数据的区域清空。
CRET
SBR_1
MOVW 16#C12F , VW103 //写入PKE,更改P303的值
MOVW 16#0002 , VW105 //更改的值写入P303的变址2
MOVW 16#0400 , VW107 //将P303.002的值改为4.00
MOVW 16#1000 , VW109 //PZD1发送1000
MOVW 16#2000 , VW111 //PZD2发送2000
LD SM0.0
CALL SBR_2 //调用BCC计算程序
CALL SBR_3 //调用发送程序
CRET
SBR_2
MOVD &VB101 , AC1 //将VB101的地址写入累加器AC1
MOVD 16#0000000E , AC2 //将STX和LGE的异或结果写入累加器AC2
FOR AC3 , +1 , +11 //利用循环对整个报文中除BCC外的每一字节做异或,结果放入
AC2中
XORW *AC1 , AC2
INCD AC1
NEXT
INCD AC1 //将AC1中的地址再加1,指向BCC
MOVB AC2 , *AC1 //将异或结果写入BCC
CRET
SBR_3
XMT VB99 , 0 //发送报文
CRET
6RA70参数设置如下: P790=2 P791=2 P792=127 P793=7 P795.01=1 P795.02=0
P796=1 P797=0
程序执行后只在Word1 r812.01=47E Word2~Word5没有数据 P303.02=10 没有改为4
不知道是程序问题还是传动参数问题,请解决。谢谢!