这是个人计算机和PLC之间接收和发送信息的PLC编程的例子。此例由主程序OB1、中断程序INT0、INT1、INT2组成。其中,OB1的主要作用是初始化,INT0的作用是接收,INT1的作用是发送,INT2是发送结束的再接收。控制程序如图5-6所示。下面详细介绍其功能。
图5-6 接收指令编程程序
1.OB1程序块
OB1程序块的启动条件是SM0.1=1,这个条件在程序运行时只能在第一个扫描周期出现一次。把9送到SMB30是对通信口0初始化。选定自由口通信、波特率为9600 b/s、数据格式为8位数据位,且无校验位。
十六进制数16#B0送到SMB87是对接收操作初始化。SMB87的第7位是接收操作允许位,第6位是结束条件位,第5位是检查空闲时间允许位。可以看出,把16#B0送到SMB87是设定允许接收操作,要求有结束码、检查等待时间。SMB89为结束码单元,将十六进制数A送到SMB89,表明设定的结束码为0 A(回车)。
SMW90是通信空闲时间设定,将5送到SMW90表明设置空闲时间为5 ms。5 ms过后,接收到的第一个字符为新信息的开始。
SMB94为最大字符数设定,将100送到SMB94,表明设定最大字符数为100个字符。
事件号23是端口0接收字符完成发生的中断事件。中断连接指令把事件23连接到INT0,这表明当端口0接收字符完成时发生中断,中断程序为INT0。
事件号9是端口0发送字符完成发生的中断事件。中断连接指令把事件9连接到INT2,这表明当端口0发送字符完成时发生中断,中断程序为INT2。(www.xing528.com)
ENI指令是全局允许中断指令,只有使用了这条指令之后,上述两个中断事件发生时,CPU才能响应中断去执行中断服务程序。
RCV指令控制端口0首次接收字符,并把接收缓冲区指向VBl00。
2.INT0程序块
当接收事件完成时,引发INT0中断,运行INT0程序块。INT0程序块的启动条件是SMB86的值等于十六进制数20。SMB86是接收信息状态字,它的第5位等于1,表明接收到结束符。这说明当收到结束符时应做如下工作:一是将10送到SMB34中,即设定定时中断0的定时时间为10 ms;二是通过中断连接指令ATCH将事件10和中断1连接,这条指令的功能是建立10 ms定时中断,并将中断服务程序放到INT1程序块中;三是收到结束符后的中断返回;四是当SMB86不等于十六进制数20(没有收到结束符)时,继续启动接收。
3.INT1程序块
当允许中断后,每隔10 ms就要执行一次INT1中断,运行INT1程序块。INT1程序块的启动是定时中断0引起的。SM0.0是常ON继电器,这表明进入INT1程序块要做两件事。第一是利用DTCH指令关闭定时中断0。第二是利用XMT指令向端口0发送信息。从指令中可以看到,发送数据表是从VBl00开始的,此表恰好是接收数据的数据表。可以看出,这条指令是把刚从个人计算机接收到的数据又返回给个人计算机。
4.INT2程序块
当接收事件完成时,执行INT2中断,运行INT2程序块。INT2程序块的作用是启动另一次接收。
由上分析可以知道,每当接收完一次信息就要启动一次定时中断。执行定时中断后,会返回一次信息。当返回信息结束时,又会启动一次接收。整个程序就是这样循环的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。