基于VxWorks的MB系列智能可编程控制器设计
时间:01-16
来源:
点击:
3.3 中断处理程序
中断处理程序是实时系统的重要组成部分。系统通过中断机制了解外部世界,并对外部事件作出响应。实时系统的反应取决于系统对于中断的响应速度和中断处理程序的处理速度。由于在很短的时间内,可能产生很多中断,高优先级的中断将阻塞低优先级的中断,因此,必须使中断处理程序的处理时间最短。
MBPLC的中断包括秒中断、分同步中断、CAN网中断以及BSP级的以太网中断、硬盘中断等等。下面以秒中断(中断级别为5)为例说明中断的使用方法:
ntConnect(INUM_TO_IVEC(INT_VEC_GET(5)), SECISR, 0);
sysIntEnablePIC(5);
这两个函数用于将中断处理程序SECISR()与秒中断相关联,存放于中断向量表的对应表项中,当秒中断事件出现时,VxWorks内核将调用中断处理程序。这时可利用中断处理程序释放一个信号量(通过semGive()函数),通过该信号量驱动相应的数据处理模块(通过sem- Take()函数),从而实现实时操作。
此外,我们还使用intLock()函数和intUnlock()函数来设置中断屏蔽,用以保证受保护的代码在执行过程中不受中断的干扰。
3.4 网络通信
网络通信一般可通过套接口(socket)实现。Vx- Works提供了标准的BSD socket调用,具有两种类型:Stream socket(全双工流类型)、Datagram socket(数据报类型)。前者支持TCP协议,后者支持UDP协议。任何一个任务都可以打开一或多个socket,其它任务的socket可与之连接。
客户端程序首先调用socket()函数产生用于与各分系统连接的套接字,然后初始化一个套接口结构体,为其赋上服务端的IP地址和端口号,并将其作为函数connect()的参数,调用connect()函数主动去连接服务器端。连接成功后,用send()和recv()函数读写数据,直到全部数据都交换完,再用close()函数关闭套接口。
服务器端也先用socket()函数建立套接口,再调用bind()函数将自身IP和端口号绑定,以保证客户端正确识别,然后用listen()函数指明已准备好接受来自客户端的连接,又用accpet()函数接受一个连接请求,接受后用send()和recv()函数来传输数据,直到全部数据都交换完,再用close()函数关闭套接口。为了确保服务器能够实时接收客户端的数据,当服务端与客户端建立连接之后,必须嵌入循环,利用recv()函数不断等待客户数据。同时客户端每次发送数据之后也应等待服务端回复,建立握手机制。
3.5 串行口通信
在VxWorks中,将I/O系统设计成为任何类型的设备,提供一个简单、统一、独立于设备的接口,任何对于串行口的操作仍然可以视为对一个文件的操作,而不必了解关于设备或程序驱动实现的细节。在使用串口之前利用open()打开相应串口,再用ioctl()设置波特率、数据位、停止位、奇偶校验等属性,然后依据串口打开时的读写标志,调用函数write()、read()对串口进行只读操作、只写操作或同时进行读写操作,最后用close()关闭串口。
对于串口通信,仍然要关心数据接收的实时性。可采用中断方式,利用VxWorks提供的select()函数的事件触发机制,将读串口的任务阻塞使其一直等待数据,当有数据来到的时候该任务会立刻自动响应,提高系统的实时性。
4 结束语
嵌入式实时操作系统VxWorks及其开发环境的引入,大大简化了可编程控制器软件设计的复杂性,缩短了开发周期,提高了产品的实时性和可靠性。因此,VxWorks RTOS在MB系列智能可编程控制器中的应用是成功的。MB系列智能可编程控制器作为新一代的PLC产品,相信能在电力、化工、工业过程控制、城市及楼宇自动化等各种复杂控制领域发挥更大的优势,使这些行业的自动化水平得到更大的提高。 (编辑:chiying)
中断处理程序是实时系统的重要组成部分。系统通过中断机制了解外部世界,并对外部事件作出响应。实时系统的反应取决于系统对于中断的响应速度和中断处理程序的处理速度。由于在很短的时间内,可能产生很多中断,高优先级的中断将阻塞低优先级的中断,因此,必须使中断处理程序的处理时间最短。
MBPLC的中断包括秒中断、分同步中断、CAN网中断以及BSP级的以太网中断、硬盘中断等等。下面以秒中断(中断级别为5)为例说明中断的使用方法:
ntConnect(INUM_TO_IVEC(INT_VEC_GET(5)), SECISR, 0);
sysIntEnablePIC(5);
这两个函数用于将中断处理程序SECISR()与秒中断相关联,存放于中断向量表的对应表项中,当秒中断事件出现时,VxWorks内核将调用中断处理程序。这时可利用中断处理程序释放一个信号量(通过semGive()函数),通过该信号量驱动相应的数据处理模块(通过sem- Take()函数),从而实现实时操作。
此外,我们还使用intLock()函数和intUnlock()函数来设置中断屏蔽,用以保证受保护的代码在执行过程中不受中断的干扰。
3.4 网络通信
网络通信一般可通过套接口(socket)实现。Vx- Works提供了标准的BSD socket调用,具有两种类型:Stream socket(全双工流类型)、Datagram socket(数据报类型)。前者支持TCP协议,后者支持UDP协议。任何一个任务都可以打开一或多个socket,其它任务的socket可与之连接。
客户端程序首先调用socket()函数产生用于与各分系统连接的套接字,然后初始化一个套接口结构体,为其赋上服务端的IP地址和端口号,并将其作为函数connect()的参数,调用connect()函数主动去连接服务器端。连接成功后,用send()和recv()函数读写数据,直到全部数据都交换完,再用close()函数关闭套接口。
服务器端也先用socket()函数建立套接口,再调用bind()函数将自身IP和端口号绑定,以保证客户端正确识别,然后用listen()函数指明已准备好接受来自客户端的连接,又用accpet()函数接受一个连接请求,接受后用send()和recv()函数来传输数据,直到全部数据都交换完,再用close()函数关闭套接口。为了确保服务器能够实时接收客户端的数据,当服务端与客户端建立连接之后,必须嵌入循环,利用recv()函数不断等待客户数据。同时客户端每次发送数据之后也应等待服务端回复,建立握手机制。
3.5 串行口通信
在VxWorks中,将I/O系统设计成为任何类型的设备,提供一个简单、统一、独立于设备的接口,任何对于串行口的操作仍然可以视为对一个文件的操作,而不必了解关于设备或程序驱动实现的细节。在使用串口之前利用open()打开相应串口,再用ioctl()设置波特率、数据位、停止位、奇偶校验等属性,然后依据串口打开时的读写标志,调用函数write()、read()对串口进行只读操作、只写操作或同时进行读写操作,最后用close()关闭串口。
对于串口通信,仍然要关心数据接收的实时性。可采用中断方式,利用VxWorks提供的select()函数的事件触发机制,将读串口的任务阻塞使其一直等待数据,当有数据来到的时候该任务会立刻自动响应,提高系统的实时性。
4 结束语
嵌入式实时操作系统VxWorks及其开发环境的引入,大大简化了可编程控制器软件设计的复杂性,缩短了开发周期,提高了产品的实时性和可靠性。因此,VxWorks RTOS在MB系列智能可编程控制器中的应用是成功的。MB系列智能可编程控制器作为新一代的PLC产品,相信能在电力、化工、工业过程控制、城市及楼宇自动化等各种复杂控制领域发挥更大的优势,使这些行业的自动化水平得到更大的提高。 (编辑:chiying)
- 蓝牙无线耳机设计及VxWorks移植方法(07-21)
- 军事指挥系统中VxWorks下汉字显示技术(07-16)
- 基于VxWorks的文件系统的研究与实现(09-18)
- 嵌入式语音通信系统中VxWorks BSP的设计实现(09-18)
- 嵌入式系统的VxWorks安全性问题研究(11-06)
- VxWorks下的多重定时器设计(02-16)