求助---单片机与PLC串口通讯问题
我做了一个数据采集模块,采集的数据然后通过RS485 发送出去,我通过一个RS485转232转换器与电脑连接,数据接收与发送 以前正常,非常稳定,
昨天去一家客户那,做配套,他们的设备使用的是欧姆龙的PLC,PLC的串口1插了一个RS485模块,连接进去后,PLC上的RS485模块的COMM灯一直在闪,表示串口有数据传入,
但是客户那里的PLC工程师不会做串口编程以及设置,一直调试了好久,都不会把数据接收到寄存器里面,还说我的串口有问题。
本来RS485只是一个硬件协议的,即使是我定义的软件协议有问题,至少是能接收到字符,但是现在寄存器里面的串口接收数据都没有,还说是RS485协议有问题。我听了都笑死了。
我不懂PLC编程,哪位做过类似的应用,帮我写一个PLC程序,以及一些相关的设置。
他们老板和我们老板是朋友,没有办法必须的帮他们解决,
我的软件通讯协议 很简单的
协议如下:
byte: 0 1 2 3 4 5 6 7 8 9 10 11
定义:0x02 符号位 数据高位 ---------------------低位 小数点位置校验高4位校验低4位0x03
一帧数据共12个字节
1、起始符号:0x02
2、结束符号:0x03
3、符号位 “+” 或“-” 的ASCII
4、数据 为 0~9的ASCII
5、小数点位置,从数据右边数的第几位 ,也是ASCII形式
6、校验位:从 字节1--字节8 的异或, 高4位+0x30, 低4位 + 0x30, 偶不懂PLC 纯属帮顶,顺便学习下你的通信协议,嘿嘿 这个协议很简单的
市场上很多仪表与电脑通讯都是这个协议的,网上找找就有的
在通讯速度要求不高的场合 很实用的
继续==== 一直到天荒地老!! 这样找问题嘛:
PLC上不同厂家使用的不同,例如:施耐德使用的是MODBUS协议,就是操作DI、DO、AI、AO
(1)、首先清楚欧姆龙PLC的协议
(2)、然后编写一个最简单的通讯程序测试(无关的程序不要编写)
就读欧姆龙PLC内部的线圈(DO)
(3)、然后一步一步的测试其它功能 不明白你要做的是什么。
OMRON的PLC的通讯也是要有协议的,你是要采集PLC上的数据吗?
最好先用电脑调试一下,成功了再用单片机实现。 那个欧姆龙支持自由口通讯么。
可以试试用s7-200的,它的串口可以设置为自由口通讯模式,用于自定义协议的串口通讯。 我在楼主位说了:
1、单片机是作为数据采集,然后把数据传给PLC,
2、第一个问题是,数据已经发送过去了,但是当时调试的时候,连串口数据都没有读到(就是接收到的那些一个个字节),就不要谈什么MODBUS协议。
3、假如读到数据了,然后在PLC里面,根据楼主位所写的协议怎样还原成一个浮点数,或者整型数,这个在单片机或者PC软件是很简单的,但是PLC里面该怎么操作,不会 呵呵
4、单片机这头是没有问题的,已经在电脑上测试过的,很稳定,已经在其他产品上已经在使用了。 to erxun 老孟
什么是自由串口, 呵呵 PLC 我一点都不懂,就是那天调试的时候,稍微了解了一点
到时候我去问问那个PLC工程师,看他知道不 回答你的问题3:
通常PLC里面很少有直接用浮点数的,一般像你说的这种数据采集的值,都是放在保持型寄存器里面的,保持型寄存器比较常见是一个16位的无符号整型,因此,建议你在这头用16位整型来表示你的测值,至于整型值与浮点如何对应,比较常见有AD变换方式,比如,用码值20000表示你的工程值高,用4000,表示你的工程值低值.当然还有其他的类型的变换方式.
另外:确实好像很少听说欧姆龙的能够支持自由口通信的.
通常像你说的这种方式,我们一般比较推荐采用MODBUS协议,PLC做主站,你的单片机做从站,这样比较合理一点.关键还要再看一下欧姆龙的PLC,他支持的通信方式有哪些?我记得好像欧姆龙的通信能力是不太好的.
另外:刚才仔细看你的协议,你的协议是主动上送的方式?还是召唤应答的呢?如果是前者的话,确实PLC的灯会亮。欧姆龙的PLC很有可能解析不了你的协议。呵呵,那样麻烦就大了。 谢谢 oldtom
那我就用整型数,在PLC里面处理的时候,通讯协议里面那个小数点位置 就直接忽略他,就是整型数,只是数值上大了 10倍 或者100被而已。
我记得三菱的PLC里面有个命令就是用于ASCII直接转换成一个数值,不知道欧姆龙的PLC有不?
如果有的话,那就好办了,直接就可以转化了,
如果我的单片机直接把一个长整型数,拆分成4个字节,直接发送过去,不知道在PLC里面操作转化起来是否会容易点? 呵呵
是麻烦大了啊
我的是采用主动发送的,因为从机只有一个,所以没有采用问答的方式。
我的协议就是modbus-ASCII协议,只是根据PLC稍微改动了一点,
一个是根据PLC默认的帧头和帧未改成0x02 和0x03
一个是校验方式采用简单的 字节异或, 欧姆龙的PLC恐怕不能这么做。我对日系的PLC了解甚少,建议你还是了解看欧姆龙能这么不!顺带问一个题外话,你的数据采集模块是采集啥东西的呢? 采集 0~20mV的差分信号
比如压力传感器、称重传感器, 这些传感器内部就是一个会斯通电桥。
主要是采集这些信号的 选用PLC是他们决定的,我们也没有办法哦
现在主要问题还是在 数据接收上,如果能接收进来,一切还是都很好办的,
软件协议随时都能改的,反正的板子做了BOOTLOADER,程序直接就可以通过串口线更新 像这种模块,我建议你们可以搞一个modbus rtu协议,目前MODBUS RTU协议用的比较多,呵呵。我了解不多,欧姆龙PLC恐怕不能支持这种做法吧。 那是你的问题了,既然你的是作为主机,那就应该按照,PLC的标准读写地址,去把你的参数写入到PLC中,一般PLC的通讯设定为接收就可以了,连校验都可以省略。 嗯
好的,协议随时能改的,这个是没有问题,
到时候再次调试的时候,把他改过来
是不是改成modbus rtu 后,PLC里面只要在软件上设置一下就可以了,不需要自己在PLC里面编写转换程序? to ntkz
"PLC的标准读写地址,去把你的参数写入到PLC中"
这个没有看明白
难道PLC可以通过串口,就像操作寄存器一样,可以写寄存器?
“PLC的标准读写地址” 没有见过这个标准,而且可以通过串口操作的
如果说是通过PLC的编程调试口“把你的参数写入到PLC中”那还是差不多 建议lz看看相应型号PLC的编程手册和通讯手册之类的。 呵呵
是在加紧看哦
我是对PLC一点都不懂的
我主要是做单片机这块,如果说我的软件协议有问题, 至少PLC里面是能接到字符是不?
现在主要问题就是 PLC连一个个字节都没有接到,郁闷啊
如过接到了 那后面的事情就好办了 呵呵!!
这两本书 我有三菱的,
但是欧姆龙的没有 哪位大侠有电子版本的传我一份 我现在 从新看了一下上面各位大虾所说了
现在说一下我的理解 ,不知道是不是这样的俄
如【erxun 老孟】所说的,像我这种自己定义的协议,在PLC里面应该设置成 “自由口通讯”,然后在PLC里面自己组合成一个数据值。
现在可能原因是 欧姆龙不支持“自由口通讯”,PLC自己采用某种协议来解释我发送的字节,但是解释不成功,所以直接把接收缓存给清除了,所以在,调试的时候看不到接收缓存中的一个个字节。
各位大虾 不知道问题是不是这样的? 建议楼主用MODBUS-RTU方式(MODBUS-ASCII方式传输太占用RAM了。每个数值要拆成几个字节)。
如果选用MODBUS-RTU协议,你的控制器就是主站,PLC就是从站。
你发送命令,PLC才给你应答。
其实MODBUS-RTU协议比较简单,就是读取DI(1X寄存器),读取DO/设置DO(0X寄存器),
读取AI(3X寄存器),读取保持寄存器/设置保持寄存器(4X寄存器)
记住:MODBUS协议是工业标准,基本上任何一家公司生产的RS232/RS485上都支持MODBUS协议。所有的组态软件也全部支持MODBUS协议。不要再使用既浪费时间,又浪费精力的自定义协议了。 to ba_wang_mao
谢谢!我错了!我马上改 呵呵! 改成MODBUS-RTU 1 使用RTU, 最好让PLC做主站
2 按照RTU写代码,这里需要澄清一个问题,协议不对,PLC bull(敏感词0373)都收不到。
3 不要使用什么自由口通信,正如楼上所说,MODBUS是不收费的事实上的工业设备标准通信协议
东西我做过,关键在协议。 谢谢 以上各位了!
了解了
确实得 必须把协议做成MODBUS-RTU,马上动工 呵呵
有好的成绩,马上向各位汇报 哈哈!
真高兴有可能解决问题了! 你好,这个OMRON PLC你要看一下是什么型号,如果是新系列的CP1系列是直接支持 MODBUS RTU 设备的,要是老型号的CMP1A CMP2A对这个MODBUS RTU支持就比较麻烦了,一般OMRON用的协议 最多的串口通讯还是HOSTLINK 如果你需要相关的说明书,可以联系我,我这里有一些OMRON的使用手册。QQ:38684866 。MSN :lulg100@hotmail.com 楼主所用的是自由通信协议(即自定协议),对方PLC工程师不会写通信程序的话,还是不要用这个协议,因为这样PLC要写很多程序来处理通信的。建议使用OMRON的 上位机链接协议,单片机作为上位机,可以读写PLC中任意内存区域(当然是在规定的范围内),PLC不需写通信程序。比如你可以用WD指令把采集到的数据写入D100.D101.D102...的内存区域。
有关OMRON 上位机链接协议的手册网上可以找的到,OMRON官方网站也有。 看了上面一些回复后我再说几句:
无协议通信(即自由通信)是几乎所有的PLC都支持的通信协议(所有大品牌的PLC都支持,OMRON全系列PLC都支持),要求通信的双方事先约定好通信协议,一方做主机,另一方或多方做从机(即1:1或1:N),然后各自编写通信程序,只有双方通信程序无误后方可正常通信。楼主所说的看不到PLC接收数据,如果PLC方程序没有写好的话可能是看不到任何接收的数据的。
MODBUS通信也是比较普遍一种通信方式,在工业上应用较多。这种协议是PLC做主机,其它设备做从机,PLC上不需写通信程序,但要设置相应数据,把要发送的数据写到相应发送区域内存中,而接收的数据则存储在接收区的内存中,PLC只需从接收区内存中取数据就行了。但该协议不是所有PLC都支持,有相当一部分PLC不支持,所有楼主应先询问客户的PLC是否支持。
上位链接协议是OMRON全系列PLC都支持的一种协议,协议格式都是一样的,不同处在于不同系列的PLC的读写内存范围不一样。这个协议要求PLC做为从机,而其它设备,例如计算机、人机界面等做为主机。主机按照协议格式可以读写任意的内存区域(协议指定的范围内),PLC方不需写程序,只要使用相应内存区的数据就行了,或者把数据放入相应内存区,主机即可读到该数据。 因为对方不会写PLC通信程序,我认为用上位链接协议(HOST LINK)比较好,你只管向PLC内存写数据,他只管使用这些数据就行了。 好
谢谢楼上的,非常的感谢!!
我听对方客户工程师说过的 支持HOSTLINK的
您那儿有相关手册 那是太好了 我需要这些,我的QQ:39637663 E-Mial:knight@foxmail.com马上加您的QQ;
以后还需要多请教您! 客户使用的PLC 是 CP1H 手册已发到你邮箱,注意查收 OMRON的PLC只需要你了解HOST LINK协议就很好啊办了。使用MOV 指令直接想数据传送的DM区域就可以读写了。实在不行就调用TXD/RXD指令很好用的。 点击此处下载 ourdev_437991.rar(文件大小:32.03M) (原文件名:SYSMAC CP1系列手册.rar)
用串口通讯似乎简单易行,看看手册的指令使用有关串口的部分。不过,要委屈你去搞PLC程序了。 HOSTLINK,绝对方便简单,就是自己要处理下数据,全ASCII码传送 看一下该款PLC的通信手册,首先确定用来连接的串口线是否符合手册上要求的,如果线序不对,也是读不到数的,我用过三菱的做与上位机的自由协议通信(无协议通信),很简单的,先让对方用PLC与PC机用串口助手监测通信成功后,再与你的单片机通信 谢谢 大家!!
我正在写HOSTlink 呵呵 是这样的
你的是单片机作的对吧,一个字节再发送时,起始位,停止位,可编程位(奇偶效验位),数据位,一共11位,你用的是8051吧,而单片机里的可编程位SM2你可以随便些1或者0,8051介绍多机通信的时候常用,而PLC则“奇偶效验”就是奇偶效验,不能可编程,这样就存在了问题 如果你作的是多机通讯
假设你是从站 你接受的时候要判断SM2=1才执行中断,所以你再发送的时候设置SM2=0 ,希望主站发送的数据SM2=1, 因为PLC只认为这个位表示的是“奇偶效验”所以主站(PLC)你无论设置奇效验 还是偶效验 都会认为接收的是错误,,而选择无效验呢,位数又少了一位,换句话说就是PLC认为你发送的带了奇偶效验位,而奇偶效验的结果是错误的,除非赶上数据奇偶效验的时候程序认为SM2这个位应该自动补充0, 不知道说明白没PLC再接收到数据后(为什么你看见PLC COMM灯再闪烁的原因是因为接收到了数据)发现奇偶效验错误 所以把数据清零了,所以从PLC本身上你看见的数据全是0的原因(数据接收到寄存器里面了,只是PLC自己给清零了)
你只要把你的SM2=0 或者SM2=1换成根据所作的奇偶效验自动补充(1或者0)问题就解决了 她的程序不一定错误 你的也没错 只是PLC不能作8051那个单片机中的多机通讯方式的格式
这个问题害我查了N久 我的问题解决了
如果你能知道PLC也可以作的话 谢谢你能告诉我 我的QQ4242411 小弟再这里谢谢了 楼上很多人回答得都是正确地.我也做过OMRON PLC与单片机通讯和与电脑通讯的程序,其实是比较简单的.因为OMRON的HOST LINK协议是开放的.楼主要让OMRON PLC能读懂你的数据你得改改你的协议,直接将数据写到PLC的DM地址上.看看手册吧,真的很简单! mark Omron通訊協議是Hostlink , 但你要寫入資料到PLC,還要用CX-Programer將PLC設為Monitor Mode. xuexi 原来做过与国产信捷的自由通讯,很简单的,单片机直接发ASCII到PLC,单片机一直发,PLC一直收,没有奇偶检验,也没必要检验。 回复【楼主位】knight_avr
-----------------------------------------------------------------------
大家点评到位,学习了,正好受用! 记号一个 自由口通信。别听上面的人瞎扯。 楼上都是高手啊,尤其是yu_studio,所说正解。
页:
[1]