首页 文章 精选 留言 我的

精选列表

搜索[撒谎模式],共10000篇文章
优秀的个人博客,低调大师

智能制造新模式, 柔性制造正当时

其实柔性制造早在几十年前就已经被提出,并在全球制造业中受到重视。然而,几十年过去了,柔性制造并没有在制造业中得到广泛应用,如今伴随着工业4.0和中国智能制造的崛起,个性化定制的强大需求使得柔性制造比以往任何时候都更加迫切和重要。柔性制造属于智能制造的范畴,是整个供应链中对外部和内部变化的成本最小化的柔性响应能力,它使小批量、大规模定制生产达到大批量生产的成本优势。所以柔性制造成为了关键,甚至柔性生产将是制造业未来的核心竞争力。根据国际定义,柔性制造系统是数控加工设备、物料运储装置和计算机控制系统等组成的自动化制造系统。它包括多个柔性制造单元,能根据制造任务或生产环境的变化。 柔性制造技术,是对各种不同形状加工对象实现程序化柔性制造加工的各种技术的总和。柔性制造技术是技术密集型的技术群,我们认为适用于多品种、中小批量(包括单件产品)并侧重于柔性的加工技术都属于柔性制造技术。目前按规模大小划分为:1、柔性制造系统(FMS)。通常包括4 台或更多台全自动数控机床(加工中心与车削中心等),由集中的控制系统及物料搬运系统连接起来,可在不停机的情况下实现多品种、中小批量的加工及管理。2、柔性制造单元(FMC)。FMC 的问世并在生产中使用约比FMS 晚6~8 年,它是由1~2 台加工中心、工业机器人、数控机床及物料运送存贮设备构成,具有适应加工多品种产品的灵活性。FMC 可视为一个规模最小的FMS,是FMS 向廉价化及小型化方向发展和一种产物,其特点是实现单机柔性化及自动化,迄今已进入普及应用阶段。3、柔性制造线(FML)。它是处于单一或少品种大批量非柔性自动线与中小批量多品种FMS 之间的生产线。其加工设备可以是通用的加工中心、CNC 机床;亦可采用专用机床或NC 专用机床,对物料搬运系统柔性的要求低于FMS,但生产率更高。它是以离散型生产中的柔性制造系统和连续生产过程中的分散型控制系统(DCS)为代表,其特点是实现生产线柔性化及自动化,其技术已日臻成熟,迄今已进入实用化阶段。4、柔性制造工厂(FMF)。FMF 是将多条FMS 连接起来,配以自动化立体仓库,用计算机系统进行联系,采用从订货、设计、加工、装配、检验、运送至发货的完整FMS。它包括了CAD/CAM,并使计算机集成制造系统(CIMS)投入实际,实现生产系统柔性化及自动化,进而实现全厂范围的生产管理、产品加工及物料贮运进程的全盘化。FMF 是自动化生产的最高水平,反映出世界上最先进的自动化应用技术。它是将制造、产品开发及经营管理的自动化连成一个整体,以信息流控制物质流的智能制造系统(IMS)为代表,其特点是实现工厂柔性化及自动化。 此外,“机器视觉”和“定位精度”是影响智能制造中柔性生产的两大方面。 机器视觉赋予柔性生产感知的能力实践中可以发现,机器视觉是在产品的自动化产线中实现“感知”的重要一环,机器视觉就是用机器代替人眼来做识别、测量、检测和语义理解。随着人工智能技术的发展,机器视觉在工厂的应用增多,解决许多传统机器视觉无法处理的问题。图像识别主要包含特征提取和分类识别。传统提取的特征都是图像底层的视觉特征,并且需要具备一定专业知识人员进行特征的设计与选择,这种人工设计的特征需要经过大量的验证后才能证明其对某一种识别任务的有效性,这也在一定程度上限制了图像识别技术的应用。针对传统图像处理算法遇到的局限,譬如以前在做一个二维码时,首先要知道二维码的特征,然后做图像预处理,找到二维码的问题,再解算二维码的数据,这种方式存在很多缺陷。基于二维码特征的定位流程,背景杂乱、光照不均、透视形变、印刷质量差的二维码则难以识别。因为背景杂乱无规律,无法有效区分检测目标特征,此外在特定场景下目标特征发生明显变化。因此,需要提高特征提取能力和泛化能力。深度学习应用于机器视觉时,采用深度学习卷积神经网络进行二维码识别,深度神经网络模拟人的视觉过程,前段层仅仅感知边缘轮廓,后端不同的层不同神经元局部“兴奋”生成局部特征,再到生成全景图像。这种自动提取图像特征的机制和类似人脑的处理过程大大改进了效果,后均能对二维码进行正确识别,从而大大提高了机器视觉识别成功率和提高了效率。 定位精度大幅提升产线柔性的指标可以说,机器人的绝对定位精度是其能大幅提升产线柔性的指标。人在操作时,一般是通过眼睛看到一个东西,通过大脑感知并去控制,然后用手执行动作。所以,在提高生产线柔性时也遵循这样的思路,即加上眼睛、执行机构,两者的精度结合来达到更好的精度。而绝对定位精度决定了机器人能不能达到柔性生产所需达到的要求。由于每台机器人的参数不一样,即使是同一型号的工业机器人在加工出来后的精度也会不一样,而在机械臂上可能存在零点零几毫米的偏差,累计下来整台机器人的误差就比较大了,所以要精确知道机械臂上每一个机械零部件的精确尺寸。

