您好,我又编写了一个程序,您在帮我看看这个行不行,能不能实现直接把这个用0和1组成的字符串传输出去。
@镜花水月 wrote:... 我想问一下:是不是最后写入PLC的字符串是个ASCII啊?...
您好,
由于VISA Write发送的数据类型必须是string,需要把0x01转成字符类型(C语言中的char)再发送,如果把字符看成ASCII code 则其值还是1。所以并不是0x01的ASCII code (49)。
可是如果按照您write-2.vi中的程序,则把0x01转成 1的ASCII code '1' 发送出去。
是发送'1'还是0x01,需要视下位机PLC的程序实现来定。您可以根据需要选择其中一种方案。
您好,
非常感谢!我还是有些疑惑,您帮我编写的那个程序,如果所有的开关我都置1的话它发送的就是rrrrrrrrr,那么这个r又是什么呢?
是ASCII吗?但是1的ASCII 不是49吗?为什么会出现r呢?我不明白这点,希望您能在帮我解答一下,真的是很不好意思,我刚学,
对这些不太明白,真的是浪费您时间了。
ASCII码是一种常用的字符集。它把7bits数据对应到一些常用的字符或者控制符。当然类似的字符集还有很多,如Unicode,GB2312,UTF-8等。
一个字符集就是一组 字符/控制符 到 数据 的映射。比如ASCII中把 数据 49(0x31)定义为字符 '1';而把数据 1(0x01) 定义为控制符 SOH ,计算机打印出来就是那个类似r的字符。
回到您最初的问题上,您是要对下位机发送0x01 OR 0x00 进行开关控制,显然最简单的做法是吧0x01/0x00作为数据发送,而不是说发送‘1', '0'的ASCII码。因为这样可以避免数据到ASCII的转换。所以您在VISA Write Buffer中或许看到模样怪异的字符串,但是其实VISA发送出去的就是您想要的数据。
SOH
为什么LabVIEW与PLC联机调试的时候总是出现下面的错误呢?下面的截图就是我说的那个错误。是我没装VISA驱动吗?
能把全部error message贴出来看看吗?
可以尝试用NI Spy 看下 VISA 和 PLC通讯的数据。判断问题是出在上位机 还是下位机。
"开始 >> 程序 >> National Instruments >> NI Spy"