工控编程吧
标题: C脚本中使用MSCOMM如何发送0字符,VB脚本中如何发送大于128的字符 [打印本页]
作者: baikhgmv 时间: 2016-9-9 22:01
标题: C脚本中使用MSCOMM如何发送0字符,VB脚本中如何发送大于128的字符
C脚本中使用MSCOMM如何发送0字符,VB脚本中如何发送大于128的字符,虽然是非主流话题,但的确客户需要,如题,客户要在WINCC中实现MODBUS RTU 协议(做为从站)与一个远端的DCS进行通讯.我已经用了很多方法,可就是这样,在C脚本中用MSCOMM控件无法发送0字符,在VB中又无法发送大于128的字符.当然我更希望在C脚本中实现发送0字符,毕竟C脚本处理数据的功能要强很多.
最后的方法我就是使用API了!不过实在不希望使用API.
----------是字符串"0",还是Ascii码0?
超出128可能就不是字符了吧?难道有中文信息?
--------谢谢关注!
是ASCII码0.
不是有中文信息,因为是MODBUS RTU可能值大于128的.
------额,忘了WinCC中的Mscomm控件只支持字符串格式了。
------谢谢,
看来楼主还需要跟3楼学习一下搜索的习惯。
------MSCOMM是一个跟常用的控件,做第三方通讯经常要用到
------几经努力,这个问题应该算是可以得到解决了,呵呵。
对于字符串来说,C中的ASCII 0代表结束符,而VBS的CHR只支持到0~127,所以要解决这个问题,MsComm控件发送时必须使用Byte()格式的字节数组数据,接收也必须使用comInputModeBinary的接收方式。
不过遗憾的是VBS并不直接支持Byte()格式,其实我们声明的Dim SendByte(x)只是Variant()格式,因此需要想办法将其转换为Byte()格式就能拿来用了。
目前我的做法是用VB编写一个DLL文件,用于实现Variant()和Byte()之间的互相转化。
经测试,0~255的ASCII均可发送和接受,下面是效果图:
(, 下载次数: 1)