基于Lonworks技術的網絡打印服務器設計
發布時間:2008/6/3 0:00:00 訪問次數:548
    
    
    本文描述的網絡打印服務器(nps)可以為工業現場的多個智能裝置提供可靠的打印共享服務,極大地節約了系統成本;并且還可以方便地對nps的功能進一步擴充,構成一個分布式控制系統。lonworks網絡技術[1]是由echelon公司開發的一種現場總線網技術,具有通信可靠、抗干擾能力強的優點,使其在航天控制、工業過程控制、樓宇自動化、通信等領域得到了廣泛的應用。其采用的lontalk協議完全支持osi/iso網絡協議參考模型從物理層直至應用層的全部7層服務。toshiba公司的tmpn3150/3120神經元芯片[2]內嵌了lontalk協議,lontalk協議和一個網絡操作系統作為神經元芯片的固件提供給用戶,方便了用戶開發。神經元芯片支持多種通信介質、多信道和多種通信速率。nps硬件設計采用toshiba公司的tmpn3150神經元芯片,應用程序開發和調試工具為echelon公司的nodebuilder[3],其編程語言為neuron c語言l4,5]。nps能夠與多達64個其他智能設備(id—intelligent device)構成總線型網絡,通信介質為雙絞線,通信速率在78kbps時最大通信距離為1 200 m。系統結構如圖1所示。
    
    1 nps硬件設計
    如圖2所示,nps采用1塊tmpn315081af神經元芯片,配置1片64k×8位flash存儲器作為程序存儲器和1片128k×8位ram作為數據存儲器;神經元芯片的cp0~cp4雙向通信接口和78kbps的收發器構成lon-works網絡接口;tmpn315081af神經元芯片i/o引腳的功能可通過程序靈活配置。在此,i/00~i/07引腳接打印機接口的8位數據線,i/08引腳接打印機選通線(strb),i/09接打印機的“busy”信號線,并要在應用程序中用如下neuron c語句配置:
    io_0 output byte printdata;
    io_8 output bit printstb;
    io_9 output bit printbusy;。
    2 nps應用程序設計
    nps與各個智能節點之間為主從方式,通過查詢完成工作。網絡尋址為domain:subnet:node方式。網絡通信采用顯示報文格式。
    2.1 應用程序運行機制
    tmpn315081af神經元芯片固化了lontalk的全部七層協議[2],位于應用層的調度程序(scheduler)負責目標應用程序的啟動、任務調度運行,并且任務運行必須有一個特定的事件來觸發。根據這個調度機制,本文在nps的應用程序中實現了以下事件(events)及其對應任務的功能。
    (1) reset事件
    完成nps的網絡地址設置,建立lonworks網絡的域和地址,并完成打印機初始化工作。
    (2)timer_expires事件
    在程序中定義了3個周期性定時器:
    stimer repeating snetupdtr=12;
    mtimer repeating maddrtr=300;
    mtimer repeating mpolltr=1000;。
    
    秒級定時器snetupdtr啟動網絡更新,毫秒級定時器maddrtr事件對應的任務通過廣播報文查詢網絡上的節點地址,并更新程序中的所有節點列表。節點結構定義如下:
    typedef struct
    { unsigned int id_num;//唯一id
    char id_descrip[32];//描述網絡地址,定義在neu-ron c的addrdefs.h文件中msg_out_addr id_dest_addr;
    }id_info;
    毫秒級定時器mpolltr事件激發查詢任務,詢問網絡上的節點是否有打印信息。
    (3)msg_arrives事件
    當收到報文時,此事件為真,其對應的任務接收報文,根據報文類型字段,可以區分是命令報文還是欲打印數據報文。
    (4)io_in()事件
    在程序中對應when(io_in(print_busy)==0){…},就是當打印機一旦空閑,就啟動打印任務,把程序中打印緩沖區的數據輸出到打印機。整個nps應用程序的運行機制如圖3所示,每個任務在執行時都調用相應的函數來完成預定功能,函數代碼不在此詳述。
    2.2 應用程序通信協議
    之所以單獨提出這個問題,是因為通訊協議對網絡應用程序至關重要。本文中,nps和其他智能節點間的應用層通信協議為兩級協議:第一層,顯式報文嚴格按照neu-ron c定義的格式、填寫報文的個字段;第二層,對顯式報文中的數據段,應該定義自己的用戶數據規約。<
    
    
    本文描述的網絡打印服務器(nps)可以為工業現場的多個智能裝置提供可靠的打印共享服務,極大地節約了系統成本;并且還可以方便地對nps的功能進一步擴充,構成一個分布式控制系統。lonworks網絡技術[1]是由echelon公司開發的一種現場總線網技術,具有通信可靠、抗干擾能力強的優點,使其在航天控制、工業過程控制、樓宇自動化、通信等領域得到了廣泛的應用。其采用的lontalk協議完全支持osi/iso網絡協議參考模型從物理層直至應用層的全部7層服務。toshiba公司的tmpn3150/3120神經元芯片[2]內嵌了lontalk協議,lontalk協議和一個網絡操作系統作為神經元芯片的固件提供給用戶,方便了用戶開發。神經元芯片支持多種通信介質、多信道和多種通信速率。nps硬件設計采用toshiba公司的tmpn3150神經元芯片,應用程序開發和調試工具為echelon公司的nodebuilder[3],其編程語言為neuron c語言l4,5]。nps能夠與多達64個其他智能設備(id—intelligent device)構成總線型網絡,通信介質為雙絞線,通信速率在78kbps時最大通信距離為1 200 m。系統結構如圖1所示。
    
    1 nps硬件設計
    如圖2所示,nps采用1塊tmpn315081af神經元芯片,配置1片64k×8位flash存儲器作為程序存儲器和1片128k×8位ram作為數據存儲器;神經元芯片的cp0~cp4雙向通信接口和78kbps的收發器構成lon-works網絡接口;tmpn315081af神經元芯片i/o引腳的功能可通過程序靈活配置。在此,i/00~i/07引腳接打印機接口的8位數據線,i/08引腳接打印機選通線(strb),i/09接打印機的“busy”信號線,并要在應用程序中用如下neuron c語句配置:
    io_0 output byte printdata;
    io_8 output bit printstb;
    io_9 output bit printbusy;。
    2 nps應用程序設計
    nps與各個智能節點之間為主從方式,通過查詢完成工作。網絡尋址為domain:subnet:node方式。網絡通信采用顯示報文格式。
    2.1 應用程序運行機制
    tmpn315081af神經元芯片固化了lontalk的全部七層協議[2],位于應用層的調度程序(scheduler)負責目標應用程序的啟動、任務調度運行,并且任務運行必須有一個特定的事件來觸發。根據這個調度機制,本文在nps的應用程序中實現了以下事件(events)及其對應任務的功能。
    (1) reset事件
    完成nps的網絡地址設置,建立lonworks網絡的域和地址,并完成打印機初始化工作。
    (2)timer_expires事件
    在程序中定義了3個周期性定時器:
    stimer repeating snetupdtr=12;
    mtimer repeating maddrtr=300;
    mtimer repeating mpolltr=1000;。
    
    秒級定時器snetupdtr啟動網絡更新,毫秒級定時器maddrtr事件對應的任務通過廣播報文查詢網絡上的節點地址,并更新程序中的所有節點列表。節點結構定義如下:
    typedef struct
    { unsigned int id_num;//唯一id
    char id_descrip[32];//描述網絡地址,定義在neu-ron c的addrdefs.h文件中msg_out_addr id_dest_addr;
    }id_info;
    毫秒級定時器mpolltr事件激發查詢任務,詢問網絡上的節點是否有打印信息。
    (3)msg_arrives事件
    當收到報文時,此事件為真,其對應的任務接收報文,根據報文類型字段,可以區分是命令報文還是欲打印數據報文。
    (4)io_in()事件
    在程序中對應when(io_in(print_busy)==0){…},就是當打印機一旦空閑,就啟動打印任務,把程序中打印緩沖區的數據輸出到打印機。整個nps應用程序的運行機制如圖3所示,每個任務在執行時都調用相應的函數來完成預定功能,函數代碼不在此詳述。
    2.2 應用程序通信協議
    之所以單獨提出這個問題,是因為通訊協議對網絡應用程序至關重要。本文中,nps和其他智能節點間的應用層通信協議為兩級協議:第一層,顯式報文嚴格按照neu-ron c定義的格式、填寫報文的個字段;第二層,對顯式報文中的數據段,應該定義自己的用戶數據規約。<