关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 基于Flash的远程工业监控系统设计

基于Flash的远程工业监控系统设计

作者:时间:2012-07-02来源:网络收藏

3.2.1 1PAC服务端程序实现
PAC服务端的实现主要分为通过Socket与上位机的通信和通过串口服务与外围设备的通信两大部分。
通过Socket与上位机的通信主要分为监听和连接。在监听状态下负责监听客户端的请求连接,并负责接受此连接。本系统PAC端监听类为ServerListen,监听类首先通过int bind(int sockfd,struct sockaddr*my_addr,int addrten)绑定了本地的502端口,然后通过函数int listen (int sockfd,intbacklog)将客户端的连接请求放入队列中等待,直到函数intaccept(int sockfd,void*addr,int*addrlen)处理它,然后返回一个全新的套接字文件来描述此单个连接。这样,对于同一个连接就有两个文件描述符,原先的一个文件描述符正在监听你指定的端口,新的文件描述符可以用来调用send()和recv()。在连接状态下负责与客户端进行数据的接收和发送,通过数据传输类Server Custom来实现。在此类中利用int send(SOCKETs,const char FAR*buf,int len,int flags)函数将PAC服务端的数据发送到客户端,如果网络发生故障或待发送数据的长度len小于当前程序要发送数据的缓冲区的长度,则返回SOCKET_ERROR,利用int recv(SOCKETs,char FAR* buf,int len,int flags)从客户端接收数据。函数先等待s的发送缓冲中的数据被协议传送完毕,如果协议在传送s的发送缓冲中的数据时出现网络错误,则函数返回SOCKET_ERROR错误,如果s的发送缓冲中没有数据或者数据被协议成功发送完毕后,函数先检查套接字s的接收缓冲区,如果s的接收缓冲区中没有数据或者协议正在接收数据,那么函数就一直等待,直到协议把数据接收完毕。
对于外围设备进行通信主要是通过串口服务,首先调用自己定义的COM口初始化函数InstallCom将端口初始化,然后通过build_REQ_Read函数实现根据ModBusRtu通讯协议将COM口读取的外围设备的数据放入自定义的数组中,并通过CRC16_modbus进行CRC校验。接收的数据正确,则通过analyse_Read_Result分析从串口读取的数据,并将读取的数据位存放到Share_Mem[MaxShareMemNum]数组中。然后将Share_Mem数组作为REMOTCP_ModServer_Create参数与上位机进行通讯。对外围设备发送指令,则是通过函数SendCommand选择控制对象的COM后,将指令发送到外围设备,外围设备接收到指令后动作。
3.2.2 客户端程序与PAC服务端通讯的实现
客户端的实现主要分为3个部分:通过的Socket与PAC服务端的数据交互,将接收的数据在页面上动态显示和将获取的数据实时存入到数据库,实现实时数据库的历史存储功能。
客户端与PAC服务端的数据交互主要是通过Socket进行的。首先定义Socket,利用connect连接PAC服务器的地址和端口号502,利用mysocket.addEventListener(Event.CONNECT,OnConnect)监听是否已建立连接,利用mysocket.addEventListener (IOErrorEvent.IO_ ERROR,ioErrorHandler)来监听连接过程中出现的错误,利用mysoeket.addEventListener(Event.CLOSE,OnClose)监听连接是否关闭,利用mysocket.addEventListener(ProgressEvent.SOCKET DATA,receivedata) 中的mysoeket.readMultiByte(mysocket.bytesAvailabl e,“utf8”)接收PAC服务端发送过来的数据。添加控制功能则是通过flash页面中的控件的触发事件来完成。在触发事件中添加mysocket. writeUTFBytes(data),并调用mysocket.flush()方法将触发的事件发送出去,从而完成了与服务端的数据交换。
在发送与接收数据的过程中由于遵循的为Modbus/TCP协议,发送和接收的数据要遵循Modbus标准的数据帧格式,因此需要根据Modbus协议的标准格式对所接收和发送的数据帧进行转化。在接收的数据中,要对接收的数据进行分析,根据自己的定义,将地址与监控终端的信息取出,并转换为String类型,在页面上对应显示。
3.2.3 客户端与数据库的交互
对采集来的数据除了在页面上显示,需要存入数据库作为历史备份。客户端与Oracle数据库无法直接交互,可以通过服务器端技术连接数据库,这3种连接方式为:HttpService、WebService和RemoteObject。3种通讯方式比较如表1所示。

本文引用地址:http://www.eepw.com.cn/article/160350.htm

d.JPG


从上表中可以看出,前两种通信数据量较小,要传输大量的数据或是实现不同对象的序列化传输,需要利用高效的传输协议AMF(Aetion Script Message Format)来代替SOAP协议传输的方案。
开源项目FluorineFx就是专门针对.net平台与Flex通信提供的AMF协议通信网关,笔者可以通过FluorineFx方便地完成与.net的通信。



评论


相关推荐

技术专区

关闭