原创不易,请勿抄袭。
前段时间,我写了一篇S7-200smart通过RS485端口使用自由口通讯方式向计算机发送数据的实例。
实例过程;将需要的数据转换成ASCII码的方式并发给计算机。
写完之后很多人私信我,问我关于ASCII码的问题,今天我根据那个应用实例来讲解一下ASCII码;也希望朋友们可以多给我留言,有什么问题或者对于我文章的想法都可以告诉我。
首先我们看一下ASCII码;ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。
也就是说ASCII码是根据计算机的工作原理应运而生的一种语言。标准码表如下图;
这个表是什么意思?
其实很简单,大家可以把它理解成一种协议,就是双方都规定好了;我发1631就是1的意思,你收到1631也是代表1而不是49。大家可以看到上面的码表,通过这个码表我们可以看到这种方式可以发送的内容很多。所以这种方式适用性较强,可应对各种情况。
那么在PLC和电脑进行通讯时不用ASCII码可以吗?当然可以,比如说可以使用MODIBUS,或者你和软件工程师商定自己写一个协议都可以。
我们再看一下S7-200smart的转换指令是如何工作的!
以这个指令举例,我们将双字VD600的数值以FMT=16C9的方式转换成ASCII码,该码存在以VB805为起始地址的区域里。
RTA是将实数值IN转换成ASCII码。格式参数FMT会将指定小数点右侧的转换精度,小数点显示为逗号还是句号以及输出缓存区大小。得出结果会存入以OUT开头的输出缓存区。
FMT=16C9的意思是输出缓存区大小为12个字节,小数点显示为逗号,保留一位小数点。比如说VD600=12134.64,转换后,
VB805=1620(空格);VB806=1620(空格);VB807=1620(空格);
VB808=1620(空格);VB809=1620(空格);VB810=1631(对应1);
VB811=1632(对应2);VB812=1631(对应1);VB813=1633(对应3);
VB814=1634(对应4);VB815=162C(对应逗号);VB816=1636(对应6)
这回看懂了吧!
工程测试图
其他的指令的运行方式和RTA类似,大家举一反三吧!
计算机接收到信号后,按照ASCII码反编译!就可以得到相关的数据,但需要注意的是;数据要有开始或者结束标志(比如我程序里的0D0A),而且两个数据之间需要做分割,比如我程序中的163A是冒号的意思,就是分隔符。否则计算机端的软件工程师会找你拼命的!想要看我以前程序的请找我以前的文章吧!
好吧,且行且珍惜!看懂的朋友点个赞吧!
免责声明:内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,本网站所提供的信息只供参考之用。