二次开发,一般来讲就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核。一般来讲,不管软件是否开源,都会设置接口以供用户和开发人员进行使用,以在原有软件的基本功能上进行调用和改进。
既然进行二次开发。那么一般是需要第三方编程软件与二次开发的软件进行连接以实现命令和数据的交互。回到题目报错问题上,当用编程软件信息传递,传递的信息对于二次开发软件是错误的或者无法理解的情况下,就会出现上述报错问题。
举个例子,当我用python对sumo进行二次开发时使用traci.trafficlight.setRedYellowGreenState(交叉口编号,控制相位)命令设置交叉口当前的信号相位时。如果传入的状态跟交叉口的中路网通行状态不一致时,如对下图中交叉口输入信号控制相位为‘GGrrrryyGG’(‘G’表示当前信号为绿灯,‘y’表示为黄灯,‘r’表示为红灯),此时就会报错。这是因为输入车流行驶方向的状态为10个,而交叉口实际设置车流行驶方向需求只有8个(若一条车道允许车流向不同方向,则算多个状态。如西进口第一条车道车流允许直行和右转,因此算两个方向)
同样,使用traci.vehicle.setRoute(veh, route)进行车辆线路规划时,如果车变量不存在或者指定边名称在路网中不存在时,也会出现类似问题。
总而言之,当用编程软件和二次开发软件实现上述报错问题时,是因为编程软件向二次开发软件所传输的指令、数据无法理解或者是跟自己在软件中预先的设置相矛盾。报错时重点检查这一部分的命令或者数据即可。