本文目录一览:
- 1、1024g.tw如何下载
- 2、tbus_888是什么文件,为什么莫名其妙出现在了c盘里还占了12个g的内存
- 3、直方图投影 vb
- 4、wt1024-q上线了无法开启poe
- 5、g.wt :……..kgs n.wt:……………kgs,这两个在纸箱上边什么意思,外贸
1024g.tw如何下载
1、在浏览器中直接搜索1024g.tw。在里面找到凯发网站官网。
2、在凯发网站官网找到适合自己的版本,点击后面的下载按键即可
tbus_888是什么文件,为什么莫名其妙出现在了c盘里还占了12个g的内存
tbus简介
tbus是tsf4g(tencent serviceframework for game,腾讯游戏服务框架)中的基础组件之一,主要的目的是为上层业务提供统一的线程或进程间通信接口,屏蔽本地进程间通信以及远程进程通信的细节,让开发人员可以集中精力关注业务逻辑,是tsf4g重要组成部分。
tbus原理
tbus基于共享内存构建无锁双通循环消息队列,发送的双方通过专用的读写队列完成数据收发,实现本地进程通信或者远程进程间通信。通信双方使用的两个队列称之为tbus通道(channel),每一组通讯的双方就需要有一个tbus通道。如下是一组tbus通道的图例描述。
进程a或b启动后,通过tbus api绑定到对应的通道,使用通道的两个消息队列进行收发数据,而不用关注对方的部署位置。
tbusd
如果a和b同部署于一台物理设备,与上图描述一致。如果a、b部署于不同设备之上则需要tbusd服务进程完成消息中转。通信关系如下图。
进程a发送消息后,消息被存储在host a的发送队列中,部署于host a的tbusd发现队列中存在消息,则从队列中把消息取出,通过tcp发送host b上。host b上的tbusd接收到消息后,把消息写入本地的接收队列,以供进程b读取。
为了能完成通信,tbus还有以下几个特点:
通信双方具备全局唯一的tbus通信地址,该地址是一个点分十进制的字符串,与ip地址类似,总长度为32bit,分为4段,每段bit位数可以自定义,总长度不得超过32bit。例如:128.1.100.1,5.0.200.1。
tbus通道以及消息是存储在共享内存中,必须要使用相应的工具提前创建,进程才能绑定和使用。而当业务进程异常退出后,由于消息是存储在共享内存中,只要不主动清理共享内存、重启服务器或损坏共享内存,通道中的消息就不会丢失。
tbus通道为每一个消息都会分配一定时间内唯一的一个序列号,当消息需要跨物理服务器中转时,远端的tbusd会针对该序列号的消息进行确认,如果本地tbusd未收到确认,该消息则会重传。
当tbus通道被消息写满后(例如对端服务器死机,本地进程仍继续发送消息),则无法再往通道中写入消息,该异常需要业务自己处理。
gcim
一台服务器可以有诸多的通信关系,每一条tbus通道就是最小的通信单元,每条通道都有自己的配置区域,保存着通道大小,通道地址以及读写指针等,一台服务器上所有配置信息汇聚起来就是全局通道信息表(globalchannel information map, gcim),一台服务器仅需要一份。管理gcim的工具是tbusmgr。管理关系如下:
grm
如果一台服务器不需要和其他远程服务器通信,则使用gcim就能完成所有工作。当两台服务器需要使用tbus进行通信时,为了完成通信,除了启动tbusd服务进程之外,还需要建立一份通信配置,称之为全局路由表(globalroute map,grm),用于说明哪些通道的消息需要中转。grm也是保存在共享内存中,每一台机器只需要一份,管理grm的工具为trelaymgr。
tbus配置与工具
1.tbusmgr与gcim
tbusmgr是用于创建,维护gcim的重要命令行工具。创建gcim共享内存信息需要依赖tsf4g规范的xml配置文件。tbusmgr可以根据xml文件的信息对gcim进行增删改查等所有操作。tbusmgr.xml配置文件仅包含两部分,一部分是公共参数的设定,例如通信地址模板设定,共享内存key的设定。一部分是对tbus通道(channel)的配置,每一组通信关系就需要一份。简单tbusmgr.xml说明如下:
tbusgcim
!–十进制点分表示法表示的通信地址模版 —
addrtemplet8.8.8.8/addrtemplet
!– gcim共享内存key —
gcimshmkey1000/gcimshmkey
channels
priority8/priority
!–通道两端进程的通信地址,使用点分法表示–
address0.0.1.1/address
address0.0.3.1/address
!–对于出现在配置中的第一个进程而言,sendsize,recvsize分别表示此进程相关发送,接受数据队列的大小。由于两个进程是对等的,因此第一个进程的发送队列大小(sendsize)就是第二个进程的接受队列大小(recvsize) —
sendsize20480000/sendsize
recvsize20480000/recvsize
desctcmcenter and itstconnd/desc
/channels
channels
priority8/priority
address0.0.1.1/address
address0.0.2.1/address
sendsize20480000/sendsize
recvsize20480000/recvsize
desctcmcenter and itscenterd/desc
/channels
/tbusgcim
上述配置描述了:
通信地址32bit分为四段,每段长度为8bit。
共享内存使用key为1000,转化为16进制后为0x000003e8。
创建0.0.1.1与0.0.3.1通信的tbus通道。读写队列大小都为20480000字节,描述信息为tcmcenter and its tconnd
创建0.0.1.1与0.0.3.1通信的tbus通道。读写队列大小都为20480000字节,描述信息为tcmcenter and its tconnd
需要特别说明的是priority字段,该字段是通道优先级说明,当前没有使用,没有任何含义。默认值为8。
gcim创建
在命令行下,可以使用以下命令完成gcim创建:
tbusmgr–conf-file=./tbusmgr.xml –-write
或者:tbusmgr –c tbusmgr.xml –w,完成创建后tbusmgr会输出其创建的信息,我们也可以使用tbusmgr查看我们写入的信息:
tbusmgr –k1000或者tbusmgr –ctbusmgr.xml
我们可以使用ipcs查看当前在共享内存中的信息,与tbusmgr打印打出的消息是完全一致的,在key为0x3e8上申请了192408字节大小作为管理区域,在共享内存上申请了40960544字节为0.0.1.1和0.0.3.1创建了一条通道,包含两个大小为20480000字节的消息队列,其中控制信息大小为544字节,shmid为12091401。
tbus通道查看
tbusmgr –k1000 –-see 0.0.3.1或者tbusmgr –c tbusmgr.xml –-see 0.0.3.1可以查到看0.0.3.1的通道消息,可以查看该通道下消息数量,字节数等信息。–see-all参数则查看所有通道。
我们可以使用tbusmgr给通道中写入一些测试数据:
tbusmgr-k1000 –t –src=0.0.1.1 –dst=0.0.3.1 –data-len=14
在0.0.1.1至0.0.3.1的队列中,写入14字节的测试数据。
当前通道状况如下(tbusmgr -k1000 –see 0.0.3.1–dump-binary):
msgnum:1,队列中有一个消息
bytes:72,长度为72个字节,部分为控制信息。
h:0,头指针指向0;
t:72,尾指针指向72,
size:队列大小
hseq:队列中第一个消息序列号
seq:队列总共传输了多少消息
可以使用tbusmgr –k1000 –-clean 1清理第一条通道中的消息,本例子中就是清理0.0.3.1与0.0.1.1中的所有消息
tbus通道删除
tbusmgr –k1000 –-delete 1可以清理第一条tbus通道,本例子中为0.0.3.1与0.0.1.1的通道。删除后该通道将被清理,共享内存也将被释放。而原来的第二条通道(0.0.2.1=0.0.1.1)将成为第一条通道。
如果要恢复该通道,我们可以继续使用原来的配置文件进行恢复。
tbusmgr –c tbusmgr.xml –w
可以看到0.0.1.1=0.0.2.1的创建时间按没有变化,但是增加了第二条通道0.0.3.1=0.0.1.1。tbusmgr写入gcim时,是采用全量写入的策略,如果共享内存中已经存在该通道,则对该通道进行忽略,如果共享内存中没有存在该tbus通道,则进行创建,如果共享内存中存在多余的tbus通道,则对该tbus通道进行删除。
2.trelaymgr与grm
grm是本地服务器上的全局路由表,保存在共享内存中,用来记录tbus通道与远端链接的对应关系。tbusd用该对应关系完成通道消息的转发。以下是trelaymgr.xml的简单说明。
relaymnger
addrtemplet8.8.8.8/addrtemplet
relayshmkey2688/relayshmkey
relays
addr0.0.3.1/addr
mconntcp://10.1.44.61:1027/mconn
descrelay info for 0.0.3.1/desc
/relays
/relaymnger
基于原来的示例,完成grm的配置文件。
addrtemplet:与tbusmgr中的字段含义相同。
relayshmkey:共享内存key
relays:保存对应的tbus地址与远端链接的对应关系。写入共享内存后,tbusd会把0.0.3.1上的消息使用tcp协议发送到10.1.44.61的1027端口。
写入共享内存(使用参数与tbusmgr一致):
trelaymgr -c relaymgr.xml –w
trelaymgr –c relaymgr.xml –-delete num,可以删除该编号的消息转发规则。
tbus简单应用
了解tbus实际应用细节对于运维而言,不仅可以更细致把握业务的架构与部署,应用于问题排查与故障定位,也可以通过研发的角度审视tbus以及我们的业务,多角度剖析我们的工作,提升我们的专业素养。
tbus api简介
/*初始化tbus系统*/
inttbus_init_ex(const char* a_pszshmkey,int a_iflag);
/*清理tbus系统*/
voidtbus_fini(void);
/*创建tbus句柄*/
inttbus_new(int* a_pihandle);
/*点分十进制tbus地址转tbusaddr类型的地址*/
inttbus_addr_aton(const char* a_pszaddr, tbusaddr*a_piaddr);
/*为tbus句柄绑定本地tbus地址*/
inttbus_bind(int a_ihandle, const tbusaddra_iaddr);
/*释放tbus句柄*/
voidtbus_delete(int* a_pihandle);
/*收取一条消息*/
inttbus_recv(int a_ihandle, tbusaddr*a_pisrc, tbusaddr* a_pidst,void* a_ppvdata, size_t* a_ptlen, int a_iflag);
/*发送消息*/
inttbus_send(int a_ihandle, tbusaddr*a_pisrc, tbusaddr* a_pidst, const void* a_pvdata, size_t a_ilen, int a_iflag);
/*取得下一个消息的指针与长度信息*/
inttbus_peek_msg(int a_ihandle, tbusaddr*a_pisrc, tbusaddr* a_pidst,const char** a_ppvdata, size_t* a_ptlen, inta_iflag);
api使用一般逻辑
使用tbus_init_ex初始化tbus环境
使用tbus_new创建tbus句柄
使用tbus_addr_aton把字符串tbus地址转换为tbusaddr结构体
使用tbus_bind把tbus句柄和tbusaddr绑定
tbus_recv/tbus_send收发消息
使用完成后,使用tbus_delete释放tbus句柄
使用tbus_fini清理tbus环境
简单示例
tbus通道采用上面的配置,本示例通信使用0.0.1.1与0.0.2.1进行通信,为了简单说明流程,代码没做错误处理。
文件tbus_send.cpp如下,调整tbus地址转换中的地址即为tbus_recv.cpp。
#includeiostream
#include”pal/pal.h”
#include”tbus/tbus.h”
usingnamespace std;
intmain()
{
int iret = 0, ibusrecvhandle = 0;
tbusaddr isrcaddr,idstaddr;
char szbuf[1024] = “this is atsf4g tbus test! “;
tbus_init_ex(“1000”, 0);//初始化
tbus_new(ibusrecvhandle);//创建tbus句柄
//tbus地址转换,两个地址互换后保存即为tbus_recv.cpp
tbus_addr_aton(“0.0.1.1”,isrcaddr);
tbus_addr_aton(“0.0.2.1”,idstaddr);
//tbus地址绑定
tbus_bind(ibusrecvhandle, isrcaddr);
//发送消息this is a tsf4g tbus test!
tbus_send(ibusrecvhandle,isrcaddr, idstaddr, szbuf, strlen(szbuf), 0);
size_t irecvlen = sizeof(szbuf);
//接收消息,打印消息或者打印no msg in tbus channel.
iret = tbus_recv(ibusrecvhandle,idstaddr, isrcaddr, szbuf, irecvlen, 0);
if (tbus_err_channel_empty ==(unsigned)iret)
{
cout “no msg in tbuschannel.” endl;
}else {
cout “recv data: ” szbuf endl;
}
//tbus清理
tbus_delete(ibusrecvhandle);
tbus_fini();
return 0;
}
简单编译生成tbus_send和tbus_recv可执行文件(tsf4g为tsf4g安装目录):
g -c-fpic -i${tsf4g}/include/ tbus_send.cpp -o tbus_send.o
g -otbus_send tbus_send.o -l${tsf4g}/lib/ ${tsf4g}/lib/libtsf4g.a -wl,-bstatic-lscew -lexpat -wl,-bdynamic -lpthread
g -c-fpic -i${tsf4g}/include/ tbus_recv.cpp -o tbus_recv.o
g -otbus_recv tbus_recv.o -l${tsf4g}/lib/ ${tsf4g}/lib/libtsf4g.a -wl,-bstatic-lscew -lexpat -wl,-bdynamic –lpthread
执行结果:
tbus运维应用-为python扩展
tbus提供了快速高效的进程通信接口,让上层逻辑基本可以完全忽略消息的收发与流转,为快速搭建中小型乃至大型应用提供了强有力的支持。该收益不仅仅是针对c ,针对内部常用的python更是如此。业务应用需要对外提供服务,前端还需要搭载公共组件tconnd,运维内部系统完全对内服务,逻辑服务加上tbus就能完成非持久化存储的部分构建(同理,持久化部分可以考虑使用tormsvr进行代理),极大降低了系统构建的复杂度(采用tcm-tagent管理更能降低了后续管理的成本)。
tsf4g当前虽然没有为python提供可用的api,但是如今使用python与c 构建混合系统的技术日臻完善,我们可以为python扩展tbus接口。以下是使用第三方库boost.python为python封装tbus接口的简单探讨。
构建环境
系统:tlinux1.2
gcc:4.4.6(tlinux1.2默认版本)
boost.python:1.49。lib目录~/lib/boost1.49,库文件~/include/boost/
python:2.7.3,默认安装目录/usr/local/。
(该示例继续沿用上一个例子的tbus环境)
tlinux1.2上python默认版本是2.6.6,由于没有库文件,为了获取库文件,所以升级上2.7.3,python版本可以在其凯发网站官网()获取到。
boost.python是boost的一个子库,为python与c 交互提供了简单易用的接口,使用前需要编译,boost库可以在其凯发网站官网()下载。完成python安装以及boost.python编译后,我们可以开始为python扩展tbus的动态库了:
针对tbus api进行简单类封装(以下的tbus.hpp文件);
使用boost.python对1步骤中的tbus类进行python封装(以下的libtbus.cpp)。
libtbus库编译,完成编译后就可以在python环境下导入tbus了。
说明:步骤1不是必须的,可以直接对tbus原始api进行python封装。这里对tbus进行简单的封装是为了简化示例。
文件tbus.hpp
#ifndeftbus_hpp
#definetbus_hpp
#include”pal/pal.h”
#include”tbus/tbus.h”
classtbus{
protected:
std::string shm_key;
std::string send_channel;
std::string recv_channel;
int bus_handler ;
tbusaddr send_addr;
tbusaddr recv_addr;
public:
tbus(std::string key, std::string send,std::string recv) : shm_key(key), send_channel(send), recv_channel(recv), bus_handler(0){}
boolinit(){
if (tbus_success !=tbus_init_ex(shm_key.c_str(), 0)) {
std::cout “tbus init failed!” std::endl;
return false;
}
if (tbus_success !=tbus_new((this-bus_handler))) {
std::cout “tbus create bus handler failed!” std::endl;
return false;
}
if (tbus_success !=tbus_addr_aton(this-send_channel.c_str(), send_addr)) {
std::cout “tbus failed to convert ” this-send_channel
” to addr.” std::endl;
return false;
}
if (tbus_success !=tbus_addr_aton(this-recv_channel.c_str(), recv_addr)) {
std::cout “tbus failed to convert ” this-recv_channel
” to addr.” std::endl;
return false;
}
if (tbus_success !=tbus_bind(bus_handler, send_addr)){
std::cout “tbus bind failed!” std::endl;
return false;
}
return true;
}
intsend_message(const std::string message){
return tbus_send(bus_handler,send_addr, recv_addr, message.c_str(), message.length(), 0);
}
boost::python::strrecv_message(){
char buffer[1024] = {0};
size_t recv_len = 1024;
int ret =tbus_recv(bus_handler, recv_addr, send_addr, buffer,
recv_len,0);
if (tbus_success == ret){
returnboost::python::str(buffer, recv_len);
}
returnboost::python::str(“none”);
}
voidfinit(){
tbus_delete(bus_handler);
tbus_fini();
}
~tbus(){
this-finit();
}
};
#endif
代码说明:
tbus:构造函数,参数为共享内存key,收发端进程的tbus地址;
init:初始化函数,初始化tbus环境,完成tbus句柄以及tbus地址内部转换;
send_message:消息发送函数,为了快速完成封装,只能发送string
recv_message:消息接收函数,考虑到python的使用,直接返回python下的str类型数据;
finit:tbus环境清理,删除tbus句柄,退出tbus。
文件libtbus.cpp
#include”boost/python.hpp”
#include”tbus.hpp”
boost_python_module(libtbus){
namespace bpy = boost::python;
bpy::class_tbus(“tbus”, bpy::initstd::string,std::string, std::string())
.def(“init”,tbus::init)
.def(“send_message”, tbus::send_message)
.def(“recv_message”, tbus::recv_message)
.def(“finit”,tbus::finit);
bpy::def(“tbus_error_string”,tbus_error_string);
}
代码说明:
使用boost.python封装tbus.hpp为libtbus库。封装tbus类的五个函数:构造函数,init,send_message,recv_message以及finit。具体boost.python语法含义可以参考官方文档(完整的说明那就是另外一篇帖子了)
简单makefile
(请注意库文件目录,替换为自己实际目录)
cxxflags=-i/data/home/jimwu/include/tsf4g/-i/usr/local/include/python2.7 -i/data/home/jimwu/include/
ldflags=-l/data/home/jimwu/lib/boost1.49-l/usr/local/lib/python2.7 -l/data/home/jimwu/lib/tsf4g/
libtbus.so: libtbus.o /usr/local/lib/libpython2.7.a
直方图投影 vb
vb里一套api支持3d显示。输入各个点的位置就可以显示了。非常好用,你可以去
你可以去找一些相关的例子。
以下是来自
供参考,
vb api 3d图象生成源程序 能实现双眼视觉换算(2008-07-12 20:29:11)标签:杂谈
‘一直多年在研究的代码贡献出来,希望有缘的人能发现它.我决定暂时放弃这方面的研究.太伤脑筋了.
‘另一个原因是将开发出更符合人工智能的映射模式来取代它
‘这是一套镜面虚拟的模式.通过虚拟穿过窗户玻璃上的光线与玻璃的交点来实现的.简单,准确.像进入了一
‘面镜子里.其三维形态与宇宙现实空间完全一致.无任何偏差.
‘将有助于研究虚拟现实和人工智能和多维空间的人们.因为我就是这方面的爱好者
‘源程序下载地址
private type bitmap
bmtype as long
bmwidth as long
bmheight as long
bmwidthbytes as long
bmplanes as integer
bmbitspixel as integer
bmbits as long
end type
private declare function getobject lib “gdi32” alias “getobjecta” (byval hobject as long, byval ncount as long, lpobject as any) as long
private declare function getbitmapbits lib “gdi32” (byval hbitmap as long, byval dwcount as long, lpbits as any) as long
private declare function setbitmapbits lib “gdi32” (byval hbitmap as long, byval dwcount as long, lpbits as any) as long
dim picbits() as byte, picinfo as bitmap
dim cnt as long, bytesperline as long
dim xcmj as double, ycmj as double, zcmj as double
dim xb() as double, yb() as double, zb() as double, tx() as string, clr() as long
dim omx as integer, omy as integer, pmjx as double, pmjy as double, pmjz as double
dim s as string, w as long
dim xs as double, pp as boolean, smu as boolean, nclr as long
dim mj as double, fmb as integer
dim dian as boolean
private sub form_mousemove(button as integer, shift as integer, x as single, y as single)
dim xstp as double
dim ystp as double
dim x1 as double, y1 as double, z1 as double
dim t as double, u as double, v as double
dim i as double
xstp = (x – omx) * val(su): ystp = (y – omy) * val(su)
if button = 4 then
for i = 1 to xs
xb(i) = xb(i) – xstp: if shift then yb(i) = yb(i) ystp else zb(i) = zb(i) ystp
next i
end if
if button = 1 then
xcmj = xcmj xstp / 1000: if shift then zcmj = zcmj – ystp / 1000 else ycmj = ycmj – ystp / 1000
end if
if button = 2 or gc then
if shift then
t = (x – omx) * 0.01
else
v = -(y – omy) * 0.015: u = (x – omx) * 0.01
end if
for i = 1 to xs
x1 = xb(i): y1 = yb(i): z1 = zb(i): xb(i) = x1 * cos(t) – y1 * sin(t): yb(i) = x1 * sin(t) y1 * cos(t)
x1 = xb(i): y1 = yb(i): z1 = zb(i): xb(i) = x1 * cos(u) – z1 * sin(u): zb(i) = x1 * sin(u) z1 * cos(u)
x1 = xb(i): y1 = yb(i): z1 = zb(i): yb(i) = y1 * cos(v) – z1 * sin(v): zb(i) = y1 * sin(v) z1 * cos(v)
next i
t = 0: u = 0: v = 0
end if
omx = x: omy = y
end sub
private sub form_keypress(keyascii as integer)
dim suu as double
suu = val(su)
select case keyascii
case 97: for i = 1 to xs: xb(i) = xb(i) suu: next i
case 100: for i = 1 to xs: xb(i) = xb(i) – suu: next i
case 119: for i = 1 to xs: zb(i) = zb(i) – suu: next i
case 115: for i = 1 to xs: zb(i) = zb(i) suu: next i
case 101: for i = 1 to xs: yb(i) = yb(i) – suu: next i
case 99: for i = 1 to xs: yb(i) = yb(i) suu: next i
case 13:
case 102: form_click
end select
‘debug.print keyascii
end sub
private sub form_click()
if dian then
xs = xs 1: xb(xs) = xcmj: yb(xs) = ycmj: zb(xs) = zcmj: clr(xs) = nclr: tx(xs) = “”: xss = xs
end if
if xs w then
xs = xs – 1: wt s: snw = inputbox(s): if snw “” then s = snw: rd s
end if
end sub
private sub d()
dim i as double
me.cls: ss = val(su)
for i = 0 to xs
pseta xb(i) xmj, yb(i) ymj, zb(i) zmj, clr(i)
next i
pseta xcmj, ycmj, zcmj, nclr
text1 = str(xcmj) “,” str(ycmj) “,” str(zcmj)
end sub
function pseta(x1 as double, y1 as double, z1 as double, color as long)
dim fmz as integer
dim r as byte, g as byte, b as byte, k as byte
dim xl as double, yl as double, xr as double, yr as double
k = 0: r = color mod 256: g = color 256 mod 256: b = color 65536
fmz = mj * fmb
xl = fix((x1 fmz) * pmjz / (z1 0.001) – fmz – pmjx)
yl = fix(-y1 * pmjz / (z1 0.001) – pmjy)
xr = fix((x1 – fmz) * pmjz / (z1 0.001) fmz – pmjx)
yr = fix(-y1 * pmjz / (z1 0.001) – pmjy)
if z1 0 and xl 1024 and yl 768 and xl -1 and yl -1 then
picbits(yl * 1024 * 4 xl * 4) = k: picbits(yl * 1024 * 4 xl * 4 1) = b: picbits(yl * 1024 * 4 xl * 4 2) = g: picbits(yl * 1024 * 4 xl * 4 3) = r
end if
if z1 0 and xr 1024 and yr 768 and xr -1 and yr -1 and smu then
picbits(yr * 1024 * 4 xr * 4) = k: picbits(yr * 1024 * 4 xr * 4 1) = b: picbits(yr * 1024 * 4 xr * 4 2) = g: picbits(yr * 1024 * 4 xr * 4 3) = r
end if
end function
sub see()
setbitmapbits me.image, ubound(picbits), picbits(1)
me.refresh
end sub
private sub timer1_timer()
d
see
redim picbits(0 to bytesperline * picinfo.bmheight * 3) as byte
end sub
private sub form_load()
s = app.path “start.ai”
lo = false
w = 10000
redim xb(w) as double, yb(w) as double, zb(w) as double, tx(w) as string, clr(w) as long
end sub
private sub form_resize()
me.scalemode = 3
pmjx = val(tpx): pmjy = val(tpy): pmjz = val(tpz)
zcmj = pmjz
xs = 0
nclr = hff
fmb = 1
t = 0: u = 0: v = 0
m = 2836.4
cm = 28.364
mj = 82
getobject me.image, len(picinfo), picinfo
bytesperline = (picinfo.bmwidth * 3 3) and hfffffffc
redim picbits(0 to bytesperline * picinfo.bmheight * 3) as byte
end sub
sub rd(s)
foo = freefile()
open s for binary as foo
get foo, , xb: get foo, , yb: get foo, , zb: get foo, , clr: get foo, , tx: get foo, , xs
close #foo
xss = xs
end sub
sub wt(s)
foo = freefile()
open s for binary as foo
put foo, , xb: put foo, , yb: put foo, , zb: put foo, , clr: put foo, , tx: put foo, , xs
close #foo
end sub
private sub tmj_change()
mj = tmj
end sub
private sub tpx_change()
pmjx = val(tpx)
end sub
private sub tpy_change()
pmjy = val(tpy)
end sub
private sub tpz_change()
pmjz = val(tpz)
end sub
private sub check1_click()
fm = check1
fm = (fm * 1 0.5) * 2
fmb = fm
end sub
private sub o2_click(index as integer)
pp = o2(2)
smu = o2(3)
su.enabled = o2(0)
su.locked = not o2(0)
tmj.enabled = o2(3)
tmj.locked = not o2(3)
check1_click
end sub
private sub nera_click()
ner = nera
end sub
private sub command1_click()
wt s
end sub
private sub command2_click()
rd s
end sub
private sub p1_click()
co.showcolor
nclr = co.color
p1.backcolor = nclr
end sub
private sub command4_click()
nclr = vbgreen
end sub
private sub command5_click()
nclr = vbblue
end sub
private sub command6_click()
if xs 1 then xs = xs – 1
end sub
private sub check2_click()
dian = check2
end sub
private sub command7_click()
unload me
end sub
wt1024-q上线了无法开启poe
题主是否想询问“wt1024-q上线了为什么无法开启poe”?不支持对应功能。wt1024-q上线了无法开启poe是因为不支持对应功能。wt只能给wtu设备供电、默认是开启的,wt采用非标准poe(24v)给wtu供电,普通poe交换机无法给wtu供电,wt和wtu只能配合在一起使用;另外,对于工作在超瘦模式的wtu,其部分功能也需要wt来完成。
g.wt :……..kgs n.wt:……………kgs,这两个在纸箱上边什么意思,外贸
毛重(gross weight):千克(kgs)
净重(net weight):千克(kgs)