高速公路收费系统的设计与实践内容摘要:

制中心的计费信息,进行相应收费操作后,核准通行。 同时,该系统还将为每位收费人员开设专用账号,用于对工作人员收费状况的管理与存档,并将存档资料定期的上传给控制中心入库 存档,便于结算。 ③收费控制中心。 接收收费站点发送过来的信息,并对信息做出实时的响应,进行相应的信息验证、计费、扣款和发送确认信息或收费信息等操作。 系统接收到信息后,先对其进行验证,在确认无误后,由 GIS 空间数据分析系统迅速做出响应,计算相关的费用,并在该用户账户中进行相应的扣款操作,同时发送确认信息给相应收费站,核准通行。 此外,系统还自动生成消费记录条目,加入到消费记录数据库中,供结算和查询之用。 对非电子账户用户,系统将反馈计费信息,并将相应记录存入数据库,供结算之用。 结算子系统 可实现对系统数 据库的直接操作,并提供和专业银行的联系,实现对用户账户和路网运营商的账户管理和结算业务。 ①路网运营商。 对系统数据库实现定期的统计、汇总,根据特定的分账原则进行分账,然后通过跟银行间的联系,实现资金的分流和账目的结算业务。 通过资金的统一管理与分流,有效地解决了不同运营商间的拆借账问题,大大提高了运营管理的电子化程度,简化了手续,提高了效率。 ②用户。 实现对用户账户余额的有效管理,通过与专业银行的实时通讯,保证充值金额的实时到位于数据库的实时更新,保证用户的通行。 ③收费站。 采用账户式管理,为不同工作人员开设 专用账号,实现对收费站现金流的有效管理,采用责任到人的方式,确保现金流的准确性和安全性。 大连交通大学软件实践 5 客户查询子系统 这是一个面向客户和路网运营商的服务系统。 通过系统提供的强大的查询功能,客户可实现对自己具体的通行和消费信息的自由查询,而路网运营商也可利用系统提供的专用查询系统实现对各自路网及运营状况的监控管理。 查询系统采用账户式的管理方式,系统为客户和路网运营商分别开设专用的账户,同时对用户账户采取良好的加密措施,保证用户的信息安全。 用户只需通过系统的专用 Web 服务器登陆各自的账户,即可实现对相关信息的查询。 电子账户管理子系统 负责电子账户的设立、变更和注销操作,并办理电子标签的发放与安装业务。 充值子系统 通过分布在各专业银行的收费网点,受理客户的对预付款账户的充值业务,并将充值信息通过结算子系统,实时地反馈给数据库,更新用户账户余额,同时将资金划入系统账户。 第五章 系统测试 本系统是在按照面对对象,基于组件、数据库开发的,拥有全面的错误捕捉和异常处理机制,因此具有更好的稳定性和可扩展性。 收费计算机和通信机 在收费计算机和通信机之间,我们采用了 TCP/IP 协议, TCP 建立连接时采用客户 /服务器模式,主动发起连接的进程叫做客户,被动等待连接建立的进程叫做服务器。 在本系统中,收费计算机做为发起连接方,成为客户,通信机为服务器。 动态组件 TCP 是面向连接的,因而可提供可靠的、按序传送数据的服务,它提供双向的的连接,即全双工。 在收费站,由于环境恶劣,可能会网络故障导致 TCP 连接中断,或由于通信机维护中断连接。 为了故障消除后能自动恢复 TCP 连接,大连交通大学软件实践 6 减少监控人员维护量,采用了动态组件技术,自动检测连接的状态,并给监控人员一定提示。 if( ClientActive == false) //定义为 TClientSocket * Client { HW_SENDTIME++。 if(HW_SENDTIME%20 == 0) //每隔一段时间尝试重新连接 { HW_SENDTIME = 0。 ClientClose()。 delete Client。 Client = NULL。 Client = new TClientSocket(this)。 //新建组件 ClientClientType = ctNonBlocking。 ClientAddress = sIpaddr。 //通信机 IP 地址 ClientPort = atoi(sPort)。 //通信机端口号 ClientOnDisconnect = ClientDisconnect。 //映射 Disconnect 事件 ClientOnRead = ClientRead。 //映射 Read 事件 ClientOnError = ClientError。 // 映射错误处理事件 try{ ClientOpen()。 } catch(...){ ClientClose()。 } } } else{ ………。 } //网络连通,上传数据 通过动态 TClientSocket组件的建立,网络连通和中断切换过程对操作人员是隐含的。 不会影响车道收费系统的正常运行,网络正常后自动恢复上传数据功能,保证了车道的最大工作效率。 TCP 报文的构成 应用层的报文传送到运输层,加上 TCP 的首部,构成了 TCP 的数据传送单位,称为报文段。 在发送时, TCP 的报文段作为 IP 数据报的数据,加上首部后,成为 IP 数据报。 在接收时, IP 数据报将其首部去除后交给运输层,得到TCP 报文段。 再去掉其首部,得到应用层所需的报文。 一个 TCP报文问为首部和数据两部分, TCP报文段首部的前 20个字节是固定的,后面有 4N 字节是可有可无的选项,因此 TCP 首部的最小长度是 20 字节,加上 IP 数据报的首部后至少有 40 个字节。 如果 TCP 的数据段只有一个字节,大连交通大学软件实践 7 那么网络的利用率就不会超过 1/41。 反之,如果 TCP 报文段非常长,那么在 IP层传输时就可能要分解成多个短数据报片,在目的站还要将收到的各个数据报短片装配成原来的 TCP 报文段,加上出错时还要重传,加大了系统开销。 一般认为,数据段应尽可能大些,只要在 IP 层不再分片就行。 TCP 缺省的数据段长度是 536 字节,因此我们在发送 TCP 报文时,要控制数据长度在这个范围之内,同时包含尽可能多的信息。 比如我们在收费流水数据包中包含车道设备状态字节,这样我们就可以在监控室了解设备运行状态。 在本系统中,存在着多种数据包, 如收费人员登录、收费流水、收费标准、通信机转移等。 为此我们定义了多种数据类型。 我们定义的 TCP 报文的数据段由两部分构成,报头( TPACKETHEAD)和数据( PacketData)。 报头是格式是固定的,用 PacketType 来区分不同的包类型。 其定义如下: //Packet = PACKETHEAD+ PacketData typedef struct { char tag[2]。 //version 0x453b int PacketLen。 //包长 char PacketType。 //包类型 int trytimes。 //重传次数 char sIpaddr[20]。 //通信机地址 char sRet[2]。 //标志, OK 通信机写入数据库成功、 ER 写入失败 }TPACKETHEAD。 这里以收费流水数据为例,说明 PacketData 结构。 typedef struct //流水帐数据结构 { char LSH[13]。 //流水帐号 char CXDM[3]。 //车型代码 int je。 //金额 char FJDW[11]。 //车辆吨位 char SKRQ[20]。 //收款日期 char SKSJ[20]。 //收款时间 char GH[11]。 //工号。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。