精华内容
下载资源
问答
  • 目前,温度传感器越来越多的在不同领域有所使用,在使用过程中不可避免的会出现这样或那样的问题。  温度传感器技术已经非常成熟了,... 第、被测介质温度升高或者降低时变送输出没有变化。  这种情况大多是...

      目前,温度传感器越来越多的在不同领域有所使用,在使用过程中不可避免的会出现这样或那样的问题。

      温度传感器技术已经非常成熟了,在各工厂中非常常见,温度传感器经常和一些仪表配套使用,在配套使用过程中经常有一些小的故障。

      故在此列举几种常见的故障及遇到故障之后的解决方法:

      第一、被测介质温度升高或者降低时变送器输出没有变化。

      这种情况大多是温度传感器密封的问题,可能是由于温度传感器没有密封好或者是在焊接的时候不小心将传感器焊了个小洞,这种情况一般需要更换传感器外壳才能解决。

      第二、输出信号不稳定。

      这种原因是温度源本事的原因,温度源本事就是一个不稳定的温度,如果是仪表显示不稳定,那就是仪表的抗干扰能力不强的原因。

      第三、变送器输出误差大。

      这种情况原因就比较多,可能是选用的温度传感器的电阻丝不对导致量程错误,也有可以能是传感器出厂的时候没有标定好。

      温度传感器出现故障的情况很少见,只要出厂的时候进行仔细的检测,这些情况都是可以避免的,所以温度传感器在出厂的时候一地要进行检验,客户也可找传感器厂家索要出厂检测报告进行参考。

    展开全文
  • 转:AIX菜鸟成长日志

    2011-03-08 16:45:56
    、机器巡检基本知识 ;X c2[!G7OFb0巡检一般又厂商或者代理商来做。B&XM7X%G;]0第:首先是机房温度以及湿度的检查,当然这些一般情况都没问题。dCx;e5u x1J0参考值:温...

    一、机器巡检基本知识


    ;X c2[!G7OFb0
    巡检一般又厂商或者代理商来做。
    B&XM7X%G;]0
    第一:首先是机房温度以及湿度的检查,当然这些一般情况都没问题。
    dCx;e5u x1J0
             参考值:温度(摄氏         10 40
    g T [t+HqqfJ3UV0
                         湿度                           8% 80%ITPUB个人空间\ ]5Y&F"f!f
    第二:就是关于电源的检测,这个只要不是新装机,一般没问题。ITPUB个人空间UH)upNH?*C)P3q(~
            参考值: 零-地电压        小于1V
    /|^+_$@2\? Y0
                         -地电压        200-240V
    mxTCw;YE T0
            补充:当然59系列的机器相间380V,相地240VITPUB个人空间_]G XO*ShcXM
    第三:关于报错。
    ,M d6ne%JOyZ/gq0
             主要查看硬件的永久性报错   #errpt -dH | pg
    {i!k%OK6O0h F~I(i0
                 软件的永久性报错   #errpt -dS | pg
    @si b _3n;k^f0
             还有系统又没又报警灯(如果不正常,在后面的帖子将会细讲)ITPUB个人空间'hM H Z,V U9I|
    第三:机器的序列号:#uname -MuITPUB个人空间 o+Qt{ Y.EJ.b(? ?"Y
    第四:操作系统版本:#oslevel -r      注:又时候不能使用是因为系统版本低的原因
    We.r{3uL5z T0
    第五:其他检测
    ;v9~dA:Y0
    ITPUB个人空间 _Y(T+Fyq"}p?+e D
    执行sysdumpdev –l 检查dump是否设置为always allow sysdump
    'nWQ GxL+L*r0
    执行sysdumpdev –e检查当前dump大小应该为主dump设备的大小的80%以下
    ^ a3E9N |6AGY0
    执行lsvg -l rootvg检查有否"stale"状态的逻辑卷
    %O){7~{/NX0
    执行lsps -s检查内存交换区占用情况
    g"b,k*kJ8q0
    执行df –k检查文件系统的分配状况,一般不要超过80%
    6nbDtxw0
    执行lsdev –Ccdisk检查硬盘状态为available
    Hhz1a*thQ0
    执行lsdev –Ccadapter检查PCI卡状态为availableITPUB个人空间`v&t.PR3ed!vU G
    执行lsdev –Cctape检查磁带机状态为availableITPUB个人空间#t7p.bA.s(r
    执行lsdev – Ccprocessor检查CPU状态为available
    ,I[T KE6`0
    执行 lsattr –El sys0|grep autorestart  检查系统crash后是否自动重新启动 ITPUB个人空间Iy}(AT8d8X
    执行lsattr –El sys0|grep cpuguard检查CPU GUARD是否开启ITPUB个人空间%t;{ Y/H(GH\gQ1] I
    执行lsattr –El mem0检查内存状态正常size=goodsizeITPUB个人空间? r#~[)u{f8@
    执行 vmstat 2 
    (Yj wEMH6~ph0
    iostat,topas观察us,sy,pi,po,内存占用率,硬盘读写速度等检查是否有性能瓶颈
    U;uT&|1wI%W5tr0
    执行netstat –innetstat –rn观察网络状态
    PR`nXkU%kJ0
    执行entstat –d enX检测网卡运行速率与交换机速率是否匹配(网卡速率由10M半工改为自适应时,缺省网关会丢失。更改网卡速率后需要在系统中执行smitty route操作重新激活缺省路由。如果进行网卡速率的调整,请务必小心。)ITPUB个人空间p Z5ZEA
    执行ping命令检查网络连接状况ITPUB个人空间gWwas#B
    执行lsdev –C|grep aio 检查异步IO是否可用
    \#W$_,OHs?0X0
    执行lssrc –g cluster查看是否有三个进程均为active状态(这个主要看起了几个HA的进程了,有的时候是一个或两个)ITPUB个人空间)im jd"EE
    执行/usr/sbin/cluster/clstat –a查看cluster状态是否正常ITPUB个人空间&e*D7Ue rI @
    检查/etc/hosts确保双机配置中IP别名不会存在包含关系(share_ip1包含了share_ipITPUB个人空间0R ykss5s9?/X+o q
    执行
    4X ~u%c:j8_ @)~-i q0
    more /usr/es/adm/cluster.logITPUB个人空间_3rZ(v m^!b1S
    more /usr/es/sbin/cluster/history/*
    *@J)l-K-xhL0
    cat /tmp/hacmp.out
    +h0rc'O`8Tc-L q0
    检查这三个日志中是否有error或者fail.ITPUB个人空间-|i([lneV U jo
    检查7133面板上的指示灯,如果黄灯亮则需要诊断问题ITPUB个人空间'wycq&CC:qR_5g
    HOTspare 磁盘检测
    S$A(lT`]0
    1、检查是否有raid保护 # smitty ssaraid---&gtList All Defined SSA RAID Arrays
    M[3vZA(^.G0
    2、检查是否有Hot Spare # smitty ssaraid---&gtList Components in a Hot Spare Pool
    /h$ZRL}?C.r6I$z0
     List All Defined SSA RAID Arrays查看7133à对于7133,执行Smitty ssaraid raid状态,正常应该为good状态。ITPUB个人空间i*e4Ld.cR%f
    Change/Show Use of an SSAà对于7133,执行Smitty ssaraid Physical Disk查看7133硬盘状态,正常应该为member或者spare状态ITPUB个人空间 g7],{J%Hy
    对于FastT,分别登录上两个controller (登陆方法后面详细讲解),查看是否有错误日志。
    GOX-hSc f)n0
    记录检查结果
    ru h0t!@p,~0

    3X_ Z v*Q:n%J0
    基本就是这些命令吧,如果我有遗漏后面继续补充。
    &TE#Hz+aKR2~ _e\0
    ITPUB个人空间g:J w3jLf.g8b%Dh
    对了,如果是华为和IBM的联合巡检就会多出几个项目:ITPUB个人空间 o4oP#j/} w6g6w8`

    }LX8?@r En0
    cpu (主频*数量)    #lsattr -El proc0
    !Cb.u[yF4M0
    内置磁盘个数:  #lsdev -Ccdisk     
    9np/V3B&L l/?0
    网卡信息:        #lsdev -CcadapterITPUB个人空间T7zJ#dd} S!u
    -------------------------------------------------------------------------------------------------------------

    二、DS8300 硬盘更换 

    当前状况:DS8300硬盘损坏
    [-nGH"?F9`E$}0

    :Wsu o}x5~ `0
    首先要在HMC上查看具体的报错信息,一般会有多个,先看最早的,因为一般可能几个错误报的都是同一个硬盘的错误。ITPUB个人空间N3a't*~XD
    在报错中我们可以看见报错的Location Code,上面一般都是U****-D*-P*-T* 还有笼子号
    ND^ d n4x ?0
    顺着这个号找到错误的硬盘,DS83003个机柜,里面有控制台和两台570的是主柜,一般编号是D0,顺着就是D1\D2
    J'iMK)p,yc$qe]d0
    每个笼子有16块硬盘,找到笼子以后按T后面的数字数就行了,这个是前话,因为这个时候你还不能把盘。ITPUB个人空间apNY:i6r3|Oy

    *I6?&vh5dU/[0
    现在你在报错信息上面右键 Repair,(后面的步骤必须看清楚系统提示)然后弹出一个确认,你next,它就会提示说要切断该硬盘的电源,然后的界面不要急着NEXT,应该这里提示你更换后NEXT,这个时候也会弹出一个系统的帮助文件
    EXg3eA}%O0

    1Wni'y$l&MU0
    现在你就可以拔硬盘了,正确的方法就是将卡扣拉松后等待70秒,然后硬盘角度微向上将硬盘慢慢抽出,这样可以避免将盘底部的电路划伤,在弹出的HELP上有图示。
    vY#UO$GU0

    s?#BY [8H0
    然后插入新的硬盘,现在点NEXT,后面的基本就是漫长的等待了,大概2个小时左右会告诉你数据将会重建,如果有问题会CALL HOME等信息,关了走人就可以了,后面失败的几率很小了。
    zzfs$yi B0
    ITPUB个人空间k,E7h ^6[GV`|
    这个就是DS8300的换盘步骤,希望有错误请老鸟们提出,我好改正。

    三、630机器升级微码

    ITPUB个人空间NmRr9Z!hg,n)]O.X6kk
    ITPUB个人空间h}!_?~L!GX^P
    这次是要将一台630微码升级到07045这个版本。ITPUB个人空间c5O,P"CX1h/b v&iV#L
    首先下载微码了,这个不用说了,到IBM的网站上一步一步找就可以了。
    %k tG#NF0
    下载完是一个70286C4F.BIN 的文件ITPUB个人空间bVT5]9I? f~+c
    ITPUB个人空间,f.Kx}L,V]_|a
    然后在机器的  /tmp目录下新建 目录 /fwupdate  ,如果存在这个目录就一定要清空里面的内容,然后 把70286C4F.BIN 上传到这个目录。ITPUB个人空间_Fy/a~3?H

    n)FaVM9^1T0
    Ftp的命令都会哈:
    7vU`'` ]m0
    ftpITPUB个人空间 eJ8R!IM2I/K.o
    open ***.***.***.***
    r-y.bL3U+Py$^4H0
    user/password
    S$O9VM$n;S ?5{9Q0
    prompt          关回显ITPUB个人空间5t.j(rY(BH r-eg
    bin                二进制
    *aH |4|#|c&ETz7T1{0
    lcd F:/ITPUB个人空间&M0SfhND1_#t
    cd /tmp/fwupdateITPUB个人空间9j1K L d x`R8p+e
    mput 70286C4F.BIN
    p i4AB#X jc0
    byeITPUB个人空间!mpkhz`0I
    -----------------------------------------------------------ITPUB个人空间3G`!Yz(H{Q&aF
    升级前需要注意几个问题:ITPUB个人空间 K)r;},[;X6K
    1.系统必须升级到5103版本以后
    9~4EW T#t3V b0e0
    2.HMC的版本必须是3.12 或更高,我这里用KVM,所有不管这个事情ITPUB个人空间4o;}!y8t M
    ITPUB个人空间3n$v!w4N~ m(M/E.\
    现在要确认客户已经停了所有业务,并且有除rootvg外其他的VG都没已经umount下去了。
    ;U q#jI S&E'] x6T0

    7t-mke:G#[0
    确认OK,如下:
    2]/z&okU#vl0
    #cd /tmp/fwupdateITPUB个人空间~/|8Q@G^Q;C
    #chmod +x 70286C4F.BIN           加上执行权限ITPUB个人空间YJsKW c8QN"D E3^|

    spoh_#k(u4Y,RY0
    #./70286C4F.BIN            解压缩ITPUB个人空间E?1i)G$P2Wpqn&_
    解压缩后会出来一个文件 3R070425.img
    u^D2u{4N T ow0
    然后最好校验一下这个文件ITPUB个人空间e8~ O }-EG
    #sum 3R070425.img
    2|'Y7~3dRB/y0
    对比微码给出的校验值,这个最好还是要做,我们一个老大经常教导我们:警钟长鸣,事故为零
    j'm Hu|n9fx0
    这个的校验码好像是47728,详细的自己再查一下,以网站上的为准ITPUB个人空间2}[l:\]~
    ITPUB个人空间f1Q7q V;|#y"LmH
    校验没问题,现在就开始升微码
    Cr5g1@:bwoE+Yy0
    ITPUB个人空间7M {%L;ilL
    #cd /usr/lpp/diagnostics/bin
    4BG+Cq7wxXb/S0
    #./update_flash –f /tmp/fwupdate/3R070425.img
    m7_(Uwb W^5[j0

    {6jUU5^2Op0
    这个两个命令下去,机器重新启动,要大概半个小时,启动后就是新的微码了。ITPUB个人空间'Hb@\*d[;b Q3j
    ITPUB个人空间q(UY'q"Fc0nx
    启动后:
    ;LdP'jr]0
    #lsmcode –cITPUB个人空间c IH4S![9WP/GR
    那么ITPUB个人空间L!v%R.ldq
    Platform firmware level is 3R070425

    四、DS4700更换硬盘


    .P#KB1n#i d0
    首先谢谢各位的支持了。ITPUB个人空间YD/|2_&qX2} fY
    今天继续.......
    x!b-I&Z*ta0
    今天客户的一台DS4700一个硬盘挂了,拿到备件后就到现场了。ITPUB个人空间 A)vLK+~2WI9s$? }J C

    q H} ?K?0
    先打开本本,然后找到那台出问题的DS4700,然后连到控制器A上。ITPUB个人空间#n/j^5xt0k R!F
    这里我细说一下,DS4700后面左面的是控制器A,右边的是控制器B
    6HL"z*I$I8VH0
    每个控制器有两个电口,右边的为1号,左边为2号。IP地址如下:
    &PD0A(vz~A,c|0

    Lu.P'f6q RT0
    控制器A--1 左口默认IP地址:  192.168.129 .101
    fKl;[ s:Np _/o0
    控制器A--1 右口默认IP地址:  192.168.128 .101
    #]4^6Xf pl4Ks(Z4] U0

    F#F/Y K*y0

    W yq dx m'A0
    控制器B--1 左口默认IP地址:  192.168.128 .102
    4MoQk/~0
    控制器B--1 右口默认IP地址:  192.168.129 .102ITPUB个人空间Wt7N1Q(Y(^6D5R-h2^0^

    3mPDt.Lz,NG1G0
    我连了控制器A的右口,然后配置IP地址为192.168.128 .102,掩码为255.255.255.0
    nW!Jmq0
    ITPUB个人空间q4r&N1l/ZQ*?YL;C#}
    ping 192.168.128 .101 ,PING 的通的话打开Storage Manager ClientITPUB个人空间%X;?x/cL j
    可以直接让它自动检测,检测不到的话你输入192.168.128 .101就连上了ITPUB个人空间,QFh6cm ~
    ITPUB个人空间d;]4gSa|"et7y
    然后先点上面的听诊器图标,这里报了两个错误,一个是PowerSupply的,另一个是Disk FailedITPUB个人空间;K"P8b ^ {4l
    硬盘挂了是今天的主题,但是出了个电源的报错,先处理下
    )K/@+n&U1B:e0
    仔细看了一下说冗余电源没有连通什么什么的,仔细检查了下发现冗余电源的开关没打开,将开关按下,冗余电源点亮了,重新看出错,只剩下硬盘的。ITPUB个人空间1h l.R'Le LNy

    T a7n#Z:f)c2Il#Mx0
    这里多说一句,做任何操作最好严格的按照ServiceGuide一步一步来,不要急,尤其是搞硬盘这些,乱搞是会出问题的。
    $I gT b9q:fv7H0
    现在从SM里面先看看情况,明显的看到Slot 13上的硬盘已经是Failed的状态了,一个红色的叉,这个时候你千万要看清楚Hotspare盘是不是已经成功接管了,鼠标放到一个全灰底部有十字的盘上看看是不是写了已经是In Use状态,并且接管的是Slot13的盘,当这一切确认后,开始换盘。
    'A*[P \i5JV0
    ITPUB个人空间^8P@w@_&Ox-t:q
    先仔细确认坏盘的位置(有黄色警示灯的,这个拔错了就没法说你了)
    \d.E;Kl`0
    先把手在机架上随便摸摸,或者带上机架上的防静电手腕
    !E)~_;T'N:o[x(x0
    把卡扣拉松,等待70秒,然后把坏盘小心抽出,再等待70秒插入新盘,推紧,然后推上卡扣。
    H4GH.w%}'vfUny0

    ohn Z^g0
    这个过程中不要断开你的SM软件,这个时候你看SMSlot13上的那个盘上面会出现一个旋风的图案,那是盘开始Building了,等待大概2个小时左右,等这个盘的状态变成了和其他盘状态一样就可以了。这个时候Hotspare盘会恢复为空闲状态。
    8Mt)Jy#q;{0
    ITPUB个人空间x [2b+B}k~ iI
    整个过程就完了。

    五、IBM SVC 的基本安装步骤

    ITPUB个人空间}|0s%s ^ i
    SVC我还是先简单介绍一下吧,因为今天我也是第一次接触这个东西。
    f/M eXYM7tZw0

    "_,A{ L ]z.C1u&W0
    SVC通俗的理解可以认为是一个统一的容灾平台,就是可以把各个厂家的存储产品虚拟成IBM存储管理格式进行统一管理。SVC有一种Image mode运行模式,可以透明的加入SAN SVC的基本功能,当SVC被加入到一个现有的SAN 环境中时,不需要做数据迁移,SVC 把现有的磁盘配置原封不动的继承下来(这是SAN VCImage mode),这样对服务器上的应用是完全透明的。
    (_^:^I:j/UC\&e |8q0

    P+M~#i?4}0
    摘抄一段专业点的解释:ITPUB个人空间8|-v)J v|7u
        – 高扩展性,可以多结点cluster结构并行扩展ITPUB个人空间DD+Ws9B
        – 高开放性,支持所有主流的存储和主机ITPUB个人空间5]K/X)xx9K TxR
        – 独立性,位于中间层,不占用主机的CPU和存储资源ITPUB个人空间J;L6E(or#@X [
        – 高性能,IBM SVC目前具有业界第一的SPC-1测试性能,具有单独的处理器和CACHE帮助存储分担压力ITPUB个人空间L4U+z4gx2y
        – 出色的功能,SVC具有统一的容灾和虚拟存储的功能等,是不同存储具有相同功能。ITPUB个人空间3Pp#~zN&d AR
        – 集中管理,为用户提供统一的存储管理接口,不同存储平台可以统一管理ITPUB个人空间K(kZLo2XKuCl

    { [0g5_7u0
    因为今天我的任务上架并调试OK,具体的配置慢慢来掌握吧。ITPUB个人空间K{'?V8Z3j
    现在客户这里是两套SVC,具体的组件有这些,一个X机的服务器,一套显示屏+鼠标键盘,两个UPS电池,两个SVC服务器。ITPUB个人空间)jGb'cA1W a&rt)R

    H!K k(y(p0^0
    上架没什么说的 ,我的方式就是,最下面是两个1UUPSUPS间空了一个U保证散热,然后装上管理的服务器和显示屏,最上面装两个SVC。对了,有一点就是UPS上架前需要把前面板拆下,然后把电源线接上,接的时候会蹦出火花,是正常的,我当时接的时候吓出一身冷汗 ,赶紧看ServiceGuide,上面说这是正常的,我才松了一口气。
    !Z4g_CxS`,BoR0

    rm$N7{yQ:Er3D`0

    9eC"g6a@ {v0
    上架完了就比较重要了,这里有些讲究,SVC要最后上电!!!
    ]qn$G:}hyS2HF0
    步骤如下:ITPUB个人空间;yJ*\E dy4`S
    1.先连接控制台服务器和显示屏还有鼠标键盘
    3?ZZ/N*o0
    2.然后两个SVC与两个UPS分别用带的一个双头线连起来(每端一个视频接口一个电源接口)
    f$w&Zh&C9G0
    3.将每个SVC的电口和控制台的电口接到一个交换机上!
    ~2r o:t }n }$S0
    4.分别将两台SVC13光纤口接入一台SAN交换机,另外的24口接入另一台SAN交换机。ITPUB个人空间:[.Cd1V\)q*ta$p
    ITPUB个人空间/S G*ta^p p5W
    这样准备工作就基本完了,注意:你如果没做34步骤直接点SVC那么会提示出错的,后面再调很麻烦。
    Y/n5WN o @!{0F ^ V2qa@0

    {lx^3G0
    现在给UPS加电,理论上UPS加电后会充电3个小时才能起SVC,但是一般都是充好的,你点上个几分钟就看到绿灯正常了。
    Fxp SO0
    现在起控制台,控制台是装的Windows2003,一般不会有什么问题,直接就进系统了。ITPUB个人空间!}4ozi2`6W
    现在要起SVC了,确认上面34步骤已经完成。点亮SVC后,几分钟后如果正常就会在前面板上显示"Cluster"字样,这样整个安装就完成了。
    |/Z:m G }0

    ,e)OH R;R(piJ0
    接下的就是添加节点和IP地址什么的了,都是在SVC的面板上完成,但是到现在为止我的工作就完成了,遗憾的是后面的安装没机会参加,也不太清楚了!ITPUB个人空间_K^j,Y

    y~7OoK$|6]#]0
    SVC目前的应用并不是很多,所有先写这些让大家了解一下,如果那位有更详细的安装经验,请共享吧!

    六、DS4300控制器电池的更换

    ITPUB个人空间 q$~QN9w|%W
    先对关注的朋友们说声抱歉,很久没更新了,年前前后实在太忙了,没有整块的时间来整理笔记,现在继续吧。
    I3F"w8h `X1bH!p,e0
    ITPUB个人空间_t%Nq!ypV
    下午是到一个客户现场更换一个Ds4300的控制器的电池,当然也叫FAStT600。这个是很简单的,但是我还是那句话,我写的是新手日记,让新手和我一起成长。ITPUB个人空间;C%{g+\?6}.H
    ITPUB个人空间"GU1FeUsdk3ya
    我先说下概念的东西,一会FAStT600一会DS4300,也许很多新手会晕,其实这是同个型号的机器,DS4000系列原本叫FAStT系列,IBM2004年将其更名成DS4000系列。新的DS4200DS4700DS4800因为是在更名之后才推出市场的,因此没有所对应的FAStT型号。ITPUB个人空间2OfXT9m+\.d
    而旧的比如:ITPUB个人空间2Ex%UL9p5o*Z s
    FASt100——>DS4100ITPUB个人空间 p,c(q }1k,{z5Y6y;L:v
    FASt600——>DS4300ITPUB个人空间+V7O$Oj.Sl~J~qS
    FASt700——>DS4400ITPUB个人空间Nri.b vL/Z%b,k
    FASt900——>DS4500ITPUB个人空间3AF|cVc/~:h3MM`5C7E
    ......
    H Ak?n5D0

    #Tjc?]hpn0
    就不详细列举了.
    ,?w!ru ^!YwIs0
    换电池之前要做些准备工作,比如要和客户协商什么时候可以停业务(对于业务量小的可以不用停),让客户做些数据的备份 也别用太多时间。
    x0M`@gR3F0

    V | ~N;Zo!K2^3`Y0
    其实最好是能停业务,保证安全,不停也不是不能做,我就说不停业务怎么来做吧。ITPUB个人空间&C2{*@EvO3A

    _7C0^#|o nu7I0
    首先:ITPUB个人空间 dD.i i~$A-i'Qy*pL%L
    找个交换机,然后用SMStorage Manager)连接2个控制器,这里注意必须同时连2个,除了换硬盘可以连一个。关于怎么连控制器好像我前面写的更换硬盘的文档写的很清楚了,就不啰嗦了。ITPUB个人空间)vSw)|(B@
    然后:进去后先点那个听诊器的图标看有没有报错,肯定有,但是主要看有没有除了电池FAILED以外的其他报错,有其他的算你倒霉,先修其他的再换电池。ITPUB个人空间 X!i{X3f3~zo
    ITPUB个人空间C9z1F5J N c7f1O5R
    假如没有其他报错,我们来换电池。ITPUB个人空间1|2lfkAb%x
    先进行控制器的业务切换,比如你要换A控制器的电池就把A控制器的业务都扔到B控制器上,反之。ITPUB个人空间O%aN-b!i;T
    劝你更换之前把所有的profile文件收了,后面的新版本的SM里面有Colleted All Support Data的项目,全部收了就是了,这是个好的办事方式,也不是说一定要弄,你们明白我的意思。
    jqP.e;NF4sm0
    ITPUB个人空间&r2j;@["eURDh+I
    你可以选中A控制器,然后在Advanced的选项中Recovery ->lace Controler将它OFFLINE,或者是ITPUB个人空间w/X J8gLMPi7in
    在另外一个菜单中有Change Controler到另外一个上,保证你选择旁边的LUN的时候不会显现有你所要更换的控制器还有连接。ITPUB个人空间v@-]D1lpuN,`:Z
    ITPUB个人空间YE.W(F_&GHKLQh8X#~
    现在你就可以后机器后面看是不是警示灯亮了,亮了就开始吧,拔出来,找螺丝刀卸开,然后更换,这里基本注意下静电没什么说的,这种东西我不给你说你也知道怎么装,装完后按上面一步的步骤将控制器ONLINE或者Change Controler切回来就可以了,然后观察个半小时的,有时候换完不会突然就不报错了,错误可能要要报,但是最多半个小时就不报了。ITPUB个人空间kOZ5X| MoK/x!S'}!L8S
    ITPUB个人空间'syt+M+DMV
    ***************************************
    *Ioi4xX0
    最后我讲个条件:你做之前要先查看硬盘的微码,因为我听老大们说过有几个硬盘微码版本是不能直接更换电池的,会掉硬盘的,那后果就是整个RAID垮掉,所有这里不完全的就是你最好打听一下那个版本的硬盘微码条件下不能贸然升级!!!小心慎重啊!!!ITPUB个人空间*CZ+J'u3]A P#}(B
    ITPUB个人空间cpK:u r+n'x t,U
    ****************************************ITPUB个人空间.l%g1UK)J
    论坛上有知道这几个危险版本的兄弟最好给大家说一下,免的*******

    ############硬盘的微码如果是JFQ3或者是JFQ4的话,是一定要升级硬盘微码的,这个在传说中的IBM内部使用的《DS4000快速维护手册》里面有写的呀,你没这个东东么?

    七、TakeOver方式的HACMP的安装

    Hacmp 一个困扰了N多人的东西,下面我简单说说,为什么是简单说说呢,因为我不指望你看了我写的这个就完全会了HACMP,我只是先给你建立一个概念~,我的了解也是很肤浅的,互相学习吧。
    S}9m` Pq0
    先说意义:英文就是高可用性
    5SX]%Ac _9_)N0
    我简单画个结构图(2个节点为例):
    )`at kk0
    ITPUB个人空间n'k;E$y1Y n^'{5a!f
    弄以前先定义HOSTS文件
    ])DdZOy5t O0
    位置:/etc/hosts                         ------------定义boot ip / service ip / standby ipITPUB个人空间xnM;Q"cX| ]
    格式:ITPUB个人空间(XxT;\ka8V
    100.100.1.3      test1_boot
    ff/{/Ds BV@0
    100.100.1.4      test1_svcITPUB个人空间4Uh8?~&hd
    192.168.1.3      test1_stb
    5RL!y(?N#~ ~ E]0
    ITPUB个人空间3~JV ^5j5m5`;U"m9Eg d
    100.100.1.5     test2_bootITPUB个人空间$F pQ'mJ5X
    100.100.1.6      test2_svc
    :EqDqzS Tg!|c0
    192.168.1.5      test2_stb
    h)eH6@4@^8[L+s^0
    ITPUB个人空间R+s Tn FU!MZN

    )JS7l-dK8Dzl0
    配置/usr/sbin/cluster/netmon.cf       -----这个玩意是监控HAITPUB个人空间'f1F]6_ D
    就是把上面所有的IP复制进来就行了
    aC!|BM7qW0
    格式:ITPUB个人空间 TH!m(v/y0c*@v
    100.100.1.3      ITPUB个人空间 AJla_ Cl6A
    100.100.1.4      ITPUB个人空间z;K9? @-u)S c
    192.168.1.3      
    ,k)c @f.E+k(wo:^w7x` j0

    Q(FZdQ(Q+q W0
    100.100.1.5     ITPUB个人空间O@+L0C~MC
    100.100.1.6      ITPUB个人空间6jeQ` IT
    192.168.1.5      ITPUB个人空间G)GGFg;e,[
    然后看模型:ITPUB个人空间8zY,B D]j:p5b)f
    ITPUB个人空间o7X4[3Ed c:S
                         Cluster【建立个CLUSTER,就比如你建立个工程吧,为这个HA取个名字】ITPUB个人空间:W-u%H)Pz5f4@
                            |ITPUB个人空间8?o/@[V'U
                                        |
    K,QI6u l;u H&W0
                                       /\ITPUB个人空间@x~.zW;` V2M9Y0E
                                     /    \
    -s T5G4d;m8e0
                                   /        \ITPUB个人空间+C*v{4^)F-L!Ukg
                             Node1       Node2              ----NODE也就是你的节点,可以理解成两台机器
    a1M#K7DUn0
                       |                  |ITPUB个人空间;BDzb!a
                      定义Node的网络          ----建立两网络,TCP的做对外业务用,RS232心跳ITPUB个人空间FjPk5?q
                       |                  |
    Mb!G2sq ]O3ir0
                       把网络设备加到node的网络里    ---就是要绑定地址,把BOOT地址绑到NODEITPUB个人空间3o:Ah4V}W&Z
                       |                  |
    %ADO5F Z)i0
                                   添加资源组             ---就是定以所属资源,SVC IP了,还有其他脚本ITPUB个人空间$^&UC3Y6x z
                                     |ITPUB个人空间f,V4EA)f+d&eh
                                        同步                ---如果没错误,另一台机器会自动得到同样参数
    0B;@*B `G0I^-B6h0
                              |
    W"`_B(ch7Y"K8T/k*@ Y0
                                       HACMP                  ----- smitty clstartITPUB个人空间 y%AZ%n1p*j+s1D3h y
                                           |
    0p:U"}5t@Q9E0
                                        测试                -----Down节点了,Down 网卡了,随便搞ITPUB个人空间Rj%X fBu$?
                     
    8yh}7sgxJde0
    这就是大体的模型,后续我会继续详细的讲~~

    八、7133磁盘系统更换硬盘

    ITPUB个人空间$F\uUy0W FB"e

    0W&{)[']L0
    补充一下上一篇的遗留问题,上面有个兄弟已经说了,如果硬盘的微码是JFQ3JFQ4先升级微码然后更换ITPUB个人空间0}&QD a/K4p
    ITPUB个人空间6spnb7e J Qc
    下面来说说7133如何来换硬盘,换硬盘嘛,都是些打杂的活,谁让咱是新人呢?历练呗!!!
    ff1x%rDKZ0

    k@}3@ W^ t*X'J L0
    7133的硬盘不需要停业务,在线换就成,下面我说一下7133RAID后的换盘方式,做镜像的暂时不说哈。
    $]$[.GIta0
    ITPUB个人空间 UQ~rg0k\*J1b8^
    下午和一个同事要了ServiceGuide,提着硬盘就去了,客户带我进去后,我先打开本子开始研究如何换。
    (Z(b2] u ws:K0
    ITPUB个人空间9m3m1u5MY3`0Q:k
    其实呢,有两种情况,一个就是硬盘真的挂了,已经亮黄灯了,另一种情况就是硬盘在临界状态了,小机已经不断告警了,但是7133没什么反应的。前一种好弄,而后一种情况就要麻烦了。ITPUB个人空间L Nut7|xy1oA
    ITPUB个人空间2yw@ss)SrD
    算我背,我遇到的就是第二种,先说一下第一种的对策:
    2T w$G:EQzbx0
    #smitty ssaraid
    6x B2h|'s0
    ITPUB个人空间Ri g e ^
    List/Identify SSA Physical Disk          ----SSA硬盘ITPUB个人空间Oc.q _$^G
    ITPUB个人空间x!]6?,r A1k
    list rejected array disks                    -----找被系统踢出来的硬盘(只有第一种情况能看到)
    "[,lE @Uw&]z Q0

    {#Ve k_^A$@0
    然后ITPUB个人空间V)V om~
    #errpt |pg                                    -----找系统报的是那个pdisk的问题,我这里是pdisk1
    *S#LJl,PY0
    接着
    AO!AtZT0
    #lscfg -vl pdisk1                             ------注意吧location code抄下来,比如ITPUB个人空间F4SeM(tZ
                                                14-0B-34EE-04-P,就是第四个硬盘有问题,前面是1-8号盘,后面是9-16ITPUB个人空间F c!}3Gg1S3Q!W
    然后继续查信息
    @ V!l D_PJG0
    ITPUB个人空间E`&?(aG$s;q |*`D
    #ssaxlate -l pdisk1                          ------查属于那个array disk的,这里查实是DISK2
    "^T|ID3n/M0
    然后继续,被这个盘搞到Service mode(服务模式)ITPUB个人空间Bd:VAa(CX'A9[(_V
    ITPUB个人空间uk2]PO.zL
    #diag               -----------选第三个,进去找ssa service aids,进入
    4}+Z G a Tq0

    ^*[_+| ]8a*je[KJ0
    set service mode   ---pdisk搞到Service mode,搞完后那个烂盘就会亮黄灯了
    p1b(eO Ti4{ S R8W_0

    l XY3p8R%pN0
    后面就不用说了,最经典的两个字:拔、插
    Z}H7TO%{]#aU0
    ITPUB个人空间DX4d*b-b6X(u
    等下说物理上插拔完新硬盘后的事情,先说第二种情况的解决方法,就是我遇到的硬盘在临界状态的换盘方法。
    a,a0x#O r!XSL0
    ITPUB个人空间6d^ y(~(VOd0xG W
    最开始的步骤一样,先看报错,然后把pdisk location code 弄清楚,还有它属于那个Array diskITPUB个人空间%|'zkv#p
    ITPUB个人空间dM7TW&]S4CwF
    然后呢我们无法在被系统踢出去的盘列表那个找到这个烂盘,我们要手动来踢
    @~8C^ dY0
    ITPUB个人空间 Ai:HtR+O"~;c HGW#R

    V2`1O#eeZ O0
    #smitty redssaraidITPUB个人空间$tY'z;qu&M
    然后ITPUB个人空间$v C7EyP$p)T;v5x/R
                             change member disks in an SSA RAID ArrayITPUB个人空间 D)jHu;lk9R
    然后ITPUB个人空间-LC bwWHk_Q
                             remove a disk from an SSA RAID Array
    @DTYR:e0
    然后选属于那个Array disk ,前面查完的,我这里是hdisk2
    /lv!D'Qo)t0
    ITPUB个人空间{y:r f6z:v*u$Q@C8C._
    然后还是上面的步骤把它置于Service Mode
    E4L8g-~/N&d,] | eA0
    接着物理更换
    1s:k%D7m:w5g ? ^.C0
    ITPUB个人空间2NM@QN O
    好了,两种情况都写完了,下面看物理更换后的后续步骤ITPUB个人空间vd"~(^^-R4t#D

    A"h:S2U-R1N-i;b0
    然后删以前的逻辑盘ITPUB个人空间7?!s M(g F#EX'?
    #rmdev -dl pdisk1ITPUB个人空间R2E,y;zl3m&T-QQ
    删了后,cfgmgr -v 重新认出来新的盘ITPUB个人空间l*m*djoJ GPdU

    `+AWjf9d&aM&yS0
    接着就是定义这个盘的作用
    v&Hf9?&D;^5@'g5l}"]0

    -` B&Z zv4PUJ0
    #smitty ssaraidITPUB个人空间0zU'W9Bu
    然后
    %bVP:UR!`0
          change/show use of an ssa physical disk
    "G$@w%Ba%`'OT?0
    以前这个盘是做什么的就选什么,热备的就选Hot spare,阵列的就选Array Candidate Disk,我的是阵列的ITPUB个人空间[dZ#M/f[N
    ITPUB个人空间EA;F9jqa/N d
    ITPUB个人空间:H(h5}2HpLy2End
    接着就是替换了,就是用新盘把就盘的应用什么的都给替换了
    W&`B)`2l*x6MJtEL$]0

    w^L?Dh l#oaZ0

    +gJ+[r zVil0
    #smitty ssaraid
    wfA o8X'd0
    ITPUB个人空间kaoe$nE#]lx
    Next
    2eGo6f~7MC0i0

    !Z [;v2MW1] C `JN0
    change member disks in an ssa raid array
    :C(^LzT[0
    ITPUB个人空间0SW U5G biGu!~
    Next
    Bk PZ:e%k@9Lk0
             swap members of an ssa raid array
    Y4u-uPz)^)Tx0nu0

    ij,i)O:r1mr:[0
    Nextdisk to remove 那里选就盘,肯定找不到了嘛~blankreserved,然后disk to add那里选新盘就是pdisk1
    1?;|d@L!K H0

    o$~7Uf fb)g_L0
    这步是用于将坏盘信息导入新盘,实现swap!!!!!!ITPUB个人空间8U(q^2dx2m-Obz X s

    &]kC \)~4i,K0
    ITPUB个人空间/Rt4m+eWE\S;S a+o

    'Ph$x/?:Za0
    最后就是刷新新盘ITPUB个人空间k2W] H Z
    #smitty ssaraid
    (l dJ0uf df'{0
             list status of all defined ssa raid arrayITPUB个人空间8S'Y ?x0V4?U
                ITPUB个人空间``2qR3RE0Ay9CFJ
    选择raid10
    #f k `os0
    等待.................................................ITPUB个人空间oO1oi"FKi5L
    直到100%ITPUB个人空间jpr"zL&W
    ITPUB个人空间4a/}0O9e(j9| YU
    这里你等一下,我做的时候一直都是2%过不去,我重新刷新了一下看到已经是GOOD状态了,就知道完了ITPUB个人空间(z;q I;W1R/x:h
    ITPUB个人空间ug4boP

    c O3vuA2}q0

    {@/gEA1xp {0
    最后说一下,如果是双机,那现在也在另外一台上先删了pdisk1,然后cfgmgr认出来!!!ITPUB个人空间ws'U;K_(b"~!TW

    6tf Y#w*lG0
    警告一下:如果没删就cfgmgr,那会多出来一块盘,那就惨了,倒是没什么大问题,但是会在客户面前显示出你的极度不成熟~~
    /_6I5g#eZQ [$p*@0

    )g'kl:~ \?9U3f0
    遇到这个了就用前面的方法 ,把两个(新的和旧的)都删了,重新认就行了。ITPUB个人空间[f%Z t9Q

    4dBpI u)Yw#Uj0
    这就步骤都完了,让客户检查一下,没什么问题就签单子走人!

    九、机器报修与维护基本操作流程

    ITPUB个人空间 _(N!L l*wl@9[$wq_T
    ITPUB个人空间1S)R!Ev%Ty L7N{
    这两天在总结一些DS8000升级的东西,等写好了发上来。
    fQ,?4l]r6wH6t0
    今天说点的东西吧,讲给那些新入行的兄弟们的,如何来处理一个维修业务!ITPUB个人空间 `)h5y7\g*?]]J

    8hFC5m3B#H ^0
    以下是我建议的一些操作流程,当然公司不同,流程也不同,但是以下都是必须的!
    5[2\)Z KTS%V0
    ITPUB个人空间p"z,r%@C
    ITPUB个人空间2g R!d.J d Z(b uR
    1.做报修前先与客户沟通,进行问题的近一步确认:初步拟定停机时间和操作时间段,明确机器序列号,以及该机器所接存储或其他环境因素,顺手查一下还在不在你们公司的保内。ITPUB个人空间$Ur N_c#jy7k/U(sCSA#w

    F!lF|"_%Phm3A yIk0
    2.进行初步预判断,准备基本所需的工具和备件,注意备件的可替代关系ITPUB个人空间%M wt&Bt-d6pq
    ITPUB个人空间 G S1n6e,x!G
    3.提前阅读此次状况所涉及机型的Service Guide以及其他技术文档
    c^P1G F['ba0

    ;S_)KW,J;@2q1u[ w!k`0
    4.更换备件前先收集系统SNAP文件备用(可发给老工程师帮你确认一下原因)
    3|Slh?0
    ITPUB个人空间M0F}p6k(sG%z
    5.现场进行故障判断后,初步拟定实施方案,和客户确认方案与应急回退措施 这里重要!ITPUB个人空间]%f;M9ma

    3_d)xV:T:N}0
    6.和客户确认机器业务都已经停完,无应用在访问(某些维修无须停业务则跳过)ITPUB个人空间-f/HK,r"rqD/?
    ITPUB个人空间R]SZq AC
    7.参照ServiceGuide进行备件的更换和维护,过程中要仔细认真,正确找到Location code所指出的位置
    tj } Yc}7h0
    ITPUB个人空间"C8@`-hS_ Z`y
    8.维护后请客户当场检查业务是否正常(重要)ITPUB个人空间;u_.U9X2A4Yn
    ITPUB个人空间t7ardUT-O
    9.签订服务报告
    ~_IW4W*hj3Y0

    %eS gS K0
      后面的可以自由发挥,请客户吃饭或者其他项目,视公司与环境不同而不同!

    【技巧】多分区情况下的光驱NFS映射
    N.zq'ON*^0
    ITPUB个人空间o;z s]g }{
    好多天没更新了,既然还有人关注就接着写,其实看到有人顶才有动力写下去,要不多无聊
    )|0T'\ wS5[(z.]D@0

    ,HMk'[y^3y5x'a0
    这几天做一个旧机器整改的项目,客户替换下来4690,让把这些东西重新分区装系统ITPUB个人空间9k? pvj3j1F8R
    ITPUB个人空间}3Yu1A7\ \'H
    比较枯燥的事情,所以决定和师傅一起搞点新玩法ITPUB个人空间GaM x,mJ
    ITPUB个人空间D1S A:[:@
    第一台690做了2个分区,然后做了动态LPAR,但是这里有说道了,POWER 4的机器做LPAR真没做过,这个是师傅搞定了,后续我弄明白了写给大家
    \[j$c6Y~qC0
    ITPUB个人空间k-N+L/jhNC7LZQ
    接着说,这2个分区一个装了系统,但是另外一个光驱还没切过去,但是又没法进机房了,所以想找些比较另类的方法
    S D4Qh/V+Yss0
    ITPUB个人空间 J-ht:t.I"}xq
    所以请教完一个兄弟后,就开始了,分区一是 LAPR1,分区二是LPAR2
    9Ucua r%dVYR0
    ITPUB个人空间)I#Md b#?FHH
    我现在的光驱分给了LPAR1, 无法进机房用HMC调整,但是又必须使用光驱,哪么如下:
    S u(l6s7] D2He9v0

    j"RSM$q)^5^3]0
    ITPUB个人空间8M\bRo? \
    首先在有光驱的分区就行操作:ITPUB个人空间!T2v`:?&K"Gk$[

    _AV.}D0
    首先建  /cdrom 的文件系统,然后mount起来ITPUB个人空间9w{hxt C,S'Y"e
    ITPUB个人空间DrO3c"^2[1l,?xU'w
    接着到etc目录下做个配置文件ITPUB个人空间 G-Jn'^N*Z@
    ITPUB个人空间.Q9SJ?K-uq
    vi exportsITPUB个人空间]/jCQ@.pQ2{G)i4P

    %|7p%MflZF HF0
    内容输入:
    !N4L,~:b"@ BE7zS0

    .k"\(H0f P(o-C0
    /cdrom -ro             意思是加载这个文件系统以readonly模式ITPUB个人空间#ui[5xl E-p(G/S
    ITPUB个人空间d*f;i"? ]4kC&k
    然后ESC - : -wq  退出
    X\ a:N r[ZPh0

    )k#US;N3c%um5gk0
    现在就是用命令
    #}1W Uj5O)aI o0
    #mknfs -N
    !Dgdb(W"_)Ox4])M`0
    重启网络文件系统
    ?}/]}q(hX7iB0

    n9C8hX1\T,b,Wk*DE.k0
    然后ITPUB个人空间:Ej g\2D8g7S
    #exportfs -a
    bi@i6`;F6^0
    导出文件系统
    }q+w3}s0M0
    这样在另外一个分区ITPUB个人空间 v{Yi&|:p i

    AcL,lu0
    #mkdir cdrom    建个映射目录先
    ? I+S7aW)ba3j$R0
    ITPUB个人空间0Xc}%y(u,[
    #mount 192.168.100.100:/cdrom  /cdrom   然后mount 起来就可以了,那个IP是有光驱的那个分区的网络地址
    @N_Z.R!m&_jv,E0

    B4RE{;rv:^0
    这样两边都可以用光驱了,但是没办法同时用,不过也懒的到机房调整了

     DS8000划盘第一讲
    }I@$]oe/A0
    ITPUB个人空间,f#c%}Y!_*w @)x o&iZ
    我觉的吧,写这东西的时候在想,授之以鱼不如授之以渔ITPUB个人空间o"l%p&p$K[zf-m

    N ~KR!t0h6^_3F`p0
    我只是想把自己的经验写出来,而这种东西也是我刚开始最需要的东西,但并不等于你可以不看书
    pI7H.{.RDn7o0

    \d mK7EkE0
    技术这个东西总是踩在前辈的肩膀上才能看的更高,而这些经验也就成了很多人保密不愿ITPUB个人空间-i L$\#f1k3X(@

    r$n5c3M'GT0
    意与人共享的东西,每个人的想法不一样,我只是希望能以探讨的方式和大家一起进步ITPUB个人空间af2\\f|q0N}

    $U#v!hbyX]2T0
    再说一下,希望新手们能有个好的习惯,将自己做过的CASE详细记录下来然后分析一下那里做的
    #\VK(Qz.E2R:T7_*[{0

    )k;J/Nl/dm5I"\-Z:k0
    风险比较大,不够规范,在新学的时候千万要养成规范操作的好习惯,不要所有的操作都模仿老
    "\4x7Rt$a4O#A8Tn0

    G ~c0l{}F0
    工程师们,人家可以那样做但并不代表你可以,你的知识还不全面!!!!!ITPUB个人空间E4M/@/\rg Ve

    _X6{0Kb:a5p0
    ITPUB个人空间6o*axI4dgF
    下面我来说吧,但是这个东西我希望自己能给你们写的尽量加入原理尽量详细,如果图省事,我完ITPUB个人空间'sna9P0e.| U P ~|

    2A.h5^dJz*f,n D K v0
    全给你们挂个写好的脚本就可以了,完全可以写成大象装冰箱!
    yn9I0}/_`!yX0

    E-h s&u7A0
    -------------------------------------------------废话完了,开始学习-------------------------------------------ITPUB个人空间%s.YkYFw J

    2EHg%t~GL$p0
    DS8000划盘我准备分四节来讲
    *lQdx UyBI)J@ C0
    第一节:涉及到的基本概念ITPUB个人空间9HPz};PK
    第二节:划盘前的项目规划ITPUB个人空间8QK6Ory
    第三节:划盘的实战操作ITPUB个人空间&`"MMm-XF.R
    第四节:最后的一些过程中的问题的总结ITPUB个人空间-j.?4K;e[3W s
    ITPUB个人空间 Vk!P(\ ZQ
    BTW:各位,对于我写的东西有疑问请提出来,也算是对我义务劳动成果的肯定吧!
    :@l5e{8n n Rs0
    ITPUB个人空间h V2L(s lf9tW
    ITPUB个人空间.U'n2XP&`fJB-l2?5~
    DS8000中涉及基本概念:
    kq)N5RD&q!W0
    ITPUB个人空间m&t:Z"tjo t)k9G#i
    先提醒:DS8000里面的存储概念和AIX完全没多大关系,别把这里的词汇和AIX混淆
    b Yy3Pz)i0
    ITPUB个人空间fCOe*W'S
    1)什么是DISK
    I R9Hv1U:m3P-g sB0
       也就是DDM,也就是硬盘
    *Azkte@ b V D0
    2)什么是 array sites
    E${QtM/m K(p7y0
       通俗点说也就是在DS8000中的8个同一组的相同速度和大小的硬盘ITPUB个人空间2sk}8l&k/l4X
    3Arrays
    ii|3a7K0
       就是说在8000中这么一个array sites 可以看做是一个队列ITPUB个人空间i&x7E9d1p3n${
    4Enclosure
    J)Fa8X.g"`|0
       IBM内部叫盘包,外面很多集成商叫硬盘笼子,就是你看到的一个装了16块硬盘的那个东西,暂且叫它盘包,中间有2control card ,每个Enclosure 2arrary siteITPUB个人空间0Q%z^ c#VR0H?
    5280D280BITPUB个人空间$UGVbIJ+v
       就是常说的HBA卡,这两个编号唯一不同的就是一个4G带宽,一个2GITPUB个人空间M9n{.K]Wn
    6DA pair
    )bW&pc$cx0
       说白了就是个环路的概念,7133那个年代说的环路A1,A2,B1,B2DS8000上的DA0,DA1,DA2,DA3是一个道理,DA卡是FC-AL模式的,也就是所说的仲裁环。
    D%p$O"VW7MIoO0
    7PS
    !cy0` Bi&Z,p0
    ITPUB个人空间P3^6}e p
      8000项目中经常在决定做RAID的时候听过6+p+s或者是7+s......
    M-j%u5c] a0
    ITPUB个人空间c-By`nvV rtA7d0p
      具体什么意思呢?   P代表校验盘,S就是热备盘(HotspareITPUB个人空间ld/P'Vm
    ITPUB个人空间8M.r8Gaz |6x
    上面说过,在80008个硬盘划为一个队列,所以任何组合的和值必须是8
    4F2T8B([,Mb Z0

    3AA{w IR0
      基本的RAID与校验盘和热备盘的设计种类ITPUB个人空间G*\3q.XUM*P8`
    ITPUB个人空间[lbWOg@+{2T;I3r']
    RAID5  : 6+P+S      /     7+P
    #e8X"g5M4oEA0
    ITPUB个人空间.@\Vwr M/j
      RAID10:   3*2+2S    /     4*2
    ?(K:pu,BD!N0
    ITPUB个人空间"Pe:P }'^)~0w
      一般整个下来每个DA环路有4个热备,这就可以解释为什么DS8000有时候盘坏了不亮灯也不报警
    D2QCY*_c3w;w)M0

    gf@n#iD%i0
    里面有个设计思路,每个DA环路硬盘坏3块及以上才报警,当然有些CALL home的错误坏一个盘
    O2_9k-b5av$u'pP8VM0
    ITPUB个人空间~Q%{ B9wY7ol%C
    也会报ITPUB个人空间y/e4WKQ c*v7n;J;y
    8RANK
    7nuM$k)NL6^i#E_0
       这个东西你只需要记住    1rank=1array=8ddm  就可以了
    0O#V:`)kj(j&Xs_W0
    9Extent PoolsITPUB个人空间7@.{C8l-[%`7Sm.v
       通俗的就是同一类数据类型的一个集合
    Q1^ru LAU ]#w;m0
      这个设计是有一些授权的东西在里面,一般做2Extent Pools,每个对应一个主机

    10DA CARDITPUB个人空间6aoJ!EJDr
       就是所说的DA卡,从8000后面看就是上面有42G光纤口的那个卡,作用就是连接处理器和磁盘阵列,一般都是成对安装,所以就有了 DA pair的概念
    -bJ C$RO#f;l4R0
    11WWPNITPUB个人空间?uP[ HZMTm
       Worldwide Port Name,就是你小鸡上的HBA的一个注册编号,你可以理解成象PC上的MAC地址一样的东西就行了ITPUB个人空间Q&O9g)h.EA+n5F8l us
      在小鸡里可以用lscfg查看,network address 后面那串就是,好像是16位数ITPUB个人空间 i*u/l'p9Z |\2{
    12SDD
    ~dF)gRc0
       就是一个软件,装在小鸡上的,用来识别8000VPATH,里面的包有几个是必须的,可以根据你业务不同装,但是有2个不要装
    5YVC Ujz~k1vL0
      devices.fcp.disk.ibm.mpio.rte
    ^2s u&O|O:J)e0
       devices.sddpcm.52.rte or devices.sddpcm.53.rteITPUB个人空间0wGq.K`i
       我只是知道不要装,还没的人告诉我为什么不能装,等我知道了再告诉你们!这玩意啥子版本的都有,windows也可以装,下个WIN32版的就可以了ITPUB个人空间 lI&bx.a)x+Z+Gx6Q
    13)没了

    第二节,开始说说这个规划吧ITPUB个人空间*},g[lT5v.P1H xt@a
    ITPUB个人空间2nVn G{:m FA
    这里似乎问题真的很多,反正也不是一天两天能说的清楚的,慢慢来,反正我不急
    $}.O$tU4U!G0

    !q _T-E V-Y0
    其实我写了N篇了,点击率似乎也几千了,但提出疑问的没多少,希望大伙还是能提出些错误或者
    &[R2M K9e8M0
    ITPUB个人空间-N!o9q;N+?3aa'J
    疑问来,否则这不是又成了我一个瞎墨迹了,看了的兄弟多顶顶,提点问题ITPUB个人空间*v?o F!\v0J%]k'Q
    ITPUB个人空间/H&l0i._5W%p/dJ
    开始吧ITPUB个人空间Fxav^u @Sr
    ITPUB个人空间[ K} N^
    今天先唠叨规划的第一步,你的先认清楚型号啊!!
    `j#fAVV7xF*RM0
    ITPUB个人空间;X6z2mcs/D+]k-p
    DS8000是一个统称,也叫一个系列ITPUB个人空间|)[?Fli \V

    'g/JbW*XF"_0
    下面有DS8100DS8300了如何区分了???
    #nm2}*x ^k]Z-@%Ov0
    ITPUB个人空间 RSf!x*v:];P
    MT~~moden呢都是2107ITPUB个人空间'?3psC/b{q7I:m7e

    7qs#~!Flr o0
    TYPE了?  921   也就是DS81002路的一个入门级的
    ^c!O T(yrx+iB&A%_0
               922   也就是DS83004路的ITPUB个人空间L6]U!s#IQR
               9A2   83004路的ITPUB个人空间.c3S#`D@_S)g~c
    扩展柜呢?ITPUB个人空间2K^w!Yq(Rca ?
               921922的扩展柜叫92E
    t v!Q2sP6RX8M0
                    9A2的扩展柜叫9AEITPUB个人空间:MeAv)Gt3n%F
    ITPUB个人空间d1^4B+Sf
               上面说的几路几路都明白哈,就是比如这里81002路就是每个CEC有一个CPU卡,2CEC
    9u-v w~3F!zq0
    所以是2路。
    N7A/?](kU?"]0
    ITPUB个人空间,@,Wey.|
    至于9229A2 的区别我个人认为就是一个分区的区别ITPUB个人空间 yn[!l]&zEQ[
    9A2官方的说法叫:two storage images in one machine 
    r{%s+Zy1SUt0
    ITPUB个人空间ZB-daSk
    我觉的说白了就是象小鸡里面的逻辑分区的概念,暂且这么理解。ITPUB个人空间t:hdox
    ITPUB个人空间5D'lR&^Z w!gn8]-?
    对了,还有就是上次有人Q上问我说DA卡那块解释的不太清楚和FC卡没说怎么区别ITPUB个人空间.DNrb*Q2tb
    ITPUB个人空间1e0GEXiF
    这么说吧,8000后面的I/O Enclosure上一般只有3种接口
    %g~/^Km%~:e0

    6~(xv'[&aVKz V6Y0
    接了4跟蓝色的线的是DA卡,作用就是直接到DDM的,传数据的
    `{v?y*Q,t$?0
    ITPUB个人空间1@+QO:RL(]us
    接了黑色粗线的那个是RIO cable,是I/OCEC通讯的
    Z$T4v7C0w({F$v-oq0
    ITPUB个人空间z T.G?x/_K9K#wK
    还有接了4个光纤的那个就是FC卡,通过光纤和主机HBA相连
    #h2hf4p!PG'~0
    ITPUB个人空间-oyr.O4^!uD#f'Zud
    这样说应该比较清楚了吧


    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22729756/viewspace-688705/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/22729756/viewspace-688705/

    展开全文
  • 带你走进STM32世界,看看它能做些什么???

    千次阅读 热门讨论 2021-07-22 09:10:21
    1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司,是世界最大的半导体公司之。 STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex®-M0,M0+,M3, M4和M7...

    一、什么是STM32?

    意法半导体(ST)集团于1988年6月成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司,是世界最大的半导体公司之一。 STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex®-M0,M0+,M3, M4和M7内核。ARMv7架构定义了三大分工明确的系列: “A”系列:面向尖端的基于虚拟内存的操作系统和用户应用。 “R”系列:针对实时系统; “M”系列:针对微控制器。

    我们常用的,可以在淘宝买到的开发版有几种,其中STM32F1属于Cortex-M系列中的Cortex-M3内核,采用ARMv7-M架构,是一种针对微控制器的芯片。STM32F4属于Cortex-M4内核,采用ARMv7-M架构,是一种更加高级的微控制芯片。

    二、STM32的命名规则

    三、STM32的应用场景及优势

    STM32的优势:

    1)极高的性能:主流的Cortex内核。
    2)丰富合理的外设,合理的功耗。
    3)强大的软件支持:丰富的软件包。
    4)全面丰富的技术文档。
    5)芯片型号种类多,覆盖面广。
    6)强大的用户基础

    四、按内核架构分为不同产品

    主流产品:STM32F0、STM32F1、STM32F3
    超低功耗产品:STM32L0、STM32L1、STM32L4
    高性能产品:STM32F2、STM32F4、STM32F7、STM32H7

    五、下面介绍一下我自己一直在用两种STM32开发版

    正点原子MiniSTM32F103RCT6

    可以看出,一个开发版中实际的功能是很强大的,可以作为我们学习、开发以及DIY使用。下面我都来看看它的基本性能和预留的一些接口。

    ◆CPU:STM32F103RCT6,LQFP64,FLASH:256K,SRAM:48K;
    ◆1个标准的JTAG/SWD调试下载口
    ◆1个电源指示灯(蓝色)
    ◆2个状态指示灯(DS0:红色,DS1:绿色)
    ◆1个红外接收头,配备一款小巧的红外遥控器
    ◆1个IIC接口的EEPROM芯片,24C02,容量256字节
    ◆1个SPI FLASH芯片,W25Q64,容量为8M字节(即64M bit)
    ◆1个DS18B20/DS1820温度传感器预留接口
    ◆1个标准的2.4/2.8/3.5/4.3/7寸LCD接口,支持触摸屏
    ◆1个OLED模块接口(与LCD接口部分共用)
    ◆1个USB串口接口,可用于程序下载和代码调试
    ◆1个USB SLAVE接口,用于USB通信
    ◆1个SD卡接口
    ◆1个PS/2接口,可外接鼠标、键盘
    ◆1组5V电源供应/接入口
    ◆1组3.3V电源供应/接入口
    ◆1个启动模式选择配置接口
    ◆1个2.4G无线通信接口
    ◆1个RTC后备电池座,并带电池
    ◆1个复位按钮,可用于复位MCU和LCD
    ◆3个功能按钮,其中WK_UP兼具唤醒功能
    ◆1个电源开关,控制整个板的电源
    ◆3.3V与5V电源TVS保护,有效防止烧坏芯片。
    ◆独创的一键下载功能
    ◆除晶振占用的IO口外,其余所有IO口全部引出

    正点原子STM32F429IGT6

    配套的视频教程以及纸质书籍很多,我基本上把上面的很多功能都实现了,利用开发版做了一套智能温室大棚数据采集系统,后续将采集到的数据进行处理后完成温室大棚的控制系统。

    希望这篇文章能让爱好电子设计的爱好者们清晰地连接STM32系列开发版的基本性能和参数,后续我会继续发布一些有趣的案例,如果大家有兴趣的话,帮我点个赞,我还会将文章和视频做得更好,谢谢你们!!!

    本人亲自使用的STM32F429IGT6开发版,花了将近五个月的时间,板载功能基本全部实现,功能确实很强大,而且附带的学习资料特别多。本人利用此开发版搭建了智能榛蘑大棚控制系统,实现了环境温湿度、土壤湿度、外界光照数据的采集、显示自己SD卡存储及回放功能,通过继电器控制水泵工作,控制灯光的调整自己窗帘的自动升降功能。

     

    展开全文
  • 灵派海思SDK的API参考手册

    千次阅读 2019-09-06 11:25:06
    灵派海思SDK(LinkSDK)是个基于海思平台的快速开发工具,致力于降低嵌入式音视频产品的开发门槛,缩短产品研发周期,增强产品扩展性与灵活性,提升产品稳定性。LinkSDK的设计灵感来自于Gstreamer,只要按照业务...

    本手册镜像地址:https://gitee.com/LinkPi/LinkLib/wikis/pages

    1. 概述

    LinkSDK 是一个基于海思平台的快速开发工具,致力于降低嵌入式音视频产品的开发门槛,缩短产品研发周期,增强产品扩展性与灵活性,提升产品稳定性。LinkSDK的设计灵感来自于Gstreamer,只要按照业务流程将模块与模块依次连接起来,并配置各个模块的少量参数即可。即使是没有嵌入式开发经验的软件人员,甚至是web前端开发者,都可以使用LinkSDK开发出成熟的音视频产品。LinkSDK包含以下几个部分:

    LinkLib 是LinkSDK的核心运行库,基于Qt开发,针对多款海思方案进行了适配,包含了大量常用外围芯片的驱动程序。除了基本的音视频输入输出编码解码等模块外,还包括流媒体传输、多格式录制、多画面导播、图像调优、特效叠加、美颜、音频降噪等。C++程序员可以直接基于此开发产品,LinkLib支持继承扩展,提供了最大的开发灵活性的同时,极大的减少了开发的代码量。以最基本的视频采集编码这个功能为例,使用海思原厂SDK需要3000行以上的代码量,而使用LinkLib的代码如下:

        Link::init();
    
        LinkObject *vi=Link::create("InputVi");
        QVariantMap dataVi;
        dataVi["interface"]="HDMI-A";
        vi->start(dataVi);
    
        LinkObject *encv=Link::create("EncodeV");
        encv->start();
    
        vi->linkV(encv);
    

    开发者在开发过程中并不需要掌握驱动原理以及板卡的资源配置,上例中我们只需要告知视频从第几个接口输入,并与编码模块连接即可。当然,还可以通过对模块进行参数配置来满足实际中不同的需求,可以通过【快速开始】了解,并详细阅读各模块文档。

    LinkLib内部包含线程池管理功能,能够按照功能与协作关系自动分配模块的运行线程。

    基本接口详解

    本节内容

    LinkObject


    LinkLib的全部模块均以LinkObject为基类,公共接口如下:

        bool setData(QVariantMap data);
        const QVariantMap getData();
        bool start();
        bool start(QVariantMap data);
        bool stop(bool block=false);
        void destroy();
        QString name();
        LinkObject* linkA(LinkObject* dst);
        LinkObject* linkV(LinkObject* dst);
        LinkObject* unLinkA(LinkObject* dst);
        LinkObject* unLinkV(LinkObject* dst);
        QVariant invoke(QString func, QVariant value=QVariant());
    

    各接口功能如下:

    bool setData(QVariantMap data)

    • 接口功能:设定模块的参数。
    • data:模块参数,具体详见各模块的说明。
    • 返回值:成功-true;失败-false
    • 注意事项:该接口通常在模块start之前调用。大部分模块支持热更新,因此也可以在start之后随时通过该接口更新模块参数。接口内部会自动比对输入值与当前值,重复无变化的输入参数不会引起模块的更新操作。模块的大部分参数拥有默认值,可以不设定。

    const QVariantMap getData()

    • 接口功能:获取模块的参数。
    • 返回值:模块参数。
    • 注意事项:除了用户设定的参数,部分模块的运行状态可以通过该接口查询。该接口同步运行,需要在start之后调用。

    bool start()

    • 接口功能:运行模块。
    • 返回值:成功-true;失败-false
    • 注意事项:该接口为异步接口,返回true并不代表模块内部工作正常,模块内部的状态可以通过invokegetData查询。

    bool start(QVariantMap data)

    • 接口功能:运行模块并设定模块参数。
    • 返回值:成功-true;失败-false
    • 注意事项:内部的顺序为先setData,后start

    bool stop(bool block=false)

    • 接口功能:停止模块。
    • block:是否阻塞运行。
    • 返回值:成功-true;失败-false
    • 注意事项:非阻塞运行时,该模块为异步运行。

    void destroy()

    • 接口功能:销毁模块。
    • 注意事项:调用该接口后,模块会在线程消息循环结束后自动释放全部资源,不应该也没有必要使用delete来释放LinkObject对象。

    QString name()

    • 接口功能:获取实例名。
    • 返回值:实例名,该名称在调用Link::create方法时由系统分配或由用户指定。

    LinkObject* linkA(LinkObject* dst)

    • 接口功能:连接音频数据流。
    • dst:连接目标,数据由this流向dst。
    • 返回值:dst,用于串联。
    • 注意事项linkAlinkV接口与start接口并无先后要求,习惯上start在先,但是例如Mux模块,当用于录制文件时,start通常在link之后被调用。

    LinkObject* linkV(LinkObject* dst)

    • 接口功能:连接视频数据流。
    • dst:连接目标,数据由this流向dst。
    • 返回值:dst,用于串联。
    • 注意事项:同LinkA

    LinkObject* linkE(LinkObject* dst)

    • 接口功能:连接事件信息流,常见于SVP相关模块。
    • dst:连接目标,数据由this流向dst。
    • 返回值:dst,用于串联。
    • 注意事项:同LinkA

    LinkObject* unLinkA(LinkObject* dst)

    • 接口功能:断开音频数据流。
    • dst:连接目标,数据由this流向dst。
    • 返回值:dst,用于串联。

    LinkObject* unLinkV(LinkObject* dst)

    • 接口功能:断开视频数据流。
    • dst:连接目标,数据由this流向dst。
    • 返回值:dst,用于串联。

    LinkObject* unLinkV(LinkObject* dst)

    • 接口功能:断开事件信息流。
    • dst:连接目标,数据由this流向dst。
    • 返回值:dst,用于串联。

    QVariant invoke(QString func, QVariant value=QVariant())

    • 接口功能:调用模块内部方法。
    • func:方法名,详见各模块说明。
    • value: 入参,可以不填。
    • 返回值:模块方法返回值。
    • 注意事项:该接口同步运行,需要在start之后调用。

    Link


    Link类是一个静态方法类,包含了LinkLib需要的一些重要函数和辅助函数。

        static bool init(bool sys=true);
        static LinkObject* create(QString className, QString name="");
        static LinkObject* find(QString name);
        static bool setConfig(QString path);
        static QVariantMap getConfig();
        static QVariant o2v(LinkObject *obj);
        static LinkObject* v2o(QVariant var);
    

    各函数功能如下:

    bool init(bool sys=true)

    • 接口功能:LinkLib初始化。
    • sys:是否初始化海思mpp系统。
    • 返回值:成功-true;失败-false
    • 注意事项:改函数必须在程序的最开始被调用,如果有两个进程同时使用LinkLib,后启动的那个需要将sys设为false,否则mpp系统会重置,导致先启动的进程异常。

    LinkObject* create(QString className, QString name="")

    • 接口功能:创建LinkLib模块。
    • className:模块名称。
    • name:实例名称。
    • 返回值:模块实例指针,当模块不存在时返回NULL
    • 注意事项:当name为空时,系统会自动以"模块名_序号"的形式命名实例。为保证实例名不冲突,为两个实例指定相同的name时,后创建的实例将以"name_序号"的形式命名。所有的模块名均以Link开头,因此当调用该方法时,可以省略Link前缀,例如LinkEncodeV模块,创建时仅需Link::create("EncodeV")即可。

    LinkObject* find(QString name)

    • 接口功能:寻找指定名称的实例。
    • name:实例名称。
    • 返回值:返回实例指针或NULL

    bool setConfig(QString path)

    • 接口功能:设置板卡配置。
    • path:配置文件路径。
    • 返回值:成功-true;失败-false
    • 注意事项:通常不需要调用该函数,在调用init函数时,系统会读取默认板卡配置文件,保存在相应的文件系统中。

    QVariantMap getConfig()

    • 接口功能:获取板卡配置。
    • 返回值:板卡配置。

    Json


    Json类是一个静态方法类,将qt5提供的json函数进行封装,更易于配合LinkLib使用,包含的函数如下:

        static QString encode(QVariant data);
        static QVariant decode(const QString &jsonStr);
        static QVariant loadFile(QString path);
        static bool saveFile(QVariant data, QString path);
    

    各函数功能如下:

    QString encode(QVariant data)

    • 接口功能:将Qvariant编码成json格式的字符串。
    • data:json数据。
    • 返回值:json字符串。

    QVariant decode(const QString &jsonStr)

    • 接口功能:将json字符串解码成Qvariant对象。
    • jsonStr:json字符串。
    • 返回值:json数据。

    QVariant loadFile(QString path)

    • 接口功能:读取json文件并解码为Qvariant对象。
    • path:json文件路径。
    • 返回值:json数据。

    bool saveFile(QVariant data, QString path)

    • 接口功能:将json数据保存在指定的文件中。
    • data:json数据。
    • path:json文件路径。
    • 返回值:成功-true;失败-false

    快速开始

    创建工程


    首先建议您使用LinkPi官方提供的虚拟机环境进行开发,参考虚拟机使用说明

    新建一个Qt工程,选择相应版本的Kit,以3531A为例,交叉工具链为v300,因此选择Qt Kit H3。

    在这里插入图片描述
    在.pro文件中增加以下代码

    chip = HI3531A
    include(/home/zc/LinkLib/Link.pri)
    

    其中chip为您的开发平台核心板上的型号

    编写代码


    【概述】的示例代码中,我们实现了基本的视频编码,在这里我们将功能升级为音视频同时采集并编码,最终推流,达到一个直播的效果,代码如下:

    #include <QCoreApplication>
    #include "Link.h"
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        Link::init();
    
        LinkObject *vi=Link::create("InputVi");
        QVariantMap dataVi;
        dataVi["interface"]="HDMI-A";
        vi->start(dataVi);
    
        LinkObject *ai=Link::create("InputAi");
        QVariantMap dataAi;
        dataAi["interface"]="HDMI-A";
        ai->start(dataAi);
    
        LinkObject *encv=Link::create("EncodeV");
        QVariantMap dataEncV;
        dataEncV["codec"]="h264";
        dataEncV["bitrate"]=2000;
        dataEncV["width"]=1280;
        dataEncV["height"]=720;
        encv->start(dataEncV);
    
        LinkObject *enca=Link::create("EncodeA");
        QVariantMap dataEncA;
        dataEncA["codec"]="aac";
        dataEncA["bitrate"]=128000;
        dataEncA["samplerate"]=48000;;
        enca->start(dataEncA);
    
        LinkObject *mux=Link::create("Mux");
        QVariantMap dataMux;
        dataMux["path"]="rtmp://127.0.0.1/live/test";
        mux->start(dataMux);
    
        vi->linkV(encv)->linkV(mux);
        ai->linkA(enca)->linkA(mux);
    
        return a.exec();
    }
    
    

    该示例主要分以下几个步骤:

    1. 初始化
        Link::init();
    
    1. 创建实例,如
        LinkObject *vi=Link::create("InputVi");
    
    1. 设定参数并运行实例,如
        QVariantMap dataVi;
        dataVi["interface"]="HDMI-A";
        vi->start(dataVi);
    

    当然也可以拆分成两步来写,例

        QVariantMap dataVi;
        dataVi["interface"]="HDMI-A";
        vi->setData(dataVi);
        vi->start();
    
    1. 连接数据流,如
        vi->linkV(encv)->linkV(mux);
    

    进阶


    LinkLib 除了内部包含的模块外,您还可以通过继承派生的方式创建属于你自己的模块,参考Demo:DIY

    LinkSDK 解决是底层业务问题,上层业务逻辑依然是一个产品最重要的部分,因此,除了详细阅读本文档以外,为了发挥LinkLib的最大能力需要您更深入的学习Qt开发,借助Qt强大的开发能力,一定可以轻松快速的搭建出成熟的产品。

    模块文档说明

    • 数据接口表说明

    接口有效类型多重连接
    Audio In✖️--
    Video In✖️--
    Audio Out✖️--
    Video Out✔️VPSS✔️

    上表中"Audio In"表示该模块可以接收其他模块的音频数据,即可以作为A->LinkA(B)中的B
    以此类推,"Video Out"表示该模块可以输出视频数据给其他模块,即可以作为A->LinkV(B)中的A

    多重连接表示该模块是否支持同时接收多个其他模块的数据,或者同时输出多份数据给多个其他模块。
    例如上表引用自LinkInputVi模块,其中"Video Out"接口可多重连接,则该模块可以支持如下操作。

        LinkObject *vi=Link::create("InputVi");
        LinkObject *enc1=Link::create("EncodeV");
        LinkObject *enc2=Link::create("EncodeV");
        vi->linkV(enc1);
        vi->linkV(enc2);
    
    • 模块公共参数

    参数类型默认值说明热更新
    memSizeInt0缓冲区大小,单位byte✖️
    bufLenAInt20音频缓冲队列长度✔️
    bufLenVInt20视频缓冲队列长度✔️
    • 模块方法

    模块方法通过LinkObject::invoke方法调用

    • 模块事件

    模块事件通过连接信号LinkObject::newEvent(QString type, QVariant msg)实现,其中type为事件类型,msg为携带消息。

    关于board.json

    当您浏览到后面InputXX模块时,会发现模块参数interface,通过指定一个简单的接口名称,即可完成复杂的接口设置。

    而这些设置就定义在/link/config/board.json中,例如:

    {
    	"interfaceV":{
    		"HDMI-A":{"chip":"Link","name":"hdmi2","protocols":["HDMI"],"did": 2,"cid": 8,"mode": "bt1120s","dstFramerate":60},
    		"HDMI-B":{"chip":"Link","name":"hdmi1","protocols":["HDMI"],"did": 4,"cid": 16,"mode": "bt1120s","dstFramerate":60}
    	},
    	"interfaceA":{
    		"HDMI-A":{"chip":"Link","name":"hdmi2","samplerate":48000,"did": 0,"cid": 0,"chnCnt": 2, "channels": 2},
    		"HDMI-B":{"chip":"Link","name":"hdmi1","samplerate":48000,"did": 1,"cid": 0,"chnCnt": 2, "channels": 2},
    		"HDMI-OUT":{"samplerate":48000,"did": 2,"cid": 0,"channels":2, "chnCnt": 2,"mode":"i2sm"},
    		"Mini-In":{"chip":"tlv32","samplerate":48000,"channels":2,"did": 2,"cid": 0,"mode":"i2sm","clkSel":true, "chnCnt": 2},
    		"Mini-Out":{"samplerate":48000,"channels":2,"did": 0,"cid": 0,"mode":"i2sm","clkSel":true, "chnCnt": 2}
    	},
    	"videoBuffer":{
    		"sys":[
    			{"size":12441600,"cnt":16},
    			{"size":3110400,"cnt":40},
    			{"size":1382400,"cnt":20},
    			{"size":345600,"cnt":30}
    		],
    		"dec":[
    			{"size":16711680,"cnt":4},
    			{"size":4177920,"cnt":20}
    		]
    	},
    	"register":{
    		"0x120400A0":"0xbbbbb",
    		"0x1204009C":"0xbbbbb"
    	}
    }
    

    其中InterfaceV中定义了视频接口,interfaceA中定义了音频接口。

    videoBuffer用于管理海思的mpp的vb内存分配,根据不同的应用需求来配置不同的内存块大小、数量。

    register用于设置海思的寄存器,当然您也可以在启动脚本中进行寄存器设置。

    输入输出

    LinkInputAi

    LinkInputAi模块包含了音频采集、重采样、噪声抑制、回声消除等功能。

    海思平台的音频采集使用mpp系统的AI接口,该模块因此得名。

    通常作为音频数据流的源端。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✖️--
    Audio Out✔️Raw✔️
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    interfaceString-接口名称✖️
    samplerateInt48000采样率✔️
    resamplerateInt-1重采样频率✔️
    modeString“i2ss”采集模式✔️
    channelsInt1采集声道数✔️
    chnCntInt2接口声道数✔️
    clkSelBooltrue时钟分离✔️
    bufInt5系统缓冲深度✔️
    delayInt0音频延迟,单位ms✔️
    delay2Int0应用层同步缓冲数✔️
    timeInt0单次采样时间,单位ms✔️
    anrInt0噪声抑制强度,0/1/2✔️
    didInt0AI设备号✔️
    cidInt0AI通道号✔️
    cid2Int0AI通道号2✔️
    aecdidInt0回声消除设备号✔️
    aeccidInt0回声消除通道号✔️

    各实例的interface不可重复,同一个音频端口的InputAi实例只能创建一次,该模块支持多重连接输出,因此,如果多处需要该音频数据,多次调用该实例的linkA方法即可。

    当定义了interface参数时,samplerate、chnCnt、did、cid等参数无需设置,通常仅需要根据应用需求调整resamplerate和channels即可。详情访问【关于board.json】

    海思的anr、agc、aec都仅支持16k单声道,LinkInputAi内部会按照两路16k单声道处理,并混合为立体声,即当开启anr/agc/aec的时候,模块的输出恒定为16K立体声,可根据需要在下游连接LinkResample模块。

    • 模块方法

    暂无

    LinkOutputAo

    音频输出模块。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️Raw✖️
    Video In✖️--
    Audio Out✔️--
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    interfaceString-接口名称✖️
    samplerateInt48000采样率✔️
    resamplerateInt-1重采样频率✔️
    modeString“i2ss”采集模式✔️
    channelsInt1采集声道数✔️
    chnCntInt2接口声道数✔️
    clkSelBooltrue时钟分离✔️
    bufInt5系统缓冲深度✔️
    timeInt0单次采样时间,单位ms✔️
    didInt0AI设备号✔️
    cidInt0AI通道号✔️
    • 模块方法

    暂无

    LinkInputVi

    LinkInputVi模块包含了图像采集、帧率控制、驱动通信等功能。

    海思平台的图像采集使用mpp系统的VI接口,该模块因此得名。

    通常作为视频数据流的源端。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✖️--
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    interfaceString-接口名称✖️
    picString“/link/config/nosignal.yuv”NoSignal插图地址✖️
    avalibleBoolfalse输入源有效✔️
    widthInt1920图像宽度✔️
    heightInt1080图像高度✔️
    rotateInt0旋转角度,支持0,90,180,270✔️
    doubleBoolfalse双沿采样✔️
    modeString“bt1120s”采集模式✔️
    interlaceBoolfalse隔行图像✔️
    srcFramerateInt30输入源帧率✔️
    dstFramerateInt30输出帧率✔️
    didInt0VI设备号✖️
    cidInt0VI通道号✖️

    各实例的interface不可重复,同一个视频端口的InputVi实例只能创建一次,该模块支持多重连接输出,因此,如果多处需要该图像数据,多次调用该实例的linkV方法即可。

    当定义了interface参数时,width、height等参数则无需设定,模块内部完成驱动通信,自动设定这些参数。mode、vid、cid等参数则从board.json中提取,详情访问【关于board.json】

    pic指定的NoSignal图像必须为YUV420sp格式的原始图像,1920x1080。

    • 模块方法

    QVariant getReport()

    • 方法功能:返回驱动状态。
    • 返回值:Map类型,包含avalible:bool、width:int、height:int、framerate:int、interlace:bool。
    • 注意事项:仅当interface参数被定义时有效。

    LinkOuputVo

    LinkInputVo负责输出图像以及初始化LinuxFb系统

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✖️
    Audio Out✖️--
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    typeString“hdmi”接口类型,可选值hdmi,vga,cvbs,多选用竖线"|"隔开✔️
    modeInt-1图像同步模式,[0,32],对应枚举类型VO_INTF_SYNC_E,不建议使用✔️
    outputString“1080P60”图像同步模式,对应枚举类型VO_INTF_SYNC_E中VO_OUTPUT_后面的内容,区分大小写✔️
    uiBoolfalse是否启用LinuxFb✔️
    flipBoolfalse是否翻转图像✖️

    参数output对应海思文档中的VO_INTF_SYNC_E,每个芯片的枚举内容略有不同,3531D如下:

    typedef enum hiVO_INTF_SYNC_E
    {
        VO_OUTPUT_PAL = 0,
        VO_OUTPUT_NTSC,
        VO_OUTPUT_960H_PAL,              /* ITU-R BT.1302 960 x 576 at 50 Hz (interlaced)*/
        VO_OUTPUT_960H_NTSC,             /* ITU-R BT.1302 960 x 480 at 60 Hz (interlaced)*/
        
        VO_OUTPUT_1080P24,
        VO_OUTPUT_1080P25,
        VO_OUTPUT_1080P30,
        
        VO_OUTPUT_720P50, 
        VO_OUTPUT_720P60,   
        VO_OUTPUT_1080I50,
        VO_OUTPUT_1080I60,    
        VO_OUTPUT_1080P50,
        VO_OUTPUT_1080P60,            
    
        VO_OUTPUT_576P50,
        VO_OUTPUT_480P60,
    
        VO_OUTPUT_640x480_60,            /* VESA 640 x 480 at 60 Hz (non-interlaced) CVT */
        VO_OUTPUT_800x600_60,            /* VESA 800 x 600 at 60 Hz (non-interlaced) */
        VO_OUTPUT_1024x768_60,           /* VESA 1024 x 768 at 60 Hz (non-interlaced) */
        VO_OUTPUT_1280x1024_60,          /* VESA 1280 x 1024 at 60 Hz (non-interlaced) */
        VO_OUTPUT_1366x768_60,           /* VESA 1366 x 768 at 60 Hz (non-interlaced) */
        VO_OUTPUT_1440x900_60,           /* VESA 1440 x 900 at 60 Hz (non-interlaced) CVT Compliant */
        VO_OUTPUT_1280x800_60,           /* 1280*800@60Hz VGA@60Hz*/    
        VO_OUTPUT_1680x1050_60,          /* VESA 1680 x 1050 at 60 Hz (non-interlaced) */
        VO_OUTPUT_1920x2160_30,          /* 1920x2160_30 */
        VO_OUTPUT_1600x1200_60,          /* VESA 1600 x 1200 at 60 Hz (non-interlaced) */
        VO_OUTPUT_1920x1200_60,          /* VESA 1920 x 1600 at 60 Hz (non-interlaced) CVT (Reduced Blanking)*/ 
        VO_OUTPUT_2560x1440_30,          /* 2560x1440_30 */
        VO_OUTPUT_2560x1440_60,          /* 2560x1440_60 */
        VO_OUTPUT_2560x1600_60,          /* 2560x1600_60 */
        VO_OUTPUT_3840x2160_25,          /* 3840x2160_25 */
        VO_OUTPUT_3840x2160_30,          /* 3840x2160_30 */
        VO_OUTPUT_3840x2160_50,          /* 3840x2160_50 */
        VO_OUTPUT_3840x2160_60,          /* 3840x2160_60 */
        VO_OUTPUT_USER,
        VO_OUTPUT_BUTT
    
    } VO_INTF_SYNC_E;
    
    • 模块方法

    QVariant getReport()

    • 方法功能:返回驱动状态。
    • 返回值:Map类型,包含avalible:bool、width:int、height:int、framerate:int、interlace:bool。
    • 注意事项:仅当interface参数被定义时有效。

    LinkInputNet

    LinkInputNet模块可以接收大多数流媒体输入源的数据,并分理处音视频数据供后端模块使用。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✖️--
    Audio Out✔️PCMA/PCMU/G722/AAC/MP2✔️
    Video Out✔️H264/H265✔️
    • 模块参数

    参数类型默认值说明热更新
    pathString-网络流地址✔️
    protocolString“tcp”当path为rtsp流时,用于指定使用udp或tcp接收rtp数据✖️
    timeoutint5超时时间,单位秒✔️
    timestampModeString“auto”时间戳修正模式:auto-自动校准;local-本地时间;source-源端时间;✔️
    stateString-只读,获取模块状态✔️
    bufferBooltrue是否启用缓冲来抵消网络抖动✔️
    syncBoolfalse是否同步时间戳,保持码流数据匀速输出✔️

    目前测试了http、rtsp、rtmp、udp协议。

    • 模块方法

    暂无

    LinkInputRtsp

    LinkInputRtsp模块用于接收,rtsp协议的数据流,相比InputNet,占用系统性能更少。
    如果遇到兼容性问题,建议使用InputNet。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✖️--
    Audio Out✔️PCMA/PCMU/G722/AAC/MP2✔️
    Video Out✔️H264/H265✔️
    • 模块参数

    参数类型默认值说明热更新
    pathString-网络流地址✔️
    protocolString“tcp”用于指定使用udp或tcp接收rtp数据✖️
    timeoutint10超时时间,单位秒✔️
    • 模块方法

    暂无

    LinkInputFile

    LinkInputFile可以将本地文件进行流式输出,兼容主流媒体格式。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✖️--
    Audio Out✔️PCMA/PCMU/G722/AAC/MP2✔️
    Video Out✔️H264/H265✔️
    • 模块参数

    参数类型默认值说明热更新
    pathString-文件路径✔️
    syncBooltrue是否按时间戳同步播放✔️
    • 模块方法

    QVariant seek(QVariant time);

    • 方法功能:跳转到指定时间。
    • time值:Int类型,时间,单位ms。
    • 返回值:Bool类型。

    QVariant getDuration(QVariant path);

    • 方法功能:获取文件的总时长。
    • path值:String类型,文件路径。
    • 返回值:Int类型,单位ms。

    QVariant getPosition();

    • 方法功能:获取当前播放进度。
    • 返回值:Int类型,单位ms。

    模块事件

    EOF

    • 触发条件:文件播放完毕。
    • 携带消息:无。

    LinkInputImage

    LinkInputImage可以将图片作为一路输入使用,目前只支持不大于1080P分辨率的jpg格式

    内部会以每秒1帧的速度输出,通常可配合MixV模块作为背景、片头片尾等功能场景使用。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✖️--
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    pathString-文件路径✔️
    widthInt1920最大解码宽度✔️
    heightInt1080最大解码高度✔️
    framerateInt1输出图像帧率✔️
    • 模块方法

    LinkInputV4l2

    webcam采集模块,使用v4l2驱动。

    不同型号的摄像头mjpeg格式略有不同,海思的硬件解码模块不能完全支持。

    稍后会进行兼容性测试,给出可用型号列表供大家参考。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✖️--
    Audio Out✖️--
    Video Out✔️MJPEG✔️
    • 模块参数

    参数类型默认值说明热更新
    pathString“/dev/video0”设备地址✖️
    formatString“mjpeg”采集格式,目前支持mjpeg、yuv、h264✖️
    framerateInt30采集帧率✖️
    widthInt1920图像宽度✖️
    heightInt1080图像高度✖️
    v4l2BufLenInt4缓冲长度✖️

    framerate仅为设定帧率,实际上由于摄像头性能问题,往往无法达到。

    • 模块方法

    暂无

    LinkDevice

    该模块用于和单片机交互,可以获取温度、电源控制等。

    • 数据接口

    • 模块参数

    • 模块方法

    QVariant getTemperature()

    • 方法功能:返回核心温度。
    • 返回值:Int类型,摄氏度。
    • 注意事项:该模块虽然没有数据接口,但是依然需要在start后才能调用invoke。

    QVariant poweroff()

    • 方法功能:关闭电源。
    • 返回值:Bool类型。

    QVariant setBootMode(QVariant mode)

    • 方法功能:设置上电启动方式。
    • mode:String类型,上电启动方式,boot:上电直接启动,standby:上电待机。
    • 返回值:Bool类型。

    模块事件

    keyPress

    • 触发条件:按键长按。
    • 携带消息:按键名称,目前只有power键。

    LinkGPIO

    LinkGPIO用于管理GPIO的事件,读取、设定GPIO的状态。

    • 数据接口

    • 模块参数

    参数类型默认值说明热更新
    configString“/link/config/gpio.json”配置文件路径✔️
    • 模块方法

    QVariant registEvent(QVariant info);

    • 方法功能:注册GPIO事件。
    • info值:String类型,GPIO名。
    • 返回值:Bool类型。

    QVariant setGPIO(QVariant info);

    • 方法功能:设置GPIO端口状态。
    • info值:List类型,[QSring:GPIO名, Bool:设定值(true:拉高, false:拉低)]。
    • 返回值:Bool类型。

    QVariant getGPIO(QVariant info);

    • 方法功能:获取GPIO端口状态。
    • info值:String类型,GPIO名。
    • 返回值:Bool类型,true:拉高, false:拉低。

    • 模块事件

    up

    • 触发条件:GPIO按键弹起。
    • 携带消息:无。

    down

    • 触发条件:GPIO按键按下。
    • 携带消息:无。

    click

    • 触发条件:GPIO按键单击。
    • 携带消息:无。

    LinkInputAlsa

    LinkInputAlsa模块实现了支持alsa接口的音频设备采集功能。

    通常作为音频数据流的源端。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✖️--
    Audio Out✔️Raw✔️
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    pathString-设备地址,如"hw:0,0"✖️
    samplerateInt48000采样率✔️
    channelsInt1采集声道数✔️
    • 模块方法

    暂无

    LinkInputIsp

    LinkInputIsp用于获取sensor图像,测试中

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✖️--
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    widthInt1920图像宽度✔️
    heightInt1080图像高度✔️
    • 模块方法

    QVariant sharpen(QVariant enable)

    • 方法功能:返回驱动状态。
    • enable:Bool类型,是否开启锐化,默认开启
    • 返回值:Bool类型,true,false

    QVariant ircut(QVariant open)

    • 方法功能:返回驱动状态。
    • open:Bool类型,是否开启红外模式
    • 返回值:Bool类型,true,false

    编解码

    LinkDecodeA

    音频解码模块,支持aac、mpeg2、pcma、pcmu、g722解码。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️PCMA/PCMU/G722/AAC/MP2✖️
    Video In✖️--
    Audio Out✔️Raw✔️
    Video Out✖️--
    • 模块参数

    无,模块根据上游数据自动判断工作参数。

    • 模块方法

    暂无

    LinkEncodeA

    音频编码模块,支持aac、mpeg2、pcma、pcmu、g722编码。

    模块内部会处理音频重采样,但是消耗性能,建议在LinkInputAi模块先做好resample。

    音频编码算法工作在cpu上,LinkSDK的AAC编码经过特殊优化,cpu占用很低。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️Raw✖️
    Video In✖️--
    Audio Out✔️PCMA/PCMU/G722/AAC/MP2✔️
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    codecString“aac”编码格式,pcma/pcmu/g722/aac/mp2✖️
    samplerateInt48000编码采样率✔️
    channelsInt2编码声道✔️
    bitrateInt128000码率,单位bps✔️
    • 模块方法

    暂无

    LinkEncodeV

    视频编码模块,根据芯片的不同,可支持h264、h265、jpeg编码。

    模块内部会处理图像缩放。

    编码算法工作在芯片中的VEDU单元,不占用cpu资源,但是不同芯片所支持的最大编码能力不同,请参考海思官方产品手册。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✖️
    Audio Out✖️--
    Video Out✔️H264/H265/JPEG✔️
    • 模块参数

    参数类型默认值说明热更新
    codecString“h264”编码格式,h264/h265/jpeg✖️
    profileString“high”编码profile✔️
    widthInt-1图像宽度✔️
    heightInt-1图像高度✔️
    bitrateInt1024码率,单位kbps✔️
    framerateInt30帧率✔️
    gopDouble2.0关键帧间隔,单位秒✔️
    gopmodeInt0多参考帧模式:0-关闭;1-智能参考帧;2-双参考帧。✔️
    rcmodeString“cbr”码率控制算法,cbr/vbr/avbr/fixqp✔️
    snapBooltruejpeg截图编码模式✖️
    minqpInt22编码质量,仅vbr有效✔️
    maxqpInt36编码质量,仅vbr有效✔️
    IqpInt0I帧编码质量,仅fixqp有效✔️
    PqpInt0P帧编码质量,仅fixqp有效✔️
    BqpInt0B帧编码质量,仅fixqp有效✔️
    roiList0感兴趣编码区域设置,数据结构在下文描述✔️

    snaptrue时,需调用snap方法获取单针jpeg数据,若为false,则连续编码输出。

    roi的数据结构如下:
    ps:为了便于阅读,在json中加入了注释,实际开发中不要尝试在json中加入注释,很多解析器并不支持。

    "roi": [
            {
              "enable": false, //启动或关闭该区域
              "abs": false, //使用qp绝对值设定模式
              "qp": -15, //当abs=true时,取值范围[-51,51];当abs=false时,取值范围[0,51];
              "framerate": -1,//背景帧率,可以设定一个低于当前帧率的数值,用于降低非roi区域的刷新率,-1表示不修改。
              "x": 0.3,
              "y": 0.3,
              "w": 0.3,
              "h": 0.3
            }
          ]
    
    • 模块方法

    QVariant snapSync(QVariant path)

    • 方法功能:截图,保存jpeg文件到path,阻塞一段时间来确保获取到截图,适用于单次调用,要求必须立刻返回结果的场景。
    • path:String类型,保存路径。
    • 返回值:Bool类型。
    • 注意事项:仅当codec等于"jpeg"且snap等于true时有效。

    QVariant snap(QVariant path)

    • 方法功能:截图,保存jpeg文件到path,非阻塞操作,可能会返回false,等待一段时间再次调用既可以返回true,适用于频繁调用又不追求实时性的场景。
    • path:String类型,保存路径。
    • 返回值:Bool类型。
    • 注意事项:仅当codec等于"jpeg"且snap等于true时有效。

    QVariant reset()

    • 方法功能:重置编码器。
    • 返回值:Bool类型。

    QVariant idr()

    • 方法功能:临时请求关键帧。
    • 返回值:Bool类型。

    QVariant fullRange(QVariant full)

    • 方法功能:设定vui信息中的video_full_range_flag参数。
    • full:Bool类型。
    • 返回值:Bool类型。

    LinkDecodeV

    视频解码模块,运行在VDH模块,不占用cpu。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️H264/H265/JPEG✖️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    widthInt1920解码最大分辨率✖️
    heightInt1080解码最大分辨率✖️
    blockBoolfalse是否开启阻塞模式,快速文件转码时有用,可用于阻塞上游InputFile模块✖️
    lowLatencyBoolfalse开启后会减少一点解码延迟,但是会影响B帧解码✖️
    • 模块方法

    暂无

    流处理

    LinkMux

    码流封装模块,理论上可支持ffmpeg能支持的全部格式。

    对于网络输出,当连接意外中断时,模块会自动重连。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️PCMA/PCMU/G722/AAC/MP2✖️
    Video In✔️H264/H265✖️
    Audio Out✔️RTSP✔️
    Video Out✔️MPEGTS/RTSP✔️
    • 模块参数

    参数类型默认值说明热更新
    pathString-码流输出地址✔️
    formatString-封装格式✔️
    muteBoolfalse是否静音,即不接收音频数据✔️
    noVideoBoolfalse是否不包含视频,即不接收视频数据✔️
    stateString-只读,获取模块状态✔️
    hevc_idint12用于设定rtmp输出时,h265数据使用的id号✖️
    tsSizeint1316ts分包大小,不建议修改✔️
    hls_timeint5HLS分片长度,单位秒✔️
    hls_list_sizeint5HLS列表长度,单位片✔️
    hls_base_urlString“/hls/”HLS路径前缀✔️
    hls_filenameString“-%06d.ts”HLS文件名格式✔️
    hls_flagsString“delete_segments”同ffmpeg✔️
    segmentDurationInt0文件分段时长,单位ms✔️
    segmentSizeInt0文件分段大小,单位byte✔️

    format 通常情况下无需设置,模块会根据 path 自动选择合适的封装格式,个别无法推测的 path,比如"http://"、"mem://"等,才需要手动设定该参数。

    path 可取值"mem://xxx"并linkV到LinkTSHttp或LinkRtsp模块,会在后者创建名为"xxx"的频道,同时format需要设定为mpegts。

    path为本地文件路径时,请确保模块完成stop操作之后再访问文件。

    若无需封装音频数据,一定要将mute设置为true,否则模块会一直等待音频数据,不做任何输出。

    segmentDurationsegmentSize只需要设定其中一个即可,segmentDuration最好为编码Gop的整数倍。使用分段功能时,path可已设置为如"/root/video%d.mp4"的形式。

    • 模块方法

    QVariant pause()

    • 方法功能:暂停。
    • 返回值:Bool类型。

    QVariant resume()

    • 方法功能:恢复。
    • 返回值:Bool类型。

    QVariantMap getSpeed()

    • 方法功能:获取距离上一次调用该接口这段时间内的传输速率。
    • 返回值:{speed:总速率,speedA:音频流速率,speedV:视频流速率}

    QVariant segment(QVariant path)

    • 方法功能:开始一个新的文件分段。
    • path:文件路径。
    • 返回值:Bool类型。

    LinkRtsp

    RTSP server 模块,支持udp、rtp over tcp。

    模块仅接受Mux组件在path=“mem://xxx”时的数据,其中xxx即为新建频道的名称。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️RTSP✔️
    Video In✔️MPEGTS/RTSP✔️
    Audio Out✖️--
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    portInt554模块工作端口✖️
    • 模块方法

    暂无

    LinkTSHttp

    Http mpegts server 模块,仅支持ts格式。

    模块仅接受Mux组件在path=“mem://xxx”时的数据,其中xxx即为新建频道的名称。

    模块提供快速缓冲功能。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️MPEGTS✔️
    Audio Out✖️--
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    portInt8090模块工作端口✖️
    TSBufferInt1000快速缓冲包数✖️
    • 模块方法

    暂无

    LinkTSUdp

    将mpegts格式的数据通过udp发送到指定的ip和端口,可用于ts流单播、组播、广播。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️MPEGTS✖️
    Audio Out✖️--
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    localPortInt0udp本地端口✖️
    ipString0目标IP✔️
    portInt1234目标端口✔️
    ttlInt5ttl✔️
    flowCtrlboolfalse是否启用流控,可以让码流发送更均匀,防止丢包,但是消耗一些性能✔️
    bandwidthInt100流控最大带宽,单位Mb✔️
    • 模块方法

    暂无

    音视频处理

    LinkAdjustV

    图像调节模块,使用硬件算法,不占用cpu。

    该模块目前仅在HI3516X、HI3519芯片上有效

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✖️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    enableBoolfalse调节总开关✔️
    sbsInt170亮区降噪[0,255]✔️
    sdsInt100暗区降噪[0,255]✔️
    spInt128锐化[0,255]✔️
    lumaInt50亮度[0,100]✔️
    contrInt50对比度[0,100]✔️
    satuInt50饱和度[0,100]✔️
    hueInt50色温[0,100]✔️
    • 模块方法

    暂无

    LinkAEC

    回声消除模块,利用cpu运算,3531D上占用13%的cpu性能。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️Raw✔️
    Video In✖️--
    Audio Out✖️Raw✔️
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    farString-远端音频实例名(发送给扬声器的音频数据)✔️
    nearString-近端音频实例名(麦克风收到的音频数据)✔️
    levelInt1消除力度[1,3]✔️
    delayInt100远近端延迟初始值,单位ms✔️
    outSamplerateInt48000模块输出的采样率✔️
    outChannelsInt2模块输出的声道数✔️
    outNumInt2048模块输出的采样长度✔️

    实例名通过LinkObject::name()获得。

    • 模块方法

    暂无

    LinkAecDelay

    回声消除的延迟检测模块,用于判断输出到输入之间的链路延时,用于设定LinkAEC模块的delay参数

    将该模块至于ai与ao中间,调用detect方法即可获取延时,测量多次取平均值会更加准确。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️Raw✔️
    Video In✖️--
    Audio Out✔️Raw✔️
    Video Out✖️--
    • 模块参数


    模块方法

    QVariant detect()

    • 方法功能:发出一段蜂鸣声,并检测声音回到音频输入口的延迟,需要保障音频输出设备有效,且音量调节到足够大。
    • 返回值:Int类型,延时,单位ms

    LinkAVS

    视频拼接模块,针对海思3559/3519等方案定制,暂时仅实现水平或垂直拼接,融合拼接会在后续更新。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✔️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    modeString“LR”拼接模式:“LR”-左右拼接;“UP”-上下拼接。✔️
    widthInt3840输出图像宽度✔️
    heightInt2160输出图像高度✔️
    • 模块方法

    暂无

    LinkBeautify

    美颜模块,使用硬件算法,不占用cpu。

    由于不同芯片的能力不同,效果也略有不同。

    该模块目前仅在HI3531A、HI3531D芯片上有效

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✖️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    levelInt3美颜级别[0,4]✔️
    • 模块方法

    暂无

    LinkBlend

    视频透明叠加模块

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✔️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    srcList-LinkObject实例名列表,用于输入源排序✔️
    alphadouble0前景叠加透明度✔️
    srcXdouble0前景图裁剪X坐标[0,1]✔️
    srcYdouble0前景图裁剪Y坐标[0,1]✔️
    srcWdouble1前景图裁剪宽度[0,1]✔️
    srcHdouble1前景图裁剪高度[0,1]✔️
    dstXdouble0背景叠加X坐标[0,1]✔️
    dstYdouble0背景叠加X坐标[0,1]✔️
    • 模块方法

    暂无

    LinkColorKey

    抠像模块,效果基本可用,不断优化中。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✔️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    keyPosXdouble0.5关键色位置X坐标[0,1]✔️
    keyPosYdouble0.1关键色位置Y坐标[0,1]✔️
    alphadouble1前景透明度[0,1]✔️
    • 模块方法

    暂无

    LinkCrop

    视频裁剪模块。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✖️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    xdouble0裁剪起始X坐标[0,1]✔️
    ydouble0裁剪起始Y坐标[0,1]✔️
    widthdouble1裁剪宽度[0,1]✔️
    heightdouble1裁剪高度[0,1]✔️
    • 模块方法

    暂无

    LinkDeinterlace

    全帧率去隔行模块,海思内置的去隔行功能只能做到半帧率,如1080i60输入,去隔行之后变为1080P30。
    而该模块可以做到1080i60输入,1080p60输出,不损失任何动态信息,但是会消耗一定性能。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✔️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    • 模块方法

    暂无

    LinkGain

    音频增益调节模块,可以放大或减小音量,数字变换,可能导致爆音或失真。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️Raw✖️
    Video In✖️--
    Audio Out✔️Raw✔️
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    gainInt0增益,单位dB,6的整数倍有效,可正可负✔️
    • 模块方法

    暂无

    LinkMixA

    混音模块,支持任意路混音。

    模块内部不支持重采样,请确保输入的音频采样率和采样长度一致,不然可能会出现异常。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️Raw✔️
    Video In✖️--
    Audio Out✔️Raw✔️
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    mainString-主音频实例名✔️
    bufLenInt3音频缓冲长度✔️

    实例名通过LinkObject::name()获得。

    • 模块方法

    暂无

    LinkMixV

    该模块提供视频混合功能。

    它提供灵活的数据输入和方法,动态更新画面布局。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✔️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    widthInt1920图像宽度✖️
    heightInt1080图像高度✖️
    colorUInt0背景色,RGB24✖️
    srcList-LinkObject实例名列表,用于输入源排序✔️
    layoutList-布局定义数据,详见下方示例✔️

    src中的实例名通过LinkObject::name()方法获取。

    src中可以包含无效的实例名,用于跳过该顺序的布局位置。

    整体的数据结构如下,以json形式举例,可以用Json::decode方法转换。
    ps:为了便于阅读,在json中加入了注释,实际开发中不要尝试在json中加入注释,很多解析器并不支持。

    {
        "width":1920, //图像宽度
        "height":1080,//图像高度
        "src": [
          "InputVi_1",//输入源实例名
          "InputVi_2"
        ],
        "layout": [
          {
            "x": 0,    //水平坐标[0,1]
            "y": 0,    //垂直坐标[0,1]
            "w": 0.5,  //图像宽度[0,1]
            "h": 0.5,  //图像高度[0,1]
            "a": 1,    //透明度,由于目前海思没有提供高效的透明叠加方法,该值只能取0/1,当取0时,在该次序上的输入源将不会被显示。
            "index": 0 //叠放次序,数值大的在上层,将覆盖下层重合的部分。
          },
          {
            "x": 0.5,  //同上
            "y": 0.5,
            "w": 0.5,
            "h": 0.5,
            "a": 1,
            "index": 1
          }
        ]
    }
    

    下面举例说明

    在这里插入图片描述

    图例A中,src数量超过layout数量,因此InputVi_3没有被显示;
    图例B中,第二个layout的a为0,因此InputVi_2没有被显示,而src少于layout数量,所以第三个layout没有内容可以显示。

    • 模块方法

    QVariant swap(QVariant list)

    • 方法功能:交换两个实例在布局中的位置。
    • list:List类型,包含两个需要交换位置的实例名称。
    • 返回值:Bool类型。

    LinkOverlay

    该模块提供视频叠加特效功能,可实现OSD、滚动字幕、水印、马赛克叠加。

    支持png32格式带alpha通道的水印格式。

    可以任意指定字体文件。

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✖️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    widthInt1920图像宽度✔️
    heightInt1080图像高度✔️
    laysList-叠加层数据,详见下方示例✔️
    passBooltrue是否直通✖️

    通常不需要指定分辨率,模块会根据上游数据自动设置。

    不同的芯片支持的叠加层数不同,通常不超过8层。

    直通模式下,link上游或overlay模块,得到的都是叠加过特效的图像。非直通模式下,link上游将得到原始图像,但是内部多了一次拷贝,占用更多性能。

    lays数据结构如下,以json形式举例,可以用Json::decode方法转换。
    ps:为了便于阅读,在json中加入了注释,实际开发中不要尝试在json中加入注释,很多解析器并不支持。

    [
          {
            "type": "text", //叠加类型为文本
            "enable": true, //显示该叠加层
            "font": "/link/res/font.ttf", //字体文件路径
            "content": "哈哈呵呵哈哈~~~~呵呵哈哈呵呵~~~~哈哈呵呵", //文字内容,最多支持250个字
            "x": 0.1, //叠加层坐标[0,1],相对于整个图像
            "y": 0.136, //同上
            "scale": 2.2, //文字相对大小,不同的字体表现不同,[0.1,4]
            "color": "#669900", //文字颜色,RGB
            "bgColor": "", //文字颜色,RGBA,留空表示透明
            "alpha": 1, //叠加层透明度
            "move": -1, //负数向左滚动,正数向右滚动,数值越大速度越快
            "w": 0.515 //叠加层宽度,主要用于限制滚动范围。
          },
          {
            "type": "time", //叠加类型为时间戳
            "enable": true, //显示该叠加层
            "font": "/link/res/font.ttf", //字体文件路径
            "content": "yyyy年MM月dd日 hh:mm:ss", //时间格式
            "x": 0.1, //叠加层坐标[0,1],相对于整个图像
            "y": 0.136, //同上
            "scale": 2.2, //文字相对大小,不同的字体表现不同,[0.1,4]
            "color": "#669900", //文字颜色,RGB
            "bgColor": "", //文字颜色,RGBA,留空表示透明
            "alpha": 1 //叠加层透明度
          },
          {
            "type": "pic", //叠加类型为图像
            "enable": true, //显示该叠加层
            "content": "/link/res/logo.png", //图片路径
            "x": 0.1, //叠加层坐标[0,1],相对于整个图像
            "y": 0.1, //同上
            "scale": 1, //图片等比缩放倍数,[0.1,4]
            "alpha": 1 //叠加层透明度
            //图片也可以增加w、h属性,会导致图片强制拉伸,可能产生比例变化
          },
          {
            "type": "mask", //叠加类型为马赛克
            "enable": true, //显示该叠加层
            "content": "16", //马赛克粒度,8/16/32/64
            "x": 0.4, //叠加层坐标[0,1],相对于整个图像
            "y": 0.4, //同上
            "w": 0.2, //同上
            "h": 0.2 //同上
          }
        ]
    
    • 模块方法

    暂无

    LinkResample

    音频重采样模块。

    该模块通过cpu运算实现,因此尽可能使用Ai模块的硬件重采样,减少本模块的使用。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️Raw✖️
    Video In✖️--
    Audio Out✖️Raw✔️
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    samplerateInt48000重采样频率✖️
    channelsInt2重采样声道数✖️
    • 模块方法

    暂无

    LinkSAVS

    视频拼接模块,调用IVE能力进行拼接运算,
    在3559A中可以做水平拼接,用于4K60图像的双路mipi拼接
    在3531D中可以做田字格拼接,可用于4x3GSDI的拼接

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✔️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    modeString“LR”拼接模式:“LR”-左右拼接;“UP”-上下拼接。✔️
    widthInt3840输出图像宽度✔️
    heightInt2160输出图像高度✔️
    • 模块方法

    暂无

    LinkVad

    语音检测模块,当参考音量大于设定值,输出的音量将被抑制。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️Raw✖️
    Video In✖️--
    Audio Out✔️Raw✔️
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    volumeString-LinkVolume模块实例名✖️
    thInt40检测阈值,单位db✔️
    levelInt4抑制级别,[0~4]✔️
    durationInt10平滑区间,表示采样次数✔️
    enableBoolfalse模块使能✔️
    activeBoolfalse检测激活,只读✔️

    level等于4时,输出完全静音,等于0时,不做处理。
    volume的音量大于th时,active等于true

    • 模块方法

    暂无

    LinkVolume

    音量统计模块。

    该模块仅用于计算音量,并不对音量进行改变。

    音量结果通过getData()方法获取,该模块没有数据输出。

    • 数据接口

    接口有效类型多重连接
    Audio In✔️Raw✔️
    Video In✖️--
    Audio Out✖️--
    Video Out✖️--
    • 模块参数

    参数类型默认值说明热更新
    avgint-采样平均音量,单位db,只读[0,96]✖️
    maxInt-采样最大音量,单位db,只读[0,96]✖️
    gainInt0音量增益,仅用于改变统计结果✔️
    muteBoolfalse静音✔️

    gain参数仅改变统计结果,不影响实际的音频音量。可以是负数,但是结果最小值为0。

    mutetrue时,模块不进行统计计算,avgmax均返回0。

    • 模块方法

    QVariantMap getVolume()

    • 方法功能:获取音量统计信息。
    • 返回值:{avg:左声道平均音量,max:左声道最大音量,avg2:右声道平均音量,max2:右声道最大音量}

    智能视觉

    LinkFaceDetect

    利用NNIE性能,使用SSD网络模型,进行人脸检测定位
    仅在支持NNIE的芯片上可用,目前支持3519A与3559A

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✔️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    framerateInt10帧率,继承自LinkFrame✔️
    thdouble0.8检测判定阈值✔️
    modelstring“/link/model/ssd_inst.wk”模型路径✔️

    • 模块事件

    face

    • 触发条件:每一帧计算完成时。
    • 携带消息:List,[{x:double,y:double,w:double,h:double}],坐标范围[0,1]

    LinkFaceRecognition

    利用NNIE性能,使用SSD网络模型,进行人脸匹配,可接收FaceDetect的事件
    仅在支持NNIE的芯片上可用,目前支持3519A与3559A

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✔️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    framerateInt10帧率,继承自LinkFrame✔️
    thdouble0.97检测判定阈值✔️
    modelstring“/link/model/lcnn_inst.wk”模型路径✔️
    databasestring“/link/facedb”人脸库目录✔️
    • 模块方法

    QVariant addFace(QVariant name)

    • 方法功能:保存当前特征值到人脸库下。
    • name:String类型,保存文件名。
    • 返回值:Bool类型。

    模块事件
    face

    • 触发条件:每一帧计算完成时。
    • 携带消息:List,[{x:double,y:double,w:double,h:double,name:string}],坐标范围[0,1],name对应人脸库目录下的文件名

    LinkFrame

    该模块是大多数机器视觉算法模块的基础,提供了头文件(LinkFrame.h),可以搭配LinkIVE作为基类进行二次开发。
    具体可参考LinkSVP

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✖️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    widthInt1920图像宽度✔️
    heightInt1080图像高度✔️
    framerateInt-1帧率,-1表示不控制帧率✔️
    delayInt0延迟帧数✔️
    • 模块方法

    暂无

    LinkIVE

    该模块封装了部分海思IVE系统中常用方法,可以搭配LinkFrame作为基类进行二次开发。
    具体可参考LinkSVP

    • 模块方法

        void wait();
        static VIDEO_FRAME_INFO_S makeFrame(int width, int height);
        bool copy(IVEMem &src, IVEMem &dst,QRect rect=QRect(0,0,0,0));
        bool copySmall(IVEMem &src, IVEMem &dst);
        bool erode(IVEMem &src, IVEMem &dst, int size);
        bool dilate(IVEMem &src, IVEMem &dst, int size);
        bool thresh(IVEMem &src, IVEMem &dst, int low, int high=-1,int val=255);
        bool integ(IVEMem &src, IVEMem &dst);
        quint32 integRect(IVEMem &mem, QRect rect);
        bool sobel(IVEMem &src, IVEMem &dst, char *mask=NULL, int norm=1);
        bool filter(IVEMem &src, IVEMem &dst, char *mask=NULL, int norm=0);
        bool resize(IVEMem &src, IVEMem &dst);
        bool Sub(IVEMem &src1, IVEMem &src2, IVEMem &dst);
        bool And(IVEMem &src1, IVEMem &src2, IVEMem &dst);
        bool Or(IVEMem &src1, IVEMem &src2, IVEMem &dst);
        bool Add(IVEMem &src1, IVEMem &src2, IVEMem &dst, double a, double b);
        QVariantList CCL(IVEMem &src, int area);
    

    LinkPedestrianDetect

    利用NNIE性能,使用SSD网络模型,进行行人检测定位
    仅在支持NNIE的芯片上可用,目前支持3519A与3559A

    • 数据接口

    接口有效类型多重连接
    Audio In✖️--
    Video In✔️VPSS✔️
    Audio Out✖️--
    Video Out✔️VPSS✔️
    • 模块参数

    参数类型默认值说明热更新
    framerateInt10帧率,继承自LinkFrame✔️
    thdouble0.4检测判定阈值✔️
    modelstring“/link/model/pedestrian_inst.wk”模型路径✔️

    模块事件

    pedestrian

    • 触发条件:每一帧计算完成时。
    • 携带消息:List,[{x:double,y:double,w:double,h:double}],坐标范围[0,1]
    展开全文
  • Linux内核配置(9)

    千次阅读 2014-10-08 15:39:19
    种特殊的数码电话服务类型。它用于将你的电脑连接到你的Internet服务供应商(用SLIP或者PPP)。连接的速度快于通常的modem电话连接,在下载的时候,仍然可以进行通话。只有在电脑上有ISDN卡的时候,才会工作。而且...
  • 港台术语与内地术语之对照

    万次阅读 2006-06-27 15:25:00
    &|©雷傲极酷超级论坛 -- 雷傲极酷超级论坛,最新软件,BT 下载,游戏娱乐,交友聊天,您网上的自由天堂 X~ijb 、港台术语与内地术语之对照efry;R 由于港台的计算机发展相对快一些,许多人都去香港或台湾寻找...
  • 串口协议模板及其参数配置

    千次阅读 2018-09-27 17:47:11
    4.1.2.2 雷优温度控制器(LEO-WK-01) 1 modbus协议 1.1 modbus通用 #型号 modbus(crc16) #modbus协议 def crc16: $crc($1,0x8005,0xffff,0x0000,0) # $addr $len 都是输入的参数 def send: [$addr 03H $1 $...
  • Beckhoff、PILZ、SCHUNK、Vahle、HBM、SIKO、IFM、Dopag、Fibro、Vogel、Phoenix ●传感器、接近开关、编码、PLC、光栅尺、读数头 ●控制模块、继电、总线模块、电极、电容 ●隔离放大、变送、逆变、变频...
  • 说到 温控 ,想必大家已经是非常熟悉的了,比如说我们最常见的 空调 温控,想要调节空调温度,直接在温控上设置就行了,非常方便。那接下来要给大家介绍的智能温控仪呢,相对于一般的温控又有许多别具一格的...

空空如也

空空如也

1
收藏数 9
精华内容 3
热门标签
关键字:

wk一sm5时间温度控制器