2006/10/26
2006/10/18
2006/10/17
E0與E1板材(系統傢俱)
1. 關於是什麼E1、E0級標準?全國工商聯櫥櫃專業委員會會長姚良松先生介紹說:現在傢具和櫥櫃都廣泛使用人造板材。為了使板材更加結實和耐用,人造板中需添加防潮劑和黏合劑,這些是游離甲醛的主要來源。E1、E0級標準是歐洲國家根據人造板中游離甲醛含量來劃分的,也是目前中國傢具人造板材使用的標準。其中E1級規定游離甲醛含量點9mg/100g,E0級甲醛含量點3mg/100g(另外一種計算標準:E1級點1.5mg/L,E0點0.5mg/L)。這表明,達到環保標準的板材並不是沒有甲醛,而是甲醛的釋放量達到標準。
業內專家認為,歐派等一些國內品牌櫥櫃現在廣泛使用的E1標準板材已經達到了櫥櫃環保安全使用的要求,可以稱為環保櫥櫃。而E0級板材>儘管環保標準更高,但由於不含綠色防潮劑和黏合劑,其韌性和防潮性能相對就低,容易受潮斷裂,一般可用於傢具的基材,卻不適合用在廚房潮濕的環境中。而且,由於E0級板材成本要比E1級高出兩三成,因此,真正用E0級板材製造櫥櫃的廠家很少。一些廠家宣稱自己使用的是E0級環保板材,實際上往往是在炒作概念。
原文
2.
1.依甲醛釋出量(FORMALDEHYDE EMISSION)分:
a.E2級 甲醛釋出量介於0.1~0.2P.P.M.,即10-20MGR/100G。
b.E1級 甲醛釋出量小於0.1P.P.M,10MGR/100G。
c.E0級 甲醛釋出量LIM→0。
2.依防潮等級分:
a. V313 一般稱防水板(MOISTURE RESIST PARTICLE BOARD):
24小時浸水厚度膨脹率6%。
b. V100 一般稱防潮板:24小時浸水厚度膨脹率6%~12%。
c. V20 一般稱為普通板:24小時浸水厚度膨脹率12%以上。
PS.正本清源:所謂 V313 事實上是一種濕循環測試法。其測試方法如下:
A.在20度C以上之水中放3天
B.在零下72度C環境中冷凍1天
C.在70度C以上環境中乾燥3天
以上之過程重複3次。
在以上這些程序完畢後,這片板子在相對溼度65%及20度C環境中氣候化,
然後在檢驗這片板子的張力、強度及膨脹率。
業內專家認為,歐派等一些國內品牌櫥櫃現在廣泛使用的E1標準板材已經達到了櫥櫃環保安全使用的要求,可以稱為環保櫥櫃。而E0級板材>儘管環保標準更高,但由於不含綠色防潮劑和黏合劑,其韌性和防潮性能相對就低,容易受潮斷裂,一般可用於傢具的基材,卻不適合用在廚房潮濕的環境中。而且,由於E0級板材成本要比E1級高出兩三成,因此,真正用E0級板材製造櫥櫃的廠家很少。一些廠家宣稱自己使用的是E0級環保板材,實際上往往是在炒作概念。
原文
2.
1.依甲醛釋出量(FORMALDEHYDE EMISSION)分:
a.E2級 甲醛釋出量介於0.1~0.2P.P.M.,即10-20MGR/100G。
b.E1級 甲醛釋出量小於0.1P.P.M,10MGR/100G。
c.E0級 甲醛釋出量LIM→0。
2.依防潮等級分:
a. V313 一般稱防水板(MOISTURE RESIST PARTICLE BOARD):
24小時浸水厚度膨脹率6%。
b. V100 一般稱防潮板:24小時浸水厚度膨脹率6%~12%。
c. V20 一般稱為普通板:24小時浸水厚度膨脹率12%以上。
PS.正本清源:所謂 V313 事實上是一種濕循環測試法。其測試方法如下:
A.在20度C以上之水中放3天
B.在零下72度C環境中冷凍1天
C.在70度C以上環境中乾燥3天
以上之過程重複3次。
在以上這些程序完畢後,這片板子在相對溼度65%及20度C環境中氣候化,
然後在檢驗這片板子的張力、強度及膨脹率。
2006/10/13
電話總機
1. 家裡想裝電話總機分機,要多少的預算呢?
2. 外面標準的電話線都是四蕊,,而且四蕊的顏色大部分也都固定,分別為:黃紅藍黑,
如是家用的電話,大部份使用中間兩蕊,也就是紅藍兩蕊,另外兩蕊是備用,您可以將線的一端的四蕊用4P4C或6P4C的電話接頭打上,去接在電話機上,另一端採用剝線的方式,將紅藍兩蕊接在電話盒上面如有使用電話總機的電話系統的電話,就一定要用四蕊的線,且四蕊電話線都有極性,是不能接錯的,接錯的話輕者電話總機的[保險絲燒掉],重者整台電話總機會燒掉。
3. 總機系統可以接無線電話嗎?
4. 電話語音總機交換機TC416A+4支MT-909商用顯示型話機**PABX工廠直營一年保固
使用說明 (下面有問題解答) $5700
5. 東訊SD-(DX)電話總機套裝【含 4部螢幕話機】!加贈(長途、行動、國際)電話節費系統
$8800
6. 東訊SD-300 電話總機套裝 (主機*1部+SD-7531S 型話機*11部+停電專用電池)
$10000 (話機不用這麼多台)
7. @降價商品促銷@Panasonic國際數位電話總機+數位電話4台2心配線十分簡單可自己裝8000
8. 國際數位電話總機可作無線總機+數位螢幕顯示電話5台優惠促銷價14000
9. 一般總機與pabx總機的不同:
PABX就是交換機,使用一般標準電話機當分機,當然也包括一般無線話機。
按鍵式總機是話機與總機配套銷售,不能使用一般標準話機當分機,由於是專用話機所以面板控制按鍵、顯示燈號比較豐富,功能較多操作也很便利,這種類型的總 機使用在中小型辦公室很適合,東訊DX系列就是這種系統,可是缺點是不能使用一般標準話機,而且更換不同廠牌總機時所有話機都必須一起更換。
總機看起來都不大(30cm*20cm*4.8cm) ,不過都要接電源。
http://www.mobile01.com/topicdetail.php?f=168&t=154942
2. 外面標準的電話線都是四蕊,,而且四蕊的顏色大部分也都固定,分別為:黃紅藍黑,
如是家用的電話,大部份使用中間兩蕊,也就是紅藍兩蕊,另外兩蕊是備用,您可以將線的一端的四蕊用4P4C或6P4C的電話接頭打上,去接在電話機上,另一端採用剝線的方式,將紅藍兩蕊接在電話盒上面如有使用電話總機的電話系統的電話,就一定要用四蕊的線,且四蕊電話線都有極性,是不能接錯的,接錯的話輕者電話總機的[保險絲燒掉],重者整台電話總機會燒掉。
3. 總機系統可以接無線電話嗎?
4. 電話語音總機交換機TC416A+4支MT-909商用顯示型話機**PABX工廠直營一年保固
使用說明 (下面有問題解答) $5700
5. 東訊SD-(DX)電話總機套裝【含 4部螢幕話機】!加贈(長途、行動、國際)電話節費系統
$8800
6. 東訊SD-300 電話總機套裝 (主機*1部+SD-7531S 型話機*11部+停電專用電池)
$10000 (話機不用這麼多台)
7. @降價商品促銷@Panasonic國際數位電話總機+數位電話4台2心配線十分簡單可自己裝8000
8. 國際數位電話總機可作無線總機+數位螢幕顯示電話5台優惠促銷價14000
9. 一般總機與pabx總機的不同:
PABX就是交換機,使用一般標準電話機當分機,當然也包括一般無線話機。
按鍵式總機是話機與總機配套銷售,不能使用一般標準話機當分機,由於是專用話機所以面板控制按鍵、顯示燈號比較豐富,功能較多操作也很便利,這種類型的總 機使用在中小型辦公室很適合,東訊DX系列就是這種系統,可是缺點是不能使用一般標準話機,而且更換不同廠牌總機時所有話機都必須一起更換。
總機看起來都不大(30cm*20cm*4.8cm) ,不過都要接電源。
http://www.mobile01.com/topicdetail.php?f=168&t=154942
2006/10/12
升降曬衣架
簡易型:http://tw.page.bid.yahoo.com/tw/auction/1145148061 ($980)
中級:http://tw.f3.page.bid.yahoo.com/tw/auction/c23893084 (三桿) $3800
電動:http://tw.f4.page.bid.yahoo.com/tw/auction/d20868727 (有點醜,有紫外線殺菌燈,號稱法國馬達) $15800
遙控:http://tw.f2.page.bid.yahoo.com/tw/auction/b29131208 (一組似乎只有兩隻曬衣桿,很便宜) $6500
pchome: http://shopping.pchome.com.tw/clotheshorse/detail.php?pid=CSU00003 (不夾繩設計)$1999
手搖式:http://home.anet.net.tw/ha106086/main04.htm $3000-3600
中級:http://tw.f3.page.bid.yahoo.com/tw/auction/c23893084 (三桿) $3800
電動:http://tw.f4.page.bid.yahoo.com/tw/auction/d20868727 (有點醜,有紫外線殺菌燈,號稱法國馬達) $15800
遙控:http://tw.f2.page.bid.yahoo.com/tw/auction/b29131208 (一組似乎只有兩隻曬衣桿,很便宜) $6500
pchome: http://shopping.pchome.com.tw/clotheshorse/detail.php?pid=CSU00003 (不夾繩設計)$1999
手搖式:http://home.anet.net.tw/ha106086/main04.htm $3000-3600
2006/10/03
使用SCSI Generic Driver與usb讀卡機進行讀寫
利用SCSI Generic Driver 與usb讀卡機溝通
1. 在linuxconfig中勾選 SCSI support--> SCSI generic support
2. 在程式中需要include
3. sg_io_hdr struct介紹
typedef struct sg_io_hdr
{
int interface_id; /* [i] 'S' for SCSI generic (required) */
int dxfer_direction; /* [i] 資料傳輸方向 (SG_DXFER_FROM_DEV, SG_DXFER_TO_DEV, SG_DXFER_NONE) */
unsigned char cmd_len; /* [i] SCSI 指令長度 ( <= 16 bytes) */
unsigned char mx_sb_len; /* [i] max length to write to sbp */
unsigned short iovec_count; /* [i] 0 implies no scatter gather */
unsigned int dxfer_len; /* [i] 讀取寫入資料長度 */
void * dxferp; /* [i], [*io] points to data transfer memory
or scatter gather list */
unsigned char * cmdp; /* [i], [*i] points to command to perform */
unsigned char * sbp; /* [i], [*o] points to sense_buffer memory */
unsigned int timeout; /* [i] MAX_UINT->no timeout (unit: millisec) */
unsigned int flags; /* [i] 0 -> default, see SG_FLAG... */
int pack_id; /* [i->o] unused internally (normally) */
void * usr_ptr; /* [i->o] unused internally */
unsigned char status; /* [o] scsi status */
unsigned char masked_status;/* [o] shifted, masked scsi status */
unsigned char msg_status; /* [o] messaging level data (optional) */
unsigned char sb_len_wr; /* [o] byte count actually written to sbp */
unsigned short host_status; /* [o] errors from host adapter */
unsigned short driver_status;/* [o] errors from software driver */
int resid; /* [o] dxfer_len - actual_transferred */
unsigned int duration; /* [o] time taken by cmd (unit: millisec) */
unsigned int info; /* [o] auxiliary information */
} sg_io_hdr_t; /* 64 bytes long (on i386) */
PS. http://tldp.org/HOWTO/SCSI-Generic-HOWTO/index.html 有詳細介紹
4. 需要注意裝置被掛載的位置。我的usb讀卡機裝置利用generic driver的話,是被掛載於/dev/scsi/host0/bus0/target0/lun0/generic。
一般則是會在 /dev/sg0 or /dev/sg1。
5. 範例程式 :實做了 inquiry (0x12) and read10 (0x28) command.
#include
#include
#include
#include
#include
#include
#include /* take care: fetches glibc's /usr/include/scsi/sg.h */
/* This is a simple program executing a SCSI INQUIRY command using the
sg_io_hdr interface of the SCSI generic (sg) driver.
* Copyright (C) 2001 D. Gilbert
* This program is free software. Version 1.01 (20020226)
*/
#define INQ_REPLY_LEN 96
#define INQ_CMD_CODE 0x12
#define INQ_CMD_LEN 6
#define RD_CMD_LEN 10
#define RD_CMD_CODE 0x28
#define RD_LEN 512
int main(int argc, char * argv[])
{
int sg_fd, k;
int readcmd = 0;
int rlen = 512;
unsigned char inqCmdBlk[INQ_CMD_LEN] =
{INQ_CMD_CODE, 0, 0, 0, INQ_REPLY_LEN, 0};
unsigned char rdCmdBlk[RD_CMD_LEN];
/* This is a "standard" SCSI INQUIRY command. It is standard because the
* CMDDT and EVPD bits (in the second byte) are zero. All SCSI targets
* should respond promptly to a standard INQUIRY */
unsigned char inqBuff[INQ_REPLY_LEN];
unsigned char sense_buffer[32];
unsigned char rdBuff[RD_LEN];
sg_io_hdr_t io_hdr;
if (2 > argc) {
printf("Usage: 'sg_simple0'\n");
return 1;
}
if (argc == 3) {
if (strcmp(argv[2],"r")==0) readcmd = 1;
}
if ((sg_fd = open(argv[1], O_RDONLY)) < 0) {
/* Note that most SCSI commands require the O_RDWR flag to be set */
perror("error opening given file name");
return 1;
}
/* It is prudent to check we have a sg device by trying an ioctl */
if ((ioctl(sg_fd, SG_GET_VERSION_NUM, &k) < 0) || (k < 30000)) {
printf("%s is not an sg device, or old sg driver\n", argv[1]);
return 1;
}
if (readcmd) {
memset(rdCmdBlk,0,sizeof(rdCmdBlk));
rdCmdBlk[0] = RD_CMD_CODE;
rdCmdBlk[8] = 1;
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = sizeof(rdCmdBlk);
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer);
io_hdr.dxfer_direction = SG_DXFER_FROM_DEV;
io_hdr.dxfer_len = RD_LEN;
io_hdr.dxferp = rdBuff;
io_hdr.cmdp = rdCmdBlk;
io_hdr.sbp = sense_buffer;
io_hdr.timeout = 20000; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
} else {
/* Prepare INQUIRY command */
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = sizeof(inqCmdBlk);
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer);
io_hdr.dxfer_direction = SG_DXFER_FROM_DEV;
io_hdr.dxfer_len = INQ_REPLY_LEN;
io_hdr.dxferp = inqBuff;
io_hdr.cmdp = inqCmdBlk;
io_hdr.sbp = sense_buffer;
io_hdr.timeout = 20000; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
}
if (ioctl(sg_fd, SG_IO, &io_hdr) < 0) {
perror("sg_simple0: Inquiry SG_IO ioctl error");
return 1;
}
/* now for the error processing */
if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK) {
if (io_hdr.sb_len_wr > 0) {
printf("INQUIRY sense data: ");
for (k = 0; k < io_hdr.sb_len_wr; ++k) {
if ((k > 0) && (0 == (k % 10)))
printf("\n ");
printf("0x%02x ", sense_buffer[k]);
}
printf("\n");
}
if (io_hdr.masked_status)
printf("INQUIRY SCSI status=0x%x\n", io_hdr.status);
if (io_hdr.host_status)
printf("INQUIRY host_status=0x%x\n", io_hdr.host_status);
if (io_hdr.driver_status)
printf("INQUIRY driver_status=0x%x\n", io_hdr.driver_status);
}
else { /* assume INQUIRY response is present */
if (readcmd) {
char *p = (char *)rdBuff;
printf("read buffer content:\n");
printf("byte 511: %x, byte 512: %x\n",*(p+510),*(p+511));
}else {
char * p = (char *)inqBuff;
printf("Some of the INQUIRY command's response:\n");
printf(" %.8s %.16s %.4s\n", p + 8, p + 16, p + 32);
printf("INQUIRY duration=%u millisecs, resid=%d\n",
io_hdr.duration, io_hdr.resid);
}
}
close(sg_fd);
return 0;
}
1. 在linuxconfig中勾選 SCSI support--> SCSI generic support
2. 在程式中需要include
3. sg_io_hdr struct介紹
typedef struct sg_io_hdr
{
int interface_id; /* [i] 'S' for SCSI generic (required) */
int dxfer_direction; /* [i] 資料傳輸方向 (SG_DXFER_FROM_DEV, SG_DXFER_TO_DEV, SG_DXFER_NONE) */
unsigned char cmd_len; /* [i] SCSI 指令長度 ( <= 16 bytes) */
unsigned char mx_sb_len; /* [i] max length to write to sbp */
unsigned short iovec_count; /* [i] 0 implies no scatter gather */
unsigned int dxfer_len; /* [i] 讀取寫入資料長度 */
void * dxferp; /* [i], [*io] points to data transfer memory
or scatter gather list */
unsigned char * cmdp; /* [i], [*i] points to command to perform */
unsigned char * sbp; /* [i], [*o] points to sense_buffer memory */
unsigned int timeout; /* [i] MAX_UINT->no timeout (unit: millisec) */
unsigned int flags; /* [i] 0 -> default, see SG_FLAG... */
int pack_id; /* [i->o] unused internally (normally) */
void * usr_ptr; /* [i->o] unused internally */
unsigned char status; /* [o] scsi status */
unsigned char masked_status;/* [o] shifted, masked scsi status */
unsigned char msg_status; /* [o] messaging level data (optional) */
unsigned char sb_len_wr; /* [o] byte count actually written to sbp */
unsigned short host_status; /* [o] errors from host adapter */
unsigned short driver_status;/* [o] errors from software driver */
int resid; /* [o] dxfer_len - actual_transferred */
unsigned int duration; /* [o] time taken by cmd (unit: millisec) */
unsigned int info; /* [o] auxiliary information */
} sg_io_hdr_t; /* 64 bytes long (on i386) */
PS. http://tldp.org/HOWTO/SCSI-Generic-HOWTO/index.html 有詳細介紹
4. 需要注意裝置被掛載的位置。我的usb讀卡機裝置利用generic driver的話,是被掛載於/dev/scsi/host0/bus0/target0/lun0/generic。
一般則是會在 /dev/sg0 or /dev/sg1。
5. 範例程式 :實做了 inquiry (0x12) and read10 (0x28) command.
#include
#include
#include
#include
#include
#include
#include
/* This is a simple program executing a SCSI INQUIRY command using the
sg_io_hdr interface of the SCSI generic (sg) driver.
* Copyright (C) 2001 D. Gilbert
* This program is free software. Version 1.01 (20020226)
*/
#define INQ_REPLY_LEN 96
#define INQ_CMD_CODE 0x12
#define INQ_CMD_LEN 6
#define RD_CMD_LEN 10
#define RD_CMD_CODE 0x28
#define RD_LEN 512
int main(int argc, char * argv[])
{
int sg_fd, k;
int readcmd = 0;
int rlen = 512;
unsigned char inqCmdBlk[INQ_CMD_LEN] =
{INQ_CMD_CODE, 0, 0, 0, INQ_REPLY_LEN, 0};
unsigned char rdCmdBlk[RD_CMD_LEN];
/* This is a "standard" SCSI INQUIRY command. It is standard because the
* CMDDT and EVPD bits (in the second byte) are zero. All SCSI targets
* should respond promptly to a standard INQUIRY */
unsigned char inqBuff[INQ_REPLY_LEN];
unsigned char sense_buffer[32];
unsigned char rdBuff[RD_LEN];
sg_io_hdr_t io_hdr;
if (2 > argc) {
printf("Usage: 'sg_simple0
return 1;
}
if (argc == 3) {
if (strcmp(argv[2],"r")==0) readcmd = 1;
}
if ((sg_fd = open(argv[1], O_RDONLY)) < 0) {
/* Note that most SCSI commands require the O_RDWR flag to be set */
perror("error opening given file name");
return 1;
}
/* It is prudent to check we have a sg device by trying an ioctl */
if ((ioctl(sg_fd, SG_GET_VERSION_NUM, &k) < 0) || (k < 30000)) {
printf("%s is not an sg device, or old sg driver\n", argv[1]);
return 1;
}
if (readcmd) {
memset(rdCmdBlk,0,sizeof(rdCmdBlk));
rdCmdBlk[0] = RD_CMD_CODE;
rdCmdBlk[8] = 1;
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = sizeof(rdCmdBlk);
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer);
io_hdr.dxfer_direction = SG_DXFER_FROM_DEV;
io_hdr.dxfer_len = RD_LEN;
io_hdr.dxferp = rdBuff;
io_hdr.cmdp = rdCmdBlk;
io_hdr.sbp = sense_buffer;
io_hdr.timeout = 20000; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
} else {
/* Prepare INQUIRY command */
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = sizeof(inqCmdBlk);
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer);
io_hdr.dxfer_direction = SG_DXFER_FROM_DEV;
io_hdr.dxfer_len = INQ_REPLY_LEN;
io_hdr.dxferp = inqBuff;
io_hdr.cmdp = inqCmdBlk;
io_hdr.sbp = sense_buffer;
io_hdr.timeout = 20000; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
}
if (ioctl(sg_fd, SG_IO, &io_hdr) < 0) {
perror("sg_simple0: Inquiry SG_IO ioctl error");
return 1;
}
/* now for the error processing */
if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK) {
if (io_hdr.sb_len_wr > 0) {
printf("INQUIRY sense data: ");
for (k = 0; k < io_hdr.sb_len_wr; ++k) {
if ((k > 0) && (0 == (k % 10)))
printf("\n ");
printf("0x%02x ", sense_buffer[k]);
}
printf("\n");
}
if (io_hdr.masked_status)
printf("INQUIRY SCSI status=0x%x\n", io_hdr.status);
if (io_hdr.host_status)
printf("INQUIRY host_status=0x%x\n", io_hdr.host_status);
if (io_hdr.driver_status)
printf("INQUIRY driver_status=0x%x\n", io_hdr.driver_status);
}
else { /* assume INQUIRY response is present */
if (readcmd) {
char *p = (char *)rdBuff;
printf("read buffer content:\n");
printf("byte 511: %x, byte 512: %x\n",*(p+510),*(p+511));
}else {
char * p = (char *)inqBuff;
printf("Some of the INQUIRY command's response:\n");
printf(" %.8s %.16s %.4s\n", p + 8, p + 16, p + 32);
printf("INQUIRY duration=%u millisecs, resid=%d\n",
io_hdr.duration, io_hdr.resid);
}
}
close(sg_fd);
return 0;
}