發表文章

LED流水燈(方向燈)-電路實驗

圖片
最近看到不少新車的方向燈都配備有流水燈的效果,想說興致來潮,做一個這樣的電路試試看。 這樣的電路當然可以用 attiny85 來做,只是手頭沒有 attiny85 所以就利用傳統電路來製作,順便解析一下原理。 點亮順序原則就是 L1 → L2 → L3 → L4 ,這個週期時間必須在方向燈點亮時間內跑完,推估大約在1秒左右吧。 L1 首先點亮,沒啥技巧,R1、R2 分壓直接給 P3055LDG 閘極偏壓,導通後點亮 L1。 L2大約延遲 0.3 秒點亮,且點亮後維持住,所以這裡我用了 SCR 來控制,時間由 R4、C1 來決定,依照 RC 充電到 63% 大約一個 t 時間。 RC時間常數 = R x C = 10k x 33uf = 0.33 秒 當RC充電到63.2%時,觸發 SCR 導通,R5上出現 較高電壓(接近VCC),藉此導控制 L2 的MOSFET,此電壓並帶往下一個 RC,並觸發下一個 SCR,依此類推,下一個 LED於 0.3 秒後後亮起。 當方向燈停止供電後,SCR 狀態恢復(釋放),待下一次供電啟動。 ○至於模擬方向燈閃爍的電路,就用 555 來完成,如下圖: 555 的第三接腳直接供電給流水燈電路的 VCC ※※請注意,以上電路為模擬電路,使用的電壓為 5V,如果要用在汽車上,部分電阻值需要更動,LED 與其限流電阻部分,可以用 LED 排燈,或是 COB 燈 + 適當限流電阻, P3055LDG 有足夠驅動能力,要注意 P3055LDG背部必須靠電路板的銅箔散熱。

Sybase 資料庫發生 Error: 644, Severity: 21, State: 1

通常此錯誤都是 索引損毀造成,在非資料庫伺服器等級機器上容易出現,官方說法通常是硬體問題引起,但實際狀況不一定。 Error: 644, Severity: 21, State: 1 後通常還會接這樣訊息: Index row entry for data row id (11316867, 0) is missing from index page 11405926 of index id 5 of table ' myTable ' in database ' CURDB '. Xactid is (7099705,6). Drop and re-create the index . 雖然 官方說法 建議使用 dbcc checktable 或是 sp_fixindex 來處理,但是效果不理想,建議還是重建比較好。 但是怎麼知道錯誤是哪個索引檔呢? 先用 sysindexes 列出全部索引 select si.* from sysindexes si,sysobjects so where so.id = si.id and so.type = 'U' and so.name = 'myTable' go 然後錯誤訊息指名 index id 5 ,所以找到欄位 indid 為 5 的索引名稱 'CUST_IDX'。 接下來就是 DROP 索引 drop index myTable.CUST_INDEX go 再來重建,由於此索引不是主索引所以下面使用 nonclustered 建立 create nonclustered index CUST_IDX on dbo.myTable (column1,column2,column3....) on 'default' go ※如果該資料表資料量很大,依照機器速度可能會花上半天左右。 參考: How to find Index List in a Sybase database? Error 644 - Sybase Infocenter

關於WPF裡面動態圖片(Animate Image)和靜態圖片(Static Image)並存問題

圖片
要在 WPF 程式上顯示一般圖片(BMP、JPG、PNG、GIF..) 都不是甚麼太大問題,大概像下面一樣用 image 標籤即可。 <Grid>     <Grid.ColumnDefinitions>         <ColumnDefinition/>         <ColumnDefinition/>         <ColumnDefinition/>     </Grid.ColumnDefinitions>     <Grid.RowDefinitions>         <RowDefinition/>     </Grid.RowDefinitions>     <Image Grid.Column="1" Grid.Row="0" Source="D:\MyImages\Taiwanmap.jpg"/> </Grid> 但遇到動畫圖檔 GIFa 就是一件麻煩事了。 這個 image 標籤遇到 GIFa 就只能顯示第一張畫面,然後也不會有動畫。 <Image Grid.Column="1" Grid.Row="0" Source="D:\MyImages\ cutecoupletogether.gif "/> 我的目的是需要的是在同一種圖像元件標籤下,能夠同時顯示動畫或是靜態圖片的方法。 也就是說如果我要做一個圖片展示區或清單(動態生成),就很難去依照圖片類型一直去更換樣版標籤,所以我希望一種標籤就能夠解決問題。 能夠支援的標籤類型當然不是只有 Image,還有很多種方法: (底下標籤都會加上 Grid.Column 和 Grid.Row 屬性,因為我會放在上面 Grid 版面上的) 1、 MediaElement 標籤 ,他也可放置靜態圖片或動態圖片,但這個標籤早期只能支援U...

WPF 的 MVVM 測試

