
十字路口交通灯MCGS6.2通用版仿真运行程序带车辆和行人动画效果2 带视频 根据以下要求定做单 要求 (1)东西方向南北方向均设置若干小车大部分小车在展示窗口中根据交通灯自动运行部分典型小车可以通过系统按钮进行启停控制和速度控制等 (2)各个人行横道位置设置若干小人大部分小人在展示窗口中根据交通灯自动运行部分典型小人可以通过系统按钮进行启停控制 (3)对小车车速进行监控超速时报警对小车和小人进行闯红灯监控并报警 (4)设计曲线窗口对小车的车速进行实时曲线展示 (5)设计报警窗口对上述报警信息进行展示及存盘处理等 (6)设计报表窗口对上述闯红灯的人数车辆数目各自标识等进行统计 (7)共设置三种控制策略分别为高峰期常规和夜间模式并在系统中设置控件可以让使用者对其进行选择 (8)设计多用户系统完成对该系统的多用户多权限的控制管理最近接到一个超有意思的项目需求要做一个十字路口交通灯 MCGS6.2 通用版仿真运行程序还得带上车辆和行人动画效果简直就是在虚拟世界里打造一个微缩的交通王国下面就来给大家分享下这个项目的思路和实现过程。一、车辆和行人的基本控制1. 车辆控制首先按照要求东西方向和南北方向都得设置若干小车。一部分小车要能根据交通灯自动运行另一部分典型小车得能通过系统按钮控制启停和速度。十字路口交通灯MCGS6.2通用版仿真运行程序带车辆和行人动画效果2 带视频 根据以下要求定做单 要求 (1)东西方向南北方向均设置若干小车大部分小车在展示窗口中根据交通灯自动运行部分典型小车可以通过系统按钮进行启停控制和速度控制等 (2)各个人行横道位置设置若干小人大部分小人在展示窗口中根据交通灯自动运行部分典型小人可以通过系统按钮进行启停控制 (3)对小车车速进行监控超速时报警对小车和小人进行闯红灯监控并报警 (4)设计曲线窗口对小车的车速进行实时曲线展示 (5)设计报警窗口对上述报警信息进行展示及存盘处理等 (6)设计报表窗口对上述闯红灯的人数车辆数目各自标识等进行统计 (7)共设置三种控制策略分别为高峰期常规和夜间模式并在系统中设置控件可以让使用者对其进行选择 (8)设计多用户系统完成对该系统的多用户多权限的控制管理在 MCGS 里我们可以通过脚本语言来实现车辆的运动逻辑。比如说假设我们定义了一个变量CarSpeed表示车速CarStatus表示车辆状态0 为停止1 为运行。IF CarStatus 1 THEN // 这里简单假设小车是水平或垂直移动坐标变化模拟移动 // 例如东西方向小车X坐标按车速变化 CarX CarX CarSpeed IF CarX 窗口宽度 THEN CarX 0 END_IF END_IF这段代码的意思就是当车辆状态为运行时按照设定的车速改变其坐标位置模拟移动。如果超出了窗口宽度就把它移到窗口起始位置模拟车辆循环行驶。对于通过按钮控制启停和速度我们可以在按钮的事件脚本里写// 启停按钮脚本 IF 启停按钮按下 THEN IF CarStatus 1 THEN CarStatus 0 ELSE CarStatus 1 END_IF END_IF // 速度增加按钮脚本 IF 速度增加按钮按下 THEN CarSpeed CarSpeed 5 END_IF2. 行人控制行人控制和车辆类似。各个人行横道位置设置小人多数自动按交通灯运行部分可按钮控制启停。// 假设 PedestrianStatus 表示行人状态0为停止1为行走 IF PedestrianStatus 1 THEN // 假设行人是垂直或水平行走这里以垂直为例 PedestrianY PedestrianY 3 // 设定一个固定行走速度 IF PedestrianY 窗口高度 THEN PedestrianY 0 END_IF END_IF在按钮控制行人启停时和车辆按钮脚本类似// 行人启停按钮脚本 IF 行人启停按钮按下 THEN IF PedestrianStatus 1 THEN PedestrianStatus 0 ELSE PedestrianStatus 1 END_IF END_IF二、监控与报警功能1. 车速监控与报警要对小车车速进行监控超速时报警。我们先设定一个超速阈值SpeedLimit。IF CarSpeed SpeedLimit THEN // 触发报警变量这里假设 AlarmFlag 为报警标志1表示报警 AlarmFlag 1 END_IF2. 闯红灯监控与报警对于小车和小人闯红灯监控我们可以通过判断交通灯状态和车辆行人状态来实现。假设TrafficLightStatus表示交通灯状态0 为红灯1 为绿灯。// 小车闯红灯判断 IF TrafficLightStatus 0 AND CarStatus 1 THEN // 触发小车闯红灯报警 CarRedLightAlarm 1 END_IF // 行人闯红灯判断 IF TrafficLightStatus 0 AND PedestrianStatus 1 THEN // 触发行人闯红灯报警 PedestrianRedLightAlarm 1 END_IF三、展示窗口设计1. 曲线窗口设计曲线窗口展示小车车速实时变化。在 MCGS 里我们可以使用绘图控件结合数据来实现。先创建一个实时数据变量记录车速然后在曲线绘制脚本里更新曲线数据。// 假设 SpeedCurve 为曲线对象 SpeedCurve.AddDataPoint(CarSpeed)2. 报警窗口报警窗口要展示并处理报警信息存盘。可以创建一个报警信息记录变量AlarmMessage当有报警时更新这个变量并显示在窗口上同时进行存盘操作。IF AlarmFlag 1 THEN AlarmMessage 小车超速报警 // 存盘操作这里假设使用 MCGS 自带存盘函数 SaveAlarmMessage SaveAlarmMessage(AlarmMessage) END_IF3. 报表窗口报表窗口用来统计闯红灯的人数、车辆数目及各自标识。我们可以定义变量CarRedLightCount和PedestrianRedLightCount分别记录闯红灯车辆和行人数量。// 小车闯红灯计数 IF CarRedLightAlarm 1 THEN CarRedLightCount CarRedLightCount 1 END_IF // 行人闯红灯计数 IF PedestrianRedLightAlarm 1 THEN PedestrianRedLightCount PedestrianRedLightCount 1 END_IF在报表窗口里就可以显示这些统计数据了。四、控制策略与多用户系统1. 控制策略共设置高峰期、常规和夜间三种模式。可以创建一个变量ControlMode来表示当前模式通过控件选择改变这个变量的值。// 假设通过下拉框选择模式值为1代表高峰期2代表常规3代表夜间 IF 下拉框选择值 1 THEN ControlMode 1 ELSEIF 下拉框选择值 2 THEN ControlMode 2 ELSE ControlMode 3 END_IF不同模式下可以调整交通灯时间、车速限制等参数。2. 多用户系统多用户多权限控制管理。可以通过 MCGS 自带的用户管理功能结合数据库来实现。先在数据库里创建用户表记录用户名、密码和权限。登录时验证用户信息并赋予相应权限。// 登录验证脚本 IF 用户名 数据库查询用户名 AND 密码 数据库查询密码 THEN // 获取用户权限 UserPermission 数据库查询权限 // 根据权限显示或隐藏某些功能按钮等 IF UserPermission 1 THEN // 管理员权限显示所有功能按钮 所有功能按钮.visible 1 ELSE // 普通用户权限隐藏部分管理按钮 管理按钮.visible 0 END_IF END_IF这个十字路口交通灯仿真项目把各种有趣的功能融合在一起通过代码实现了一个接近真实场景的交通模拟是不是很有成就感呢希望对大家有所启发