最近看到很多网友问一些关于自由口通讯的问题,以前发过一个S7-200做从站的例子,这次发个做主站的例子,下面是我在实际工程中截取的一段程序。
主程序
Network1
//发送标志位的置位由工艺条件决定
LD M2.4
TON T33, 100 //延时发送
Network2
LD T33
CALL SBR_2:SBR2 //调用发送程序
Network3
//这两个网络是异常处理,当中断程序不能正常接收后,程序从这里继续循环下去
LD M2.6 //延时后开始处理接收到的数据
TON T36, 300
Network4
LD T36
S M2.0, 1 //调用上位处理程序
R M2.6, 1 //复位异常处理标志
Network5
LD M2.0
CALL SBR_3:SBR3
初始化(SBR_0)
Network1
//9600,o,7,1
LD SM0.0
MOVB 16#E9, SMB130
Network2
//指针指向接收缓冲区
LD SM0.0
MOVD &VB100, VD181
Network3
//装载发送命令
LD SM0.0
MOVB 6, VB800
MOVD 16#57303143, VD801 //W01C0开机命令
MOVW 16#300D, VW805
Network4
LD SM0.0
ATCH INT_1:INT1, 25 //当口1接收到字符时引起中断
ENI
发送(SBR_2)
LD SM0.0
XMT VB800, 1
S M2.6, 1 //置位异常处理标志
R M2.4, 1 //复位发送标志
接收(SBR_3)
Network1
LDB= VB100, 16#50 //起始字符正确
AB= VB108, 16#0D //结束字符正确
S M2.1, 1
Network2
LD M2.1 //将缓冲区中的数据转存
MOVD VD100, VD608
MOVD VD104, VD612
//中间的数据类型转换部分略
Network3
LD SM0.0
R M2.1, 1
R M2.0, 1
中断
Network1
LDB= SMB2, 16#50
MOVD &VB100, VD181 //装载地址指针
Network2
//字符放入接收缓冲区
LD SM0.0
MOVB SMB2, *VD181
INCD VD181
INCW VW150
Network3
LDB= SMB2, 16#0D //当接收的字符是回车时
MOVD &VB100, VD181 //重新装载地址指针
R M2.6, 1 //如果能正确接收,则跳出异常处理
R T36, 1
S M2.0, 1 //置处理程序标志位
MOVW 0, VW150
Network4
LDW>= VW150, 30 //接收最大字符数
MOVD &VB100, VD181 //重新装载地址指针