圖片
甚麼是WPF WPF(Windows Presentation Foundation) 簡單的說是一種把UI跟程式碼拆開來做的windows應用程式,早期UI的設計與動作都會和程式碼扯上關聯(因為程式碼寫在UI裡面),導致做美編的人員要動到畫面設計時,還得小心考慮到每個物件裡面的程式碼。而微軟在2006年的.NET Framework 3.0以後,重新去定義Windows APP設計的方向與概念而訂製了 WPF 架構。 我想有在設計android程式的人大概見怪不怪了,畢竟android程式的設計就是如此的,UI跟程式碼本來就是分開在設計的。當然習慣於舊式Coding的程式設計師還是會有點難以適應的,因為它不是『直覺』去設計程式的,而是透過『分析』→『模組化』→『開發設計』這種方式去進行開發的。 雖然WPF也可以用比較傳統方式去開發(把各種程式碼寫在UI的片段下)。 但由於『模組化』才是WPF的精隨 ,所以一開始就栽進 M-V-VM 的環境,對於將來開發會比較有幫助的。 網路上也有不少資料可以參考,我這邊就以我 自己的想法去解釋 ,如一開始的圖片。 Model : 主要負責資料結構 (Data Model:Data Structure)的建立或與資料庫連結的存取(DAL;Data Access Layer)的各類模組化都是由這一層負責處理。 View : 主要負責畫面的設計與成型 ,它是一個 .xaml 的 XML 描述檔案,這個描述檔案描述了畫面個元件如何擺放與屬性等,通常它會搭配一個 .cs 的程式碼檔案,雖然可以把程式碼寫在 .cs 裡面,但為了把運算邏輯分離,所以盡可能不要寫入任何與畫面無關的程式碼,甚至根輸入有關的互動運算邏輯也不應該寫在這裡。 ViewModel : 這個才是View的邏輯核心 ,通常一個View會搭配一個ViewModel,而這個ViewModel負責 View 的資料保存(輸入或是顯示用)與畫面元件的互動或是指令,例如按鈕的行為、輸入資料後的自動動作等等,都是在這個模組去完成。透過 View 與 ViewModel 進行結繫(Biding)的方式,也可以讓 View 接收 ViewModel 傳回來的事件要求。 基本型: 假如我需要一個可以輸入產品名稱、數量、成本 與計算小計的功能。 所...

由網頁呼叫本機端列印方式

圖片
※本篇會參考使用到  將 RDLC 報表不需預覽直接列印(Print RDLC Report without Preview) 部分程式實作方式,重覆部分不再說明。 現在,很多系統都是開發成為 WEB 型態(也稱雲端平台之類...)。 因此,只需要 Browser (瀏覽器) 即可進行系統操作。雖然有很大的便利程度,但是現實中還是會面臨到一些問題,像是 I/O控制等。這是因為受限於 瀏覽器的安全性不得直接讓程式碼介入系統控制,以免被駭客入侵等.... 但這也造就許多問題 ...... 撇開其它不談,就以我們常見的列印來說好了。 也許大家都知道,瀏覽器也是可以列印的啊,不管是直接列印,或是輸出成PDF列印等等。 但所謂不在其位不知其苦,部分行業或是以目前台灣推行的電子發票的列印格式(奇特格式),基本上瀏覽器列印就做不到了。 目前,有接觸過幾家廠商在做這類的系統,遇到電子發票列印實的做法怎麼處理呢? 當然回歸老路囉........ IE + ActiveX ....... 說真的,我有點語塞了。 怎麼有種回歸到 IE 綁架的時代的 Feel 呢? IE only 都會遇到 Windows 重大改版後導致 IE不支援繼續更新會始操作版面出現怪異現象 ,然後 ActiveX 有無法移植到其它瀏覽器(Chrome/FireFox/Safari/Opera...)的問題存在。 當然不是沒有辦法解決,只是台灣可能很多軟體公司面臨賺錢問題,不太願意花太多時間/金錢做研究是擺明事實(IT行業是個很燒錢的行業,由其它的RD部門更是如此),既有技術能快速上手開發賺錢,憑甚麼不做? 有天,在研究 MIT 開發的 Android App 開發(MIT app inventor) 介面得到了很棒的靈感(外國都已經行之有年了) 技術上,大致就像一開始的圖一般: 那個齒輪狀的東西就是一個本地(使用者電腦上的)一個程式或是服務,它提供了基本的 HTTP 通訊能力用來接收指令,並控制印表機。 通訊圖 所以,我有一台伺服器 www.myweb.com.tw 提供了作業頁面 localprint-test.html <html> <head> <meta http-equiv= ...

RDLC 報表不預覽直接列印(Print RDLC Report without Preview)

圖片
RDLC 報表在使用時,一般情況下都會開啟預覽畫面,再按列印才能列印出來。 但是如果設計的程式沒有畫面呢?(Console Mode / Service Mode) 所以,這次我就使用 Console 程式設計方式把報表列印出來,並且使用 Class Data Mode 方式處理資料,不使用 RDLC 報表直接連接資料庫。 由於我使用的是 Visual Studio 2017,本身以不含RDLC報表設計功能,所以必須先到 NuGet 安裝 『Microsoft.ReportingServices.ReportViewerControl.Winforms』 這裡測試的方式是把一篇文章(SourceDoc.txt)讀取出來,然後放到 Report1.rdlc 做成的版面上,然後再將它印出來。 1、建立 DataModel.cs 用來儲存資料 namespace PrintRDLCWithoutPreview {     class DataModel     {         public int no { get; set; }         public string line { get; set; }     } } 2、先進行方案的建置,因為RDLC要使用Class Model 資料來源時,需要建置過才能看到。 3、建立 Report1.rdlc 展開專案後可以看到自己定義的 DataModel.cs,選擇它作為資料來源 注意資料集的名稱,待會設定 DataSource 需要用到 拉取要顯示的欄位到需要顯示的類型,由於我們只有文字資料,所以只有拉『line』到顯示『值』上面 如果不需要統計值,直接『下一步』即可 調整位置與版面 4、需要用到的參考,由於會使用到Draw和winform集合的功能,所以必須引入 5、 記得 資料檔案和 RDLC 檔案必須將屬性設成『 一律複製 』,才不會發生找不到檔案問題 6、程式碼(說明在注解上) using System...