比亞迪斥資110億元 擴充電池產能/推新車

據比亞迪官方獲悉,比亞迪將投入人民幣110億元對旗下兩家子公司進行增資。本次增資將用於對比亞迪汽車工業有限公司和鐵動力離子電池擴產項目,未來電池產能有望得到擴充,並將加速新能源車型的研發進度。  
  隨著資金的引入,比亞迪在新車研發速度也將加快。根據規劃,比亞迪首款以中國古朝代命名的新能源MPV—商雙模版將於今年下半年發佈並上市。此外,宋雙模版、純電動版以及一款名為M5的全新車型也將於今年下半年上市。   除上述建設專案外,基於青海豐富的鋰資源,比亞迪將于青海投資建立新電池工廠。而與青海的合作也意味著比亞迪切入產業鏈上游,有利於其在新能源汽車領域的佈局和規劃,實現資源分享。   文章來源:網通社

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

賓士將推出四款電動車與特斯拉競爭

今年7月,有梅賽德斯•賓士內部員工透露,該公司將於九月份發佈一款概念版的電動車與特斯拉競爭。而今天看來,梅賽德斯•賓士的計畫遠不止這些。  
  根據外媒最新消息,梅賽德斯•賓士不會僅僅局限於一兩款產品,賓士計畫推出四款電動汽車產品,希望能夠與特斯拉、寶馬等對手進行正面競爭,同時這四款電動汽車將會採用全新的命名方式。   根據梅賽德斯•賓士執行董事長Dieter Zetsche表示,第一款電動汽車將會在今年10月的巴黎車展上亮相,同時另外還有三款其它類型的產品,一共包括了兩款電動轎車和兩款電動SUV,並且預計在2020年之前陸續上市。而在今年的巴黎車展上我們將看到一款SUV產品,並且續航里程將會達到讓人印象深刻的500公里。而這輛賓士的電動SUV除了擁有強悍的續航里程之外,還將與特斯拉的Model X直接競爭。   文章來源:雷鋒網

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

Kotlin Coroutines不複雜, 我來幫你理一理

Coroutines 協程

最近在總結Kotlin的一些東西, 發現協程這塊確實不容易說清楚. 之前的那篇就寫得不好, 所以決定重寫.
反覆研究了官網文檔和各種教程博客, 本篇內容是最基礎也最主要的內容, 力求小白也能看懂並理解.

Coroutines概念

Coroutines(協程), 計算機程序組件, 通過允許任務掛起和恢復執行, 來支持非搶佔式的多任務. (見).

協程主要是為了異步, 非阻塞的代碼. 這個概念並不是Kotlin特有的, Go, Python等多個語言中都有支持.

Kotlin Coroutines

Kotlin中用協程來做異步和非阻塞任務, 主要優點是代碼可讀性好, 不用回調函數. (用協程寫的異步代碼乍一看很像同步代碼.)

Kotlin對協程的支持是在語言級別的, 在標準庫中只提供了最低程度的APIs, 然後把很多功能都代理到庫中.

Kotlin中只加了suspend作為關鍵字.
asyncawait不是Kotlin的關鍵字, 也不是標準庫的一部分.

比起futures和promises, kotlin中suspending function的概念為異步操作提供了一種更安全和不易出錯的抽象.

kotlinx.coroutines是協程的庫, 為了使用它的核心功能, 項目需要增加kotlinx-coroutines-core的依賴.

Coroutines Basics: 協程到底是什麼?

先上一段官方的demo:

import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch


fun main() {
    GlobalScope.launch { // launch a new coroutine in background and continue
        delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
        println("World!") // print after delay
    }
    println("Hello,") // main thread continues while coroutine is delayed
    Thread.sleep(2000L) // block main thread for 2 seconds to keep JVM alive
}

這段代碼的輸出:
先打印Hello, 延遲1s之後, 打印World.

對這段代碼的解釋:

launch開始了一個計算, 這個計算是可掛起的(suspendable), 它在計算過程中, 釋放了底層的線程, 當協程執行完成, 就會恢復(resume).

這種可掛起的計算就叫做一個協程(coroutine). 所以我們可以簡單地說launch開始了一個新的協程.

注意, 主線程需要等待協程結束, 如果註釋掉最後一行的Thread.sleep(2000L), 則只打印Hello, 沒有World.

協程和線程的關係

coroutine(協程)可以理解為輕量級的線程. 多個協程可以并行運行, 互相等待, 互相通信. 協程和線程的最大區別就是協程非常輕量(cheap), 我們可以創建成千上萬個協程而不必考慮性能.

協程是運行在線程上可以被掛起的運算. 可以被掛起, 意味着運算可以被暫停, 從線程移除, 存儲在內存里. 此時, 線程就可以自由做其他事情. 當計算準備好繼續進行時, 它會返回線程(但不一定要是同一個線程).

