[开源FX1N PLC V1]基于论坛开源plc的stm32版本
本fx1n PLC基于阿莫论坛开源PLC,现在版本支持windows,stm32。src stm32f103c8t6下的运行代码,理论上其他103的板子,也不需要做很大的改动。在main.c中有两个函数
void fx1n_readX(u8t* buf, u32t length) {
}
void fx1n_writeY(u8t* buf, u32t length) {
}
这两个函数你可以根据需要自行更改。
plc.exe(windows下可执行文件) plc模拟器,方便在没有具体硬件时调试,
运行方式为 plc com9
test 文件,是plc测试文件,可以用gx works2打开联机测试。
欢迎大家编译测试,如果有问题欢迎论坛留言,或者给我发电邮(youkebing@163.com).
因为是业余维护,可能回复不及时,期望大家理解。本代码只供学习,禁止商业使用。
谢谢分享!学习学习 greenflyqqq 发表于 2016-3-26 08:53
谢谢分享!学习学习
可以编译试试,完全的源码 源码 不错,学习一下PLC的东西 谢谢{:handshake:}{:handshake:}{:handshake:},学习一下 测试了一下通过编译 不管如何,先谢谢楼主这种精神。
有问题欢迊在论坛交流 最近在学习PLC感谢了,辛苦 ersha4877 发表于 2016-3-26 10:58
最近在学习PLC感谢了,辛苦
这个是做PLC不是用PLC {:shocked:}{:victory:} 目标 处理器 的资源分布 ,指令 格式,寄存器 描述 啥的 也 说说啊
youkebing 发表于 2016-3-26 11:14
这个是做PLC不是用PLC
老早想自己做个玩,无奈水平差,哈哈,那个PLC.exe怎么打开啊XP直接点击无反应,谢谢 ersha4877 发表于 2016-3-26 11:56
老早想自己做个玩,无奈水平差,哈哈,那个PLC.exe怎么打开啊XP直接点击无反应,谢谢 ...
命令行,后面要带串口号做参数,很聪明的方法,超快速生成一个模拟器~ ersha4877 发表于 2016-3-26 11:56
老早想自己做个玩,无奈水平差,哈哈,那个PLC.exe怎么打开啊XP直接点击无反应,谢谢 ...
plccom3 可以用虚拟串口软件建立一对串口,
这样在台pc就可以调试了 youkebing 发表于 2016-3-26 12:36
plccom3 可以用虚拟串口软件建立一对串口,
这样在台pc就可以调试了
楼主你QQ多少啊,希望交流一下{:handshake:} vc9181 发表于 2016-3-26 13:32
楼主你QQ多少啊,希望交流一下
就在论坛或者发邮件吧 谢楼主 cqfeiyu 发表于 2016-3-26 19:37
谢楼主
不用谢谢 {:victory:}{:victory:}{:victory:} Excellence 发表于 2016-3-27 09:20
如果能参与测试,那是最大支持 mark............ 继续看看源码 收藏了,学习一下 好东西!谢谢分享! 希望大家积极反馈,毕竟,你的回应是我最大的动力 谢谢分享{:victory:}{:victory:}{:victory:}
清问下面这些地址的定义是根据什么来定义的呢?
#define RAM_SM_bitAddr 0x0E00//SMx 特殊辅助继电器 M8000 ~ M8255
#define RAM_Cp_bitAddr 0x0F00//Cx 计数器 Over Contact C000~ C255
#define RAM_Tp_bitAddr 0x1000//Tx 定时器 Over Contact T000~ T255(0x10ff)
#define RAM_X_bitAddr 0x1200//Xx 输入继电器 X000~ X277
#define RAM_S_bitAddr 0x1400//Sx 状态寄存器 S000~ S999
这没有标准l,都是前辈点点幸苦测试出来的 玩玩看 谢谢分享! 下来向大神学习,谢谢分享! 支持楼主。 楼主的头像 XMOS 哪里买的到呢?对这个很感兴趣。 brumby 发表于 2016-4-7 15:04
楼主的头像 XMOS 哪里买的到呢?对这个很感兴趣。
xmos活动送的 一声叹息!本来发代码是为了大家流,但似乎只有要代码。几乎没有一位交流点点技术或问题的。下一版本不会在发布了 赚积分,赶快重回高级进水坛 不错,点赞!!!!!!!!!!!! 仿PLC都做烂了,自己的工程还是直接做编单片机好! tjx0512 发表于 2016-4-12 22:05
仿PLC都做烂了,自己的工程还是直接做编单片机好!
估计你没看我的内容,这个纯粹研究,根本没想到要去赚钱,搞PLC去做市场,只是本着去探索的心态去研究,也就因为这个,所以才开源。你觉得这个不好,无视即可 只能看看玩玩,PLC市场太烂了,哎 djkc 发表于 2016-4-12 23:42
只能看看玩玩,PLC市场太烂了,哎
如果靠这个赚钱,的确比较难,如果想研究,我觉得哈有很多内容值得去思考 {:victory:}是的,楼主 谢谢分享…… 学习了,谢谢楼主分享。 下载来研究下,c8t6内存小,估计支持的指令应该不多吧 93434387@qq.com 发表于 2016-4-14 09:51
下载来研究下,c8t6内存小,估计支持的指令应该不多吧
用脑袋想想就知道了,支持的指令和内存无关 指令书和flash大小有关 ,内存小寄存器就少了。 我是来学习的 谢谢分享,最近正好想仿一个PLC出来。。能否把对应的原理图分享一下,谢谢!!! C1060825815 发表于 2016-5-28 17:09
谢谢分享,最近正好想仿一个PLC出来。。能否把对应的原理图分享一下,谢谢!!! ...
没有原理图;看看readme就懂了l youkebing 发表于 2016-5-28 17:15
没有原理图;看看readme就懂了l
好的,谢谢!!! 您好,LZ.PLC.EXE怎么打不开呢?“运行方式为 plc com9”怎么操作可以讲一下吗? qqq_147258 发表于 2016-6-25 22:50
您好,LZ.PLC.EXE怎么打不开呢?“运行方式为 plc com9”怎么操作可以讲一下吗? ...
先要保证你有那个串口 youkebing 发表于 2016-6-26 11:21
先要保证你有那个串口
串口是有的,但是运行方式是啥意思,双击打不开文件. 楼主,我用的WIN7 32 一打开PLC.EXE就自动退出了,我在虚拟串口里添加了COM9的。请问,有什么好办法没?
还有一个,就是,我用的KEIL 5 MDK5.17 打开,编译找不到fx1n_init();和 fx1n_excute(); 是程序哪里设置的问题吗?
非常感谢!!! liuyingqing139 发表于 2016-4-13 10:55
是的,楼主
你好,您打开PLC.EXE了吗?
我怎么打开就自己关闭?
是不是系统的差异?
您是什么系统?
youkebing 发表于 2016-6-26 11:21
先要保证你有那个串口
你好,LZ,串口9我是有的,之后我有用命令行打开,但是出现如图的问题,求指教。 qqq_147258 发表于 2016-9-22 10:58
你好,LZ,串口9我是有的,之后我有用命令行打开,但是出现如图的问题,求指教。 ...
这不是运行起来了吗? youkebing 发表于 2016-9-22 11:11
这不是运行起来了吗?
您这个程序没有界面是吗?
我没看到界面,以为还有问题呢,之前下载了就没有用过,正在看源码,请多多指教。 youkebing 发表于 2016-9-22 11:11
这不是运行起来了吗?
最后一行是什么意思呢?
SIOLOG.TXT是什么文件,原来文件是没有这个文件? qqq_147258 发表于 2016-9-22 11:26
最后一行是什么意思呢?
SIOLOG.TXT是什么文件,原来文件是没有这个文件? ...
按q关闭程序,
这个模拟了个三菱plc,你可以用虚拟串口软件模拟一对串口,这样就可以直接用三菱的软件调试了 不错,学习一下。 下载后提示有病毒 不错,学习一下,不过我电脑PLC.exe点不开,win10 64bit 这个支持发脉冲吗 脉冲频率多高啊 norton杀毒软件把PLC。EXE给杀了
谢谢楼主分享!! 谢谢楼主这种精神 tsmgxgl 发表于 2016-10-31 11:10
谢谢楼主这种精神
不用谢,要把代码跑起来,就是最大感谢{:handshake:} {:titter:}下载后发现运行不起来,不会用啊不会用 闲鱼翻身 发表于 2016-11-18 11:01
下载后发现运行不起来,不会用啊不会用
我正在计划做个arduino版本的,到时候我在更新下。 youkebing 发表于 2016-11-18 12:11
我正在计划做个arduino版本的,到时候我在更新下。
强烈支持~
谢谢楼主这种精神 以前也想过自己尝试弄个简易plc,这样便宜。现在发现,传统行业太穷了,现在互联网鸡犬升天,还不如去搞互联网的电子产品。。。。 315936392 发表于 2016-11-22 09:24
以前也想过自己尝试弄个简易plc,这样便宜。现在发现,传统行业太穷了,现在互联网鸡犬升天,还不如去搞互 ...
现在搞这个赚钱,可能性非常小,我只是爱好,玩玩。所以无所谓 http://www.amobbs.com/thread-5664217-1-1.html
arduino版本,欢迎大家试用 plc模拟器试验成功了,stm32链接失败 yongxiangu 发表于 2017-6-5 19:44
plc模拟器试验成功了,stm32链接失败
看看代码,应该都不是问题 yongxiangu 发表于 2017-6-5 19:44
plc模拟器试验成功了,stm32链接失败
推荐你买个小板,好像10几块钱,https://www.amobbs.com/thread-5664217-1-1.html 比较好奇的是对于PLC的输入接口是怎样实现输入滤波器的时间常数的设置的 marshallemon 发表于 2017-6-6 09:31
比较好奇的是对于PLC的输入接口是怎样实现输入滤波器的时间常数的设置的
这个和PLC其实没有必然的关系,应该就是普通的滤波 youkebing 发表于 2017-6-6 08:48
推荐你买个小板,好像10几块钱,https://www.amobbs.com/thread-5664217-1-1.html
嗯,我就用这块小板试的。目前用串口助手,发05和02 30 30 45 30 32 30 32 03 36 43这两条指令,回复都是对的。
只是gx works2连接还有些问题,回复是乱的,连接不上
yongxiangu 发表于 2017-6-6 12:19
嗯,我就用这块小板试的。目前用串口助手,发05和02 30 30 45 30 32 30 32 03 36 43这两条指令,回复都是 ...
我用的是Works2,测试没有问题,你可以在看看代码,应该没啥太大问题 youkebing 发表于 2017-6-6 12:23
我用的是Works2,测试没有问题,你可以在看看代码,应该没啥太大问题
是的,应该问题不大,我再试试 推荐你用arduino版本,这个是新一点的, youkebing 发表于 2017-6-6 12:08
这个和PLC其实没有必然的关系,应该就是普通的滤波
在siemens smart中 能对每个输入端口设置滤波时间长数时间常数从0.2uS~13mS,这个应该不是硬件的滤波,不知道软件上怎么实现比较好 好东东 了解下 youkebing 发表于 2017-6-6 12:23
我用的是Works2,测试没有问题,你可以在看看代码,应该没啥太大问题
换了一个u转串,可以下载了。如何检测test.gxw的运行结果对不对? yongxiangu 发表于 2017-6-7 08:45
换了一个u转串,可以下载了。如何检测test.gxw的运行结果对不对?
最简单的就是把io口引出来,看输出,其实用三菱调试也可以看出来 youkebing 发表于 2017-6-7 09:09
最简单的就是把io口引出来,看输出,其实用三菱调试也可以看出来
还没读代码,不知道X000,和Y000对应哪个引脚 yongxiangu 发表于 2017-6-7 09:57
还没读代码,不知道X000,和Y000对应哪个引脚
void fx1n_readX(u8t* buf, u32t length) {
}
void fx1n_writeY(u8t* buf, u32t length) {
}
重写这两个函数 void fx1n_readX(u8t* buf, u32t length) {
}
void fx1n_writeY(u8t* buf, u32t length) {
}
楼主,请问这2个函数怎么重写,可以示范一个案例吗? 论坛有个人分析基于51的PLC源码,写得很不错。。基于这个STM32的,可以探讨一下怎么样去实现PLC的原理。。因为内存方面相对51也不紧张,优化一下代码,性能应该很不错的。 sanjianke 发表于 2017-9-12 20:59
void fx1n_readX(u8t* buf, u32t length) {
}
void fx1n_writeY(u8t* buf, u32t length) {
readx表示读入外部输入口,比如你的一个输入口是1,那么*buf = 1;
writeY表示写输出。
楼主,你这个移植到STM32单片机中,
void fx1n_init(void) {
//u8t reset_i=1;
//unsigned inti;
//const u8t ArrPass[] ="PASS!\r\n\0";
//const u8t DefaultSet[] ="System in factory default.\r\n\0";
//u8t PLCButtonState;
iap_init();
reset_RAM();
FX1NPLCSoftwareVerCheck(); //上电,核实 PLC 软件版本号
//MJ 2010.01.11
//P1M0|=0x03;
//P1M1&=0xfc;
//核查 复位标志 . 判断是 冷启动 还是 热启动 .
// 冷启动 指从加电开始直到系统的处理命令进行完毕为止;
// 热启动 指在冷启动后,系统不断电的情况下在系统中通过软件实现的重新启动.
//if(((PCON&0x10)==0x10)) //冷启动
{
//PCON&=~0x10;
if((P1 & 0x03) == 0) //为合理使用 [运行/停止]按钮 .去掉 X0 X1两点输入.
{ //请不要再 PLC 程序中编写带有 X0 X1 的程序. 谢谢.
IAPFlashProgremMode(PLCStateRealAddr,PLCStateStop);
PLCRunFlag=0;
}
else
{
IAPFlashProgremMode(PLCStateRealAddr,PLCStateRun);
PLCRunFlag=1;
}
}
//else
PLCStateCheck(); //热启动
//PLCButtonState=P1 & 0x03;
PLCRunFlag = 1;
LastPLCStateFlag = PLCRunFlag;
CODE_scan();
PLCRunFlag = 1;
rM8xxx.BYTE = (rM8xxx.BYTE & 0xfc) | 0x01;
IAPFlashProgremMode(PLCStateRealAddr, PLCStateRun);
}
--------------------------------------------------------------
if((P1 & 0x03) == 0) //为合理使用 [运行/停止]按钮 .去掉 X0 X1两点输入.
这条语句中,STM32可是没有 P1 口哦。。。呵呵 sanjianke 发表于 2017-9-15 16:22
楼主,你这个移植到STM32单片机中,
void fx1n_init(void) {
//u8t reset_i=1;
难得你这么认真,我是51代码上迁移过来的,只是一时兴趣,一些地方没有改,你可以完善下, 楼主,这下会误导一些人的。 mark,留个信息看看 可以和三菱编程软件连接,下载不行! zhangfuhg 发表于 2018-4-9 22:53
可以和三菱编程软件连接,下载不行!
不知道你用的是什么环境,我用的是gx works2
GX Developer 这个版本比较小的
页:
[1]
2