记录平时用到的东西

Java与Linux实用技巧

(1)

让Java程序在linux后台运行

linux查看CPU和内存使用情况

linux多进程并发执行

linux复制文件

linux查看多核负载

linux查看文件内容的命令

linux下ftp命令

(2)

jdbc连接teradata数据库(两种方式,一种利用本地odbc源,一种为通过jar包调用的方式)

jdbc批量插入(PreparedStatement类)

preparedstatement类用法

(3)

jdbc插入teradata数据库响应限制的解决办法(出错提示为:respond limit exceed)

(4)

java读写文件(两个类:BufferedReader和BufferedWriter)

可能会出现不报任何错,但是内容就是写不进文件里面,此时可以试一下BufferedWriter的flush()函数,可能缓冲区满了,刷新一下就好。

java追加写入文件

(5)

linux socket详解

(6)

putty windows上传下载到linux



<think> 根据用户需求,需要实现两个独立部分: 1. 主路口红绿灯循环:东西和南北方向交替,每个方向绿灯20秒、黄灯2秒、红灯22秒(注意:红灯时间=对方绿灯+黄灯=20+2=22秒,符合) 2. 人行道路口:平时红灯,当按钮按下时,绿灯亮10秒后变回红灯(无论按钮按多少次,在绿灯期间再按不会延长绿灯时间) 3. 主路口与人行道路口无联锁,即人行道的按钮动作不影响主路口的正常循环。 由于没有指定具体PLC型号,我们以常见的西门子S7-200系列为例,采用梯形图编程。IO分配自行定义,这里假设: 主路口: 东西方向:绿灯Q0.0,黄灯Q0.1,红灯Q0.2 南北方向:绿灯Q0.3,黄灯Q0.4,红灯Q0.5 人行道(假设只有一个方向,例如东西向人行道): 按钮:I0.0(按下有效) 绿灯:Q1.0,红灯:Q1.1 注意:人行道红灯在绿灯不亮时亮,所以我们可以用一个输出控制绿灯,而红灯可以用绿灯的非来控制(或者分别控制,但要求红灯和绿灯不能同时亮,这里采用互锁逻辑)。 编程思路: 1. 主路口循环使用一个循环定时器(例如T101)来控制一个周期(44秒:因为一个方向绿灯20+黄灯2+红灯22=44秒,另一个方向也是同样的时间,但相位错开)。 实际上,我们可以将周期分成两个半周期:44秒。 阶段1:东西绿灯(20秒)->东西黄灯(2秒)->东西红灯(22秒,同时南北绿灯20秒+黄灯2秒) 阶段2:南北绿灯(20秒)->南北黄灯(2秒)->南北红灯(22秒,同时东西绿灯20秒+黄灯2秒) 但注意,两个方向是交替的,且红灯时间正好是对方的绿灯加黄灯时间。我们可以用一个定时器循环计时,然后用时间点来切换状态。 2. 我们使用一个定时器T101(设定值440,因为S7-200定时器单位是0.1秒,所以440对应44秒)循环计时,当T101计时到设定值时复位自己并重新开始。 3. 时间点划分: T101从0开始: 0-200(0-20秒):东西绿灯亮,南北红灯亮(同时,东西方向在绿灯状态,南北方向在红灯状态) 200-220(20-22秒):东西黄灯亮,南北红灯亮 220-440(22-44秒):东西红灯亮,同时南北方向: 220-420(22-42秒):南北绿灯亮(注意:从22秒开始亮,到42秒结束,共20秒) 420-440(42-44秒):南北黄灯亮 但是这样,在220秒时,我们需要切换南北方向为绿灯,同时东西方向转为红灯。所以我们可以用T101的当前值来控制。 4. 另一种思路:将周期拆分为两个部分,用两个定时器接力,但这里用一个定时器循环更简单。 5. 人行道部分:使用一个自锁电路,当按钮按下(I0.0)且当前人行道绿灯没有亮时,触发一个10秒的定时器(T201),在定时器计时期间绿灯亮(Q1.0),同时红灯灭(Q1.1)。注意:在绿灯期间再按按钮,不会重新计时(即一次触发只给10秒绿灯)。 6. 为了避免在绿灯期间重复触发,我们用一个中间继电器(M0.0)来记录一次触发,当绿灯时间到,复位M0.0,才能接受下一次触发。 具体程序: 主路口: 网络1:循环定时器 T101 T101 --|/|-----------(TON)---- | T101 | PT: 440 (44秒) | T101(当计时到440时,复位定时器) --| |-----------(R)------ 网络2:东西绿灯 当T101当前值小于200(即20秒内)时,东西绿灯亮 T101 ---|<|------------( )----- Q0.0 200 网络3:东西黄灯 当T101当前值在200到220之间(即20-22秒) T101 T101 ---|>=|-------|<=|--------( )----- Q0.1 200 220 网络4:东西红灯 当T101当前值大于等于220(22秒开始到44秒)时,东西红灯亮 T101 ---|>=|-------------------( )----- Q0.2 220 网络5:南北绿灯 当T101当前值在220到420之间(即22-42秒)时,南北绿灯亮 T101 T101 ---|>=|-------|<=|--------( )----- Q0.3 220 420 网络6:南北黄灯 当T101当前值在420到440之间(即42-44秒)时,南北黄灯亮 T101 T101 ---|>=|-------|<=|--------( )----- Q0.4 420 440 网络7:南北红灯 当T101当前值小于220(0-22秒)时,南北红灯亮 T101 ---|<|-------------------( )----- Q0.5 220 注意:红灯也可以用绿灯和黄灯的非来表示,但为了清晰,我们直接按时间点控制。 人行道: 网络8:按钮触发一次绿灯 I0.0 M0.0 M0.0 ---| |------+----|/|---------(S)---- (置位M0.0,表示已经触发) | | +---+ T201 | ---| |-----+ (当定时器T201在计时时,不接受再次触发) 网络9:启动定时器 M0.0 ---| |-----------------------(TON)---- T201 | PT: 100 (10秒) T201 ---| |-----------------------(R)------ (当定时器计时到,复位M0.0,同时定时器自己会停下,但这里用M0.0的下降沿复位定时器?) 注意:我们希望在绿灯时间到了之后复位M0.0,所以: 网络9:启动定时器 M0.0 ---| |-----------------------(TON)---- T201 | PT: 100 (10秒) | T201 ---| |-----------------------(R)------ M0.0 (当定时器时间到,复位M0.0,同时定时器自己会停止,因为M0.0断开了定时器的使能) 但是,这样T201会在M0.0为1时开始计时,计时到100(10秒)后,T201触点闭合,复位M0.0,然后T201的使能断开,T201会自动复位(S7-200的TON定时器在使能断开时复位当前值)。所以不需要额外复位T201。 网络10:人行道绿灯 M0.0(在定时器计时期间,M0.0一直为1,直到10秒结束) ---| |-----------------------( )----- Q1.0 (绿灯) 网络11:人行道红灯 Q1.0 ---|/|-----------------------( )----- Q1.1 (红灯,当绿灯不亮时红灯亮) 注意:这里我们使用Q1.0的非来控制红灯,保证绿灯和红灯互斥。 但是,上述程序在绿灯期间,如果再次按下按钮,由于M0.0已经为1,所以不会再触发。只有等10秒结束,M0.0复位,才能再次触发。 另外,主路口和人行道路口没有联锁,所以各自独立运行。 注意:以上程序没有考虑初始化,实际运行时,需要确保主路口一开始就运行(即T101一开始就要开始计时),可以在第一个扫描周期用一个SM0.1来触发一个启动信号。 由于S7-200上电后定时器需要触发条件,我们可以在网络1中增加一个上电初始化脉冲(SM0.1)来启动第一个周期: 网络1: SM0.1 T101 ---| |--------+--|/|------------(TON)---- | T101 | PT: 440 T101 | ---| |--------+ 这样,上电第一个周期,当T101还没有计时时,SM0.1触发一次定时器,然后T101开始计时,当计时到440时,T101的常开触点闭合,复位定时器(同时断开TON的使能,定时器复位),然后T101的常开断开,复位条件解除,同时定时器重新开始(因为SM0.1只在上电第一个周期有效,所以之后就靠T101的常闭触点来重新启动定时器)。 但是这样,在T101计时到440时,复位定时器,然后定时器会立即重新开始(因为T101的常闭触点在复位后立即闭合),形成循环。 因此,完整的网络1: SM0.1 T101 ---| |--------+--|/|------------(TON)---- | T101 | PT: 440 T101 | ---| |--------+ T101 ---| |---------------------------(R)---- (复位定时器) 注意:这里有一个问题,当T101计时到440时,T101的常开触点闭合,执行复位指令,将T101复位(当前值清零,状态位置0),然后由于T101被复位,其常开触点断开,复位指令停止执行,同时定时器的使能条件(T101的常闭触点)又满足,于是定时器重新开始计时。这样就形成了循环。 但是,在复位定时器时,定时器的当前值被清零,所以T101的常开触点会断开,复位指令只执行一个扫描周期。所以是可行的。 另外,由于定时器复位后,需要下一个扫描周期才能重新开始计时,所以会有短暂的时间定时器不工作。但实际中,44秒周期中一个扫描周期可以忽略。 程序编写: 我们按照上述逻辑编写梯形图,由于这里无法绘制梯形图,我们用语句表描述逻辑,实际在PLC编程软件中绘制。 注意:以上IO分配是示例,用户可以根据实际接线修改。 由于用户要求自行定义IO,所以这里只是示例。 最后,提供一个类似参考的文献,但注意我们的需求与文献略有不同(人行道独立,且主路口时间也不同): [^1] 是一个交通灯实验,但时间不同,也没有人行道部分。 [^2] 提到东西绿灯20秒,闪烁5秒灭,黄灯5秒,红灯30秒,与我们的需求不同。 因此,我们按照需求编写程序。 下面用梯形图的网络描述: 网络1:主循环定时器 || SM0.1 || T101 || T101 (TON) ||---| |----|-------|/|----------|---------(EN ENO) || || || TON PT: 440 || ||-------------------|----( ) T101 || || || || T101 || || ||---| |----| || || T101 || || ||---| |------------------------|--------(R) 网络2:东西绿灯 Q0.0 || T101 < 200 (即比较指令:T101<200) ||-----( ) Q0.0 网络3:东西黄灯 Q0.1 || T101 >= 200 || T101 <= 220 ||-----( ) Q0.1 网络4:东西红灯 Q0.2 || T101 >= 220 ||-----------------------( ) Q0.2 网络5:南北绿灯 Q0.3 || T101 >= 220 || T101 <= 420 ||-----( ) Q0.3 网络6:南北黄灯 Q0.4 || T101 >= 420 || T101 <= 440 ||-----( ) Q0.4 网络7:南北红灯 Q0.5 || T101 < 220 ||-----------------------( ) Q0.5 网络8:人行道按钮触发(置位M0.0) || I0.0 || M0.0 || T201 ||-----(S) M0.0 ||---| |--------|----|/|----------|----|/|----------| 网络9:启动人行道定时器 || M0.0 || T201 (TON) ||---| |--------|---------(EN ENO) || || TON PT: 100 || T201 || ||---| |--------|------------------(R) M0.0 网络10:人行道绿灯 Q1.0 || M0.0 || ||---| |--------|------------------( ) Q1.0 网络11:人行道红灯 Q1.1 || Q1.0 || ||---|/|--------|------------------( ) Q1.1 注意:在S7-200中,比较指令需要单独的网络,或者用串联的方式。上述网络2-7中,我们使用了比较指令,在梯形图中,比较指令以触点的形式出现。 例如,网络2: LDW<= T101, 200 = Q0.0 但这样写是不对的,因为T101当前值小于200才接通,所以应该使用小于比较。在梯形图中,我们可以添加比较指令框。 具体在软件中,从指令树中拖拽比较指令(如“<=I”或“<I”等)到梯形图中。由于T101是16位整数(定时器当前值),我们使用整数比较。 网络2:东西绿灯 ----[ < ]----- ( ) Q0.0 T101 200 网络3:东西黄灯 ----[ >= ]-----+----[ <= ]----- ( ) Q0.1 T101 | T101 200 | 220 | (串联) 其他类似。 以上程序实现了所需功能。 </think>根据您的需求,PLC交通灯系统需实现以下功能: 1. **主路口循环**:东西/南北方向交替,绿灯20秒→黄灯2秒→红灯22秒(周期44秒) 2. **人行道控制**:平时红灯,按钮触发后绿灯亮10秒后自动恢复红灯 3. **无联锁关系**:人行道按钮不影响主路口时序 4. **IO分配自定义**(以下为建议分配): ### 一、IO分配表 | 设备 | 地址 | 说明 | |--------------------|------|-----------------------| | **主路口东西向** | | | | 绿灯 | Q0.0 | | | 黄灯 | Q0.1 | | | 红灯 | Q0.2 | | | **主路口南北向** | | | | 绿灯 | Q0.3 | | | 黄灯 | Q0.4 | | | 红灯 | Q0.5 | | | **人行道** | | | | 按钮 | I0.0 | 行人请求信号 | | 绿灯 | Q1.0 | | | 红灯 | Q1.1 | | | **系统启停** | I0.1 | 总开关(1=启动) | ### 二、PLC程序实现(梯形图逻辑) #### 1. 主路口控制 ```plaintext 网络1:循环计时器 | I0.1 T101 T101 (TON) |--| |----|/|----------(EN)-- | | PT: 440 (44秒周期) | T101 | |--| |----(R) // 周期结束复位 网络2:东西绿灯(20秒) | T101 < 200 Q0.0 |--| [<] |------------( )-- 网络3:东西黄灯(20-22秒) | T101 ≥ 200 Q0.1 | T101 ≤ 220 | |--| [≥] |----| [≤] |--( )-- 网络4:东西红灯(22-44秒) | T101 ≥ 220 Q0.2 |--| [≥] |------------( )-- 网络5:南北绿灯(22-42秒) | T101 ≥ 220 Q0.3 | T101 ≤ 420 | |--| [≥] |----| [≤] |--( )-- 网络6:南北黄灯(42-44秒) | T101 ≥ 420 Q0.4 | T101 ≤ 440 | |--| [≥] |----| [≤] |--( )-- 网络7:南北红灯(0-22秒) | T101 < 220 Q0.5 |--| [<] |------------( )-- ``` #### 2. 人行道控制 ```plaintext 网络8:按钮触发锁存 | I0.0 M0.0 M0.0 (S) |--| |----|/|----------( )-- // 首次按下置位 网络9:10秒定时 | M0.0 T201 T201 (TON) |--| |----| |----------(EN)-- | | PT: 100 (10秒) | T201 | |--| |----(R M0.0) // 时间到复位锁存 网络10:人行道绿灯 | M0.0 Q1.0 |--| |----------------( )-- 网络11:人行道红灯 | Q1.0 Q1.1 |--|/|----------------( )-- // 绿灯灭时红灯亮 ``` ### 三、时序说明 1. **主路口**(44秒周期): - `0-20秒`:东西绿灯(Q0.0) + 南北红灯(Q0.5) - `20-22秒`:东西黄灯(Q0.1) + 南北红灯(Q0.5) - `22-42秒`:东西红灯(Q0.2) + 南北绿灯(Q0.3) - `42-44秒`:东西红灯(Q0.2) + 南北黄灯(Q0.4) 2. **人行道**: - 默认状态:红灯(Q1.1)常亮 - 按钮(I0.0)按下:绿灯(Q1.0)亮10秒(期间重复按无效) - 10秒结束:自动恢复红灯 ### 四、实物接线要点 1. 所有LED正极接PLC输出端,共负极接COM 2. 按钮接I0.0与24V电源 3. 总开关接I0.1 4. 电源:24V+ → V+,0V → COM > 此方案满足需求:①主路口严格按44秒周期循环 ②人行道独立控制 ③按钮触发后10秒自动复位 ④无信号冲突(黄灯与绿灯物理互斥)[^1][^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值