默認情況下, 協程運行在一個共享的線程池裡, 線程還是存在的, 只是一個線程可以運行多個協程, 所以線程沒必要太多.

調試

在上面的代碼中加上線程的名字:

fun main() {
    GlobalScope.launch {
        // launch a new coroutine in background and continue
        delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
        println("World! + ${Thread.currentThread().name}") // print after delay
    }
    println("Hello, + ${Thread.currentThread().name}") // main thread continues while coroutine is delayed
    Thread.sleep(2000L) // block main thread for 2 seconds to keep JVM alive
}

可以在IDE的Edit Configurations中設置VM options: -Dkotlinx.coroutines.debug, 運行程序, 會在log中打印出代碼運行的協程信息:

Hello, + main
World! + DefaultDispatcher-worker-1 @coroutine#1

suspend function

上面例子中的delay方法是一個suspend function.
delay()Thread.sleep()的區別是: delay()方法可以在不阻塞線程的情況下延遲協程. (It doesn’t block a thread, but only suspends the coroutine itself). 而Thread.sleep()則阻塞了當前線程.

所以, suspend的意思就是協程作用域被掛起了, 但是當前線程中協程作用域之外的代碼不被阻塞.

如果把GlobalScope.launch替換為thread, delay方法下面會出現紅線報錯:

Suspend functions are only allowed to be called from a coroutine or another suspend function

suspend方法只能在協程或者另一個suspend方法中被調用.

在協程等待的過程中, 線程會返回線程池, 當協程等待結束, 協程會在線程池中一個空閑的線程上恢復. (The thread is returned to the pool while the coroutine is waiting, and when the waiting is done, the coroutine resumes on a free thread in the pool.)

啟動協程

啟動一個新的協程, 常用的主要有以下幾種方式:

  • launch
  • async
  • runBlocking

它們被稱為coroutine builders. 不同的庫可以定義其他更多的構建方式.

runBlocking: 連接blocking和non-blocking的世界

runBlocking用來連接阻塞和非阻塞的世界.

runBlocking可以建立一個阻塞當前線程的協程. 所以它主要被用來在main函數中或者測試中使用, 作為連接函數.

比如前面的例子可以改寫成:

fun main() = runBlocking<Unit> {
    // start main coroutine
    GlobalScope.launch {
        // launch a new coroutine in background and continue
        delay(1000L)
        println("World! + ${Thread.currentThread().name}")
    }
    println("Hello, + ${Thread.currentThread().name}") // main coroutine continues here immediately
    delay(2000L) // delaying for 2 seconds to keep JVM alive
}

最後不再使用Thread.sleep(), 使用delay()就可以了.
程序輸出:

Hello, + main @coroutine#1
World! + DefaultDispatcher-worker-1 @coroutine#2

launch: 返回Job

上面的例子delay了一段時間來等待一個協程結束, 不是一個好的方法.

launch返回Job, 代表一個協程, 我們可以用Jobjoin()方法來顯式地等待這個協程結束:

fun main() = runBlocking {
    val job = GlobalScope.launch {
        // launch a new coroutine and keep a reference to its Job
        delay(1000L)
        println("World! + ${Thread.currentThread().name}")
    }
    println("Hello, + ${Thread.currentThread().name}")
    job.join() // wait until child coroutine completes
}

輸出結果和上面是一樣的.

Job還有一個重要的用途是cancel(), 用於取消不再需要的協程任務.

async: 從協程返回值

async開啟線程, 返回Deferred<T>, Deferred<T>Job的子類, 有一個await()函數, 可以返回協程的結果.

await()也是suspend函數, 只能在協程之內調用.

fun main() = runBlocking {
    // @coroutine#1
    println(Thread.currentThread().name)
    val deferred: Deferred<Int> = async {
        // @coroutine#2
        loadData()
    }
    println("waiting..." + Thread.currentThread().name)
    println(deferred.await()) // suspend @coroutine#1
}

suspend fun loadData(): Int {
    println("loading..." + Thread.currentThread().name)
    delay(1000L) // suspend @coroutine#2
    println("loaded!" + Thread.currentThread().name)
    return 42
}

運行結果:

main @coroutine#1
waiting...main @coroutine#1
loading...main @coroutine#2
loaded!main @coroutine#2
42

Context, Dispatcher和Scope

看一下launch方法的聲明:

public fun CoroutineScope.launch(
    context: CoroutineContext = EmptyCoroutineContext,
    start: CoroutineStart = CoroutineStart.DEFAULT,
    block: suspend CoroutineScope.() -> Unit
): Job {
...
}

其中有幾個相關概念我們要了解一下.

