標籤: NETQNA

地板/磁磚 管理軟體導入 (程式開發、軟體開發、程式設計)

      這個月在多次跟經營30幾年的地板多家連鎖店老闆進行實際現場討論,因為該客戶在經營公司的作業流程與管理目前效率人工過於頻繁,所以找上我們網智數位軟體開發團隊進行改善建議,而 Allen 我發覺事實上一家公司如果老闆認真投入公司的人事、庫存、財務、業務績效、產品品質管理面向時,公司發展到一定程度一定會想透過一個好的資訊系統、管理軟體來進行協助公司的作業標準化,當然在多次討論客戶的企業經營管理思維過程中,我學到產業的知識、客戶的經營理念、面對客戶的產品介紹、面對客戶的敬業態度,都是我無形中累積的知識。

LINE_ALBUM_AI產生圖_240211_224

      該客戶因為擁有特殊的人事管理思維、銷售管理制度,只是都是人工計算、Excel作業,市面上根本也沒有任何一套套裝軟體可以符合客戶的需求,因為客戶的銷售獎金算法、產品估價方式、人事管理制度面,都是具有該地板產業獨特的競爭優勢,所以客戶評估我們擁有多年在不同產業領域上可以完全從無到有客製化的軟體開發能力,確定正式委託我們進行軟體開發案。

      而因為該軟體開發案,我評估跟以往我在協助導入其他廠商時給予輔導的方式不同,該客戶具有特殊的Domain Know-how,所以我特別另行保密管理軟體使用權,來保障該客戶多年的管理制度,也作為雙方合作信任的基礎,這樣客戶可以安心的享有自己特殊的營運管理方式,完全透過軟體來建立標準流程,就是老闆在外面也可以透過資訊系統,馬上知道公司所有業績表、財務成本、庫存管控,又不用擔心自行創立的業績績效算法、組織擴展方式被其他競爭對手學習。

好的管理軟體,可以協助企業進行【數字管理】- 績效管理,任何歷史資料都可以分析協助作決策。

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

微軟- 物聯網 Internet of Things , 成功企業案例的影片(軟體開發、客製化軟體、客製化設計)

微軟在雲端、物聯網、大數據分析在企業運用方面成功案例非常多,今天看到一個微軟的好的企業運用成功案例分享影片,真的講解的非常清楚,各位可以看一看

 

影片介紹
https://channel9.msdn.com/Series/Rolls-Royce/Solution 

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

庫存目標6大範疇(程式開發、程式設計、軟體開發、系統開發)

      這一個月去一家經營40幾年的代工廠,委託我們協助分析他們現行 ERP系統,很多庫存數量都一直無法精確,當然這邊所謂的精確,不完全是軟體系統庫存數字的正確,或進行盤盈盤虧進行調整數字動作,而是他們想要一個方式可以進行一個針對各種產品品項設定一個好的庫存量控制,我就詢問他們如何定義跟衡量一個產品、零件、材料的庫存數字(安全庫存、現有庫存量),我發現真的很多企業主管、工廠倉庫管理人員、採購人員大多數針對庫存量的控管都是只有幾個原則,一、庫存量越低現金流動率越高。二、針對常用物品、通用零材料設定安全庫存數字。

LINE_ALBUM_AI產生圖_240211_107LINE_ALBUM_AI產生圖_240211_287

    上述二大原則方向,一定正確無誤,但我會幾乎都會接著直接問客戶,那麼安全庫存您怎麼決定【數字 (QTY)】,我相信大多數都是說經驗法則,訂單銷售量、生產領料過程的用料量、耗損量等考慮因素,不過我幾乎都會根據實際情況、產業特性、企業流程各種因素給予調整建議,這也是很多客戶委託我們量身定做開發最具有價值的一環,絕對不是只有一個軟體使用,我們是整個進行流程討論,在討論過程我們會把相關產業的做法提出來,雙方共同腦力激蕩,因為客戶的流程與瓶頸客戶最知道,但往往發覺跟我們討論完,才發覺有許多創新變革的流程管理可以導入。

    在這篇分享文,我要特別提出一些對於庫存管理的實施做法(針對加工業、代工廠,單純的買賣業就不需要如此做法),在一個比較複雜的生產過程中,每個產品會經過一連串的製程(或稱工序),而庫存量不是只有針對最終完成品(產品)來控管,必須在各個環節都需進行設定控管基準線,在針對各個工序間我們也必須認真看待每一道工序完成後移交到下一個工序之前的轉移、未轉移的數量,也成為半成品,這些在一個好的管理軟體系統,必須有個工序對應的物料編碼(跟產品編碼是有所區隔),而針對工序角度思考的庫存控管,我們在此可以稱為【流動庫存(Flow)】, 其他的庫存控管稱之為【常備庫存(Stock)】,另外再針對這2種性質的庫存觀念又可以再次各自分類為 【計劃庫存】、【調整庫存】、【偶發庫存】。

    這樣解釋或許大家很難懂,我整理一下表格

