全国服务热线:

15861139266

分别用C语言和西门子ST语言编写一个经典交通灯程序,苏州工业机器人培训
发布时间:2024-04-19 15:10:15 点击次数:163

下面是一个简单的交通灯程序示例,使用C语言编写。该程序模拟了交通灯的三种状态:红灯、黄灯和绿灯,并且每隔一段时间改变一次状态。请注意,这个程序是控制台程序,不会在图形界面上显示交通灯。

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>


#define RED "\033[31m"

#define YELLOW "\033[33m"

#define GREEN "\033[32m"

#define RESET "\033[0m"


void traffic_light(int seconds) {

while (seconds > 0) {

printf("交通灯状态: ");


// 红灯

printf(RED "红灯" RESET "\n");

sleep(5); // 红灯亮5秒

seconds -= 5;


// 黄灯

printf(YELLOW "黄灯" RESET "\n");

sleep(2); // 黄灯亮2秒

seconds -= 2;


// 绿灯

printf(GREEN "绿灯" RESET "\n");

sleep(7); // 绿灯亮7秒

seconds -= 7;

}

}


int main() {

int total_time = 60; // 总时间,单位:秒

printf("交通灯程序开始运行,总时间:%d秒\n", total_time);

traffic_light(total_time);

printf("交通灯程序结束\n");

return 0;

}



这个程序使用了ANSI转义序列来在控制台输出彩色文本。RED、YELLOW和GREEN宏分别用于设置红色、黄色和绿色文本,而RESET宏用于重置颜色到默认状态。

在traffic_light函数中,程序使用了一个while循环来模拟交通灯的状态变化。每次循环中,程序先输出当前交通灯的状态(红灯、黄灯或绿灯),然后调用sleep函数让程序暂停一段时间(模拟交通灯亮起的时间),最后从总时间中减去这段时间。当总时间耗尽时,traffic_light函数结束。

在main函数中,程序首先定义了总时间(单位:秒),然后调用traffic_light函数开始模拟交通灯的状态变化。最后,程序输出一条消息表示交通灯程序结束。




以下是用PLC结构化文本(ST)来编写交通灯程序,我们通常会定义交通灯的状态转换逻辑。

PROGRAM TrafficLightControl

VAR

RedLightOn : BOOL;

YellowLightOn : BOOL;

GreenLightOn : BOOL;

LightTimer : TIME;

RedLightDuration : TIME := T#10s; // 红灯持续时间

YellowLightDuration : TIME := T#5s; // 黄灯持续时间

GreenLightDuration : TIME := T#30s; // 绿灯持续时间

CurrentLightState : INT := 0; // 当前灯的状态:0-红灯,1-黄灯,2-绿灯

END_VAR


// 初始化

IF CurrentLightState = 0 THEN

RedLightOn := TRUE;

YellowLightOn := FALSE;

GreenLightOn := FALSE;

LightTimer := RedLightDuration;

ELSIF CurrentLightState = 1 THEN

RedLightOn := FALSE;

YellowLightOn := TRUE;

GreenLightOn := FALSE;

LightTimer := YellowLightDuration;

ELSIF CurrentLightState = 2 THEN

RedLightOn := FALSE;

YellowLightOn := FALSE;

GreenLightOn := TRUE;

LightTimer := GreenLightDuration;

END_IF;


// 更新计时器

IF LightTimer > #0s THEN

LightTimer := LightTimer - #1s;

END_IF;


// 检查计时器是否到期,并更新交通灯状态

IF LightTimer <= #0s THEN

CASE CurrentLightState OF

0: // 红灯结束,切换到黄灯

CurrentLightState := 1;

LightTimer := YellowLightDuration;

1: // 黄灯结束,切换到绿灯

CurrentLightState := 2;

LightTimer := GreenLightDuration;

2: // 绿灯结束,切换到红灯

CurrentLightState := 0;

LightTimer := RedLightDuration;

END_CASE;

END_IF;


// 输出交通灯状态

TrafficLightRed.Output := RedLightOn;

TrafficLightYellow.Output := YellowLightOn;

TrafficLightGreen.Output := GreenLightOn;

在这个程序中,我们定义了几个变量来控制交通灯的状态和计时器。CurrentLightState 变量表示当前的交通灯状态(红灯、黄灯或绿灯),LightTimer 变量用于跟踪每个状态的剩余时间而RedLightDuration、YellowLightDuration 和 GreenLightDuration 分别定义了每个状态的持续时间。

程序首先根据 CurrentLightState 的值设置交通灯的颜色,并初始化 LightTimer。然后,它每秒减少 LightTimer 的值,并在 LightTimer 到期时切换到下一个交通灯状态。

最后,程序将交通灯的状态输出到相应的输出点(假设 TrafficLightRed、TrafficLightYellow 和 TrafficLightGreen 是之前定义的输出变量或接口)。


立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607082@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1

技术支持: 易动力网络