協程總是在一個context下運行, 類型是接口CoroutineContext. 協程的context是一個索引集合, 其中包含各種元素, 重要元素就有Job和dispatcher. Job代表了這個協程, 那麼dispatcher是做什麼的呢?

構建協程的coroutine builder: launch, async, 都是CoroutineScope類型的擴展方法. 查看CoroutineScope接口, 其中含有CoroutineContext的引用. scope是什麼? 有什麼作用呢?

下面我們就來回答這些問題.

Dispatchers和線程

Context中的CoroutineDispatcher可以指定協程運行在什麼線程上. 可以是一個指定的線程, 線程池, 或者不限.

看一個例子:

fun main() = runBlocking<Unit> {
    launch {
        // context of the parent, main runBlocking coroutine
        println("main runBlocking      : I'm working in thread ${Thread.currentThread().name}")
    }
    launch(Dispatchers.Unconfined) {
        // not confined -- will work with main thread
        println("Unconfined            : I'm working in thread ${Thread.currentThread().name}")
    }
    launch(Dispatchers.Default) {
        // will get dispatched to DefaultDispatcher
        println("Default               : I'm working in thread ${Thread.currentThread().name}")
    }
    launch(newSingleThreadContext("MyOwnThread")) {
        // will get its own new thread
        println("newSingleThreadContext: I'm working in thread ${Thread.currentThread().name}")
    }
}

運行后打印出:

Unconfined            : I'm working in thread main
Default               : I'm working in thread DefaultDispatcher-worker-1
newSingleThreadContext: I'm working in thread MyOwnThread
main runBlocking      : I'm working in thread main

API提供了幾種選項:

  • Dispatchers.Default代表使用JVM上的共享線程池, 其大小由CPU核數決定, 不過即便是單核也有兩個線程. 通常用來做CPU密集型工作, 比如排序或複雜計算等.
  • Dispatchers.Main指定主線程, 用來做UI更新相關的事情. (需要添加依賴, 比如kotlinx-coroutines-android.) 如果我們在主線程上啟動一個新的協程時, 主線程忙碌, 這個協程也會被掛起, 僅當線程有空時會被恢復執行.
  • Dispatchers.IO: 採用on-demand創建的線程池, 用於網絡或者是讀寫文件的工作.
  • Dispatchers.Unconfined: 不指定特定線程, 這是一個特殊的dispatcher.

如果不明確指定dispatcher, 協程將會繼承它被啟動的那個scope的context(其中包含了dispatcher).

在實踐中, 更推薦使用外部scope的dispatcher, 由調用方決定上下文. 這樣也方便測試.

newSingleThreadContext創建了一個線程來跑協程, 一個專註的線程算是一種昂貴的資源, 在實際的應用中需要被釋放或者存儲復用.

切換線程還可以用withContext, 可以在指定的協程context下運行代碼, 掛起直到它結束, 返回結果.
另一種方式是新啟一個協程, 然後用join明確地掛起等待.

在Android這種UI應用中, 比較常見的做法是, 頂部協程用CoroutineDispatchers.Main, 當需要在別的線程上做一些事情的時候, 再明確指定一個不同的dispatcher.

Scope是什麼?

launch, asyncrunBlocking開啟新協程的時候, 它們自動創建相應的scope. 所有的這些方法都有一個帶receiver的lambda參數, 默認的receiver類型是CoroutineScope.

IDE會提示this: CoroutineScope:

launch { /* this: CoroutineScope */
}

當我們在runBlocking, launch, 或async的大括號裏面再創建一個新的協程的時候, 自動就在這個scope里創建:

fun main() = runBlocking {
    /* this: CoroutineScope */
    launch { /* ... */ }
    // the same as:
    this.launch { /* ... */ }
}

因為launch是一個擴展方法, 所以上面例子中默認的receiver是this.
這個例子中launch所啟動的協程被稱作外部協程(runBlocking啟動的協程)的child. 這種”parent-child”的關係通過scope傳遞: child在parent的scope中啟動.

協程的父子關係:

  • 當一個協程在另一個協程的scope中被啟動時, 自動繼承其context, 並且新協程的Job會作為父協程Job的child.

所以, 關於scope目前有兩個關鍵知識點:

  • 我們開啟一個協程的時候, 總是在一個CoroutineScope里.
  • Scope用來管理不同協程之間的父子關係和結構.

協程的父子關係有以下兩個特性:

  • 父協程被取消時, 所有的子協程都被取消.
  • 父協程永遠會等待所有的子協程結束.

值得注意的是, 也可以不啟動協程就創建一個新的scope. 創建scope可以用工廠方法: MainScope()CoroutineScope().

coroutineScope()方法也可以創建scope. 當我們需要以結構化的方式在suspend函數內部啟動新的協程, 我們創建的新的scope, 自動成為suspend函數被調用的外部scope的child.

