精华内容
下载资源
问答
  • 作者:小傅哥 ... 沉淀、分享、成长,让自己和他人都能有所收获!???? ...20万行代码完,毕业了找一份工作不是问题!...大学四年其实有足够的时间让你学会编程,也能一个较长时间的学习中,知道自己适合不适合做程序员。


    作者:小傅哥
    博客:https://bugstack.cn

    沉淀、分享、成长,让自己和他人都能有所收获!😄

    一、前言

    20万行代码写完,毕业了找一份工作不是问题!

    刚一毕业因为找不到工作,就得报名去参加Java培训的大有人在。并不是说参加培训就不好,只不过以你现在这个毕业的时间点参加,就会显得特别匆忙。因为你的压力既来自于培训还需要花家里一笔不小的费用,也有同班同学已经找到一份不错的工作开始赚钱的比对。

    大学四年其实有足够的时间让你学会编程,也能从一个较长时间的学习中,知道自己适合不适合做程序员。就像我的同学里虽然都是计算机或者软件工程专业,但毕业后并没有都从事软件开发工作,或者从事了一段时间发现并不适合这个行业而选择到其他领域发展。

    所以如果你是真的喜欢编程,那么在这个行业里工作你会很开心,如果不是那么往后路还长,你所要面对的晋升加薪跳槽都可能成为一道道障碍。目前可能你还是新人不了解自己是否喜欢编程开发,那么可以在以后的学习中体会,自己是否愿意为一个运行结果调来调去,辗转不寐的研究分析,只为最后那一个运行通过而激动!

    当你可以在激动和开心中写完20万行代码,对于毕业后的求职找工作来说几乎可以叫你一声面霸,也可能你在实习时就被公司直接留下,这是个人才组织需要你!

    20万行代码看上去很多,但放在4年的大学学习中并不会有多难。平均每天200行,一个月是6000行,一年算10个月是6万行,三年就有18万行。这20万行代码会把你从一个编程小白,带入到熟练使用Java相关API,也能给你带入到初级工程师的水平。

    初学编程你可能想把一句代码完整敲下来都不容易,就更不用说运行出结果了。因此此时你的大脑和手还并不能迅速理解你眼睛里看到的这一行行代码都是啥,要干啥。这就像新买回来的钢琴手指头上去摸肯定是生硬的,敲出的声音也不连贯。这个阶段只能是照着例子大量的写,度过一个熟练期才能更好的学习。

    为了可以让更多的小伙伴理解这件事,我会从我的在校培训外包跳槽阶段成长以及找什么样的工作分享给大家作为参考,最后再把我整理出资料一并分享给大家。

    二、经历

    12年10月25日,在CSDN发的一个帖子 拿到两个offer,一个7k,一个转正税后4.5k。求意见! 距离现在它已经过去好久了,当时也是因为拿到了两份offer的选择纠结,所以发了个帖子求问。好气的是当时竟然不知道去面试面试互联网公司,信息太闭塞了,而且培训的地方并没有说过互联网一些公司的信息。

    讲一讲我这7k的经历;

    1. 12年07月,校企合作来北京昌平一个小县城的地方参加中软培训
    2. 12年10月,培训接近尾声,开始找工作,月薪7k的中软就是最后的选择的地方,放弃了在北航院内的国家科技
    3. 12年12月,虽然拿到中软Offer但迟迟不让入职,电话联系了很多次我说可以先去实习,但都说等通知。没办法,在北京也不可能就硬待着,回家的话也麻烦行李、住宿都得折腾,所以又面了一家中科软进去实习了三个月,赚点钱养活自己
    4. 13年03月,中软的通知终于来了,但竟然是参加岗前培训,又被培训了一次,当时特别讨厌培训,每次都是讲Java基础,差点生气怼老师
    5. 13年09月,在中软正式转正,也就是说培训完又是实习,7月份毕业后9月份才入职为正式员工,心里有点不爽,埋下了一个后续跳槽的种子。哪有实习这么久的!
    6. 15年04月,第一次有跳槽准备,毕竟写了两年的C#写够了,面试了第一家互联网公司,乐视致新,不过后来没去,被公司留了下来
    7. 15年08月,之前谈的留下来涨薪,但最后少涨了1千块钱。所以继续面试,还算顺利面了两家,最后在8月25日跳槽进互联网完成。

    以上整个过程就是我从学校实习找工作以及最后跳槽的一个阶段性经历,也有过在这条路上跌跌撞撞。就像;

    • 虽然我面到了中软管培生,但错失没选择要北京户口,而是要了400块房补
    • 在中软9月份从实习转正式员工,错过了第二年的入职满一年才涨薪的条件(但我觉得这个有点故意坑了)
    • 明明是学了那么多Java,但却写了两年C#,大家还是要选择自己喜欢的语言进行工作,否则会很麻烦
    • 提了离职,基本就不要想着再留下来,无论什么条件。哪怕钱和职位满足了,心里也有隔阂以及个人对没经历过事情的一个期许
    • 从传统外包跳槽的互联网,并不那么容易,技术使用的不同、开发场景的不同、组织关系的不同,一切都可能是从一个较低的位置重新开始。你需要自身技术不错,也需要一个好人带
    • 但当时在的传统也有不错的点,比如可以5:30下班,带我的经理人很不错,公司也不那么累,有时候还可以出差溜达溜达。

    三、学习

    一个大学生会经历在校、实习、就业几个阶段,其中在校学习属于蓄力阶段,要学习很多知识才能支撑起来将来的实习和平稳就业。

    蓄力阶段的学习,主要是对编程技术的基础的夯实,以及多学习与数学相关的内容,比如;数据结构、算法逻辑,这些知识对将来在技术上的提升和造诣都是非常好的基石。下面就是整个大学过程中在编程学习过程中需要经历的阶段,如图;

    • 熟悉工具:初学编程后你大概会接触到一系列的研发工具,包括IDEA、Eclipse、Navicat、Maven、Git、Tortoise、SourceTree、Visio、Xmind等等,工具的熟练会让编程更流畅。
    • 编写代码:此时你需要大量写代码,写很多的代码,因为你几乎就是需要靠写代码把整个所学的编程语言熟练使用起来。总不能手生到写完 public,写不出来 class,这跟我不会弹钢琴一样,敲完了1,后面不知道要在哪找下一个音符♪了。
    • 功能开发:小的功能开发是综合锻炼技术使用的阶段,比如做一个计算器、求一个水仙数、从一篇html中摘取你要的信息等等。此段经历会解决你之前感觉学完技术没出用的痛苦,现在你可以想象出各种场景问题,之后用代码去处理。还可以帮助英语系的小师妹,把她需要背的单词从网站中爬取下来,汇总出各类热词、语句、摘要等
    • 项目开发:小功能练手后,接下来你就可以做做项目了。比如你常听到的图书管理系统、教师教学管理系统等等。如果觉得没有意思,你可以从哪里获取项目呢?从你用到的各类APP中,把这里用的功能简化,之后做一些项目开发。比如一个简单的商城、抽奖、全物流单号查询。另外你还可以在github中查找一些项目,去参考学习并自己动手实践。
    • 数据结构:可能初学编程并不会对数据结构有多少思考,也想象不到这类内容是用在哪的。但其实这类技术内容早已被你天天使用,例如:LinkedList、ArrayList、HashMap,这里就包括了数组链表队列散列表等各项数据结构,当你将来要开发一些较大型的互联网应用程序时,你所有的逻辑设计都会考虑到数据要如何存放,数据结构如何设计才能更合理的被程序使用。
    • 算法逻辑:学完数据结构接下来要做的就是对算法逻辑的学习,这里不仅仅是简单的刷题,而是在数据结构的上使用算法将数据更合理的存放和读取以及做相应的操作。就像你能逐步了解的;排序、二分、旋转、洗牌等等,以及将来还会在阅读JDK源码中会看到,扰动函数、负载因子、拉链寻址、开放寻址、哈希散列、除法散列法、平方散列法、斐波那契(Fibonacci)散列法等等。
    • 设计模式:当你开发了很多很多程序代码以后,你会逐步的思考怎么才能让这些代码有可复用性呢,怎么写才能让更多人读懂呢、怎么实现才能让再接需求时能更快的承接呢。这些都会随着你开始实习真正接触到公司级的代码开始逐步的感受到的,写代码不是一锤子买卖,也不是炫耀技术,当你有更宽的视野范围时,就会思考的更多。这里推荐阅读《重学Java设计模式》 这是一本基于互联网真实案例编写的Java设计模式实践图书。全书以解决方案为核心,从实际开发业务中抽离出交易、营销、规则引擎、中间件、框架源码等22个真实场景,对设计模式进行全面、彻底的分析。帮助读者灵活地使用各种设计模式,从容应对复杂变化的业务需求,编写出易维护、可扩展的代码结构。

    以我个人经历和经验来看,想搞定这些学习范围和内容,最大的动力是来自于对编程的热爱和折腾。就像我这样做过很多土项目,如下;

    • 串口通信、在线考试、考试抽题、彩礼管理、成绩管理、即时聊天、计算器还有后来折腾过的仿微信聊天,这些项目都可以不断的夯实个人的技术能力,每一次做新的一个项目都会把之前所遇到的问题,又考虑新的实现方式再折腾一遍。
    • 编程的学习中重要的并不是结果,而是在这个过程中经历了什么。哪怕是犯了很多的错也没关系,因为每一次犯错都是学习的机会,都可以找到更多的资料,每一个资料里又可能教会你其他的知识。

    四、就业

    不只是我,可能很多在上学阶段并不知道都是做Java开发,就业的企业也分为传统行业、国企、半国企、外包、外企、互联网等这么多类型,尤其是我这样在13年毕业的时候,既没有所谓的就业指导,也没有有经验的朋友了解,就只能跟着大家走。好在现在大家可以在互联网中获取到这些信息,也就能早早的帮助毕业同学进行择业。

    1. 传统行业

    • 难度:⭐⭐
    • 公司:金蝶、用友
    • 发展:在传统行业方面有较强的技术积累和产品沉淀,一般其他公司也都有传统行业研发的产品。另外现在的传统行业逐步包括了互联网的领域开发以及技术使用,只不过会比纯互联网少一些高并发场景,因为大部分这类软件面对的并不是C端人群。所以个人进入此类公司会相对比较稳定,但如果后期想再跳槽比较麻烦,会出现技术断层。

    2. 国企&半国企

    • 难度:⭐⭐⭐
    • 公司:联想、京东方、中软国际、国家电网
    • 发展:早前应届生入职国企或者半国企一般会有解决北京户口,但现在可能名额不断的减少了。像中软有一部分自己做的东西,也有一部分是承接外包的内容。此类公司做的工作内容可能比较单一,有时候一个项目会用很多年,但同时可能不会太忙,有一些自己的时间,并且像联想、国家电网福利待遇也都不错。

    3. 外包

    • 难度:⭐⭐⭐
    • 公司:对日外包、企业外包
    • 发展:像是在大连会有一些专门的对日外包企业,还可能需要长期在日本出差。我的两个同学上学时候日语都学的不错,现在一直在日本工作,就他们来说挺习惯在外面的生活了。还有一部分外包是企业外包,比如你入职一个外包公司,可能会把你这个人外派给华为、腾讯、阿里等公司,开发他们外包出来的工作,此类工作一般相对来说短期、非核心。但干的好的也有转正机会,直接入职大厂,不过比较难。而且外包到企业里的人员,没有正式员工的待遇

    4. 外企

    • 难度:⭐⭐⭐⭐
    • 公司:亚马逊、谷歌、微软
    • 发展:外企工作还是挺香的,相对来说没有那么强的加班,福利待遇也比较不错。例如像这类的公司会明确写上不加班,以及各种假期和旅游。但可能是近几年被国内互联网挤压的,也有一些在国内的外企有裁员的动作。

    5. 互联网

    • 难度:⭐⭐⭐⭐⭐
    • 公司:百度、阿里、腾讯、字节、京东、美团、滴滴等等
    • 发展:这类公司在北上广就多了去了,虽然多但面试难度仍然不低,尤其是现在内卷的情况下,需要你会很多知识以及数据结构或者刷算法,才可能找到一份不错的工作。此类的公司的薪资待遇不错,每年都水涨船高,可能一个刚毕业的重点大学,大学生,入职的薪资就要倒挂各类老员工了。除了有少许的内卷,其他的还是挺不错的。

    6. 出国

    • 难度:⭐⭐⭐⭐⭐
    • 公司:加拿大的 shopee、美国的脸书、谷歌、苹果等等
    • 发展:如果喜欢国外的生活,又有出去的本事,那也是一个非常好的选择。像小傅哥熟悉的一个北大的伙伴,入职到了加拿大的 shopee,收入以及整个生活节奏对他来说还是非常满意的。

    以上就是各类公司的一个简单介绍,每一个人就业时都会有自己的选择,比如想安稳些、想要户口、想要高工资、想不那么加班等等,只要你能对自己的选择负责,合理规划好自己的职业发展,那么就可以了。

    五、资料

    1. 技术内容

    其实现在互联网的文档、资料、书籍、视频都已经很多了,但也可能正因为太多了,让初学编程的人找不到所处阶段,大一、大二、大三、大四以及毕业了工作了几年后,都应该找什么样的资料学习。

    所以我这里把各类资料进行整合,按照不同阶段的学习范围把资料分到不同的文件夹去,方便所处不同阶段的读者可以有一个相对准确的学习范围。

    2. 实战内容

    如果你已经跨过了初级阶段,需要做一些实践型的项目,可以关注下我的Github,如下:

    • 内容:本代码库是作者小傅哥多年从事一线互联网Java开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。这部分资料也是我所写博客中实践项目的源码,在这里你可以学到Netty、字节码编程、设计模式、领域驱动设计、规则引擎、面试、架构以及职场经历的分享。
    • 地址https://github.com/fuzhengwei/CodeGuide/wiki

    六、总结

    • 如果一个大学生不怎么关注技术博客,也不知道有哪些技术博客,那么大概率你基本不会了解到你要学什么技术,也没有渠道可以让你拓展自己的知识面。并且尤其是在现在的软件基于人群喜好推荐下,你知道的越少的东西,就越少知道这个东西。所以主动有意识的学习,几乎是你个人成长最快的方式。
    • 做一件事,就把一件事做好!认认真真的长期坚持下来,你会在所走的路上收获很多,千万不要急于求成,否则你能获得的只是微乎其微。当你有一天真的要拿手里的这几张牌,出去闯荡的时候,会被人家炸哭。
    • 另外在大学里进来不要去做一些不会给自身带来长久价值的兼职工作,如果你真的缺那份钱另说,否则尽可能把这些时间用在你将来要找的工作所需的知识学习上。时间不多,做有价值的事更有益个人成长。
    • 酒香不怕巷子深,放在现在是几乎就是不可能的。因为酒不在是你一家酒了,谁能曝光的更多,宣传的更足,展示的更好,谁就更有机会可能成为佼佼者。否则站在台上那个不一定比你强的人,却可能比你过的更好。

    七、系列推荐

    展开全文
  • 解决思路: 1,定义一个类,名字为TestPrimeNumber。 2,在类中定义主函数。 3,用for循环打印出所有在100至200之间的数字。 4,在for循环中,判断每当循环执行一次,就判断循环...如果2至n-1都无法整除n,就是素数。
    解决思路:
    
    1,定义一个类,名字为TestPrimeNumber。
    2,在类中定义主函数。
    3,用for循环打印出所有在100至200之间的数字。
    4,在for循环中,判断每当循环执行一次,就判断循环变量的值是否为素数,如果是,就把循环变量的当前值大于出来。
    5,比如一个数为n,就用2至n-1来除n,以此来判断是否是素数。如果从2至n-1都无法整除n,就是素数。
    展开全文
  • 本讲我们介绍如何利用C语言去解决一个简单的数学问题,1+2+...+100=?首先我们将问题简化一下,只求1+2=?相信每位同学都能很快的出c语言的程序。按照第一讲的思路,我们先程序模板,然后在指定的地方编写代码...

    本讲我们介绍如何利用C语言去解决一个简单的数学问题,1+2+...+100=?

    首先我们将问题简化一下,只求1+2=?相信每位同学都能很快的写出c语言的程序。按照第一讲的思路,我们先写程序模板,然后在指定的地方编写代码即可。

    #include <stdio.h>
    
    int main(){
    
                int a1 = 1;
    
                int a2 = 2;
    
                int sum =a1 + a2;
    
                return 0;
    
    } 

    是不是很快就写出了程序代码,既然1+2我们能求,那么1+2+...+100是不是也是同样的道理。

    #include <stdio.h>
    
    int main(){
    
                int a1 = 1;
    
                int a2 = 2;
    
                ...                                
    
                int a100 =100;
    
                int sum =a1 + a2+...+a100;
    
                return 0;
    
    }

    (上面的代码并不是完整的代码,其中的省略号部分需要大家自己补全。)

    这就是我们解决1到100求和的第一种解法。是不是很有成就感!!!

    上面的代码虽然能够解决问题&#

    展开全文
  • S7 200 PPI编程口读写数据

    千次阅读 2014-10-11 11:12:01
    单片机按如下的格式发读写指令,PLC作出接收正确的响应(返回应答数据E5H或F9H见下文分析),上位机接到此响应则发出确认...SD:开始符(68H) LE、Ler:长度(DADU) DA:目的地址 SA:源地址 FC:功能码 (6CH)

    最近在做的项目就是使用如下协议对200PLC进行数据读写的,基本上可以完成读写功能(T、C这两种类型暂时还没有成功,正在查找原因)

    上位机按如下的格式发读写指令,PLC作出接收正确的响应(返回应答数据E5H或F9H见下文分析),上位机接到此响应则发出确认命令(10 02 5C 5E 16),PLC再返回给上位机相应数据。

    SD LE LEr SD DA SA FC DSAP SSAP DU FCS ED
    SD:开始符(68H) LE、Ler:长度(从DA到DU)
    DA:目的地址 SA:源地址
    FC:功能码 (6CH) DSAP:目的服务存取点
    SSAP:源服务存取点 DU:数据单元
    FCS:校验和 ED:结束符(16H)
    3.1 读命令分析
    一次读一条数据
    对于一次读取一个数据,读命令都是33个字节。前面的0—21字节是相同的,为 :
    68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
    因为是单片机上发的读PLC数据的命令,SA=00,DA=02,如果有多个站,DA要改成相应的站号。读命令中从DA到DU的长度为1B即27个字节。从22字节开始根据读取数据的类型、位置不同而不同。表一是读不同存储器命令的Byte22—32。
    字节 22 23 24 25 26 27 28 29 30 31 32
    功能 读取长度 数据个数* 存储器类型 偏移量 校验 结束
    读q0.0 01 00 01 00 00 82 00 00 00 64 16
    读m0.0 01 00 01 00 00 83 00 00 00 65 16
    读M0.1 01 00 01 00 00 83 00 00 01 66 16
    读SMB34 02 00 01 00 00 05 00 01 10 F9 16
    读VB100 02 00 01 00 01 84 00 03 20 8B 16
    读VW100 04 00 01 00 01 84 00 03 20 8D 16
    读vd100 06 00 01 00 01 84 00 03 20 8F 16
    读i0.5 01 00 01 00 00 81 00 00 05 68 16"
    读i0.7 01 00 01 00 00 81 00 00 07 6A 16"
    表 一 读命令的Byte22-32
    从表中我们可以得出以下结果:
    Byte 22 读取数据的长度
    01:1 Bit 02:1 Byte 
    04:1 Word 06:Double Word
    Byte 24数据个数,这里是01 ,一次读多个数据时见下面的说明。
    Byte 26 存储器类型,01:V存储器 00:其它
    Byte 27 存储器类型
    04:S 05:SM 06:AI 07:AQ 1E: C
    81:I 82:Q 83:M 84:V 1F: T
    Byte 28,29,30存储器偏移量指针(存储器地址*8),如:VB100,存储器地址为100,偏移量指针为800,转换成16进制就是320H,则Byte 28—29这三个字节就是:00 03 20。
    Byte 31 校验和,前面已说到这是从(DA+SA+DSAP+SSAP+DU) Mod 256 。
    一次读多条数据
    对于一次读多个数据的情况,前21Byte与上面相似只是长度LD,LDr及Byte 14不同:
    Byte 14 数据块占位字节,它指明数据块占用的字节数。与数据块数量有关,长度=4+数据块数*10,如:一条数据时为4+10=0E(H);同时读M,V,Q三个不同的数据块时为4+3*10=22(H)。
    Byte 22 总是02 即以Byte为单位。
    Byte 24 以字节为单位,连续读取的字节数。如读2个VD则Byte24=8
    Byte 19---30 按上述一次读一个数据的格式依次列出,
    Byte 31---42 另一类型的数据,也是按上述格式给出。
    以此类推,一次最多读取222个字节的数据。
    3.2 写命令分析
    一次写一个Double Word类型的数据,写命令是40个字节,其余为38个字节。
    写一个Double Word类型的数据,前面的0—21字节为 :
    68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
    写一个其它类型的数据,前面的0—21字节为 :(与上面比较,只是长度字节发生变化)
    68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
    从22字节开始根据写入数据的值和位置不同而变化。表二是几个写命令的Byte22—40。
    字 节 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
    写入位置及值 长度 个数 类型 偏移量 位数 值、校验码、结束符
    M0.0=1 01 00 01 00 00 83 00 00 00 00 03 00 01 01 00 71 16 
    M0.0=0 01 00 01 00 00 83 00 00 00 00 03 00 01 00 00 70 16 
    M0.1=1 01 00 01 00 00 83 00 00 01 00 03 00 01 01 00 72 16 
    vb100=10 02 00 01 00 01 84 00 03 20 00 04 00 08 10 00 AE 16 
    vb100=FF 02 00 01 00 01 84 00 03 20 00 04 00 08 FF 00 9D 16 
    VW100=FFFF 04 00 01 00 01 84 00 03 20 00 04 00 10 FF FF A6 16 
    VD100=FFFFFFFF 06 00 01 00 01 84 00 03 20 00 04 00 20 FF FF FF FF B8 16
    表二 写命令的Byte22—40
    经分析我们可以得出以下结果:
    Byte 22-- Byte 30 写入数据的长度、存储器类型、存储器偏移量与读命令相同。T,C等不能用写命令写入。 
    Byte 32 如果写入的是位数据这一字节为03,其它则为04
    Byte 34 写入数据的位数
    01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double Word 
    Byte 35--40值、校验码、结束符
    如果写入的是位、字节数据,Byte35就是写入的值,Byte36=00,Byte37=检验码,Byte38=16H,结束。如果写个的是字数据(双字节),Byte35,Byte36就是写入的值, Byte37=检验码,Byte38=16H,结束。如果写个的是双字数据(四字节),Byte35—38就是写入的值, Byte39=检验码,Byte40=16H,结束。
    3.3 其它命令分析
    强制写入
    I、Q、S 等不能使用上述的写命令写入数据,只能用强制写入的方式。
    前0—35字节值如下(长度字段要根据实际情况而定),需要注意的是Byte8=07,
    68 2B 2B 68 02 00 6C 32 07 00 00 00 00 00 0C 00 12 00 01 12 08 12 48 0B 00 00 00 00 00 FF 09 00 0E 00 01 10 
    后面的内容如下:
    Byte 32 占位字节,从下一字节开始到校验和前的字节数。说明同读数据的Byte 14.
    Byte 36 强制写入数据的长度
    01:1 Bit 02:1 Byte 
    04:1 Word 06:Double Word
    Byte 38 数据个数,这里是01 ,一次强制写多个数据时见下面的说明。
    Byte 40 存储器类型
    Byte 41 存储器类型,见读命令的说明。
    Byte 42、43、44存储器偏移量指针(存储器地址*8)
    Byte 45、46、47、48 值、校验码、结束符
    取消强制写
    强制写入I、Q 等后,这些值就不能被程序改变,除非使用”取消强制命令”。 取消强制命令的格式与强制写入相似,变化的有以下几点:(1)是没有”值”这一段,即没有Byte45—48。这影响到长度字节LE,LEr;占位字节Byte 32.(2)Byte16=10H, (3) Byte32=0CH,也就是第一条,没有”值”这一段,数据块长度变短了。
    对于一次强制写入或取消多个数据的情况可以参照写入命令写出相应的报文,这里不再给出。
    STOP命令
    STOP命令使得S7-200 CPU从RUN状态转换到STOP状态(此时CPU模块上的模式开关开应打在RUN或TERM位置)。PC发出如下命令,PLC返回F9,此时PLC已进入等待状态,PC再发确认报文(10 02 5C 5E 16),完成一个命令过程。
    68 1D 1D 68 02 00 6C 32 01 00 00 00 00 00 10 00 00 29 00 00 00 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16
    RUN 命令
    RUN命令使得S7-200 CPU从STOP状态转换到RUN状态(此时CPU模块上的模式开关开应打在RUN或TERM位置)。PC发出下命令,PLC返回F9,此时PLC已进入运行状态,PC再发确认报文(10 02 5C 5E 16),完成一个命令过程。
    68 21 21 68 02 00 6C 32 01 00 00 00 00 00 14 00 00 28 00 00 00 00 00 00 FD 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16 
    3.4 读出数据分析
    一次读出一条数据
    PLC响应的数据也是用PPI封装的。如果用一次读一条数据命令,响应的报文中就只包含一条数据,此响应报文的Byte16<=8。 
    Byte 04:DA=00 Byte 05:SA=02 即从02 PLC站发往PC。
    Byte 16:数据块占位字节,从Byte21到校验和前的字节数。
    一条数据时:Word=06 Double Word=08 其它为 05。
    Byte 22:数据类型,位=3,其它=4。
    Byte 24:数据宽度,Bit=01,Byte=08,Word=10H,Double Word=20H
    Byte 25—28:值。
    如果网络上只可能有一个站会发回响应报文,那么可以简单的根据LE长度字节判断返回值的位置:LE=16H,返回值是字节,或位类型的值,响应报文的Byte 25即是返回值;LE=17H,返回值是字(双字节)类型的值,响应报文的Byte 25,26即是返回值;LE=19H,返回值是双字(四字节)类型的值,响应报文的Byte 25—28即是返回值。更准确的方式是要根据返回报文的SA,DA,及存储器位置等信息识别目标地址和源地址,确认是这次申请的返回数据,然后经过校验检查,得到正确的数据。
    一次读出多条数据
    如果用的是一次读多条数据的命令,响应的报文中就包含有多条数据。这些数据只有类型参数,没有偏移量参数,所以要注意根据读命令的顺序将其一一对应起来。
    Byte 16:数据块占位字节,从Byte21到校验和前的字节数,与数据块数量和类型有关。
    Byte 20:数据块的个数。
    Byte 21 开始为数据块,每一个数据块都以FF 04开始,接下来的两个字节表示这一数据块的长度,以位计算,然后依次是连续的数据。下一个数据块也是以FF 04开始,重复上述格式,直到结束。

    上位机与PLC通讯时,上位机采用485芯片与PLC的编程口连接,,遵循PPI协议,主从式的通讯方式,一次读写操作的步骤包括:首先上位机发出读写命令,PLC作出接收正确的响应(返回应答数据E5H),上位机接到此响应则发出确认命令(10 02 5C 5E 16),PLC完成正确的读写响应,返回给上位机相应数据。这样收发两次数据,完成一次数据的读写。那么我们就可以利用上述PPI协议,读写S7-200PLC中的各种类型数据,包括I、Q、SM、M、V、S、T、C(T、C这两种类型暂时还没有成功,正在查找原因)等数据类型,能够直接读出以上变量中的位、字节、字、双字等,(其中读位变量时,实际是读取该位所在的字节值)。可以改变PLC的运行状态(RUN/STOP)。 在编程时,最好将读取的检测值、输出值等数据,存放在PLC的一个连续的变量区中,当上位机读取PLC的数据时,就可以一次读出这组连续的数据,减少数据的分次频繁读取。当修改设定值等数据时,进行写数据的通讯操作。
    展开全文
  • Java swing 的贪吃蛇代码200

    万次阅读 多人点赞 2015-12-04 20:45:20
    刚学完书上java的swing,无聊做个贪吃蛇练练, 200多行的代码也了好几个小时 0.0! 代码整体分成三块: * greedySnackMain:框架类 * snackWin: 面板类,这里主要就是对面板进行操作。 * Snack:蛇类 思想很...
  • C语言个贪吃蛇游戏

    万次阅读 多人点赞 2020-02-19 08:24:09
    贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情。这个游戏我完后放在知乎,竟然点赞的人数超级多。我觉得大家喜欢,一个方面是因为得简单,大家都能看得懂,一个可扩展性还是非常强...
  • 朋友听到这个消息的时候,我有点不太相信,做为一名程序员来讲,谁还没有过几段爬虫呢?只因爬虫程序就被端有点夸张了吧。 朋友说,消息很确认并且已经进入审判阶段了。 点击阅读全文 Python|【Python...
  • 3.2 游戏逻辑: 可以看到下面脚本,除了关键字和官方提供的API,需要我们自己的地方几乎用的全都是中文了,有没有感觉很亲切? using UnityEngine; using 按钮 = UnityEngine.UI.Button; using 文本 = ...
  • 零开始一个RTSP服务器(一)RTSP协议讲解

    万次阅读 多人点赞 2019-08-09 20:17:55
    零开始一个RTSP服务器系列 零开始一个RTSP服务器(一)不一样的RTSP协议讲解 零开始一个RTSP服务器(二)RTP传输H.264(待) 零开始一个RTSP服务器(三)一个传输H.264的RTSP服务器(待) 零开始...
  • 一、python3.6一个http接口服务,给别人调用1 首先推荐tornado,Tornado是一个Python web框架和异步网络库,最初在FriendFeed开发。通过使用无阻塞网络I/O,Tornado可以扩展数万个开放连接,使其成为长轮询、...
  • ReadWriteLock读写锁的使用(Java并发)

    万次阅读 2019-03-27 13:53:27
    Java并发编程,很多开发第一个想到同时也是经常常用的肯定是Synchronized,但是Synchronized存在明显的一个性能问题就是读与读之间互斥,简言之就是,我们编程想要实现的最好效果是,可以做到读和读互不影响,读...
  • 陈同学整理的10个可以写到简历上C++项目

    万次阅读 多人点赞 2020-09-16 18:38:11
    很多搞C++的小伙伴 包括曾经我自己 特别是后端方向的 或多或少都有过一个这样的疑惑 "搞C++到底可以哪些项目呢?" 在项目这个问题上 对于像我一样的非科班生 ...
  • 简单的了一个sparkstreaming入es的demo,直接看代码吧: package spark import kafka.{PropertiesScalaUtils, RedisKeysListUtils} import kafka.streamingRedisHive.{dbIndex, kafkaStreams} import org.apache....
  • 1.100-200之间的数,肯定需要用到循环(for)遍历出这些数. 2.遍历出来的每一个数还要与比他小的每一个数相除,判断(if)结果是否为零. 3.如果为零了,就不输出(flag=flase),如果不为零,就输出(fla
  • 高铁北京回杭州的路上,想到一个简单的话题...在一个复杂的程序中,发生踩内存是一件非常恶心的事情,很难通过什么线索直到谁在哪个函数中往哪个地址了什么,比方说数组越界什么的。 去年,我曾经长篇大论了一篇: ...
  • 要想同时满足上面三条,可以采用读请求和请求串行化,串一个内存队列里去,这样就可以保证一定不会出现不一致的情况。但是,串行化之后,就会导致系统的吞吐量会大幅度的降低,要用比正常情况下多几倍的...
  • 零开始一个RTSP服务器(二)RTSP协议的实现

    万次阅读 多人点赞 2019-08-10 12:58:58
    零开始一个RTSP服务器系列 零开始一个RTSP服务器(一)不一样的RTSP协议讲解 零开始一个RTSP服务器(二)RTSP协议的实现 零开始一个RTSP服务器(三)RTP传输H.264(待) 零开始一个RTSP服务器...
  • 编程题:有两个字符串str1和str2,一个函数实现在str1中查找str2的初始位置,要求不区分大小 思路:1:首先判断两个字符串的大小,作初步比较  2:构建str1字符串的for循环,在此循环里实现str2字符串的for...
  • //把服务器获得图片的输入流InputStream写到本地磁盘 public static void saveImageToDisk() { InputStream inputStream = getInputStream(); byte[] data = new byte[1024]; int len = 0; ...
  • 手写识别数据库

    千次下载 热门讨论 2013-11-26 00:06:04
    包括数字0-9的手写数据集。每个数字大约有200个样本。每个样本保持在一个txt文件中,数字图像是32x32,所以txt文件的内容也是32x32个数字,0或者1。 具体使用方法见博客: http://blog.csdn.net/zouxy09
  • mac ntfs 读写操作

    千次阅读 2018-10-14 21:37:48
    发现mac系统无法对ntfs盘进行操作,找到了解决办法,这里做个记录。 1、在spotlight(就是那个放大镜图标)中输入“终端”二字,然后按enter。 2、打开终端后输入 diskutil list 查看所有分区的卷标。 ...
  • EPCS器件,此处主要是EPCS1、EPCS4,EPCS1、EPCS4其实是一种特殊的Flash,Altera称之为稳定性比较高的SPI FLASH。...此处使用了STM32,两路SPI,SPI1和SPI2来分别进行读和进行。 初始化函数如下 void ReadSPIIn
  • 如何优化MySQL千万级大表,我了6000字的解读

    万次阅读 多人点赞 2019-10-21 20:03:03
    这是学习笔记的第2138篇文章 ...一开始脑海里开始也是火光四现,不断的自我批评,后来也参考了一些团队的经验,我整理了下面的大纲内容。 既然要吃透这个问题,我们势必要回到本源,我把这个...
  • 2.7 多个线圈寄存器 0FH ...机地址为11H,线圈寄存器的起始地址为0013H,线圈寄存器的结束地址为001CH。总共访问10个寄存器。寄存器内容如下表所示。 表2.7.1 线圈寄存器0013H001CH 001AH
  • 0开始一个小程序

    千次阅读 2018-03-21 14:10:07
    0开始一个小程序,本来想一个新闻类的程序,后来发现调用的聚合数据api每天只能访问100次,就换成豆瓣的了,直接用豆瓣的接口又访问不了,在网上查了一下,要把豆瓣的地址换成“http://t.yushu.im”才能访问,...
  • C/C++读写文本文件、二进制文件

    万次阅读 多人点赞 2017-12-13 10:44:11
    // ios::app = 0x08, //供,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后 // ios::trunc = 0x10, //在读写前先将文件长度截断为0(默认) // ios::nocreate = 0x20,...
  • 零开始一个RTSP服务器系列 零开始一个RTSP服务器(一)不一样的RTSP协议讲解 零开始一个RTSP服务器(二)RTSP协议的实现 零开始一个RTSP服务器(三)RTP传输H.264 零开始一个RTSP服务器(四)一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 798,753
精华内容 319,501
关键字:

从1写到200怎么写