計劃庫存 調整庫存 偶發庫存
常備庫存 (1)
以生產目標的庫存控制、季節性的庫存量控管、定期維修措施應變等
(3)
所有品項的安全庫存、JIT看板方式中的加工品
(5)
因疏忽導致過度生產的庫存量、或按生產訂單如期製作,但訂單忽然取消,造成的庫存量增加。
流動庫存 (2)
就是所謂的【帳齡庫存】
(4)
在工序之前進行緩衝調整庫存量、運輸過程的庫存量等。
(6)
工序之間生產速度不一致、或者調度部順利,造成某個工序的半成品特別異常。

(1)計劃常備庫存:

       它是一種依據“生產目標”為目的的庫存控制觀念,非常適合用於按照標準量劃分的產品,維持其庫存水平的情況,以及我們常發生的季節性庫存也是屬於這種類型,因為有些產業受到季節性等因素影響,月生產量非常不平均的行業我相信也是非常多,而這些行業的工廠設備普遍來說,都不具備可以在高峰季節(旺季)有相對應的生產能力,所以我們必須在這些行業中,積極主動地在需求量較少的淡季,生產較多的產品進行庫存,來因應旺季的到來。

      在該庫存量的制定方式,主要是根據一整年的宏觀需求預測為基礎來進行,這個軟體系統就必須根據多年來的歷史訂單、或者市場調查進行預測分析。

(2)計劃流動庫存

        存貨帳齡(帳齡庫存)就是典型屬於這一類,這也是產品工程設計中,都必須提前準備的庫存量。

(3)調整常備庫存

        這就是我們一直常聽到的JIT看板方式中的加工數量控制、或者大家最知道的【安全庫存量】設定,它是一種用於應對需求方的緊急變動,或為吸收生產作業線因為供應方問題導致供應數量的瓶頸,主動安全防範的庫存量。

(4)調整流動庫存

      這類型就是在工序與工序間,在加工製造過程中用於緩衝調整加工品的數量、或者運輸過程中的庫存量,都歸於這個類型。

     以及我要而外一提,常常因為原物料供應商和工廠製造商因為在“批量”的不一致,例如生產時採用件數為單位,而供應商發貨包裝是採用貨板單位,在這種狀況下,產品到了裝滿1貨板就需要臨時保管;相反來看就是,購買原物料時採用貨板單位,而供應商發貨是採用件數單位,這樣同樣都需要等到填補批量差異的調整庫存。

(5)偶發常備庫存

       就是因疏忽導致過度生產的庫存量、或按生產訂單如期製作,但訂單忽然取消,造成的庫存量增加。

(6)偶發流動庫存

     工序之間生產速度不一致、或者調度部順利,造成某個工序的半成品特別異常。

     也因為調度的不順暢、先前作業完成之後,需要接續的工序作業無法繼續進行生產,也是屬於這類性庫存定義。

而我特別整理上述這些庫存管理的範疇,在好的一個軟體管理系統(ERP、MRP、進銷存、POS系統、MES等),都應該在某個功能進行輔助,例如(1)計劃常備庫存和 (3)調整常備庫存,就是常看到的設定品項安全庫存量、根據訂單跑出生產計劃需求量,這個我建議可以參考我其他寫的文章,當然如果您有任何問題,也跟歡迎聯繫我們,任何問題我們都可以提出一些看法,也針對客戶產業流程特性進行專業的系統分析。