上面的父子關係, 可以進一步抽象到, 沒有parent協程, 由scope來管理其中所有的子協程.

Scope在實際應用中解決什麼問題呢? 如果我們的應用中, 有一個對象是有自己的生命周期的, 但是這個對象又不是協程, 比如Android應用中的Activity, 其中啟動了一些協程來做異步操作, 更新數據等, 當Activity被銷毀的時候需要取消所有的協程, 來避免內存泄漏. 我們就可以利用CoroutineScope來做這件事: 創建一個CoroutineScope對象和activity的生命周期綁定, 或者讓activity實現CoroutineScope接口.

所以, scope的主要作用就是記錄所有的協程, 並且可以取消它們.

A CoroutineScope keeps track of all your coroutines, and it can cancel all of the coroutines started in it.

Structured Concurrency

這種利用scope將協程結構化組織起來的機制, 被稱為”structured concurrency”.
好處是:

  • scope自動負責子協程, 子協程的生命和scope綁定.
  • scope可以自動取消所有的子協程.
  • scope自動等待所有的子協程結束. 如果scope和一個parent協程綁定, 父協程會等待這個scope中所有的子協程完成.

通過這種結構化的併發模式: 我們可以在創建top級別的協程時, 指定主要的context一次, 所有嵌套的協程會自動繼承這個context, 只在有需要的時候進行修改即可.

GlobalScope: daemon

GlobalScope啟動的協程都是獨立的, 它們的生命只受到application的限制. 即GlobalScope啟動的協程沒有parent, 和它被啟動時所在的外部的scope沒有關係.

launch(Dispatchers.Default) { ... }GlobalScope.launch { ... }用的dispatcher是一樣的.

GlobalScope啟動的協程並不會保持進程活躍. 它們就像daemon threads(守護線程)一樣, 如果JVM發現沒有其他一般的線程, 就會關閉.

參考

第三方博客:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

福斯電動原型車,將於巴黎亮相!

因排氣檢測造假而陷入醜聞風暴的德國大眾福斯集團,決定將以環保的電動車來洗刷負面形象。福斯提前了電動車生產時程,預計在2025年推出30款電動車;而第一款車款的原型車將於下個月在巴黎車展亮相。

福斯目前僅有一款電動車款──e-Golf。在爆出排氣造假事件後,福斯被強制投資20億美金,用於研發電動汽車;福斯也藉此機會加速電動車研發腳步,不僅喊出所有電動車續航力300公里以上的目標,也將研發一款MEB平台,並用MEB平台為基礎來發展電動車產品線。

福斯執行長Hebert Diess對於即將呈現在世人眼前的原型車款指出,新款電動車的大小與GOLF差不多,但將採用新的電動車底盤平台,因此空間表現將相當於Passat,續航力也可上看400公里。他也透露,這款原型車其實已相當接近可量產的版本。

此外,福斯打算在所有電動車款上都安裝60kWh以上的電池,相當於續航力290~450公里。福斯也看好電動車需求帶動的電池需求成長,因此會考慮尋找地點設置自己的電池工廠。先前福斯曾透露,中國是設置電池廠的考量地點之一。

(照片:VW e-Golf 。來源:Volkswagen )

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

特斯拉發表 P100D,百公里加速 2.5 秒

電動車廠特斯拉(Tesla)週二發佈新版 Model S 轎車和 Model X 多功能跑車,型號都為P100D,較P90D更為高端。這兩款新車型將配備更加強大的電池組,可令Model S車型成為世界上加速最快的批量生產汽車。  
  Model S P100D和Model X P100D在啟動加速方面和電池續航方面都有了突破性提升。其中Model S P100D配備一個100kWh的電池組,在 Ludicrous (超級加速)模式下從靜止加速至時速60英里僅需2.5秒,相比之下P90D在Ludicrous模式下所需的加速時間為2.8秒。   特斯拉宣稱Model S P100D在啟動加速方面媲美全球頂級超跑,是全球量產型號中加速最快的一個。此外,Model S P100D EPA有效行駛里程為315英里。另一輛Model X P100D車型的車重更大,從靜止加速至時速60英里僅需2.9秒,單次充電續航里程將達289英里,略低於Model S P100D。售價方面,新Model S起始售價將為13.45萬美元,Model X的起始售價將為13.55萬美元。   文章來源: IT之家

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

Gogoro 苗栗門市開幕,全縣市設置服務據點達陣

隨著年底苗栗頭份自強和新竹東勝兩家門市開幕,電動機車大廠 Gogoro 宣告在全國所有縣市都設有服務據點。對做為機車業後起之秀的 Gogoro 而言,也算是達成了一項里程碑。

