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