优秀的个人博客,低调大师

Bytom交易说明(UTXO用户自己管理模式)

比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 该部分主要针对用户自己管理私钥和地址,并通过utxo来构建和发送交易。 1.创建私钥和公钥 2.根据公钥创建接收对象 3.找到可花费的utxo 4.通过utxo构造交易 5.组合交易的input和output构成交易模板 6.对构造的交易进行签名 7.提交交易上链 注意事项: 以下步骤以及功能改造仅供参考,具体代码实现需要用户根据实际情况进行调试,具体可以参考单元测试案例代码blockchain/txbuilder/txbuilder_test.go#L255 1.创建私钥和公钥 该部分功能可以参考代码crypto/ed25519/chainkd/util.go#L11,可以通过 NewXKeys(nil) 创建主私钥和主公钥 func NewXKeys(r io.Reader) (xprv XPrv, xpub XPub, err error) { xprv, err = NewXPrv(r) if err != nil { return } return xprv, xprv.XPub(), nil } 2.根据公钥创建接收对象 接收对象包含两种形式:address形式和program形式,两者是一一对应的,任选其一即可。其中创建单签地址参考代码account/accounts.go#L267进行相应改造为: func (m *Manager) createP2PKH(xpub chainkd.XPub) (*CtrlProgram, error) { pubKey := xpub.PublicKey() pubHash := crypto.Ripemd160(pubKey) // TODO: pass different params due to config address, err := common.NewAddressWitnessPubKeyHash(pubHash, &consensus.ActiveNetParams) if err != nil { return nil, err } control, err := vmutil.P2WPKHProgram([]byte(pubHash)) if err != nil { return nil, err } return &CtrlProgram{ Address: address.EncodeAddress(), ControlProgram: control, }, nil } 创建多签地址参考代码account/accounts.go#L294进行相应改造为: func (m *Manager) createP2SH(xpubs []chainkd.XPub) (*CtrlProgram, error) { derivedPKs := chainkd.XPubKeys(xpubs) signScript, err := vmutil.P2SPMultiSigProgram(derivedPKs, len(derivedPKs)) if err != nil { return nil, err } scriptHash := crypto.Sha256(signScript) // TODO: pass different params due to config address, err := common.NewAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams) if err != nil { return nil, err } control, err := vmutil.P2WSHProgram(scriptHash) if err != nil { return nil, err } return &CtrlProgram{ Address: address.EncodeAddress(), ControlProgram: control, }, nil } 3.找到可花费的utxo 找到可花费的utxo,其实就是找到接收地址或接收program是你自己的unspend_output。其中utxo的结构为:(参考代码account/reserve.go#L39) // UTXO describes an individual account utxo. type UTXO struct { OutputID bc.Hash SourceID bc.Hash // Avoiding AssetAmount here so that new(utxo) doesn't produce an // AssetAmount with a nil AssetId. AssetID bc.AssetID Amount uint64 SourcePos uint64 ControlProgram []byte AccountID string Address string ControlProgramIndex uint64 ValidHeight uint64 Change bool } 涉及utxo构造交易的相关字段说明如下: SourceID 前一笔关联交易的mux_id, 根据该ID可以定位到前一笔交易的output AssetID utxo的资产ID Amount utxo的资产数目 SourcePos 该utxo在前一笔交易的output的位置 ControlProgram utxo的接收program Address utxo的接收地址 上述这些utxo的字段信息可以从get-block接口返回结果的transaction中找到,其相关的结构体如下:(参考代码api/block_retrieve.go#L26) // BlockTx is the tx struct for getBlock func type BlockTx struct { ID bc.Hash `json:"id"` Version uint64 `json:"version"` Size uint64 `json:"size"` TimeRange uint64 `json:"time_range"` Inputs []*query.AnnotatedInput `json:"inputs"` Outputs []*query.AnnotatedOutput `json:"outputs"` StatusFail bool `json:"status_fail"` MuxID bc.Hash `json:"mux_id"` } //AnnotatedOutput means an annotated transaction output. type AnnotatedOutput struct { Type string `json:"type"` OutputID bc.Hash `json:"id"` TransactionID *bc.Hash `json:"transaction_id,omitempty"` Position int `json:"position"` AssetID bc.AssetID `json:"asset_id"` AssetAlias string `json:"asset_alias,omitempty"` AssetDefinition *json.RawMessage `json:"asset_definition,omitempty"` Amount uint64 `json:"amount"` AccountID string `json:"account_id,omitempty"` AccountAlias string `json:"account_alias,omitempty"` ControlProgram chainjson.HexBytes `json:"control_program"` Address string `json:"address,omitempty"` } utxo跟get-block返回结果的字段对应关系如下: `SourceID` - `json:"mux_id"` `AssetID` - `json:"asset_id"` `Amount` - `json:"amount"` `SourcePos` - `json:"position"` `ControlProgram` - `json:"control_program"` `Address` - `json:"address,omitempty"` 4.通过utxo构造交易 通过utxo构造交易就是使用spend_account_unspent_output的方式来花费指定的utxo。 第一步,通过utxo构造交易输入TxInput和签名需要的数据信息SigningInstruction,该部分功能可以参考代码account/builder.go#L169进行相应改造为: // UtxoToInputs convert an utxo to the txinput func UtxoToInputs(xpubs []chainkd.XPub, u *UTXO) (*types.TxInput, *txbuilder.SigningInstruction, error) { txInput := types.NewSpendInput(nil, u.SourceID, u.AssetID, u.Amount, u.SourcePos, u.ControlProgram) sigInst := &txbuilder.SigningInstruction{} if u.Address == "" { return txInput, sigInst, nil } address, err := common.DecodeAddress(u.Address, &consensus.ActiveNetParams) if err != nil { return nil, nil, err } switch address.(type) { case *common.AddressWitnessPubKeyHash: derivedPK := xpubs[0].PublicKey() sigInst.WitnessComponents = append(sigInst.WitnessComponents, txbuilder.DataWitness([]byte(derivedPK))) case *common.AddressWitnessScriptHash: derivedPKs := chainkd.XPubKeys(xpubs) script, err := vmutil.P2SPMultiSigProgram(derivedPKs, len(derivedPKs)) if err != nil { return nil, nil, err } sigInst.WitnessComponents = append(sigInst.WitnessComponents, txbuilder.DataWitness(script)) default: return nil, nil, errors.New("unsupport address type") } return txInput, sigInst, nil } 第二步,通过utxo构造交易输出TxOutput该部分功能可以参考代码protocol/bc/types/txoutput.go#L20: // NewTxOutput create a new output struct func NewTxOutput(assetID bc.AssetID, amount uint64, controlProgram []byte) *TxOutput { return &TxOutput{ AssetVersion: 1, OutputCommitment: OutputCommitment{ AssetAmount: bc.AssetAmount{ AssetId: &assetID, Amount: amount, }, VMVersion: 1, ControlProgram: controlProgram, }, } } 5.组合交易的input和output构成交易模板 通过上面已经生成的交易信息构造交易txbuilder.Template,该部分功能可以参考blockchain/txbuilder/builder.go#L92进行改造为: type InputAndSigInst struct { input *types.TxInput sigInst *SigningInstruction } // Build build transactions with template func BuildTx(inputs []InputAndSigInst, outputs []*types.TxOutput) (*Template, *types.TxData, error) { tpl := &Template{} tx := &types.TxData{} // Add all the built outputs. tx.Outputs = append(tx.Outputs, outputs...) // Add all the built inputs and their corresponding signing instructions. for _, in := range inputs { // Empty signature arrays should be serialized as empty arrays, not null. in.sigInst.Position = uint32(len(inputs)) if in.sigInst.WitnessComponents == nil { in.sigInst.WitnessComponents = []witnessComponent{} } tpl.SigningInstructions = append(tpl.SigningInstructions, in.sigInst) tx.Inputs = append(tx.Inputs, in.input) } tpl.Transaction = types.NewTx(*tx) return tpl, tx, nil } 6.对构造的交易进行签名 账户模型是根据密码找到对应的私钥对交易进行签名,这里用户可以直接使用私钥对交易进行签名,可以参考签名代码blockchain/txbuilder/txbuilder.go#L82进行改造为:(以下改造仅支持单签交易,多签交易用户可以参照该示例进行改造) // Sign will try to sign all the witness func Sign(tpl *Template, xprv chainkd.XPrv) error { for i, sigInst := range tpl.SigningInstructions { h := tpl.Hash(uint32(i)).Byte32() sig := xprv.Sign(h[:]) rawTxSig := &RawTxSigWitness{ Quorum: 1, Sigs: []json.HexBytes{sig}, } sigInst.WitnessComponents = append([]witnessComponent(rawTxSig), sigInst.WitnessComponents...) } return materializeWitnesses(tpl) } 7.提交交易上链 该步骤无需更改任何内容,直接参照wiki中提交交易的APIsubmit-transaction的功能即可