Gogoro 在 2019 年成功插旗澎湖、苗栗、基隆、東勢、沙鹿、鹿港、草屯、東港、羅東、台東等地,讓每個縣市都至少有一個服務據點。Gogoro 到目前為止設立了 125 個服務據點,雖然還比不上其他機車大廠綿密的服務網絡,但至少不會讓服務據點成為致命傷。2020 年將持續加速拓展服務範圍,預計再設置超過 60 個服務據點,相當於平均每週就設立 1.2 間。拓點計畫將著重於加速設立服務中心,以舒緩各地的車主的維修保養服務需求。

Gogoro 資深行銷總監陳彥揚表示:「隨著不斷增加的 Gogoro 車主數,Gogoro 也加緊腳步規劃通路策略的佈局,於明年大幅拓展服務中心以提供廣大車主完善維修保養服務。另一方面,也積極推動智慧雙輪推廣站,讓傳統車行也有機會加入電動機車推廣行列,更協助 Gogoro 創造與消費者的多元接觸點,提升品牌與產品溝通的廣度。」

除了持續拓展加盟店以外,Gogoro 在 5 月也成立了智慧雙輪推廣站,讓機車行能以更低的門檻有機會銷售電動機車。Gogoro 將提供機車行基礎輔銷物及教育訓練,機車行也無須負擔產品庫存壓力。目前已有近千家機車行表達加入意願,預計將在 2020 年 1 月舉辦對外說明會。

Gogoro 也配合工業局機車行轉型課程,提供專業講師以及課程,讓傳統車行技師學習電動機車維修技術,並在機車行提供簡易維修服務或開立電動機車門市。目前已完成 20 堂課程及協助超過 600 位學員完成訓練,2020 年將持續協助政府開設第二階段轉型課程。

(合作媒體:。首圖來源:Gogoro)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

電動車位會否成為買房新標準配備?建商:不容易

最近在電動車主社群流傳著一句話,「想買電動車,先去當主委」,反映出其實目前住宅大樓要安裝充電設備的難題,也有不少車主分享甘苦談與教戰攻略,幫助其他車友。看準了電動車議題,有些建商已開始提前規劃電動車位,期望以此吸引高消費力客群進住。

想像一下,你終於如願以償住進全新落成的華廈大樓,有漂亮的花園、24 小時警衛與管理、平面式停車位與一應俱全的公共設施,但當你想替電動車充電時,只能排隊去搶地下 1 樓、全社區只有兩支的充電槍。即使想在自己車位安裝充電槍,不僅要說服管委會同意,依據大樓結構,甚至可能要召開全體區權會才能過關。

隨著車廠陸續宣布停止推出新款燃油車,未來 10 年,會有越來越多車主購入電動車,這些人都有在家充電的需求,然而卻很少有建案能解決這個問題,大部分新建案都是依照法規需求,配置最低數量要求的充電車位,甚至是與訪客車位混用。

台北的豪宅指標「帝寶」就曾為了住戶要在地下停車場裝設充電樁,被管委會以「擔心起火」為由拒絕,歷經一番爭論最終才同意放行。正因如此,許多電動車主才會說,要買電動車,先去當主委,有了主委帶頭推動,才比較好說服管委會同意放行施工。

為了爭取安裝充電樁,電動車友分享的招式也是五花八門,甚至出現「暗黑兵法」,向管委會提出「禁止停車場裝設充電設備」,利用這個反向操作讓管委會「不反對」安裝充電樁,而成功闖關。

身為看熱鬧的人,聽了覺得有趣,但電動車主可能笑著笑著就哭了。歷經千辛萬苦爭取後,安裝充電樁的費用說貴不貴,但也不便宜,以一般大樓的電表集中設置在地下 1 樓來算,安裝費用與車位到電表距離成正比,如果車位也在 B1,費用可能在 2 萬元左右,如果車位在 B3,那費用可能就接近 3 萬元。不精準的估算約是每公尺 1,000 元,實際費用要看現場環境決定,安裝費用超過 5 萬元的也不是沒有。

預留管線將成為未來建案標配?

目前有幾家建商已看準這個需求,提出新的解決方案,包括希華、璞園和遠雄等建商,都針對電動車位特別規劃,當作一個科技賣點。

《建築法》修改之前,新建案電動車位的比例要求很低,大部分都只有兩個,而這幾家建商提出優於法規的設計,以遠雄今年即將完工的高雄新灣區建案為例,就規劃了 70 個電動車位,與台電合作,幫這些車位預留充電設備的線路與孔洞,同時也準備了足額的電流負載,屋主只要購買電動車時,讓車廠到現場安裝充電設備即可。

「我們的客戶中,已有 4 台保時捷 Taycan,還有好幾台特斯拉,這些客戶未來就完全不用煩惱充電問題。」遠雄房地產管理處總監呂穎表示,由於這建案是飯店與住宅結合,目前還計劃與車廠合作,在 1 樓或附近建設新的直流充電站,提供住戶與旅客雙重便利。