(其他參考文章)

MPS主生產計畫專文介紹(一)

MRPⅡ/ERP 能力需求計畫原理

庫存管理-概念與釐清

庫存管理探討-VMI

真正的庫存量形成探討

庫存管理的中樞控管法則(上)

庫存管理的中樞控管法則(下)

BOM表管理與設定﹣輔料是否需輸入BOM

何謂 進銷存、ERP、WMS?三者差異性【軟體開發、軟件開發、程式設計】

ERP 產品成本管理與計算

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

Windows 10 UWP 存取 JSON 格式 – 程式實作講解(軟體開發、客製化軟體、程式設計、程式開發)

      在我們開發各種專案時,一定多少都會需要存取各種跨平台傳輸的資料,目前最普遍的傳輸格式為 XML 與 JSON , 而今天我想要深入講解在 Windows 10 Universal APP (UWP)平台下,如何讀取跟儲存 JSON 格式資料。

      images

    JSON 的全名為 Java Script Object Notation , 它是一種輕量級的資料傳輸交換格式語言,特點是容易閱讀、依字串為基礎,格式都是經過壓縮地所以在網路傳輸過程,佔用的頻寬極小,因此被廣泛地應用在跨平台、跨程式語言。

JSON 的格式在宣告一個類別/物件,是用 大括號 { };宣告一個陣列使用 中括號 [ ] ;而在大括號裡面,是使用 名稱 :值 ,例如官方的範例圖

1356331778-696014507

例如 我在此 有個 員工類別 ,分別屬性有員工編號、姓名、職位、學歷,則對應的 JSON 格式為

(JSON Code)