优秀的个人博客,低调大师

仿知音漫客漫画APP--MVP模式

ZYMK(Android漫画app) 一款采用MVP的仿《知音漫客》漫画APP。 mvp+rxjava+retrofit+okhttp+greendao+glide+gson+jsoup+eventbus+butterknife 项目地址: https://github.com/wzmyyj/ZYMK 效果图: a b p b d e f g s 免责声明: 本程序所有资源全部来源于网络爬虫,且规避了付费的漫画,所有的漫画在网络可以免费阅读的。本程序仅供学习参考使用,严禁任何商业用途。欢迎各位进行技术讨论和交流。如果侵犯到任何人的利益,可以联系作者QQ:2018987032。进行协商,进行漫画的下架。 博客: 同步于个人页:http://wzmyyj.top/2018/08/22/android_3/

优秀的个人博客,低调大师

7、共享模式的文件服务器

架构目的: 1.方便各部门共享数据文件资源,提高工作效率。可以在文件服务器上直接查看文件,方便查找日常常用文件软件资源。严格的权限制度确保了数据的安全。 2.避免了用移动设备转移数据时带来的传播病毒木马的安全隐患。 架构原则: 1、文件夹服务器内,建立以每个部门名称命名的文件夹,还有就是公司公共文件夹和员工我的文档重定向的文件夹 2、部门内,以每员工一个文件夹,然后是部门公共文件夹 3、权限设置:原则上各部门之间不能互访,同部门之间不能查看彼此的文件夹. 要求: 1.每一个员工有各自独立的目录,并且只能由本人访问。其它员工不能看到更不能访问。 2.各个部门有自己独立的共享目录,并且只能由本部门的员工访问,但领导层可以访问所有部门共享目录。 3.建立一个公用目录,每个部门允许在里面建立一个文件夹,权限下放到部门内相关负责人. 总的架构 部门A 部门B 部门C部门共享文件夹 员工A 员工B 实验过程: 1、首先我们创建三个OU, OU/部门 部门A 部门B 部门C 用户 员工A、员工B 员工C、员工D 员工E、员工F 组 部门A组 部门B组 部门C组 2、下面我们对文件夹进行权限设置 这里以部门A为例,首先把部门A的文件夹设置共享,然后在安全里单击高级,取消勾选允许父项的权限继承,设置部门A组只读,其他账户全部删除, 3、父文件夹权限设置完毕,下面进行子文件夹权限设置 部门内文件共享与中转文件夹权限设置为部门组完全控制 员工A的文件夹权限设置为员工A完全控制 其他人拒绝访问 员工B的文件夹设置权限为员工B完全控制 其他人拒绝访问 4、下面针对公司共享文件夹进行权限设置: 共享文件夹下面由各部门对外公布文件夹组成, 每个部门对外文件夹权限设置为部门负责人完全控制,其他人只读 以部门A对外文件文件夹设置为例 二、文件夹权限设置好之后,我们发布到客户端,现在我们开始进行文件夹映射到客户端桌面的操作 首先在文件服务器上,右键单击桌面-----新建快捷方式-----在弹出的页面中输入文件服务器的共享文件夹所在位置-----对文件服务器命名-----把生成的快捷方式放到Software文件夹下面 打开组策略----右键点击域名----创建并连接GPO---并对新的GPO命名 右键点击新建的GPO,点击编辑 所用脚本: On error resume next set objWshShell = WScript.CreateObject("WScript.Shell") stDesktopFolder = objWshShell.SpecialFolders("Desktop") set objFileShortcut = objWshShell.CreateShortcut(stDesktopFolder & "\Server.lnk") objFileShortcut.TargetPath = "\\192.168.7.91\N09_Software\AD\Server" 生成的快捷方式的路径 objFileShortcut.IconLocation = "\\192.168.7.91\N09_Software\AD\Server.lnk,0" objFileShortcut.Description = "Fileserver" objFileShortcut.Save 把该脚本保存为server.VBS格式, 在弹出的组策略编辑器窗口中------点击用户配置下的windows设置------脚本-----在弹出的登陆属性对话框中点击显示文件夹------把刚刚保存的Server.vbs文件复制到该目录下------点击添加刚才目录下的Server.vbs脚本,单击确定即可 到客户端刷新组策略,可以看到桌面上已经生成命名为Server的快捷方式. 本文转自lovelace521 51CTO博客,原文链接:http://blog.51cto.com/lovelace/903198,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册