然而,電動車位對建商來說其實是雙面刃,可吸引高消費力客群入住,但相關電力配套其實不容易達成,「通常重劃區的電力規劃會比較有餘裕,老社區即使蓋新大樓也未必負荷得了,即使如此,假如我們全棟都做成電動車位也一樣受不了,因為尖峰時期的用電量幾乎等於一座大巨蛋。」呂穎笑說,真要這樣的話,隔壁可能要蓋一座變電所,到時候反而沒人要買屋了。

以特斯拉充電樁為例,Model 3 充電時需要的電流量是 32 安培,如果一個社區 500 個車位都在充電,瞬間負載就高達 16,000 安培,相當於整個社區住宅的最大用電量,因此若沒有完整配套,是不可能實現的。

從現實角度來說,短期內一般建案還是會以法規最低要求為標準,以減少成本,只有在高價位豪宅等級建案才有可能看到電動車位成為標配。想在大樓停車場充電的車主,如果沒有入主豪宅的打算,還是先認命與管委會溝通吧!

(合作媒體:。首圖來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

電動車發展 未來10年對銅需求將成長9倍

《MINING.com》6月12日報導,國際銅業協會(International Copper Association)最新報告表示,電動汽車的產業增長,可望令未來十年該產業的銅需求量大幅增長,預估將從2017年的18.5萬噸九倍增長至2027年的174萬噸,主要因為電動汽車較傳統汽車使用更多銅的影響。報告指出,除了價格昂貴的貴金屬之外,銅的導電性居所有金屬之冠,將會在電動汽車產業中扮演重要角色,並且銅也是100%可以回收的材料。

報告指出,傳統汽車生產每輛約會使用到23公斤的銅,但油電混合電動車(HEV)的銅用量就會接近倍增至40公斤,插電式油電混合電動車(PHEV)的銅用量更將達到60公斤,因其電池較傳統的油電混合電動車更大。至於完全由電池驅動的純電動車(BEV),每輛將會用到83公斤的銅。體積更大的油電混合電動巴士銅用量會達到89公斤,而完全由電池驅動的純電動巴士,每輛將會用到224-369公斤的銅,完全取決於其電池的大小。

除了汽車本身以外,包括充電樁等電動車產業的基礎設施也都會用到銅,每個充電樁將會使用到0.7公斤的銅,而如果是具備快速充電功能的充電樁,其銅用量將會達到8公斤。此外,未來如果獨立能源汽車像是太陽能汽車進入市場的話,汽車市場的銅需求量還會增長得更快,因太陽能汽車的太陽能發電系統同樣依賴相當數量的銅來運作。

政府政策將是推動電動車產業發展的一大助力。2016年,大陸電動車的銷量略高於50萬輛,而北京當局已經制定至2020年將達成年銷量200萬輛的目標。印度政府則是宣布,2030年以後,該國所銷售的汽車都必須是電動車。淡水河谷公司(Vale SA)總裁兼執行長費慕禮(Murilo Ferreira)預估,可能在五年之內,七大工業國所生產的汽車就會有一半是電動車。

美國全球投資者公司(US Global Investors)執行長兼投資長霍姆斯(Frank Holmes)此前表示,全球替代能源的爆發增長將會帶動銅的需求。霍姆斯指出,新的發電技術通常較傳統的發電使用更多的銅,如每百萬瓦的風力發電產能就會用到約3.6公噸的銅。此外,混合動力車以及電動車的銅使用量也較傳統汽車高出兩到三倍;平均每輛汽油車所使用的銅線約為55磅,混合動力車則達到110磅,電動車更是高達165磅。

(本文內容由授權使用。圖片出處:public domain CC0)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

Arduino驅動ILI9341彩屏(一)——顏色問題

 

最近在淘寶的店鋪上淘到了一塊ILI9341的彩色液晶屏,打算研究一下如何使用。

淘寶店鋪購買屏幕之後有附源代碼可供下載,代碼質量慘不忍睹,各種縮進不規範就不說了,先拿來試一下吧。

這是淘寶店鋪代碼的核心部分:

void setup()
{
  Lcd_Init();
 //LCD_Clear(0xf800);
}

void loop()
{  
   LCD_Clear(0xf800);
   LCD_Clear(0x07E0);
   LCD_Clear(0x001F);
  /*   
  for(int i=0;i<1000;i++)
  {
    Rect(random(300),random(300),random(300),random(300),random(65535)); // rectangle at x, y, with, hight, color
  }*/
  
//  LCD_Clear(0xf800);
}

代碼裏面的setup()和loop()是arduino特有的主函數,和普通C程序的main()函數一樣。

setup()函數在開機時只運行一次,運行完之後就開始循環運行loop()函數。

程序先在setup()函數里做了一下初始化操作Lcd_Init(),接着開始連續用不同顏色清屏。

這裏的LCD_Clear()就是清屏函數了,原型如下:

void LCD_Clear(unsigned int j)                   
{    
  unsigned int i,m;
 Address_set(0,0,240,320);
  //Lcd_Write_Com(0x02c); //write_memory_start
  //digitalWrite(LCD_RS,HIGH);
  digitalWrite(LCD_CS,LOW);


  for(i=0;i<240;i++)
    for(m=0;m<320;m++)
    {
      Lcd_Write_Data(j>>8);
      Lcd_Write_Data(j);

    }
  digitalWrite(LCD_CS,HIGH);   
}

縮進不規範就不吐槽了(;へ:),連變量名都起得亂七八糟,簡直慘不忍睹。稍微重寫了一下函數,長這樣:

void LCD_Clear(unsigned int color){
  Address_set(0,0,240,320);
  digitalWrite(LCD_CS,LOW);
  for(int i=0;i<240;i++){
    for(int m=0;m<320;m++){
      Lcd_Write_Data(color>>8);
      Lcd_Write_Data(color);
    }
  }
  digitalWrite(LCD_CS,HIGH);
}

這個函數先使用Address_set()設置了刷新區域,然後把LCD_CS針腳電壓拉低,之後循環寫入color。

color分兩次寫入,一次寫入高八位(16位整形前面8個bit),一次寫入低八位。

看上去好像沒什麼問題,但loop()函數中LCD_Clear()卻是直接用十六進制寫入的。

寫一個RGB()函數把RGB顏色轉換成十六進制,不是更人性化嗎?

讀了一遍源代碼,結果真的找到了店家的RGB函數:

int RGB(int r,int g,int b)
{return r << 16 | g << 8 | b;
}

還是不規範的縮進(╯︵╰)。但有總比沒有好,輸出紅色試一下:

void setup()
{
  Lcd_Init();
  LCD_Clear(RGB(255,0,0));
}

void loop()
{  
   //nothing
}

出故障了。

 

 

 

Arduino重啟后,屏幕輸出了黑色!再試着排除一下故障,把RGB(255,0,0)改成RGB(0,255,0),輸出綠色試試:

 

 

 

 

結果輸出了橙色!

之後我又反覆嘗試了,沒有一次輸出正確的顏色。莫非是這個RGB()函數有問題,淘寶店鋪才用十六進制数字?

再仔細推導了一下:return r << 16 | g << 8 | b;把紅色左移16位,綠色左移8位,藍色不動,所以合成的二進制應該是這樣的:

RRRRRRRRGGGGGGGGBBBBBBBB

R代表紅色位,G代表綠色位,B代表藍色位,每種顏色8位,總共24位。計算了一下可能性:

 

 

 總共1677萬種可能,也就是1677萬種顏色,這就是普通電腦的真彩顏色。但LCD_Clear()函數是這麼寫的:

Lcd_Write_Data(color>>8);
Lcd_Write_Data(color);

總的只能寫入十六個bit,也就是16位,這和24位對不上號啊?

再回頭看了一下,店鋪代碼的setup()函數中有這樣一行白色清屏指令:

//LCD_Clear(0xf800);

0xf800換算成十進制,是63488,有沒有感覺很接近一個數?

沒錯,就是65535,單個16位無符號整數的最大儲存範圍。

16位整型變量,顧名思義就是用16個0和1組成的變量。可以儲存的整數範圍是-32768 ~ 32767,32768 + 32767剛好等於65535,換算到二進制,就是1111111111111111,16個1。

 

這時,真相出現了——這台機器所採用的,是16位顏色,也被成為RGB565顏色模式。

 

早期的16位計算機由於架構的設計,一次只能處理一個16位二進制數。而圖形显示對速度要求特別高,所以一個像素必須要用一個16進制數來表示,也就是16位顏色。

如果用採用24位顏色,就需要兩個16進制數,也就是2Bytes,速度就慢了一半。

而每個像素都是使用紅黃藍三基色來显示的,所以一個16進制數必須分3份,來分別表示紅、黃、藍的數據。

這就出現了一個問題:

16 / 3 = 5.33333

紅黃藍三種顏色平均佔用5.33333個bit。

可bit是計算機存儲的基本單位,要麼是1,要麼是0,不能再分割。必須要有一種顏色多用一個位,才能充分單個利用16進制整數。

人體的綠色視錐細胞比較敏感,正好,那綠色就用6位,紅色藍色就用5位吧。

這就是著名的RGB565模式,總共能存儲65535種顏色。

早期的遊戲都採用這種模式,所以顏色不夠豐富,很有特色:

 

 

 

 這塊ILI9341显示屏模塊(注意不是ILI9341芯片本身)也剛好只有16根數據引腳,所以就採用了這種RGB565的顏色模式。

找到了問題,那就改一下程序吧:

int RGB(int r,int g,int b)
{
  return r << 11 | g << 5 | b;
}

光改RGB()函數還不夠,現在使用了RGB565模式,所以綠色範圍是從0-63,紅色、藍色的範圍是0-31。

所以還得改setup裏面的清屏函數:

void setup()
{
  Lcd_Init();
  LCD_Clear(RGB(0,63,0));
}

重新下載了程序,屏幕成功显示,輸出了正確的綠色!⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄

 

 

 那麼問題來了,開頭店家給的LCD_Clear(0xf800)這條清屏指令,是怎麼來的?畢竟他連RGB565都不知道呢!

這是我提供的一種可能性:

“0xf600試一下?”

“不行,太灰了!”

“那0xf700呢?”

“還是不行!老闆,我們都試了一下午了,肯定是屏幕壞了!”

“加油,還差一點點了,肯定可以的!”

“0xf800好像還行,但是還是有點灰!”

“沒關係,反正買家能點亮屏幕就行,其他的我們不管!”

“……”

所以這家淘寶店鋪根本不知道自己在買什麼。ヽ( ̄▽ ̄)ノ

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

上海新能源汽車展8月23舉行 吉利將攜帝豪PHEV亮相

進入2017年以來,上海市新能源汽車推廣應用和產業發展繼續保持高增長,1-5月新能源汽車推廣上牌數量達到10699輛。據瞭解,目前在上海市場上銷售的新能源車型累計超過100款,其中本地品牌占比為35%,其他省市品牌占比達到65%,市場累計推廣前5位的品牌依次為比亞迪、榮威、北汽、奇瑞、Tesla。

當前,上海已成為新能源汽車全球保有量最大的城市,吉利汽車自然不會放過這個巨大的市場。在最近上海市經信委公佈的4批新能源汽車備案資訊表中,吉利分別在第三批、第四批目錄中均有車型進入。據悉,吉利進入上海市新能源汽車備案資訊表中的車型為吉利帝豪EV300及吉利帝豪PHEV。

吉利帝豪EV300自推出以來,頗受市場的歡迎,今年5月還登頂了新能源汽車單車銷量排行板的第一位,而帝豪PHEV作為吉利旗下首款插電式混合動力車型,自公佈以來也是備受關注。

據瞭解,吉利帝豪PHEV外觀上與吉利帝豪EV基本相同。內飾方面,帝豪PHEV配備三輻式真皮方向盤並集成了CCS定速巡航、多媒體播放、語音控制等控制按鈕。而與帝豪EV不同的是,在中控部分帝豪PHEV增加了旋鈕式檔位,使車輛可在純電動、混合動力等模式中進行切換,增強了操作的便利性及駕駛體驗。

最亮眼的部分是帝豪PHEV採用了被稱為“聯擎”的功率分流式混合動力技術,搭載代號為JLγ-4G15H的1.5L發動機與兩台高性能電機和11.3kWh的三元鋰電池組組成的插電式混合動力系統。新車最高時速可達175km/h,NEDC工況油耗1.5L/100km,HEV模式下綜合工況油耗5.1L/100km,NEDC工況下純電續航里程61km。

作為全國插電式混合動力最大銷售城市,吉利帝豪PHEV本次順利進入上海新能源汽車目錄無疑是個極好的信號。為了與各位大咖搶佔市場份額,吉利汽車將攜帝豪EV300,帝豪PHEV亮相2017上海國際新能源汽車產業博覽會。其中帝豪PHEV是進入上海新能源汽車目錄後,首度亮相上海。

據瞭解,2017上海國際新能源汽車產業博覽會是由充電設施線上網、廣東省充電設施協會、廣東省新能源汽車產業協會、中國土木工程學會城市公共交通學會和振威展覽股份聯合舉辦,展示面積達45000平米,參展企業涵蓋了整車、核心三電(電池、電機、電控)、充電設備等產業板塊,是我國新能源汽車產業領域最專業的展覽展示和技術交流的綜合性展會平臺。

除吉利外,比亞迪、申龍客車、珠海銀隆、上汽集團、上饒客車、中植新能源、中通、江淮、眾泰、知豆、南京金龍、成功汽車、新吉奧集團、瑞馳新能源、福汽新龍馬等新能源汽車企業,以及精進電動、英威騰、東風電機、力神、沃特瑪、國軒高科、地上鐵、特來電、科陸、巴斯巴、萬馬專纜、奧美格、瑞可達等核心三電及零部件知名企業將亮相本次展會。

參觀預登記,請點擊:

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象