var empJsonObj = { “員工編號”:“emp001”, “姓名”: “台灣李奧納多,”“職位”: “技術總監”,"年齡”:33 } ;

接下來,就是要開始講解如何在 Windows 10 Universal APP (UWP)平台,存取 JSON 格式的支援與程式開發技巧。

在 Windows 10 UWP 平台,主要有 2 種技巧來存取 JSON 格式,第一種是使用 DataContractJsonSerializer (MSDN 介紹),透過 DataContractJsonSerializer 來對 JSON 數據進行序列化與反系列化動作 ;而第二種是使用 JsonObject 類別來自行定義 JSON 物件。這兩種方式我都會在這篇完整介紹。

 

1.透過 DataContractJsonSerializer 對 JSON 資料進行序列化與反序列化

      使用 DataContractJsonSerializer 類別來對 JSON 數據進行序列化與反序列化,這是最簡單的方式,所謂序列化過程就是把 實體類別物件 轉成 JSON 格式化的字串,反之 反序列化 過程,就是把 JSON 物件字串({ 名稱:值,名稱1:值1….}) 轉換成對應的 .NET 類別。

下圖,是實際程式範例

image

image

 

2.透過使用 JsonObject 類別來自行定義 JSON 物件

這個就讓我直接用實際程式碼來講解….

首先我先新增2個類別 ,分別為 員工類別 (Employee)和研發群組類別(RDGroup),在此我假設一個員工可以同時歸屬多於于一個研發群組以上。

底下為 員工類別程式碼:

   /// <summary>
   /// 員工類別
   /// </summary>
   public class Employee
   {
       private const string idKey = “id";
       private const string nameKey = “name";
       private const string rdKey = “rd";
       private const string ageKey = “age";
       private const string enableKey = “enable";

       public Employee()
       {
           Id = “";
           Name = “";
           RDGroups = new ObservableCollection<RDGroup>();
       }

       public Employee(string jsonString) : this()
       {
           JsonObject jsonObject = JsonObject.Parse(jsonString);
           Id = jsonObject.GetNamedString(idKey, “");
           Name = jsonObject.GetNamedString(nameKey, “");
           Age = jsonObject.GetNamedNumber(ageKey, 0);
           Enable = jsonObject.GetNamedBoolean(enableKey, false);

           foreach (IJsonValue jsonValue in jsonObject.GetNamedArray(rdKey, new JsonArray()))
           {
               if (jsonValue.ValueType == JsonValueType.Object)
               {
                   RDGroups.Add(new RDGroup(jsonValue.GetObject()));
               }
           }
       }

       public string Stringify()
       {
           JsonArray jsonArray = new JsonArray();
           foreach (RDGroup group in RDGroups)
           {
               jsonArray.Add(group.ToJsonObject());
           }

           JsonObject jsonObject = new JsonObject();
           jsonObject[idKey] = JsonValue.CreateStringValue(Id);
           jsonObject[nameKey] = JsonValue.CreateStringValue(Name);
           jsonObject[rdKey] = jsonArray;
           jsonObject[ageKey] = JsonValue.CreateNumberValue(Age);
           jsonObject[enableKey] = JsonValue.CreateBooleanValue(Enable);

           return jsonObject.Stringify();
       }

       public string Id { get; set; }
       public string Name { get; set; }
       public ObservableCollection<RDGroup> RDGroups { get; set; }
       public double Age { get; set; }
       public bool Enable { get; set; }

   }


 

底下為 研發群組類別(RDGroup)程式碼:

  /// <summary>
  /// 研發群組 類別,一個員工可以歸屬多個研發群組
  /// </summary>
  public class RDGroup
  {
      private const string idKey = “id";
      private const string rdKey = “rd";
      private const string nameKey = “name";

      public RDGroup()
      {
          Id = “";
          Name = “";
      }

      public RDGroup(JsonObject jsonObject)
      {
          JsonObject schoolObject = jsonObject.GetNamedObject(rdKey, null);
          if (schoolObject != null)
          {
              Id = schoolObject.GetNamedString(idKey, “");
              Name = schoolObject.GetNamedString(nameKey, “");
          }
      }

      public JsonObject ToJsonObject()
      {
          JsonObject schoolObject = new JsonObject();
          schoolObject.SetNamedValue(idKey, JsonValue.CreateStringValue(Id));
          schoolObject.SetNamedValue(nameKey, JsonValue.CreateStringValue(Name));

          JsonObject jsonObject = new JsonObject();
          jsonObject.SetNamedValue(rdKey, schoolObject);
          return jsonObject;
      }

      public string Id { get; set; }
      public string Name { get; set; }
  }

 

再來我設計一個前端UI界面,作為讀取與寫入 JSON 的案例實作

前端界面

image

 

在執行存檔時,我們將新增一個 Employee 類別,並透過 JsonObject 轉成(序列化)為 JSON 字串,儲存在設定檔。

image

 

而在【讀取資料】時,是透過 JsonObject 進行反序列化,將 Json String 轉回成 .Net 的 Employee 類別(Class)

image

 

程式執行結果畫面

存檔

image

讀取資料

image

 

 

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

 

 

機電行業-軟體解決方案(紅外線、局部放電、點料表)

        今年我公司針對機電行業領域,開發出一個針對紅外線、局部放電檢測的測試報告,轉為一個獨立的專案管理報告,該管理軟體可以協助將客戶歷年來的紅外線、局部放電的報告資料,如拍攝位置、拍攝盤名、檢測人員、天氣狀況、環境溫度、濕度、相關電流(R、S、T、N)、額定電流、檢測照片、可見光圖片等欄位作有效資料管理。

image

        

 

 

 

 

 

 

 

並且針對每個檢測報告的的【判定結果】也會根據溫度、電流等條件進行結果的系統判定,可以大幅減少人工判定作業的誤差與錯誤,如下圖

image

           在每個報告項目我們都可以指定報告是否有異常原因、異常項目(後續我們的管理軟體,都可以針對所有異常原因、異常項目)進行分析統計趨勢報表,作為管理層級人員的追蹤檢討事項、以及執行面的調整。

image

管理軟體部分統計圖表

image

image

image

image

image

 

以上所有功能皆可匯出 Excel 檔作為報表、提供給客戶,提升機電產業的管理績效,以往我們的客戶在還沒有使用我們的管理軟體時,每次產生一個報告都需要人工在 Excel、Word作業,行政助理到處複製貼上,初步估計人工花費至少超過10天,現在使用我們的軟體,只需要一個按鈕就可以馬上產出給客戶一個完整的報告),而且案子一多根本無法有效作管理,例如想知道目前有設備過熱的地點有哪些、散熱發生的又有哪些;所以使用我們的管理軟體後,可以有效的跟客戶呈現一個即時的報告,作為提升機電產業的競爭性,目前已經有多家新竹大廠導入我們的軟體,如果您有這個需求,可以聯繫我們,我們可以安排時間到現場Demo我們的系統。

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

 

ERP 產品成本管理與計算

       目前很多企業多少都有導入ERP系統,但不管是用到什麼樣的ERP,SAP、Oracle、其他等,基本上幾乎都有一個共同的特點,就是目前的應用還局限於企業的各部門組織資料的輸入,然後將這部分的數據加工應用,形成一些簡單的統計分析報表,也就是說,事實上這還算是處於基礎的ERP應用階段,竟然這樣,那麼企業到底應該如何更加充分地發揮ERP的作用呢?這也是我想從這篇文章來講解,我主要從成本控制方面來加以闡述。

tyler-franta-iusJ25iYu1c-unsplash

      第一,我們先來了解一下企業製造生產商品的成本構成因素,產品的成本主要由材料成本 + 人工成本 + 製造費用等部分組成,而其中製造業最主要的成本是材料成本(比例相對比較大),其次是人力成本,第三是製造費用成本,而要控制好各項成本,就是要了解其中各成本項目分別是多少,在沒有應用ERP的時候,通常成本會計計算成本方式很簡單,就是將本月生產的產品數量作為基數,計算出材料,人工及製造費用,按一定的規則,將所有成本分攤至本月所有產生的產品中,從總體成本來說計算是沒有什麼問題,但由於是平均分攤的方式,相對每種產品而言,所看到的成本就不一定真實了,而且如果發現成本有異常,也比很難去追著問題的來源,但是很難去做改善了。但是,企業在應用了ERP以後,管理的精度和側重點就完全不一樣了,因為ERP系統可以自動歸集材料成本,自動計算人工成本和製造費用的分攤,不再只是一個所謂的【平均值】,每個個產品甚至每一張訂單的成本都可以精確地計算出來,我們知道成本會計的工作重點不再是核算成本,而是對成本產生過程的監控進而追溯,也對可能產生的異常情況進行預測和預防警惕,並在成本計算完成後對成本異常的數據分析原因並解決,這樣一步步地降低成本,在所有第一步就是要利用ERP來計算各種成本,只有有了這些數據才能發現問題和設定改善目標。

        再來通常,計算完成本我們就會發現很多的異常情況,比如有些訂單產品的材料按標準投入,產出卻遠遠高於預計的產量,有些訂單產品有材料投入卻沒有產出,更或者有些訂單超產特別大,而有些訂單卻沒有生產數據,所有這些異常發生的原因在在車間管理不規範造成的,車間存在挪料或不按生產計劃領料,不按生產任務單入庫的情況。如果ERP上線的時候顧問有特別的說明提醒或者成本會計有經驗,在一開始就嚴格要求車間規範作業,這種情況就會比較少發生,但很多企業做不到這一點。發現這些異常後,成本會計自然會去去,在追問問題的過程中,一方面讓相關部門,尤其是製造部門更加熟悉了解規範化作業流程的重要性,同時也讓這些部門人員慢慢樹立起成本意識,養成節省成本的觀念和習慣。

       ERP能精確計算產品成本,成本產生的過程ERP是否就無能為力了呢?非常.ERP計算成本只是減少了人工計算的工作量和增加了計算的精確度,過程控制才是ERP能產生效益的最大通常,材料成本在製造行業的產品成本中佔了絕大部分,而ERP可用於控製材料成本但是非常有效的一個面,在材料領用的時候,ERP可以按產品BOM的標準用量控製材料的領用,不可以隨意超標;而對於因為報廢等原因造成的材料超耗,ERP按設定的特殊流程處理,在這個流程中,所設定的審查和知會人員跟正常另一方面,當車間材料的領用都很規範後,我們就可以非常容易地檢查BOM數據的精度,因為我們完全可以根據領料的數量和產出,及車間剩餘的庫存來檢驗BOM是偏大,偏小或者剛好。這樣一來,成本控制的源頭就更加精確。在此基礎上,再去分析各項材料是否還有壓縮的空間,配套相關的操作規程和工具,方法,進一步節省成本。我們有個客戶就做到了這一點,在該企業的車間領用材料中,有個材料就是我們常用的膠帶,通常很多企業認為它的成本低用也不是特別大,所以在管理上也不重視,但這家企業是這樣做的:在需要使用的工序上,劃出刻度,然後給相關的作業人員培訓,做什麼產品用多少厘米毫米、公分、臺尺)的長度,這樣做以後,一卷膠帶可以做多個產品基本上都可以計算出來,可見其管理的深度。當然,這些改善的結果最後還是會反饋到ERP系統中,讓ERP來控制。

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

Windows 10 的 UDP 與 TCP 網路通訊實作案例一(軟體開發、軟件開發、程式設計、程式開發)

        今年公司承包了許多大型專案,都是必須用到網路存取技術,例如 圖控軟體我們就必須透過 TCP 協定跟硬體設備溝通,來讀取上萬台工業風扇裝置的轉速、溫度等訊息;再來還有影像監控軟體也是大量用到TCP/UDP、Web API網路協定存取,因此在開發各種軟體時,很多機會勢必需要用到網路通訊的技術。

        而這篇教學技術文章,我特別是針對微軟的 Windows 10 平台上,也就是所謂的 Windows 10 通用應用開發(Universal APP,UAP),示範關鍵的程式技術,我想分為 2 篇文章分別介紹 UDP 與 TCP 存取技巧,而這篇文章就先針對 UDP協定來介紹,UDP協定是個無連接(不可靠)的協議,它只提供資料的不可靠傳遞,它一旦把應用程式發給網路層的資料傳送出去,就不保留資料備份(所以UDP有時候也被認為是不可靠的資料報協定),UDP在IP資料報的頭部僅僅加入了復用和資料校驗(欄位),但它相對于TCP 協定來說,資源耗用少、而且處理速度夠快,所以常被用在傳輸要求沒有那麼嚴格的條件下,例如:聊天訊息、網路視訊、語音傳遞。

在 WIndows 10 的 UAP/UWP 平台上,微軟透過一個 DatagramSocket 類別來封裝了所有有關 UDP 網路存取的相關功能。

我將示範 伺服器端(Server) 與 用戶端(Client) 的程式技巧

在 Server 端,主要步驟有

1.建立一個 DatagramSocket 實體物件。

2.建立一個對應的 MessageReceived 事件,它將用來接收 Client 發送的訊息。

3.使用 BindEndPointAsync 方法來綁定本機的位址(IP)、端口(Port),如果是需要本機的所有網路位址(有多張網卡、無線網路等)都可以監聽訊息,我們就改用 BindServiceNameAsync 方法,然後只要指定要擊結對應的Port即可。

而在 Client 端,主要是一樣建立一個 DatagramSocket 實體物件,在透過該 DatagramSocket 提供的 GetOutputSteamAsync() 方法,並在該方法傳入 Server端IP位址、Port即可。

在 XAML 界面我為了好示範,我將 Server 界面跟 Client 界面 放在一起,分別為2個頁籖,這是使用 <Pivot> 元素 (我在這邊不花時間解釋 XAML Code 知識,但開發 Windows 10 XAML 是必備的基本語法,一定要會而且很熟,我就特別喜歡 XAML Code)。

XAML 畫面如下圖

<Pivot>
           <PivotItem Header="Server 伺服器端">
               <Grid>
                   <Grid.RowDefinitions>
                       <RowDefinition Height="Auto"/>
                       <RowDefinition />
                   </Grid.RowDefinitions>
                   <StackPanel>
                       <TextBlock Text="Server IP地址:" FontSize="20″/>
                       <TextBlock Name="tbIp" FontSize="36″ IsTextSelectionEnabled="True"/>
                   </StackPanel>
                   <ListView Grid.Row="1″ Margin="0,15,0,3″ Name="lvMsg">
                       <ListView.Header>
                           <TextBlock Foreground="LightGreen" Text="已截取的Client端請求" FontSize="20″/>
                       </ListView.Header>
                       <ListView.ItemTemplate>
                           <DataTemplate>
                               <StackPanel Margin="6,20″>
                                   <TextBlock FontSize="20″ Foreground="Yellow">
                                       来自
                                       <Run Text="{Binding Path=FromIP}"/>
                                       的消息:
                                   </TextBlock>
                                   <TextBlock TextWrapping="Wrap" FontSize="24″ Text="{Binding Path=Message}"/>
                               </StackPanel>
                           </DataTemplate>
                       </ListView.ItemTemplate>
                   </ListView>
               </Grid>
           </PivotItem>
           <PivotItem Header="Client 端">
               <StackPanel>
                   <TextBox Name="txtServer" Header="Server IP:"/>
                   <TextBox Name="txtMessage" Header="發送訊息內容:" TextWrapping="Wrap" Height="200″/>
                   <Button HorizontalAlignment="Center" Content="送出" Padding="20,0″ Click="OnSend"/>
               </StackPanel>
           </PivotItem>
       </Pivot>

程式運行畫面如下圖

(Server 頁籖)

2016-10-23_23-25-03

(Cilent 頁籖)

2016-10-23_23-25-39

 

看完主要的界面宣告與結果,就開始來講解幾個主要核心程式碼

步驟 1.首先我宣告了 1 個常數 servicePort ,用於指定伺服器服務的端口Port.
    再宣告 2 個欄位(Fields), 作用於 Server UDP 與 Client UDP。

image

步驟 2.在 MainPage 建構子,宣告了載入實際時 綁定 Server 與 Client 端的 UDP Socket 。
   以及 Unload 時,釋放資源。

還有 我還綁定一個 Server 端要監聽 Client 端發送的訊息請求事件

image

步驟 3. Server 監聽事件 ,核心程式碼邏輯

相關程式碼,都附上註解

image

在上述 步驟 1 ~ 步驟 3 ,就完成 Server 端的主要監聽任務。

 

而 Client 端接下來的邏輯,就是在 Client 頁籖界面,輸入 Server 的 IP 位址、端口,以及要發送的內容,相關程式碼邏輯如下

OnSend() 是在 Client 頁籖界面,執行【送出】按鈕對應的動作方法

image

 

以上完成後,讓我們就可以來執行看看

在 Client 端頁籖 輸入訊息內容

image

在 Server 端監聽到的訊息如下

image

 

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

美容香水保養品 – 進銷存系統開發 (軟體開發、軟件開發、程式設計)

         感謝 水晶香國際股份有限公司 委託 網智數位量身定做開發符合保養品貿易公司的進銷存系統,雖然市面上很多套進銷存系統,但進銷存套裝軟體往往在某行業領域就是需要個別客製化,例如利潤分析的報表、商品出貨的統計、跨倉的寄存買買、各產品不同經銷商的折扣差異等等,這些都不是一般市面上的套裝可以完全符合店家客戶需求的,而該客戶專門是代理國際品牌,水晶香國際的謝董事長因為曾經也是知名通路商擔任主管多年,所以對數字管理有獨特的思維看法,也特別設計在這次的委託軟體開發案。

photo_l_146277617861
photo_b_110_142952199702

 

水晶香國際為台灣香水香氛及保養品專業代理商,以代理國際知名香水及保養品類為主,目前代理品牌如下所示:
瑞士-MUSK Collection香水香氛-總代理商
瑞士-ATHANOR有機保養品-總代理商

     https://www.facebook.com/SWISS.MUSK.COLLECTION
     https://www.facebook.com/Athanor.Taiwan

 

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

恭賀!2016年台北國際發明暨技術交易展- 聲控避障智慧導盲系統(軟體開發、軟件開發、程式開發、程序開發)

        今天網智數位高苑科技大學雙方在【2016年台北國際發明暨技術交易展】簽訂合作簽約儀式,在技術研發創新多個隊伍下,得到最高獎項- 聲控避障智慧導盲系統,該「聲控避障智慧感應系統」研發技術可以運用「顏色導盲」,能讓視障者接受系統語音導盲走在正確的人行道上;搭配使用特製的智慧導盲拐杖或鞋子,能用超音波感測模組感測前方障礙物;行動 App 則可定時播報當前時間、視障者位置與紅綠燈訊號,用以提醒視障者。

57268

57272

97177

上圖從右邊依序為 網智數位執行長 Allen、高苑科技大學 謝金原(教授)、台灣雲創營運長(Kevin)

         目前這個專利技術系統,也陸續導入盲人協會、醫院盲人引導路線、政府機構積極合作中,我們希望造福更多行動不方便的視障者,真正能用最少的預算建置輔助系統。

 

Voice-guide-system

Voice-guide-system-1

 

台北國際技術交易展:多樣技術整合,共同打造智慧生活

活動時間:105 年 9 月 29 日(星期四)~10 月 1 日(星期六)(三天)

活動地點:台北世界貿易中心展覽大樓一樓展場 A、B、D 區(臺北市信義路五段五號)

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

企業營運管理軟體-需求永遠就是缺少那麼一點點程式功能【軟體開發、程式開發、程式設計】

      公司在承包專案、量身定做開發客戶的企業軟體多年,在接案驗收過程中,10件有8件專案,客戶的使用者總是想要再多增加那個功能、這個功能,好像沒有導入系統軟體是都沒有需求,但導入後,期待需求越來越多…當然在我們、以及客戶來說,都是成本的增加(不過總是有些客戶….認為預算無法增加,功能要無止境增加,客官….軟體開發真的是很辛苦的….XD)

LINE_ALBUM_AI產生圖_240211_177

      就是因為系統功能是靜態的不變的,該有幾支程式功能就是那幾支程式功能在那裡,可是企業的經營是動態的、不斷地與時俱進,所以企業組織會改變,明天老闆、主管要的報表會不一樣,後天可能要刮風或下雨各種突發原因,企業就是這樣一直動態的向前進。組織改變可以重新設定部門組織檔,流程改變可以調整系統參數,但是老闆要的報表是天天在變,天天寫報表也不是辦法!

為了因應這樣的狀況,市場上出現了BI (Business Intelligence,商業智慧)的軟體,還有報表產生器(例如Crystal Report)…等等的軟體、以及各種大數據分析平台,這些都是很好的商用軟體與工具,但是這些軟體很顯然的有下列幾項要求:
1.這些軟體是提供給IT人員設定、維護,再提供給User使用的。
2.需要額外投資一筆軟體建置費用。
3.艱深如BI的軟體,還需要龐大的顧問導入費用。
4.需要具有一定專業技術的人才。
所以對於這樣單次性、個別性、或變化性高的報表,使用者的內在需求往往是,我只是要把畫面上的資料可以轉到EXCEL上,再讓我加工處理就好了。在BI、數據分析軟體建置之前,在IT人員設計開發報表之前,這麼簡單的需求難道我還需要等嗎?

歷經多年的IT打滾經驗後,我遇到客戶的使用者提出這樣的要求,常常有時候,我只能告訴他,這樣吧,我把Table schema給你,再教你寫些簡單的SQL Select的statement;我跟當年創造SQL指令的宗旨一樣的天真,認為這樣就應該已經解決他的問題了。事實上這樣的工作,對於非專業的IT人員來說,是非常非常的困難;對於IT人員來說,又是一件非常非常無趣的工作,因為他從來不知道他做這件事情的意義。

假如,你的ERP可以很彈性的把畫面上的資料轉到EXCEL,是不是就解決掉ERP系統『永遠缺少的那一支程式』的問題,最好可以做到下列幾項要求:
1.可以指定要轉出的資料條件(Records);可以指定要轉出的資料項(Fields)。
2.可以用List的方式轉出,以便統計分析,例如銷售明細月報表。
3.可以用Report的方式轉出,以便套印單據,例如Invoice、Packing List、…。
4.最好可以套用EXCEL範本,把資料轉到已事先做好的樞紐分析表、或Invoice格式之中,

這樣就可以不用每次轉出後都要再加工一次。

PS.Excel 真的也是事後梳理資料的好工具….但絕對是要先有好的流程企業管理軟體,在各種單位部門、流程控管整合所有表單單據、系統累積了營運管理數據,就可以真正達到【數字管理】目標了。

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen