用C#做了个上位机跟西门子200PLC通讯的程序,主要功能是发送给PLC一条指令,然后PLC反馈回数值来,但是目前遇到了个问题想不明白问题出在哪里,特来请教
PLC端已经写好了程序,用串口调试助手发送指令的话没有问题,但是用我写的程序发送PLC接受到的值就是错误的,在串口监视里看我写的程序跟串口调试助手发送的是一样的啊……
更奇怪的是我找了根USB转串口的线把23针短了之后自发自收,我的程序收发都对,但是串口调试助手的收到的是奇怪的字符……
之前没接触过串口已经完全晕菜了……希望路过的各位大大给些指点
下面的是串口调试助手的发送接收,上面是我自己程序的
既然可以发送数据,设备接到的数据,就会有返回代码,用串口调试助手转码,查下文档,看下是不是奇偶校验码或者数据格式没有写对
可能是数据格式 问题 有没有要求 UTF8 或者其他格式这样的。
把你用串口发送的截图,还有你程序发送的代码都贴上来。 我认为还是你的发送有问题。
1 //发送 2 private void sendToPort(string str) 3 { 4 if (true)//serialPort1.IsOpen) 5 { 6 if (str != "") 7 { 8 str += "ED"; 9 byte[] byteS = System.Text.Encoding.ASCII.GetBytes(str.ToCharArray()); 10 serialPort1.Write(byteS, 0, byteS.Length); 11 System.Threading.Thread.Sleep(1000); 12 } 13 } 14 }
代码就这样
串口发送截图是什么意思= =b
@StrayCat: 确认你的PLC识别的是ASCII码吗?
我说的不清晰,我说的串口的意思是串口调试工具
如果你不确认识别什么样的编码,就用十六进制数是最好的
@朝曦: 我是用的这个
我问过写PLC端的人,他说确实是接收ASCII的
我不太懂PLC,看了看PLC的程序,接收部分是这样的,帮助上说是ASCII转16进制
应该是我发的数据格式不符合这个的要求吧……