问题描述
小弟第一次接触PC与PLC通信,希望能有个实例参考。我已经对端口进行了初始化等操作,想给PLC发送一个信号。端口为port1发送信号是否为port1.write("...")?我想发送一个信号为”M100“试了port1.write("M100")不好用,请问该如何发送信号?信号是否有什么格式和规则,希望大牛给一个例子,就是PC给PLC发送一个为"M100"的信号还有读取PLC地址“M101”中的值的例子。
解决方案
解决方案二:
你要给出协议,那个M100这不是协义吧。
解决方案三:
引用1楼wyd1520的回复:
你要给出协议,那个M100这不是协义吧。
就说是信号。。。。说是给机器发送这个Y0的小灯就亮了。。。。。Y0路就导通了
解决方案四:
引用2楼Lin0601的回复:
Quote: 引用1楼wyd1520的回复:
你要给出协议,那个M100这不是协义吧。就说是信号。。。。说是给机器发送这个Y0的小灯就亮了。。。。。Y0路就导通了
你确认这是信号数据M100???如果是那要这样byte[]signal=System.Text.Encoding.UTF8.GetBytes("M100")port1.write(signal);
解决方案五:
引用3楼wyd1520的回复:
Quote: 引用2楼Lin0601的回复:
Quote: 引用1楼wyd1520的回复:
你要给出协议,那个M100这不是协义吧。就说是信号。。。。说是给机器发送这个Y0的小灯就亮了。。。。。Y0路就导通了
你确认这是信号数据M100???如果是那要这样byte[]signal=System.Text.Encoding.UTF8.GetBytes("M100")port1.write(signal);
一个是字节数组一个是字符串类型不匹配吧。我改成byte[]signal=System.Text.Encoding.UTF8.GetBytes("M100");myPortCommon.port_Plc.Write(signal,0,signal.Length);也不好用,郁闷啊。没搞过完全没有经验。
解决方案六:
你先确认M100是不是协议指令。才有的说
解决方案七:
引用5楼wyd1520的回复:
你先确认M100是不是协议指令。才有的说
(1)起始字元(STX):ASCII码的起始字元STX对应的16进制数位0x02。无论命令信息还是回应信息,它们的起始字元均为STX,接收方以此来判知传输资料的开始。(2)命令号码:为两位16进制数。所谓命令号码是指上位机要求下位机所执行的动作类别,例如要求读取或写入单点状态、写入或读取暂存器资料、强制设定、运行、停止等。在回应信息中,下位机会将上位机接收到的命令号码原原本本的随同其它信息一同发送给上位机。(3)元件首地址:对应要操作的元件的相应的地址。如从D123单元中读取数据时,要把它对应的地址:0x10F6发送给PLC。(4)元件个数:一次读取位元件或字元件的数量。(5)结束字元(ETX):ASCII码的结束字元ETX对应的16进制数为0x03。无论命令信息还是回应信息,它们的结束字元均为ETX,接收方以此来判知此次通讯已结束。(6)校验码(Checksum):校验码是将STX-ETX之间的ASCII字元的16进制数值以“LRC(LongitudinalRedundancyCheck)”法计算出1个Byte长度(两个16进制数值00-FFH)的校验码。当下位机接收到信息后,用同样的方法计算出接收信息的校验码,如果两个校验码相同,则说明传送正确。
解决方案八:
引用5楼wyd1520的回复:
你先确认M100是不是协议指令。才有的说
校验和:SUM=30H+31H+30H+46H+36H+30H+34H+03H=174H这个等式是怎么成立的?
解决方案九:
你直接bytea=0x30+0x31+0x30+0x46+0x36+0x30+0x34+0x03结果就是0x174
解决方案十:
引用8楼wyd1520的回复:
你直接bytea=0x30+0x31+0x30+0x46+0x36+0x30+0x34+0x03结果就是0x174
这个是协议,请问我发一个"M100"信号,发送的数据应该是什么样的?PC给定信号(触发信号)导通与不导通的可监控状态寄存器M100M110D100(1)起始字元(STX):ASCII码的起始字元STX对应的16进制数位0x02。无论命令信息还是回应信息,它们的起始字元均为STX,接收方以此来判知传输资料的开始。(2)命令号码:为两位16进制数。所谓命令号码是指上位机要求下位机所执行的动作类别,例如要求读取或写入单点状态、写入或读取暂存器资料、强制设定、运行、停止等。在回应信息中,下位机会将上位机接收到的命令号码原原本本的随同其它信息一同发送给上位机。(3)元件首地址:对应要操作的元件的相应的地址。如从D123单元中读取数据时,要把它对应的地址:0x10F6发送给PLC。(4)元件个数:一次读取位元件或字元件的数量。(5)结束字元(ETX):ASCII码的结束字元ETX对应的16进制数为0x03。无论命令信息还是回应信息,它们的结束字元均为ETX,接收方以此来判知此次通讯已结束。(6)校验码(Checksum):校验码是将STX-ETX之间的ASCII字元的16进制数值以“LRC(LongitudinalRedundancyCheck)”法计算出1个Byte长度(两个16进制数值00-FFH)的校验码。当下位机接收到信息后,用同样的方法计算出接收信息的校验码,如果两个校验码相同,则说明传送正确。
解决方案十一:
那不懂,光从上面看不出协义,给你的说明里应有一些DEMO协义吧,
解决方案十二:
引用10楼wyd1520的回复:
那不懂,光从上面看不出协义,给你的说明里应有一些DEMO协义吧,
PLC协议中地址该怎么计算?例如D100和M100?
解决方案十三:
去网上下一个兼容三菱PLC通讯的组态软件啊,这底层的通讯很复杂的。做工控一般都要用组态软件来开发,从最底下搞起要搞到什么时候。
解决方案十四:
引用6楼Lin0601的回复:
Quote: 引用5楼wyd1520的回复:
你先确认M100是不是协议指令。才有的说(1)起始字元(STX):ASCII码的起始字元STX对应的16进制数位0x02。无论命令信息还是回应信息,它们的起始字元均为STX,接收方以此来判知传输资料的开始。(2)命令号码:为两位16进制数。所谓命令号码是指上位机要求下位机所执行的动作类别,例如要求读取或写入单点状态、写入或读取暂存器资料、强制设定、运行、停止等。在回应信息中,下位机会将上位机接收到的命令号码原原本本的随同其它信息一同发送给上位机。(3)元件首地址:对应要操作的元件的相应的地址。如从D123单元中读取数据时,要把它对应的地址:0x10F6发送给PLC。(4)元件个数:一次读取位元件或字元件的数量。(5)结束字元(ETX):ASCII码的结束字元ETX对应的16进制数为0x03。无论命令信息还是回应信息,它们的结束字元均为ETX,接收方以此来判知此次通讯已结束。(6)校验码(Checksum):校验码是将STX-ETX之间的ASCII字元的16进制数值以“LRC(LongitudinalRedundancyCheck)”法计算出1个Byte长度(两个16进制数值00-FFH)的校验码。当下位机接收到信息后,用同样的方法计算出接收信息的校验码,如果两个校验码相同,则说明传送正确。
请问,三菱编程口与RS232口的协议通用吗?